diff options
author | bjormel <bjormel@yahooinc.com> | 2023-10-26 13:59:28 +0000 |
---|---|---|
committer | bjormel <bjormel@yahooinc.com> | 2023-10-26 13:59:28 +0000 |
commit | 567be9a1f6353cec41c23bfd1fcd46b4b2a4d2d7 (patch) | |
tree | 4664a743e166a5e11aee7b9acd70ad8ee2617612 /storage/src/vespa/storage/storageserver/servicelayernode.h | |
parent | e9058b555d4dfea2f6c872d9a677e8678b569569 (diff) | |
parent | bce3b8e926bf9da880172acbe1ba4b12d5e026d6 (diff) |
Merge branch 'master' into bjormel/aws-main-controllerbjormel/aws-main-controller
Diffstat (limited to 'storage/src/vespa/storage/storageserver/servicelayernode.h')
-rw-r--r-- | storage/src/vespa/storage/storageserver/servicelayernode.h | 69 |
1 files changed, 49 insertions, 20 deletions
diff --git a/storage/src/vespa/storage/storageserver/servicelayernode.h b/storage/src/vespa/storage/storageserver/servicelayernode.h index e308c020856..ae39bb0805e 100644 --- a/storage/src/vespa/storage/storageserver/servicelayernode.h +++ b/storage/src/vespa/storage/storageserver/servicelayernode.h @@ -1,10 +1,4 @@ -// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -/** - * \class storage::ServiceLayerNode - * \ingroup storageserver - * - * \brief Class for setting up a service layer node. - */ +// Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. #pragma once @@ -12,16 +6,24 @@ #include "servicelayernodecontext.h" #include "storagenode.h" #include "vespa/vespalib/util/jsonstream.h" -#include <vespa/storage/visiting/visitormessagesessionfactory.h> -#include <vespa/storage/common/visitorfactory.h> +#include <vespa/config-persistence.h> +#include <vespa/config-stor-filestor.h> #include <vespa/storage/common/nodestateupdater.h> +#include <vespa/storage/common/visitorfactory.h> +#include <vespa/storage/visiting/config-stor-visitor.h> +#include <vespa/storage/visiting/visitormessagesessionfactory.h> namespace storage { namespace spi { struct PersistenceProvider; } +class Bouncer; class BucketManager; +class ChangedBucketOwnershipHandler; class FileStorManager; +class MergeThrottler; +class ModifiedBucketChecker; +class VisitorManager; class ServiceLayerNode : public StorageNode, @@ -29,21 +31,44 @@ class ServiceLayerNode private NodeStateReporter { - ServiceLayerNodeContext & _context; - spi::PersistenceProvider & _persistenceProvider; - VisitorFactory::Map _externalVisitors; - - // FIXME: Should probably use the fetcher in StorageNode - std::unique_ptr<config::ConfigFetcher> _configFetcher; - BucketManager * _bucket_manager; - FileStorManager * _fileStorManager; - bool _init_has_been_called; +public: + using PersistenceConfig = vespa::config::content::PersistenceConfig; + using StorVisitorConfig = vespa::config::content::core::StorVisitorConfig; + using StorFilestorConfig = vespa::config::content::StorFilestorConfig; +private: + ServiceLayerNodeContext& _context; + spi::PersistenceProvider& _persistenceProvider; + VisitorFactory::Map _externalVisitors; + std::unique_ptr<PersistenceConfig> _persistence_bootstrap_config; + std::unique_ptr<StorVisitorConfig> _visitor_bootstrap_config; + std::unique_ptr<StorFilestorConfig> _filestor_bootstrap_config; + Bouncer* _bouncer; + BucketManager* _bucket_manager; + ChangedBucketOwnershipHandler* _changed_bucket_ownership_handler; + FileStorManager* _fileStorManager; + MergeThrottler* _merge_throttler; + VisitorManager* _visitor_manager; + ModifiedBucketChecker* _modified_bucket_checker; + bool _init_has_been_called; public: using UP = std::unique_ptr<ServiceLayerNode>; + struct ServiceLayerBootstrapConfigs { + BootstrapConfigs storage_bootstrap_configs; + std::unique_ptr<PersistenceConfig> persistence_cfg; + std::unique_ptr<StorVisitorConfig> visitor_cfg; + std::unique_ptr<StorFilestorConfig> filestor_cfg; + + ServiceLayerBootstrapConfigs(); + ~ServiceLayerBootstrapConfigs(); + ServiceLayerBootstrapConfigs(ServiceLayerBootstrapConfigs&&) noexcept; + ServiceLayerBootstrapConfigs& operator=(ServiceLayerBootstrapConfigs&&) noexcept; + }; + ServiceLayerNode(const config::ConfigUri & configUri, ServiceLayerNodeContext& context, + ServiceLayerBootstrapConfigs bootstrap_configs, ApplicationGenerationFetcher& generationFetcher, spi::PersistenceProvider& persistenceProvider, const VisitorFactory::Map& externalVisitors); @@ -53,20 +78,24 @@ public: */ void init(); + void on_configure(const StorServerConfig& config); + void on_configure(const PersistenceConfig& config); + void on_configure(const StorVisitorConfig& config); + void on_configure(const StorFilestorConfig& config); + const lib::NodeType& getNodeType() const override { return lib::NodeType::STORAGE; } ResumeGuard pause() override; private: void report(vespalib::JsonStream &writer) const override; - void subscribeToConfigs() override; void initializeNodeSpecific() override; void perform_post_chain_creation_init_steps() override; void handleLiveConfigUpdate(const InitialGuard & initGuard) override; VisitorMessageSession::UP createSession(Visitor&, VisitorThread&) override; documentapi::Priority::Value toDocumentPriority(uint8_t storagePriority) const override; void createChain(IStorageChainBuilder &builder) override; - void removeConfigSubscriptions() override; + void on_bouncer_config_changed() override; }; } // storage |