From d98aa399b0b5e7d92f75753cbcc696ef06214312 Mon Sep 17 00:00:00 2001 From: xie xingguo Date: Fri, 24 Nov 2017 10:10:27 +0800 Subject: [PATCH] osd/PGLog: get rid of ineffective container operations Signed-off-by: xie xingguo --- src/osd/PGLog.h | 17 ++++++++--------- src/osd/osd_types.h | 8 ++++++++ 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/src/osd/PGLog.h b/src/osd/PGLog.h index 4e8e084a2ad..6edfd3891c7 100644 --- a/src/osd/PGLog.h +++ b/src/osd/PGLog.h @@ -758,10 +758,9 @@ public: log.complete_to = log.log.end(); info.last_complete = info.last_update; } + auto oldest_need = missing.get_oldest_need(); while (log.complete_to != log.log.end()) { - if (missing.get_items().at( - missing.get_rmissing().begin()->second - ).need <= log.complete_to->version) + if (oldest_need <= log.complete_to->version) break; if (info.last_complete < log.complete_to->version) info.last_complete = log.complete_to->version; @@ -774,12 +773,12 @@ public: void reset_complete_to(pg_info_t *info) { log.complete_to = log.log.begin(); - while (!missing.get_items().empty() && log.complete_to->version < - missing.get_items().at( - missing.get_rmissing().begin()->second - ).need) { - assert(log.complete_to != log.log.end()); - ++log.complete_to; + auto oldest_need = missing.get_oldest_need(); + if (oldest_need != eversion_t()) { + while (log.complete_to->version < oldest_need) { + assert(log.complete_to != log.log.end()); + ++log.complete_to; + } } assert(log.complete_to != log.log.end()); if (log.complete_to == log.log.begin()) { diff --git a/src/osd/osd_types.h b/src/osd/osd_types.h index 9dc35dc7cf3..94ac6328873 100644 --- a/src/osd/osd_types.h +++ b/src/osd/osd_types.h @@ -3835,6 +3835,14 @@ public: return false; return true; } + eversion_t get_oldest_need() const { + if (missing.empty()) { + return eversion_t(); + } + auto it = missing.find(rmissing.begin()->second); + assert(it != missing.end()); + return it->second.need; + } void claim(pg_missing_set& o) { static_assert(!TrackChanges, "Can't use claim with TrackChanges"); -- 2.47.3