]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mon/OSDMonitor: fix creating pg trimming during upgrade
authorSage Weil <sage@redhat.com>
Thu, 13 Apr 2017 17:30:41 +0000 (13:30 -0400)
committerSage Weil <sage@redhat.com>
Thu, 13 Apr 2017 21:11:19 +0000 (17:11 -0400)
The creating pgs are in the PGMap with the CREATING
state bit set.

Signed-off-by: Sage Weil <sage@redhat.com>
src/mon/OSDMonitor.cc

index 473a64a1e03bff97755bb2c68a263e0f685934c1..076edbfd927db9c44ce3eef446155dbd0caf70be 100644 (file)
@@ -1396,11 +1396,17 @@ void OSDMonitor::encode_pending(MonitorDBStore::TransactionRef t)
 void OSDMonitor::trim_creating_pgs(creating_pgs_t* creating_pgs,
                                   const PGMap& pgm)
 {
-  for (auto& pg : pgm.pg_stat) {
-    auto created = creating_pgs->pgs.find(pg.first);
-    if (created != creating_pgs->pgs.end()) {
-      creating_pgs->pgs.erase(created);
-      creating_pgs->created_pools.insert(pg.first.pool());
+  auto p = creating_pgs->pgs.begin();
+  while (p != creating_pgs->pgs.end()) {
+    auto q = pgm.pg_stat.find(p->first);
+    if (q != pgm.pg_stat.end() &&
+       !(q->second.state & PG_STATE_CREATING)) {
+      dout(20) << __func__ << " pgmap shows " << p->first << " is created"
+              << dendl;
+      p = creating_pgs->pgs.erase(p);
+      creating_pgs->created_pools.insert(q->first.pool());
+    } else {
+      ++p;
     }
   }
 }