summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSamuel Just <sam.just@inktank.com>2013-06-11 15:42:28 -0700
committerSamuel Just <sam.just@inktank.com>2013-06-17 14:50:52 -0700
commit39245319ef1c6e1f12bbc8926785bae3ddbabd33 (patch)
tree2fb2c9df59ec6f27b8f80f24f21eee8986bff6c4
parent47ce702ce6230f2404bf0b1cb051d78489537469 (diff)
downloadceph-39245319ef1c6e1f12bbc8926785bae3ddbabd33.tar.gz
PGLog: clear missing on backfill reset
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>
-rw-r--r--src/osd/PG.cc1
-rw-r--r--src/osd/PGLog.cc7
-rw-r--r--src/osd/PGLog.h3
3 files changed, 11 insertions, 0 deletions
diff --git a/src/osd/PG.cc b/src/osd/PG.cc
index c343fa54161..e021c26c83a 100644
--- a/src/osd/PG.cc
+++ b/src/osd/PG.cc
@@ -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);
diff --git a/src/osd/PGLog.cc b/src/osd/PGLog.cc
index cc897e00ae8..e698de3c445 100644
--- a/src/osd/PGLog.cc
+++ b/src/osd/PGLog.cc
@@ -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;
diff --git a/src/osd/PGLog.h b/src/osd/PGLog.h
index 00bb72ad3ad..f59c2856126 100644
--- a/src/osd/PGLog.h
+++ b/src/osd/PGLog.h
@@ -237,6 +237,9 @@ protected:
public:
+
+ void reset_backfill();
+
void clear();
//////////////////// get or set missing ////////////////////