From: Greg Farnum Date: Wed, 28 Aug 2013 00:14:56 +0000 (-0700) Subject: osd: actually fill in user_version in pg_log_entry_t X-Git-Tag: v0.69~40^2~6 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=dc9d3fc357ab0b638620a90139a58b2c092330bb;p=ceph.git osd: actually fill in user_version in pg_log_entry_t We now require it when creating a pg_log_entry_t. The user_version is the version which info.last_user_version should be set to after the transaction is applied, which for everything except for a user-modify op is going to be the version it was already at. For now we are filling in the user-modify op's changing user_version to be ctx->at_version.version Signed-off-by: Greg Farnum --- diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc index 70bfc893ce62..71e5a28b4cd4 100644 --- a/src/osd/ReplicatedPG.cc +++ b/src/osd/ReplicatedPG.cc @@ -1581,6 +1581,7 @@ ReplicatedPG::RepGather *ReplicatedPG::trim_object(const hobject_t &coid) coid, ctx->at_version, ctx->obs->oi.version, + info.last_user_version, osd_reqid_t(), ctx->mtime) ); @@ -1603,6 +1604,7 @@ ReplicatedPG::RepGather *ReplicatedPG::trim_object(const hobject_t &coid) coid, coi.version, coi.prior_version, + info.last_user_version, osd_reqid_t(), ctx->mtime) ); @@ -1628,6 +1630,7 @@ ReplicatedPG::RepGather *ReplicatedPG::trim_object(const hobject_t &coid) snapoid, ctx->at_version, ctx->snapset_obc->obs.oi.version, + info.last_user_version, osd_reqid_t(), ctx->mtime) ); @@ -1642,6 +1645,7 @@ ReplicatedPG::RepGather *ReplicatedPG::trim_object(const hobject_t &coid) snapoid, ctx->at_version, ctx->snapset_obc->obs.oi.version, + info.last_user_version, osd_reqid_t(), ctx->mtime) ); @@ -3603,7 +3607,8 @@ void ReplicatedPG::make_writeable(OpContext *ctx) << " to " << coid << " v " << ctx->at_version << " snaps=" << snaps << dendl; ctx->log.push_back(pg_log_entry_t(pg_log_entry_t::CLONE, coid, ctx->at_version, - ctx->obs->oi.version, ctx->reqid, ctx->new_obs.oi.mtime)); + ctx->obs->oi.version, info.last_user_version, + ctx->reqid, ctx->new_obs.oi.mtime)); ::encode(snaps, ctx->log.back().snaps); ctx->at_version.version++; @@ -3817,7 +3822,7 @@ int ReplicatedPG::prepare_transaction(OpContext *ctx) dout(10) << " removing old " << snapoid << dendl; ctx->log.push_back(pg_log_entry_t(pg_log_entry_t::DELETE, snapoid, ctx->at_version, old_version, - osd_reqid_t(), ctx->mtime)); + info.last_user_version, osd_reqid_t(), ctx->mtime)); ctx->at_version.version++; ctx->snapset_obc->obs.exists = false; @@ -3831,7 +3836,7 @@ int ReplicatedPG::prepare_transaction(OpContext *ctx) dout(10) << " final snapset " << ctx->new_snapset << " in " << snapoid << dendl; ctx->log.push_back(pg_log_entry_t(pg_log_entry_t::MODIFY, snapoid, ctx->at_version, old_version, - osd_reqid_t(), ctx->mtime)); + info.last_user_version, osd_reqid_t(), ctx->mtime)); ctx->snapset_obc = get_object_context(snapoid, true); ctx->snapset_obc->obs.exists = true; @@ -3881,7 +3886,7 @@ int ReplicatedPG::prepare_transaction(OpContext *ctx) if (!ctx->new_obs.exists) logopcode = pg_log_entry_t::DELETE; ctx->log.push_back(pg_log_entry_t(logopcode, soid, ctx->at_version, old_version, - ctx->reqid, ctx->mtime)); + ctx->at_version.version, ctx->reqid, ctx->mtime)); // apply new object state. ctx->obc->obs = ctx->new_obs; @@ -4495,6 +4500,7 @@ void ReplicatedPG::handle_watch_timeout(WatchRef watch) ctx->log.push_back(pg_log_entry_t(pg_log_entry_t::MODIFY, obc->obs.oi.soid, ctx->at_version, obc->obs.oi.version, + info.last_user_version, osd_reqid_t(), ctx->mtime)); eversion_t old_last_update = pg_log.get_head(); @@ -6452,7 +6458,7 @@ ObjectContext *ReplicatedPG::mark_object_lost(ObjectStore::Transaction *t, // Add log entry ++info.last_update.version; - pg_log_entry_t e(what, oid, info.last_update, version, osd_reqid_t(), mtime); + pg_log_entry_t e(what, oid, info.last_update, version, info.last_user_version, osd_reqid_t(), mtime); pg_log.add(e); ObjectContext *obc = get_object_context(oid, true); @@ -6523,7 +6529,7 @@ void ReplicatedPG::mark_all_unfound_lost(int what) ++info.last_update.version; pg_log_entry_t e( pg_log_entry_t::LOST_REVERT, oid, info.last_update, - m->second.need, osd_reqid_t(), mtime); + m->second.need, info.last_user_version, osd_reqid_t(), mtime); e.reverting_to = prev; pg_log.add(e); dout(10) << e << dendl; @@ -6540,7 +6546,7 @@ void ReplicatedPG::mark_all_unfound_lost(int what) // log it ++info.last_update.version; pg_log_entry_t e(pg_log_entry_t::LOST_DELETE, oid, info.last_update, m->second.need, - osd_reqid_t(), mtime); + info.last_user_version, osd_reqid_t(), mtime); pg_log.add(e); dout(10) << e << dendl; diff --git a/src/osd/osd_types.cc b/src/osd/osd_types.cc index 3f6045568d8a..390c6a16baf4 100644 --- a/src/osd/osd_types.cc +++ b/src/osd/osd_types.cc @@ -2021,7 +2021,8 @@ void pg_log_entry_t::generate_test_instances(list& o) o.push_back(new pg_log_entry_t()); hobject_t oid(object_t("objname"), "key", 123, 456, 0, ""); o.push_back(new pg_log_entry_t(MODIFY, oid, eversion_t(1,2), eversion_t(3,4), - osd_reqid_t(entity_name_t::CLIENT(777), 8, 999), utime_t(8,9))); + 1, osd_reqid_t(entity_name_t::CLIENT(777), 8, 999), + utime_t(8,9))); } ostream& operator<<(ostream& out, const pg_log_entry_t& e) diff --git a/src/osd/osd_types.h b/src/osd/osd_types.h index ea399573eb0a..fc976ceaf1a3 100644 --- a/src/osd/osd_types.h +++ b/src/osd/osd_types.h @@ -1499,9 +1499,10 @@ struct pg_log_entry_t { invalid_hash(false), invalid_pool(false), offset(0) {} pg_log_entry_t(int _op, const hobject_t& _soid, const eversion_t& v, const eversion_t& pv, + version_t uv, const osd_reqid_t& rid, const utime_t& mt) : op(_op), soid(_soid), version(v), - prior_version(pv), user_version(0), + prior_version(pv), user_version(uv), reqid(rid), mtime(mt), invalid_hash(false), invalid_pool(false), offset(0) {} diff --git a/src/test/test_osd_types.cc b/src/test/test_osd_types.cc index 730a8ffdc5d0..2a402aa4bf6b 100644 --- a/src/test/test_osd_types.cc +++ b/src/test/test_osd_types.cc @@ -712,7 +712,8 @@ TEST(pg_missing_t, add_next_event) eversion_t version(10,5); eversion_t prior_version(3,4); pg_log_entry_t sample_e(pg_log_entry_t::DELETE, oid, version, prior_version, - osd_reqid_t(entity_name_t::CLIENT(777), 8, 999), utime_t(8,9)); + 0, osd_reqid_t(entity_name_t::CLIENT(777), 8, 999), + utime_t(8,9)); // new object (MODIFY) {