]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
osd: don't update rollback_info for replicated pool
authorNing Yao <zay11022@gmail.com>
Wed, 25 Nov 2015 15:07:44 +0000 (23:07 +0800)
committerNing Yao <zay11022@gmail.com>
Thu, 26 Nov 2015 02:08:20 +0000 (10:08 +0800)
rollback_info is just needed for ec-pool to rollback the patial committed chunks to previous version. Avoid recording rollback_info in replicated pool to save cpu cost and disk bandwidth

Signed-off-by: Ning Yao <zay11022@gmail.com>
src/osd/PG.cc
src/osd/PGLog.cc
src/osd/PGLog.h
src/tools/ceph_objectstore_tool.cc

index 2d4b51c174b0ceb1e2b38dd4a080f20944d0aceb..5d8eea202004ba347b7d5d79f2ba64ba6aba48d5 100644 (file)
@@ -2791,7 +2791,7 @@ void PG::write_if_dirty(ObjectStore::Transaction& t)
   map<string,bufferlist> km;
   if (dirty_big_info || dirty_info)
     prepare_write_info(&km);
-  pg_log.write_log(t, &km, coll, pgmeta_oid);
+  pg_log.write_log(t, &km, coll, pgmeta_oid, pool.info.require_rollback());
   if (!km.empty())
     t.omap_setkeys(coll, pgmeta_oid, km);
 }
index 86dbd3a849649a1c42bcbe86bf2fe27085b81721..4e52894a48f180a4e59912e06feea8ad77850584 100644 (file)
@@ -739,7 +739,8 @@ void PGLog::check() {
 void PGLog::write_log(
   ObjectStore::Transaction& t,
   map<string,bufferlist> *km,
-  const coll_t& coll, const ghobject_t &log_oid)
+  const coll_t& coll, const ghobject_t &log_oid,
+  bool require_rollback)
 {
   if (is_dirty()) {
     dout(5) << "write_log with: "
@@ -759,6 +760,7 @@ void PGLog::write_log(
       trimmed,
       dirty_divergent_priors,
       !touched_log,
+      require_rollback,
       (pg_log_debug ? &log_keys_debug : 0));
     undirty();
   } else {
@@ -771,13 +773,14 @@ void PGLog::write_log(
     map<string,bufferlist> *km,
     pg_log_t &log,
     const coll_t& coll, const ghobject_t &log_oid,
-    map<eversion_t, hobject_t> &divergent_priors)
+    map<eversion_t, hobject_t> &divergent_priors,
+    bool require_rollback)
 {
   _write_log(
     t, km, log, coll, log_oid,
     divergent_priors, eversion_t::max(), eversion_t(), eversion_t(),
     set<eversion_t>(),
-    true, true, 0);
+    true, true, require_rollback, 0);
 }
 
 void PGLog::_write_log(
@@ -792,6 +795,7 @@ void PGLog::_write_log(
   const set<eversion_t> &trimmed,
   bool dirty_divergent_priors,
   bool touch_log,
+  bool require_rollback,
   set<string> *log_keys_debug
   )
 {
@@ -856,8 +860,10 @@ void PGLog::_write_log(
     //dout(10) << "write_log: writing divergent_priors" << dendl;
     ::encode(divergent_priors, (*km)["divergent_priors"]);
   }
-  ::encode(log.can_rollback_to, (*km)["can_rollback_to"]);
-  ::encode(log.rollback_info_trimmed_to, (*km)["rollback_info_trimmed_to"]);
+  if (require_rollback) {
+    ::encode(log.can_rollback_to, (*km)["can_rollback_to"]);
+    ::encode(log.rollback_info_trimmed_to, (*km)["rollback_info_trimmed_to"]);
+  }
 
   if (!to_remove.empty())
     t.omap_rmkeys(coll, log_oid, to_remove);
index 744f31883e730c4516bc0f3b3a3b5c6fcc12e380..bd6c64f01935b39ef0e459d5d83dc66d38a10421 100644 (file)
@@ -646,14 +646,16 @@ public:
   void write_log(ObjectStore::Transaction& t,
                 map<string,bufferlist> *km,
                 const coll_t& coll,
-                const ghobject_t &log_oid);
+                const ghobject_t &log_oid,
+                bool require_rollback);
 
   static void write_log(
     ObjectStore::Transaction& t,
     map<string,bufferlist>* km,
     pg_log_t &log,
     const coll_t& coll,
-    const ghobject_t &log_oid, map<eversion_t, hobject_t> &divergent_priors);
+    const ghobject_t &log_oid, map<eversion_t, hobject_t> &divergent_priors,
+    bool require_rollback);
 
   static void _write_log(
     ObjectStore::Transaction& t,
@@ -667,6 +669,7 @@ public:
     const set<eversion_t> &trimmed,
     bool dirty_divergent_priors,
     bool touch_log,
+    bool require_rollback,
     set<string> *log_keys_debug
     );
 
index 8eb7dcf534b523dc8836b00a3c9370ea93680329..3a06fff72f4c1d0d638f9beb00e4c0248a060144 100644 (file)
@@ -545,7 +545,7 @@ int write_pg(ObjectStore::Transaction &t, epoch_t epoch, pg_info_t &info,
     return ret;
   coll_t coll(info.pgid);
   map<string,bufferlist> km;
-  PGLog::write_log(t, &km, log, coll, info.pgid.make_pgmeta_oid(), divergent_priors);
+  PGLog::write_log(t, &km, log, coll, info.pgid.make_pgmeta_oid(), divergent_priors, true);
   t.omap_setkeys(coll, info.pgid.make_pgmeta_oid(), km);
   return 0;
 }