diff options
Diffstat (limited to 'storage')
4 files changed, 14 insertions, 15 deletions
diff --git a/storage/src/vespa/storage/storageserver/bouncer.cpp b/storage/src/vespa/storage/storageserver/bouncer.cpp index 2b02156367c..313773bc5e8 100644 --- a/storage/src/vespa/storage/storageserver/bouncer.cpp +++ b/storage/src/vespa/storage/storageserver/bouncer.cpp @@ -145,22 +145,22 @@ Bouncer::rejectCommandWithTooHighClockSkew(api::StorageMessage& msg, } void -Bouncer::abortCommandDueToClusterDown(api::StorageMessage& msg) +Bouncer::abortCommandDueToClusterDown(api::StorageMessage& msg, const lib::State& cluster_state) { std::shared_ptr<api::StorageReply> reply( static_cast<api::StorageCommand&>(msg).makeReply().release()); std::ostringstream ost; ost << "We don't allow external load while cluster is in state " - << _clusterState->toString(true); + << cluster_state.toString(true); append_node_identity(ost); reply->setResult(api::ReturnCode(api::ReturnCode::ABORTED, ost.str())); sendUp(reply); } bool -Bouncer::clusterIsUp() const +Bouncer::clusterIsUp(const lib::State& cluster_state) { - return (*_clusterState == lib::State::UP); + return (cluster_state == lib::State::UP); } bool Bouncer::isDistributor() const { @@ -264,14 +264,14 @@ Bouncer::onDown(const std::shared_ptr<api::StorageMessage>& msg) int maxClockSkewInSeconds; bool isInAvailableState; bool abortLoadWhenClusterDown; - bool cluster_is_up; + const lib::State *cluster_state; int feedPriorityLowerBound; { std::lock_guard lock(_lock); state = &getDerivedNodeState(msg->getBucket().getBucketSpace()).getState(); maxClockSkewInSeconds = _config->maxClockSkewSeconds; abortLoadWhenClusterDown = _config->stopExternalLoadWhenClusterDown; - cluster_is_up = clusterIsUp(); + cluster_state = _clusterState; isInAvailableState = state->oneOf(_config->stopAllLoadWhenNodestateNotIn.c_str()); feedPriorityLowerBound = _config->feedRejectionPriorityThreshold; } @@ -285,7 +285,7 @@ Bouncer::onDown(const std::shared_ptr<api::StorageMessage>& msg) } // Special case for point lookup Gets while node is in maintenance mode // to allow reads to complete during two-phase cluster state transitions - if ((*state == lib::State::MAINTENANCE) && (type.getId() == api::MessageType::GET_ID) && clusterIsUp()) { + if ((*state == lib::State::MAINTENANCE) && (type.getId() == api::MessageType::GET_ID) && clusterIsUp(*cluster_state)) { MBUS_TRACE(msg->getTrace(), 7, "Bouncer: node is in Maintenance mode, but letting Get through"); return false; } @@ -319,8 +319,8 @@ Bouncer::onDown(const std::shared_ptr<api::StorageMessage>& msg) } // If cluster state is not up, fail external load - if (abortLoadWhenClusterDown && !cluster_is_up) { - abortCommandDueToClusterDown(*msg); + if (abortLoadWhenClusterDown && !clusterIsUp(*cluster_state)) { + abortCommandDueToClusterDown(*msg, *cluster_state); return true; } diff --git a/storage/src/vespa/storage/storageserver/bouncer.h b/storage/src/vespa/storage/storageserver/bouncer.h index 50a08387b39..55fb386a37e 100644 --- a/storage/src/vespa/storage/storageserver/bouncer.h +++ b/storage/src/vespa/storage/storageserver/bouncer.h @@ -57,10 +57,10 @@ private: void onClose() override; void abortCommandForUnavailableNode(api::StorageMessage&, const lib::State&); void rejectCommandWithTooHighClockSkew(api::StorageMessage& msg, int maxClockSkewInSeconds); - void abortCommandDueToClusterDown(api::StorageMessage&); + void abortCommandDueToClusterDown(api::StorageMessage&, const lib::State&); void rejectDueToInsufficientPriority(api::StorageMessage&, api::StorageMessage::Priority); void reject_due_to_too_few_bucket_bits(api::StorageMessage&); - bool clusterIsUp() const; + static bool clusterIsUp(const lib::State& cluster_state); bool isDistributor() const; bool isExternalLoad(const api::MessageType&) const noexcept; bool isExternalWriteOperation(const api::MessageType&) const noexcept; diff --git a/storage/src/vespa/storageapi/buckets/bucketinfo.cpp b/storage/src/vespa/storageapi/buckets/bucketinfo.cpp index ff2f40e736b..8305b999afc 100644 --- a/storage/src/vespa/storageapi/buckets/bucketinfo.cpp +++ b/storage/src/vespa/storageapi/buckets/bucketinfo.cpp @@ -2,7 +2,6 @@ #include "bucketinfo.h" #include <vespa/vespalib/stllike/asciistream.h> #include <vespa/vespalib/util/xmlstream.h> -#include <ostream> namespace storage::api { @@ -111,7 +110,7 @@ BucketInfo::toString() const } void -BucketInfo::printXml(vespalib::XmlOutputStream& xos) const +BucketInfo::printXml(vespalib::xml::XmlOutputStream& xos) const { using namespace vespalib::xml; xos << XmlAttribute("checksum", _checksum, XmlAttribute::HEX) diff --git a/storage/src/vespa/storageapi/buckets/bucketinfo.h b/storage/src/vespa/storageapi/buckets/bucketinfo.h index d7b407185f6..e535dee3152 100644 --- a/storage/src/vespa/storageapi/buckets/bucketinfo.h +++ b/storage/src/vespa/storageapi/buckets/bucketinfo.h @@ -14,9 +14,9 @@ #pragma once #include <vespa/storageapi/defs.h> -#include <vespa/vespalib/util/xmlserializable.h> #include <vespa/vespalib/stllike/string.h> +namespace vespalib::xml { class XmlOutputStream; } namespace storage::api { class BucketInfo @@ -76,7 +76,7 @@ public: return _metaCount == 0 && _usedFileSize == 0 && _checksum == 0; } vespalib::string toString() const; - void printXml(vespalib::XmlOutputStream&) const; + void printXml(vespalib::xml::XmlOutputStream&) const; }; std::ostream & operator << (std::ostream & os, const BucketInfo & bucketInfo); |