diff options
author | Tor Egge <Tor.Egge@oath.com> | 2018-03-22 14:05:31 +0000 |
---|---|---|
committer | Tor Egge <Tor.Egge@oath.com> | 2018-03-22 14:05:31 +0000 |
commit | 3cac0e5276c9fb7006e1752baa2d5cb716eae693 (patch) | |
tree | c2442204497a5f836fe17378c6bc91d891bb1155 /storage/src/tests/storageserver | |
parent | 53b11524f83b30d11a5c6d690a60ab34fdac1804 (diff) |
Make Bouncer BucketSpace aware.
Diffstat (limited to 'storage/src/tests/storageserver')
-rw-r--r-- | storage/src/tests/storageserver/bouncertest.cpp | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/storage/src/tests/storageserver/bouncertest.cpp b/storage/src/tests/storageserver/bouncertest.cpp index 43683132bc9..f8c80773a2e 100644 --- a/storage/src/tests/storageserver/bouncertest.cpp +++ b/storage/src/tests/storageserver/bouncertest.cpp @@ -9,6 +9,7 @@ #include <tests/common/teststorageapp.h> #include <tests/common/testhelper.h> #include <tests/common/dummystoragelink.h> +#include <vespa/document/bucket/fixed_bucket_spaces.h> #include <vespa/document/test/make_document_bucket.h> #include <vespa/storageapi/message/persistence.h> #include <vespa/config/common/exceptions.h> @@ -38,6 +39,7 @@ struct BouncerTest : public CppUnit::TestFixture { void readOnlyOperationsAreNotRejected(); void internalOperationsAreNotRejected(); void outOfBoundsConfigValuesThrowException(); + void abortOnlyOnDefaultBucketSpace(); CPPUNIT_TEST_SUITE(BouncerTest); CPPUNIT_TEST(testFutureTimestamp); @@ -50,6 +52,7 @@ struct BouncerTest : public CppUnit::TestFixture { CPPUNIT_TEST(readOnlyOperationsAreNotRejected); CPPUNIT_TEST(internalOperationsAreNotRejected); CPPUNIT_TEST(outOfBoundsConfigValuesThrowException); + CPPUNIT_TEST(abortOnlyOnDefaultBucketSpace); CPPUNIT_TEST_SUITE_END(); using Priority = api::StorageMessage::Priority; @@ -64,7 +67,12 @@ struct BouncerTest : public CppUnit::TestFixture { api::Timestamp timestamp, Priority priority = 0); + std::shared_ptr<api::StorageCommand> createDummyFeedMessage( + api::Timestamp timestamp, + document::BucketSpace bucketSpace); + void assertMessageBouncedWithRejection(); + void assertMessageBouncedWithAbort(); void assertMessageNotBounced(); }; @@ -120,6 +128,18 @@ BouncerTest::createDummyFeedMessage(api::Timestamp timestamp, return cmd; } +std::shared_ptr<api::StorageCommand> +BouncerTest::createDummyFeedMessage(api::Timestamp timestamp, + document::BucketSpace bucketSpace) +{ + auto cmd = std::make_shared<api::RemoveCommand>( + document::Bucket(bucketSpace, document::BucketId(0)), + document::DocumentId("doc:foo:bar"), + timestamp); + cmd->setPriority(Priority(0)); + return cmd; +} + void BouncerTest::testFutureTimestamp() { @@ -189,6 +209,17 @@ BouncerTest::assertMessageBouncedWithRejection() } void +BouncerTest::assertMessageBouncedWithAbort() +{ + CPPUNIT_ASSERT_EQUAL(size_t(1), _upper->getNumReplies()); + CPPUNIT_ASSERT_EQUAL(size_t(0), _upper->getNumCommands()); + CPPUNIT_ASSERT_EQUAL(api::ReturnCode::ABORTED, + static_cast<api::RemoveReply&>(*_upper->getReply(0)). + getResult().getResult()); + CPPUNIT_ASSERT_EQUAL(size_t(0), _lower->getNumCommands()); +} + +void BouncerTest::assertMessageNotBounced() { CPPUNIT_ASSERT_EQUAL(size_t(0), _upper->getNumReplies()); @@ -283,5 +314,32 @@ BouncerTest::outOfBoundsConfigValuesThrowException() } catch (config::InvalidConfigException) {} } + +namespace { + +std::shared_ptr<const lib::ClusterStateBundle> +makeClusterStateBundle(const vespalib::string &baselineState, const std::map<document::BucketSpace, vespalib::string> &derivedStates) +{ + lib::ClusterStateBundle::BucketSpaceStateMapping derivedBucketSpaceStates; + for (const auto &entry : derivedStates) { + derivedBucketSpaceStates[entry.first] = std::make_shared<const lib::ClusterState>(entry.second); + } + return std::make_shared<const lib::ClusterStateBundle>(lib::ClusterState(baselineState), std::move(derivedBucketSpaceStates)); +} + +} + +void +BouncerTest::abortOnlyOnDefaultBucketSpace() +{ + auto state = makeClusterStateBundle("distributor:3 storage:3", {{ document::FixedBucketSpaces::default_space(), "distributor:3 storage:3 .2.s:d" }}); + _node->getNodeStateUpdater().setClusterStateBundle(state); + _upper->sendDown(createDummyFeedMessage(11 * 1000000, document::FixedBucketSpaces::default_space())); + assertMessageBouncedWithAbort(); + _upper->reset(); + _upper->sendDown(createDummyFeedMessage(11 * 1000000, document::FixedBucketSpaces::global_space())); + assertMessageNotBounced(); +} + } // storage |