From 7959760d911d2ca64f3ca2b0cc972b804bbf8631 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Thu, 13 Apr 2017 13:30:41 -0400 Subject: [PATCH] mon/OSDMonitor: fix creating pg trimming during upgrade The creating pgs are in the PGMap with the CREATING state bit set. Signed-off-by: Sage Weil --- src/mon/OSDMonitor.cc | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc index 473a64a1e03..076edbfd927 100644 --- a/src/mon/OSDMonitor.cc +++ b/src/mon/OSDMonitor.cc @@ -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; } } } -- 2.39.5