diff options
author | Tor Brede Vekterli <vekterli@yahooinc.com> | 2022-03-03 15:59:17 +0000 |
---|---|---|
committer | Tor Brede Vekterli <vekterli@yahooinc.com> | 2022-03-03 15:59:17 +0000 |
commit | bc9fe73fe3467213d87d542ab83d0ed27db7cbd8 (patch) | |
tree | bc49a20e015b60dac76f2efb5f0ec8448b715234 /storage | |
parent | e91467c5c8811a0bcc1e8e781ff1d17c7f490c0e (diff) |
Check cluster-wide state inside lock to match state write
Diffstat (limited to 'storage')
-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; } |