diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2024-02-02 11:56:26 +0000 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2024-02-02 13:11:07 +0000 |
commit | be0ba3bac9cb28e34d2f9476422c23d37a4772fd (patch) | |
tree | 705c07bccf7cc8f112a71d74edc789a31379e064 /storage/src | |
parent | 6a611fed8a1ed5824956702b9e86b3e7719140b9 (diff) |
- Always inhibit_default_merges_when_global_merges_pending
- Only show config to the code that needs it.
- Avoid using config autogenerated internals around in the code.
Diffstat (limited to 'storage/src')
42 files changed, 159 insertions, 166 deletions
diff --git a/storage/src/tests/common/teststorageapp.cpp b/storage/src/tests/common/teststorageapp.cpp index 07e32646a8d..e2e2de10702 100644 --- a/storage/src/tests/common/teststorageapp.cpp +++ b/storage/src/tests/common/teststorageapp.cpp @@ -3,6 +3,8 @@ #include "teststorageapp.h" #include <vespa/storage/common/content_bucket_db_options.h> #include <vespa/storage/config/config-stor-server.h> +#include <vespa/storage/config/config-stor-distributormanager.h> +#include <vespa/storage/config/config-stor-visitordispatcher.h> #include <vespa/config-stor-distribution.h> #include <vespa/config-fleetcontroller.h> #include <vespa/persistence/dummyimpl/dummypersistence.h> diff --git a/storage/src/tests/common/teststorageapp.h b/storage/src/tests/common/teststorageapp.h index 5695ca2618e..fb91145c66a 100644 --- a/storage/src/tests/common/teststorageapp.h +++ b/storage/src/tests/common/teststorageapp.h @@ -22,6 +22,7 @@ #include <vespa/document/bucket/fixed_bucket_spaces.h> #include <vespa/persistence/spi/types.h> #include <vespa/storage/bucketdb/storbucketdb.h> +#include <vespa/storage/bucketdb/bucketdatabase.h> #include <vespa/storage/common/doneinitializehandler.h> #include <vespa/storage/common/hostreporter/hostinfo.h> #include <vespa/storage/common/node_identity.h> @@ -36,7 +37,6 @@ namespace storage { namespace spi { struct PersistenceProvider; } -class StorageBucketDBInitializer; DEFINE_PRIMITIVE_WRAPPER(uint16_t, NodeIndex); DEFINE_PRIMITIVE_WRAPPER(uint16_t, NodeCount); diff --git a/storage/src/tests/distributor/bucketdbmetricupdatertest.cpp b/storage/src/tests/distributor/bucketdbmetricupdatertest.cpp index 58b4d5d0146..638c7698f02 100644 --- a/storage/src/tests/distributor/bucketdbmetricupdatertest.cpp +++ b/storage/src/tests/distributor/bucketdbmetricupdatertest.cpp @@ -316,8 +316,7 @@ TEST_F(BucketDBMetricUpdaterTest, min_bucket_replica_tracked_and_reported_per_no TEST_F(BucketDBMetricUpdaterTest, non_trusted_replicas_also_counted_in_mode_any) { BucketDBMetricUpdater metricUpdater; - using CountingMode = BucketDBMetricUpdater::ReplicaCountingMode; - metricUpdater.setMinimumReplicaCountingMode(CountingMode::ANY); + metricUpdater.setMinimumReplicaCountingMode(ReplicaCountingMode::ANY); visitBucketWith2Copies1Trusted(metricUpdater); visitBucketWith2CopiesBothTrusted(metricUpdater); @@ -327,8 +326,7 @@ TEST_F(BucketDBMetricUpdaterTest, non_trusted_replicas_also_counted_in_mode_any) TEST_F(BucketDBMetricUpdaterTest, minimum_replica_count_returned_for_node_in_mode_any) { BucketDBMetricUpdater metricUpdater; - using CountingMode = BucketDBMetricUpdater::ReplicaCountingMode; - metricUpdater.setMinimumReplicaCountingMode(CountingMode::ANY); + metricUpdater.setMinimumReplicaCountingMode(ReplicaCountingMode::ANY); visitBucketWith2CopiesBothTrusted(metricUpdater); visitBucketWith1Copy(metricUpdater); diff --git a/storage/src/tests/distributor/distributor_stripe_test.cpp b/storage/src/tests/distributor/distributor_stripe_test.cpp index 302ed6d2d9b..5312465b726 100644 --- a/storage/src/tests/distributor/distributor_stripe_test.cpp +++ b/storage/src/tests/distributor/distributor_stripe_test.cpp @@ -8,6 +8,8 @@ #include <vespa/storage/distributor/top_level_distributor.h> #include <vespa/storage/distributor/distributor_bucket_space.h> #include <vespa/storage/distributor/distributor_stripe.h> +#include <vespa/storage/config/distributorconfiguration.h> +#include <vespa/storage/config/config-stor-distributormanager.h> #include <vespa/storageapi/message/bucketsplitting.h> #include <vespa/storageapi/message/persistence.h> #include <vespa/storageapi/message/removelocation.h> @@ -51,7 +53,7 @@ struct DistributorStripeTest : Test, DistributorStripeTestUtil { using NodeCount = uint16_t; using Redundancy = uint16_t; - using ConfigBuilder = vespa::config::content::core::StorDistributormanagerConfigBuilder; + using ConfigBuilder = DistributorManagerConfig; auto currentReplicaCountingMode() const noexcept { return _stripe->_bucketDBMetricUpdater.getMinimumReplicaCountingMode(); @@ -592,7 +594,7 @@ TEST_F(DistributorStripeTest, stats_generated_for_preempted_operations) TEST_F(DistributorStripeTest, replica_counting_mode_is_configured_to_trusted_by_default) { setup_stripe(Redundancy(2), NodeCount(2), "storage:2 distributor:1"); - EXPECT_EQ(ConfigBuilder::MinimumReplicaCountingMode::TRUSTED, currentReplicaCountingMode()); + EXPECT_EQ(ReplicaCountingMode::TRUSTED, currentReplicaCountingMode()); } TEST_F(DistributorStripeTest, replica_counting_mode_config_is_propagated_to_metric_updater) @@ -601,7 +603,7 @@ TEST_F(DistributorStripeTest, replica_counting_mode_config_is_propagated_to_metr ConfigBuilder builder; builder.minimumReplicaCountingMode = ConfigBuilder::MinimumReplicaCountingMode::ANY; configure_stripe(builder); - EXPECT_EQ(ConfigBuilder::MinimumReplicaCountingMode::ANY, currentReplicaCountingMode()); + EXPECT_EQ(ReplicaCountingMode::ANY, currentReplicaCountingMode()); } TEST_F(DistributorStripeTest, max_consecutively_inhibited_maintenance_ticks_config_is_propagated_to_internal_config) @@ -648,19 +650,6 @@ TEST_F(DistributorStripeTest, max_clock_skew_config_is_propagated_to_distributor EXPECT_EQ(getConfig().getMaxClusterClockSkew(), std::chrono::seconds(5)); } -TEST_F(DistributorStripeTest, inhibit_default_merge_if_global_merges_pending_config_is_propagated) -{ - setup_stripe(Redundancy(2), NodeCount(2), "storage:2 distributor:1"); - ConfigBuilder builder; - builder.inhibitDefaultMergesWhenGlobalMergesPending = true; - configure_stripe(builder); - EXPECT_TRUE(getConfig().inhibit_default_merges_when_global_merges_pending()); - - builder.inhibitDefaultMergesWhenGlobalMergesPending = false; - configure_stripe(builder); - EXPECT_FALSE(getConfig().inhibit_default_merges_when_global_merges_pending()); -} - namespace { auto makeDummyRemoveCommand() { diff --git a/storage/src/tests/distributor/distributor_stripe_test_util.cpp b/storage/src/tests/distributor/distributor_stripe_test_util.cpp index 1c651141b2c..65bc6d1fe3e 100644 --- a/storage/src/tests/distributor/distributor_stripe_test_util.cpp +++ b/storage/src/tests/distributor/distributor_stripe_test_util.cpp @@ -10,6 +10,8 @@ #include <vespa/storage/distributor/distributormetricsset.h> #include <vespa/storage/distributor/ideal_state_total_metrics.h> #include <vespa/storage/distributor/node_supported_features_repo.h> +#include <vespa/storage/config/distributorconfiguration.h> +#include <vespa/storage/config/config-stor-distributormanager.h> #include <vespa/storage/storageutil/utils.h> #include <vespa/vdslib/distribution/distribution.h> #include <vespa/vespalib/text/stringtokenizer.h> diff --git a/storage/src/tests/distributor/distributor_stripe_test_util.h b/storage/src/tests/distributor/distributor_stripe_test_util.h index 10f8131fcde..801320e2bf8 100644 --- a/storage/src/tests/distributor/distributor_stripe_test_util.h +++ b/storage/src/tests/distributor/distributor_stripe_test_util.h @@ -9,11 +9,11 @@ #include <vespa/storage/distributor/stripe_host_info_notifier.h> #include <vespa/storage/storageutil/utils.h> -namespace storage { - -namespace framework { struct TickingThreadPool; } +namespace storage::framework { + struct TickingThreadPool; +} -namespace distributor { +namespace storage::distributor { class DistributorBucketSpace; class DistributorBucketSpaceRepo; @@ -179,7 +179,7 @@ public: void simulate_distribution_config_change(std::shared_ptr<lib::Distribution> new_config); static std::shared_ptr<lib::Distribution> make_default_distribution_config(uint16_t redundancy, uint16_t node_count); - using ConfigBuilder = vespa::config::content::core::StorDistributormanagerConfigBuilder; + using ConfigBuilder = DistributorManagerConfig; std::shared_ptr<DistributorConfiguration> make_config() const; void configure_stripe(std::shared_ptr<const DistributorConfiguration> config); @@ -267,5 +267,3 @@ protected: }; } - -} diff --git a/storage/src/tests/distributor/externaloperationhandlertest.cpp b/storage/src/tests/distributor/externaloperationhandlertest.cpp index 3fb93d96787..634e4993d53 100644 --- a/storage/src/tests/distributor/externaloperationhandlertest.cpp +++ b/storage/src/tests/distributor/externaloperationhandlertest.cpp @@ -15,6 +15,7 @@ #include <vespa/storage/distributor/externaloperationhandler.h> #include <vespa/storage/distributor/operations/external/getoperation.h> #include <vespa/storage/distributor/operations/external/read_for_write_visitor_operation.h> +#include <vespa/storage/config/distributorconfiguration.h> #include <vespa/storageapi/message/persistence.h> #include <vespa/storageapi/message/visitor.h> #include <vespa/vespalib/gtest/gtest.h> diff --git a/storage/src/tests/distributor/garbagecollectiontest.cpp b/storage/src/tests/distributor/garbagecollectiontest.cpp index 6ab482f5259..bd80b9b447a 100644 --- a/storage/src/tests/distributor/garbagecollectiontest.cpp +++ b/storage/src/tests/distributor/garbagecollectiontest.cpp @@ -7,6 +7,7 @@ #include <vespa/storage/distributor/idealstatemanager.h> #include <vespa/storage/distributor/idealstatemetricsset.h> #include <vespa/storage/distributor/operations/idealstate/garbagecollectionoperation.h> +#include <vespa/storage/config/distributorconfiguration.h> #include <vespa/storageapi/message/removelocation.h> #include <vespa/vespalib/gtest/gtest.h> diff --git a/storage/src/tests/distributor/joinbuckettest.cpp b/storage/src/tests/distributor/joinbuckettest.cpp index b79284c77b6..37ea7595439 100644 --- a/storage/src/tests/distributor/joinbuckettest.cpp +++ b/storage/src/tests/distributor/joinbuckettest.cpp @@ -4,6 +4,7 @@ #include <vespa/document/test/make_document_bucket.h> #include <vespa/storage/distributor/top_level_distributor.h> #include <vespa/storage/distributor/operations/idealstate/joinoperation.h> +#include <vespa/storage/config/distributorconfiguration.h> #include <vespa/storageapi/message/bucketsplitting.h> #include <vespa/vespalib/gtest/gtest.h> #include <gmock/gmock.h> diff --git a/storage/src/tests/distributor/mergeoperationtest.cpp b/storage/src/tests/distributor/mergeoperationtest.cpp index 6ed05e14519..8c623eb7ba4 100644 --- a/storage/src/tests/distributor/mergeoperationtest.cpp +++ b/storage/src/tests/distributor/mergeoperationtest.cpp @@ -8,6 +8,7 @@ #include <vespa/storage/distributor/idealstatemanager.h> #include <vespa/storage/distributor/operation_sequencer.h> #include <vespa/storage/distributor/operations/idealstate/mergeoperation.h> +#include <vespa/storage/config/distributorconfiguration.h> #include <vespa/storageapi/message/persistence.h> #include <vespa/vdslib/distribution/distribution.h> #include <vespa/vespalib/gtest/gtest.h> diff --git a/storage/src/tests/distributor/putoperationtest.cpp b/storage/src/tests/distributor/putoperationtest.cpp index 430b0091369..5c6510ab1ec 100644 --- a/storage/src/tests/distributor/putoperationtest.cpp +++ b/storage/src/tests/distributor/putoperationtest.cpp @@ -8,6 +8,7 @@ #include <vespa/storage/distributor/distributor_stripe.h> #include <vespa/storage/distributor/operations/cancel_scope.h> #include <vespa/storage/distributor/operations/external/putoperation.h> +#include <vespa/storage/config/distributorconfiguration.h> #include <vespa/storageapi/message/bucket.h> #include <vespa/storageapi/message/persistence.h> #include <vespa/storageapi/message/state.h> diff --git a/storage/src/tests/distributor/splitbuckettest.cpp b/storage/src/tests/distributor/splitbuckettest.cpp index 5c2dc262a5c..8ab5211e037 100644 --- a/storage/src/tests/distributor/splitbuckettest.cpp +++ b/storage/src/tests/distributor/splitbuckettest.cpp @@ -7,6 +7,7 @@ #include <vespa/storage/distributor/idealstatemanager.h> #include <vespa/storage/distributor/operation_sequencer.h> #include <vespa/storage/distributor/operations/idealstate/splitoperation.h> +#include <vespa/storage/config/distributorconfiguration.h> #include <vespa/storageapi/message/bucketsplitting.h> #include <vespa/storageapi/message/persistence.h> #include <vespa/vespalib/gtest/gtest.h> diff --git a/storage/src/tests/distributor/statecheckerstest.cpp b/storage/src/tests/distributor/statecheckerstest.cpp index a0d45292c1d..ad9a1598788 100644 --- a/storage/src/tests/distributor/statecheckerstest.cpp +++ b/storage/src/tests/distributor/statecheckerstest.cpp @@ -12,6 +12,8 @@ #include <vespa/storage/distributor/distributor_stripe.h> #include <vespa/storage/distributor/operations/idealstate/mergeoperation.h> #include <vespa/storage/distributor/statecheckers.h> +#include <vespa/storage/config/distributorconfiguration.h> +#include <vespa/storage/config/config-stor-distributormanager.h> #include <vespa/storageapi/message/persistence.h> #include <vespa/storageapi/message/stat.h> #include <vespa/vdslib/distribution/distribution.h> @@ -59,12 +61,7 @@ struct StateCheckersTest : Test, DistributorStripeTestUtil { const std::vector<uint16_t>& expected) { auto& distributorBucketSpace(getIdealStateManager().getBucketSpaceRepo().get(makeBucketSpace())); - std::vector<uint16_t> idealNodes( - distributorBucketSpace - .getDistribution().getIdealStorageNodes( - distributorBucketSpace.getClusterState(), - bucket, - "ui")); + std::vector<uint16_t> idealNodes(distributorBucketSpace.getDistribution().getIdealStorageNodes(distributorBucketSpace.getClusterState(), bucket, "ui")); ASSERT_EQ(expected, idealNodes); } @@ -168,13 +165,9 @@ struct StateCheckersTest : Test, DistributorStripeTestUtil { static const PendingMessage NO_OP_BLOCKER; const PendingMessage* _blockerMessage {&NO_OP_BLOCKER}; uint32_t _redundancy {2}; - uint32_t _splitCount {0}; - uint32_t _splitSize {0}; - uint32_t _minSplitBits {0}; bool _includeMessagePriority {false}; bool _includeSchedulingPriority {false}; bool _merge_operations_disabled {false}; - bool _config_enable_default_space_merge_inhibition {false}; bool _merges_inhibited_in_bucket_space {false}; CheckerParams(); ~CheckerParams(); @@ -195,10 +188,6 @@ struct StateCheckersTest : Test, DistributorStripeTestUtil { _pending_cluster_state = state; return *this; } - CheckerParams& blockerMessage(const PendingMessage& blocker) { - _blockerMessage = &blocker; - return *this; - } CheckerParams& redundancy(uint32_t r) { _redundancy = r; return *this; @@ -219,10 +208,6 @@ struct StateCheckersTest : Test, DistributorStripeTestUtil { _bucket_space = bucket_space; return *this; } - CheckerParams& config_enable_default_space_merge_inhibition(bool enabled) noexcept { - _config_enable_default_space_merge_inhibition = enabled; - return *this; - } CheckerParams& merges_inhibited_in_bucket_space(bool inhibited) noexcept { _merges_inhibited_in_bucket_space = inhibited; return *this; @@ -238,9 +223,8 @@ struct StateCheckersTest : Test, DistributorStripeTestUtil { addNodesToBucketDB(bucket, params._bucketInfo); set_redundancy(params._redundancy); enable_cluster_state(params._clusterState); - vespa::config::content::core::StorDistributormanagerConfigBuilder config; + DistributorManagerConfig config; config.mergeOperationsDisabled = params._merge_operations_disabled; - config.inhibitDefaultMergesWhenGlobalMergesPending = params._config_enable_default_space_merge_inhibition; configure_stripe(config); if (!params._pending_cluster_state.empty()) { simulate_set_pending_cluster_state(params._pending_cluster_state); @@ -824,20 +808,6 @@ TEST_F(StateCheckersTest, no_merge_operation_generated_if_merges_inhibited_in_de CheckerParams() .expect("NO OPERATIONS GENERATED") // Would normally generate a merge op .bucketInfo("0=1,2=2") - .config_enable_default_space_merge_inhibition(true) - .merges_inhibited_in_bucket_space(true) - .clusterState("distributor:1 storage:3")); -} - -TEST_F(StateCheckersTest, merge_operation_still_generated_if_merges_inhibited_in_default_bucket_space_but_config_disallowed) { - runAndVerify<SynchronizeAndMoveStateChecker>( - CheckerParams() - .expect("[Moving bucket to ideal node 1]" - "[Synchronizing buckets with different checksums " - "node(idx=0,crc=0x1,docs=1/1,bytes=1/1,trusted=false,active=false,ready=false), " - "node(idx=2,crc=0x2,docs=2/2,bytes=2/2,trusted=false,active=false,ready=false)]") - .bucketInfo("0=1,2=2") - .config_enable_default_space_merge_inhibition(false) .merges_inhibited_in_bucket_space(true) .clusterState("distributor:1 storage:3")); } diff --git a/storage/src/tests/distributor/statoperationtest.cpp b/storage/src/tests/distributor/statoperationtest.cpp index 88777a61fb1..d530c03c898 100644 --- a/storage/src/tests/distributor/statoperationtest.cpp +++ b/storage/src/tests/distributor/statoperationtest.cpp @@ -6,6 +6,7 @@ #include <vespa/storage/distributor/distributor_bucket_space.h> #include <vespa/storage/distributor/operations/external/statbucketlistoperation.h> #include <vespa/storage/distributor/operations/external/statbucketoperation.h> +#include <vespa/storage/config/distributorconfiguration.h> #include <vespa/storageapi/message/stat.h> #include <vespa/vespalib/gtest/gtest.h> #include <gmock/gmock.h> diff --git a/storage/src/tests/distributor/top_level_distributor_test.cpp b/storage/src/tests/distributor/top_level_distributor_test.cpp index 4e44abe71fb..f8c1b64fc3c 100644 --- a/storage/src/tests/distributor/top_level_distributor_test.cpp +++ b/storage/src/tests/distributor/top_level_distributor_test.cpp @@ -20,6 +20,7 @@ #include <vespa/storage/distributor/distributormetricsset.h> #include <vespa/storage/distributor/distributor_stripe_pool.h> #include <vespa/storage/distributor/distributor_stripe_thread.h> +#include <vespa/storage/config/distributorconfiguration.h> #include <vespa/vespalib/stllike/asciistream.h> #include <vespa/metrics/updatehook.h> #include <thread> diff --git a/storage/src/tests/distributor/top_level_distributor_test_util.cpp b/storage/src/tests/distributor/top_level_distributor_test_util.cpp index 55cf4efc93b..94031c6d71e 100644 --- a/storage/src/tests/distributor/top_level_distributor_test_util.cpp +++ b/storage/src/tests/distributor/top_level_distributor_test_util.cpp @@ -355,14 +355,14 @@ TopLevelDistributorTestUtil::tick(bool only_tick_top_level) { return did_work; } -const DistributorConfig& +const DistributorManagerConfig& TopLevelDistributorTestUtil::current_distributor_config() const { return _component->getDistributorConfig(); } void -TopLevelDistributorTestUtil::reconfigure(const DistributorConfig& cfg) +TopLevelDistributorTestUtil::reconfigure(const DistributorManagerConfig& cfg) { _node->getComponentRegister().setDistributorConfig(cfg); tick(); // Config is propagated upon next top-level tick diff --git a/storage/src/tests/distributor/top_level_distributor_test_util.h b/storage/src/tests/distributor/top_level_distributor_test_util.h index 4132b7a398d..1d4c81a5bfb 100644 --- a/storage/src/tests/distributor/top_level_distributor_test_util.h +++ b/storage/src/tests/distributor/top_level_distributor_test_util.h @@ -76,8 +76,8 @@ public: bool tick(bool only_tick_top_level = false); - const DistributorConfig& current_distributor_config() const; - void reconfigure(const DistributorConfig&); + const DistributorManagerConfig& current_distributor_config() const; + void reconfigure(const DistributorManagerConfig&); framework::defaultimplementation::FakeClock& fake_clock() noexcept { return _node->getClock(); diff --git a/storage/src/tests/distributor/twophaseupdateoperationtest.cpp b/storage/src/tests/distributor/twophaseupdateoperationtest.cpp index d12d8254294..c9dfa346424 100644 --- a/storage/src/tests/distributor/twophaseupdateoperationtest.cpp +++ b/storage/src/tests/distributor/twophaseupdateoperationtest.cpp @@ -11,6 +11,7 @@ #include <vespa/storage/distributor/distributor_stripe.h> #include <vespa/storage/distributor/externaloperationhandler.h> #include <vespa/storage/distributor/operations/external/twophaseupdateoperation.h> +#include <vespa/storage/config/distributorconfiguration.h> #include <vespa/storage/distributor/top_level_distributor.h> #include <vespa/storageapi/message/persistence.h> #include <gtest/gtest.h> diff --git a/storage/src/vespa/storage/common/distributorcomponent.cpp b/storage/src/vespa/storage/common/distributorcomponent.cpp index 41e875a4ed7..c2249a1ef68 100644 --- a/storage/src/vespa/storage/common/distributorcomponent.cpp +++ b/storage/src/vespa/storage/common/distributorcomponent.cpp @@ -1,15 +1,18 @@ // Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. #include "distributorcomponent.h" +#include <vespa/storage/config/distributorconfiguration.h> +#include <vespa/storage/config/config-stor-distributormanager.h> +#include <vespa/storage/config/config-stor-visitordispatcher.h> namespace storage { DistributorComponent::DistributorComponent(DistributorComponentRegister& compReg, vespalib::stringref name) : StorageComponent(compReg, name), - _timeCalculator(0), - _distributorConfig(), - _visitorConfig(), + _timeCalculator(nullptr), + _distributorConfig(std::make_unique<DistributorManagerConfig>()), + _visitorConfig(std::make_unique<VisitorDispatcherConfig>()), _internal_config_generation(0), _config_snapshot(std::make_shared<DistributorConfiguration>(*this)) { @@ -18,15 +21,28 @@ DistributorComponent::DistributorComponent(DistributorComponentRegister& compReg DistributorComponent::~DistributorComponent() = default; -void DistributorComponent::update_config_snapshot() { +void +DistributorComponent::update_config_snapshot() { auto new_snapshot = std::make_shared<DistributorConfiguration>(*this); - new_snapshot->configure(_visitorConfig); - new_snapshot->configure(_distributorConfig); + new_snapshot->configure(*_visitorConfig); + new_snapshot->configure(*_distributorConfig); // TODO make thread safe if necessary; access currently synchronized by config updates // and checks all being routed through the same "critical tick" global lock. ++_internal_config_generation; _config_snapshot = std::move(new_snapshot); } +void +DistributorComponent::setDistributorConfig(const DistributorManagerConfig& cfg) { + _distributorConfig = std::make_unique<DistributorManagerConfig>(cfg); + update_config_snapshot(); +} + +void +DistributorComponent::setVisitorConfig(const VisitorDispatcherConfig& cfg) { + _visitorConfig = std::make_unique<VisitorDispatcherConfig>(cfg); + update_config_snapshot(); +} + } // storage diff --git a/storage/src/vespa/storage/common/distributorcomponent.h b/storage/src/vespa/storage/common/distributorcomponent.h index 1892c7ce5a2..cb5e76fe44b 100644 --- a/storage/src/vespa/storage/common/distributorcomponent.h +++ b/storage/src/vespa/storage/common/distributorcomponent.h @@ -26,16 +26,19 @@ #pragma once #include "storagecomponent.h" -#include <vespa/storage/bucketdb/bucketdatabase.h> -#include <vespa/storage/config/distributorconfiguration.h> -#include <vespa/storage/config/config-stor-distributormanager.h> -#include <vespa/storage/config/config-stor-visitordispatcher.h> #include <vespa/storageapi/defs.h> +namespace vespa::config::content::core::internal { + class InternalStorDistributormanagerType; + class InternalStorVisitordispatcherType; +} + namespace storage { -using DistributorConfig = vespa::config::content::core::internal::InternalStorDistributormanagerType; -using VisitorConfig = vespa::config::content::core::internal::InternalStorVisitordispatcherType; +class DistributorConfiguration; + +using DistributorManagerConfig = vespa::config::content::core::internal::InternalStorDistributormanagerType; +using VisitorDispatcherConfig = vespa::config::content::core::internal::InternalStorVisitordispatcherType; struct UniqueTimeCalculator { virtual ~UniqueTimeCalculator() = default; @@ -47,8 +50,8 @@ struct DistributorManagedComponent virtual ~DistributorManagedComponent() = default; virtual void setTimeCalculator(UniqueTimeCalculator&) = 0; - virtual void setDistributorConfig(const DistributorConfig&)= 0; - virtual void setVisitorConfig(const VisitorConfig&) = 0; + virtual void setDistributorConfig(const DistributorManagerConfig&)= 0; + virtual void setVisitorConfig(const VisitorDispatcherConfig&) = 0; }; struct DistributorComponentRegister : public virtual StorageComponentRegister @@ -59,24 +62,16 @@ struct DistributorComponentRegister : public virtual StorageComponentRegister class DistributorComponent : public StorageComponent, private DistributorManagedComponent { - mutable UniqueTimeCalculator* _timeCalculator; - DistributorConfig _distributorConfig; - VisitorConfig _visitorConfig; - uint64_t _internal_config_generation; // Note: NOT related to config system generations + mutable UniqueTimeCalculator* _timeCalculator; + std::unique_ptr<DistributorManagerConfig> _distributorConfig; + std::unique_ptr<VisitorDispatcherConfig> _visitorConfig; + uint64_t _internal_config_generation; // Note: NOT related to config system generations std::shared_ptr<const DistributorConfiguration> _config_snapshot; void setTimeCalculator(UniqueTimeCalculator& utc) override { _timeCalculator = &utc; } - void setDistributorConfig(const DistributorConfig& c) override { - _distributorConfig = c; - update_config_snapshot(); - } - void setVisitorConfig(const VisitorConfig& c) override { - _visitorConfig = c; - update_config_snapshot(); - } - + void setDistributorConfig(const DistributorManagerConfig& c) override; + void setVisitorConfig(const VisitorDispatcherConfig& c) override; void update_config_snapshot(); - public: using UP = std::unique_ptr<DistributorComponent>; @@ -86,12 +81,10 @@ public: [[nodiscard]] api::Timestamp getUniqueTimestamp() const { return _timeCalculator->generate_unique_timestamp(); } - const DistributorConfig& getDistributorConfig() const { - return _distributorConfig; - } - const VisitorConfig& getVisitorConfig() const { - return _visitorConfig; + const DistributorManagerConfig& getDistributorConfig() const { + return *_distributorConfig; } + uint64_t internal_config_generation() const noexcept { return _internal_config_generation; } diff --git a/storage/src/vespa/storage/config/distributorconfiguration.cpp b/storage/src/vespa/storage/config/distributorconfiguration.cpp index 6949882a2f7..7486f052924 100644 --- a/storage/src/vespa/storage/config/distributorconfiguration.cpp +++ b/storage/src/vespa/storage/config/distributorconfiguration.cpp @@ -1,5 +1,7 @@ // Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. #include "distributorconfiguration.h" +#include <vespa/storage/config/config-stor-distributormanager.h> +#include <vespa/storage/config/config-stor-visitordispatcher.h> #include <vespa/document/select/parser.h> #include <vespa/document/select/traversingvisitor.h> #include <vespa/persistence/spi/bucket_limits.h> @@ -45,7 +47,6 @@ DistributorConfiguration::DistributorConfiguration(StorageComponent& component) _enable_metadata_only_fetch_phase_for_inconsistent_updates(false), _implicitly_clear_priority_on_schedule(false), _use_unordered_merge_chaining(false), - _inhibit_default_merges_when_global_merges_pending(false), _enable_two_phase_garbage_collection(false), _enable_condition_probing(false), _enable_operation_cancellation(false), @@ -91,8 +92,21 @@ DistributorConfiguration::containsTimeStatement(const std::string& documentSelec return visitor.hasCurrentTime; } +namespace { + +ReplicaCountingMode +deriveReplicaCountingMode(DistributorConfiguration::DistributorManagerConfig::MinimumReplicaCountingMode mode) { + switch (mode) { + case vespa::config::content::core::internal::InternalStorDistributormanagerType::MinimumReplicaCountingMode::TRUSTED: + return ReplicaCountingMode::TRUSTED; + default: + return ReplicaCountingMode::ANY; + } +} + +} void -DistributorConfiguration::configure(const vespa::config::content::core::StorDistributormanagerConfig& config) +DistributorConfiguration::configure(const DistributorManagerConfig & config) { if ((config.splitsize != 0 && config.joinsize > config.splitsize) || (config.splitcount != 0 && config.joincount > config.splitcount)) @@ -143,11 +157,10 @@ DistributorConfiguration::configure(const vespa::config::content::core::StorDist _max_activation_inhibited_out_of_sync_groups = config.maxActivationInhibitedOutOfSyncGroups; _implicitly_clear_priority_on_schedule = config.implicitlyClearBucketPriorityOnSchedule; _use_unordered_merge_chaining = config.useUnorderedMergeChaining; - _inhibit_default_merges_when_global_merges_pending = config.inhibitDefaultMergesWhenGlobalMergesPending; _enable_two_phase_garbage_collection = config.enableTwoPhaseGarbageCollection; _enable_condition_probing = config.enableConditionProbing; _enable_operation_cancellation = config.enableOperationCancellation; - _minimumReplicaCountingMode = config.minimumReplicaCountingMode; + _minimumReplicaCountingMode = deriveReplicaCountingMode(config.minimumReplicaCountingMode); if (config.maxClusterClockSkewSec >= 0) { _maxClusterClockSkew = std::chrono::seconds(config.maxClusterClockSkewSec); @@ -174,7 +187,7 @@ DistributorConfiguration::configure(const vespa::config::content::core::StorDist } void -DistributorConfiguration::configure(const vespa::config::content::core::StorVisitordispatcherConfig& config) +DistributorConfiguration::configure(const VisitorDispatcherConfig & config) { _minBucketsPerVisitor = config.minbucketspervisitor; _maxVisitorsPerNodePerClientVisitor = config.maxvisitorspernodeperclientvisitor; diff --git a/storage/src/vespa/storage/config/distributorconfiguration.h b/storage/src/vespa/storage/config/distributorconfiguration.h index 178a966a2a7..767fe29b5c6 100644 --- a/storage/src/vespa/storage/config/distributorconfiguration.h +++ b/storage/src/vespa/storage/config/distributorconfiguration.h @@ -1,12 +1,15 @@ // Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. #pragma once -#include <vespa/storage/config/config-stor-distributormanager.h> -#include <vespa/storage/config/config-stor-visitordispatcher.h> -#include <vespa/vespalib/stllike/hash_set.h> +#include "replica_counting_mode.h" #include <vespa/storage/common/storagecomponent.h> #include <vespa/vespalib/util/time.h> +namespace vespa::config::content::core::internal { + class InternalStorDistributormanagerType; + class InternalStorVisitordispatcherType; +} + namespace storage { class DistributorConfiguration { @@ -30,12 +33,11 @@ public: uint8_t splitInconsistentBucket {110}; uint8_t garbageCollection {200}; }; + using DistributorManagerConfig = vespa::config::content::core::internal::InternalStorDistributormanagerType; + using VisitorDispatcherConfig = vespa::config::content::core::internal::InternalStorVisitordispatcherType; - using DistrConfig = vespa::config::content::core::StorDistributormanagerConfig; - - void configure(const DistrConfig& config); - void configure(const vespa::config::content::core::StorVisitordispatcherConfig& config); - + void configure(const DistributorManagerConfig& config); + void configure(const VisitorDispatcherConfig& config); const std::string& getGarbageCollectionSelection() const { return _garbageCollectionSelection; @@ -165,8 +167,6 @@ public: return _enableInconsistentJoin; } - using ReplicaCountingMode = DistrConfig::MinimumReplicaCountingMode; - ReplicaCountingMode getMinimumReplicaCountingMode() const noexcept { return _minimumReplicaCountingMode; } @@ -240,9 +240,6 @@ public: return _use_unordered_merge_chaining; } - [[nodiscard]] bool inhibit_default_merges_when_global_merges_pending() const noexcept { - return _inhibit_default_merges_when_global_merges_pending; - } void set_enable_two_phase_garbage_collection(bool enable) noexcept { _enable_two_phase_garbage_collection = enable; } @@ -303,12 +300,11 @@ private: bool _enable_metadata_only_fetch_phase_for_inconsistent_updates; bool _implicitly_clear_priority_on_schedule; bool _use_unordered_merge_chaining; - bool _inhibit_default_merges_when_global_merges_pending; bool _enable_two_phase_garbage_collection; bool _enable_condition_probing; bool _enable_operation_cancellation; - DistrConfig::MinimumReplicaCountingMode _minimumReplicaCountingMode; + ReplicaCountingMode _minimumReplicaCountingMode; }; } diff --git a/storage/src/vespa/storage/config/replica_counting_mode.h b/storage/src/vespa/storage/config/replica_counting_mode.h new file mode 100644 index 00000000000..3cb5839a4c6 --- /dev/null +++ b/storage/src/vespa/storage/config/replica_counting_mode.h @@ -0,0 +1,9 @@ +// Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. + +#pragma once + +namespace storage { + +enum class ReplicaCountingMode { TRUSTED, ANY }; + +} diff --git a/storage/src/vespa/storage/config/stor-distributormanager.def b/storage/src/vespa/storage/config/stor-distributormanager.def index 2ff058e2a1b..023ed543e3c 100644 --- a/storage/src/vespa/storage/config/stor-distributormanager.def +++ b/storage/src/vespa/storage/config/stor-distributormanager.def @@ -190,12 +190,6 @@ implicitly_clear_bucket_priority_on_schedule bool default=true ## that they support the unordered merge feature. use_unordered_merge_chaining bool default=true -## If true, inhibits _all_ merges to buckets in the default bucket space if the current -## cluster state bundle indicates that global merges are pending in the cluster, i.e. -## one or more nodes is in maintenance mode in the default bucket space but marked up in -## the global bucket space. -inhibit_default_merges_when_global_merges_pending bool default=true - ## If true, garbage collection is performed in two phases (metadata gathering and deletion) ## instead of just a single phase. Two-phase GC allows for ensuring the same set of documents ## is deleted across all nodes and explicitly takes write locks on the distributor to prevent diff --git a/storage/src/vespa/storage/distributor/bucketdb/bucketdbmetricupdater.h b/storage/src/vespa/storage/distributor/bucketdb/bucketdbmetricupdater.h index 608b0ef96c4..abbb6db34b0 100644 --- a/storage/src/vespa/storage/distributor/bucketdb/bucketdbmetricupdater.h +++ b/storage/src/vespa/storage/distributor/bucketdb/bucketdbmetricupdater.h @@ -4,7 +4,7 @@ #include <vespa/storage/distributor/min_replica_provider.h> #include <vespa/storage/bucketdb/bucketdatabase.h> -#include <vespa/storage/config/config-stor-distributormanager.h> +#include <vespa/storage/config/replica_counting_mode.h> #include <vespa/vespalib/util/memoryusage.h> #include <vespa/vespalib/stllike/hash_map.h> @@ -57,8 +57,6 @@ public: void propagateMetrics(IdealStateMetricSet&, DistributorMetricSet&) const; }; - using ReplicaCountingMode = vespa::config::content::core::StorDistributormanagerConfig::MinimumReplicaCountingMode; - private: Stats _workingStats; Stats _lastCompleteStats; diff --git a/storage/src/vespa/storage/distributor/distributor_stripe.cpp b/storage/src/vespa/storage/distributor/distributor_stripe.cpp index 4f84785ccae..04586340a67 100644 --- a/storage/src/vespa/storage/distributor/distributor_stripe.cpp +++ b/storage/src/vespa/storage/distributor/distributor_stripe.cpp @@ -18,6 +18,7 @@ #include <vespa/storage/distributor/maintenance/simplebucketprioritydatabase.h> #include <vespa/storage/distributor/operations/cancel_scope.h> #include <vespa/storage/distributor/operations/idealstate/garbagecollectionoperation.h> +#include <vespa/storage/config/distributorconfiguration.h> #include <vespa/storageframework/generic/status/xmlstatusreporter.h> #include <vespa/vdslib/distribution/distribution.h> #include <vespa/vespalib/util/memoryusage.h> diff --git a/storage/src/vespa/storage/distributor/distributor_stripe_component.cpp b/storage/src/vespa/storage/distributor/distributor_stripe_component.cpp index d5ac5470bec..858e6496890 100644 --- a/storage/src/vespa/storage/distributor/distributor_stripe_component.cpp +++ b/storage/src/vespa/storage/distributor/distributor_stripe_component.cpp @@ -5,6 +5,7 @@ #include "distributor_bucket_space.h" #include "pendingmessagetracker.h" #include "storage_node_up_states.h" +#include <vespa/storage/config/distributorconfiguration.h> #include <vespa/storage/storageutil/utils.h> #include <vespa/storageframework/generic/clock/clock.h> #include <vespa/document/select/parser.h> diff --git a/storage/src/vespa/storage/distributor/externaloperationhandler.cpp b/storage/src/vespa/storage/distributor/externaloperationhandler.cpp index dba067600a0..5e0f2b2bc45 100644 --- a/storage/src/vespa/storage/distributor/externaloperationhandler.cpp +++ b/storage/src/vespa/storage/distributor/externaloperationhandler.cpp @@ -18,6 +18,7 @@ #include <vespa/storage/distributor/operations/external/statbucketoperation.h> #include <vespa/storage/distributor/operations/external/twophaseupdateoperation.h> #include <vespa/storage/distributor/operations/external/visitoroperation.h> +#include <vespa/storage/config/distributorconfiguration.h> #include <vespa/storageapi/message/persistence.h> #include <vespa/storageapi/message/removelocation.h> #include <vespa/storageapi/message/stat.h> diff --git a/storage/src/vespa/storage/distributor/operations/external/check_condition.cpp b/storage/src/vespa/storage/distributor/operations/external/check_condition.cpp index abbdbe691c0..76603df87c1 100644 --- a/storage/src/vespa/storage/distributor/operations/external/check_condition.cpp +++ b/storage/src/vespa/storage/distributor/operations/external/check_condition.cpp @@ -7,6 +7,7 @@ #include <vespa/storage/distributor/distributor_node_context.h> #include <vespa/storage/distributor/distributor_stripe_operation_context.h> #include <vespa/storage/distributor/node_supported_features_repo.h> +#include <vespa/storage/config/distributorconfiguration.h> #include <vespa/vdslib/state/clusterstate.h> #include <vespa/storageapi/message/persistence.h> #include <cassert> diff --git a/storage/src/vespa/storage/distributor/operations/external/putoperation.cpp b/storage/src/vespa/storage/distributor/operations/external/putoperation.cpp index 241d25a06a5..54087850e1b 100644 --- a/storage/src/vespa/storage/distributor/operations/external/putoperation.cpp +++ b/storage/src/vespa/storage/distributor/operations/external/putoperation.cpp @@ -8,6 +8,7 @@ #include <vespa/storage/distributor/operationtargetresolverimpl.h> #include <vespa/storage/distributor/pendingmessagetracker.h> #include <vespa/storage/distributor/storage_node_up_states.h> +#include <vespa/storage/config/distributorconfiguration.h> #include <vespa/storageapi/message/persistence.h> #include <vespa/vdslib/distribution/distribution.h> #include <vespa/vdslib/state/clusterstate.h> diff --git a/storage/src/vespa/storage/distributor/operations/external/twophaseupdateoperation.cpp b/storage/src/vespa/storage/distributor/operations/external/twophaseupdateoperation.cpp index 4959bacc5cc..ef004fc34b8 100644 --- a/storage/src/vespa/storage/distributor/operations/external/twophaseupdateoperation.cpp +++ b/storage/src/vespa/storage/distributor/operations/external/twophaseupdateoperation.cpp @@ -11,6 +11,7 @@ #include <vespa/document/select/parser.h> #include <vespa/storage/distributor/distributor_bucket_space.h> #include <vespa/storage/distributor/distributor_bucket_space_repo.h> +#include <vespa/storage/config/distributorconfiguration.h> #include <vespa/storageapi/message/persistence.h> #include <vespa/vdslib/state/cluster_state_bundle.h> #include <vespa/vespalib/stllike/hash_set.hpp> diff --git a/storage/src/vespa/storage/distributor/operations/idealstate/garbagecollectionoperation.cpp b/storage/src/vespa/storage/distributor/operations/idealstate/garbagecollectionoperation.cpp index 6b2a0bd23db..cf23067748f 100644 --- a/storage/src/vespa/storage/distributor/operations/idealstate/garbagecollectionoperation.cpp +++ b/storage/src/vespa/storage/distributor/operations/idealstate/garbagecollectionoperation.cpp @@ -7,6 +7,7 @@ #include <vespa/storage/distributor/top_level_distributor.h> #include <vespa/storage/distributor/distributor_bucket_space.h> #include <vespa/storage/distributor/node_supported_features_repo.h> +#include <vespa/storage/config/distributorconfiguration.h> #include <vespa/storageapi/message/removelocation.h> #include <vespa/vespalib/stllike/hash_map.hpp> #include <algorithm> diff --git a/storage/src/vespa/storage/distributor/operations/idealstate/mergeoperation.cpp b/storage/src/vespa/storage/distributor/operations/idealstate/mergeoperation.cpp index 68f305fe94e..0eece641816 100644 --- a/storage/src/vespa/storage/distributor/operations/idealstate/mergeoperation.cpp +++ b/storage/src/vespa/storage/distributor/operations/idealstate/mergeoperation.cpp @@ -6,6 +6,7 @@ #include <vespa/storage/distributor/distributor_bucket_space.h> #include <vespa/storage/distributor/node_supported_features_repo.h> #include <vespa/storage/distributor/pendingmessagetracker.h> +#include <vespa/storage/config/distributorconfiguration.h> #include <vespa/storageframework/generic/clock/clock.h> #include <vespa/vdslib/distribution/distribution.h> #include <vespa/vdslib/state/clusterstate.h> diff --git a/storage/src/vespa/storage/distributor/pendingclusterstate.h b/storage/src/vespa/storage/distributor/pendingclusterstate.h index 9a001aa0793..f75ebdc5ba3 100644 --- a/storage/src/vespa/storage/distributor/pendingclusterstate.h +++ b/storage/src/vespa/storage/distributor/pendingclusterstate.h @@ -4,13 +4,12 @@ #include "node_supported_features.h" #include "pending_bucket_space_db_transition_entry.h" #include "clusterinformation.h" +#include "outdated_nodes_map.h" #include <vespa/storageapi/message/bucket.h> #include <vespa/storageapi/message/state.h> #include <vespa/vdslib/state/cluster_state_bundle.h> #include <vespa/vespalib/util/xmlserializable.h> #include <vespa/vespalib/stllike/hash_map.h> -#include "outdated_nodes_map.h" -#include <unordered_map> #include <deque> namespace storage::framework { struct Clock; } diff --git a/storage/src/vespa/storage/distributor/statechecker.cpp b/storage/src/vespa/storage/distributor/statechecker.cpp index 90af3007e1c..82713540de7 100644 --- a/storage/src/vespa/storage/distributor/statechecker.cpp +++ b/storage/src/vespa/storage/distributor/statechecker.cpp @@ -2,6 +2,7 @@ #include "statechecker.h" #include "distributor_bucket_space.h" #include "distributor_stripe_component.h" +#include <vespa/storage/config/distributorconfiguration.h> #include <vespa/vdslib/distribution/distribution.h> #include <vespa/vdslib/state/clusterstate.h> #include <sstream> diff --git a/storage/src/vespa/storage/distributor/statecheckers.cpp b/storage/src/vespa/storage/distributor/statecheckers.cpp index 86790a2ddb7..562cbe3dc3e 100644 --- a/storage/src/vespa/storage/distributor/statecheckers.cpp +++ b/storage/src/vespa/storage/distributor/statecheckers.cpp @@ -10,6 +10,7 @@ #include <vespa/storage/distributor/operations/idealstate/setbucketstateoperation.h> #include <vespa/storage/distributor/operations/idealstate/mergeoperation.h> #include <vespa/storage/distributor/operations/idealstate/garbagecollectionoperation.h> +#include <vespa/storage/config/distributorconfiguration.h> #include <vespa/storageframework/generic/clock/clock.h> #include <vespa/vdslib/distribution/distribution.h> #include <vespa/vdslib/state/clusterstate.h> @@ -159,12 +160,8 @@ equalNodeSet(ConstNodesRef idealState, const BucketDatabase::Entry& dbEntry) } // Note: no assumptions are made on the ordering of the elements in // either vector. - for (uint16_t node : idealState) { - if (!dbEntry->getNode(node)) { - return false; - } - } - return true; + return std::all_of(idealState.cbegin(), idealState.cend(), + [&dbEntry](uint16_t node) { return dbEntry->getNode(node); }); } bool @@ -770,9 +767,7 @@ allCopiesAreInvalid(const StateChecker::Context& c) bool merging_effectively_disabled_for_state_checker(const StateChecker::Context& c) noexcept { - return (c.distributorConfig.merge_operations_disabled() - || (c.distributorConfig.inhibit_default_merges_when_global_merges_pending() - && c.merges_inhibited_in_bucket_space)); + return c.distributorConfig.merge_operations_disabled() || c.merges_inhibited_in_bucket_space; } } diff --git a/storage/src/vespa/storage/distributor/top_level_bucket_db_updater.cpp b/storage/src/vespa/storage/distributor/top_level_bucket_db_updater.cpp index ae7df537405..1f7d11362e2 100644 --- a/storage/src/vespa/storage/distributor/top_level_bucket_db_updater.cpp +++ b/storage/src/vespa/storage/distributor/top_level_bucket_db_updater.cpp @@ -12,6 +12,7 @@ #include "stripe_access_guard.h" #include <vespa/document/bucket/fixed_bucket_spaces.h> #include <vespa/storage/common/global_bucket_space_distribution_converter.h> +#include <vespa/storage/config/distributorconfiguration.h> #include <vespa/storageapi/message/persistence.h> #include <vespa/storageapi/message/removelocation.h> #include <vespa/vdslib/distribution/distribution.h> diff --git a/storage/src/vespa/storage/distributor/top_level_distributor.cpp b/storage/src/vespa/storage/distributor/top_level_distributor.cpp index aa02ec9b7d3..7348dbd6409 100644 --- a/storage/src/vespa/storage/distributor/top_level_distributor.cpp +++ b/storage/src/vespa/storage/distributor/top_level_distributor.cpp @@ -21,6 +21,7 @@ #include <vespa/storage/common/node_identity.h> #include <vespa/storage/common/nodestateupdater.h> #include <vespa/storage/config/distributorconfiguration.h> +#include <vespa/storage/config/config-stor-distributormanager.h> #include <vespa/storageapi/message/persistence.h> #include <vespa/storageapi/message/visitor.h> #include <vespa/storageframework/generic/status/xmlstatusreporter.h> diff --git a/storage/src/vespa/storage/frameworkimpl/component/distributorcomponentregisterimpl.cpp b/storage/src/vespa/storage/frameworkimpl/component/distributorcomponentregisterimpl.cpp index 163a2280161..d2246e2d6d0 100644 --- a/storage/src/vespa/storage/frameworkimpl/component/distributorcomponentregisterimpl.cpp +++ b/storage/src/vespa/storage/frameworkimpl/component/distributorcomponentregisterimpl.cpp @@ -3,11 +3,15 @@ #include <vespa/vespalib/util/exceptions.h> #include <vespa/vdslib/state/cluster_state_bundle.h> #include <vespa/vdslib/state/clusterstate.h> +#include <vespa/storage/config/config-stor-distributormanager.h> +#include <vespa/storage/config/config-stor-visitordispatcher.h> namespace storage { DistributorComponentRegisterImpl::DistributorComponentRegisterImpl() - : _timeCalculator(0), + : _timeCalculator(nullptr), + _distributorConfig(std::make_unique<DistributorManagerConfig>()), + _visitorConfig(std::make_unique<VisitorDispatcherConfig>()), _clusterState(std::make_shared<lib::ClusterState>()) { } @@ -26,45 +30,43 @@ DistributorComponentRegisterImpl::registerDistributorComponent(DistributorManage { std::lock_guard lock(_componentLock); _components.push_back(&smc); - if (_timeCalculator != 0) { + if (_timeCalculator != nullptr) { smc.setTimeCalculator(*_timeCalculator); } - smc.setDistributorConfig(_distributorConfig); - smc.setVisitorConfig(_visitorConfig); + smc.setDistributorConfig(*_distributorConfig); + smc.setVisitorConfig(*_visitorConfig); } void DistributorComponentRegisterImpl::setTimeCalculator(UniqueTimeCalculator& utc) { std::lock_guard lock(_componentLock); - if (_timeCalculator != 0) { - throw vespalib::IllegalStateException( - "Time calculator already set. Cannot be updated live", - VESPA_STRLOC); + if (_timeCalculator != nullptr) { + throw vespalib::IllegalStateException("Time calculator already set. Cannot be updated live", VESPA_STRLOC); } _timeCalculator = &utc; - for (uint32_t i=0; i<_components.size(); ++i) { - _components[i]->setTimeCalculator(*_timeCalculator); + for (auto & component : _components) { + component->setTimeCalculator(*_timeCalculator); } } void -DistributorComponentRegisterImpl::setDistributorConfig(const DistributorConfig& c) +DistributorComponentRegisterImpl::setDistributorConfig(const DistributorManagerConfig& cfg) { std::lock_guard lock(_componentLock); - _distributorConfig = c; - for (uint32_t i=0; i<_components.size(); ++i) { - _components[i]->setDistributorConfig(c); + _distributorConfig = std::make_unique<DistributorManagerConfig>(cfg); + for (auto & component : _components) { + component->setDistributorConfig(cfg); } } void -DistributorComponentRegisterImpl::setVisitorConfig(const VisitorConfig& c) +DistributorComponentRegisterImpl::setVisitorConfig(const VisitorDispatcherConfig& cfg) { std::lock_guard lock(_componentLock); - _visitorConfig = c; - for (uint32_t i=0; i<_components.size(); ++i) { - _components[i]->setVisitorConfig(c); + _visitorConfig = std::make_unique<VisitorDispatcherConfig>(cfg); + for (auto & component : _components) { + component->setVisitorConfig(cfg); } } diff --git a/storage/src/vespa/storage/frameworkimpl/component/distributorcomponentregisterimpl.h b/storage/src/vespa/storage/frameworkimpl/component/distributorcomponentregisterimpl.h index 4ea96ccd97e..7e89e4e521f 100644 --- a/storage/src/vespa/storage/frameworkimpl/component/distributorcomponentregisterimpl.h +++ b/storage/src/vespa/storage/frameworkimpl/component/distributorcomponentregisterimpl.h @@ -12,7 +12,6 @@ #include <vespa/storage/common/nodestateupdater.h> namespace storage::lib { - class IdealNodeCalculatorConfigurable; class ClusterState; } @@ -27,8 +26,8 @@ class DistributorComponentRegisterImpl std::vector<DistributorManagedComponent*> _components; UniqueTimeCalculator* _timeCalculator; - DistributorConfig _distributorConfig; - VisitorConfig _visitorConfig; + std::unique_ptr<DistributorManagerConfig> _distributorConfig; + std::unique_ptr<VisitorDispatcherConfig> _visitorConfig; std::shared_ptr<lib::ClusterState> _clusterState; public: @@ -39,8 +38,8 @@ public: void registerDistributorComponent(DistributorManagedComponent&) override; void setTimeCalculator(UniqueTimeCalculator& calc); - void setDistributorConfig(const DistributorConfig&); - void setVisitorConfig(const VisitorConfig&); + void setDistributorConfig(const DistributorManagerConfig&); + void setVisitorConfig(const VisitorDispatcherConfig&); private: void handleNewState() noexcept override; void setNodeStateUpdater(NodeStateUpdater& updater) override; diff --git a/storage/src/vespa/storage/storageserver/distributornode.cpp b/storage/src/vespa/storage/storageserver/distributornode.cpp index 10ee8023621..3d0702e2d3f 100644 --- a/storage/src/vespa/storage/storageserver/distributornode.cpp +++ b/storage/src/vespa/storage/storageserver/distributornode.cpp @@ -67,14 +67,14 @@ DistributorNode::initializeNodeSpecific() } void -DistributorNode::handleConfigChange(vespa::config::content::core::StorDistributormanagerConfig& c) +DistributorNode::handleConfigChange(DistributorManagerConfig & c) { framework::TickingLockGuard guard(_threadPool->freezeAllTicks()); _context.getComponentRegister().setDistributorConfig(c); } void -DistributorNode::handleConfigChange(vespa::config::content::core::StorVisitordispatcherConfig& c) +DistributorNode::handleConfigChange(VisitorDispatcherConfig & c) { framework::TickingLockGuard guard(_threadPool->freezeAllTicks()); _context.getComponentRegister().setVisitorConfig(c); diff --git a/storage/src/vespa/storage/storageserver/distributornode.h b/storage/src/vespa/storage/storageserver/distributornode.h index 7870af95a0f..d8c237e5d42 100644 --- a/storage/src/vespa/storage/storageserver/distributornode.h +++ b/storage/src/vespa/storage/storageserver/distributornode.h @@ -52,8 +52,8 @@ public: const lib::NodeType& getNodeType() const override { return lib::NodeType::DISTRIBUTOR; } ResumeGuard pause() override; - void handleConfigChange(vespa::config::content::core::StorDistributormanagerConfig&); - void handleConfigChange(vespa::config::content::core::StorVisitordispatcherConfig&); + void handleConfigChange(DistributorManagerConfig &); + void handleConfigChange(VisitorDispatcherConfig&); private: void report(vespalib::JsonStream &) const override { /* no-op */ } |