cct->get_perfcounters_collection()->add(logger);
}
- timer.add_event_after(cct->_conf->objecter_tick_interval, new C_Tick(this));
+ schedule_tick();
maybe_request_map();
}
close_session(p->second);
}
+ if (tick_event) {
+ timer.cancel_event(tick_event);
+ tick_event = NULL;
+ }
+
if (logger) {
cct->get_perfcounters_collection()->remove(logger);
delete logger;
}
}
+void Objecter::schedule_tick()
+{
+ assert(tick_event == NULL);
+ tick_event = new C_Tick(this);
+ timer.add_event_after(cct->_conf->objecter_tick_interval, tick_event);
+}
void Objecter::tick()
{
ldout(cct, 10) << "tick" << dendl;
assert(client_lock.is_locked());
+ // we are only called by C_Tick
+ assert(tick_event);
+ tick_event = NULL;
+
set<OSDSession*> toping;
// look for laggy requests
}
// reschedule
- timer.add_event_after(cct->_conf->objecter_tick_interval, new C_Tick(this));
+ schedule_tick();
}
void Objecter::resend_mon_ops()
public:
C_Tick(Objecter *o) : ob(o) {}
void finish(int r) { ob->tick(); }
- };
+ } *tick_event;
+
+ void schedule_tick();
void tick();
public:
last_seen_osdmap_version(0),
last_seen_pgmap_version(0),
client_lock(l), timer(t),
- logger(NULL),
+ logger(NULL), tick_event(NULL),
num_homeless_ops(0),
op_throttler(cct->_conf->objecter_inflight_op_bytes)
{ }