From: Sage Weil Date: Fri, 7 Jun 2019 20:03:28 +0000 (-0500) Subject: mon/OSDMonitor: record purged_snaps for each epoch X-Git-Tag: v15.1.0~2308^2~23 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=47fb89c072b63202ba61e9c8bcd411816af2701b;p=ceph.git 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 --- diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc index d89f37e156a3..4cd7b9ab3b47 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 9feea941fe8b..913965da49cb 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,