]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/mds/SnapRealm.cc
update ceph source to reef 18.1.2
[ceph.git] / ceph / src / mds / SnapRealm.cc
index 3eb8976adf561256b887f192213306ff4e9d634b..c7a7d75bc242d0608731bdb1c04e83fa0f26641e 100644 (file)
@@ -47,10 +47,14 @@ ostream& operator<<(ostream& out, const SnapRealm& realm)
   if (realm.srnode.created != realm.srnode.current_parent_since)
     out << " cps " << realm.srnode.current_parent_since;
   out << " snaps=" << realm.srnode.snaps;
-  out << " past_parent_snaps=" << realm.srnode.past_parent_snaps;
+  if (realm.srnode.past_parent_snaps.size() > 0) {
+    out << " past_parent_snaps=" << realm.srnode.past_parent_snaps;
+  }
 
   if (realm.srnode.is_parent_global())
     out << " global ";
+  out << " last_modified " << realm.srnode.last_modified
+      << " change_attr " << realm.srnode.change_attr;
   out << " " << &realm << ")";
   return out;
 }
@@ -59,6 +63,9 @@ SnapRealm::SnapRealm(MDCache *c, CInode *in) :
     mdcache(c), inode(in), inodes_with_caps(member_offset(CInode, item_caps))
 {
   global = (inode->ino() == CEPH_INO_GLOBAL_SNAPREALM);
+  if (inode->ino() == CEPH_INO_ROOT) {
+    srnode.last_modified = in->get_inode()->mtime;
+  }
 }
 
 /*
@@ -383,9 +390,16 @@ const bufferlist& SnapRealm::get_snap_trace() const
   return cached_snap_trace;
 }
 
+const bufferlist& SnapRealm::get_snap_trace_new() const
+{
+  check_cache();
+  return cached_snap_trace_new;
+}
+
 void SnapRealm::build_snap_trace() const
 {
   cached_snap_trace.clear();
+  cached_snap_trace_new.clear();
 
   if (global) {
     SnapRealmInfo info(inode->ino(), 0, cached_seq, 0);
@@ -394,7 +408,10 @@ void SnapRealm::build_snap_trace() const
       info.my_snaps.push_back(*p);
 
     dout(10) << "build_snap_trace my_snaps " << info.my_snaps << dendl;
+
+    SnapRealmInfoNew ninfo(info, srnode.last_modified, srnode.change_attr);
     encode(info, cached_snap_trace);
+    encode(ninfo, cached_snap_trace_new);
     return;
   }
 
@@ -427,10 +444,15 @@ void SnapRealm::build_snap_trace() const
     info.my_snaps.push_back(p->first);
   dout(10) << "build_snap_trace my_snaps " << info.my_snaps << dendl;
 
+  SnapRealmInfoNew ninfo(info, srnode.last_modified, srnode.change_attr);
+
   encode(info, cached_snap_trace);
+  encode(ninfo, cached_snap_trace_new);
 
-  if (parent)
+  if (parent) {
     cached_snap_trace.append(parent->get_snap_trace());
+    cached_snap_trace_new.append(parent->get_snap_trace_new());
+  }
 }
 
 void SnapRealm::prune_past_parent_snaps()