]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
PG/ReplicatedPG: move snap map management into append_log
authorSamuel Just <sam.just@inktank.com>
Fri, 11 Oct 2013 00:12:48 +0000 (17:12 -0700)
committerSamuel Just <sam.just@inktank.com>
Wed, 22 Jan 2014 22:39:15 +0000 (14:39 -0800)
Both the replica and the primary should use the same append_log
mechanism to update the snap map.

Signed-off-by: Samuel Just <sam.just@inktank.com>
src/osd/PG.cc
src/osd/PG.h
src/osd/ReplicatedPG.cc

index 8aaf18184c176c298d00adbe60d80016a8aa9b55..f6caa0809bf203f2cb2b287192eaa388ca6e7a5e 100644 (file)
@@ -2315,8 +2315,11 @@ void PG::add_log_entry(pg_log_entry_t& e, bufferlist& log_bl)
 
 
 void PG::append_log(
-  vector<pg_log_entry_t>& logv, eversion_t trim_to, ObjectStore::Transaction &t)
+  vector<pg_log_entry_t>& logv, eversion_t trim_to, ObjectStore::Transaction &t,
+  bool do_update_snap_map)
 {
+  if (do_update_snap_map)
+    update_snap_map(logv, t);
   dout(10) << "append_log " << pg_log.get_log() << " " << logv << dendl;
 
   map<string,bufferlist> keys;
index 40417cf60f9f3a80eabf720adb3490dd9af24680..1c143d2d300dd6cd4435f4b0208d86c88ba22523 100644 (file)
@@ -1726,7 +1726,8 @@ public:
 
   void add_log_entry(pg_log_entry_t& e, bufferlist& log_bl);
   void append_log(
-    vector<pg_log_entry_t>& logv, eversion_t trim_to, ObjectStore::Transaction &t);
+    vector<pg_log_entry_t>& logv, eversion_t trim_to, ObjectStore::Transaction &t,
+    bool update_snap_map = true);
   bool check_log_for_corruption(ObjectStore *store);
   void trim_peers();
 
index 0d02ea7e0c7a555b3648e48aa51bf05647f81be0..bb988d81ec87927af5aeb51a524d00d525f4389c 100644 (file)
@@ -2135,8 +2135,6 @@ ReplicatedPG::RepGather *ReplicatedPG::trim_object(const hobject_t &coid)
   ctx->at_version = get_next_version();
 
   ObjectStore::Transaction *t = &ctx->op_t;
-  OSDriver::OSTransaction os_t(osdriver.get_transaction(t));
-    
   set<snapid_t> new_snaps;
   for (set<snapid_t>::iterator i = old_snaps.begin();
        i != old_snaps.end();
@@ -2145,17 +2143,6 @@ ReplicatedPG::RepGather *ReplicatedPG::trim_object(const hobject_t &coid)
       new_snaps.insert(*i);
   }
 
-  r = snap_mapper.update_snaps(
-    coid,
-    new_snaps,
-    &old_snaps, // debug
-    &os_t);
-  if (r != 0) {
-    derr << __func__ << ": snap_mapper.update_snap returned "
-        << cpp_strerror(r) << dendl;
-    assert(0);
-  }
-
   if (new_snaps.empty()) {
     // remove clone
     dout(10) << coid << " snaps " << old_snaps << " -> "
@@ -4359,10 +4346,6 @@ void ReplicatedPG::make_writeable(OpContext *ctx)
       snap_oi->set_flag(object_info_t::FLAG_DIRTY);
     _make_clone(t, soid, coid, snap_oi);
     
-    OSDriver::OSTransaction _t(osdriver.get_transaction(&(ctx->local_t)));
-    set<snapid_t> _snaps(snaps.begin(), snaps.end());
-    snap_mapper.add_oid(coid, _snaps, &_t);
-    
     ctx->delta_stats.num_objects++;
     if (snap_oi->is_dirty())
       ctx->delta_stats.num_objects_dirty++;
@@ -4700,7 +4683,6 @@ void ReplicatedPG::finish_ctx(OpContext *ctx, int log_op_type)
                                    ctx->user_at_version, ctx->reqid,
                                    ctx->mtime));
   if (soid.snap < CEPH_NOSNAP) {
-    OSDriver::OSTransaction _t(osdriver.get_transaction(&(ctx->local_t)));
     set<snapid_t> _snaps(ctx->new_obs.oi.snaps.begin(),
                         ctx->new_obs.oi.snaps.end());
     switch (log_op_type) {
@@ -4709,15 +4691,13 @@ void ReplicatedPG::finish_ctx(OpContext *ctx, int log_op_type)
       dout(20) << __func__ << " encoding snaps " << ctx->new_obs.oi.snaps
               << dendl;
       ::encode(ctx->new_obs.oi.snaps, ctx->log.back().snaps);
-      snap_mapper.add_oid(soid, _snaps, &_t);
       break;
     case pg_log_entry_t::CLEAN:
       dout(20) << __func__ << " encoding snaps " << ctx->new_obs.oi.snaps
               << dendl;
       ::encode(ctx->new_obs.oi.snaps, ctx->log.back().snaps);
       break;
-    case pg_log_entry_t::DELETE:
-      snap_mapper.remove_oid(soid, &_t);
+    default:
       break;
     }
   }
@@ -6689,14 +6669,15 @@ void ReplicatedPG::sub_op_modify(OpRequestRef op)
     rm->opt.set_replica();
 
     info.stats = m->pg_stats;
+    bool update_snaps = false;
     if (!rm->opt.empty()) {
       // If the opt is non-empty, we infer we are before
       // last_backfill (according to the primary, not our
       // not-quite-accurate value), and should update the
       // collections now.  Otherwise, we do it later on push.
-      update_snap_map(log, rm->localt);
+      update_snaps = true;
     }
-    append_log(log, m->pg_trim_to, rm->localt);
+    append_log(log, m->pg_trim_to, rm->localt, update_snaps);
 
     rm->tls.push_back(&rm->localt);
     rm->tls.push_back(&rm->opt);