diff options
author | Sage Weil <sage@inktank.com> | 2013-06-10 10:31:22 -0700 |
---|---|---|
committer | Sage Weil <sage@inktank.com> | 2013-06-13 10:52:18 -0700 |
commit | 77db175c9d8b565e302393d785c3f350f1338aef (patch) | |
tree | 1165dc8ac84fa078affde204a94fd4f53aec2557 | |
parent | 2818a44622f3190c89a774bbfcc36702d6b96720 (diff) | |
download | ceph-77db175c9d8b565e302393d785c3f350f1338aef.tar.gz |
mon/MonClient: tear down version requests on shutdown
Make sure all callers can handle ECANCELED.
Signed-off-by: Sage Weil <sage@inktank.com>
-rw-r--r-- | src/mon/MonClient.cc | 8 | ||||
-rw-r--r-- | src/osdc/Objecter.cc | 11 |
2 files changed, 13 insertions, 6 deletions
diff --git a/src/mon/MonClient.cc b/src/mon/MonClient.cc index 181d0688311..b52ce603158 100644 --- a/src/mon/MonClient.cc +++ b/src/mon/MonClient.cc @@ -320,6 +320,14 @@ int MonClient::init() void MonClient::shutdown() { + monc_lock.Lock(); + while (!version_requests.empty()) { + version_requests.begin()->second->context->complete(-ECANCELED); + delete version_requests.begin()->second; + version_requests.erase(version_requests.begin()); + } + monc_lock.Unlock(); + if (initialized) { finisher.stop(); } diff --git a/src/osdc/Objecter.cc b/src/osdc/Objecter.cc index 0afc56805ea..aae2159d69f 100644 --- a/src/osdc/Objecter.cc +++ b/src/osdc/Objecter.cc @@ -686,12 +686,11 @@ void Objecter::handle_osd_map(MOSDMap *m) void Objecter::C_Op_Map_Latest::finish(int r) { + if (r == -EAGAIN || r == -ECANCELED) + return; + lgeneric_subdout(objecter->cct, objecter, 10) << "op_map_latest r=" << r << " tid=" << tid << " latest " << latest << dendl; - if (r == -EAGAIN) { - // ignore callback; we will retry in resend_mon_ops() - return; - } Mutex::Locker l(objecter->client_lock); @@ -763,7 +762,7 @@ void Objecter::op_cancel_map_check(Op *op) void Objecter::C_Linger_Map_Latest::finish(int r) { - if (r == -EAGAIN) { + if (r == -EAGAIN || r == -ECANCELED) { // ignore callback; we will retry in resend_mon_ops() return; } @@ -833,7 +832,7 @@ void Objecter::linger_cancel_map_check(LingerOp *op) void Objecter::C_Command_Map_Latest::finish(int r) { - if (r == -EAGAIN) { + if (r == -EAGAIN || r == -ECANCELED) { // ignore callback; we will retry in resend_mon_ops() return; } |