summaryrefslogtreecommitdiffstats
path: root/storage
diff options
context:
space:
mode:
authorGeir Storli <geirst@verizonmedia.com>2021-06-29 12:25:39 +0000
committerGeir Storli <geirst@verizonmedia.com>2021-06-29 12:25:39 +0000
commite93fd293c36487192d66604a6f52d68596ff4341 (patch)
tree88acc534a9ef0947fa580fd9252306cc5800c38e /storage
parent632e96763ce3850a5d99186d5ad1bf7c28c31c9e (diff)
Migrate distributor stripe unit tests that configures using config builder.
Diffstat (limited to 'storage')
-rw-r--r--storage/src/tests/distributor/distributor_stripe_test.cpp111
-rw-r--r--storage/src/tests/distributor/legacy_distributor_test.cpp10
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");