summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--client/js/app/src/app/pages/querybuilder/TransformVespaTrace.jsx4
-rw-r--r--client/js/app/src/app/pages/querybuilder/query-response/download-jaeger.jsx (renamed from client/js/app/src/app/pages/querybuilder/query-response/download-jeager.jsx)2
-rw-r--r--client/js/app/src/app/pages/querybuilder/query-response/query-response.jsx4
-rw-r--r--client/js/app/src/app/pages/querytracer/query-tracer.jsx4
-rw-r--r--container-search/src/main/java/com/yahoo/prelude/query/parser/AbstractParser.java29
-rw-r--r--container-search/src/test/java/com/yahoo/search/test/QueryWithFilterTestCase.java11
-rw-r--r--default_build_settings.cmake16
-rw-r--r--dist/vespa.spec35
-rw-r--r--document/src/vespa/document/bucket/bucketid.cpp3
-rw-r--r--document/src/vespa/document/bucket/bucketid.h5
-rw-r--r--searchcore/src/vespa/searchcore/bmcluster/bucket_db_snapshot.cpp8
-rw-r--r--searchcore/src/vespa/searchcore/bmcluster/bucket_db_snapshot.h4
-rw-r--r--searchcore/src/vespa/searchcore/bmcluster/bucket_db_snapshot_vector.h3
-rw-r--r--searchcore/src/vespa/searchcore/proton/bucketdb/bucketdb.h2
-rw-r--r--searchcore/src/vespa/searchcore/proton/persistenceengine/persistenceengine.cpp2
-rw-r--r--searchsummary/src/vespa/searchsummary/docsummary/docsum_store_document.cpp6
-rw-r--r--searchsummary/src/vespa/searchsummary/docsummary/docsum_store_document.h2
-rw-r--r--searchsummary/src/vespa/searchsummary/docsummary/docsum_store_field_value.h38
-rw-r--r--searchsummary/src/vespa/searchsummary/docsummary/general_result.cpp4
-rw-r--r--searchsummary/src/vespa/searchsummary/docsummary/general_result.h7
-rw-r--r--searchsummary/src/vespa/searchsummary/docsummary/i_docsum_store_document.h6
-rw-r--r--storage/src/vespa/storage/bucketdb/bucketmanager.h59
-rw-r--r--streamingvisitors/src/vespa/vsm/vsm/docsumfilter.cpp8
23 files changed, 156 insertions, 106 deletions
diff --git a/client/js/app/src/app/pages/querybuilder/TransformVespaTrace.jsx b/client/js/app/src/app/pages/querybuilder/TransformVespaTrace.jsx
index 7299f1cb777..7a630a017cb 100644
--- a/client/js/app/src/app/pages/querybuilder/TransformVespaTrace.jsx
+++ b/client/js/app/src/app/pages/querybuilder/TransformVespaTrace.jsx
@@ -128,6 +128,10 @@ function createProtonSpans(children, parentID) {
[{ refType: 'CHILD_OF', traceID: traceID, spanID: parentID }]
);
data.push(newSpan);
+ // eslint-disable-next-line no-prototype-builtins
+ if (!child.hasOwnProperty('traces')) {
+ return;
+ }
let traces = child['traces'];
for (let k = 0; k < traces.length; k++) {
let trace = traces[k];
diff --git a/client/js/app/src/app/pages/querybuilder/query-response/download-jeager.jsx b/client/js/app/src/app/pages/querybuilder/query-response/download-jaeger.jsx
index 4130172a329..795c53f8c21 100644
--- a/client/js/app/src/app/pages/querybuilder/query-response/download-jeager.jsx
+++ b/client/js/app/src/app/pages/querybuilder/query-response/download-jaeger.jsx
@@ -20,7 +20,7 @@ function downloadFile(filename, blob) {
URL.revokeObjectURL(href);
}
-export function DownloadJeager({ response, ...props }) {
+export function DownloadJaeger({ response, ...props }) {
const handleClick = () => {
try {
const json = JSON.parse(response);
diff --git a/client/js/app/src/app/pages/querybuilder/query-response/query-response.jsx b/client/js/app/src/app/pages/querybuilder/query-response/query-response.jsx
index 56562ae1717..794e163ef04 100644
--- a/client/js/app/src/app/pages/querybuilder/query-response/query-response.jsx
+++ b/client/js/app/src/app/pages/querybuilder/query-response/query-response.jsx
@@ -7,7 +7,7 @@ import {
CopyButton,
Textarea,
} from '@mantine/core';
-import { DownloadJeager } from 'app/pages/querybuilder/query-response/download-jeager';
+import { DownloadJaeger } from 'app/pages/querybuilder/query-response/download-jaeger';
import { useQueryBuilderContext } from 'app/pages/querybuilder/context/query-builder-provider';
import { Icon } from 'app/components';
@@ -33,7 +33,7 @@ export function QueryResponse() {
</Button>
)}
</CopyButton>
- <DownloadJeager
+ <DownloadJaeger
variant="outline"
size="xs"
compact
diff --git a/client/js/app/src/app/pages/querytracer/query-tracer.jsx b/client/js/app/src/app/pages/querytracer/query-tracer.jsx
index 758182d4f3f..ca1a4e99c8f 100644
--- a/client/js/app/src/app/pages/querytracer/query-tracer.jsx
+++ b/client/js/app/src/app/pages/querytracer/query-tracer.jsx
@@ -1,6 +1,6 @@
import React, { useState } from 'react';
import { Stack, Textarea } from '@mantine/core';
-import { DownloadJeager } from 'app/pages/querybuilder/query-response/download-jeager';
+import { DownloadJaeger } from 'app/pages/querybuilder/query-response/download-jaeger';
export function QueryTracer() {
const [response, setResponse] = useState('');
@@ -19,7 +19,7 @@ export function QueryTracer() {
value={response}
onChange={({ target }) => setResponse(target.value)}
/>
- <DownloadJeager fullWidth response={response} />
+ <DownloadJaeger fullWidth response={response} />
</Stack>
);
}
diff --git a/container-search/src/main/java/com/yahoo/prelude/query/parser/AbstractParser.java b/container-search/src/main/java/com/yahoo/prelude/query/parser/AbstractParser.java
index f838e96c930..5da1f1a07be 100644
--- a/container-search/src/main/java/com/yahoo/prelude/query/parser/AbstractParser.java
+++ b/container-search/src/main/java/com/yahoo/prelude/query/parser/AbstractParser.java
@@ -7,6 +7,7 @@ import com.yahoo.prelude.Index;
import com.yahoo.prelude.IndexFacts;
import com.yahoo.prelude.query.AndSegmentItem;
import com.yahoo.prelude.query.CompositeItem;
+import com.yahoo.prelude.query.IndexedItem;
import com.yahoo.prelude.query.Item;
import com.yahoo.prelude.query.NullItem;
import com.yahoo.prelude.query.PhraseItem;
@@ -16,6 +17,7 @@ import com.yahoo.search.query.QueryTree;
import com.yahoo.search.query.parser.Parsable;
import com.yahoo.search.query.parser.ParserEnvironment;
+import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
@@ -166,6 +168,8 @@ public abstract class AbstractParser implements CustomParser {
root = filterParser.applyFilter(root, filterToParse, parsingLanguage, indexFacts);
}
}
+ if (defaultIndex != null)
+ assignDefaultIndex(indexFacts.getCanonicName(defaultIndex), root);
return simplifyPhrases(root);
}
@@ -228,6 +232,31 @@ public abstract class AbstractParser implements CustomParser {
return detectionText.toString();
}
+ /**
+ * Assigns the default index to query terms having no default index.
+ *
+ * This will apply the default index to terms without it added through the filter parameter,
+ * where setting defaultIndex into state causes incorrect parsing.
+ *
+ * @param defaultIndex the default index to assign
+ * @param item the item to check
+ */
+ private static void assignDefaultIndex(String defaultIndex, Item item) {
+ if (defaultIndex == null || item == null) return;
+
+ if (item instanceof IndexedItem) {
+ IndexedItem indexName = (IndexedItem) item;
+
+ if ("".equals(indexName.getIndexName()))
+ indexName.setIndexName(defaultIndex);
+ }
+ else if (item instanceof CompositeItem) {
+ Iterator<Item> items = ((CompositeItem)item).getItemIterator();
+ while (items.hasNext())
+ assignDefaultIndex(defaultIndex, items.next());
+ }
+ }
+
private boolean is(Token.Kind kind, Token tokenOrNull) {
if (tokenOrNull == null) return false;
return kind.equals(tokenOrNull.kind);
diff --git a/container-search/src/test/java/com/yahoo/search/test/QueryWithFilterTestCase.java b/container-search/src/test/java/com/yahoo/search/test/QueryWithFilterTestCase.java
index 082cede5ff4..3920a95bd98 100644
--- a/container-search/src/test/java/com/yahoo/search/test/QueryWithFilterTestCase.java
+++ b/container-search/src/test/java/com/yahoo/search/test/QueryWithFilterTestCase.java
@@ -41,6 +41,17 @@ public class QueryWithFilterTestCase {
q.getModel().getQueryTree().toString());
}
+ /** Tests that default-index is not applied to NOT filters */
+ @Test
+ void testAndFilterWithoutExplicitIndex() {
+ Query q = newQueryFromEncoded("?query=trump" +
+ "&model.type=all" +
+ "&model.defaultIndex=text" +
+ "&filter=%2B%28filterTerm%29");
+ assertEquals("AND text:trump |text:filterTerm",
+ q.getModel().getQueryTree().toString());
+ }
+
private Query newQueryFromEncoded(String queryString) {
return newQueryFromEncoded(queryString, null, new SimpleLinguistics());
}
diff --git a/default_build_settings.cmake b/default_build_settings.cmake
index 979b71f96b3..e973cfcf7f7 100644
--- a/default_build_settings.cmake
+++ b/default_build_settings.cmake
@@ -74,12 +74,6 @@ function(setup_vespa_default_build_settings_darwin)
set(DEFAULT_EXTRA_INCLUDE_DIRECTORY "${DEFAULT_EXTRA_INCLUDE_DIRECTORY}" PARENT_SCOPE)
endfunction()
-function(setup_vespa_default_build_settings_fedora_34)
- message("-- Setting up default build settings for fedora 34")
- set(DEFAULT_EXTRA_INCLUDE_DIRECTORY "${VESPA_DEPS}/include" "/usr/include/openblas" PARENT_SCOPE)
- set(DEFAULT_VESPA_LLVM_VERSION "12" PARENT_SCOPE)
-endfunction()
-
function(setup_vespa_default_build_settings_fedora_35)
message("-- Setting up default build settings for fedora 35")
set(DEFAULT_EXTRA_INCLUDE_DIRECTORY "${VESPA_DEPS}/include" "/usr/include/openblas" PARENT_SCOPE)
@@ -98,6 +92,12 @@ function(setup_vespa_default_build_settings_fedora_37)
set(DEFAULT_VESPA_LLVM_VERSION "14" PARENT_SCOPE)
endfunction()
+function(setup_vespa_default_build_settings_fedora_38)
+ message("-- Setting up default build settings for fedora 38")
+ set(DEFAULT_EXTRA_INCLUDE_DIRECTORY "${VESPA_DEPS}/include" "/usr/include/openblas" PARENT_SCOPE)
+ set(DEFAULT_VESPA_LLVM_VERSION "14" PARENT_SCOPE)
+endfunction()
+
function(setup_vespa_default_build_settings_amzn_2)
message("-- Setting up default build settings for amzn 2")
set(DEFAULT_EXTRA_LINK_DIRECTORY "${VESPA_DEPS}/lib64" "/usr/lib64/llvm7.0/lib" PARENT_SCOPE)
@@ -236,14 +236,14 @@ function(vespa_use_default_build_settings)
setup_vespa_default_build_settings_almalinux_9_0()
elseif(VESPA_OS_DISTRO STREQUAL "darwin")
setup_vespa_default_build_settings_darwin()
- elseif(VESPA_OS_DISTRO_COMBINED STREQUAL "fedora 34")
- setup_vespa_default_build_settings_fedora_34()
elseif(VESPA_OS_DISTRO_COMBINED STREQUAL "fedora 35")
setup_vespa_default_build_settings_fedora_35()
elseif(VESPA_OS_DISTRO_COMBINED STREQUAL "fedora 36")
setup_vespa_default_build_settings_fedora_36()
elseif(VESPA_OS_DISTRO_COMBINED STREQUAL "fedora 37")
setup_vespa_default_build_settings_fedora_37()
+ elseif(VESPA_OS_DISTRO_COMBINED STREQUAL "fedora 38")
+ setup_vespa_default_build_settings_fedora_38()
elseif(VESPA_OS_DISTRO_COMBINED STREQUAL "amzn 2")
setup_vespa_default_build_settings_amzn_2()
elseif(VESPA_OS_DISTRO_COMBINED STREQUAL "amzn 2022")
diff --git a/dist/vespa.spec b/dist/vespa.spec
index b05a8853da1..4b4c82c436b 100644
--- a/dist/vespa.spec
+++ b/dist/vespa.spec
@@ -171,13 +171,9 @@ BuildRequires: openssl-devel
BuildRequires: vespa-lz4-devel >= 1.9.2-2
BuildRequires: vespa-onnxruntime-devel = 1.12.1
BuildRequires: vespa-libzstd-devel >= 1.4.5-2
-%if 0%{?fc34}
-BuildRequires: protobuf-devel
%if 0%{?amzn2022}
+BuildRequires: protobuf-devel
BuildRequires: llvm-devel >= 13.0.0
-%else
-BuildRequires: llvm-devel >= 12.0.0
-%endif
BuildRequires: boost-devel >= 1.75
BuildRequires: gtest-devel
BuildRequires: gmock-devel
@@ -198,8 +194,15 @@ BuildRequires: gmock-devel
%endif
%if 0%{?fc37}
BuildRequires: protobuf-devel
-BuildRequires: llvm-devel >= 14.0.0
-BuildRequires: boost-devel >= 1.76
+BuildRequires: llvm-devel >= 14.0.5
+BuildRequires: boost-devel >= 1.78
+BuildRequires: gtest-devel
+BuildRequires: gmock-devel
+%endif
+%if 0%{?fc38}
+BuildRequires: protobuf-devel
+BuildRequires: llvm-devel >= 14.0.5
+BuildRequires: boost-devel >= 1.78
BuildRequires: gtest-devel
BuildRequires: gmock-devel
%endif
@@ -328,12 +331,8 @@ Requires: gtest
%endif
%if 0%{?fedora}
Requires: gtest
-%if 0%{?fc34}
%if 0%{?amzn2022}
%define _vespa_llvm_version 13
-%else
-%define _vespa_llvm_version 12
-%endif
%endif
%if 0%{?fc35}
%define _vespa_llvm_version 13
@@ -344,6 +343,9 @@ Requires: gtest
%if 0%{?fc37}
%define _vespa_llvm_version 14
%endif
+%if 0%{?fc38}
+%define _vespa_llvm_version 14
+%endif
%define _extra_link_directory %{_vespa_deps_prefix}/lib64
%define _extra_include_directory %{_vespa_deps_prefix}/include;/usr/include/openblas
%endif
@@ -459,12 +461,8 @@ Requires: protobuf
%endif
%if 0%{?fedora}
Requires: protobuf
-%if 0%{?fc34}
%if 0%{?amzn2022}
Requires: llvm-libs >= 13.0.0
-%else
-Requires: llvm-libs >= 12.0.0
-%endif
%endif
%if 0%{?fc35}
Requires: llvm-libs >= 13.0.0
@@ -473,7 +471,10 @@ Requires: llvm-libs >= 13.0.0
Requires: llvm-libs >= 14.0.0
%endif
%if 0%{?fc37}
-Requires: llvm-libs >= 14.0.0
+Requires: llvm-libs >= 14.0.5
+%endif
+%if 0%{?fc38}
+Requires: llvm-libs >= 14.0.5
%endif
%endif
Requires: vespa-onnxruntime = 1.12.1
@@ -571,7 +572,7 @@ nearest neighbor search used for low-level benchmarking.
%endif
%else
%setup -q
-%if ( 0%{?el8} || 0%{?fc34} ) && %{_vespa_llvm_version} < 13
+%if 0%{?el8} && %{_vespa_llvm_version} < 13
if grep -qs 'result_pair<R>(' /usr/include/llvm/ADT/STLExtras.h
then
patch /usr/include/llvm/ADT/STLExtras.h < dist/STLExtras.h.diff
diff --git a/document/src/vespa/document/bucket/bucketid.cpp b/document/src/vespa/document/bucket/bucketid.cpp
index 3752eab4810..9ca4db1e51c 100644
--- a/document/src/vespa/document/bucket/bucketid.cpp
+++ b/document/src/vespa/document/bucket/bucketid.cpp
@@ -78,7 +78,7 @@ void BucketId::initialize() noexcept {
}
uint64_t
-BucketId::xxhash::operator () (const BucketId& bucketId) const noexcept {
+BucketId::hash::operator () (const BucketId& bucketId) const noexcept {
const uint64_t raw_id = bucketId.getId();
return XXH3_64bits(&raw_id, sizeof(uint64_t));
}
@@ -159,4 +159,3 @@ operator>>(nbostream &is, BucketId &bucketId)
} // document
VESPALIB_HASH_SET_INSTANTIATE_H(document::BucketId, document::BucketId::hash);
-VESPALIB_HASH_SET_INSTANTIATE_H(document::BucketId, document::BucketId::xxhash);
diff --git a/document/src/vespa/document/bucket/bucketid.h b/document/src/vespa/document/bucket/bucketid.h
index a0f9ca4e94f..370948c1acc 100644
--- a/document/src/vespa/document/bucket/bucketid.h
+++ b/document/src/vespa/document/bucket/bucketid.h
@@ -37,11 +37,6 @@ class BucketId
{
public:
struct hash {
- size_t operator () (const BucketId& g) const noexcept {
- return g.getId();
- }
- };
- struct xxhash {
uint64_t operator () (const BucketId& g) const noexcept;
};
diff --git a/searchcore/src/vespa/searchcore/bmcluster/bucket_db_snapshot.cpp b/searchcore/src/vespa/searchcore/bmcluster/bucket_db_snapshot.cpp
index 3ddb1afdb35..486472aec0f 100644
--- a/searchcore/src/vespa/searchcore/bmcluster/bucket_db_snapshot.cpp
+++ b/searchcore/src/vespa/searchcore/bmcluster/bucket_db_snapshot.cpp
@@ -2,7 +2,6 @@
#include "bucket_db_snapshot.h"
#include <vespa/persistence/spi/persistenceprovider.h>
-#include <vespa/vespalib/stllike/hash_set.hpp>
#include <vespa/vespalib/stllike/hash_map.hpp>
#include <cassert>
@@ -66,9 +65,4 @@ BucketDbSnapshot::try_get_bucket_info(BucketId bucket_id) const
}
-namespace vespalib {
-
-template class hash_map<BucketId, BucketInfo, BucketId::hash>;
-template class hash_set<BucketId, BucketId::hash>;
-
-}
+VESPALIB_HASH_MAP_INSTANTIATE_H(document::BucketId, storage::spi::BucketInfo, document::BucketId::hash);
diff --git a/searchcore/src/vespa/searchcore/bmcluster/bucket_db_snapshot.h b/searchcore/src/vespa/searchcore/bmcluster/bucket_db_snapshot.h
index d750a73f207..189250194b4 100644
--- a/searchcore/src/vespa/searchcore/bmcluster/bucket_db_snapshot.h
+++ b/searchcore/src/vespa/searchcore/bmcluster/bucket_db_snapshot.h
@@ -22,6 +22,10 @@ class BucketDbSnapshot
public:
using BucketIdSet = vespalib::hash_set<document::BucketId, document::BucketId::hash>;
BucketDbSnapshot();
+ BucketDbSnapshot(const BucketDbSnapshot &) = delete;
+ BucketDbSnapshot & operator=(const BucketDbSnapshot &) = delete;
+ BucketDbSnapshot(BucketDbSnapshot &&) noexcept = default;
+ BucketDbSnapshot & operator=(BucketDbSnapshot &&) noexcept = default;
~BucketDbSnapshot();
void populate(document::BucketSpace bucket_space, storage::spi::PersistenceProvider& provider);
uint32_t count_new_documents(const BucketDbSnapshot &old) const;
diff --git a/searchcore/src/vespa/searchcore/bmcluster/bucket_db_snapshot_vector.h b/searchcore/src/vespa/searchcore/bmcluster/bucket_db_snapshot_vector.h
index 7799ed8fc58..df6183fd6f9 100644
--- a/searchcore/src/vespa/searchcore/bmcluster/bucket_db_snapshot_vector.h
+++ b/searchcore/src/vespa/searchcore/bmcluster/bucket_db_snapshot_vector.h
@@ -16,8 +16,9 @@ class BucketDbSnapshotVector
vespalib::hash_map<document::BucketSpace, std::vector<BucketDbSnapshot>, document::BucketSpace::hash> _snapshots;
using BucketIdSet = BucketDbSnapshot::BucketIdSet;
public:
-
BucketDbSnapshotVector(const std::vector<storage::spi::PersistenceProvider *>& providers, const storage::lib::ClusterStateBundle &cluster_state_bundle);
+ BucketDbSnapshotVector(const BucketDbSnapshotVector &) = delete;
+ BucketDbSnapshotVector & operator = (const BucketDbSnapshotVector &) = delete;
~BucketDbSnapshotVector();
uint32_t count_moved_documents(const BucketDbSnapshotVector &old) const;
uint32_t count_lost_unique_documents(const BucketDbSnapshotVector &old) const;
diff --git a/searchcore/src/vespa/searchcore/proton/bucketdb/bucketdb.h b/searchcore/src/vespa/searchcore/proton/bucketdb/bucketdb.h
index 2a50fbc2d42..7c1c336ab48 100644
--- a/searchcore/src/vespa/searchcore/proton/bucketdb/bucketdb.h
+++ b/searchcore/src/vespa/searchcore/proton/bucketdb/bucketdb.h
@@ -19,7 +19,7 @@ private:
using Timestamp = storage::spi::Timestamp;
using BucketChecksum = storage::spi::BucketChecksum;
using BucketState = bucketdb::BucketState;
- using Map = vespalib::hash_map<BucketId, BucketState, document::BucketId::xxhash>;
+ using Map = vespalib::hash_map<BucketId, BucketState, document::BucketId::hash>;
Map _map;
BucketId _cachedBucketId;
diff --git a/searchcore/src/vespa/searchcore/proton/persistenceengine/persistenceengine.cpp b/searchcore/src/vespa/searchcore/proton/persistenceengine/persistenceengine.cpp
index 830dbfedf20..c6d9bbd82b9 100644
--- a/searchcore/src/vespa/searchcore/proton/persistenceengine/persistenceengine.cpp
+++ b/searchcore/src/vespa/searchcore/proton/persistenceengine/persistenceengine.cpp
@@ -99,7 +99,7 @@ GenericResultHandler::~GenericResultHandler() = default;
class BucketIdListResultHandler : public IBucketIdListResultHandler
{
private:
- using BucketIdSet = vespalib::hash_set<document::BucketId, document::BucketId::xxhash>;
+ using BucketIdSet = vespalib::hash_set<document::BucketId, document::BucketId::hash>;
BucketIdSet _bucketSet;
public:
BucketIdListResultHandler()
diff --git a/searchsummary/src/vespa/searchsummary/docsummary/docsum_store_document.cpp b/searchsummary/src/vespa/searchsummary/docsummary/docsum_store_document.cpp
index e6c8d0b6ab8..71800eb2128 100644
--- a/searchsummary/src/vespa/searchsummary/docsummary/docsum_store_document.cpp
+++ b/searchsummary/src/vespa/searchsummary/docsummary/docsum_store_document.cpp
@@ -16,7 +16,7 @@ DocsumStoreDocument::DocsumStoreDocument(std::unique_ptr<document::Document> doc
DocsumStoreDocument::~DocsumStoreDocument() = default;
-std::unique_ptr<document::FieldValue>
+DocsumStoreFieldValue
DocsumStoreDocument::get_field_value(const vespalib::string& field_name) const
{
if (_document) {
@@ -24,11 +24,11 @@ DocsumStoreDocument::get_field_value(const vespalib::string& field_name) const
auto value(field.getDataType().createFieldValue());
if (value) {
if (_document->getValue(field, *value)) {
- return value;
+ return DocsumStoreFieldValue(std::move(value));
}
}
}
- return {};
+ return DocsumStoreFieldValue();
}
void
diff --git a/searchsummary/src/vespa/searchsummary/docsummary/docsum_store_document.h b/searchsummary/src/vespa/searchsummary/docsummary/docsum_store_document.h
index 3b0bea6e721..26cccc9970f 100644
--- a/searchsummary/src/vespa/searchsummary/docsummary/docsum_store_document.h
+++ b/searchsummary/src/vespa/searchsummary/docsummary/docsum_store_document.h
@@ -17,7 +17,7 @@ class DocsumStoreDocument : public IDocsumStoreDocument
public:
DocsumStoreDocument(std::unique_ptr<document::Document> document);
~DocsumStoreDocument() override;
- std::unique_ptr<document::FieldValue> get_field_value(const vespalib::string& field_name) const override;
+ DocsumStoreFieldValue get_field_value(const vespalib::string& field_name) const override;
void insert_summary_field(const vespalib::string& field_name, vespalib::slime::Inserter& inserter) const override;
void insert_document_id(vespalib::slime::Inserter& inserter) const override;
};
diff --git a/searchsummary/src/vespa/searchsummary/docsummary/docsum_store_field_value.h b/searchsummary/src/vespa/searchsummary/docsummary/docsum_store_field_value.h
new file mode 100644
index 00000000000..d06a2ab8287
--- /dev/null
+++ b/searchsummary/src/vespa/searchsummary/docsummary/docsum_store_field_value.h
@@ -0,0 +1,38 @@
+// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+
+#pragma once
+
+#include <vespa/document/fieldvalue/fieldvalue.h>
+#include <memory>
+
+namespace search::docsummary {
+
+/*
+ * Class containing a field value returned from an IDocsumStoreDocument.
+ */
+class DocsumStoreFieldValue {
+ const document::FieldValue* _value;
+ std::unique_ptr<document::FieldValue> _value_store;
+public:
+ explicit DocsumStoreFieldValue(std::unique_ptr<document::FieldValue> value) noexcept
+ : _value(value.get()),
+ _value_store(std::move(value))
+ {
+ }
+ explicit DocsumStoreFieldValue(const document::FieldValue* value) noexcept
+ : _value(value),
+ _value_store()
+ {
+ }
+ DocsumStoreFieldValue()
+ : DocsumStoreFieldValue(nullptr)
+ {
+ }
+ ~DocsumStoreFieldValue() = default;
+ const document::FieldValue& operator*() const noexcept { return *_value; }
+ const document::FieldValue* operator->() const noexcept { return _value; }
+ const document::FieldValue* get() const noexcept { return _value; }
+ operator bool () const noexcept { return _value != nullptr; }
+};
+
+}
diff --git a/searchsummary/src/vespa/searchsummary/docsummary/general_result.cpp b/searchsummary/src/vespa/searchsummary/docsummary/general_result.cpp
index 825c3b39c1b..359959391fd 100644
--- a/searchsummary/src/vespa/searchsummary/docsummary/general_result.cpp
+++ b/searchsummary/src/vespa/searchsummary/docsummary/general_result.cpp
@@ -62,13 +62,13 @@ GeneralResult::GetPresentEntryFromEnumValue(uint32_t value)
return GetPresentEntry(idx);
}
-std::unique_ptr<document::FieldValue>
+DocsumStoreFieldValue
GeneralResult::get_field_value(const vespalib::string& field_name) const
{
if (_document != nullptr) {
return _document->get_field_value(field_name);
}
- return {};
+ return DocsumStoreFieldValue();
}
bool
diff --git a/searchsummary/src/vespa/searchsummary/docsummary/general_result.h b/searchsummary/src/vespa/searchsummary/docsummary/general_result.h
index cff27a496e3..8f7a1377502 100644
--- a/searchsummary/src/vespa/searchsummary/docsummary/general_result.h
+++ b/searchsummary/src/vespa/searchsummary/docsummary/general_result.h
@@ -4,10 +4,7 @@
#include "resultclass.h"
#include "docsumstorevalue.h"
-
-namespace document {
-class FieldValue;
-}
+#include "docsum_store_field_value.h"
namespace search::docsummary {
@@ -42,7 +39,7 @@ public:
}
ResEntry *GetPresentEntry(const char *name);
ResEntry *GetPresentEntryFromEnumValue(uint32_t val);
- std::unique_ptr<document::FieldValue> get_field_value(const vespalib::string& field_name) const;
+ DocsumStoreFieldValue get_field_value(const vespalib::string& field_name) const;
bool unpack(const char *buf, const size_t buflen);
bool inplaceUnpack(const DocsumStoreValue &value) {
diff --git a/searchsummary/src/vespa/searchsummary/docsummary/i_docsum_store_document.h b/searchsummary/src/vespa/searchsummary/docsummary/i_docsum_store_document.h
index c177568c467..b9c2ae76e7a 100644
--- a/searchsummary/src/vespa/searchsummary/docsummary/i_docsum_store_document.h
+++ b/searchsummary/src/vespa/searchsummary/docsummary/i_docsum_store_document.h
@@ -2,10 +2,8 @@
#pragma once
+#include "docsum_store_field_value.h"
#include <vespa/vespalib/stllike/string.h>
-#include <memory>
-
-namespace document { class FieldValue; }
namespace vespalib::slime { struct Inserter; }
@@ -20,7 +18,7 @@ class IDocsumStoreDocument
{
public:
virtual ~IDocsumStoreDocument() = default;
- virtual std::unique_ptr<document::FieldValue> get_field_value(const vespalib::string& field_name) const = 0;
+ virtual DocsumStoreFieldValue get_field_value(const vespalib::string& field_name) const = 0;
virtual void insert_summary_field(const vespalib::string& field_name, vespalib::slime::Inserter& inserter) const = 0;
virtual void insert_document_id(vespalib::slime::Inserter& inserter) const = 0;
};
diff --git a/storage/src/vespa/storage/bucketdb/bucketmanager.h b/storage/src/vespa/storage/bucketdb/bucketmanager.h
index eacd0c8ca6a..124acf1864c 100644
--- a/storage/src/vespa/storage/bucketdb/bucketmanager.h
+++ b/storage/src/vespa/storage/bucketdb/bucketmanager.h
@@ -34,7 +34,6 @@ class BucketManager : public StorageLink,
{
public:
/** Type used for message queues */
- using CommandList = std::list<std::shared_ptr<api::StorageCommand>>;
using BucketInfoRequestList = std::list<std::shared_ptr<api::RequestBucketInfoCommand>>;
using BucketInfoRequestMap = std::unordered_map<document::BucketSpace, BucketInfoRequestList, document::BucketSpace::hash>;
@@ -55,8 +54,7 @@ private:
mutable std::mutex _queueProcessingLock;
using ReplyQueue = std::vector<api::StorageReply::SP>;
- using ConflictingBuckets = std::unordered_set<document::BucketId,
- document::BucketId::hash>;
+ using ConflictingBuckets = std::unordered_set<document::BucketId, document::BucketId::hash>;
ReplyQueue _queuedReplies;
ConflictingBuckets _conflictingBuckets;
/**
@@ -80,9 +78,6 @@ private:
framework::Thread::UP _thread;
std::chrono::milliseconds _simulated_processing_delay;
- BucketManager(const BucketManager&);
- BucketManager& operator=(const BucketManager&);
-
class ScopedQueueDispatchGuard {
BucketManager& _mgr;
public:
@@ -94,8 +89,9 @@ private:
};
public:
- explicit BucketManager(const config::ConfigUri&,
- ServiceLayerComponentRegister&);
+ BucketManager(const config::ConfigUri&, ServiceLayerComponentRegister&);
+ BucketManager(const BucketManager&) = delete;
+ BucketManager& operator=(const BucketManager&) = delete;
~BucketManager();
void startWorkerThread();
@@ -127,8 +123,7 @@ private:
void updateMinUsedBits();
bool onRequestBucketInfo(const std::shared_ptr<api::RequestBucketInfoCommand>&) override;
- bool processRequestBucketInfoCommands(document::BucketSpace bucketSpace,
- BucketInfoRequestList &reqs);
+ bool processRequestBucketInfoCommands(document::BucketSpace bucketSpace, BucketInfoRequestList &reqs);
/**
* Enqueue reply and add its bucket to the set of conflicting buckets iff
@@ -199,42 +194,26 @@ private:
*
* Not thread safe.
*/
- bool replyConflictsWithConcurrentOperation(
- const api::BucketReply& reply) const;
-
+ bool replyConflictsWithConcurrentOperation(const api::BucketReply& reply) const;
bool enqueueIfBucketHasConflicts(const api::BucketReply::SP& reply);
-
bool onUp(const std::shared_ptr<api::StorageMessage>&) override;
- bool onSetSystemState(
- const std::shared_ptr<api::SetSystemStateCommand>&) override;
- bool onCreateBucket(
- const std::shared_ptr<api::CreateBucketCommand>&) override;
- bool onMergeBucket(
- const std::shared_ptr<api::MergeBucketCommand>&) override;
- bool onRemove(
- const std::shared_ptr<api::RemoveCommand>&) override;
- bool onRemoveReply(
- const std::shared_ptr<api::RemoveReply>&) override;
- bool onPut(
- const std::shared_ptr<api::PutCommand>&) override;
- bool onPutReply(
- const std::shared_ptr<api::PutReply>&) override;
- bool onUpdate(
- const std::shared_ptr<api::UpdateCommand>&) override;
- bool onUpdateReply(
- const std::shared_ptr<api::UpdateReply>&) override;
- bool onNotifyBucketChangeReply(
- const std::shared_ptr<api::NotifyBucketChangeReply>&) override;
+ bool onSetSystemState(const std::shared_ptr<api::SetSystemStateCommand>&) override;
+ bool onCreateBucket(const std::shared_ptr<api::CreateBucketCommand>&) override;
+ bool onMergeBucket(const std::shared_ptr<api::MergeBucketCommand>&) override;
+ bool onRemove(const std::shared_ptr<api::RemoveCommand>&) override;
+ bool onRemoveReply(const std::shared_ptr<api::RemoveReply>&) override;
+ bool onPut(const std::shared_ptr<api::PutCommand>&) override;
+ bool onPutReply(const std::shared_ptr<api::PutReply>&) override;
+ bool onUpdate(const std::shared_ptr<api::UpdateCommand>&) override;
+ bool onUpdateReply(const std::shared_ptr<api::UpdateReply>&) override;
+ bool onNotifyBucketChangeReply(const std::shared_ptr<api::NotifyBucketChangeReply>&) override;
bool verifyAndUpdateLastModified(api::StorageCommand& cmd,
const document::Bucket& bucket,
uint64_t lastModified);
- bool onSplitBucketReply(
- const std::shared_ptr<api::SplitBucketReply>&) override;
- bool onJoinBucketsReply(
- const std::shared_ptr<api::JoinBucketsReply>&) override;
- bool onDeleteBucketReply(
- const std::shared_ptr<api::DeleteBucketReply>&) override;
+ bool onSplitBucketReply(const std::shared_ptr<api::SplitBucketReply>&) override;
+ bool onJoinBucketsReply(const std::shared_ptr<api::JoinBucketsReply>&) override;
+ bool onDeleteBucketReply(const std::shared_ptr<api::DeleteBucketReply>&) override;
};
} // storage
diff --git a/streamingvisitors/src/vespa/vsm/vsm/docsumfilter.cpp b/streamingvisitors/src/vespa/vsm/vsm/docsumfilter.cpp
index 5bcead79f97..3d0f8ed6e37 100644
--- a/streamingvisitors/src/vespa/vsm/vsm/docsumfilter.cpp
+++ b/streamingvisitors/src/vespa/vsm/vsm/docsumfilter.cpp
@@ -133,7 +133,7 @@ class DocsumStoreVsmDocument : public IDocsumStoreDocument
public:
DocsumStoreVsmDocument(const document::Document* document);
~DocsumStoreVsmDocument() override;
- std::unique_ptr<document::FieldValue> get_field_value(const vespalib::string& field_name) const override;
+ DocsumStoreFieldValue get_field_value(const vespalib::string& field_name) const override;
void insert_summary_field(const vespalib::string& field_name, vespalib::slime::Inserter& inserter) const override;
void insert_document_id(vespalib::slime::Inserter& inserter) const override;
};
@@ -145,7 +145,7 @@ DocsumStoreVsmDocument::DocsumStoreVsmDocument(const document::Document* documen
DocsumStoreVsmDocument::~DocsumStoreVsmDocument() = default;
-std::unique_ptr<document::FieldValue>
+DocsumStoreFieldValue
DocsumStoreVsmDocument::get_field_value(const vespalib::string& field_name) const
{
if (_document != nullptr) {
@@ -153,11 +153,11 @@ DocsumStoreVsmDocument::get_field_value(const vespalib::string& field_name) cons
auto value(field.getDataType().createFieldValue());
if (value) {
if (_document->getValue(field, *value)) {
- return value;
+ return DocsumStoreFieldValue(std::move(value));
}
}
}
- return {};
+ return DocsumStoreFieldValue();
}
void