diff options
author | Arne Juul <arnej@yahoo-inc.com> | 2017-11-23 08:34:05 +0000 |
---|---|---|
committer | Arne Juul <arnej@yahoo-inc.com> | 2017-12-04 13:26:58 +0000 |
commit | f207f5403b91df0fb9fe6679c45ba93fcc00ab5b (patch) | |
tree | 6f2a15c167a51572058fb57d7286641c6e98c07b /logd | |
parent | 1f4e8cdcec0745047e7a99a672554844d809d715 (diff) |
fix config generation reporting
* check if a new generation is available, and
if so do full reconfiguration including updating
the generation reported via /state/v1/config API.
Diffstat (limited to 'logd')
-rw-r--r-- | logd/src/logd/conf.cpp | 28 | ||||
-rw-r--r-- | logd/src/logd/conf.h | 4 | ||||
-rw-r--r-- | logd/src/logd/watch.cpp | 5 |
3 files changed, 27 insertions, 10 deletions
diff --git a/logd/src/logd/conf.cpp b/logd/src/logd/conf.cpp index 716ba97effd..ef1f6b73cbe 100644 --- a/logd/src/logd/conf.cpp +++ b/logd/src/logd/conf.cpp @@ -35,12 +35,12 @@ ConfSub::configure(std::unique_ptr<LogdConfig> cfg) return; } strcpy(_logServer, newconf.logserver.host.c_str()); - _newConf = true; + _needToConnect = true; } if (newconf.logserver.use != _use_logserver) { _use_logserver = newconf.logserver.use; - _newConf = true; + _needToConnect = true; } _statePort = newconf.stateport; @@ -57,7 +57,7 @@ ConfSub::configure(std::unique_ptr<LogdConfig> cfg) if (newconf.logserver.port != _logPort) { _logPort = newconf.logserver.port; - _newConf = true; + _needToConnect = true; } if (newconf.rotate.size > 0) { _rotate_size = newconf.rotate.size; @@ -85,12 +85,23 @@ ConfSub::configure(std::unique_ptr<LogdConfig> cfg) } } +bool +ConfSub::checkAvailable() +{ + if (_subscriber.nextGeneration(0)) { + _hasAvailable = true; + } + return _hasAvailable; +} + void ConfSub::latch() { - if (_subscriber.nextConfig(0)) + if (checkAvailable()) { configure(_handle->getConfig()); - if (_newConf) { + _hasAvailable = false; + } + if (_needToConnect) { if (_use_logserver) { connectToLogserver(); } else { @@ -133,7 +144,7 @@ ConfSub::resetFileDescriptor(int newfd) } _logserverfd = newfd; _fw.setLogserverFD(newfd); - _newConf = false; + _needToConnect = false; } void @@ -141,7 +152,7 @@ ConfSub::closeConn() { close(_logserverfd); _logserverfd = -1; - _newConf = true; + _needToConnect = true; } ConfSub::ConfSub(Forwarder &fw, const config::ConfigUri & configUri) @@ -156,7 +167,8 @@ ConfSub::ConfSub(Forwarder &fw, const config::ConfigUri & configUri) _fw(fw), _subscriber(configUri.getContext()), _handle(), - _newConf(false) + _hasAvailable(false), + _needToConnect(true) { _logServer[0] = '\0'; _handle = _subscriber.subscribe<LogdConfig>(configUri.getConfigId()); diff --git a/logd/src/logd/conf.h b/logd/src/logd/conf.h index 7a91630ff93..a777470efc6 100644 --- a/logd/src/logd/conf.h +++ b/logd/src/logd/conf.h @@ -19,7 +19,8 @@ private: Forwarder& _fw; config::ConfigSubscriber _subscriber; config::ConfigHandle<cloud::config::log::LogdConfig>::UP _handle; - bool _newConf; + bool _hasAvailable; + bool _needToConnect; void connectToLogserver(); void connectToDevNull(); @@ -27,6 +28,7 @@ private: ConfSub(const ConfSub& other); ConfSub& operator=(const ConfSub& other); public: + bool checkAvailable(); void latch(); void closeConn(); ConfSub(Forwarder &fw, const config::ConfigUri & configUri); diff --git a/logd/src/logd/watch.cpp b/logd/src/logd/watch.cpp index ad866938ab6..2adc1cbbdbb 100644 --- a/logd/src/logd/watch.cpp +++ b/logd/src/logd/watch.cpp @@ -332,7 +332,10 @@ Watcher::watchfile() dcf.saveState(already, _forwarder.knownServices); - _confsubscriber.latch(); + if (_confsubscriber.checkAvailable()) { + LOG(debug, "new config available, doing reconfigure"); + return; + } if (_confsubscriber.useLogserver()) { cmdbuf.maybeRead(_forwarder.getLogserverFD()); |