From: Sage Weil Date: Fri, 2 Feb 2018 21:26:52 +0000 (-0600) Subject: osd: debug recovery_ops_reserved X-Git-Tag: v13.1.0~390^2~87 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=987490db3d8994928ae51d7e5e5ba464b3eeff0d;p=ceph.git osd: debug recovery_ops_reserved Signed-off-by: Sage Weil --- diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index 356d5f1734ae..303b9f405138 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -8794,6 +8794,9 @@ void OSDService::_maybe_queue_recovery() { cct->_conf->osd_recovery_max_single_start); _queue_for_recovery(awaiting_throttle.front(), to_start); awaiting_throttle.pop_front(); + dout(10) << __func__ << " starting " << to_start + << ", recovery_ops_reserved " << recovery_ops_reserved + << " -> " << (recovery_ops_reserved + to_start) << dendl; recovery_ops_reserved += to_start; } } @@ -8943,6 +8946,17 @@ bool OSDService::is_recovery_active() return local_reserver.has_reservation() || remote_reserver.has_reservation(); } +void OSDService::release_reserved_pushes(uint64_t pushes) +{ + Mutex::Locker l(recovery_lock); + dout(10) << __func__ << "(" << pushes << "), recovery_ops_reserved " + << recovery_ops_reserved << " -> " << (recovery_ops_reserved-pushes) + << dendl; + assert(recovery_ops_reserved >= pushes); + recovery_ops_reserved -= pushes; + _maybe_queue_recovery(); +} + // ========================================================= // OPS diff --git a/src/osd/OSD.h b/src/osd/OSD.h index ce05eb67615b..1734e2dc15cc 100644 --- a/src/osd/OSD.h +++ b/src/osd/OSD.h @@ -821,12 +821,7 @@ public: void start_recovery_op(PG *pg, const hobject_t& soid); void finish_recovery_op(PG *pg, const hobject_t& soid, bool dequeue); bool is_recovery_active(); - void release_reserved_pushes(uint64_t pushes) { - Mutex::Locker l(recovery_lock); - assert(recovery_ops_reserved >= pushes); - recovery_ops_reserved -= pushes; - _maybe_queue_recovery(); - } + void release_reserved_pushes(uint64_t pushes); void defer_recovery(float defer_for) { defer_recovery_until = ceph_clock_now(); defer_recovery_until += defer_for; diff --git a/src/osd/OpQueueItem.h b/src/osd/OpQueueItem.h index 35cfdc8cdcd5..e981fc673385 100644 --- a/src/osd/OpQueueItem.h +++ b/src/osd/OpQueueItem.h @@ -196,11 +196,15 @@ public: } friend ostream& operator<<(ostream& out, const OpQueueItem& item) { - return out << "OpQueueItem(" - << item.get_ordering_token() << " " << *item.qitem - << " prio " << item.get_priority() - << " cost " << item.get_cost() - << " e" << item.get_map_epoch() << ")"; + out << "OpQueueItem(" + << item.get_ordering_token() << " " << *item.qitem + << " prio " << item.get_priority() + << " cost " << item.get_cost() + << " e" << item.get_map_epoch(); + if (item.get_reserved_pushes()) { + out << " reserved_pushes " << item.get_reserved_pushes(); + } + return out << ")"; } }; // class OpQueueItem