aboutsummaryrefslogtreecommitdiffstats
path: root/searchcore
diff options
context:
space:
mode:
authorTor Egge <Tor.Egge@broadpark.no>2018-10-12 12:05:34 +0200
committerTor Egge <Tor.Egge@broadpark.no>2018-10-12 12:05:34 +0200
commit343468605d19bc5ce3fa4b9f0b80a3b1692b89f5 (patch)
treeaca03a9c73625adbe133488ab9638d365bc44b60 /searchcore
parentee8321ac0ca948e5bc55b05feaac5b0b4343b523 (diff)
Reject updates with old doc id scheme.
Diffstat (limited to 'searchcore')
-rw-r--r--searchcore/src/tests/proton/persistenceengine/persistenceengine_test.cpp15
-rw-r--r--searchcore/src/vespa/searchcore/proton/persistenceengine/persistenceengine.cpp4
2 files changed, 17 insertions, 2 deletions
diff --git a/searchcore/src/tests/proton/persistenceengine/persistenceengine_test.cpp b/searchcore/src/tests/proton/persistenceengine/persistenceengine_test.cpp
index 4cfccbd8186..c87ab8aefa5 100644
--- a/searchcore/src/tests/proton/persistenceengine/persistenceengine_test.cpp
+++ b/searchcore/src/tests/proton/persistenceengine/persistenceengine_test.cpp
@@ -326,13 +326,15 @@ DocumentId docId0;
DocumentId docId1("id:type1:type1::1");
DocumentId docId2("id:type2:type2::1");
DocumentId docId3("id:type3:type3::1");
+DocumentId old_docId("doc:old:id-scheme");
Document::SP doc1(createDoc(type1, docId1));
Document::SP doc2(createDoc(type2, docId2));
Document::SP doc3(createDoc(type3, docId3));
-Document::SP old_doc(createDoc(type1, DocumentId("doc:old:id-scheme")));
+Document::SP old_doc(createDoc(type1, old_docId));
document::DocumentUpdate::SP upd1(createUpd(type1, docId1));
document::DocumentUpdate::SP upd2(createUpd(type2, docId2));
document::DocumentUpdate::SP upd3(createUpd(type3, docId3));
+document::DocumentUpdate::SP old_upd(createUpd(type1, old_docId));
PartitionId partId(0);
BucketId bckId1(1);
BucketId bckId2(2);
@@ -514,6 +516,15 @@ TEST_F("require that updates are routed to handler", SimpleFixture)
}
+TEST_F("require that updates with old id scheme are rejected", SimpleFixture)
+{
+ storage::spi::LoadType loadType(0, "default");
+ Context context(loadType, storage::spi::Priority(0), storage::spi::Trace::TraceLevel(0));
+
+ EXPECT_EQUAL(UpdateResult(Result::PERMANENT_ERROR, "Old id scheme not supported in elastic mode (doc:old:id-scheme)"),
+ f.engine.update(bucket1, tstamp1, old_upd, context));
+}
+
TEST_F("require that update is rejected if resource limit is reached", SimpleFixture)
{
f._writeFilter._acceptWriteOperation = false;
@@ -570,7 +581,7 @@ TEST_F("require that removes with old id scheme are rejected", SimpleFixture)
Context context(loadType, storage::spi::Priority(0), storage::spi::Trace::TraceLevel(0));
EXPECT_EQUAL(RemoveResult(Result::PERMANENT_ERROR, "Old id scheme not supported in elastic mode (doc:old:id-scheme)"),
- f.engine.remove(bucket1, tstamp1, old_doc->getId(), context));
+ f.engine.remove(bucket1, tstamp1, old_docId, context));
}
TEST_F("require that remove is NOT rejected if resource limit is reached", SimpleFixture)
diff --git a/searchcore/src/vespa/searchcore/proton/persistenceengine/persistenceengine.cpp b/searchcore/src/vespa/searchcore/proton/persistenceengine/persistenceengine.cpp
index fb3b9bc7c5a..dc5684c3f25 100644
--- a/searchcore/src/vespa/searchcore/proton/persistenceengine/persistenceengine.cpp
+++ b/searchcore/src/vespa/searchcore/proton/persistenceengine/persistenceengine.cpp
@@ -400,6 +400,10 @@ PersistenceEngine::update(const Bucket& b, Timestamp t, const DocumentUpdate::SP
LOG(spam, "update(%s, %" PRIu64 ", (\"%s\", \"%s\"), createIfNonExistent='%s')",
b.toString().c_str(), static_cast<uint64_t>(t.getValue()), docType.toString().c_str(),
upd->getId().toString().c_str(), (upd->getCreateIfNonExistent() ? "true" : "false"));
+ if (!upd->getId().hasDocType()) {
+ return UpdateResult(Result::PERMANENT_ERROR,
+ make_string("Old id scheme not supported in elastic mode (%s)", upd->getId().toString().c_str()));
+ }
IPersistenceHandler::SP handler = getHandler(b.getBucketSpace(), docType);
if (handler) {