diff options
author | Geir Storli <geirst@oath.com> | 2017-11-21 12:17:50 +0000 |
---|---|---|
committer | Geir Storli <geirst@oath.com> | 2017-11-22 12:09:09 +0000 |
commit | 914820e8fb2aa280d839fe5a76849d8a21d2d791 (patch) | |
tree | 7070cdf6ed39f8d33648f36c16194d09811123f6 /storage | |
parent | 9f9e7e5f9b2b9b28c3bba4bdc2f185db7dc071da (diff) |
Add named bucket space to CreateVisitorMessage.
Diffstat (limited to 'storage')
4 files changed, 40 insertions, 3 deletions
diff --git a/storage/src/tests/storageserver/documentapiconvertertest.cpp b/storage/src/tests/storageserver/documentapiconvertertest.cpp index 7467bae0c41..f43f37714bc 100644 --- a/storage/src/tests/storageserver/documentapiconvertertest.cpp +++ b/storage/src/tests/storageserver/documentapiconvertertest.cpp @@ -30,7 +30,8 @@ using document::test::makeDocumentBucket; namespace storage { DocumentId defaultDocId("id:test:text/html::0"); -const Bucket defaultBucket(BucketSpace(5), BucketId(0)); +const BucketSpace defaultBucketSpace(5); +const Bucket defaultBucket(defaultBucketSpace, BucketId(0)); struct MockBucketResolver : public BucketResolver { virtual Bucket bucketFromId(const DocumentId &documentId) const override { @@ -39,6 +40,18 @@ struct MockBucketResolver : public BucketResolver { } return Bucket(BucketSpace(0), BucketId(0)); } + virtual BucketSpace bucketSpaceFromName(const vespalib::string &bucketSpace) const override { + if (bucketSpace == "myspace") { + return defaultBucketSpace; + } + return BucketSpace(0); + } + virtual vespalib::string nameFromBucketSpace(const document::BucketSpace &bucketSpace) const override { + if (bucketSpace == defaultBucketSpace) { + return "myspace"; + } + return ""; + } }; struct DocumentApiConverterTest : public CppUnit::TestFixture @@ -60,6 +73,15 @@ struct DocumentApiConverterTest : public CppUnit::TestFixture _converter.reset(new DocumentApiConverter("raw:", _bucketResolver)); }; + template <typename T> + std::unique_ptr<T> toDocumentAPI(api::StorageCommand &cmd) { + auto result = _converter->toDocumentAPI(cmd, _repo); + auto ptr = dynamic_cast<T*>(result.get()); + CPPUNIT_ASSERT(ptr); + result.release(); + return std::unique_ptr<T>(ptr); + } + void testPut(); void testForwardedPut(); void testUpdate(); @@ -214,9 +236,11 @@ void DocumentApiConverterTest::testGet() void DocumentApiConverterTest::testCreateVisitor() { documentapi::CreateVisitorMessage cv("mylib", "myinstance", "control-dest", "data-dest"); - + cv.setBucketSpace("myspace"); cv.setTimeRemaining(123456); + std::unique_ptr<storage::api::StorageCommand> cmd = _converter->toStorageAPI(cv, _repo); + CPPUNIT_ASSERT_EQUAL(defaultBucketSpace, cmd->getBucket().getBucketSpace()); api::CreateVisitorCommand* pc = dynamic_cast<api::CreateVisitorCommand*>(cmd.get()); CPPUNIT_ASSERT(pc); @@ -225,6 +249,9 @@ void DocumentApiConverterTest::testCreateVisitor() CPPUNIT_ASSERT_EQUAL(vespalib::string("control-dest"), pc->getControlDestination()); CPPUNIT_ASSERT_EQUAL(vespalib::string("data-dest"), pc->getDataDestination()); CPPUNIT_ASSERT_EQUAL(123456u, pc->getTimeout()); + + auto msg = toDocumentAPI<documentapi::CreateVisitorMessage>(*cmd); + CPPUNIT_ASSERT_EQUAL(vespalib::string("myspace"), msg->getBucketSpace()); } void DocumentApiConverterTest::testCreateVisitorHighTimeout() diff --git a/storage/src/vespa/storage/common/bucket_resolver.h b/storage/src/vespa/storage/common/bucket_resolver.h index 7224a392e2f..f1e334807bf 100644 --- a/storage/src/vespa/storage/common/bucket_resolver.h +++ b/storage/src/vespa/storage/common/bucket_resolver.h @@ -2,6 +2,7 @@ #pragma once #include <vespa/document/bucket/bucket.h> +#include <vespa/vespalib/stllike/string.h> namespace document { class DocumentId; } @@ -13,6 +14,8 @@ namespace storage { struct BucketResolver { virtual ~BucketResolver() {} virtual document::Bucket bucketFromId(const document::DocumentId &documentId) const = 0; + virtual document::BucketSpace bucketSpaceFromName(const vespalib::string &bucketSpace) const = 0; + virtual vespalib::string nameFromBucketSpace(const document::BucketSpace &bucketSpace) const = 0; }; } diff --git a/storage/src/vespa/storage/storageserver/communicationmanager.cpp b/storage/src/vespa/storage/storageserver/communicationmanager.cpp index 71a918610e6..eae51b90165 100644 --- a/storage/src/vespa/storage/storageserver/communicationmanager.cpp +++ b/storage/src/vespa/storage/storageserver/communicationmanager.cpp @@ -275,6 +275,12 @@ struct PlaceHolderBucketResolver : public BucketResolver { virtual document::Bucket bucketFromId(const document::DocumentId &) const override { return document::Bucket(document::BucketSpace::placeHolder(), document::BucketId(0)); } + virtual document::BucketSpace bucketSpaceFromName(const vespalib::string &) const override { + return document::BucketSpace::placeHolder(); + } + virtual vespalib::string nameFromBucketSpace(const document::BucketSpace &) const override { + return ""; + } }; } diff --git a/storage/src/vespa/storage/storageserver/documentapiconverter.cpp b/storage/src/vespa/storage/storageserver/documentapiconverter.cpp index 331e32f43b8..86d926bdb26 100644 --- a/storage/src/vespa/storage/storageserver/documentapiconverter.cpp +++ b/storage/src/vespa/storage/storageserver/documentapiconverter.cpp @@ -76,7 +76,7 @@ DocumentApiConverter::toStorageAPI(documentapi::DocumentMessage& fromMsg, case DocumentProtocol::MESSAGE_CREATEVISITOR: { documentapi::CreateVisitorMessage& from(static_cast<documentapi::CreateVisitorMessage&>(fromMsg)); - auto to = std::make_unique<api::CreateVisitorCommand>(BucketSpace::placeHolder(), + auto to = std::make_unique<api::CreateVisitorCommand>(_bucketResolver.bucketSpaceFromName(from.getBucketSpace()), from.getLibraryName(), from.getInstanceId(), from.getDocumentSelection()); @@ -295,6 +295,7 @@ DocumentApiConverter::toDocumentAPI(api::StorageCommand& fromMsg, const document documentapi::CreateVisitorMessage::UP to( new documentapi::CreateVisitorMessage(from.getLibraryName(), from.getInstanceId(), from.getControlDestination(), from.getDataDestination())); + to->setBucketSpace(_bucketResolver.nameFromBucketSpace(from.getBucketSpace())); to->setDocumentSelection(from.getDocumentSelection()); to->setMaximumPendingReplyCount(from.getMaximumPendingReplyCount()); to->setParameters(from.getParameters()); |