diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2022-03-03 17:22:52 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-03-03 17:22:52 +0100 |
commit | 5d1bb85dd3b729a98912e21fd97127097583b712 (patch) | |
tree | 5aa7aaaae8dcc7fb5f0fdd042284d0988be6c284 | |
parent | 78c4ecfad3a60475fd10e5e2d0e6196b31ea66bb (diff) | |
parent | bc9fe73fe3467213d87d542ab83d0ed27db7cbd8 (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.cpp | 4 |
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; } |