summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2022-12-21 01:14:41 +0100
committerGitHub <noreply@github.com>2022-12-21 01:14:41 +0100
commitde0ca7acee403ccba040c45cc0e30e0c280520c0 (patch)
tree6d12d5375164bae393ec52b0fbd7276f63a604d8
parent5dbe5a6374a88a783dd64395fb0f7827b3e568c2 (diff)
parentf8afbd8054d10d9447a8ee3456483801e4084b10 (diff)
Merge pull request #25309 from vespa-engine/balder/reduce-timeout
Balder/reduce timeout
-rw-r--r--config/src/vespa/config/subscription/configsubscriptionset.cpp16
-rw-r--r--config/src/vespa/config/subscription/configsubscriptionset.h3
-rw-r--r--slobrok/src/vespa/slobrok/sbmirror.h2
-rw-r--r--storage/src/vespa/storage/common/storagelink.cpp2
-rw-r--r--storage/src/vespa/storage/storageserver/rpc/shared_rpc_resources.cpp2
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);
}
}