diff options
4 files changed, 14 insertions, 7 deletions
diff --git a/persistence/src/vespa/persistence/spi/result.cpp b/persistence/src/vespa/persistence/spi/result.cpp index 8de6245a8d2..ccfbd36d630 100644 --- a/persistence/src/vespa/persistence/spi/result.cpp +++ b/persistence/src/vespa/persistence/spi/result.cpp @@ -35,10 +35,10 @@ GetResult::GetResult(Document::UP doc, Timestamp timestamp) { } -GetResult::GetResult(Timestamp removed_at_ts) +GetResult::GetResult(Timestamp removed_at_ts, bool is_tombstone) : _timestamp(removed_at_ts), _doc(), - _is_tombstone(true) + _is_tombstone(is_tombstone) { } diff --git a/persistence/src/vespa/persistence/spi/result.h b/persistence/src/vespa/persistence/spi/result.h index 714d71e37ee..97d1b75a260 100644 --- a/persistence/src/vespa/persistence/spi/result.h +++ b/persistence/src/vespa/persistence/spi/result.h @@ -180,7 +180,11 @@ public: GetResult(DocumentUP doc, Timestamp timestamp); static GetResult make_for_tombstone(Timestamp removed_at_ts) { - return GetResult(removed_at_ts); + return GetResult(removed_at_ts, true); + } + + static GetResult make_for_metadata_only(Timestamp removed_at_ts) { + return GetResult(removed_at_ts, false); } ~GetResult() override; @@ -210,12 +214,12 @@ public: } private: - // Explicitly creates a tombstone (remove entry) GetResult with no document. - explicit GetResult(Timestamp removed_at_ts); + // Explicitly creates a metadata only GetResult with no document, optionally a tombstone (remove entry). + GetResult(Timestamp removed_at_ts, bool is_tombstone); Timestamp _timestamp; DocumentSP _doc; - bool _is_tombstone; + bool _is_tombstone; }; class BucketIdListResult : public Result { diff --git a/searchcore/src/vespa/searchcore/proton/persistenceengine/persistenceengine.cpp b/searchcore/src/vespa/searchcore/proton/persistenceengine/persistenceengine.cpp index 1dc5199557a..2659952ae03 100644 --- a/searchcore/src/vespa/searchcore/proton/persistenceengine/persistenceengine.cpp +++ b/searchcore/src/vespa/searchcore/proton/persistenceengine/persistenceengine.cpp @@ -436,6 +436,9 @@ PersistenceEngine::get(const Bucket& b, const document::FieldSet& fields, const if (meta.removed) { return GetResult::make_for_tombstone(meta.timestamp); } + if (fields.NONE == fields.getType()) { + return GetResult::make_for_metadata_only(meta.timestamp); + } document::Document::UP doc = retriever.getDocument(meta.lid); if (!doc || doc->getId().getGlobalId() != meta.gid) { return GetResult(); diff --git a/storage/src/vespa/storage/persistence/persistencethread.cpp b/storage/src/vespa/storage/persistence/persistencethread.cpp index a96e9870d36..31858d2a875 100644 --- a/storage/src/vespa/storage/persistence/persistencethread.cpp +++ b/storage/src/vespa/storage/persistence/persistencethread.cpp @@ -292,7 +292,7 @@ PersistenceThread::handleGet(api::GetCommand& cmd, MessageTracker::UP tracker) _spi.get(getBucket(cmd.getDocumentId(), cmd.getBucket()), *fieldSet, cmd.getDocumentId(), tracker->context()); if (tracker->checkForError(result)) { - if (!result.hasDocument()) { + if (!result.hasDocument() && (document::FieldSet::NONE != fieldSet->getType())) { _env._metrics.get[cmd.getLoadType()].notFound.inc(); } tracker->setReply(std::make_shared<api::GetReply>(cmd, result.getDocumentPtr(), result.getTimestamp(), |