From 47fb89c072b63202ba61e9c8bcd411816af2701b Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Fri, 7 Jun 2019 15:03:28 -0500 Subject: [PATCH] mon/OSDMonitor: record purged_snaps for each epoch Only do this if the mons are all running octopus (and thus there is also a record for all the pre-octopus purged snaps). Signed-off-by: Sage Weil --- src/mon/OSDMonitor.cc | 23 +++++++++++++++++++++++ src/mon/OSDMonitor.h | 2 ++ 2 files changed, 25 insertions(+) diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc index d89f37e156a..4cd7b9ab3b4 100644 --- a/src/mon/OSDMonitor.cc +++ b/src/mon/OSDMonitor.cc @@ -96,6 +96,8 @@ static const string OSD_SNAP_PREFIX("osd_snap"); OSD snapshot metadata --------------------- + -- starting with mimic -- + "removed_epoch_%llu_%08lx" % (pool, epoch) -> interval_set @@ -110,6 +112,12 @@ static const string OSD_SNAP_PREFIX("osd_snap"); interval. e.g., to test if epoch N is removed/purged, we'll find a key >= N that either does or doesn't contain the given snap. + + -- starting with octopus -- + + "purged_epoch_%08lx" % epoch + -> map> + */ namespace { @@ -1587,6 +1595,14 @@ void OSDMonitor::encode_pending(MonitorDBStore::TransactionRef t) t); } } + if (tmp.require_osd_release >= ceph_release_t::octopus && + !pending_inc.new_purged_snaps.empty()) { + // all snaps purged this epoch (across all pools) + string k = make_purged_snap_epoch_key(pending_inc.epoch); + bufferlist v; + encode(pending_inc.new_purged_snaps, v); + t->put(OSD_SNAP_PREFIX, k, v); + } for (auto& i : pending_inc.new_purged_snaps) { for (auto q = i.second.begin(); q != i.second.end(); @@ -6211,6 +6227,13 @@ string OSDMonitor::make_removed_snap_epoch_key(int64_t pool, epoch_t epoch) return k; } +string OSDMonitor::make_purged_snap_epoch_key(epoch_t epoch) +{ + char k[80]; + snprintf(k, sizeof(k), "purged_epoch_%08lx", (unsigned long)epoch); + return k; +} + string OSDMonitor::_make_snap_key(bool purged, int64_t pool, snapid_t snap) { char k[80]; diff --git a/src/mon/OSDMonitor.h b/src/mon/OSDMonitor.h index 9feea941fe8..913965da49c 100644 --- a/src/mon/OSDMonitor.h +++ b/src/mon/OSDMonitor.h @@ -505,6 +505,8 @@ private: bool _is_pending_removed_snap(int64_t pool_id, snapid_t snapid); string make_removed_snap_epoch_key(int64_t pool, epoch_t epoch); + string make_purged_snap_epoch_key(epoch_t epoch); + string _make_snap_key(bool purged, int64_t pool, snapid_t snap); string _make_snap_key_value(bool purged, int64_t pool, snapid_t snap, snapid_t num, -- 2.39.5