]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: initialize snaprealm created, current_parent_since on creation
authorSage Weil <sage@newdream.net>
Tue, 20 Jul 2010 22:59:11 +0000 (15:59 -0700)
committerSage Weil <sage@newdream.net>
Wed, 21 Jul 2010 20:30:21 +0000 (13:30 -0700)
Need to initialize created and current_parent_since on new snaprealms
when they are created, or else we get incorrect results from the likes of
SnapRealm::get_snap_info() (e.g., parent snaps from before we were
created).

src/mds/MDCache.cc
src/mds/Server.cc
src/mds/snap.cc

index f94a91201e3afb01999f5ad0dd6b400626715659..d6fcb89883b78f77b1d1ff7b769eee6acdd094c4 100644 (file)
@@ -6917,7 +6917,9 @@ void MDCache::_snaprealm_create_finish(MDRequest *mdr, Mutation *mut, CInode *in
   ::decode(seq, p);
 
   in->open_snaprealm();
-  in->snaprealm->seq = in->snaprealm->created = seq;
+  in->snaprealm->seq = seq;
+  in->snaprealm->created = seq;
+  in->snaprealm->current_parent_since = seq;
 
   do_realm_invalidate_and_update_notify(in, CEPH_SNAP_OP_SPLIT);
 
index 3e52de962220eda9f864c1ae99a1048f65fefcf6..3e23450763cdc7aaef691aeb8d07367eec3f905f 100644 (file)
@@ -5587,6 +5587,7 @@ void Server::handle_client_mksnap(MDRequest *mdr)
     newrealm = true;
     diri->open_snaprealm(true);
     diri->snaprealm->created = snapid;
+    diri->snaprealm->current_parent_since = snapid;
   }
   snapid_t old_seq = diri->snaprealm->seq;
   snapid_t old_lc = diri->snaprealm->last_created;
@@ -5621,6 +5622,7 @@ void Server::_mksnap_finish(MDRequest *mdr, CInode *diri, SnapInfo &info)
   if (!diri->snaprealm) {
     diri->open_snaprealm();
     diri->snaprealm->created = snapid;
+    diri->snaprealm->current_parent_since = snapid;
     op = CEPH_SNAP_OP_SPLIT;
   }
   diri->snaprealm->snaps[snapid] = info;
index f43ac0133a6a51ab507752f63729a8546372915e..a2dcb6c7b58c1025a6a11556fb7bfe832fa6f2f3 100644 (file)
@@ -37,7 +37,10 @@ ostream& operator<<(ostream& out, const SnapRealm& realm)
   out << "snaprealm(" << realm.inode->ino()
       << " seq " << realm.seq
       << " lc " << realm.last_created
-      << " snaps=" << realm.snaps;
+      << " cr " << realm.created;
+  if (realm.created != realm.current_parent_since)
+    out << " cps " << realm.current_parent_since;
+  out << " snaps=" << realm.snaps;
   if (realm.past_parents.size()) {
     out << " past_parents=(";
     for (map<snapid_t, snaplink_t>::const_iterator p = realm.past_parents.begin();