diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2016-10-21 14:18:08 +0000 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2016-10-21 14:18:08 +0000 |
commit | d593d1b4a18375475af9a685a9181023aa8e2642 (patch) | |
tree | 1b699e2a5d5901c6b07fe79212b1586cb477f0a7 /slobrok | |
parent | c202f27ac730619ca99ac5d75fd04f4942563ca0 (diff) |
We only need one vtag
Diffstat (limited to 'slobrok')
-rw-r--r-- | slobrok/src/vespa/slobrok/server/CMakeLists.txt | 2 | ||||
-rw-r--r-- | slobrok/src/vespa/slobrok/server/named_service.h | 10 | ||||
-rw-r--r-- | slobrok/src/vespa/slobrok/server/rpchooks.cpp | 17 | ||||
-rw-r--r-- | slobrok/src/vespa/slobrok/server/rpcmirror.cpp | 216 | ||||
-rw-r--r-- | slobrok/src/vespa/slobrok/server/rpcmirror.h | 256 | ||||
-rw-r--r-- | slobrok/src/vespa/slobrok/server/visible_map.h | 3 | ||||
-rw-r--r-- | slobrok/src/vespa/slobrok/server/vtag.cpp | 21 | ||||
-rw-r--r-- | slobrok/src/vespa/slobrok/server/vtag.h | 15 |
8 files changed, 248 insertions, 292 deletions
diff --git a/slobrok/src/vespa/slobrok/server/CMakeLists.txt b/slobrok/src/vespa/slobrok/server/CMakeLists.txt index da337624ce3..2ac6b28a8b2 100644 --- a/slobrok/src/vespa/slobrok/server/CMakeLists.txt +++ b/slobrok/src/vespa/slobrok/server/CMakeLists.txt @@ -15,11 +15,11 @@ vespa_add_library(slobrok_slobrokserver rpc_server_manager.cpp rpc_server_map.cpp rpchooks.cpp + rpcmirror.cpp sbenv.cpp selfcheck.cpp slobrokserver.cpp visible_map.cpp - vtag.cpp metrics_producer.cpp INSTALL lib64 DEPENDS diff --git a/slobrok/src/vespa/slobrok/server/named_service.h b/slobrok/src/vespa/slobrok/server/named_service.h index f5221b75657..9d04475573a 100644 --- a/slobrok/src/vespa/slobrok/server/named_service.h +++ b/slobrok/src/vespa/slobrok/server/named_service.h @@ -18,17 +18,15 @@ namespace slobrok { class NamedService { -private: - NamedService(const NamedService &); // Not used - NamedService &operator=(const NamedService &); // Not used - protected: std::string _name; std::string _spec; public: - NamedService(const char *name, - const char *spec); + NamedService(const NamedService &) = delete; + NamedService &operator=(const NamedService &) = delete; + + NamedService(const char *name, const char *spec); virtual ~NamedService(); const char *getName() const { return _name.c_str(); } diff --git a/slobrok/src/vespa/slobrok/server/rpchooks.cpp b/slobrok/src/vespa/slobrok/server/rpchooks.cpp index 5f610ae2e45..5e7f2c401bd 100644 --- a/slobrok/src/vespa/slobrok/server/rpchooks.cpp +++ b/slobrok/src/vespa/slobrok/server/rpchooks.cpp @@ -1,12 +1,7 @@ // Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. #include <vespa/fastos/fastos.h> -#include "vtag.h" - -#include <vespa/log/log.h> -LOG_SETUP(".rpchooks"); - +#include <vespa/vespalib/component/vtag.h> #include <vespa/fnet/frt/frt.h> - #include "rpchooks.h" #include "ok_state.h" #include "named_service.h" @@ -17,6 +12,10 @@ LOG_SETUP(".rpchooks"); #include "visible_map.h" #include "rpcmirror.h" +#include <vespa/log/log.h> + +LOG_SETUP(".rpchooks"); + namespace slobrok { namespace { @@ -558,9 +557,9 @@ RPCHooks::rpc_version(FRT_RPCRequest *req) _cnts.adminReqs++; std::string ver; - char *s = VersionTag; + char *s = vespalib::VersionTag; bool needdate = true; - if (strncmp(VersionTag, "V_", 2) == 0) { + if (strncmp(vespalib::VersionTag, "V_", 2) == 0) { s += 2; do { while (strchr("0123456789", *s) != NULL) { @@ -596,7 +595,7 @@ RPCHooks::rpc_version(FRT_RPCRequest *req) } if (needdate) { ver.append("-"); - s = VersionTagDate; + s = vespalib::VersionTagDate; char *e = strchr(s, '-'); if (e == NULL) { ver.append(s); diff --git a/slobrok/src/vespa/slobrok/server/rpcmirror.cpp b/slobrok/src/vespa/slobrok/server/rpcmirror.cpp new file mode 100644 index 00000000000..12cae8ad500 --- /dev/null +++ b/slobrok/src/vespa/slobrok/server/rpcmirror.cpp @@ -0,0 +1,216 @@ +// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. + +#include "rpcmirror.h" +#include <vespa/log/log.h> + +LOG_SETUP(".rpcmirror"); + +namespace slobrok { + +MirrorFetch::MirrorFetch(FRT_Supervisor *orb, + FRT_RPCRequest *req, + VisibleMap &map, + vespalib::GenCnt gen) + : FNET_Task(orb->GetScheduler()), + _req(req), + _map(map), + _gen(gen) +{ +} + + +MirrorFetch::~MirrorFetch() +{ + LOG_ABORT("Should never be called!"); +} + + +void +MirrorFetch::completeReq() +{ + vespalib::GenCnt newgen = _map.genCnt(); + if (newgen == _gen) { // no change + _req->GetReturn()->AddStringArray(0); + _req->GetReturn()->AddStringArray(0); + } else { + std::vector<const NamedService *> rpcsrvlist = _map.allVisible(); + + FRT_Values &dst = *_req->GetReturn(); + size_t sz = rpcsrvlist.size(); + FRT_StringValue *names = dst.AddStringArray(sz); + FRT_StringValue *specs = dst.AddStringArray(sz); + for (uint32_t i = 0; i < rpcsrvlist.size(); ++i) { + dst.SetString(&names[i], rpcsrvlist[i]->getName()); + dst.SetString(&specs[i], rpcsrvlist[i]->getSpec()); + } + if (sz > 0) { + LOG(debug, "mirrorFetch %p -> %u, last [%s,%s]", + this, + (unsigned int)sz, + dst[0]._string_array._pt[sz-1]._str, + dst[1]._string_array._pt[sz-1]._str); + } else { + LOG(debug, "mirrorFetch %p -> 0 size", this); + } + } + _req->GetReturn()->AddInt32(newgen.getAsInt()); + LOG(debug, "mirrorFetch %p done (gen %d -> gen %d)", + this, _gen.getAsInt(), newgen.getAsInt()); + _req->Return(); +} + + +void +MirrorFetch::PerformTask() +{ + // cancel update notification + _map.removeUpdateListener(this); + completeReq(); +} + + +void +MirrorFetch::updated(VisibleMap &map) +{ + LOG_ASSERT(&map == &_map); + (void) ↦ + // unschedule timeout task + Unschedule(); + completeReq(); +} + + +void +MirrorFetch::aborted(VisibleMap &map) +{ + LOG_ASSERT(&map == &_map); + (void) ↦ + // unschedule timeout task + Unschedule(); + _req->SetError(FRTE_RPC_METHOD_FAILED, "slobrok shutting down"); + _req->Return(); +} + + +void +MirrorFetch::invoke(uint32_t msTimeout) +{ + _req->Detach(); + LOG(debug, "MirrorFetch %p invoked from %s (gen %d, timeout %d ms)", + this, _req->GetConnection()->GetSpec(), _gen.getAsInt(), msTimeout); + if (_map.genCnt() != _gen || msTimeout == 0) { + completeReq(); + } else { + _map.addUpdateListener(this); // register as update listener + if (msTimeout > 10000) + msTimeout = 10000; + Schedule((double) msTimeout / 1000.0); + } +} + +IncrementalFetch::IncrementalFetch(FRT_Supervisor *orb, + FRT_RPCRequest *req, + VisibleMap &map, + vespalib::GenCnt gen) + : FNET_Task(orb->GetScheduler()), + _req(req), + _map(map), + _gen(gen) +{ +} + + +IncrementalFetch::~IncrementalFetch() +{ + LOG_ABORT("Should never be called!"); +} + + +void +IncrementalFetch::completeReq() +{ + vespalib::GenCnt newgen = _map.genCnt(); + VisibleMap::MapDiff diff; + FRT_Values &dst = *_req->GetReturn(); + + if (newgen == _gen) { // no change + dst.AddInt32(_gen.getAsInt()); + } else if (_map.hasHistory(_gen)) { + diff = _map.history(_gen); + dst.AddInt32(_gen.getAsInt()); + } else { + dst.AddInt32(0); + diff.updated = _map.allVisible(); + } + + size_t sz = diff.removed.size(); + FRT_StringValue *rem = dst.AddStringArray(sz); + for (uint32_t i = 0; i < sz; ++i) { + dst.SetString(&rem[i], diff.removed[i].c_str()); + } + + sz = diff.updated.size(); + FRT_StringValue *names = dst.AddStringArray(sz); + FRT_StringValue *specs = dst.AddStringArray(sz); + for (uint32_t i = 0; i < sz; ++i) { + dst.SetString(&names[i], diff.updated[i]->getName()); + dst.SetString(&specs[i], diff.updated[i]->getSpec()); + } + + dst.AddInt32(newgen.getAsInt()); + LOG(debug, "mirrorFetch %p done (gen %d -> gen %d)", + this, _gen.getAsInt(), newgen.getAsInt()); + _req->Return(); +} + + +void +IncrementalFetch::PerformTask() +{ + // cancel update notification + _map.removeUpdateListener(this); + completeReq(); +} + + +void +IncrementalFetch::updated(VisibleMap &map) +{ + LOG_ASSERT(&map == &_map); + (void) ↦ + // unschedule timeout task + Unschedule(); + completeReq(); +} + + +void +IncrementalFetch::aborted(VisibleMap &map) +{ + LOG_ASSERT(&map == &_map); + (void) ↦ + // unschedule timeout task + Unschedule(); + _req->SetError(FRTE_RPC_METHOD_FAILED, "slobrok shutting down"); + _req->Return(); +} + + +void +IncrementalFetch::invoke(uint32_t msTimeout) +{ + _req->Detach(); + LOG(debug, "IncrementalFetch %p invoked from %s (gen %d, timeout %d ms)", + this, _req->GetConnection()->GetSpec(), _gen.getAsInt(), msTimeout); + if (_map.genCnt() != _gen || msTimeout == 0) { + completeReq(); + } else { + _map.addUpdateListener(this); // register as update listener + if (msTimeout > 10000) + msTimeout = 10000; + Schedule((double) msTimeout / 1000.0); + } +} + +} // namespace slobrok + diff --git a/slobrok/src/vespa/slobrok/server/rpcmirror.h b/slobrok/src/vespa/slobrok/server/rpcmirror.h index 889b00c6ba1..1bb31720db5 100644 --- a/slobrok/src/vespa/slobrok/server/rpcmirror.h +++ b/slobrok/src/vespa/slobrok/server/rpcmirror.h @@ -1,273 +1,53 @@ // Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. #pragma once -namespace slobrok { +#include "visible_map.h" -namespace { +namespace slobrok { class MirrorFetch : public FNET_Task, public VisibleMap::IUpdateListener { private: - MirrorFetch(const MirrorFetch &); - MirrorFetch& operator=(const MirrorFetch &); - FRT_RPCRequest *_req; VisibleMap &_map; vespalib::GenCnt _gen; public: - MirrorFetch(FRT_Supervisor *orb, - FRT_RPCRequest *req, - VisibleMap &map, - vespalib::GenCnt gen); - virtual ~MirrorFetch(); + MirrorFetch(const MirrorFetch &) = delete; + MirrorFetch& operator=(const MirrorFetch &) = delete; + + MirrorFetch(FRT_Supervisor *orb, FRT_RPCRequest *req, VisibleMap &map, vespalib::GenCnt gen); + ~MirrorFetch(); void completeReq(); - virtual void PerformTask(); - virtual void updated(VisibleMap &map); - virtual void aborted(VisibleMap &map); + void PerformTask() override; + void updated(VisibleMap &map) override; + void aborted(VisibleMap &map) override; void invoke(uint32_t msTimeout); }; - -MirrorFetch::MirrorFetch(FRT_Supervisor *orb, - FRT_RPCRequest *req, - VisibleMap &map, - vespalib::GenCnt gen) - : FNET_Task(orb->GetScheduler()), - _req(req), - _map(map), - _gen(gen) -{ -} - - -MirrorFetch::~MirrorFetch() -{ - LOG_ABORT("Should never be called!"); -} - - -void -MirrorFetch::completeReq() -{ - vespalib::GenCnt newgen = _map.genCnt(); - if (newgen == _gen) { // no change - _req->GetReturn()->AddStringArray(0); - _req->GetReturn()->AddStringArray(0); - } else { - std::vector<const NamedService *> rpcsrvlist = _map.allVisible(); - - FRT_Values &dst = *_req->GetReturn(); - size_t sz = rpcsrvlist.size(); - FRT_StringValue *names = dst.AddStringArray(sz); - FRT_StringValue *specs = dst.AddStringArray(sz); - for (uint32_t i = 0; i < rpcsrvlist.size(); ++i) { - dst.SetString(&names[i], rpcsrvlist[i]->getName()); - dst.SetString(&specs[i], rpcsrvlist[i]->getSpec()); - } - if (sz > 0) { - LOG(debug, "mirrorFetch %p -> %u, last [%s,%s]", - this, - (unsigned int)sz, - dst[0]._string_array._pt[sz-1]._str, - dst[1]._string_array._pt[sz-1]._str); - } else { - LOG(debug, "mirrorFetch %p -> 0 size", this); - } - } - _req->GetReturn()->AddInt32(newgen.getAsInt()); - LOG(debug, "mirrorFetch %p done (gen %d -> gen %d)", - this, _gen.getAsInt(), newgen.getAsInt()); - _req->Return(); -} - - -void -MirrorFetch::PerformTask() -{ - // cancel update notification - _map.removeUpdateListener(this); - completeReq(); -} - - -void -MirrorFetch::updated(VisibleMap &map) -{ - LOG_ASSERT(&map == &_map); - (void) ↦ - // unschedule timeout task - Unschedule(); - completeReq(); -} - - -void -MirrorFetch::aborted(VisibleMap &map) -{ - LOG_ASSERT(&map == &_map); - (void) ↦ - // unschedule timeout task - Unschedule(); - _req->SetError(FRTE_RPC_METHOD_FAILED, "slobrok shutting down"); - _req->Return(); -} - - -void -MirrorFetch::invoke(uint32_t msTimeout) -{ - _req->Detach(); - LOG(debug, "MirrorFetch %p invoked from %s (gen %d, timeout %d ms)", - this, _req->GetConnection()->GetSpec(), _gen.getAsInt(), msTimeout); - if (_map.genCnt() != _gen || msTimeout == 0) { - completeReq(); - } else { - _map.addUpdateListener(this); // register as update listener - if (msTimeout > 10000) - msTimeout = 10000; - Schedule((double) msTimeout / 1000.0); - } -} - - - class IncrementalFetch : public FNET_Task, public VisibleMap::IUpdateListener { private: - IncrementalFetch(const IncrementalFetch &); - IncrementalFetch& operator=(const IncrementalFetch &); - FRT_RPCRequest *_req; VisibleMap &_map; vespalib::GenCnt _gen; public: - IncrementalFetch(FRT_Supervisor *orb, - FRT_RPCRequest *req, - VisibleMap &map, - vespalib::GenCnt gen); - virtual ~IncrementalFetch(); + IncrementalFetch(const IncrementalFetch &) = delete; + IncrementalFetch& operator=(const IncrementalFetch &) = delete; + + IncrementalFetch(FRT_Supervisor *orb, FRT_RPCRequest *req, VisibleMap &map, vespalib::GenCnt gen); + ~IncrementalFetch(); void completeReq(); - virtual void PerformTask(); - virtual void updated(VisibleMap &map); - virtual void aborted(VisibleMap &map); + void PerformTask() override; + void updated(VisibleMap &map) override; + void aborted(VisibleMap &map) override; void invoke(uint32_t msTimeout); }; - -IncrementalFetch::IncrementalFetch(FRT_Supervisor *orb, - FRT_RPCRequest *req, - VisibleMap &map, - vespalib::GenCnt gen) - : FNET_Task(orb->GetScheduler()), - _req(req), - _map(map), - _gen(gen) -{ -} - - -IncrementalFetch::~IncrementalFetch() -{ - LOG_ABORT("Should never be called!"); -} - - -void -IncrementalFetch::completeReq() -{ - vespalib::GenCnt newgen = _map.genCnt(); - VisibleMap::MapDiff diff; - FRT_Values &dst = *_req->GetReturn(); - - if (newgen == _gen) { // no change - dst.AddInt32(_gen.getAsInt()); - } else if (_map.hasHistory(_gen)) { - diff = _map.history(_gen); - dst.AddInt32(_gen.getAsInt()); - } else { - dst.AddInt32(0); - diff.updated = _map.allVisible(); - } - - size_t sz = diff.removed.size(); - FRT_StringValue *rem = dst.AddStringArray(sz); - for (uint32_t i = 0; i < sz; ++i) { - dst.SetString(&rem[i], diff.removed[i].c_str()); - } - - sz = diff.updated.size(); - FRT_StringValue *names = dst.AddStringArray(sz); - FRT_StringValue *specs = dst.AddStringArray(sz); - for (uint32_t i = 0; i < sz; ++i) { - dst.SetString(&names[i], diff.updated[i]->getName()); - dst.SetString(&specs[i], diff.updated[i]->getSpec()); - } - - dst.AddInt32(newgen.getAsInt()); - LOG(debug, "mirrorFetch %p done (gen %d -> gen %d)", - this, _gen.getAsInt(), newgen.getAsInt()); - _req->Return(); -} - - -void -IncrementalFetch::PerformTask() -{ - // cancel update notification - _map.removeUpdateListener(this); - completeReq(); -} - - -void -IncrementalFetch::updated(VisibleMap &map) -{ - LOG_ASSERT(&map == &_map); - (void) ↦ - // unschedule timeout task - Unschedule(); - completeReq(); -} - - -void -IncrementalFetch::aborted(VisibleMap &map) -{ - LOG_ASSERT(&map == &_map); - (void) ↦ - // unschedule timeout task - Unschedule(); - _req->SetError(FRTE_RPC_METHOD_FAILED, "slobrok shutting down"); - _req->Return(); -} - - -void -IncrementalFetch::invoke(uint32_t msTimeout) -{ - _req->Detach(); - LOG(debug, "IncrementalFetch %p invoked from %s (gen %d, timeout %d ms)", - this, _req->GetConnection()->GetSpec(), _gen.getAsInt(), msTimeout); - if (_map.genCnt() != _gen || msTimeout == 0) { - completeReq(); - } else { - _map.addUpdateListener(this); // register as update listener - if (msTimeout > 10000) - msTimeout = 10000; - Schedule((double) msTimeout / 1000.0); - } -} - - -} // namespace <unnamed> - -//----------------------------------------------------------------------------- - } // namespace slobrok diff --git a/slobrok/src/vespa/slobrok/server/visible_map.h b/slobrok/src/vespa/slobrok/server/visible_map.h index 04a61ea1b4d..d67cb9ace70 100644 --- a/slobrok/src/vespa/slobrok/server/visible_map.h +++ b/slobrok/src/vespa/slobrok/server/visible_map.h @@ -8,11 +8,10 @@ #include <string> #include "history.h" +#include "named_service.h" namespace slobrok { -class NamedService; - /** * @class VisibleMap * @brief API to the collection of NamedService diff --git a/slobrok/src/vespa/slobrok/server/vtag.cpp b/slobrok/src/vespa/slobrok/server/vtag.cpp deleted file mode 100644 index 380d653bd28..00000000000 --- a/slobrok/src/vespa/slobrok/server/vtag.cpp +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -#include <vespa/fastos/fastos.h> -#include "vtag.h" - -#ifndef V_TAG -#define V_TAG "NOTAG" -#define V_TAG_DATE "NOTAG" -#define V_TAG_SYSTEM "NOTAG" -#define V_TAG_SYSTEM_REV "NOTAG" -#define V_TAG_BUILDER "NOTAG" -#endif - -namespace slobrok { - -char VersionTag[] = V_TAG; -char VersionTagDate[] = V_TAG_DATE; -char VersionTagSystem[] = V_TAG_SYSTEM; -char VersionTagSystemRev[] = V_TAG_SYSTEM_REV; -char VersionTagBuilder[] = V_TAG_BUILDER; - -} // namespace slobrok diff --git a/slobrok/src/vespa/slobrok/server/vtag.h b/slobrok/src/vespa/slobrok/server/vtag.h deleted file mode 100644 index 6e9227a5951..00000000000 --- a/slobrok/src/vespa/slobrok/server/vtag.h +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -#pragma once - -namespace slobrok { - -extern char VersionTag[]; -extern char VersionTagType[]; -extern char VersionTagValue[]; -extern char VersionTagDate[]; -extern char VersionTagSystem[]; -extern char VersionTagSystemRev[]; -extern char VersionTagBuilder[]; - -} // namespace slobrok - |