aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2022-03-03 17:22:52 +0100
committerGitHub <noreply@github.com>2022-03-03 17:22:52 +0100
commit5d1bb85dd3b729a98912e21fd97127097583b712 (patch)
tree5aa7aaaae8dcc7fb5f0fdd042284d0988be6c284
parent78c4ecfad3a60475fd10e5e2d0e6196b31ea66bb (diff)
parentbc9fe73fe3467213d87d542ab83d0ed27db7cbd8 (diff)
Merge pull request #21528 from vespa-engine/vekterli/check-cluster-status-inside-lock
Check cluster-wide state inside lock to match state write
-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;
}