]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
PGLog: clear missing on backfill reset
authorSamuel Just <sam.just@inktank.com>
Tue, 11 Jun 2013 22:42:28 +0000 (15:42 -0700)
committerSamuel Just <sam.just@inktank.com>
Mon, 17 Jun 2013 21:50:52 +0000 (14:50 -0700)
When backfill is reset, the missing set should be cleared
since all objects are >last_backfill.

Fixes: #5320
Signed-off-by: Samuel Just <sam.just@inktank.com>
src/osd/PG.cc
src/osd/PGLog.cc
src/osd/PGLog.h

index c343fa54161b6537f29375dc0387f596238357f0..e021c26c83a7dfa44fdd573e10c1598900a62047 100644 (file)
@@ -6260,6 +6260,7 @@ boost::statechart::result PG::RecoveryState::Stray::react(const MLogRec& logevt)
     pg->dirty_big_info = true;  // maybe.
     pg->dirty_log = true;
     pg->pg_log.claim_log(msg->log);
+    pg->pg_log.reset_backfill();
   } else {
     ObjectStore::Transaction* t = context<RecoveryMachine>().get_cur_transaction();
     pg->merge_log(*t, msg->info, msg->log, logevt.from);
index cc897e00ae8d1575b50ec22bf5d8284d59ebd2fc..e698de3c4451d6ab0a7e4548f2c1ff7e9bba0ed4 100644 (file)
@@ -103,6 +103,13 @@ ostream& PGLog::IndexedLog::print(ostream& out) const
 
 //////////////////// PGLog ////////////////////
 
+void PGLog::reset_backfill()
+{
+  missing.clear();
+  divergent_priors.clear();
+  dirty_divergent_priors = true;
+}
+
 void PGLog::clear() {
   ondisklog.zero();
   ondisklog.has_checksums = true;
index 00bb72ad3adbfd2443456e8bcebc9be28d083d07..f59c285612645f7f495881712593dc486045441a 100644 (file)
@@ -237,6 +237,9 @@ protected:
 
 public:
 
+
+  void reset_backfill();
+
   void clear();
 
   //////////////////// get or set missing ////////////////////