From: Samuel Just Date: Fri, 11 Oct 2013 00:12:48 +0000 (-0700) Subject: PG/ReplicatedPG: move snap map management into append_log X-Git-Tag: v0.78~286^2~36 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=09717e6d5e12e9f93dbf4f0ecf089551b611dfd9;p=ceph.git PG/ReplicatedPG: move snap map management into append_log Both the replica and the primary should use the same append_log mechanism to update the snap map. Signed-off-by: Samuel Just --- diff --git a/src/osd/PG.cc b/src/osd/PG.cc index 8aaf18184c17..f6caa0809bf2 100644 --- a/src/osd/PG.cc +++ b/src/osd/PG.cc @@ -2315,8 +2315,11 @@ void PG::add_log_entry(pg_log_entry_t& e, bufferlist& log_bl) void PG::append_log( - vector& logv, eversion_t trim_to, ObjectStore::Transaction &t) + vector& 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 keys; diff --git a/src/osd/PG.h b/src/osd/PG.h index 40417cf60f9f..1c143d2d300d 100644 --- a/src/osd/PG.h +++ b/src/osd/PG.h @@ -1726,7 +1726,8 @@ public: void add_log_entry(pg_log_entry_t& e, bufferlist& log_bl); void append_log( - vector& logv, eversion_t trim_to, ObjectStore::Transaction &t); + vector& logv, eversion_t trim_to, ObjectStore::Transaction &t, + bool update_snap_map = true); bool check_log_for_corruption(ObjectStore *store); void trim_peers(); diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc index 0d02ea7e0c7a..bb988d81ec87 100644 --- a/src/osd/ReplicatedPG.cc +++ b/src/osd/ReplicatedPG.cc @@ -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 new_snaps; for (set::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 _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 _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);