diff options
Diffstat (limited to 'slobrok')
4 files changed, 23 insertions, 17 deletions
diff --git a/slobrok/src/vespa/slobrok/server/managed_rpc_server.cpp b/slobrok/src/vespa/slobrok/server/managed_rpc_server.cpp index 065dac04304..3220a9e5d69 100644 --- a/slobrok/src/vespa/slobrok/server/managed_rpc_server.cpp +++ b/slobrok/src/vespa/slobrok/server/managed_rpc_server.cpp @@ -2,6 +2,7 @@ #include "managed_rpc_server.h" #include "i_rpc_server_manager.h" +#include "random.h" #include <vespa/fnet/frt/supervisor.h> #include <vespa/fnet/frt/target.h> @@ -16,17 +17,18 @@ ManagedRpcServer::ManagedRpcServer(const std::string & name, const std::string & spec, IRpcServerManager &manager) : NamedService(name, spec), + FNET_Task(manager.getSupervisor()->GetScheduler()), _mmanager(manager), _monitor(*this, *manager.getSupervisor()), _monitoredServer(nullptr), _checkServerReq(nullptr) { + double seconds = randomIn(0.2, 0.8); + LOG(debug, "first healthcheck for %s in %g seconds", name.c_str(), seconds); + Schedule(seconds); } - -void -ManagedRpcServer::healthCheck() -{ +void ManagedRpcServer::PerformTask() { if (_monitoredServer == nullptr) { _monitoredServer = _mmanager.getSupervisor()->GetTarget(_spec.c_str()); } @@ -35,12 +37,19 @@ ManagedRpcServer::healthCheck() _checkServerReq->SetMethodName("slobrok.callback.listNamesServed"); _monitoredServer->InvokeAsync(_checkServerReq, 25.0, this); } + double seconds = randomIn(2.5, 2.9); + LOG(debug, "next healthcheck for %s in %g seconds", getName().c_str(), seconds); + Schedule(seconds); } +void ManagedRpcServer::healthCheck() { + ScheduleNow(); +} ManagedRpcServer::~ManagedRpcServer() { LOG(debug, "(role[%s].~ManagedRpcServer)", _name.c_str()); + Kill(); cleanupMonitor(); } diff --git a/slobrok/src/vespa/slobrok/server/managed_rpc_server.h b/slobrok/src/vespa/slobrok/server/managed_rpc_server.h index 072aebd7850..13bf2ba8686 100644 --- a/slobrok/src/vespa/slobrok/server/managed_rpc_server.h +++ b/slobrok/src/vespa/slobrok/server/managed_rpc_server.h @@ -23,6 +23,7 @@ class IRpcServerManager; class ManagedRpcServer: public NamedService, public FRT_IRequestWait, + public FNET_Task, public IMonitoredServer { public: @@ -32,6 +33,7 @@ public: ~ManagedRpcServer(); void healthCheck(); + void PerformTask() override; private: IRpcServerManager &_mmanager; diff --git a/slobrok/src/vespa/slobrok/server/selfcheck.cpp b/slobrok/src/vespa/slobrok/server/selfcheck.cpp index 075db42e0d6..a9fab650772 100644 --- a/slobrok/src/vespa/slobrok/server/selfcheck.cpp +++ b/slobrok/src/vespa/slobrok/server/selfcheck.cpp @@ -18,8 +18,7 @@ SelfCheck::SelfCheck(FNET_Scheduler *sched, RpcServerMap& rpcsrvmap, RpcServerManager& rpcsrvman) : FNET_Task(sched), - _rpcsrvmap(rpcsrvmap), _rpcsrvmanager(rpcsrvman), - _checkIndex(0) + _rpcsrvmap(rpcsrvmap), _rpcsrvmanager(rpcsrvman) { // start within 1 second double seconds = randomIn(0.123, 1.000); @@ -38,18 +37,16 @@ void SelfCheck::PerformTask() { std::vector<const NamedService *> mrpcsrvlist = _rpcsrvmap.allManaged(); - if (_checkIndex < mrpcsrvlist.size()) { - const NamedService *r = mrpcsrvlist[_checkIndex++]; + + for (size_t i = 0; i < mrpcsrvlist.size(); ++i) { + const NamedService *r = mrpcsrvlist[i]; ManagedRpcServer *m = _rpcsrvmap.lookupManaged(r->getName()); - LOG(debug, "managed: %s -> %s", m->getName().c_str(), m->getSpec().c_str()); LOG_ASSERT(r == m); - m->healthCheck(); - } else { - _checkIndex = 0; + LOG(debug, "managed: %s -> %s", m->getName().c_str(), m->getSpec().c_str()); } - // reschedule more often with more services, on average 1s per loop: - double seconds = randomIn(0.5, 1.5) / (1 + mrpcsrvlist.size()); - LOG(debug, "next selfcheck in %g seconds", seconds); + // reschedule in 1-2 seconds: + double seconds = randomIn(0.987, 2.000); + LOG(debug, "selfcheck AGAIN in %g seconds", seconds); Schedule(seconds); } diff --git a/slobrok/src/vespa/slobrok/server/selfcheck.h b/slobrok/src/vespa/slobrok/server/selfcheck.h index 9bb96808666..52eced4700b 100644 --- a/slobrok/src/vespa/slobrok/server/selfcheck.h +++ b/slobrok/src/vespa/slobrok/server/selfcheck.h @@ -2,7 +2,6 @@ #pragma once #include <vespa/fnet/task.h> -#include <vector> namespace slobrok { @@ -23,7 +22,6 @@ class SelfCheck : public FNET_Task private: RpcServerMap &_rpcsrvmap; RpcServerManager &_rpcsrvmanager; - size_t _checkIndex; SelfCheck(const SelfCheck &); // Not used SelfCheck &operator=(const SelfCheck &); // Not used |