summaryrefslogtreecommitdiff
path: root/src/osdc
diff options
context:
space:
mode:
authorYehuda Sadeh <yehuda@hq.newdream.net>2012-05-02 17:33:43 -0700
committerYehuda Sadeh <yehuda@hq.newdream.net>2012-05-02 23:01:42 -0700
commitbe855d8524014f2ff7a9c806f3ae4ca15caffa5e (patch)
tree6ad83ac5ebaba605c5406eecc7d14830ea0b3c10 /src/osdc
parent606fdf4788aeefdd3fe9dd78667c1fa9e01b63d8 (diff)
downloadceph-be855d8524014f2ff7a9c806f3ae4ca15caffa5e.tar.gz
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 <yehuda@hq.newdream.net>
Diffstat (limited to 'src/osdc')
-rw-r--r--src/osdc/Objecter.cc21
1 files changed, 20 insertions, 1 deletions
diff --git a/src/osdc/Objecter.cc b/src/osdc/Objecter.cc
index 11e86d8bf28..e81bfff43fb 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<uint64_t,LingerOp*>::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<OSDSession*>::iterator i = toping.begin();
i != toping.end();
- i++)
+ i++) {
messenger->send_message(new MPing, (*i)->con);
+ }
}
// reschedule