]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/client/ClientSnapRealm.cc
import quincy beta 17.1.0
[ceph.git] / ceph / src / client / ClientSnapRealm.cc
index 3656fbdf5052dff6bb2b85745648ff39054aa61d..2ddd86f8a3c45f42c57e9a076cead60a57c63d29 100644 (file)
@@ -4,6 +4,40 @@
 #include "ClientSnapRealm.h"
 #include "common/Formatter.h"
 
+using std::set;
+using std::vector;
+
+void SnapRealm::build_snap_context()
+{
+  set<snapid_t> snaps;
+  snapid_t max_seq = seq;
+
+  // start with prior_parents?
+  for (unsigned i=0; i<prior_parent_snaps.size(); i++)
+    snaps.insert(prior_parent_snaps[i]);
+
+  // current parent's snaps
+  if (pparent) {
+    const SnapContext& psnapc = pparent->get_snap_context();
+    for (unsigned i=0; i<psnapc.snaps.size(); i++)
+      if (psnapc.snaps[i] >= parent_since)
+       snaps.insert(psnapc.snaps[i]);
+    if (psnapc.seq > max_seq)
+      max_seq = psnapc.seq;
+  }
+
+  // my snaps
+  for (unsigned i=0; i<my_snaps.size(); i++)
+    snaps.insert(my_snaps[i]);
+
+  // ok!
+  cached_snap_context.seq = max_seq;
+  cached_snap_context.snaps.resize(0);
+  cached_snap_context.snaps.reserve(snaps.size());
+  for (set<snapid_t>::reverse_iterator p = snaps.rbegin(); p != snaps.rend(); ++p)
+    cached_snap_context.snaps.push_back(*p);
+}
+
 void SnapRealm::dump(Formatter *f) const
 {
   f->dump_stream("ino") << ino;