]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
ReplicatedPG: correctly handle new snap collections on replica
authorSamuel Just <sam.just@inktank.com>
Sat, 12 Jan 2013 00:43:14 +0000 (16:43 -0800)
committerSamuel Just <sam.just@inktank.com>
Wed, 16 Jan 2013 22:42:43 +0000 (14:42 -0800)
Backport: bobtail
Signed-off-by: Samuel Just <sam.just@inktank.com>
Reviewed-by: Sage Weil <sage@inktank.com>
src/osd/PG.cc
src/osd/ReplicatedPG.cc

index 0d17211a5e1ba5824ad7795b3592fa058e221d64..7b2a0ec5a10049812dad4c559ad1ce059341ea5d 100644 (file)
@@ -2921,13 +2921,19 @@ void PG::update_snap_collections(vector<pg_log_entry_t> &log_entries,
     // If past backfill line, snap_collections will be updated during push
     if (i->soid > info.last_backfill)
       continue;
-    if (i->is_clone()) {
+    if (i->snaps.length() > 0) {
       vector<snapid_t> snaps;
       bufferlist::iterator p = i->snaps.begin();
-      ::decode(snaps, p);
-      make_snap_collection(t, snaps[0]);
-      if (snaps.size() > 1)
-       make_snap_collection(t, *(snaps.rbegin()));
+      try {
+       ::decode(snaps, p);
+      } catch (...) {
+       snaps.clear();
+      }
+      if (snaps.size()) {
+       make_snap_collection(t, snaps[0]);
+       if (snaps.size() > 1)
+         make_snap_collection(t, *(snaps.rbegin()));
+      }
     }
   }
 }
index 43361e503c1a0af88a44b8145cf69002b2ca0d48..d267a3c2c27549ef6fc53a349639e4f1dc01993a 100644 (file)
@@ -1437,7 +1437,7 @@ ReplicatedPG::RepGather *ReplicatedPG::trim_object(const hobject_t &coid,
 
     ctx->log.push_back(pg_log_entry_t(pg_log_entry_t::MODIFY, coid, coi.version, coi.prior_version,
                                  osd_reqid_t(), ctx->mtime));
-    ::encode(coi, ctx->log.back().snaps);
+    ::encode(coi.snaps, ctx->log.back().snaps);
     ctx->at_version.version++;
   }