diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2022-12-21 01:14:41 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-12-21 01:14:41 +0100 |
commit | de0ca7acee403ccba040c45cc0e30e0c280520c0 (patch) | |
tree | 6d12d5375164bae393ec52b0fbd7276f63a604d8 | |
parent | 5dbe5a6374a88a783dd64395fb0f7827b3e568c2 (diff) | |
parent | f8afbd8054d10d9447a8ee3456483801e4084b10 (diff) |
Merge pull request #25309 from vespa-engine/balder/reduce-timeout
Balder/reduce timeout
5 files changed, 18 insertions, 7 deletions
diff --git a/config/src/vespa/config/subscription/configsubscriptionset.cpp b/config/src/vespa/config/subscription/configsubscriptionset.cpp index 48e2bdc2615..4f7bf64f603 100644 --- a/config/src/vespa/config/subscription/configsubscriptionset.cpp +++ b/config/src/vespa/config/subscription/configsubscriptionset.cpp @@ -6,7 +6,6 @@ #include <vespa/config/common/misc.h> #include <vespa/config/common/iconfigmanager.h> #include <vespa/config/common/iconfigcontext.h> -#include <thread> #include <vespa/log/log.h> LOG_SETUP(".config.subscription.configsubscriptionset"); @@ -23,7 +22,9 @@ ConfigSubscriptionSet::ConfigSubscriptionSet(std::shared_ptr<IConfigContext> con _mgr(_context->getManagerInstance()), _currentGeneration(-1), _subscriptionList(), - _state(OPEN) + _state(OPEN), + _lock(), + _cond() { } ConfigSubscriptionSet::~ConfigSubscriptionSet() @@ -81,8 +82,9 @@ ConfigSubscriptionSet::acquireSnapshot(duration timeout, bool ignoreChange) inSync = generationsInSync && (_subscriptionList.size() == numGenerationChanged) && (ignoreChange || numChanged > 0); lastGeneration = generation; now = steady_clock::now(); - if (!inSync && (now < deadline)) { - std::this_thread::sleep_for(std::min(_maxNapTime, deadline - now)); + std::unique_lock guard(_lock); + if (!inSync && (now < deadline) && !isClosed()) { + _cond.wait_for(guard, std::min(_maxNapTime, deadline - now)); } else { break; } @@ -109,7 +111,11 @@ ConfigSubscriptionSet::acquireSnapshot(duration timeout, bool ignoreChange) void ConfigSubscriptionSet::close() { - _state = CLOSED; + { + std::lock_guard guard(_lock); + _state = CLOSED; + _cond.notify_all(); + } for (const auto & subscription : _subscriptionList) { _mgr.unsubscribe(*subscription); subscription->close(); diff --git a/config/src/vespa/config/subscription/configsubscriptionset.h b/config/src/vespa/config/subscription/configsubscriptionset.h index 8daf7ae91ea..e4a47a9a1cc 100644 --- a/config/src/vespa/config/subscription/configsubscriptionset.h +++ b/config/src/vespa/config/subscription/configsubscriptionset.h @@ -7,6 +7,7 @@ #include <atomic> #include <memory> #include <vector> +#include <condition_variable> namespace config { @@ -72,6 +73,8 @@ private: std::atomic<int64_t> _currentGeneration; // Holds the current config generation. SubscriptionList _subscriptionList; // List of current subscriptions. std::atomic<SubscriberState> _state; // Current state of this subscriber. + std::mutex _lock; + std::condition_variable _cond; }; } // namespace config diff --git a/slobrok/src/vespa/slobrok/sbmirror.h b/slobrok/src/vespa/slobrok/sbmirror.h index d13a52f2b49..348a79fff12 100644 --- a/slobrok/src/vespa/slobrok/sbmirror.h +++ b/slobrok/src/vespa/slobrok/sbmirror.h @@ -48,7 +48,7 @@ public: /** * @brief Clean up. **/ - ~MirrorAPI(); + ~MirrorAPI() override; // Inherit doc from IMirrorAPI. SpecList lookup(vespalib::stringref pattern) const override; diff --git a/storage/src/vespa/storage/common/storagelink.cpp b/storage/src/vespa/storage/common/storagelink.cpp index fe753d9c350..5917fde4a15 100644 --- a/storage/src/vespa/storage/common/storagelink.cpp +++ b/storage/src/vespa/storage/common/storagelink.cpp @@ -74,10 +74,12 @@ void StorageLink::doneInit() void StorageLink::close() { _state = CLOSING; + LOG(debug, "Start close link %s.", toString().c_str()); onClose(); if (!isBottom()) { _down->close(); } + LOG(debug, "End close link %s.", toString().c_str()); } void StorageLink::closeNextLink() { diff --git a/storage/src/vespa/storage/storageserver/rpc/shared_rpc_resources.cpp b/storage/src/vespa/storage/storageserver/rpc/shared_rpc_resources.cpp index d3226d91f24..4815db7ac0d 100644 --- a/storage/src/vespa/storage/storageserver/rpc/shared_rpc_resources.cpp +++ b/storage/src/vespa/storage/storageserver/rpc/shared_rpc_resources.cpp @@ -102,7 +102,7 @@ void SharedRpcResources::wait_until_slobrok_is_ready() { while (_slobrok_register->busy() || !_slobrok_mirror->ready()) { // TODO some form of timeout mechanism here, and warning logging to identify SB issues LOG(debug, "Waiting for Slobrok to become ready"); - std::this_thread::sleep_for(50ms); + std::this_thread::sleep_for(10ms); } } |