]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: actually fill in user_version in pg_log_entry_t
authorGreg Farnum <greg@inktank.com>
Wed, 28 Aug 2013 00:14:56 +0000 (17:14 -0700)
committerGreg Farnum <greg@inktank.com>
Wed, 28 Aug 2013 00:24:50 +0000 (17:24 -0700)
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 <greg@inktank.com>
src/osd/ReplicatedPG.cc
src/osd/osd_types.cc
src/osd/osd_types.h
src/test/test_osd_types.cc

index 70bfc893ce624af377df605ce94cdb562dada087..71e5a28b4cd4a563e2c8d8360f6753616e7ad869 100644 (file)
@@ -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;
 
index 3f6045568d8a1be53e04de2eaee8322872cc7c4d..390c6a16baf4e49bd348a660575779da9245fd98 100644 (file)
@@ -2021,7 +2021,8 @@ void pg_log_entry_t::generate_test_instances(list<pg_log_entry_t*>& 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)
index ea399573eb0a8564ce3d8853e3a90f686f27d00b..fc976ceaf1a31f599a9b3212eabf85f41abc2011 100644 (file)
@@ -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) {}
       
index 730a8ffdc5d0161180b325871ca8dc6e476d142f..2a402aa4bf6b0a9df492579dbf9e3a3e7fbae64f 100644 (file)
@@ -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)
   {