aboutsummaryrefslogtreecommitdiffstats
path: root/storage/src/vespa/storage/storageserver/servicelayernode.h
diff options
context:
space:
mode:
Diffstat (limited to 'storage/src/vespa/storage/storageserver/servicelayernode.h')
-rw-r--r--storage/src/vespa/storage/storageserver/servicelayernode.h69
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