summaryrefslogtreecommitdiffstats
path: root/slobrok
diff options
context:
space:
mode:
authorArne Juul <arnej@yahoo-inc.com>2018-10-04 07:45:45 +0000
committerArne Juul <arnej@yahoo-inc.com>2018-10-08 06:04:37 +0000
commit17c18d170ff16da613bca0dafb940c04e734b1b2 (patch)
tree602796ba3c9983e22bf6f502279e8a05d2bb1438 /slobrok
parenta4792d03ca7b956ccf0ca6c834bc678ba56c89cf (diff)
RequestDone must still cleanup after Abort
Diffstat (limited to 'slobrok')
-rw-r--r--slobrok/src/vespa/slobrok/server/exchange_manager.cpp12
-rw-r--r--slobrok/src/vespa/slobrok/server/managed_rpc_server.cpp15
2 files changed, 17 insertions, 10 deletions
diff --git a/slobrok/src/vespa/slobrok/server/exchange_manager.cpp b/slobrok/src/vespa/slobrok/server/exchange_manager.cpp
index e941889ffa3..eb5f1a1f148 100644
--- a/slobrok/src/vespa/slobrok/server/exchange_manager.cpp
+++ b/slobrok/src/vespa/slobrok/server/exchange_manager.cpp
@@ -120,7 +120,8 @@ ExchangeManager::healthCheck()
ExchangeManager::WorkPackage::WorkItem::WorkItem(WorkPackage &pkg,
RemoteSlobrok *rem,
FRT_RPCRequest *req)
- : FNET_Task(pkg._exchanger._env.getScheduler()), _pkg(pkg), _pendingReq(req), _remslob(rem)
+ : FNET_Task(pkg._exchanger._env.getScheduler()),
+ _pkg(pkg), _pendingReq(req), _remslob(rem)
{
}
@@ -128,7 +129,13 @@ void
ExchangeManager::WorkPackage::WorkItem::RequestDone(FRT_RPCRequest *req)
{
LOG_ASSERT(req == _pendingReq);
- ScheduleNow();
+ if (req->GetErrorCode() == FRTE_RPC_ABORT) {
+ LOG(debug, "WorkItem aborted");
+ req->SubRef();
+ _pendingReq = nullptr;
+ } else {
+ ScheduleNow();
+ }
}
void
@@ -164,6 +171,7 @@ ExchangeManager::WorkPackage::WorkItem::~WorkItem()
{
if (_pendingReq != nullptr) {
_pendingReq->Abort();
+ // _pendingReq cleared by RequestDone Method
LOG_ASSERT(_pendingReq == nullptr);
}
}
diff --git a/slobrok/src/vespa/slobrok/server/managed_rpc_server.cpp b/slobrok/src/vespa/slobrok/server/managed_rpc_server.cpp
index b9e8b8d032d..79ed475ae8e 100644
--- a/slobrok/src/vespa/slobrok/server/managed_rpc_server.cpp
+++ b/slobrok/src/vespa/slobrok/server/managed_rpc_server.cpp
@@ -88,7 +88,13 @@ void
ManagedRpcServer::RequestDone(FRT_RPCRequest *req)
{
LOG_ASSERT(req == _checkServerReq);
- ScheduleNow();
+ if (req->GetErrorCode() == FRTE_RPC_ABORT) {
+ LOG(debug, "rpcserver[%s].check aborted", getName().c_str());
+ req->SubRef();
+ _checkServerReq = nullptr;
+ } else {
+ ScheduleNow();
+ }
}
void
@@ -97,13 +103,6 @@ ManagedRpcServer::PerformTask()
FRT_RPCRequest *req = _checkServerReq;
FRT_Values &answer = *(req->GetReturn());
- if (req->GetErrorCode() == FRTE_RPC_ABORT) {
- LOG(debug, "rpcserver[%s].check aborted", getName().c_str());
- req->SubRef();
- _checkServerReq = nullptr;
- return;
- }
-
if (req->IsError()
|| strcmp(answer.GetTypeString(), "S") != 0
|| ! validateRpcServer(answer[0]._string_array._len,