From 1c582b7dd1d112f0e28f60a0dcc2dd03627deda6 Mon Sep 17 00:00:00 2001 From: xie xingguo Date: Mon, 17 Jun 2019 11:05:31 +0800 Subject: [PATCH] osd: do not invalidate clear_regions of missing item at boot Seems we'll always mark clear_regions as all dirty when reading pg logs and missing items off the disk, which as a result turns incremental recovery off by default. Also using std::move seems to be a bit more efficient and robust here. Signed-off-by: xie xingguo --- src/osd/PGLog.h | 4 ++-- src/osd/osd_types.h | 6 ++++++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/osd/PGLog.h b/src/osd/PGLog.h index 81927870976..fc7ffd48aa7 100644 --- a/src/osd/PGLog.h +++ b/src/osd/PGLog.h @@ -1402,7 +1402,7 @@ public: if (item.is_delete()) { ceph_assert(missing.may_include_deletes); } - missing.add(oid, item.need, item.have, item.is_delete()); + missing.add(oid, std::move(item)); } else if (p->key().substr(0, 4) == string("dup_")) { pg_log_dup_t dup; decode(dup, bp); @@ -1650,7 +1650,7 @@ public: if (item.is_delete()) { ceph_assert(missing.may_include_deletes); } - missing.add(oid, item.need, item.have, item.is_delete()); + missing.add(oid, std::move(item)); } else if (p.first.substr(0, 4) == string("dup_")) { pg_log_dup_t dup; decode(dup, bp); diff --git a/src/osd/osd_types.h b/src/osd/osd_types.h index 3e5e71ccdfa..8aeef17ad01 100644 --- a/src/osd/osd_types.h +++ b/src/osd/osd_types.h @@ -4522,6 +4522,12 @@ public: tracker.changed(oid); } + void add(const hobject_t& oid, pg_missing_item&& item) { + rmissing[item.need.version] = oid; + missing.insert({oid, std::move(item)}); + tracker.changed(oid); + } + void rm(const hobject_t& oid, eversion_t v) { std::map::iterator p = missing.find(oid); if (p != missing.end() && p->second.need <= v) -- 2.39.5