summaryrefslogtreecommitdiffstats
path: root/slobrok
diff options
context:
space:
mode:
authorArne Juul <arnej@verizonmedia.com>2021-06-24 11:14:28 +0000
committerArne Juul <arnej@verizonmedia.com>2021-06-24 11:14:40 +0000
commitb6539254c4f7a804e79cd32fb0ae900e938e9e06 (patch)
tree054ff16ec4ff12abb91e6fa4e4304035ba9453c0 /slobrok
parentd25995ae103887c9509cb8622429a50b9138a7f7 (diff)
keep ownership in unique_ptr
* avoid doing release() in one place and then making a new unique_ptr later, hoping that will always be in sync
Diffstat (limited to 'slobrok')
-rw-r--r--slobrok/src/vespa/slobrok/server/rpc_server_manager.cpp38
-rw-r--r--slobrok/src/vespa/slobrok/server/rpc_server_manager.h2
2 files changed, 20 insertions, 20 deletions
diff --git a/slobrok/src/vespa/slobrok/server/rpc_server_manager.cpp b/slobrok/src/vespa/slobrok/server/rpc_server_manager.cpp
index 1b373284782..ead062e9783 100644
--- a/slobrok/src/vespa/slobrok/server/rpc_server_manager.cpp
+++ b/slobrok/src/vespa/slobrok/server/rpc_server_manager.cpp
@@ -283,7 +283,7 @@ RpcServerManager::~RpcServerManager()
void
RpcServerManager::PerformTask()
{
- std::vector<std::unique_ptr<ManagedRpcServer>> deleteAfterSwap;
+ std::vector<std::unique_ptr<NamedService>> deleteAfterSwap;
std::swap(deleteAfterSwap, _deleteList);
}
@@ -292,32 +292,32 @@ void
RpcServerManager::notifyFailedRpcSrv(ManagedRpcServer *rpcsrv, std::string errmsg)
{
_env.countFailedHeartbeat();
- bool logged = false;
+ const auto &name = rpcsrv->getName();
+ const auto &spec = rpcsrv->getSpec();
+ const char *namep = name.c_str();
+ const char *specp = spec.c_str();
+ std::unique_ptr<NamedService> toDelete;
const NamedService *old = _rpcsrvmap.lookup(rpcsrv->getName());
if (old == rpcsrv) {
- old = _rpcsrvmap.remove(rpcsrv->getName()).release();
- LOG_ASSERT(old == rpcsrv);
- LOG(info, "managed server %s at %s failed: %s",
- rpcsrv->getName().c_str(), rpcsrv->getSpec().c_str(), errmsg.c_str());
- logged = true;
+ toDelete = _rpcsrvmap.remove(name);
+ LOG_ASSERT(toDelete.get() == rpcsrv);
+ LOG(info, "managed server %s at %s failed: %s", namep, specp, errmsg.c_str());
+ } else {
+ // only managed servers should exist, this is bad:
+ LOG(error, "unmanaged server %s at %s failed: %s", namep, specp, errmsg.c_str());
}
- _exchanger.forwardRemove(rpcsrv->getName(), rpcsrv->getSpec());
+ _exchanger.forwardRemove(name, spec);
for (size_t i = 0; i < _addManageds.size(); ++i) {
if (_addManageds[i].rpcsrv == rpcsrv) {
- _addManageds[i].handler
- .doneHandler(OkState(13, "failed check using listNames callback"));
- _addManageds[i].rpcsrv = 0;
- LOG(warning, "rpcserver %s at %s failed while trying to register",
- rpcsrv->getName().c_str(), rpcsrv->getSpec().c_str());
- logged = true;
+ LOG(warning, "rpcserver %s at %s failed while trying to register", namep, specp);
+ _addManageds[i].rpcsrv = nullptr;
+ _addManageds[i].handler.doneHandler(OkState(13, "failed check using listNames callback"));
}
}
- if (!logged) {
- LOG(warning, "unmanaged server %s at %s failed: %s",
- rpcsrv->getName().c_str(), rpcsrv->getSpec().c_str(), errmsg.c_str());
+ if (toDelete) {
+ _deleteList.push_back(std::move(toDelete));
+ ScheduleNow();
}
- _deleteList.push_back(std::unique_ptr<ManagedRpcServer>(rpcsrv));
- ScheduleNow();
}
void
diff --git a/slobrok/src/vespa/slobrok/server/rpc_server_manager.h b/slobrok/src/vespa/slobrok/server/rpc_server_manager.h
index 174afc1adcc..9c72fe91f18 100644
--- a/slobrok/src/vespa/slobrok/server/rpc_server_manager.h
+++ b/slobrok/src/vespa/slobrok/server/rpc_server_manager.h
@@ -43,7 +43,7 @@ private:
: rpcsrv(d), handler(std::move(h)) {}
};
std::vector<MRSandRRSC> _addManageds;
- std::vector<std::unique_ptr<ManagedRpcServer>> _deleteList;
+ std::vector<std::unique_ptr<NamedService>> _deleteList;
public:
OkState checkPartner(const std::string & remslobrok);