]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: add SnapRealm projection methods
authorGreg Farnum <gregf@hq.newdream.net>
Thu, 12 Aug 2010 21:11:17 +0000 (14:11 -0700)
committerGreg Farnum <gregf@hq.newdream.net>
Mon, 16 Aug 2010 22:41:39 +0000 (15:41 -0700)
src/mds/snap.cc
src/mds/snap.h

index a04dafb2f29721e38241e7de2b98d9e03406cc22..992b45f3a75e3aa7959778d586b45ed65e22e2ef 100644 (file)
@@ -530,3 +530,23 @@ void SnapRealm::prune_past_parents()
     }
   }
 }
+
+sr_t *SnapRealm::project_snaprealm()
+{
+  if (projected_srnode.empty())
+    projected_srnode.push_back(new sr_t(srnode));
+  else
+    projected_srnode.push_back(new sr_t(*projected_srnode.back()));
+  dout(0) << "project_snaprealm " << projected_srnode.back() << dendl;
+  return projected_srnode.back();
+}
+
+void SnapRealm::pop_projected_snaprealm()
+{
+  assert(!projected_srnode.empty());
+  dout(0) << "pop_projected_snaprealm " << projected_srnode.front()
+          << " seq" << projected_srnode.front()->seq << dendl;
+  srnode = *projected_srnode.front();
+  delete projected_srnode.front();
+  projected_srnode.pop_front();
+}
index 0dac3438ee69b8a2bea8e50fadf677fd713eaea2..aec11747b7bb3b1c2cfe92694346a1e1453795f4 100644 (file)
@@ -139,6 +139,7 @@ struct SnapRealm {
   // realm state
 
   sr_t srnode;
+  list<sr_t*> projected_srnode;
 
   void encode(bufferlist& bl) const {
     __u8 struct_v = 2;
@@ -273,6 +274,15 @@ struct SnapRealm {
     if (client_caps[client].empty())
       client_caps.erase(client);
   }
+
+  sr_t *get_projected_snaprealm() {
+    if (projected_srnode.empty())
+      return &srnode;
+    else
+      return projected_srnode.back();
+  }
+  sr_t *project_snaprealm();
+  void pop_projected_snaprealm();
 };
 WRITE_CLASS_ENCODER(SnapRealm)