diff options
author | Tor Brede Vekterli <vekterli@vespa.ai> | 2023-10-24 13:00:35 +0000 |
---|---|---|
committer | Tor Brede Vekterli <vekterli@vespa.ai> | 2023-10-24 13:00:35 +0000 |
commit | 08ca78b605bc69621bb44f5bd24147cdfe3679b5 (patch) | |
tree | 3af598f419a57f4a02f3b9129bc52530e3f7962f /storage | |
parent | ca8fbc7725cc3907fa6e6c0af662422362db6cfb (diff) |
Rewire `ModifiedBucketChecker` config
Diffstat (limited to 'storage')
6 files changed, 33 insertions, 27 deletions
diff --git a/storage/src/tests/persistence/filestorage/filestormodifiedbucketstest.cpp b/storage/src/tests/persistence/filestorage/filestormodifiedbucketstest.cpp index 966382de39b..710da80972f 100644 --- a/storage/src/tests/persistence/filestorage/filestormodifiedbucketstest.cpp +++ b/storage/src/tests/persistence/filestorage/filestormodifiedbucketstest.cpp @@ -1,11 +1,12 @@ // Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -#include <vespa/storageapi/message/bucket.h> -#include <vespa/storage/persistence/filestorage/modifiedbucketchecker.h> -#include <vespa/persistence/spi/test.h> +#include <tests/persistence/common/filestortestfixture.h> #include <tests/persistence/common/persistenceproviderwrapper.h> +#include <vespa/config/helper/configgetter.hpp> #include <vespa/persistence/dummyimpl/dummypersistence.h> -#include <tests/persistence/common/filestortestfixture.h> +#include <vespa/persistence/spi/test.h> +#include <vespa/storage/persistence/filestorage/modifiedbucketchecker.h> +#include <vespa/storageapi/message/bucket.h> using storage::spi::test::makeSpiBucket; using namespace ::testing; @@ -36,10 +37,10 @@ struct BucketCheckerInjector : FileStorTestFixture::StorageLinkInjector _fixture(fixture) {} void inject(DummyStorageLink& link) const override { + using vespa::config::content::core::StorServerConfig; + auto cfg = config_from<StorServerConfig>(config::ConfigUri(_fixture._config->getConfigId())); link.push_back(std::make_unique<ModifiedBucketChecker>( - _node.getComponentRegister(), - _node.getPersistenceProvider(), - config::ConfigUri(_fixture._config->getConfigId()))); + _node.getComponentRegister(), _node.getPersistenceProvider(), *cfg)); } }; diff --git a/storage/src/tests/persistence/filestorage/modifiedbucketcheckertest.cpp b/storage/src/tests/persistence/filestorage/modifiedbucketcheckertest.cpp index 8acaa9a78d3..f96ff9c012e 100644 --- a/storage/src/tests/persistence/filestorage/modifiedbucketcheckertest.cpp +++ b/storage/src/tests/persistence/filestorage/modifiedbucketcheckertest.cpp @@ -1,11 +1,12 @@ // Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -#include <tests/common/testhelper.h> #include <tests/common/dummystoragelink.h> +#include <tests/common/testhelper.h> #include <tests/common/teststorageapp.h> +#include <vespa/config/common/exceptions.h> +#include <vespa/config/helper/configgetter.hpp> #include <vespa/persistence/dummyimpl/dummypersistence.h> #include <vespa/storage/persistence/filestorage/modifiedbucketchecker.h> -#include <vespa/config/common/exceptions.h> #include <vespa/vespalib/gtest/gtest.h> using namespace ::testing; @@ -45,9 +46,11 @@ ModifiedBucketCheckerTest::SetUp() _node->setupDummyPersistence(); _top.reset(new DummyStorageLink); + using vespa::config::content::core::StorServerConfig; + auto bootstrap_cfg = config_from<StorServerConfig>(config::ConfigUri(_config->getConfigId())); _handler = new ModifiedBucketChecker(_node->getComponentRegister(), _node->getPersistenceProvider(), - config::ConfigUri(_config->getConfigId())); + *bootstrap_cfg); _top->push_back(std::unique_ptr<StorageLink>(_handler)); _bottom = new DummyStorageLink; _handler->push_back(std::unique_ptr<StorageLink>(_bottom)); @@ -136,7 +139,7 @@ TEST_F(ModifiedBucketCheckerTest, recheck_requests_are_chunked) { _top->open(); cfgns::StorServerConfigBuilder cfgBuilder; cfgBuilder.bucketRecheckingChunkSize = 2; - _handler->configure(std::make_unique<cfgns::StorServerConfig>(cfgBuilder)); + _handler->on_configure(*std::make_unique<cfgns::StorServerConfig>(cfgBuilder)); modifyBuckets(5, 0); _handler->tick(); @@ -172,7 +175,7 @@ TEST_F(ModifiedBucketCheckerTest, invalid_chunk_size_config_is_rejected) { _top->open(); cfgns::StorServerConfigBuilder cfgBuilder; cfgBuilder.bucketRecheckingChunkSize = 0; - EXPECT_THROW(_handler->configure(std::make_unique<cfgns::StorServerConfig>(cfgBuilder)), + EXPECT_THROW(_handler->on_configure(*std::make_unique<cfgns::StorServerConfig>(cfgBuilder)), config::InvalidConfigException); } diff --git a/storage/src/vespa/storage/persistence/filestorage/modifiedbucketchecker.cpp b/storage/src/vespa/storage/persistence/filestorage/modifiedbucketchecker.cpp index e1c6465b332..9558429bf13 100644 --- a/storage/src/vespa/storage/persistence/filestorage/modifiedbucketchecker.cpp +++ b/storage/src/vespa/storage/persistence/filestorage/modifiedbucketchecker.cpp @@ -46,12 +46,11 @@ ModifiedBucketChecker::BucketIdListResult::reset(document::BucketSpace bucketSpa ModifiedBucketChecker::ModifiedBucketChecker( ServiceLayerComponentRegister& compReg, spi::PersistenceProvider& provider, - const config::ConfigUri& configUri) + const StorServerConfig& bootstrap_config) : StorageLink("Modified bucket checker"), _provider(provider), _component(), _thread(), - _configFetcher(std::make_unique<config::ConfigFetcher>(configUri.getContext())), _monitor(), _stateLock(), _bucketSpaces(), @@ -60,8 +59,7 @@ ModifiedBucketChecker::ModifiedBucketChecker( _maxPendingChunkSize(100), _singleThreadMode(false) { - _configFetcher->subscribe<vespa::config::content::core::StorServerConfig>(configUri.getConfigId(), this); - _configFetcher->start(); + on_configure(bootstrap_config); std::ostringstream threadName; threadName << "Modified bucket checker " << static_cast<void*>(this); @@ -75,15 +73,14 @@ ModifiedBucketChecker::~ModifiedBucketChecker() } void -ModifiedBucketChecker::configure( - std::unique_ptr<vespa::config::content::core::StorServerConfig> newConfig) +ModifiedBucketChecker::on_configure(const vespa::config::content::core::StorServerConfig& newConfig) { std::lock_guard lock(_stateLock); - if (newConfig->bucketRecheckingChunkSize < 1) { + if (newConfig.bucketRecheckingChunkSize < 1) { throw config::InvalidConfigException( "Cannot have bucket rechecking chunk size of less than 1"); } - _maxPendingChunkSize = newConfig->bucketRecheckingChunkSize; + _maxPendingChunkSize = newConfig.bucketRecheckingChunkSize; } diff --git a/storage/src/vespa/storage/persistence/filestorage/modifiedbucketchecker.h b/storage/src/vespa/storage/persistence/filestorage/modifiedbucketchecker.h index 18f03da7469..9f0111b32f9 100644 --- a/storage/src/vespa/storage/persistence/filestorage/modifiedbucketchecker.h +++ b/storage/src/vespa/storage/persistence/filestorage/modifiedbucketchecker.h @@ -23,19 +23,18 @@ namespace spi { struct PersistenceProvider; } class ModifiedBucketChecker : public StorageLink, public framework::Runnable, - public Types, - private config::IFetcherCallback< - vespa::config::content::core::StorServerConfig> + public Types { public: + using StorServerConfig = vespa::config::content::core::StorServerConfig; using UP = std::unique_ptr<ModifiedBucketChecker>; ModifiedBucketChecker(ServiceLayerComponentRegister& compReg, spi::PersistenceProvider& provide, - const config::ConfigUri& configUri); + const StorServerConfig& bootstrap_config); ~ModifiedBucketChecker() override; - void configure(std::unique_ptr<vespa::config::content::core::StorServerConfig>) override; + void on_configure(const vespa::config::content::core::StorServerConfig&); void run(framework::ThreadHandle& thread) override; bool tick(); @@ -88,7 +87,6 @@ private: spi::PersistenceProvider & _provider; ServiceLayerComponent::UP _component; std::unique_ptr<framework::Thread> _thread; - std::unique_ptr<config::ConfigFetcher> _configFetcher; std::mutex _monitor; std::condition_variable _cond; std::mutex _stateLock; diff --git a/storage/src/vespa/storage/storageserver/servicelayernode.cpp b/storage/src/vespa/storage/storageserver/servicelayernode.cpp index a142d322c53..b6e87c1bb59 100644 --- a/storage/src/vespa/storage/storageserver/servicelayernode.cpp +++ b/storage/src/vespa/storage/storageserver/servicelayernode.cpp @@ -49,6 +49,7 @@ ServiceLayerNode::ServiceLayerNode(const config::ConfigUri & configUri, _fileStorManager(nullptr), _merge_throttler(nullptr), _visitor_manager(nullptr), + _modified_bucket_checker(nullptr), _init_has_been_called(false) { } @@ -183,7 +184,9 @@ ServiceLayerNode::createChain(IStorageChainBuilder &builder) static_cast<VisitorMessageSessionFactory &>(*this), _externalVisitors); _visitor_manager = visitor_manager.get(); builder.add(std::move(visitor_manager)); - builder.add(std::make_unique<ModifiedBucketChecker>(_context.getComponentRegister(), _persistenceProvider, _configUri)); + auto bucket_checker = std::make_unique<ModifiedBucketChecker>(_context.getComponentRegister(), _persistenceProvider, server_config()); + _modified_bucket_checker = bucket_checker.get(); + builder.add(std::move(bucket_checker)); auto state_manager = releaseStateManager(); auto filstor_manager = std::make_unique<FileStorManager>(_configUri, _persistenceProvider, _context.getComponentRegister(), getDoneInitializeHandler(), state_manager->getHostInfo()); @@ -206,6 +209,8 @@ ServiceLayerNode::on_configure(const StorServerConfig& config) { assert(_merge_throttler); _merge_throttler->on_configure(config); + assert(_modified_bucket_checker); + _modified_bucket_checker->on_configure(config); } void diff --git a/storage/src/vespa/storage/storageserver/servicelayernode.h b/storage/src/vespa/storage/storageserver/servicelayernode.h index 10699c5a40f..078d179795f 100644 --- a/storage/src/vespa/storage/storageserver/servicelayernode.h +++ b/storage/src/vespa/storage/storageserver/servicelayernode.h @@ -21,6 +21,7 @@ class BucketManager; class ChangedBucketOwnershipHandler; class FileStorManager; class MergeThrottler; +class ModifiedBucketChecker; class VisitorManager; class ServiceLayerNode @@ -44,6 +45,7 @@ private: FileStorManager* _fileStorManager; MergeThrottler* _merge_throttler; VisitorManager* _visitor_manager; + ModifiedBucketChecker* _modified_bucket_checker; bool _init_has_been_called; public: |