From: Yehuda Sadeh Date: Thu, 3 May 2012 00:33:43 +0000 (-0700) Subject: objecter: ping connections with lingering ops every tick() X-Git-Tag: v0.47~56 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=be855d8524014f2ff7a9c806f3ae4ca15caffa5e;p=ceph.git objecter: ping connections with lingering ops every tick() Also, make sure that we initialize linger_op.session once we have it. Signed-off-by: Yehuda Sadeh --- diff --git a/src/osdc/Objecter.cc b/src/osdc/Objecter.cc index 11e86d8bf280d..e81bfff43fb0f 100644 --- a/src/osdc/Objecter.cc +++ b/src/osdc/Objecter.cc @@ -265,6 +265,13 @@ void Objecter::send_linger(LingerOp *info) } } op_submit(o, info->session); + OSDSession *s = o->session; + if (info->session != s) { + info->session_item.remove_myself(); + info->session = s; + if (info->session) + s->linger_ops.push_back(&info->session_item); + } info->registering = true; logger->inc(l_osdc_linger_send); @@ -780,6 +787,17 @@ void Objecter::tick() ++laggy_ops; } } + for (map::iterator p = linger_ops.begin(); + p != linger_ops.end(); + p++) { + LingerOp *op = p->second; + if (op->session) { + ldout(cct, 0) << " pinging osd that serves lingering tid " << p->first << " (osd." << op->session->osd << ")" << dendl; + toping.insert(op->session); + } else { + ldout(cct, 0) << " lingering tid " << p->first << " does not have session" << dendl; + } + } logger->set(l_osdc_op_laggy, laggy_ops); logger->set(l_osdc_osd_laggy, toping.size()); @@ -791,8 +809,9 @@ void Objecter::tick() // (osd reply message policy is lossy) for (set::iterator i = toping.begin(); i != toping.end(); - i++) + i++) { messenger->send_message(new MPing, (*i)->con); + } } // reschedule