lock("Monitor::lock"),
monmap(map),
logclient(messenger, monmap),
- timer(lock), tick_timer(0),
store(s),
state(STATE_STARTING), stopping(false),
messenger->add_dispatcher_head(&logclient);
// start ticker
- reset_tick();
-
+ timer.reset(new SafeTimer(lock));
+ new_tick();
+
// call election?
if (monmap->size() > 1) {
call_election();
(*p)->shutdown();
// Cancel all events. The timer thread will be joined later in ~SafeTimer
- timer.cancel_all_events();
+ timer->cancel_all_events();
// die.
messenger->shutdown();
}
};
-void Monitor::cancel_tick()
-{
- if (tick_timer) timer.cancel_event(tick_timer);
-}
-
-void Monitor::reset_tick()
+void Monitor::new_tick()
{
- cancel_tick();
- tick_timer = new C_Mon_Tick(this);
- timer.add_event_after(g_conf.mon_tick_interval, tick_timer);
+ C_Mon_Tick *ctx = new C_Mon_Tick(this);
+ timer->add_event_after(g_conf.mon_tick_interval, ctx);
}
-
void Monitor::tick()
{
- tick_timer = 0;
-
_dout_check_log();
// ok go.
}
}
- // next tick!
- reset_tick();
+ new_tick();
}
-
-
-
-
/*
* this is the closest thing to a traditional 'mkfs' for ceph.
* initialize the monitor state machines to their initial values.
// set timeout event
collect_timeout_event = new C_CollectTimeout(this);
- mon->timer.add_event_after(g_conf.mon_accept_timeout, collect_timeout_event);
+ mon->timer->add_event_after(g_conf.mon_accept_timeout, collect_timeout_event);
}
dout(10) << " they had a higher pn than us, picking a new one." << dendl;
// cancel timeout event
- mon->timer.cancel_event(collect_timeout_event);
+ mon->timer->cancel_event(collect_timeout_event);
collect_timeout_event = 0;
collect(last->pn);
// is that everyone?
if (num_last == mon->get_quorum().size()) {
// cancel timeout event
- mon->timer.cancel_event(collect_timeout_event);
+ mon->timer->cancel_event(collect_timeout_event);
collect_timeout_event = 0;
// almost...
// set timeout event
accept_timeout_event = new C_AcceptTimeout(this);
- mon->timer.add_event_after(g_conf.mon_accept_timeout, accept_timeout_event);
+ mon->timer->add_event_after(g_conf.mon_accept_timeout, accept_timeout_event);
}
// peon
if (accepted == mon->get_quorum()) {
dout(10) << " got quorum, done with update" << dendl;
// cancel timeout event
- mon->timer.cancel_event(accept_timeout_event);
+ mon->timer->cancel_event(accept_timeout_event);
accept_timeout_event = 0;
// yay!
// if old timeout is still in place, leave it.
if (!lease_ack_timeout_event) {
lease_ack_timeout_event = new C_LeaseAckTimeout(this);
- mon->timer.add_event_after(g_conf.mon_lease_ack_timeout, lease_ack_timeout_event);
+ mon->timer->add_event_after(g_conf.mon_lease_ack_timeout, lease_ack_timeout_event);
}
// set renew event
utime_t at = lease_expire;
at -= g_conf.mon_lease;
at += g_conf.mon_lease_renew_interval;
- mon->timer.add_event_at(at, lease_renew_event);
+ mon->timer->add_event_at(at, lease_renew_event);
}
// (re)set timeout event.
if (lease_timeout_event)
- mon->timer.cancel_event(lease_timeout_event);
+ mon->timer->cancel_event(lease_timeout_event);
lease_timeout_event = new C_LeaseTimeout(this);
- mon->timer.add_event_after(g_conf.mon_lease_ack_timeout, lease_timeout_event);
+ mon->timer->add_event_after(g_conf.mon_lease_ack_timeout, lease_timeout_event);
// trim?
trim_to(lease->first_committed);
// yay!
dout(10) << "handle_lease_ack from " << ack->get_source()
<< " -- got everyone" << dendl;
- mon->timer.cancel_event(lease_ack_timeout_event);
+ mon->timer->cancel_event(lease_ack_timeout_event);
lease_ack_timeout_event = 0;
} else {
dout(10) << "handle_lease_ack from " << ack->get_source()
void Paxos::cancel_events()
{
if (collect_timeout_event) {
- mon->timer.cancel_event(collect_timeout_event);
+ mon->timer->cancel_event(collect_timeout_event);
collect_timeout_event = 0;
}
if (accept_timeout_event) {
- mon->timer.cancel_event(accept_timeout_event);
+ mon->timer->cancel_event(accept_timeout_event);
accept_timeout_event = 0;
}
if (lease_renew_event) {
- mon->timer.cancel_event(lease_renew_event);
+ mon->timer->cancel_event(lease_renew_event);
lease_renew_event = 0;
}
if (lease_ack_timeout_event) {
- mon->timer.cancel_event(lease_ack_timeout_event);
+ mon->timer->cancel_event(lease_ack_timeout_event);
lease_ack_timeout_event = 0;
}
if (lease_timeout_event) {
- mon->timer.cancel_event(lease_timeout_event);
+ mon->timer->cancel_event(lease_timeout_event);
lease_timeout_event = 0;
}
}
if (!proposal_timer) {
dout(10) << " setting propose timer with delay of " << delay << dendl;
proposal_timer = new C_Propose(this);
- mon->timer.add_event_after(delay, proposal_timer);
+ mon->timer->add_event_after(delay, proposal_timer);
} else {
dout(10) << " propose timer already set" << dendl;
}
assert(mon->is_leader() && paxos->is_active());
if (proposal_timer) {
- mon->timer.cancel_event(proposal_timer);
+ mon->timer->cancel_event(proposal_timer);
proposal_timer = 0;
}
{
dout(10) << "election_starting" << dendl;
if (proposal_timer) {
- mon->timer.cancel_event(proposal_timer);
+ mon->timer->cancel_event(proposal_timer);
proposal_timer = 0;
}
paxos->cancel_events();
if (proposal_timer) {
- mon->timer.cancel_event(proposal_timer);
+ mon->timer->cancel_event(proposal_timer);
proposal_timer = 0;
}
}