summaryrefslogtreecommitdiffstats
path: root/storage
diff options
context:
space:
mode:
authorTor Brede Vekterli <vekterli@yahooinc.com>2022-03-03 15:59:17 +0000
committerTor Brede Vekterli <vekterli@yahooinc.com>2022-03-03 15:59:17 +0000
commitbc9fe73fe3467213d87d542ab83d0ed27db7cbd8 (patch)
treebc49a20e015b60dac76f2efb5f0ec8448b715234 /storage
parente91467c5c8811a0bcc1e8e781ff1d17c7f490c0e (diff)
Check cluster-wide state inside lock to match state write
Diffstat (limited to 'storage')
-rw-r--r--storage/src/vespa/storage/storageserver/bouncer.cpp4
1 files changed, 3 insertions, 1 deletions
diff --git a/storage/src/vespa/storage/storageserver/bouncer.cpp b/storage/src/vespa/storage/storageserver/bouncer.cpp
index 5241a1a88dd..2b02156367c 100644
--- a/storage/src/vespa/storage/storageserver/bouncer.cpp
+++ b/storage/src/vespa/storage/storageserver/bouncer.cpp
@@ -264,12 +264,14 @@ Bouncer::onDown(const std::shared_ptr<api::StorageMessage>& msg)
int maxClockSkewInSeconds;
bool isInAvailableState;
bool abortLoadWhenClusterDown;
+ bool cluster_is_up;
int feedPriorityLowerBound;
{
std::lock_guard lock(_lock);
state = &getDerivedNodeState(msg->getBucket().getBucketSpace()).getState();
maxClockSkewInSeconds = _config->maxClockSkewSeconds;
abortLoadWhenClusterDown = _config->stopExternalLoadWhenClusterDown;
+ cluster_is_up = clusterIsUp();
isInAvailableState = state->oneOf(_config->stopAllLoadWhenNodestateNotIn.c_str());
feedPriorityLowerBound = _config->feedRejectionPriorityThreshold;
}
@@ -317,7 +319,7 @@ Bouncer::onDown(const std::shared_ptr<api::StorageMessage>& msg)
}
// If cluster state is not up, fail external load
- if (abortLoadWhenClusterDown && !clusterIsUp()) {
+ if (abortLoadWhenClusterDown && !cluster_is_up) {
abortCommandDueToClusterDown(*msg);
return true;
}