summaryrefslogtreecommitdiffstats
path: root/storage
diff options
context:
space:
mode:
authorGeir Storli <geirst@oath.com>2017-11-21 12:17:50 +0000
committerGeir Storli <geirst@oath.com>2017-11-22 12:09:09 +0000
commit914820e8fb2aa280d839fe5a76849d8a21d2d791 (patch)
tree7070cdf6ed39f8d33648f36c16194d09811123f6 /storage
parent9f9e7e5f9b2b9b28c3bba4bdc2f185db7dc071da (diff)
Add named bucket space to CreateVisitorMessage.
Diffstat (limited to 'storage')
-rw-r--r--storage/src/tests/storageserver/documentapiconvertertest.cpp31
-rw-r--r--storage/src/vespa/storage/common/bucket_resolver.h3
-rw-r--r--storage/src/vespa/storage/storageserver/communicationmanager.cpp6
-rw-r--r--storage/src/vespa/storage/storageserver/documentapiconverter.cpp3
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());