diff options
author | Arne Juul <arnej@verizonmedia.com> | 2021-06-24 11:14:28 +0000 |
---|---|---|
committer | Arne Juul <arnej@verizonmedia.com> | 2021-06-24 11:14:40 +0000 |
commit | b6539254c4f7a804e79cd32fb0ae900e938e9e06 (patch) | |
tree | 054ff16ec4ff12abb91e6fa4e4304035ba9453c0 /slobrok | |
parent | d25995ae103887c9509cb8622429a50b9138a7f7 (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.cpp | 38 | ||||
-rw-r--r-- | slobrok/src/vespa/slobrok/server/rpc_server_manager.h | 2 |
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); |