]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
PG: remove old log when we upgrade log version
authorSamuel Just <sam.just@inktank.com>
Tue, 20 Aug 2013 00:23:44 +0000 (17:23 -0700)
committerSage Weil <sage@inktank.com>
Tue, 20 Aug 2013 05:52:52 +0000 (22:52 -0700)
Otherwise the log_oid will be non-empty and the next
boot will cause us to try to upgrade again.

Fixes: #6057
Signed-off-by: Samuel Just <sam.just@inktank.com>
Reviewed-by: Sage Weil <sage@inktank.com>
(cherry picked from commit 1f851cb2489a95526de932ec6734ebf413e43490)

src/osd/PG.cc
src/osd/PGLog.h

index 00c0c15d55736b810f7dd222e9692c4a195d3632..e06ddbb0e343050d6c4450b462729a4b7d5362aa 100644 (file)
@@ -2438,7 +2438,9 @@ void PG::read_state(ObjectStore *store, bufferlist &bl)
     /* We don't want to leave the old format around in case the next log
      * write happens to be an append_log()
      */
+    pg_log.mark_log_for_rewrite();
     ObjectStore::Transaction t;
+    t.remove(coll_t(), log_oid); // remove old version
     pg_log.write_log(t, log_oid);
     int r = osd->store->apply_transaction(t);
     assert(!r);
index 955b9c18937d72466f2f5296cf7a9d8e00a517ad..552f9b0cee96b4246c0571239fe403cb0f41db22 100644 (file)
@@ -180,6 +180,13 @@ protected:
     divergent_priors.insert(make_pair(version, obj));
     dirty_divergent_priors = true;
   }
+public:
+  void mark_log_for_rewrite() {
+    mark_dirty_to(eversion_t::max());
+    mark_dirty_from(eversion_t());
+    touched_log = false;
+  }
+protected:
 
   /// DEBUG
   set<string> log_keys_debug;