summaryrefslogtreecommitdiffstats
path: root/slobrok
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2016-10-21 14:18:08 +0000
committerHenning Baldersheim <balder@yahoo-inc.com>2016-10-21 14:18:08 +0000
commitd593d1b4a18375475af9a685a9181023aa8e2642 (patch)
tree1b699e2a5d5901c6b07fe79212b1586cb477f0a7 /slobrok
parentc202f27ac730619ca99ac5d75fd04f4942563ca0 (diff)
We only need one vtag
Diffstat (limited to 'slobrok')
-rw-r--r--slobrok/src/vespa/slobrok/server/CMakeLists.txt2
-rw-r--r--slobrok/src/vespa/slobrok/server/named_service.h10
-rw-r--r--slobrok/src/vespa/slobrok/server/rpchooks.cpp17
-rw-r--r--slobrok/src/vespa/slobrok/server/rpcmirror.cpp216
-rw-r--r--slobrok/src/vespa/slobrok/server/rpcmirror.h256
-rw-r--r--slobrok/src/vespa/slobrok/server/visible_map.h3
-rw-r--r--slobrok/src/vespa/slobrok/server/vtag.cpp21
-rw-r--r--slobrok/src/vespa/slobrok/server/vtag.h15
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) &map;
+ // unschedule timeout task
+ Unschedule();
+ completeReq();
+}
+
+
+void
+MirrorFetch::aborted(VisibleMap &map)
+{
+ LOG_ASSERT(&map == &_map);
+ (void) &map;
+ // 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) &map;
+ // unschedule timeout task
+ Unschedule();
+ completeReq();
+}
+
+
+void
+IncrementalFetch::aborted(VisibleMap &map)
+{
+ LOG_ASSERT(&map == &_map);
+ (void) &map;
+ // 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) &map;
- // unschedule timeout task
- Unschedule();
- completeReq();
-}
-
-
-void
-MirrorFetch::aborted(VisibleMap &map)
-{
- LOG_ASSERT(&map == &_map);
- (void) &map;
- // 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) &map;
- // unschedule timeout task
- Unschedule();
- completeReq();
-}
-
-
-void
-IncrementalFetch::aborted(VisibleMap &map)
-{
- LOG_ASSERT(&map == &_map);
- (void) &map;
- // 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
-