diff options
author | Tor Brede Vekterli <vekterli@yahooinc.com> | 2021-11-30 16:39:26 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-11-30 16:39:26 +0100 |
commit | c105ea3963f924c3bd501e7f65cdaae3eb9edf56 (patch) | |
tree | 27d30f52be1c8b4edd3253775eb6fe4c2a0e029c /config | |
parent | 59df5c1c18eb9fc7c171f54fae776d81042de1d4 (diff) | |
parent | 569b584eb7e9a85f8f0d75406b1f9477a498bf07 (diff) |
Merge pull request #20299 from vespa-engine/vekterli/preserve-change-flag-for-concurrent-config-updates
Preserve change flag for concurrent config updates [run-systemtest]
Diffstat (limited to 'config')
4 files changed, 9 insertions, 5 deletions
diff --git a/config/src/vespa/config/common/configvalue.cpp b/config/src/vespa/config/common/configvalue.cpp index d770c126d38..da1cbfc792c 100644 --- a/config/src/vespa/config/common/configvalue.cpp +++ b/config/src/vespa/config/common/configvalue.cpp @@ -55,7 +55,7 @@ ConfigValue::getLegacyFormat() const return lines; } -const vespalib::string +vespalib::string ConfigValue::asJson() const { if (_payload) { const vespalib::slime::Inspector & payload(_payload->getSlimePayload()); diff --git a/config/src/vespa/config/common/configvalue.h b/config/src/vespa/config/common/configvalue.h index 553a609b9db..bf4c320c061 100644 --- a/config/src/vespa/config/common/configvalue.h +++ b/config/src/vespa/config/common/configvalue.h @@ -35,8 +35,8 @@ public: const vespalib::string & getLine(int i) const { return _lines.at(i); } const std::vector<vespalib::string> & getLines() const { return _lines; } std::vector<vespalib::string> getLegacyFormat() const; - const vespalib::string asJson() const; - const vespalib::string getXxhash64() const { return _xxhash64; } + vespalib::string asJson() const; + const vespalib::string& getXxhash64() const { return _xxhash64; } void serializeV1(::vespalib::slime::Cursor & cursor) const; void serializeV2(::vespalib::slime::Cursor & cursor) const; diff --git a/config/src/vespa/config/frt/frtconfigagent.cpp b/config/src/vespa/config/frt/frtconfigagent.cpp index 2b66e806270..827ef75251b 100644 --- a/config/src/vespa/config/frt/frtconfigagent.cpp +++ b/config/src/vespa/config/frt/frtconfigagent.cpp @@ -71,7 +71,7 @@ FRTConfigAgent::handleUpdatedGeneration(const ConfigKey & key, const ConfigState if (LOG_WOULD_LOG(spam)) { LOG(spam, "updating holder for key %s,", key.toString().c_str()); } - _holder->handle(ConfigUpdate::UP(new ConfigUpdate(_latest, changed, newState.generation))); + _holder->handle(std::make_unique<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 4aaa30323c7..9790541906b 100644 --- a/config/src/vespa/config/subscription/configsubscription.cpp +++ b/config/src/vespa/config/subscription/configsubscription.cpp @@ -31,7 +31,11 @@ ConfigSubscription::nextUpdate(int64_t generation, std::chrono::milliseconds tim if (_closed || !_holder->poll()) { return false; } + auto old = std::move(_next); _next = _holder->provide(); + if (old) { + _next->merge(*old); + } if (isGenerationNewer(_next->getGeneration(), generation)) { return true; } @@ -98,7 +102,7 @@ ConfigSubscription::flip() _current = std::move(_next); _lastGenerationChanged = _current->getGeneration(); } else { - _current.reset(new ConfigUpdate(_current->getValue(), false, _next->getGeneration())); + _current = std::make_unique<ConfigUpdate>(_current->getValue(), false, _next->getGeneration()); } _isChanged = change; } |