m_lock("rbd::mirror::LeaderWatcher " + io_ctx.get_pool_name()),
m_notifier_id(librados::Rados(io_ctx).get_instance_id()),
m_leader_lock(new LeaderLock(m_ioctx, m_work_queue, m_oid, this, true,
- m_cct->_conf->rbd_blacklist_expire_seconds)) {
+ m_cct->_conf->get_val<int64_t>(
+ "rbd_blacklist_expire_seconds"))) {
}
template <typename I>
m_timer_gate->timer_callback = timer_callback;
});
- int after = delay_factor *
- max(1, m_cct->_conf->rbd_mirror_leader_heartbeat_interval);
+ int after = delay_factor * m_cct->_conf->get_val<int64_t>(
+ "rbd_mirror_leader_heartbeat_interval");
dout(20) << "scheduling " << name << " after " << after << " sec (task "
<< m_timer_task << ")" << dendl;
}
}
- if (m_acquire_attempts >=
- m_cct->_conf->rbd_mirror_leader_max_acquire_attempts_before_break) {
+ if (m_acquire_attempts >= m_cct->_conf->get_val<int64_t>(
+ "rbd_mirror_leader_max_acquire_attempts_before_break")) {
dout(0) << "breaking leader lock after " << m_acquire_attempts << " "
<< "failed attempts to acquire" << dendl;
break_leader_lock();
schedule_timer_task("acquire leader lock",
delay_factor *
- m_cct->_conf->rbd_mirror_leader_max_missed_heartbeats,
+ m_cct->_conf->get_val<int64_t>("rbd_mirror_leader_max_missed_heartbeats"),
false, &LeaderWatcher<I>::acquire_leader_lock, false);
}
apply_visitor(HandlePayloadVisitor(this, ctx), notify_message.payload);
}
+template <typename I>
+void LeaderWatcher<I>::handle_rewatch_complete(int r) {
+ dout(5) << "r=" << r << dendl;
+
+ m_leader_lock->reacquire_lock(nullptr);
+}
+
template <typename I>
void LeaderWatcher<I>::handle_payload(const HeartbeatPayload &payload,
Context *on_notify_ack) {