From 647cfb460371b2f3255160d73d7432d41fcc0b9f Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Wed, 26 Jun 2019 15:21:36 -0500 Subject: [PATCH] osd: move scrub_purged_snaps to helper Signed-off-by: Sage Weil --- src/osd/OSD.cc | 93 +++++++++++++++++++++++++++----------------------- src/osd/OSD.h | 1 + 2 files changed, 51 insertions(+), 43 deletions(-) diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index 6d4757b057e2e..d054f8dc71a34 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -6595,49 +6595,7 @@ int OSD::_do_command( send_beacon(ceph::coarse_mono_clock::now()); } } else if (prefix == "scrub_purged_snaps") { - SnapMapper::Scrubber s(cct, store, service.meta_ch, - make_snapmapper_oid()); - clog->debug() << "purged_snaps scrub starts"; - s.run(); - if (s.stray.size()) { - clog->debug() << "purged_snaps scrub find " << s.stray.size() << " strays"; - } else { - clog->debug() << "purged_snaps scrub ok"; - } - set> queued; - for (auto& [pool, snap, hash, shard] : s.stray) { - const pg_pool_t *pi = get_osdmap()->get_pg_pool(pool); - if (!pi) { - dout(20) << __func__ << " pool " << pool << " dne" << dendl; - continue; - } - pg_t pgid(pi->raw_hash_to_pg(hash), pool); - spg_t spgid(pgid, shard); - pair p(spgid, snap); - if (queued.count(p)) { - dout(20) << __func__ << " pg " << spgid << " snap " << snap - << " already queued" << dendl; - continue; - } - PGRef pg = lookup_lock_pg(spgid); - if (!pg) { - dout(20) << __func__ << " pg " << spgid << " not found" << dendl; - continue; - } - queued.insert(p); - dout(10) << __func__ << " requeue pg " << spgid << " " << pg << " snap " - << snap << dendl; - pg->queue_snap_retrim(snap); - pg->unlock(); - } - ObjectStore::Transaction t; - superblock.last_purged_snaps_scrub = ceph_clock_now(); - write_superblock(t); - int tr = store->queue_transaction(service.meta_ch, std::move(t), nullptr); - ceph_assert(tr == 0); - if (is_active()) { - send_beacon(ceph::coarse_mono_clock::now()); - } + scrub_purged_snaps(); } else { ss << "unrecognized command '" << prefix << "'"; r = -EINVAL; @@ -6647,6 +6605,55 @@ int OSD::_do_command( return r; } +void OSD::scrub_purged_snaps() +{ + dout(10) << __func__ << dendl; + ceph_assert(ceph_mutex_is_locked(osd_lock)); + SnapMapper::Scrubber s(cct, store, service.meta_ch, + make_snapmapper_oid()); + clog->debug() << "purged_snaps scrub starts"; + s.run(); + if (s.stray.size()) { + clog->debug() << "purged_snaps scrub find " << s.stray.size() << " strays"; + } else { + clog->debug() << "purged_snaps scrub ok"; + } + set> queued; + for (auto& [pool, snap, hash, shard] : s.stray) { + const pg_pool_t *pi = get_osdmap()->get_pg_pool(pool); + if (!pi) { + dout(20) << __func__ << " pool " << pool << " dne" << dendl; + continue; + } + pg_t pgid(pi->raw_hash_to_pg(hash), pool); + spg_t spgid(pgid, shard); + pair p(spgid, snap); + if (queued.count(p)) { + dout(20) << __func__ << " pg " << spgid << " snap " << snap + << " already queued" << dendl; + continue; + } + PGRef pg = lookup_lock_pg(spgid); + if (!pg) { + dout(20) << __func__ << " pg " << spgid << " not found" << dendl; + continue; + } + queued.insert(p); + dout(10) << __func__ << " requeue pg " << spgid << " " << pg << " snap " + << snap << dendl; + pg->queue_snap_retrim(snap); + pg->unlock(); + } + ObjectStore::Transaction t; + superblock.last_purged_snaps_scrub = ceph_clock_now(); + write_superblock(t); + int tr = store->queue_transaction(service.meta_ch, std::move(t), nullptr); + ceph_assert(tr == 0); + if (is_active()) { + send_beacon(ceph::coarse_mono_clock::now()); + } +} + void OSD::probe_smart(const string& only_devid, ostream& ss) { set devnames; diff --git a/src/osd/OSD.h b/src/osd/OSD.h index fdf5633ddbc83..a64f7e25ceb0d 100644 --- a/src/osd/OSD.h +++ b/src/osd/OSD.h @@ -2132,6 +2132,7 @@ private: int get_recovery_max_active(); + void scrub_purged_snaps(); void probe_smart(const string& devid, ostream& ss); public: -- 2.39.5