diff options
author | Arne H Juul <arnej27959@users.noreply.github.com> | 2021-06-24 14:09:44 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-06-24 14:09:44 +0200 |
commit | 26f2b9356eafcdb7ec618cd07c565a478075f2c0 (patch) | |
tree | 819e4955ff7af2ce7cca1575b7b798cdc8234366 /slobrok | |
parent | 49f1fff12b20807f670b25791609f07f7fb5320a (diff) | |
parent | b6539254c4f7a804e79cd32fb0ae900e938e9e06 (diff) |
Merge pull request #18393 from vespa-engine/arnej/safer-pointers
keep ownership in unique_ptr
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); |