diff options
author | Samuel Just <sam.just@inktank.com> | 2013-06-11 15:42:28 -0700 |
---|---|---|
committer | Samuel Just <sam.just@inktank.com> | 2013-06-17 14:50:52 -0700 |
commit | 39245319ef1c6e1f12bbc8926785bae3ddbabd33 (patch) | |
tree | 2fb2c9df59ec6f27b8f80f24f21eee8986bff6c4 | |
parent | 47ce702ce6230f2404bf0b1cb051d78489537469 (diff) | |
download | ceph-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.cc | 1 | ||||
-rw-r--r-- | src/osd/PGLog.cc | 7 | ||||
-rw-r--r-- | src/osd/PGLog.h | 3 |
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 //////////////////// |