From: Sage Weil Date: Sat, 24 Jun 2017 03:54:09 +0000 (-0400) Subject: mon/OSDMonitor: do not start mapping job on empty map X-Git-Tag: ses5-milestone8~1^2~21^2~4 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=102e13d2a0c70c07f0b4bbafd311ac983fa81e2b;p=ceph.git mon/OSDMonitor: do not start mapping job on empty map The Mapper doesn't do the completion. Just avoid it in the caller instead of adding a Finisher or something similarly annoying for the completion. Signed-off-by: Sage Weil --- diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc index 85e0c32c88cf..fa6acc42237e 100644 --- a/src/mon/OSDMonitor.cc +++ b/src/mon/OSDMonitor.cc @@ -494,12 +494,17 @@ void OSDMonitor::start_mapping() << dendl; mapping_job->abort(); } - auto fin = new C_UpdateCreatingPGs(this, osdmap.get_epoch()); - mapping_job = mapping.start_update(osdmap, mapper, - g_conf->mon_osd_mapping_pgs_per_chunk); - dout(10) << __func__ << " started mapping job " << mapping_job.get() - << " at " << fin->start << dendl; - mapping_job->set_finish_event(fin); + if (!osdmap.get_pools().empty()) { + auto fin = new C_UpdateCreatingPGs(this, osdmap.get_epoch()); + mapping_job = mapping.start_update(osdmap, mapper, + g_conf->mon_osd_mapping_pgs_per_chunk); + dout(10) << __func__ << " started mapping job " << mapping_job.get() + << " at " << fin->start << dendl; + mapping_job->set_finish_event(fin); + } else { + dout(10) << __func__ << " no pools, no mapping job" << dendl; + mapping_job = nullptr; + } } void OSDMonitor::update_msgr_features() @@ -794,7 +799,9 @@ void OSDMonitor::maybe_prime_pg_temp() next.deepish_copy_from(osdmap); next.apply_incremental(pending_inc); - if (all) { + if (next.get_pools().empty()) { + dout(10) << __func__ << " no pools, no pg_temp priming" << dendl; + } else if (all) { PrimeTempJob job(next, this); mapper.queue(&job, g_conf->mon_osd_mapping_pgs_per_chunk); if (job.wait_for(g_conf->mon_osd_prime_pg_temp_max_time)) { diff --git a/src/osd/OSDMapMapping.cc b/src/osd/OSDMapMapping.cc index 14165a156dc0..bf9f4f99c38b 100644 --- a/src/osd/OSDMapMapping.cc +++ b/src/osd/OSDMapMapping.cc @@ -157,6 +157,7 @@ void ParallelPGMapper::queue( Job *job, unsigned pgs_per_item) { + bool any = false; for (auto& p : job->osdmap->get_pools()) { for (unsigned ps = 0; ps < p.second.get_pg_num(); ps += pgs_per_item) { unsigned ps_end = MIN(ps + pgs_per_item, p.second.get_pg_num()); @@ -164,6 +165,8 @@ void ParallelPGMapper::queue( wq.queue(new Item(job, p.first, ps, ps_end)); ldout(cct, 20) << __func__ << " " << job << " " << p.first << " [" << ps << "," << ps_end << ")" << dendl; + any = true; } } + assert(any); }