summaryrefslogtreecommitdiffstats
path: root/searchcore/src
diff options
context:
space:
mode:
authorTor Egge <Tor.Egge@broadpark.no>2018-10-12 12:30:02 +0200
committerTor Egge <Tor.Egge@broadpark.no>2018-10-12 12:30:02 +0200
commita5ed70eaa0bf2561e57af6adbabe410145eaaea7 (patch)
treebb843eaf8c28eb42c56af24f5c1e6a3847653ff5 /searchcore/src
parent343468605d19bc5ce3fa4b9f0b80a3b1692b89f5 (diff)
Reject updates with bad ids (document type in id scheme is different
from document type for serialized document update).
Diffstat (limited to 'searchcore/src')
-rw-r--r--searchcore/src/tests/proton/persistenceengine/persistenceengine_test.cpp10
-rw-r--r--searchcore/src/vespa/searchcore/proton/persistenceengine/persistenceengine.cpp4
2 files changed, 14 insertions, 0 deletions
diff --git a/searchcore/src/tests/proton/persistenceengine/persistenceengine_test.cpp b/searchcore/src/tests/proton/persistenceengine/persistenceengine_test.cpp
index c87ab8aefa5..5484b8eacf0 100644
--- a/searchcore/src/tests/proton/persistenceengine/persistenceengine_test.cpp
+++ b/searchcore/src/tests/proton/persistenceengine/persistenceengine_test.cpp
@@ -335,6 +335,7 @@ 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));
+document::DocumentUpdate::SP bad_id_upd(createUpd(type1, docId2));
PartitionId partId(0);
BucketId bckId1(1);
BucketId bckId2(2);
@@ -525,6 +526,15 @@ TEST_F("require that updates with old id scheme are rejected", SimpleFixture)
f.engine.update(bucket1, tstamp1, old_upd, context));
}
+TEST_F("require that updates with bad ids 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, "Update operation rejected due to bad id (id:type2:type2::1, type1)"),
+ f.engine.update(bucket1, tstamp1, bad_id_upd, context));
+}
+
TEST_F("require that update is rejected if resource limit is reached", SimpleFixture)
{
f._writeFilter._acceptWriteOperation = false;
diff --git a/searchcore/src/vespa/searchcore/proton/persistenceengine/persistenceengine.cpp b/searchcore/src/vespa/searchcore/proton/persistenceengine/persistenceengine.cpp
index dc5684c3f25..42790254e53 100644
--- a/searchcore/src/vespa/searchcore/proton/persistenceengine/persistenceengine.cpp
+++ b/searchcore/src/vespa/searchcore/proton/persistenceengine/persistenceengine.cpp
@@ -404,6 +404,10 @@ PersistenceEngine::update(const Bucket& b, Timestamp t, const DocumentUpdate::SP
return UpdateResult(Result::PERMANENT_ERROR,
make_string("Old id scheme not supported in elastic mode (%s)", upd->getId().toString().c_str()));
}
+ if (upd->getId().getDocType() != docType.getName()) {
+ return UpdateResult(Result::PERMANENT_ERROR,
+ make_string("Update operation rejected due to bad id (%s, %s)", upd->getId().toString().c_str(), docType.getName().c_str()));
+ }
IPersistenceHandler::SP handler = getHandler(b.getBucketSpace(), docType);
if (handler) {