summaryrefslogtreecommitdiffstats
path: root/logd/src
diff options
context:
space:
mode:
authorTor Egge <Tor.Egge@broadpark.no>2019-03-20 13:23:32 +0100
committerTor Egge <Tor.Egge@broadpark.no>2019-03-20 13:27:18 +0100
commit306d3f1f050814d2d57d38ae17957929b3746b4a (patch)
tree499edd0841d0a8b63e15ee6741199b39ef26f773 /logd/src
parentb5ffed4ce1dcad6a3c1e206c4357f95740ad8e7b (diff)
Remove unused portions of logd.
Diffstat (limited to 'logd/src')
-rw-r--r--logd/src/logd/CMakeLists.txt3
-rw-r--r--logd/src/logd/cmdbuf.cpp145
-rw-r--r--logd/src/logd/cmdbuf.h27
-rw-r--r--logd/src/logd/forward.cpp12
-rw-r--r--logd/src/logd/forward.h3
-rw-r--r--logd/src/logd/perform.cpp291
-rw-r--r--logd/src/logd/perform.h42
-rw-r--r--logd/src/logd/service.cpp146
-rw-r--r--logd/src/logd/service.h68
-rw-r--r--logd/src/logd/watch.cpp50
-rw-r--r--logd/src/tests/forward/forward.cpp8
11 files changed, 11 insertions, 784 deletions
diff --git a/logd/src/logd/CMakeLists.txt b/logd/src/logd/CMakeLists.txt
index 78892fdeca6..dc3a25799eb 100644
--- a/logd/src/logd/CMakeLists.txt
+++ b/logd/src/logd/CMakeLists.txt
@@ -1,13 +1,10 @@
# Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
vespa_add_library(logd STATIC
SOURCES
- cmdbuf.cpp
conf.cpp
conn.cpp
forward.cpp
metrics.cpp
- perform.cpp
- service.cpp
state.cpp
watch.cpp
diff --git a/logd/src/logd/cmdbuf.cpp b/logd/src/logd/cmdbuf.cpp
deleted file mode 100644
index b9836b5d8b0..00000000000
--- a/logd/src/logd/cmdbuf.cpp
+++ /dev/null
@@ -1,145 +0,0 @@
-// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-
-#include "cmdbuf.h"
-#include "errhandle.h"
-#include "perform.h"
-#include <fcntl.h>
-#include <unistd.h>
-
-#include <vespa/log/log.h>
-LOG_SETUP("");
-
-namespace logdemon {
-
-CmdBuf::CmdBuf()
- : _size(1000),
- _buf((char *)malloc(_size)),
- _bp(_buf),
- _left(_size)
-{ }
-
-CmdBuf::~CmdBuf()
-{
- free(_buf);
-}
-
-bool
-CmdBuf::hasCmd()
-{
- char *p = _buf;
- while (p < _bp) {
- if (*p == '\n') return true;
- p++;
- }
- return false;
-
-}
-
-void
-CmdBuf::doCmd(Performer& via)
-{
- char *p = _buf;
- while (p < _bp) {
- if (*p == '\n') {
- *p = '\0';
- LOG(spam, "doing command: '%s'", _buf);
- via.doCmd(_buf);
-
- ++p;
- int len = p - _buf;
- int movelen = _bp - p;
- memmove(_buf, p, movelen);
- _bp -= len;
- _left += len;
-
- p = _buf;
- continue;
- }
- p++;
- }
-}
-
-
-void
-CmdBuf::extend()
-{
- _size *= 2;
- int pos = _bp - _buf;
- char *nbuf = (char *)realloc(_buf, _size);
- if (nbuf == nullptr) {
- free(_buf);
- LOG(error, "could not allocate %d bytes", _size);
- throw SomethingBad("realloc failed");
- }
- _buf = nbuf;
- _bp = _buf + pos;
- _left = _size - pos;
-}
-
-#ifndef O_NONBLOCK
-#define O_NONBLOCK O_NDELAY
-#endif
-
-void
-CmdBuf::maybeRead(int fd)
-{
- struct timeval notime;
- notime.tv_sec = 0;
- notime.tv_usec = 0;
-
- fd_set fdset;
- FD_ZERO(&fdset);
- FD_SET(fd, &fdset);
-
- while (select(fd + 1, &fdset, nullptr, nullptr, &notime) > 0) {
- // usually loops just once
- int oflags = fcntl(fd, F_GETFL);
- int nbflags = oflags | O_NONBLOCK;
-
- if (fcntl(fd, F_SETFL, nbflags) != 0) {
- LOG(error, "could not fcntl logserver socket: %s", strerror(errno));
- throw SomethingBad("fcntl failed");
- }
-
- ssize_t len = ::read(fd, _bp, _left);
- if (len > 0) {
- _bp += len;
- _left -= len;
- if (_left < 80) {
- extend();
- }
- } else if (len < 0) {
- LOG(warning, "error reading from logserver socket: %s", strerror(errno));
- throw ConnectionException("error reading");
- }
- fcntl(fd, F_SETFL, oflags);
- if (len == 0) {
- LOG(warning, "read 0 bytes from logserver socket");
- throw ConnectionException("eof on socket");
- break;
- }
- }
- return;
-}
-
-
-bool
-CmdBuf::readFile(int fd)
-{
- ssize_t len = ::read(fd, _bp, _left);
- if (len > 0) {
- _bp += len;
- _left -= len;
- if (_left < 80) {
- extend();
- }
- return true;
- }
- if (len < 0) {
- LOG(error, "error reading file: %s", strerror(errno));
- throw SomethingBad("read failed");
- }
- return false;
-}
-
-} // namespace
diff --git a/logd/src/logd/cmdbuf.h b/logd/src/logd/cmdbuf.h
deleted file mode 100644
index 0c3fd75d07e..00000000000
--- a/logd/src/logd/cmdbuf.h
+++ /dev/null
@@ -1,27 +0,0 @@
-// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-#pragma once
-
-namespace logdemon {
-
-class Performer;
-
-class CmdBuf
-{
-private:
- int _size;
- char *_buf;
- char *_bp;
- int _left;
- void extend();
-public:
- CmdBuf(const CmdBuf& other) = delete;
- CmdBuf& operator= (const CmdBuf& other) = delete;
- CmdBuf();
- ~CmdBuf();
- bool hasCmd();
- void doCmd(Performer &via);
- void maybeRead(int fd);
- bool readFile(int fd);
-};
-
-} // namespace
diff --git a/logd/src/logd/forward.cpp b/logd/src/logd/forward.cpp
index 1abf6bffe58..4b666ef261e 100644
--- a/logd/src/logd/forward.cpp
+++ b/logd/src/logd/forward.cpp
@@ -10,6 +10,8 @@
#include <vespa/log/log.h>
LOG_SETUP("");
+using LogLevel = ns_log::Logger::LogLevel;
+
namespace logdemon {
Forwarder::Forwarder(Metrics &metrics)
@@ -17,7 +19,6 @@ Forwarder::Forwarder(Metrics &metrics)
_metrics(metrics),
_forwardMap(),
_levelparser(),
- knownServices(),
_badLines(0)
{}
Forwarder::~Forwarder() = default;
@@ -117,8 +118,6 @@ Forwarder::parseline(const char *linestart, const char *lineend)
LOG(spam, "bad logline no 3. tab: %.*s", llength, linestart);
return false;
}
- int pid = strtol(fieldstart, &eod, 10);
- // not checked - pid may not be a number after all
// service
fieldstart = tab + 1;
@@ -168,12 +167,7 @@ Forwarder::parseline(const char *linestart, const char *lineend)
if (found != _forwardMap.end()) {
return found->second;
}
-
- Service *svcp = knownServices.getService(service);
- Component *cp = svcp->getComponent(component);
- cp->remember(logtime, pid);
- bool retval = cp->shouldForward(l);
- return retval;
+ return false; // Unknown log level
}
LogLevel
diff --git a/logd/src/logd/forward.h b/logd/src/logd/forward.h
index 8549a0801a4..d9a81098ac7 100644
--- a/logd/src/logd/forward.h
+++ b/logd/src/logd/forward.h
@@ -1,7 +1,7 @@
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
#pragma once
-#include "service.h"
+#include <vespa/log/log.h>
#include <map>
#include <unordered_set>
@@ -38,7 +38,6 @@ private:
}
bool parseline(const char *linestart, const char *lineend);
public:
- Services knownServices;
int _badLines;
Forwarder(Metrics &metrics);
~Forwarder();
diff --git a/logd/src/logd/perform.cpp b/logd/src/logd/perform.cpp
deleted file mode 100644
index 07afac88841..00000000000
--- a/logd/src/logd/perform.cpp
+++ /dev/null
@@ -1,291 +0,0 @@
-// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-
-#include "perform.h"
-#include "cmdbuf.h"
-#include <cassert>
-
-#include <vespa/log/log.h>
-LOG_SETUP("");
-
-namespace logdemon {
-
-namespace {
-
-bool
-isPrefix(const char *prefix, const char *line)
-{
- while (*prefix) {
- if (*prefix++ != *line++) return false;
- }
- return true;
-}
-
-}
-
-Performer::~Performer() = default;
-ExternalPerformer::~ExternalPerformer() = default;
-
-void
-ExternalPerformer::listStates(const char *service, const char *component)
-{
- Service *svc = _services.getService(service);
- Component *cmp = svc->getComponent(component);
-
- using ns_log::Logger;
-
- char buf[1024];
- int pos = snprintf(buf, 1024, "state %s %s ", service, component);
- for (int i = 0; pos < 1000 && i < Logger::NUM_LOGLEVELS; i++) {
- LogLevel level = static_cast<LogLevel>(i);
- const char *levstate = "off";
- if (cmp->shouldLogAtAll(level)) {
- if (cmp->shouldForward(level)) {
- levstate = "forward";
- } else {
- levstate = "store";
- }
- }
- pos += snprintf(buf+pos, 1024-pos, "%s=%s,", Logger::logLevelNames[i], levstate);
- }
- if (pos < 1000) {
- buf[pos-1]='\n';
- _forwarder.forwardText(buf, pos);
- } else {
- LOG(warning, "buffer to small to list states[%s, %s]", service, component);
- }
-}
-
-void
-ExternalPerformer::doCmd(char *line)
-{
- if (isPrefix("list services", line)) {
- for (const auto & entry : _services._services) {
- char buf[1024];
- snprintf(buf, 1024, "service %s\n", entry.first.c_str());
- _forwarder.forwardText(buf, strlen(buf));
- }
- return;
- }
- if (isPrefix("list components ", line)) {
- const char *servstr = line+5+11;
- Service *svc = _services.getService(servstr);
- for (const auto & entry : svc->components()) {
- const char * key = entry.first.c_str();
- char buf[1024];
- snprintf(buf, 1024, "component %s %s\n", servstr, key);
- int len = strlen(buf);
- if (len < 1000) {
- _forwarder.forwardText(buf, len);
- } else {
- LOG(warning, "buffer too small to list component %s %s", servstr, key);
- }
- }
- return;
- }
- if (isPrefix("list states ", line)) {
- char *servstr = line+5+7;
- char *compstr = strchr(servstr, ' ');
- if (compstr == nullptr) {
- Service *svc = _services.getService(servstr);
- for (const auto & entry : svc->components()) {
- listStates(servstr, entry.first.c_str());
- }
- return;
- }
- *compstr++ = '\0';
- listStates(servstr, compstr);
- return;
- }
- if (isPrefix("setallstates", line)) {
- char *levmods = strchr(line, ' ');
- if (levmods == nullptr) {
- LOG(error, "bad command: %s", line);
- } else {
- std::string orig(line);
- *levmods++ = '\0';
- doSetAllStates(levmods, orig.c_str());
- }
- return;
- }
- if (isPrefix("setstate ", line)) {
- char *servstr = line + 9;
- char *compstr = strchr(servstr, ' ');
- if (compstr == nullptr) {
- LOG(error, "bad command: %s", line);
- return;
- }
- *compstr++ = '\0';
- char *levmods = strchr(compstr, ' ');
- if (levmods == nullptr) {
- LOG(error, "bad command: %s %s", line, compstr);
- return;
- }
- *levmods++ = '\0';
-
- Service *svc = _services.getService(servstr);
- Component *cmp = svc->getComponent(compstr);
- if (doSetState(levmods, cmp, line) == nullptr) return;
-
- // maybe ???
- listStates(servstr, compstr);
- return;
- }
- if (isPrefix("setdefaultstate ", line)) {
- char *levmods = strchr(line, ' ');
- *levmods++ = '\0';
- while (levmods) {
- char *newval = strchr(levmods, '=');
- if (!newval) {
- LOG(error, "bad command %s: expected level=value, got %s",
- line, levmods);
- return;
- }
- *newval++ = '\0';
-
- LogLevel level = _levelparser.parseLevel(levmods);
- char *nextlev = strchr(newval, ',');
- if (nextlev) *nextlev++ = '\0';
- if (strcmp(newval, "forward") == 0) {
- Component::defaultDoForward(level);
- } else if (strcmp(newval, "noforward") == 0) {
- Component::defaultDontForward(level);
- } else {
- LOG(error, "bad command %s %s=%s: want forward/noforward",
- line, levmods, newval);
- return;
- }
- levmods = nextlev;
- }
- return;
- }
- LOG(error, "unknown command: %s", line);
-}
-
-void
-ExternalPerformer::doSetAllStates(char *levmods, const char *origline) {
- while (levmods) {
- char *newval = strchr(levmods, '=');
- if (!newval) {
- LOG(error, "bad command %s : expected level=value, got %s", origline, levmods);
- return;
- }
- *newval++ = '\0';
-
- LogLevel level = _levelparser.parseLevel(levmods);
- char *nextlev = strchr(newval, ',');
- if (nextlev) *nextlev++ = '\0';
- for (const auto & serviceEntry : _services._services) {
- Service *svc = _services.getService(serviceEntry.first);
- for (const auto & entry : svc->components()) {
- Component *cmp = svc->getComponent(entry.first);
- assert(cmp != 0);
-
- if (strcmp(newval, "forward") == 0) {
- cmp->doForward(level);
- cmp->doLogAtAll(level);
- } else if (strcmp(newval, "noforward") == 0) {
- cmp->dontForward(level);
- } else if (strcmp(newval, "store") == 0) {
- cmp->dontForward(level);
- cmp->doLogAtAll(level);
- } else if (strcmp(newval, "off") == 0) {
- cmp->dontForward(level);
- cmp->dontLogAtAll(level);
- } else {
- LOG(error, "bad command %s: want forward/store/off, got %s", origline, newval);
- return;
- }
- }
- }
-
- levmods = nextlev;
- }
-}
-
-char *
-ExternalPerformer::doSetState(char *levmods, Component *cmp, char * line) {
- while (levmods) {
- char *newval = strchr(levmods, '=');
- if (!newval) {
- LOG(error, "bad command %s : expected level=value, got %s", line, levmods);
- return nullptr;
- }
- *newval++ = '\0';
-
- LogLevel level = _levelparser.parseLevel(levmods);
- char *nextlev = strchr(newval, ',');
- if (nextlev) *nextlev++ = '\0';
- if (strcmp(newval, "forward") == 0) {
- cmp->doForward(level);
- cmp->doLogAtAll(level);
- } else if (strcmp(newval, "noforward") == 0) {
- cmp->dontForward(level);
- } else if (strcmp(newval, "store") == 0) {
- cmp->dontForward(level);
- cmp->doLogAtAll(level);
- } else if (strcmp(newval, "off") == 0) {
- cmp->dontForward(level);
- cmp->dontLogAtAll(level);
- } else {
- LOG(error, "bad command %s %s=%s: want forward/store/off", line, levmods, newval);
- return nullptr;
- }
- levmods = nextlev;
- }
- return levmods;
-}
-
-void
-InternalPerformer::doCmd(char *line)
-{
- if (isPrefix("setstate ", line)){
- char *servstr = line + 9;
- char *compstr = strchr(servstr, ' ');
- if (compstr == nullptr) {
- LOG(error, "bad internal command: %s", line);
- return;
- }
- *compstr++ = '\0';
- char *levmods = strchr(compstr, ' ');
- if (levmods == nullptr) {
- LOG(error, "bad internal command: %s %s", line, compstr);
- return;
- }
- *levmods++ = '\0';
-
- // ignore services with slash in the name, invalid
- if (strchr(servstr, '/') != nullptr)
- return;
-
- Service *svc = _services.getService(servstr);
- Component *cmp = svc->getComponent(compstr);
-
- while (levmods) {
- char *newval = strchr(levmods, '=');
- if (!newval) {
- LOG(error, "bad internal %s %s: expected level=value, got %s", line, compstr, levmods);
- return;
- }
- *newval++ = '\0';
-
- LogLevel level = _levelparser.parseLevel(levmods);
- char *nextlev = strchr(newval, ',');
- if (nextlev) *nextlev++ = '\0';
- if (strcmp(newval, "forward") == 0) {
- cmp->doForward(level);
- } else if (strcmp(newval, "store") == 0) {
- cmp->dontForward(level);
- } else if (strcmp(newval, "off") == 0) {
- cmp->dontForward(level);
- } else {
- LOG(error, "bad internal %s %s %s=%s: want forward/store/off", line, compstr, levmods, newval);
- return;
- }
- levmods = nextlev;
- }
- return;
- }
- LOG(error, "unknown command: %s", line);
-}
-
-} // namespace
diff --git a/logd/src/logd/perform.h b/logd/src/logd/perform.h
deleted file mode 100644
index 0303360fe49..00000000000
--- a/logd/src/logd/perform.h
+++ /dev/null
@@ -1,42 +0,0 @@
-// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-#pragma once
-
-#include "forward.h"
-
-namespace logdemon {
-
-class Performer
-{
-protected:
- LevelParser _levelparser;
-public:
- virtual void doCmd(char *line) = 0;
- Performer() : _levelparser() {}
- virtual ~Performer();
-};
-
-class ExternalPerformer: public Performer
-{
-private:
- Forwarder& _forwarder;
- Services& _services;
- void listStates(const char *service, const char *component);
-public:
- void doCmd(char *line) override;
- void doSetAllStates(char *levmods, const char * line);
- char *doSetState(char *levmods, Component *cmp, char *line);
- ExternalPerformer(Forwarder& fw, Services& s)
- : _forwarder(fw), _services(s) {}
- ~ExternalPerformer();
-};
-
-class InternalPerformer: public Performer
-{
- Services& _services;
-public:
- void doCmd(char *line) override;
- InternalPerformer(Services& s) : _services(s) {}
- ~InternalPerformer() {}
-};
-
-} // namespace
diff --git a/logd/src/logd/service.cpp b/logd/src/logd/service.cpp
deleted file mode 100644
index 7a4e3c97222..00000000000
--- a/logd/src/logd/service.cpp
+++ /dev/null
@@ -1,146 +0,0 @@
-// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-#include "service.h"
-#include <cassert>
-#include <unistd.h>
-
-#include <vespa/log/log.h>
-#include <vespa/log/control-file.h>
-LOG_SETUP("logdemon");
-
-
-namespace logdemon {
-
-unsigned long Component::defFwd = (unsigned long)-1;
-
-Component::Component(const std::string & servicename, const std::string & name)
- : _isforwarding(defFwd), _lastseen(0.0), _lastpid(0),
- _myservice(servicename), _myname(name),
- _logctlname(name.substr(std::min(name.size(), name.find('.'))))
-{
- assert(ns_log::Logger::NUM_LOGLEVELS < 32);
-}
-
-Component::~Component() = default;
-
-void
-Component::doLogAtAll(LogLevel level)
-{
- using ns_log::ControlFile;
-
- char lcfn[FILENAME_MAX];
- if (! ControlFile::makeName(_myservice.c_str(), lcfn, FILENAME_MAX)) {
- LOG(debug, "no logcontrol file for service '%s'", _myservice.c_str());
- return;
- }
- try {
- ControlFile foo(lcfn, ControlFile::READWRITE);
- unsigned int *lstring = foo.getLevels(_logctlname.c_str());
- lstring[level] = CHARS_TO_UINT(' ', ' ', 'O', 'N');
- } catch (...) {
- LOG(debug, "exception changing logcontrol for %s", _myservice.c_str());
- }
-}
-
-void
-Component::dontLogAtAll(LogLevel level)
-{
- using ns_log::ControlFile;
-
- char lcfn[FILENAME_MAX];
- if (! ControlFile::makeName(_myservice.c_str(), lcfn, FILENAME_MAX)) {
- LOG(debug, "no logcontrol file for service '%s'", _myservice.c_str());
- return;
- }
- try {
- ControlFile foo(lcfn, ControlFile::READWRITE);
- unsigned int *lstring = foo.getLevels(_logctlname.c_str());
- lstring[level] = CHARS_TO_UINT(' ', 'O', 'F', 'F');
- } catch (...) {
- LOG(debug, "exception changing logcontrol for %s", _myservice.c_str());
- }
-}
-
-bool
-Component::shouldLogAtAll(LogLevel level) const
-{
- using ns_log::ControlFile;
-
- char lcfn[FILENAME_MAX];
- if (! ControlFile::makeName(_myservice.c_str(), lcfn, FILENAME_MAX)) {
- LOG(spam, "no logcontrol file for service '%s'", _myservice.c_str());
- return true;
- }
- try {
- ControlFile foo(lcfn, ControlFile::READWRITE);
- unsigned int *lstring = foo.getLevels(_logctlname.c_str());
- return (lstring[level] == CHARS_TO_UINT(' ', ' ', 'O', 'N'));
- } catch (...) {
- LOG(debug, "exception checking logcontrol for %s", _myservice.c_str());
- }
- return true;
-}
-
-Service::Service(const std::string & name)
- : _myname(name),
- _components()
-{
-}
-
-Service::~Service() = default;
-
-Component *
-Service::getComponent(const std::string & comp) {
- auto found = _components.find(comp);
- if (found == _components.end()) {
- _components[comp] = std::make_unique<Component>(_myname, comp);
- found = _components.find(comp);
- }
- return found->second.get();
-}
-
-Service *
-Services::getService(const std::string & serv) {
- auto found = _services.find(serv);
- if (found == _services.end()) {
- _services[serv] = std::make_unique<Service>(serv);
- found = _services.find(serv);
- }
- return found->second.get();
-}
-
-Services::Services() = default;
-Services::~Services() = default;
-
-void
-Services::dumpState(int fildesc)
-{
- using ns_log::Logger;
-
- for (const auto & serviceEntry : _services) {
- const Service & svc = *serviceEntry.second;
- const char * service = serviceEntry.first.c_str();
- for (const auto & entry : svc.components()) {
- const Component & cmp = *entry.second;
- const char * key = entry.first.c_str();
- char buf[1024];
- int pos = snprintf(buf, 1024, "setstate %s %s ", service, key);
- for (int i = 0; pos < 1000 && i < Logger::NUM_LOGLEVELS; i++) {
- LogLevel l = static_cast<LogLevel>(i);
- pos += snprintf(buf+pos, 1024-pos, "%s=%s,", Logger::logLevelNames[i],
- cmp.shouldForward(l) ? "forward" : "store");
- }
- if (pos < 1000) {
- buf[pos-1]='\n';
- ssize_t writeRes = write(fildesc, buf, pos);
- if (writeRes != pos) {
- LOG(warning, "Write failed, res=%zd, should be %d: %s",
- writeRes, pos, strerror(errno));
- }
- } else {
- LOG(warning, "buffer to small to dumpstate[%s, %s]", service, key);
- }
- }
- }
-}
-
-}
diff --git a/logd/src/logd/service.h b/logd/src/logd/service.h
deleted file mode 100644
index e27387c6cae..00000000000
--- a/logd/src/logd/service.h
+++ /dev/null
@@ -1,68 +0,0 @@
-// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-#pragma once
-
-#include <logd/config-logd.h>
-#include <vespa/log/log.h>
-#include <unordered_map>
-
-namespace logdemon {
-
-typedef ns_log::Logger::LogLevel LogLevel;
-
-class Component
-{
- unsigned long _isforwarding;
- double _lastseen;
- int _lastpid;
- std::string _myservice;
- std::string _myname;
- std::string _logctlname;
-
- static unsigned long defFwd;
-public:
- static void defaultDoForward(LogLevel level) { defFwd |= (1 << level); }
- static void defaultDontForward(LogLevel level) { defFwd &= ~(1 << level); }
-
- void doForward(LogLevel level) { _isforwarding |= (1 << level); }
- void dontForward(LogLevel level) { _isforwarding &= ~(1 << level); }
- bool shouldForward(LogLevel level) const {
- return ((_isforwarding & (1 << level)) != 0);
- }
- void doLogAtAll(LogLevel level);
- void dontLogAtAll(LogLevel level);
- bool shouldLogAtAll(LogLevel level) const;
- Component(const std::string & servicename, const std::string & name);
- ~Component();
- void remember(double t, int p) { _lastseen = t; _lastpid = p; }
- double lastSeen() const { return _lastseen; }
- double lastPid() const { return _lastpid; }
- const std::string & getLogCtlName() const { return _logctlname; }
-};
-
-class Service
-{
-public:
- using ComponentMap = std::unordered_map<std::string, std::unique_ptr<Component>>;
- Service(const Service& other) = delete;
- Service& operator= (const Service& other) = delete;
- Service(const std::string & name);
- ~Service();
- Component *getComponent(const std::string & comp);
- const ComponentMap & components() const { return _components; }
-private:
- std::string _myname;
- ComponentMap _components;
-};
-
-class Services
-{
-public:
- std::unordered_map<std::string, std::unique_ptr<Service>> _services;
- Service *getService(const std::string & serv);
- Services();
- ~Services();
- void dumpState(int fildesc);
-};
-
-} // namespace
-
diff --git a/logd/src/logd/watch.cpp b/logd/src/logd/watch.cpp
index fc1937e5693..b95b58a4564 100644
--- a/logd/src/logd/watch.cpp
+++ b/logd/src/logd/watch.cpp
@@ -2,11 +2,8 @@
#include "watch.h"
#include "errhandle.h"
-#include "service.h"
#include "forward.h"
#include "conf.h"
-#include "perform.h"
-#include "cmdbuf.h"
#include <glob.h>
#include <unistd.h>
#include <fcntl.h>
@@ -90,15 +87,13 @@ class StateSaver {
public:
StateSaver();
~StateSaver();
- void saveState(const donecache&, Services&);
- bool loadState(donecache&, Forwarder&);
- void doFullsave() { _cachecounter = 300; }
+ void saveState(const donecache&);
+ bool loadState(donecache&);
private:
int _savefd;
- int _cachecounter;
};
-void StateSaver::saveState(const donecache& already, Services& currentserv)
+void StateSaver::saveState(const donecache& already)
{
if (_savefd < 0) {
// cannot save state
@@ -110,41 +105,22 @@ void StateSaver::saveState(const donecache& already, Services& currentserv)
LOG(error, "error writing to donecachefile: %s", strerror(errno));
close(_savefd);
_savefd = -1;
- } else if (++_cachecounter > 300) {
- currentserv.dumpState(_savefd);
- off_t here = lseek(_savefd, (off_t)0, SEEK_CUR);
- LOG(debug, "cached already %d/%d %d, trunc at %d",
- (int)already.st_dev, (int)already.st_ino,
- (int)already.offset, (int)here);
- if (here == (off_t)-1) {
- LOG(error, "lseek failed: %s", strerror(errno));
- } else if (ftruncate(_savefd, here) < 0) {
- LOG(error, "ftruncate %d=%d failed: %s", _savefd, (int)here, strerror(errno));
- }
- _cachecounter = 0;
}
}
bool
-StateSaver::loadState(donecache& already, Forwarder& fwd)
+StateSaver::loadState(donecache& already)
{
if (_savefd >= 0 &&
read(_savefd, &already, sizeof(already)) == sizeof(already))
{
- InternalPerformer iperf(fwd.knownServices);
- CmdBuf filebuf;
- while (filebuf.readFile(_savefd)) {
- while (filebuf.hasCmd()) {
- filebuf.doCmd(iperf);
- }
- }
return true;
} else {
return false;
}
}
-StateSaver::StateSaver() : _savefd(-1), _cachecounter(300)
+StateSaver::StateSaver() : _savefd(-1)
{
_savefd = open("var/db/vespa/logd.donestate", O_RDWR|O_CREAT, 0664);
if (_savefd < 0) {
@@ -177,11 +153,8 @@ Watcher::watchfile()
throw SomethingBad("too long filename in watchfile");
}
- ExternalPerformer performer(_forwarder, _forwarder.knownServices);
- CmdBuf cmdbuf;
-
StateSaver dcf;
- if (dcf.loadState(already, _forwarder)) {
+ if (dcf.loadState(already)) {
already.valid = true;
}
@@ -312,22 +285,13 @@ Watcher::watchfile()
}
}
- dcf.saveState(already, _forwarder.knownServices);
+ dcf.saveState(already);
if (_confsubscriber.checkAvailable()) {
LOG(debug, "new config available, doing reconfigure");
return;
}
- if (_confsubscriber.useLogserver()) {
- cmdbuf.maybeRead(_forwarder.getLogserverFD());
- while (cmdbuf.hasCmd()) {
- cmdbuf.doCmd(performer);
- // in case forwarding changes
- dcf.doFullsave();
- }
- }
-
if (catcher.receivedStopSignal()) {
throw SigTermException("caught signal");
}
diff --git a/logd/src/tests/forward/forward.cpp b/logd/src/tests/forward/forward.cpp
index e541297208b..16bea8f27fc 100644
--- a/logd/src/tests/forward/forward.cpp
+++ b/logd/src/tests/forward/forward.cpp
@@ -69,12 +69,4 @@ TEST_FF("require that forwarder does not forward if not set", Forwarder(m), Forw
f2.verifyForward(false);
}
-TEST("test that non-dotted logctlname is correctly parsed") {
- EXPECT_EQUAL("", Component("a.b.c", "x").getLogCtlName());
-}
-
-TEST("test that dotted logctlname is correctly parsed") {
- EXPECT_EQUAL(".y", Component("a.b.c", "x.y").getLogCtlName());
-}
-
TEST_MAIN() { TEST_RUN_ALL(); }