@@ -1530,8 +1530,10 @@ void OSD::tick()
// periodically kick recovery work queue
recovery_tp.kick();
-
+
+ dout(20) << "tick getting read lock on map_lock" << dendl;
map_lock.get_read();
+ dout(20) << "tick got read lock on map_lock" << dendl;
if (scrub_should_schedule()) {
sched_scrub();
@@ -1544,11 +1546,13 @@ void OSD::tick()
check_replay_queue();
// mon report?
+ dout(20) << "tick sending mon report" << dendl;
utime_t now = g_clock.now();
if (now - last_mon_report > g_conf.osd_mon_report_interval)
do_mon_report();
// remove stray pgs?
+ dout(20) << "tick removing stray pgs" << dendl;
remove_list_lock.Lock();
for (map<epoch_t, map<int, vector<pg_t> > >::iterator p = remove_list.begin();
p != remove_list.end();
@@ -1566,19 +1570,23 @@ void OSD::tick()
map_lock.put_read();
+ dout(20) << "tick sending log to logclient" << dendl;
logclient.send_log();
+ dout(20) << "tick arming timer for next tick" << dendl;
timer.add_event_after(1.0, new C_Tick(this));
// only do waiters if dispatch() isn't currently running. (if it is,
// it'll do the waiters, and doing them here may screw up ordering
// of op_queue vs handle_osd_map.)
+ dout(20) << "tick checking dispatch queue status" << dendl;
if (!dispatch_running) {
dispatch_running = true;
do_waiters();
dispatch_running = false;
dispatch_cond.Signal();
}
+ dout(20) << "tick done" << dendl;
}
Check out the result: