aboutsummaryrefslogtreecommitdiffstats
path: root/config
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2022-12-20 06:40:17 +0000
committerHenning Baldersheim <balder@yahoo-inc.com>2022-12-20 09:56:44 +0000
commitf3956e6144fdb4fc05b4d61cab45b77a89dca48a (patch)
tree409c7b05415a633fc99676c5f83a0383f4d69be0 /config
parent553ae81bbfb5b69ca94561f0a31d11619c0f46e7 (diff)
Also drop aborted requests.
Diffstat (limited to 'config')
-rw-r--r--config/src/vespa/config/frt/frtsource.cpp33
-rw-r--r--config/src/vespa/config/frt/frtsource.h2
2 files changed, 22 insertions, 13 deletions
diff --git a/config/src/vespa/config/frt/frtsource.cpp b/config/src/vespa/config/frt/frtsource.cpp
index 11839ac0b50..ea0b514e168 100644
--- a/config/src/vespa/config/frt/frtsource.cpp
+++ b/config/src/vespa/config/frt/frtsource.cpp
@@ -73,32 +73,37 @@ FRTSource::getConfig()
connection->invoke(req, clientTimeout, this);
}
+void
+FRTSource::erase(FRT_RPCRequest * request) {
+ std::lock_guard guard(_lock);
+ _inflight.erase(request);
+ _cond.notify_all();
+}
+
+std::shared_ptr<FRTConfigRequest>
+FRTSource::find(FRT_RPCRequest * request) {
+ std::lock_guard guard(_lock);
+ auto found = _inflight.find(request);
+ assert(found != _inflight.end());
+ return found->second;
+}
void
FRTSource::RequestDone(FRT_RPCRequest * request)
{
if (request->GetErrorCode() == FRTE_RPC_ABORT) {
LOG(debug, "request aborted, stopping");
+ erase(request);
return;
}
- std::shared_ptr<FRTConfigRequest> configRequest;
- {
- std::lock_guard guard(_lock);
- auto found = _inflight.find(request);
- assert(found != _inflight.end());
- configRequest = found->second;
- }
+ std::shared_ptr<FRTConfigRequest> configRequest = find(request);
// If this was error from FRT side and nothing to do with config, notify
// connection about the error.
if (request->IsError()) {
configRequest->setError(request->GetErrorCode());
}
_agent->handleResponse(*configRequest, configRequest->createResponse(request));
- {
- std::lock_guard guard(_lock);
- _inflight.erase(request);
- _cond.notify_all();
- }
+ erase(request);
LOG(spam, "Calling schedule");
scheduleNextGetConfig();
}
@@ -122,7 +127,9 @@ FRTSource::close()
inflight.clear();
LOG(spam, "Waiting");
std::unique_lock guard(_lock);
- while (!_inflight.empty()) _cond.wait(guard);
+ while (!_inflight.empty()) {
+ _cond.wait(guard);
+ }
LOG(spam, "closed");
}
diff --git a/config/src/vespa/config/frt/frtsource.h b/config/src/vespa/config/frt/frtsource.h
index 104b7318d8d..8bc654dd05a 100644
--- a/config/src/vespa/config/frt/frtsource.h
+++ b/config/src/vespa/config/frt/frtsource.h
@@ -28,6 +28,8 @@ public:
void getConfig() override;
private:
void scheduleNextGetConfig();
+ void erase(FRT_RPCRequest *);
+ std::shared_ptr<FRTConfigRequest> find(FRT_RPCRequest *);
using RequestMap = std::map<FRT_RPCRequest *, std::shared_ptr<FRTConfigRequest>>;
std::shared_ptr<ConnectionFactory> _connectionFactory;