summaryrefslogtreecommitdiffstats
path: root/storage
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2024-02-02 15:43:30 +0100
committerGitHub <noreply@github.com>2024-02-02 15:43:30 +0100
commitaf60e161187b959ca6c5a8b227fb4681f3763203 (patch)
treef4ef7a662c12626c70bb721e4807de90ca9031a4 /storage
parent9b965b03623291c4a608dbf9a5bca8cc1ee3f193 (diff)
parentbe0ba3bac9cb28e34d2f9476422c23d37a4772fd (diff)
Merge pull request #30142 from vespa-engine/balder/always-inhibit_default_merges_when_global_merges_pending
- Always inhibit_default_merges_when_global_merges_pending
Diffstat (limited to 'storage')
-rw-r--r--storage/src/tests/common/teststorageapp.cpp2
-rw-r--r--storage/src/tests/common/teststorageapp.h2
-rw-r--r--storage/src/tests/distributor/bucketdbmetricupdatertest.cpp6
-rw-r--r--storage/src/tests/distributor/distributor_stripe_test.cpp21
-rw-r--r--storage/src/tests/distributor/distributor_stripe_test_util.cpp2
-rw-r--r--storage/src/tests/distributor/distributor_stripe_test_util.h12
-rw-r--r--storage/src/tests/distributor/externaloperationhandlertest.cpp1
-rw-r--r--storage/src/tests/distributor/garbagecollectiontest.cpp1
-rw-r--r--storage/src/tests/distributor/joinbuckettest.cpp1
-rw-r--r--storage/src/tests/distributor/mergeoperationtest.cpp1
-rw-r--r--storage/src/tests/distributor/putoperationtest.cpp1
-rw-r--r--storage/src/tests/distributor/splitbuckettest.cpp1
-rw-r--r--storage/src/tests/distributor/statecheckerstest.cpp38
-rw-r--r--storage/src/tests/distributor/statoperationtest.cpp1
-rw-r--r--storage/src/tests/distributor/top_level_distributor_test.cpp1
-rw-r--r--storage/src/tests/distributor/top_level_distributor_test_util.cpp4
-rw-r--r--storage/src/tests/distributor/top_level_distributor_test_util.h4
-rw-r--r--storage/src/tests/distributor/twophaseupdateoperationtest.cpp1
-rw-r--r--storage/src/vespa/storage/common/distributorcomponent.cpp28
-rw-r--r--storage/src/vespa/storage/common/distributorcomponent.h47
-rw-r--r--storage/src/vespa/storage/config/distributorconfiguration.cpp23
-rw-r--r--storage/src/vespa/storage/config/distributorconfiguration.h26
-rw-r--r--storage/src/vespa/storage/config/replica_counting_mode.h9
-rw-r--r--storage/src/vespa/storage/config/stor-distributormanager.def6
-rw-r--r--storage/src/vespa/storage/distributor/bucketdb/bucketdbmetricupdater.h4
-rw-r--r--storage/src/vespa/storage/distributor/distributor_stripe.cpp1
-rw-r--r--storage/src/vespa/storage/distributor/distributor_stripe_component.cpp1
-rw-r--r--storage/src/vespa/storage/distributor/externaloperationhandler.cpp1
-rw-r--r--storage/src/vespa/storage/distributor/operations/external/check_condition.cpp1
-rw-r--r--storage/src/vespa/storage/distributor/operations/external/putoperation.cpp1
-rw-r--r--storage/src/vespa/storage/distributor/operations/external/twophaseupdateoperation.cpp1
-rw-r--r--storage/src/vespa/storage/distributor/operations/idealstate/garbagecollectionoperation.cpp1
-rw-r--r--storage/src/vespa/storage/distributor/operations/idealstate/mergeoperation.cpp1
-rw-r--r--storage/src/vespa/storage/distributor/pendingclusterstate.h3
-rw-r--r--storage/src/vespa/storage/distributor/statechecker.cpp1
-rw-r--r--storage/src/vespa/storage/distributor/statecheckers.cpp13
-rw-r--r--storage/src/vespa/storage/distributor/top_level_bucket_db_updater.cpp1
-rw-r--r--storage/src/vespa/storage/distributor/top_level_distributor.cpp1
-rw-r--r--storage/src/vespa/storage/frameworkimpl/component/distributorcomponentregisterimpl.cpp38
-rw-r--r--storage/src/vespa/storage/frameworkimpl/component/distributorcomponentregisterimpl.h9
-rw-r--r--storage/src/vespa/storage/storageserver/distributornode.cpp4
-rw-r--r--storage/src/vespa/storage/storageserver/distributornode.h4
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 5ae19088bfb..fb67ccde3ba 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();
@@ -582,7 +584,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)
@@ -591,7 +593,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)
@@ -638,19 +640,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 443dcc32174..e386ac3583c 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>
@@ -44,7 +46,6 @@ DistributorConfiguration::DistributorConfiguration(StorageComponent& component)
_use_weak_internal_read_consistency_for_client_gets(false),
_enable_metadata_only_fetch_phase_for_inconsistent_updates(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),
@@ -90,8 +91,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))
@@ -141,11 +155,10 @@ DistributorConfiguration::configure(const vespa::config::content::core::StorDist
_enable_metadata_only_fetch_phase_for_inconsistent_updates = config.enableMetadataOnlyFetchPhaseForInconsistentUpdates;
_max_activation_inhibited_out_of_sync_groups = config.maxActivationInhibitedOutOfSyncGroups;
_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);
@@ -172,7 +185,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 5b1e1c0af4c..4f561f7df5a 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;
}
@@ -237,9 +237,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;
}
@@ -299,12 +296,11 @@ private:
bool _use_weak_internal_read_consistency_for_client_gets;
bool _enable_metadata_only_fetch_phase_for_inconsistent_updates;
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 cf6e65c13bb..06faf96a286 100644
--- a/storage/src/vespa/storage/config/stor-distributormanager.def
+++ b/storage/src/vespa/storage/config/stor-distributormanager.def
@@ -184,12 +184,6 @@ num_distributor_stripes int default=0 restart
## 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 4ddb4056232..c00ab7080da 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 */ }