From 430027f70b7eeaa63517c6304d00d7a7813c0d67 Mon Sep 17 00:00:00 2001 From: Samuel Just Date: Mon, 30 Mar 2015 16:58:25 -0700 Subject: [PATCH] PGLog: factor out claim_log_entries_update_missing Signed-off-by: Samuel Just --- src/osd/PGLog.cc | 53 ++++++++++++++++++++++++++++++++++-------------- src/osd/PGLog.h | 20 ++++++++++++++++++ 2 files changed, 58 insertions(+), 15 deletions(-) diff --git a/src/osd/PGLog.cc b/src/osd/PGLog.cc index c38e3a5275a11..3575b0393c8a9 100644 --- a/src/osd/PGLog.cc +++ b/src/osd/PGLog.cc @@ -568,6 +568,35 @@ void PGLog::rewind_divergent_log(ObjectStore::Transaction& t, eversion_t newhead dirty_big_info = true; } +void PGLog::append_log_entries_update_missing( + const hobject_t &last_backfill, + const list &entries, + IndexedLog *log, + pg_missing_t &missing, + LogEntryHandler *rollbacker, + const DoutPrefixProvider *dpp) +{ + if (log && !entries.empty()) { + assert(log->head < entries.begin()->version); + log->head = entries.rbegin()->version; + } + for (list::const_iterator p = entries.begin(); + p != entries.end(); + ++p) { + if (log) { + log->log.push_back(*p); + pg_log_entry_t &ne = log->log.back(); + ldpp_dout(dpp, 20) << "update missing, append " << ne << dendl; + log->index(ne); + } + if (p->soid <= last_backfill) { + missing.add_next_event(*p); + if (p->is_delete() && rollbacker) + rollbacker->remove(p->soid); + } + } +} + void PGLog::merge_log(ObjectStore::Transaction& t, pg_info_t &oinfo, pg_log_t &olog, pg_shard_t fromosd, pg_info_t &info, LogEntryHandler *rollbacker, @@ -675,21 +704,15 @@ void PGLog::merge_log(ObjectStore::Transaction& t, log.log.pop_back(); } - // index, update missing, delete deleted - for (list::iterator p = from; p != to; ++p) { - pg_log_entry_t &ne = *p; - ldpp_dout(dpp, 20) "merge_log " << ne << dendl; - log.index(ne); - if (ne.soid <= info.last_backfill) { - missing.add_next_event(ne); - if (ne.is_delete()) - rollbacker->remove(ne.soid); - } - } - - // splice - log.log.splice(log.log.end(), - olog.log, from, to); + list entries; + entries.splice(entries.end(), olog.log, from, to); + append_log_entries_update_missing( + info.last_backfill, + entries, + &log, + missing, + rollbacker, + this); log.index(); info.last_update = log.head = olog.head; diff --git a/src/osd/PGLog.h b/src/osd/PGLog.h index d402561800913..66adfa2ab9eec 100644 --- a/src/osd/PGLog.h +++ b/src/osd/PGLog.h @@ -765,6 +765,26 @@ public: pg_info_t &info, LogEntryHandler *rollbacker, bool &dirty_info, bool &dirty_big_info); + static void append_log_entries_update_missing( + const hobject_t &last_backfill, + const list &entries, + IndexedLog *log, + pg_missing_t &missing, + LogEntryHandler *rollbacker, + const DoutPrefixProvider *dpp); + void append_new_log_entries( + const hobject_t &last_backfill, + const list &entries, + LogEntryHandler *rollbacker) { + append_log_entries_update_missing( + last_backfill, + entries, + &log, + missing, + rollbacker, + this); + } + void write_log(ObjectStore::Transaction& t, map *km, const coll_t& coll, -- 2.39.5