diff options
author | Geir Storli <geirst@verizonmedia.com> | 2021-06-29 12:25:39 +0000 |
---|---|---|
committer | Geir Storli <geirst@verizonmedia.com> | 2021-06-29 12:25:39 +0000 |
commit | e93fd293c36487192d66604a6f52d68596ff4341 (patch) | |
tree | 88acc534a9ef0947fa580fd9252306cc5800c38e /storage/src | |
parent | 632e96763ce3850a5d99186d5ad1bf7c28c31c9e (diff) |
Migrate distributor stripe unit tests that configures using config builder.
Diffstat (limited to 'storage/src')
-rw-r--r-- | storage/src/tests/distributor/distributor_stripe_test.cpp | 111 | ||||
-rw-r--r-- | storage/src/tests/distributor/legacy_distributor_test.cpp | 10 |
2 files changed, 116 insertions, 5 deletions
diff --git a/storage/src/tests/distributor/distributor_stripe_test.cpp b/storage/src/tests/distributor/distributor_stripe_test.cpp index 764702dc675..22d4192fffd 100644 --- a/storage/src/tests/distributor/distributor_stripe_test.cpp +++ b/storage/src/tests/distributor/distributor_stripe_test.cpp @@ -131,6 +131,15 @@ struct DistributorStripeTest : Test, DistributorStripeTestUtil { return _stripe->getBucketSpacesStats(); } + bool stripe_handle_message(const std::shared_ptr<api::StorageMessage>& msg) { + // TODO: Avoid using private DistributorStripe functions + return _stripe->handleMessage(msg); + } + + void configureMaxClusterClockSkew(int seconds); + void configure_mutation_sequencing(bool enabled); + void configure_merge_busy_inhibit_duration(int seconds); + }; DistributorStripeTest::DistributorStripeTest() @@ -434,6 +443,15 @@ TEST_F(DistributorStripeTest, replica_counting_mode_is_configured_to_trusted_by_ EXPECT_EQ(ConfigBuilder::MinimumReplicaCountingMode::TRUSTED, currentReplicaCountingMode()); } +TEST_F(DistributorStripeTest, replica_counting_mode_config_is_propagated_to_metric_updater) +{ + setup_stripe(Redundancy(2), NodeCount(2), "storage:2 distributor:1"); + ConfigBuilder builder; + builder.minimumReplicaCountingMode = ConfigBuilder::MinimumReplicaCountingMode::ANY; + configure_stripe(builder); + EXPECT_EQ(ConfigBuilder::MinimumReplicaCountingMode::ANY, currentReplicaCountingMode()); +} + TEST_F(DistributorStripeTest, max_consecutively_inhibited_maintenance_ticks_config_is_propagated_to_internal_config) { setup_stripe(Redundancy(2), NodeCount(2), "storage:2 distributor:1"); @@ -462,6 +480,99 @@ TEST_F(DistributorStripeTest, bucket_activation_config_is_propagated_to_distribu EXPECT_TRUE(getConfig().isBucketActivationDisabled()); } +void +DistributorStripeTest::configureMaxClusterClockSkew(int seconds) +{ + ConfigBuilder builder; + builder.maxClusterClockSkewSec = seconds; + configure_stripe(builder); +} + +TEST_F(DistributorStripeTest, max_clock_skew_config_is_propagated_to_distributor_config) +{ + setup_stripe(Redundancy(2), NodeCount(2), "storage:2 distributor:1"); + + configureMaxClusterClockSkew(5); + EXPECT_EQ(getConfig().getMaxClusterClockSkew(), std::chrono::seconds(5)); +} + +namespace { + +auto makeDummyRemoveCommand() { + return std::make_shared<api::RemoveCommand>( + makeDocumentBucket(document::BucketId(0)), + document::DocumentId("id:foo:testdoctype1:n=1:foo"), + api::Timestamp(0)); +} + +} + +void +DistributorStripeTest::configure_mutation_sequencing(bool enabled) +{ + ConfigBuilder builder; + builder.sequenceMutatingOperations = enabled; + configure_stripe(builder); +} + +TEST_F(DistributorStripeTest, sequencing_config_is_propagated_to_distributor_config) +{ + setup_stripe(Redundancy(2), NodeCount(2), "storage:2 distributor:1"); + + // Should be enabled by default + EXPECT_TRUE(getConfig().getSequenceMutatingOperations()); + + // Explicitly disabled. + configure_mutation_sequencing(false); + EXPECT_FALSE(getConfig().getSequenceMutatingOperations()); + + // Explicitly enabled. + configure_mutation_sequencing(true); + EXPECT_TRUE(getConfig().getSequenceMutatingOperations()); +} + +void +DistributorStripeTest::configure_merge_busy_inhibit_duration(int seconds) +{ + ConfigBuilder builder; + builder.inhibitMergeSendingOnBusyNodeDurationSec = seconds; + configure_stripe(builder); +} + +TEST_F(DistributorStripeTest, merge_busy_inhibit_duration_config_is_propagated_to_distributor_config) +{ + setup_stripe(Redundancy(2), NodeCount(2), "storage:2 distributor:1"); + + configure_merge_busy_inhibit_duration(7); + EXPECT_EQ(getConfig().getInhibitMergesOnBusyNodeDuration(), std::chrono::seconds(7)); +} + +TEST_F(DistributorStripeTest, merge_busy_inhibit_duration_is_propagated_to_pending_message_tracker) +{ + setup_stripe(Redundancy(2), NodeCount(2), "storage:1 distributor:1"); + addNodesToBucketDB(document::BucketId(16, 1), "0=1/1/1/t"); + + configure_merge_busy_inhibit_duration(100); + auto cmd = makeDummyRemoveCommand(); // Remove is for bucket 1 + stripe_handle_message(cmd); + + // Should send to content node 0 + ASSERT_EQ(1, _sender.commands().size()); + ASSERT_EQ(api::MessageType::REMOVE, _sender.command(0)->getType()); + auto& fwd_cmd = dynamic_cast<api::RemoveCommand&>(*_sender.command(0)); + auto reply = fwd_cmd.makeReply(); + reply->setResult(api::ReturnCode(api::ReturnCode::BUSY)); + _stripe->handleReply(std::shared_ptr<api::StorageReply>(std::move(reply))); + + auto& node_info = pending_message_tracker().getNodeInfo(); + + EXPECT_TRUE(node_info.isBusy(0)); + getClock().addSecondsToTime(99); + EXPECT_TRUE(node_info.isBusy(0)); + getClock().addSecondsToTime(2); + EXPECT_FALSE(node_info.isBusy(0)); +} + TEST_F(DistributorStripeTest, external_client_requests_are_handled_individually_in_priority_order) { setup_stripe(Redundancy(1), NodeCount(1), "storage:1 distributor:1"); diff --git a/storage/src/tests/distributor/legacy_distributor_test.cpp b/storage/src/tests/distributor/legacy_distributor_test.cpp index 9b748ae307f..4ed2cf6b2d9 100644 --- a/storage/src/tests/distributor/legacy_distributor_test.cpp +++ b/storage/src/tests/distributor/legacy_distributor_test.cpp @@ -725,7 +725,7 @@ TEST_F(LegacyDistributorTest, replica_counting_mode_is_configured_to_trusted_by_ EXPECT_EQ(ConfigBuilder::MinimumReplicaCountingMode::TRUSTED, currentReplicaCountingMode()); } -// TODO STRIPE -> stripe test +// Migrated to DistributorStripeTest TEST_F(LegacyDistributorTest, replica_counting_mode_config_is_propagated_to_metric_updater) { setupDistributor(Redundancy(2), NodeCount(2), "storage:2 distributor:1"); ConfigBuilder builder; @@ -772,7 +772,7 @@ LegacyDistributorTest::configureMaxClusterClockSkew(int seconds) { _distributor->enableNextConfig(); } -// TODO STRIPE -> stripe test +// Migrated to DistributorStripeTest TEST_F(LegacyDistributorTest, max_clock_skew_config_is_propagated_to_distributor_config) { setupDistributor(Redundancy(2), NodeCount(2), "storage:2 distributor:1"); @@ -867,7 +867,7 @@ void LegacyDistributorTest::configure_mutation_sequencing(bool enabled) { _distributor->enableNextConfig(); } -// TODO STRIPE -> stripe test +// Migrated to DistributorStripeTest TEST_F(LegacyDistributorTest, sequencing_config_is_propagated_to_distributor_config) { setupDistributor(Redundancy(2), NodeCount(2), "storage:2 distributor:1"); @@ -893,7 +893,7 @@ LegacyDistributorTest::configure_merge_busy_inhibit_duration(int seconds) { _distributor->enableNextConfig(); } -// TODO STRIPE -> stripe test +// Migrated to DistributorStripeTest TEST_F(LegacyDistributorTest, merge_busy_inhibit_duration_config_is_propagated_to_distributor_config) { setupDistributor(Redundancy(2), NodeCount(2), "storage:2 distributor:1"); @@ -901,7 +901,7 @@ TEST_F(LegacyDistributorTest, merge_busy_inhibit_duration_config_is_propagated_t EXPECT_EQ(getConfig().getInhibitMergesOnBusyNodeDuration(), std::chrono::seconds(7)); } -// TODO STRIPE -> stripe test +// Migrated to DistributorStripeTest TEST_F(LegacyDistributorTest, merge_busy_inhibit_duration_is_propagated_to_pending_message_tracker) { setupDistributor(Redundancy(2), NodeCount(2), "storage:1 distributor:1"); addNodesToBucketDB(document::BucketId(16, 1), "0=1/1/1/t"); |