]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
osd: Move creation of 'master_set' to scrub_compare_maps
authorBrad Hubbard <bhubbard@redhat.com>
Mon, 9 Oct 2017 07:24:17 +0000 (17:24 +1000)
committerBrad Hubbard <bhubbard@redhat.com>
Tue, 24 Oct 2017 07:27:51 +0000 (17:27 +1000)
Moving it to scrub_compare_maps allows us to pass it to multiple
subsequently called functions.

Signed-off-by: Brad Hubbard <bhubbard@redhat.com>
src/osd/PG.cc
src/osd/PGBackend.cc
src/osd/PGBackend.h

index 04893e987fd98c35de1ffc8945bc7ef5d7586579..e23316da4fadc939e5c4f422211fca76fc6258ac 100644 (file)
@@ -4641,6 +4641,30 @@ void PG::scrub_compare_maps()
       pair<boost::optional<uint32_t>,
            boost::optional<uint32_t>>> missing_digest;
 
+  map<pg_shard_t, ScrubMap *> maps;
+  maps[pg_whoami] = &scrubber.primary_scrubmap;
+
+  for (set<pg_shard_t>::iterator i = actingbackfill.begin();
+       i != actingbackfill.end();
+       ++i) {
+    if (*i == pg_whoami) continue;
+    dout(2) << __func__ << " replica " << *i << " has "
+            << scrubber.received_maps[*i].objects.size()
+            << " items" << dendl;
+    maps[*i] = &scrubber.received_maps[*i];
+  }
+
+  map<hobject_t,ScrubMap::object>::const_iterator i;
+  map<pg_shard_t, ScrubMap *>::const_iterator j;
+  set<hobject_t> master_set;
+
+  // Construct master set
+  for (j = maps.begin(); j != maps.end(); ++j) {
+    for (i = j->second->objects.begin(); i != j->second->objects.end(); ++i) {
+      master_set.insert(i->first);
+    }
+  }
+
   if (acting.size() > 1) {
     dout(10) << __func__ << "  comparing replica scrub maps" << dendl;
 
@@ -4648,24 +4672,13 @@ void PG::scrub_compare_maps()
 
     // Map from object with errors to good peer
     map<hobject_t, list<pg_shard_t>> authoritative;
-    map<pg_shard_t, ScrubMap *> maps;
 
     dout(2) << __func__ << "   osd." << acting[0] << " has "
            << scrubber.primary_scrubmap.objects.size() << " items" << dendl;
-    maps[pg_whoami] = &scrubber.primary_scrubmap;
-
-    for (set<pg_shard_t>::iterator i = actingbackfill.begin();
-        i != actingbackfill.end();
-        ++i) {
-      if (*i == pg_whoami) continue;
-      dout(2) << __func__ << " replica " << *i << " has "
-             << scrubber.received_maps[*i].objects.size()
-             << " items" << dendl;
-      maps[*i] = &scrubber.received_maps[*i];
-    }
 
     get_pgbackend()->be_compare_scrubmaps(
       maps,
+      master_set,
       state_test(PG_STATE_REPAIR),
       scrubber.missing,
       scrubber.inconsistent,
index 04121f4b88ec246cdd141317b20ad0a8918f067b..7866fa9990d3491bc0aa15726bdd38811bb6fbbf 100644 (file)
@@ -904,6 +904,7 @@ out:
 
 void PGBackend::be_compare_scrubmaps(
   const map<pg_shard_t,ScrubMap*> &maps,
+  const set<hobject_t> &master_set,
   bool repair,
   map<hobject_t, set<pg_shard_t>> &missing,
   map<hobject_t, set<pg_shard_t>> &inconsistent,
@@ -916,18 +917,8 @@ void PGBackend::be_compare_scrubmaps(
   const vector<int> &acting,
   ostream &errorstream)
 {
-  map<hobject_t,ScrubMap::object>::const_iterator i;
-  map<pg_shard_t, ScrubMap *>::const_iterator j;
-  set<hobject_t> master_set;
   utime_t now = ceph_clock_now();
 
-  // Construct master set
-  for (j = maps.begin(); j != maps.end(); ++j) {
-    for (i = j->second->objects.begin(); i != j->second->objects.end(); ++i) {
-      master_set.insert(i->first);
-    }
-  }
-
   // Check maps against master set and each other
   for (set<hobject_t>::const_iterator k = master_set.begin();
        k != master_set.end();
@@ -960,7 +951,7 @@ void PGBackend::be_compare_scrubmaps(
     set<pg_shard_t> cur_missing;
     set<pg_shard_t> cur_inconsistent;
 
-    for (j = maps.begin(); j != maps.end(); ++j) {
+    for (auto  j = maps.cbegin(); j != maps.cend(); ++j) {
       if (j == auth)
        shard_map[auth->first].selected_oi = true;
       if (j->second->objects.count(*k)) {
index b9604dd2729c19f25fdc8a260f669c0efb013875..d832faf2852d38b9e911b243f2534e82e9fa9ac4 100644 (file)
@@ -572,6 +572,7 @@ typedef ceph::shared_ptr<const OSDMap> OSDMapRef;
      inconsistent_obj_wrapper &object_error);
    void be_compare_scrubmaps(
      const map<pg_shard_t,ScrubMap*> &maps,
+     const set<hobject_t> &master_set,
      bool repair,
      map<hobject_t, set<pg_shard_t>> &missing,
      map<hobject_t, set<pg_shard_t>> &inconsistent,