]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: always call complete_split()
authorSage Weil <sage@redhat.com>
Wed, 13 Dec 2017 00:50:50 +0000 (18:50 -0600)
committerSage Weil <sage@redhat.com>
Thu, 11 Jan 2018 23:07:00 +0000 (17:07 -0600)
We need to complete the split regardless of whether the pg will get
removed after.

Signed-off-by: Sage Weil <sage@redhat.com>
src/osd/OSD.cc
src/osd/OSD.h

index 16d7a7ad05c8b5338fd1eb094a4a37ba60adb767..9b7d26443859df24a82ac1d122f20f463a515b09 100644 (file)
@@ -467,17 +467,13 @@ bool OSDService::splitting(spg_t pgid)
     pending_splits.count(pgid);
 }
 
-void OSDService::complete_split(const set<spg_t> &pgs)
+void OSDService::complete_split(spg_t pgid)
 {
   Mutex::Locker l(in_progress_split_lock);
-  for (set<spg_t>::const_iterator i = pgs.begin();
-       i != pgs.end();
-       ++i) {
-    dout(10) << __func__ << ": Completing split on pg " << *i << dendl;
-    assert(!pending_splits.count(*i));
-    assert(in_progress_splits.count(*i));
-    in_progress_splits.erase(*i);
-  }
+  dout(10) << __func__ << ": Completing split on pg " << pgid << dendl;
+  assert(!pending_splits.count(pgid));
+  assert(in_progress_splits.count(pgid));
+  in_progress_splits.erase(pgid);
 }
 
 void OSDService::need_heartbeat_peer_update()
@@ -7658,11 +7654,7 @@ struct C_CompleteSplits : public Context {
       (*i)->lock();
       PG *pg = i->get();
       osd->add_newly_split_pg(pg, &rctx);
-      if (!((*i)->is_deleting())) {
-        set<spg_t> to_complete;
-        to_complete.insert((*i)->get_pgid());
-        osd->service.complete_split(to_complete);
-      }
+      osd->service.complete_split((*i)->get_pgid());
       osd->pg_map_lock.put_write();
       osd->dispatch_context_transaction(rctx, pg);
       osd->wake_pg_waiters(*i);
index e4517873e89bbd3667c2a2d8fa7d328a4022b7be..9be91933884eae6c34f555709715b6387385bccc 100644 (file)
@@ -929,7 +929,7 @@ public:
     return _start_split(parent, children);
   }
   void mark_split_in_progress(spg_t parent, const set<spg_t> &pgs);
-  void complete_split(const set<spg_t> &pgs);
+  void complete_split(spg_t pgid);
   void cancel_pending_splits_for_parent(spg_t parent);
   void _cancel_pending_splits_for_parent(spg_t parent);
   bool splitting(spg_t pgid);