diff options
author | Tor Egge <Tor.Egge@broadpark.no> | 2018-10-12 12:30:02 +0200 |
---|---|---|
committer | Tor Egge <Tor.Egge@broadpark.no> | 2018-10-12 12:30:02 +0200 |
commit | a5ed70eaa0bf2561e57af6adbabe410145eaaea7 (patch) | |
tree | bb843eaf8c28eb42c56af24f5c1e6a3847653ff5 /searchcore/src | |
parent | 343468605d19bc5ce3fa4b9f0b80a3b1692b89f5 (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.cpp | 10 | ||||
-rw-r--r-- | searchcore/src/vespa/searchcore/proton/persistenceengine/persistenceengine.cpp | 4 |
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) { |