diff options
Diffstat (limited to 'storage')
33 files changed, 143 insertions, 116 deletions
diff --git a/storage/src/tests/common/global_bucket_space_distribution_converter_test.cpp b/storage/src/tests/common/global_bucket_space_distribution_converter_test.cpp index 23a0df81bab..cd70aecd1bb 100644 --- a/storage/src/tests/common/global_bucket_space_distribution_converter_test.cpp +++ b/storage/src/tests/common/global_bucket_space_distribution_converter_test.cpp @@ -2,7 +2,6 @@ #include <vespa/storage/common/global_bucket_space_distribution_converter.h> #include <vespa/vdslib/distribution/distribution.h> -#include <vespa/config/config.h> #include <vespa/vdslib/state/clusterstate.h> #include <vespa/vespalib/gtest/gtest.h> diff --git a/storage/src/tests/common/teststorageapp.cpp b/storage/src/tests/common/teststorageapp.cpp index 7a19e84791d..91fdf5aa602 100644 --- a/storage/src/tests/common/teststorageapp.cpp +++ b/storage/src/tests/common/teststorageapp.cpp @@ -4,14 +4,13 @@ #include <vespa/storage/common/content_bucket_db_options.h> #include <vespa/storage/config/config-stor-server.h> #include <vespa/config-stor-distribution.h> -#include <vespa/config-load-type.h> #include <vespa/config-fleetcontroller.h> #include <vespa/persistence/dummyimpl/dummypersistence.h> #include <vespa/vdslib/distribution/distribution.h> #include <vespa/vdslib/state/clusterstate.h> #include <vespa/vespalib/util/exceptions.h> #include <vespa/vespalib/util/time.h> -#include <vespa/config/config.h> +#include <vespa/config/subscription/configuri.h> #include <vespa/config/helper/configgetter.hpp> #include <thread> #include <sstream> diff --git a/storage/src/tests/distributor/putoperationtest.cpp b/storage/src/tests/distributor/putoperationtest.cpp index b02395717e0..53773a55826 100644 --- a/storage/src/tests/distributor/putoperationtest.cpp +++ b/storage/src/tests/distributor/putoperationtest.cpp @@ -1,7 +1,6 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. #include <tests/distributor/distributor_stripe_test_util.h> -#include <vespa/document/config/documenttypes_config_fwd.h> #include <vespa/document/repo/documenttyperepo.h> #include <vespa/document/test/make_document_bucket.h> #include <vespa/storage/distributor/top_level_distributor.h> @@ -13,6 +12,7 @@ #include <vespa/storageapi/message/state.h> #include <vespa/vespalib/gtest/gtest.h> #include <vespa/vespalib/text/stringtokenizer.h> +#include <vespa/config/helper/configgetter.h> using std::shared_ptr; using config::ConfigGetter; diff --git a/storage/src/tests/frameworkimpl/status/statustest.cpp b/storage/src/tests/frameworkimpl/status/statustest.cpp index 2e136977026..97bfa41aece 100644 --- a/storage/src/tests/frameworkimpl/status/statustest.cpp +++ b/storage/src/tests/frameworkimpl/status/statustest.cpp @@ -2,7 +2,6 @@ #include <vespa/storageframework/defaultimplementation/component/componentregisterimpl.h> #include <vespa/storage/frameworkimpl/status/statuswebserver.h> -#include <vespa/storageframework/defaultimplementation/thread/threadpoolimpl.h> #include <vespa/storageframework/generic/status/htmlstatusreporter.h> #include <vespa/storageframework/generic/status/xmlstatusreporter.h> #include <tests/common/teststorageapp.h> @@ -10,6 +9,7 @@ #include <vespa/vespalib/net/crypto_engine.h> #include <vespa/vespalib/net/socket_spec.h> #include <vespa/vespalib/net/sync_crypto_socket.h> +#include <vespa/config/subscription/configuri.h> #include <vespa/vespalib/gtest/gtest.h> #include <gmock/gmock.h> diff --git a/storage/src/vespa/storage/bucketdb/bucketmanager.cpp b/storage/src/vespa/storage/bucketdb/bucketmanager.cpp index 9edac8d79ff..73ddeeb888b 100644 --- a/storage/src/vespa/storage/bucketdb/bucketmanager.cpp +++ b/storage/src/vespa/storage/bucketdb/bucketmanager.cpp @@ -18,7 +18,6 @@ #include <vespa/storageapi/message/stat.h> #include <vespa/document/bucket/fixed_bucket_spaces.h> #include <vespa/vespalib/util/stringfmt.h> -#include <vespa/config/config.h> #include <vespa/config/helper/configgetter.hpp> #include <chrono> #include <thread> diff --git a/storage/src/vespa/storage/common/global_bucket_space_distribution_converter.cpp b/storage/src/vespa/storage/common/global_bucket_space_distribution_converter.cpp index 9f9bbf4992e..a8c6bf6529c 100644 --- a/storage/src/vespa/storage/common/global_bucket_space_distribution_converter.cpp +++ b/storage/src/vespa/storage/common/global_bucket_space_distribution_converter.cpp @@ -2,9 +2,8 @@ #include "global_bucket_space_distribution_converter.h" #include <vespa/vdslib/distribution/distribution.h> -#include <vespa/config/config.h> #include <vespa/config/print/asciiconfigwriter.h> -#include <vespa/config/print/asciiconfigreader.h> +#include <vespa/config/print/asciiconfigreader.hpp> #include <vespa/vespalib/util/stringfmt.h> #include <vespa/vdslib/distribution/distribution_config_util.h> #include <vespa/vespalib/stllike/asciistream.h> diff --git a/storage/src/vespa/storage/distributor/distributor_stripe.h b/storage/src/vespa/storage/distributor/distributor_stripe.h index 809b4dd0e41..49b062d6cc1 100644 --- a/storage/src/vespa/storage/distributor/distributor_stripe.h +++ b/storage/src/vespa/storage/distributor/distributor_stripe.h @@ -13,7 +13,6 @@ #include "stripe_access_guard.h" #include "stripe_bucket_db_updater.h" #include "tickable_stripe.h" -#include <vespa/config/config.h> #include <vespa/storage/common/doneinitializehandler.h> #include <vespa/storage/common/messagesender.h> #include <vespa/storage/distributor/bucketdb/bucketdbmetricupdater.h> diff --git a/storage/src/vespa/storage/distributor/statecheckers.cpp b/storage/src/vespa/storage/distributor/statecheckers.cpp index a2069219d5d..d400151b349 100644 --- a/storage/src/vespa/storage/distributor/statecheckers.cpp +++ b/storage/src/vespa/storage/distributor/statecheckers.cpp @@ -656,6 +656,10 @@ public: addNode(entry->getNodeRef(i).getNode()); } } + MergeNodes(MergeNodes && rhs) noexcept = default; + MergeNodes & operator =(MergeNodes && rhs) noexcept = delete; + MergeNodes(const MergeNodes & rhs) = delete; + MergeNodes & operator =(const MergeNodes & rhs) = delete; ~MergeNodes(); diff --git a/storage/src/vespa/storage/distributor/top_level_distributor.h b/storage/src/vespa/storage/distributor/top_level_distributor.h index 64e431c9d4e..20a61acfa37 100644 --- a/storage/src/vespa/storage/distributor/top_level_distributor.h +++ b/storage/src/vespa/storage/distributor/top_level_distributor.h @@ -17,7 +17,6 @@ #include "statusreporterdelegate.h" #include "stripe_bucket_db_updater.h" // TODO this is temporary #include "stripe_host_info_notifier.h" -#include <vespa/config/config.h> #include <vespa/storage/common/distributorcomponent.h> #include <vespa/storage/common/doneinitializehandler.h> #include <vespa/storage/common/messagesender.h> diff --git a/storage/src/vespa/storage/frameworkimpl/status/statuswebserver.cpp b/storage/src/vespa/storage/frameworkimpl/status/statuswebserver.cpp index 45dd44d0245..a9b7a727a5b 100644 --- a/storage/src/vespa/storage/frameworkimpl/status/statuswebserver.cpp +++ b/storage/src/vespa/storage/frameworkimpl/status/statuswebserver.cpp @@ -7,6 +7,8 @@ #include <vespa/vespalib/util/size_literals.h> #include <vespa/vespalib/component/vtag.h> #include <vespa/vespalib/net/crypto_engine.h> +#include <vespa/config/subscription/configuri.h> +#include <vespa/config/helper/configfetcher.hpp> #include <functional> #include <vespa/log/log.h> @@ -21,17 +23,17 @@ StatusWebServer::StatusWebServer( : _reporterMap(reporterMap), _port(0), _httpServer(), - _configFetcher(configUri.getContext()), + _configFetcher(std::make_unique<config::ConfigFetcher>(configUri.getContext())), _component(std::make_unique<framework::Component>(componentRegister, "Status")) { - _configFetcher.subscribe<vespa::config::content::core::StorStatusConfig>(configUri.getConfigId(), this); - _configFetcher.start(); + _configFetcher->subscribe<vespa::config::content::core::StorStatusConfig>(configUri.getConfigId(), this); + _configFetcher->start(); } StatusWebServer::~StatusWebServer() { // Avoid getting config during shutdown - _configFetcher.close(); + _configFetcher->close(); if (_httpServer) { LOG(debug, "Shutting down status web server on port %u", _httpServer->getListenPort()); diff --git a/storage/src/vespa/storage/frameworkimpl/status/statuswebserver.h b/storage/src/vespa/storage/frameworkimpl/status/statuswebserver.h index f4bf2534036..429f5249441 100644 --- a/storage/src/vespa/storage/frameworkimpl/status/statuswebserver.h +++ b/storage/src/vespa/storage/frameworkimpl/status/statuswebserver.h @@ -12,12 +12,15 @@ #include <vespa/storage/config/config-stor-status.h> #include <vespa/storageframework/generic/thread/runnable.h> -#include <vespa/config/config.h> -#include <vespa/config/helper/configfetcher.h> +#include <vespa/config/helper/ifetchercallback.h> #include <vespa/vespalib/portal/portal.h> #include <vespa/vespalib/util/threadstackexecutor.h> #include <list> +namespace config { + class ConfigUri; + class ConfigFetcher; +} namespace storage { namespace framework { @@ -28,6 +31,7 @@ namespace framework { class HttpUrlPath; class Component; } + class StatusWebServer : private config::IFetcherCallback<vespa::config::content::core::StorStatusConfig> { class WebServer : public vespalib::Portal::GetHandler { @@ -64,7 +68,7 @@ class StatusWebServer : private config::IFetcherCallback<vespa::config::content: framework::StatusReporterMap& _reporterMap; uint16_t _port; std::unique_ptr<WebServer> _httpServer; - config::ConfigFetcher _configFetcher; + std::unique_ptr<config::ConfigFetcher> _configFetcher; std::unique_ptr<framework::Component> _component; public: diff --git a/storage/src/vespa/storage/persistence/filestorage/filestormanager.cpp b/storage/src/vespa/storage/persistence/filestorage/filestormanager.cpp index 0e511241d18..d5097f4f8e4 100644 --- a/storage/src/vespa/storage/persistence/filestorage/filestormanager.cpp +++ b/storage/src/vespa/storage/persistence/filestorage/filestormanager.cpp @@ -24,7 +24,8 @@ #include <vespa/vespalib/util/idestructorcallback.h> #include <vespa/vespalib/util/sequencedtaskexecutor.h> #include <vespa/vespalib/util/stringfmt.h> -#include <algorithm> +#include <vespa/config/subscription/configuri.h> +#include <vespa/config/helper/configfetcher.hpp> #include <thread> #include <vespa/log/bufferedlogger.h> @@ -73,7 +74,7 @@ FileStorManager(const config::ConfigUri & configUri, spi::PersistenceProvider& p _persistenceHandlers(), _threads(), _bucketOwnershipNotifier(std::make_unique<BucketOwnershipNotifier>(_component, *this)), - _configFetcher(configUri.getContext()), + _configFetcher(std::make_unique<config::ConfigFetcher>(configUri.getContext())), _use_async_message_handling_on_schedule(false), _metrics(std::make_unique<FileStorMetrics>()), _filestorHandler(), @@ -83,8 +84,8 @@ FileStorManager(const config::ConfigUri & configUri, spi::PersistenceProvider& p _host_info_reporter(_component.getStateUpdater()), _resource_usage_listener_registration(provider.register_resource_usage_listener(_host_info_reporter)) { - _configFetcher.subscribe(configUri.getConfigId(), this); - _configFetcher.start(); + _configFetcher->subscribe(configUri.getConfigId(), this); + _configFetcher->start(); _component.registerMetric(*_metrics); _component.registerStatusPage(*this); _component.getStateUpdater().addStateListener(*this); @@ -851,7 +852,7 @@ void FileStorManager::onClose() _bucketExecutorRegistration.reset(); _resource_usage_listener_registration.reset(); // Avoid getting config during shutdown - _configFetcher.close(); + _configFetcher->close(); LOG(debug, "Closed _configFetcher."); _filestorHandler->close(); LOG(debug, "Closed _filestorHandler."); diff --git a/storage/src/vespa/storage/persistence/filestorage/filestormanager.h b/storage/src/vespa/storage/persistence/filestorage/filestormanager.h index b7450de13d8..83f1826c498 100644 --- a/storage/src/vespa/storage/persistence/filestorage/filestormanager.h +++ b/storage/src/vespa/storage/persistence/filestorage/filestormanager.h @@ -25,10 +25,12 @@ #include <vespa/storage/common/nodestateupdater.h> #include <vespa/storageframework/generic/status/htmlstatusreporter.h> -#include <vespa/config/subscription/configuri.h> #include <vespa/config/helper/ifetchercallback.h> -#include <vespa/config/config.h> +namespace config { + class ConfigUri; + class ConfigFetcher; +} namespace vespalib { class IDestructorCallback; } namespace storage { @@ -68,7 +70,7 @@ class FileStorManager : public StorageLinkQueued, std::unique_ptr<BucketOwnershipNotifier> _bucketOwnershipNotifier; std::unique_ptr<vespa::config::content::StorFilestorConfig> _config; - config::ConfigFetcher _configFetcher; + std::unique_ptr<config::ConfigFetcher> _configFetcher; bool _use_async_message_handling_on_schedule; std::shared_ptr<FileStorMetrics> _metrics; std::unique_ptr<FileStorHandler> _filestorHandler; diff --git a/storage/src/vespa/storage/persistence/filestorage/modifiedbucketchecker.cpp b/storage/src/vespa/storage/persistence/filestorage/modifiedbucketchecker.cpp index 90f7f292a6d..040ace55c52 100644 --- a/storage/src/vespa/storage/persistence/filestorage/modifiedbucketchecker.cpp +++ b/storage/src/vespa/storage/persistence/filestorage/modifiedbucketchecker.cpp @@ -4,6 +4,8 @@ #include "filestormanager.h" #include <vespa/persistence/spi/persistenceprovider.h> #include <vespa/config/common/exceptions.h> +#include <vespa/config/subscription/configuri.h> +#include <vespa/config/helper/configfetcher.hpp> #include <algorithm> #include <vespa/log/log.h> @@ -47,7 +49,7 @@ ModifiedBucketChecker::ModifiedBucketChecker( _provider(provider), _component(), _thread(), - _configFetcher(configUri.getContext()), + _configFetcher(std::make_unique<config::ConfigFetcher>(configUri.getContext())), _monitor(), _stateLock(), _bucketSpaces(), @@ -56,8 +58,8 @@ ModifiedBucketChecker::ModifiedBucketChecker( _maxPendingChunkSize(100), _singleThreadMode(false) { - _configFetcher.subscribe<vespa::config::content::core::StorServerConfig>(configUri.getConfigId(), this); - _configFetcher.start(); + _configFetcher->subscribe<vespa::config::content::core::StorServerConfig>(configUri.getConfigId(), this); + _configFetcher->start(); std::ostringstream threadName; threadName << "Modified bucket checker " << static_cast<void*>(this); @@ -195,7 +197,7 @@ ModifiedBucketChecker::tick() // Do two phases of locking, as we want tick() to both fetch modified // buckets and send the first chunk for these in a single call. However, // we want getModifiedBuckets() to called outside the lock. - bool shouldRequestFromProvider = false; + bool shouldRequestFromProvider; { std::lock_guard guard(_stateLock); if (!currentChunkFinished()) { diff --git a/storage/src/vespa/storage/persistence/filestorage/modifiedbucketchecker.h b/storage/src/vespa/storage/persistence/filestorage/modifiedbucketchecker.h index 6a8b9e5c008..8c0b4084428 100644 --- a/storage/src/vespa/storage/persistence/filestorage/modifiedbucketchecker.h +++ b/storage/src/vespa/storage/persistence/filestorage/modifiedbucketchecker.h @@ -9,8 +9,12 @@ #include <vespa/storage/persistence/messages.h> #include <vespa/storage/persistence/types.h> #include <vespa/document/bucket/bucketidlist.h> -#include <vespa/config/config.h> +#include <vespa/config/helper/ifetchercallback.h> +namespace config { + class ConfigUri; + class ConfigFetcher; +} namespace storage { namespace spi { struct PersistenceProvider; } @@ -80,18 +84,18 @@ private: void pop_back() { _buckets.pop_back(); } }; - spi::PersistenceProvider& _provider; - ServiceLayerComponent::UP _component; - framework::Thread::UP _thread; - config::ConfigFetcher _configFetcher; - std::mutex _monitor; - std::condition_variable _cond; - std::mutex _stateLock; - CyclicBucketSpaceIterator::UP _bucketSpaces; - BucketIdListResult _rechecksNotStarted; - size_t _pendingRequests; - size_t _maxPendingChunkSize; - bool _singleThreadMode; // For unit testing only + spi::PersistenceProvider & _provider; + ServiceLayerComponent::UP _component; + framework::Thread::UP _thread; + std::unique_ptr<config::ConfigFetcher> _configFetcher; + std::mutex _monitor; + std::condition_variable _cond; + std::mutex _stateLock; + CyclicBucketSpaceIterator::UP _bucketSpaces; + BucketIdListResult _rechecksNotStarted; + size_t _pendingRequests; + size_t _maxPendingChunkSize; + bool _singleThreadMode; // For unit testing only }; } // ns storage diff --git a/storage/src/vespa/storage/storageserver/bouncer.cpp b/storage/src/vespa/storage/storageserver/bouncer.cpp index ea14a1b7492..5241a1a88dd 100644 --- a/storage/src/vespa/storage/storageserver/bouncer.cpp +++ b/storage/src/vespa/storage/storageserver/bouncer.cpp @@ -9,6 +9,7 @@ #include <vespa/storageapi/message/state.h> #include <vespa/storageapi/message/persistence.h> #include <vespa/config/subscription/configuri.h> +#include <vespa/config/helper/configfetcher.hpp> #include <vespa/config/common/exceptions.h> #include <vespa/vespalib/util/stringfmt.h> #include <sstream> @@ -27,7 +28,7 @@ Bouncer::Bouncer(StorageComponentRegister& compReg, const config::ConfigUri & co _baselineNodeState("s:i"), _derivedNodeStates(), _clusterState(&lib::State::UP), - _configFetcher(configUri.getContext()), + _configFetcher(std::make_unique<config::ConfigFetcher>(configUri.getContext())), _metrics(std::make_unique<BouncerMetrics>()) { _component.getStateUpdater().addStateListener(*this); @@ -36,8 +37,8 @@ Bouncer::Bouncer(StorageComponentRegister& compReg, const config::ConfigUri & co // exception allowing program to continue if missing/faulty config. try{ if (!configUri.empty()) { - _configFetcher.subscribe<vespa::config::content::core::StorBouncerConfig>(configUri.getConfigId(), this); - _configFetcher.start(); + _configFetcher->subscribe<vespa::config::content::core::StorBouncerConfig>(configUri.getConfigId(), this); + _configFetcher->start(); } else { LOG(info, "No config id specified. Using defaults rather than " "config"); @@ -66,7 +67,7 @@ Bouncer::print(std::ostream& out, bool verbose, void Bouncer::onClose() { - _configFetcher.close(); + _configFetcher->close(); _component.getStateUpdater().removeStateListener(*this); } diff --git a/storage/src/vespa/storage/storageserver/bouncer.h b/storage/src/vespa/storage/storageserver/bouncer.h index e6ddfe7ad49..50a08387b39 100644 --- a/storage/src/vespa/storage/storageserver/bouncer.h +++ b/storage/src/vespa/storage/storageserver/bouncer.h @@ -11,7 +11,7 @@ #pragma once -#include <vespa/config/helper/configfetcher.h> +#include <vespa/config/helper/ifetchercallback.h> #include <vespa/vdslib/state/nodestate.h> #include <vespa/storage/common/nodestateupdater.h> #include <vespa/storage/common/storagecomponent.h> @@ -19,7 +19,10 @@ #include <vespa/storage/config/config-stor-bouncer.h> #include <unordered_map> -namespace config { class ConfigUri; } +namespace config { + class ConfigUri; + class ConfigFetcher; +} namespace storage { @@ -36,7 +39,7 @@ class Bouncer : public StorageLink, using BucketSpaceNodeStateMapping = std::unordered_map<document::BucketSpace, lib::NodeState, document::BucketSpace::hash>; BucketSpaceNodeStateMapping _derivedNodeStates; const lib::State* _clusterState; - config::ConfigFetcher _configFetcher; + std::unique_ptr<config::ConfigFetcher> _configFetcher; std::unique_ptr<BouncerMetrics> _metrics; public: @@ -47,36 +50,20 @@ public: const std::string& indent) const override; void configure(std::unique_ptr<vespa::config::content::core::StorBouncerConfig> config) override; - const BouncerMetrics& metrics() const noexcept; private: - void validateConfig( - const vespa::config::content::core::StorBouncerConfig&) const; - + void validateConfig(const vespa::config::content::core::StorBouncerConfig&) const; void onClose() override; - - void abortCommandForUnavailableNode(api::StorageMessage&, - const lib::State&); - - void rejectCommandWithTooHighClockSkew(api::StorageMessage& msg, - int maxClockSkewInSeconds); - + void abortCommandForUnavailableNode(api::StorageMessage&, const lib::State&); + void rejectCommandWithTooHighClockSkew(api::StorageMessage& msg, int maxClockSkewInSeconds); void abortCommandDueToClusterDown(api::StorageMessage&); - - void rejectDueToInsufficientPriority(api::StorageMessage&, - api::StorageMessage::Priority); - + void rejectDueToInsufficientPriority(api::StorageMessage&, api::StorageMessage::Priority); void reject_due_to_too_few_bucket_bits(api::StorageMessage&); - bool clusterIsUp() const; - bool isDistributor() const; - bool isExternalLoad(const api::MessageType&) const noexcept; - bool isExternalWriteOperation(const api::MessageType&) const noexcept; - bool priorityRejectionIsEnabled(int configuredPriority) const noexcept { return (configuredPriority != -1); } @@ -86,12 +73,9 @@ private: * update commands), return that timestamp. Otherwise, return 0. */ uint64_t extractMutationTimestampIfAny(const api::StorageMessage& msg); - bool onDown(const std::shared_ptr<api::StorageMessage>&) override; - void handleNewState() override; const lib::NodeState &getDerivedNodeState(document::BucketSpace bucketSpace) const; - void append_node_identity(std::ostream& target_stream) const; }; diff --git a/storage/src/vespa/storage/storageserver/changedbucketownershiphandler.cpp b/storage/src/vespa/storage/storageserver/changedbucketownershiphandler.cpp index ee58710e585..9d7dd95d922 100644 --- a/storage/src/vespa/storage/storageserver/changedbucketownershiphandler.cpp +++ b/storage/src/vespa/storage/storageserver/changedbucketownershiphandler.cpp @@ -11,6 +11,9 @@ #include <vespa/storage/common/content_bucket_space_repo.h> #include <vespa/vespalib/util/exceptions.h> #include <vespa/metrics/metrictimer.h> +#include <vespa/config/subscription/configuri.h> +#include <vespa/config/helper/configfetcher.hpp> + #include <vespa/log/bufferedlogger.h> @@ -24,7 +27,7 @@ ChangedBucketOwnershipHandler::ChangedBucketOwnershipHandler( : StorageLink("Changed bucket ownership handler"), _component(compReg, "changedbucketownershiphandler"), _metrics(), - _configFetcher(configUri.getContext()), + _configFetcher(std::make_unique<config::ConfigFetcher>(configUri.getContext())), _stateLock(), _currentState(), // Not set yet, so ownership will not be valid _currentOwnership(std::make_shared<OwnershipState>( @@ -33,8 +36,8 @@ ChangedBucketOwnershipHandler::ChangedBucketOwnershipHandler( _abortMutatingIdealStateOps(false), _abortMutatingExternalLoadOps(false) { - _configFetcher.subscribe<vespa::config::content::PersistenceConfig>(configUri.getConfigId(), this); - _configFetcher.start(); + _configFetcher->subscribe<vespa::config::content::PersistenceConfig>(configUri.getConfigId(), this); + _configFetcher->start(); _component.registerMetric(_metrics); } diff --git a/storage/src/vespa/storage/storageserver/changedbucketownershiphandler.h b/storage/src/vespa/storage/storageserver/changedbucketownershiphandler.h index ddf8516ed6e..e753d96871e 100644 --- a/storage/src/vespa/storage/storageserver/changedbucketownershiphandler.h +++ b/storage/src/vespa/storage/storageserver/changedbucketownershiphandler.h @@ -3,8 +3,8 @@ #include <vespa/document/bucket/bucketid.h> #include <vespa/storage/common/storagelink.h> -#include <vespa/config/config.h> #include <vespa/config-persistence.h> +#include <vespa/config/helper/ifetchercallback.h> #include <vespa/storage/common/servicelayercomponent.h> #include <vespa/storage/persistence/messages.h> #include <vespa/metrics/valuemetric.h> @@ -14,6 +14,10 @@ #include <vector> #include <unordered_map> +namespace config { + class ConfigUri; + class ConfigFetcher; +} namespace storage { namespace lib { @@ -112,7 +116,7 @@ public: private: ServiceLayerComponent _component; Metrics _metrics; - config::ConfigFetcher _configFetcher; + std::unique_ptr<config::ConfigFetcher> _configFetcher; mutable std::mutex _stateLock; std::shared_ptr<const lib::ClusterStateBundle> _currentState; OwnershipState::CSP _currentOwnership; diff --git a/storage/src/vespa/storage/storageserver/communicationmanager.cpp b/storage/src/vespa/storage/storageserver/communicationmanager.cpp index 9b67830b3dc..237dc76d783 100644 --- a/storage/src/vespa/storage/storageserver/communicationmanager.cpp +++ b/storage/src/vespa/storage/storageserver/communicationmanager.cpp @@ -19,6 +19,7 @@ #include <vespa/vespalib/stllike/asciistream.h> #include <vespa/vespalib/util/stringfmt.h> #include <vespa/document/bucket/fixed_bucket_spaces.h> +#include <vespa/config/helper/configfetcher.hpp> #include <string_view> #include <vespa/log/bufferedlogger.h> diff --git a/storage/src/vespa/storage/storageserver/communicationmanager.h b/storage/src/vespa/storage/storageserver/communicationmanager.h index c899cee3e14..80117b32030 100644 --- a/storage/src/vespa/storage/storageserver/communicationmanager.h +++ b/storage/src/vespa/storage/storageserver/communicationmanager.h @@ -21,15 +21,18 @@ #include <vespa/storageapi/mbusprot/storagereply.h> #include <vespa/messagebus/imessagehandler.h> #include <vespa/messagebus/ireplyhandler.h> -#include <vespa/config/helper/configfetcher.h> +#include <vespa/config/helper/ifetchercallback.h> #include <vespa/vespalib/util/document_runnable.h> #include <vespa/config/subscription/configuri.h> +#include <vespa/config-bucketspaces.h> #include <map> #include <queue> #include <atomic> #include <mutex> -#include <vespa/config-bucketspaces.h> +namespace config { + class ConfigFetcher; +} namespace mbus { class RPCMessageBus; class SourceSession; diff --git a/storage/src/vespa/storage/storageserver/mergethrottler.cpp b/storage/src/vespa/storage/storageserver/mergethrottler.cpp index 4b4ff6c7e37..28a76413149 100644 --- a/storage/src/vespa/storage/storageserver/mergethrottler.cpp +++ b/storage/src/vespa/storage/storageserver/mergethrottler.cpp @@ -8,9 +8,10 @@ #include <vespa/messagebus/dynamicthrottlepolicy.h> #include <vespa/messagebus/error.h> #include <vespa/config/common/exceptions.h> +#include <vespa/config/helper/configfetcher.hpp> +#include <vespa/config/subscription/configuri.h> #include <vespa/vespalib/stllike/asciistream.h> #include <vespa/vespalib/util/stringfmt.h> -#include <algorithm> #include <cassert> #include <vespa/log/log.h> @@ -185,7 +186,7 @@ MergeThrottler::MergeThrottler( _queueSequence(0), _messageLock(), _stateLock(), - _configFetcher(configUri.getContext()), + _configFetcher(std::make_unique<config::ConfigFetcher>(configUri.getContext())), _metrics(std::make_unique<Metrics>()), _component(compReg, "mergethrottler"), _thread(), @@ -198,8 +199,8 @@ MergeThrottler::MergeThrottler( { _throttlePolicy->setMinWindowSize(20); _throttlePolicy->setMaxWindowSize(20); - _configFetcher.subscribe<StorServerConfig>(configUri.getConfigId(), this); - _configFetcher.start(); + _configFetcher->subscribe<StorServerConfig>(configUri.getConfigId(), this); + _configFetcher->start(); _component.registerStatusPage(*this); _component.registerMetric(*_metrics); } @@ -271,7 +272,7 @@ void MergeThrottler::onClose() { // Avoid getting config on shutdown - _configFetcher.close(); + _configFetcher->close(); { std::lock_guard guard(_messageLock); // Note: used to prevent taking locks in different order if onFlush diff --git a/storage/src/vespa/storage/storageserver/mergethrottler.h b/storage/src/vespa/storage/storageserver/mergethrottler.h index b953595c91e..e501e0edd39 100644 --- a/storage/src/vespa/storage/storageserver/mergethrottler.h +++ b/storage/src/vespa/storage/storageserver/mergethrottler.h @@ -20,13 +20,15 @@ #include <vespa/metrics/countmetric.h> #include <vespa/metrics/valuemetric.h> #include <vespa/metrics/metrictimer.h> -#include <vespa/config/config.h> +#include <vespa/config/helper/ifetchercallback.h> + #include <chrono> -namespace mbus { -class DynamicThrottlePolicy; +namespace mbus { class DynamicThrottlePolicy; } +namespace config { + class ConfigFetcher; + class ConfigUri; } - namespace storage { class AbortBucketOperationsCommand; @@ -170,7 +172,7 @@ private: mutable std::mutex _messageLock; std::condition_variable _messageCond; mutable std::mutex _stateLock; - config::ConfigFetcher _configFetcher; + std::unique_ptr<config::ConfigFetcher> _configFetcher; // Messages pending to be processed by the worker thread std::vector<api::StorageMessage::SP> _messagesDown; std::vector<api::StorageMessage::SP> _messagesUp; diff --git a/storage/src/vespa/storage/storageserver/opslogger.cpp b/storage/src/vespa/storage/storageserver/opslogger.cpp index 244813775a1..03322cb55fd 100644 --- a/storage/src/vespa/storage/storageserver/opslogger.cpp +++ b/storage/src/vespa/storage/storageserver/opslogger.cpp @@ -2,6 +2,8 @@ #include "opslogger.h" #include <vespa/storageapi/message/persistence.h> +#include <vespa/config/helper/configfetcher.hpp> +#include <vespa/config/subscription/configuri.h> #include <sstream> #include <vespa/log/log.h> @@ -16,10 +18,10 @@ OpsLogger::OpsLogger(StorageComponentRegister& compReg, _fileName(), _targetFile(nullptr), _component(compReg, "opslogger"), - _configFetcher(configUri.getContext()) + _configFetcher(std::make_unique<config::ConfigFetcher>(configUri.getContext())) { - _configFetcher.subscribe<vespa::config::content::core::StorOpsloggerConfig>(configUri.getConfigId(), this); - _configFetcher.start(); + _configFetcher->subscribe<vespa::config::content::core::StorOpsloggerConfig>(configUri.getConfigId(), this); + _configFetcher->start(); } OpsLogger::~OpsLogger() @@ -35,8 +37,8 @@ OpsLogger::~OpsLogger() void OpsLogger::onClose() { - // Avoid getting config during shutdown - _configFetcher.close(); + // Avoid getting config during shutdown + _configFetcher->close(); } void diff --git a/storage/src/vespa/storage/storageserver/opslogger.h b/storage/src/vespa/storage/storageserver/opslogger.h index cf39f51279d..039cb72969e 100644 --- a/storage/src/vespa/storage/storageserver/opslogger.h +++ b/storage/src/vespa/storage/storageserver/opslogger.h @@ -13,7 +13,12 @@ #include <vespa/storageapi/messageapi/storagemessage.h> #include <vespa/storageapi/message/state.h> #include <vespa/storage/config/config-stor-opslogger.h> -#include <vespa/config/config.h> +#include <vespa/config/helper/ifetchercallback.h> + +namespace config { + class ConfigUri; + class ConfigFetcher; +} namespace storage { @@ -40,7 +45,7 @@ private: FILE * _targetFile; framework::Component _component; - config::ConfigFetcher _configFetcher; + std::unique_ptr<config::ConfigFetcher> _configFetcher; }; } diff --git a/storage/src/vespa/storage/storageserver/priorityconverter.cpp b/storage/src/vespa/storage/storageserver/priorityconverter.cpp index 1c11edea796..49297f216ca 100644 --- a/storage/src/vespa/storage/storageserver/priorityconverter.cpp +++ b/storage/src/vespa/storage/storageserver/priorityconverter.cpp @@ -1,16 +1,17 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. #include "priorityconverter.h" -#include <vespa/documentapi/messagebus/documentprotocol.h> #include <vespa/config/subscription/configuri.h> +#include <vespa/config/helper/configfetcher.hpp> + namespace storage { PriorityConverter::PriorityConverter(const config::ConfigUri & configUri) - : _configFetcher(configUri.getContext()) + : _configFetcher(std::make_unique<config::ConfigFetcher>(configUri.getContext())) { - _configFetcher.subscribe<vespa::config::content::core::StorPrioritymappingConfig>(configUri.getConfigId(), this); - _configFetcher.start(); + _configFetcher->subscribe<vespa::config::content::core::StorPrioritymappingConfig>(configUri.getConfigId(), this); + _configFetcher->start(); } PriorityConverter::~PriorityConverter() = default; diff --git a/storage/src/vespa/storage/storageserver/priorityconverter.h b/storage/src/vespa/storage/storageserver/priorityconverter.h index 0dcd66645cb..b1f774e4ff2 100644 --- a/storage/src/vespa/storage/storageserver/priorityconverter.h +++ b/storage/src/vespa/storage/storageserver/priorityconverter.h @@ -3,13 +3,16 @@ #pragma once #include <vespa/storage/config/config-stor-prioritymapping.h> -#include <vespa/config/helper/configfetcher.h> +#include <vespa/config/helper/ifetchercallback.h> #include <vespa/documentapi/messagebus/priority.h> #include <atomic> #include <array> #include <mutex> -namespace config {class ConfigUri; } +namespace config { + class ConfigUri; + class ConfigFetcher; +} namespace storage { @@ -42,7 +45,7 @@ private: std::map<uint8_t, documentapi::Priority::Value> _reverseMapping; mutable std::mutex _mutex; - config::ConfigFetcher _configFetcher; + std::unique_ptr<config::ConfigFetcher> _configFetcher; }; } // storage diff --git a/storage/src/vespa/storage/storageserver/servicelayernode.h b/storage/src/vespa/storage/storageserver/servicelayernode.h index 8f36e1d8748..f0189f943ab 100644 --- a/storage/src/vespa/storage/storageserver/servicelayernode.h +++ b/storage/src/vespa/storage/storageserver/servicelayernode.h @@ -13,7 +13,6 @@ #include "storagenode.h" #include <vespa/storage/visiting/visitormessagesessionfactory.h> #include <vespa/storage/common/visitorfactory.h> -#include <vespa/config/config.h> namespace storage { diff --git a/storage/src/vespa/storage/storageserver/storagenode.cpp b/storage/src/vespa/storage/storageserver/storagenode.cpp index c19fca8c58c..34db3b102e7 100644 --- a/storage/src/vespa/storage/storageserver/storagenode.cpp +++ b/storage/src/vespa/storage/storageserver/storagenode.cpp @@ -14,6 +14,7 @@ #include <vespa/storage/common/storage_chain_builder.h> #include <vespa/storage/frameworkimpl/status/statuswebserver.h> #include <vespa/storage/frameworkimpl/thread/deadlockdetector.h> +#include <vespa/config/helper/configfetcher.hpp> #include <vespa/vdslib/distribution/distribution.h> #include <vespa/vespalib/io/fileutil.h> #include <vespa/vespalib/util/exceptions.h> diff --git a/storage/src/vespa/storage/storageserver/storagenode.h b/storage/src/vespa/storage/storageserver/storagenode.h index c49737af78b..2e13c0e24c0 100644 --- a/storage/src/vespa/storage/storageserver/storagenode.h +++ b/storage/src/vespa/storage/storageserver/storagenode.h @@ -14,7 +14,6 @@ #include <vespa/config-stor-distribution.h> #include <vespa/config-upgrading.h> -#include <vespa/config/helper/configfetcher.h> #include <vespa/config/helper/ifetchercallback.h> #include <vespa/config/subscription/configuri.h> #include <vespa/document/config/config-documenttypes.h> @@ -27,6 +26,7 @@ #include <mutex> namespace document { class DocumentTypeRepo; } +namespace config { class ConfigFetcher; } namespace storage { @@ -35,7 +35,6 @@ class CommunicationManager; class FileStorManager; class HostInfo; class IStorageChainBuilder; -class MemoryStatusViewer; class NodeIdentity; class StateManager; class StateReporter; diff --git a/storage/src/vespa/storage/tools/getidealstate.cpp b/storage/src/vespa/storage/tools/getidealstate.cpp index 5b17fa63b5a..8b120924aaa 100644 --- a/storage/src/vespa/storage/tools/getidealstate.cpp +++ b/storage/src/vespa/storage/tools/getidealstate.cpp @@ -4,9 +4,9 @@ #include <vespa/vdslib/distribution/distribution.h> #include <vespa/vdslib/state/clusterstate.h> #include <vespa/vespalib/util/programoptions.h> -#include <vespa/config/config.h> #include <vespa/config/print/ostreamconfigwriter.h> #include <vespa/config-stor-distribution.h> +#include <vespa/config/subscription/configuri.h> #include <vespa/config/helper/configgetter.hpp> #include <iostream> #include <sstream> diff --git a/storage/src/vespa/storage/visiting/visitormanager.cpp b/storage/src/vespa/storage/visiting/visitormanager.cpp index 8450fab5dcb..20178f601fa 100644 --- a/storage/src/vespa/storage/visiting/visitormanager.cpp +++ b/storage/src/vespa/storage/visiting/visitormanager.cpp @@ -8,8 +8,10 @@ #include "recoveryvisitor.h" #include "reindexing_visitor.h" #include <vespa/storage/common/statusmessages.h> +#include <vespa/config/subscription/configuri.h> #include <vespa/config/common/exceptions.h> #include <vespa/vespalib/util/stringfmt.h> +#include <vespa/config/helper/configfetcher.hpp> #include <cassert> #include <vespa/log/log.h> @@ -30,8 +32,8 @@ VisitorManager::VisitorManager(const config::ConfigUri & configUri, _visitorLock(), _visitorCond(), _visitorCounter(0), - _configFetcher(configUri.getContext()), - _metrics(new VisitorMetrics), + _configFetcher(std::make_unique<config::ConfigFetcher>(configUri.getContext())), + _metrics(std::make_shared<VisitorMetrics>()), _maxFixedConcurrentVisitors(1), _maxVariableConcurrentVisitors(0), _maxVisitorQueueSize(1024), @@ -46,8 +48,8 @@ VisitorManager::VisitorManager(const config::ConfigUri & configUri, _enforceQueueUse(false), _visitorFactories(externalFactories) { - _configFetcher.subscribe<vespa::config::content::core::StorVisitorConfig>(configUri.getConfigId(), this); - _configFetcher.start(); + _configFetcher->subscribe<vespa::config::content::core::StorVisitorConfig>(configUri.getConfigId(), this); + _configFetcher->start(); _component.registerMetric(*_metrics); _thread = _component.startThread(*this, 30s, 1s); _component.registerMetricUpdateHook(*this, framework::SecondTime(5)); @@ -81,7 +83,7 @@ void VisitorManager::onClose() { // Avoid getting config during shutdown - _configFetcher.close(); + _configFetcher->close(); { std::lock_guard sync(_visitorLock); for (CommandQueue<api::CreateVisitorCommand>::iterator it diff --git a/storage/src/vespa/storage/visiting/visitormanager.h b/storage/src/vespa/storage/visiting/visitormanager.h index 32237de7f36..888c0873e9c 100644 --- a/storage/src/vespa/storage/visiting/visitormanager.h +++ b/storage/src/vespa/storage/visiting/visitormanager.h @@ -29,12 +29,15 @@ #include <vespa/storageapi/message/datagram.h> #include <vespa/storageapi/message/internal.h> #include <vespa/storageapi/message/visitor.h> -#include <vespa/config/config.h> +#include <vespa/config/helper/ifetchercallback.h> #include <vespa/vespalib/util/document_runnable.h> -namespace storage { +namespace config { + class ConfigUri; + class ConfigFetcher; +} -namespace api { class BucketTimeInterval; } +namespace storage { class RequestStatusPageReply; @@ -63,7 +66,7 @@ private: mutable std::mutex _visitorLock; std::condition_variable _visitorCond; uint64_t _visitorCounter; - config::ConfigFetcher _configFetcher; + std::unique_ptr<config::ConfigFetcher> _configFetcher; std::shared_ptr<VisitorMetrics> _metrics; uint32_t _maxFixedConcurrentVisitors; uint32_t _maxVariableConcurrentVisitors; |