aboutsummaryrefslogtreecommitdiffstats
path: root/config
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2017-12-07 17:48:45 +0100
committerHenning Baldersheim <balder@yahoo-inc.com>2017-12-07 20:05:00 +0100
commit4e0107cd88ec399517747dbe6c9060ef48dcbe1d (patch)
tree87319fd9d5718a26fe9b162569b15510a72be693 /config
parent89731416ff74bb9b7e8f94fb5a8b942aa08cabb8 (diff)
Avoid unnecessary reconfig.
Diffstat (limited to 'config')
-rw-r--r--config/src/tests/configagent/configagent.cpp3
-rw-r--r--config/src/tests/configholder/configholder.cpp2
-rw-r--r--config/src/vespa/config/common/configholder.cpp6
-rw-r--r--config/src/vespa/config/common/configupdate.h1
-rw-r--r--config/src/vespa/config/frt/frtconfigagent.cpp5
-rw-r--r--config/src/vespa/config/subscription/configsubscription.cpp2
6 files changed, 13 insertions, 6 deletions
diff --git a/config/src/tests/configagent/configagent.cpp b/config/src/tests/configagent/configagent.cpp
index f6593890975..bc90cb458db 100644
--- a/config/src/tests/configagent/configagent.cpp
+++ b/config/src/tests/configagent/configagent.cpp
@@ -100,6 +100,9 @@ public:
void handle(std::unique_ptr<ConfigUpdate> update) override
{
+ if (_update) {
+ update->merge(*_update);
+ }
_update = std::move(update);
}
diff --git a/config/src/tests/configholder/configholder.cpp b/config/src/tests/configholder/configholder.cpp
index 83249da3824..2c6fa2016bf 100644
--- a/config/src/tests/configholder/configholder.cpp
+++ b/config/src/tests/configholder/configholder.cpp
@@ -46,7 +46,7 @@ TEST("Require that polling for elements work")
holder.handle(ConfigUpdate::UP(new ConfigUpdate(value, true, 0)));
ASSERT_TRUE(holder.poll());
holder.provide();
- ASSERT_TRUE(holder.poll());
+ ASSERT_FALSE(holder.poll());
}
TEST_MT_F("Require that wait is interrupted", 2, ConfigHolder)
diff --git a/config/src/vespa/config/common/configholder.cpp b/config/src/vespa/config/common/configholder.cpp
index 6eeb1bd79a2..e2e6ae87688 100644
--- a/config/src/vespa/config/common/configholder.cpp
+++ b/config/src/vespa/config/common/configholder.cpp
@@ -16,14 +16,16 @@ ConfigUpdate::UP
ConfigHolder::provide()
{
vespalib::MonitorGuard guard(_monitor);
- ConfigUpdate::UP ret(new ConfigUpdate(*_current));
- return ret;
+ return std::move(_current);
}
void
ConfigHolder::handle(ConfigUpdate::UP update)
{
vespalib::MonitorGuard guard(_monitor);
+ if (_current) {
+ update->merge(*_current);
+ }
_current = std::move(update);
guard.broadcast();
}
diff --git a/config/src/vespa/config/common/configupdate.h b/config/src/vespa/config/common/configupdate.h
index 7371d525266..9afdb9a5a40 100644
--- a/config/src/vespa/config/common/configupdate.h
+++ b/config/src/vespa/config/common/configupdate.h
@@ -19,6 +19,7 @@ public:
const ConfigValue & getValue() const;
bool hasChanged() const;
int64_t getGeneration() const;
+ void merge(const ConfigUpdate & b) { _hasChanged = _hasChanged || b.hasChanged(); }
private:
ConfigValue _value;
bool _hasChanged;
diff --git a/config/src/vespa/config/frt/frtconfigagent.cpp b/config/src/vespa/config/frt/frtconfigagent.cpp
index f475cff0a9a..c1516a7de11 100644
--- a/config/src/vespa/config/frt/frtconfigagent.cpp
+++ b/config/src/vespa/config/frt/frtconfigagent.cpp
@@ -61,16 +61,17 @@ FRTConfigAgent::handleUpdatedGeneration(const ConfigKey & key, const ConfigState
LOG(spam, "Old config: md5:%s \n%s", _latest.getMd5().c_str(), _latest.asJson().c_str());
LOG(spam, "New config: md5:%s \n%s", configValue.getMd5().c_str(), configValue.asJson().c_str());
}
+ bool changed = false;
if (_latest.getMd5() != configValue.getMd5()) {
_latest = configValue;
+ changed = true;
}
_configState = newState;
-
if (LOG_WOULD_LOG(spam)) {
LOG(spam, "updating holder for key %s,", key.toString().c_str());
}
- _holder->handle(ConfigUpdate::UP(new ConfigUpdate(_latest, true, newState.generation)));
+ _holder->handle(ConfigUpdate::UP(new ConfigUpdate(_latest, changed, newState.generation)));
_numConfigured++;
}
diff --git a/config/src/vespa/config/subscription/configsubscription.cpp b/config/src/vespa/config/subscription/configsubscription.cpp
index d97ddfd57fb..b79e3dab1fd 100644
--- a/config/src/vespa/config/subscription/configsubscription.cpp
+++ b/config/src/vespa/config/subscription/configsubscription.cpp
@@ -30,7 +30,7 @@ ConfigSubscription::nextUpdate(int64_t generation, uint64_t timeoutInMillis)
{
if (_closed || !_holder->poll())
return false;
- _next.reset(_holder->provide().release());
+ _next = _holder->provide();
if (isGenerationNewer(_next->getGeneration(), generation)) {
return true;
}