]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: move scrub_purged_snaps to helper
authorSage Weil <sage@redhat.com>
Wed, 26 Jun 2019 20:21:36 +0000 (15:21 -0500)
committerSage Weil <sage@redhat.com>
Tue, 2 Jul 2019 13:37:51 +0000 (08:37 -0500)
Signed-off-by: Sage Weil <sage@redhat.com>
src/osd/OSD.cc
src/osd/OSD.h

index 6d4757b057e2e52f2eee77467678506cc2d4eb84..d054f8dc71a34a380d7542ee791b07a75e05c073 100644 (file)
@@ -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<pair<spg_t,snapid_t>> 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<spg_t,snapid_t> 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<pair<spg_t,snapid_t>> 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<spg_t,snapid_t> 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<string> devnames;
index fdf5633ddbc831c7ba27756c3c249cc512c42623..a64f7e25ceb0d4d06dcdbe96c945b5b2fb1e7d8d 100644 (file)
@@ -2132,6 +2132,7 @@ private:
 
   int get_recovery_max_active();
 
+  void scrub_purged_snaps();
   void probe_smart(const string& devid, ostream& ss);
 
 public: