X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=ceph%2Fsrc%2Fosd%2FOSD.cc;h=7b6e1aca215d448af9bb7df24ac1f6bc60bd1f8c;hb=f6b5b4d738b87d88d2de35127b6b0e41eae2a272;hp=e72f9f6f650f451cff898293f12390de85547849;hpb=12732ca2e80d168d344a265acffc1fbd1fa1f1b5;p=ceph.git diff --git a/ceph/src/osd/OSD.cc b/ceph/src/osd/OSD.cc index e72f9f6f6..7b6e1aca2 100644 --- a/ceph/src/osd/OSD.cc +++ b/ceph/src/osd/OSD.cc @@ -2709,7 +2709,6 @@ will start to track new ops received afterwards."; } else if (prefix == "bench") { - lock_guard l(osd_lock); int64_t count; int64_t bsize; int64_t osize, onum; @@ -3721,7 +3720,7 @@ void OSD::final_init() ceph_assert(r == 0); r = admin_socket->register_command("dump_scrub_reservations", asok_hook, - "show recovery reservations"); + "show scrub reservations"); ceph_assert(r == 0); r = admin_socket->register_command("get_latest_osdmap", asok_hook, @@ -6511,6 +6510,12 @@ void OSD::_collect_metadata(map *pm) (*pm)["rotational"] = store_is_rotational ? "1" : "0"; (*pm)["journal_rotational"] = journal_is_rotational ? "1" : "0"; (*pm)["default_device_class"] = store->get_default_device_class(); + string osdspec_affinity; + int r = store->read_meta("osdspec_affinity", &osdspec_affinity); + if (r < 0 || osdspec_affinity.empty()) { + osdspec_affinity = ""; + } + (*pm)["osdspec_affinity"] = osdspec_affinity; store->collect_metadata(pm); collect_sys_info(pm, cct); @@ -7425,16 +7430,15 @@ void OSD::sched_scrub() return; } bool allow_requested_repair_only = false; - if (service.is_recovery_active()) { - if (!cct->_conf->osd_scrub_during_recovery && cct->_conf->osd_repair_during_recovery) { - dout(10) << __func__ - << " will only schedule explicitly requested repair due to active recovery" - << dendl; - allow_requested_repair_only = true; - } else if (!cct->_conf->osd_scrub_during_recovery && !cct->_conf->osd_repair_during_recovery) { + if (service.is_recovery_active() && !cct->_conf->osd_scrub_during_recovery) { + if (!cct->_conf->osd_repair_during_recovery) { dout(20) << __func__ << " not scheduling scrubs due to active recovery" << dendl; return; } + dout(10) << __func__ + << " will only schedule explicitly requested repair due to active recovery" + << dendl; + allow_requested_repair_only = true; } utime_t now = ceph_clock_now(); @@ -7928,6 +7932,13 @@ void OSD::handle_osd_map(MOSDMap *m) delete o; request_full_map(e, last); last = e - 1; + + // don't continue committing if we failed to enc the first inc map + if (last < start) { + dout(10) << __func__ << " bailing because last < start (" << last << "<" << start << ")" << dendl; + m->put(); + return; + } break; } got_full_map(e); @@ -8060,10 +8071,12 @@ void OSD::_committed_osd_maps(epoch_t first, epoch_t last, MOSDMap *m) } map_lock.lock(); + ceph_assert(first <= last); + bool do_shutdown = false; bool do_restart = false; bool network_error = false; - OSDMapRef osdmap; + OSDMapRef osdmap = get_osdmap(); // advance through the new maps for (epoch_t cur = first; cur <= last; cur++) { @@ -10711,7 +10724,7 @@ void OSD::ShardedOpWQ::_enqueue(OpSchedulerItem&& item) { if (empty) { std::lock_guard l{sdata->sdata_wait_lock}; - sdata->sdata_cond.notify_one(); + sdata->sdata_cond.notify_all(); } }