aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTor Brede Vekterli <vekterli@vespa.ai>2023-10-24 13:00:35 +0000
committerTor Brede Vekterli <vekterli@vespa.ai>2023-10-24 13:00:35 +0000
commit08ca78b605bc69621bb44f5bd24147cdfe3679b5 (patch)
tree3af598f419a57f4a02f3b9129bc52530e3f7962f
parentca8fbc7725cc3907fa6e6c0af662422362db6cfb (diff)
Rewire `ModifiedBucketChecker` config
-rw-r--r--storage/src/tests/persistence/filestorage/filestormodifiedbucketstest.cpp15
-rw-r--r--storage/src/tests/persistence/filestorage/modifiedbucketcheckertest.cpp13
-rw-r--r--storage/src/vespa/storage/persistence/filestorage/modifiedbucketchecker.cpp13
-rw-r--r--storage/src/vespa/storage/persistence/filestorage/modifiedbucketchecker.h10
-rw-r--r--storage/src/vespa/storage/storageserver/servicelayernode.cpp7
-rw-r--r--storage/src/vespa/storage/storageserver/servicelayernode.h2
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: