summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--persistence/src/vespa/persistence/spi/result.cpp4
-rw-r--r--persistence/src/vespa/persistence/spi/result.h12
-rw-r--r--searchcore/src/vespa/searchcore/proton/persistenceengine/persistenceengine.cpp3
-rw-r--r--storage/src/vespa/storage/persistence/persistencethread.cpp2
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(),