上一篇讲到Monitor的tick处理,顺带讲解Monitor对osd report超时的处理
该部分在PGMonitor的tick中调用
void Monitor::tick()
{
// ok go.
dout(11) << "tick" << dendl;
···
//调用paxosservice的tick()
for (vector<PaxosService*>::iterator p = paxos_service.begin(); p != paxos_service.end(); ++p) {
(*p)->tick();
(*p)->maybe_trim();
}
···
new_tick();
}
在这里调用了PGMonitor的tick()
void PGMonitor::tick()
{
if (!is_active()) return;
if (mon->osdmon()->osdmap.require_osd_release >= CEPH_RELEASE_LUMINOUS) {
return;
}
//处理osd的report超时
handle_osd_timeouts();
if (!pg_map.pg_sum_deltas.empty()) {
utime_t age = ceph_clock_now() - pg_map.stamp;
if (age > 2 * g_conf->mon_delta_reset_interval) {
dout(10) << " clearing pg_map delta ("