From 39245319ef1c6e1f12bbc8926785bae3ddbabd33 Mon Sep 17 00:00:00 2001 From: Samuel Just Date: Tue, 11 Jun 2013 15:42:28 -0700 Subject: [PATCH] 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 --- src/osd/PG.cc | 1 + src/osd/PGLog.cc | 7 +++++++ src/osd/PGLog.h | 3 +++ 3 files changed, 11 insertions(+) diff --git a/src/osd/PG.cc b/src/osd/PG.cc index c343fa54161b6..e021c26c83a7d 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().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 cc897e00ae8d1..e698de3c4451d 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 00bb72ad3adbf..f59c285612645 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 //////////////////// -- 2.39.5