summaryrefslogtreecommitdiffstats
path: root/searchlib
diff options
context:
space:
mode:
authorHåvard Pettersen <havardpe@oath.com>2021-10-07 12:22:04 +0000
committerHåvard Pettersen <havardpe@oath.com>2021-10-07 13:04:42 +0000
commit2bf9f4d229580517ba228b6a6617bece324b41f1 (patch)
treeb2149764aae825451e7025c48326af4b55e486e4 /searchlib
parent772e6e847a5fb6c2e35226ec9be702220636483e (diff)
wire reported issues into search/docsum replies
Diffstat (limited to 'searchlib')
-rw-r--r--searchlib/src/tests/engine/proto_converter/proto_converter_test.cpp29
-rw-r--r--searchlib/src/vespa/searchlib/common/CMakeLists.txt3
-rw-r--r--searchlib/src/vespa/searchlib/common/unique_issues.cpp13
-rw-r--r--searchlib/src/vespa/searchlib/common/unique_issues.h28
-rw-r--r--searchlib/src/vespa/searchlib/engine/docsumreply.h2
-rw-r--r--searchlib/src/vespa/searchlib/engine/proto_converter.cpp14
-rw-r--r--searchlib/src/vespa/searchlib/engine/searchreply.cpp6
-rw-r--r--searchlib/src/vespa/searchlib/engine/searchreply.h2
8 files changed, 94 insertions, 3 deletions
diff --git a/searchlib/src/tests/engine/proto_converter/proto_converter_test.cpp b/searchlib/src/tests/engine/proto_converter/proto_converter_test.cpp
index 9cf8c73765c..5efe3f9fe8c 100644
--- a/searchlib/src/tests/engine/proto_converter/proto_converter_test.cpp
+++ b/searchlib/src/tests/engine/proto_converter/proto_converter_test.cpp
@@ -8,6 +8,7 @@
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Winline"
+using ::search::UniqueIssues;
using Converter = ::search::engine::ProtoConverter;
using SearchRequest = ::search::engine::SearchRequest;
@@ -301,6 +302,20 @@ TEST_F(SearchReplyTest, require_that_slime_trace_is_converted) {
EXPECT_EQ(proto.slime_trace(), "slime-trace");
}
+TEST_F(SearchReplyTest, require_that_issues_are_converted_to_errors) {
+ reply.my_issues = std::make_unique<UniqueIssues>();
+ reply.my_issues->handle(vespalib::Issue("a"));
+ reply.my_issues->handle(vespalib::Issue("b"));
+ reply.my_issues->handle(vespalib::Issue("c"));
+ reply.my_issues->handle(vespalib::Issue("a"));
+ reply.my_issues->handle(vespalib::Issue("b"));
+ convert();
+ ASSERT_EQ(proto.errors_size(), 3);
+ EXPECT_EQ(proto.errors(0).message(), "a");
+ EXPECT_EQ(proto.errors(1).message(), "b");
+ EXPECT_EQ(proto.errors(2).message(), "c");
+}
+
//-----------------------------------------------------------------------------
struct DocsumRequestTest : ::testing::Test {
@@ -490,6 +505,20 @@ TEST_F(DocsumReplyTest, require_that_missing_root_slime_gives_empty_payload) {
EXPECT_EQ(proto.slime_summaries().size(), 0);
}
+TEST_F(DocsumReplyTest, require_that_issues_are_converted_to_errors) {
+ reply.my_issues = std::make_unique<UniqueIssues>();
+ reply.my_issues->handle(vespalib::Issue("a"));
+ reply.my_issues->handle(vespalib::Issue("b"));
+ reply.my_issues->handle(vespalib::Issue("c"));
+ reply.my_issues->handle(vespalib::Issue("a"));
+ reply.my_issues->handle(vespalib::Issue("b"));
+ convert();
+ ASSERT_EQ(proto.errors_size(), 3);
+ EXPECT_EQ(proto.errors(0).message(), "a");
+ EXPECT_EQ(proto.errors(1).message(), "b");
+ EXPECT_EQ(proto.errors(2).message(), "c");
+}
+
//-----------------------------------------------------------------------------
struct MonitorReplyTest : ::testing::Test {
diff --git a/searchlib/src/vespa/searchlib/common/CMakeLists.txt b/searchlib/src/vespa/searchlib/common/CMakeLists.txt
index bd12f862d62..6495fa8561d 100644
--- a/searchlib/src/vespa/searchlib/common/CMakeLists.txt
+++ b/searchlib/src/vespa/searchlib/common/CMakeLists.txt
@@ -13,8 +13,8 @@ vespa_add_library(searchlib_common OBJECT
fileheadercontext.cpp
flush_token.cpp
geo_location.cpp
- geo_location_spec.cpp
geo_location_parser.cpp
+ geo_location_spec.cpp
growablebitvector.cpp
indexmetainfo.cpp
location.cpp
@@ -32,5 +32,6 @@ vespa_add_library(searchlib_common OBJECT
sortspec.cpp
threaded_compactable_lid_space.cpp
tunefileinfo.cpp
+ unique_issues.cpp
DEPENDS
)
diff --git a/searchlib/src/vespa/searchlib/common/unique_issues.cpp b/searchlib/src/vespa/searchlib/common/unique_issues.cpp
new file mode 100644
index 00000000000..9f41efaeda3
--- /dev/null
+++ b/searchlib/src/vespa/searchlib/common/unique_issues.cpp
@@ -0,0 +1,13 @@
+// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+
+#include "unique_issues.h"
+
+namespace search {
+
+void
+UniqueIssues::handle(const vespalib::Issue &issue)
+{
+ _messages.insert(issue.message());
+}
+
+}
diff --git a/searchlib/src/vespa/searchlib/common/unique_issues.h b/searchlib/src/vespa/searchlib/common/unique_issues.h
new file mode 100644
index 00000000000..5b25820c408
--- /dev/null
+++ b/searchlib/src/vespa/searchlib/common/unique_issues.h
@@ -0,0 +1,28 @@
+// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+
+#pragma once
+
+#include <vespa/vespalib/util/issue.h>
+#include <memory>
+#include <set>
+
+namespace search {
+
+/**
+ * Keep track of all unique issues encountered.
+ **/
+class UniqueIssues : public vespalib::Issue::Handler
+{
+private:
+ std::set<vespalib::string> _messages;
+public:
+ using UP = std::unique_ptr<UniqueIssues>;
+ void handle(const vespalib::Issue &issue) override;
+ void for_each_message(auto fun) const {
+ for (const auto &msg: _messages) {
+ fun(msg);
+ }
+ }
+};
+
+}
diff --git a/searchlib/src/vespa/searchlib/engine/docsumreply.h b/searchlib/src/vespa/searchlib/engine/docsumreply.h
index 15b202148d3..42eec32dba6 100644
--- a/searchlib/src/vespa/searchlib/engine/docsumreply.h
+++ b/searchlib/src/vespa/searchlib/engine/docsumreply.h
@@ -5,6 +5,7 @@
#include <vector>
#include <vespa/document/base/globalid.h>
#include <vespa/vespalib/util/memory.h>
+#include <vespa/searchlib/common/unique_issues.h>
#include <memory>
#include <vespa/searchlib/engine/docsumrequest.h>
@@ -36,6 +37,7 @@ struct DocsumReply
mutable DocsumRequest::UP request;
std::unique_ptr<vespalib::Slime> _root;
+ UniqueIssues::UP my_issues;
DocsumReply();
DocsumReply(std::unique_ptr<vespalib::Slime> root);
diff --git a/searchlib/src/vespa/searchlib/engine/proto_converter.cpp b/searchlib/src/vespa/searchlib/engine/proto_converter.cpp
index 9ad058c20ad..64039f69cd5 100644
--- a/searchlib/src/vespa/searchlib/engine/proto_converter.cpp
+++ b/searchlib/src/vespa/searchlib/engine/proto_converter.cpp
@@ -117,6 +117,13 @@ ProtoConverter::search_reply_to_proto(const SearchReply &reply, ProtoSearchReply
proto.set_grouping_blob(&reply.groupResult[0], reply.groupResult.size());
const auto &slime_trace = reply.propertiesMap.trace().lookup("slime");
proto.set_slime_trace(slime_trace.get().data(), slime_trace.get().size());
+ if (reply.my_issues) {
+ reply.my_issues->for_each_message([&](const vespalib::string &err_msg)
+ {
+ auto *err_obj = proto.add_errors();
+ err_obj->set_message(err_msg);
+ });
+ }
}
//-----------------------------------------------------------------------------
@@ -166,6 +173,13 @@ ProtoConverter::docsum_reply_to_proto(const DocsumReply &reply, ProtoDocsumReply
vespalib::slime::BinaryFormat::encode(*reply._root, buf);
proto.set_slime_summaries(buf.obtain().data, buf.obtain().size);
}
+ if (reply.my_issues) {
+ reply.my_issues->for_each_message([&](const vespalib::string &err_msg)
+ {
+ auto *err_obj = proto.add_errors();
+ err_obj->set_message(err_msg);
+ });
+ }
}
//-----------------------------------------------------------------------------
diff --git a/searchlib/src/vespa/searchlib/engine/searchreply.cpp b/searchlib/src/vespa/searchlib/engine/searchreply.cpp
index f2402d264e1..954b3d5141c 100644
--- a/searchlib/src/vespa/searchlib/engine/searchreply.cpp
+++ b/searchlib/src/vespa/searchlib/engine/searchreply.cpp
@@ -12,7 +12,8 @@ SearchReply::SearchReply()
groupResult(),
coverage(),
hits(),
- request()
+ request(),
+ my_issues()
{ }
SearchReply::~SearchReply() = default;
@@ -25,7 +26,8 @@ SearchReply::SearchReply(const SearchReply &rhs)
groupResult (rhs.groupResult),
coverage (rhs.coverage),
hits (rhs.hits),
- request() // NB not copied
+ request(), // NB not copied
+ my_issues() // NB not copied
{ }
}
diff --git a/searchlib/src/vespa/searchlib/engine/searchreply.h b/searchlib/src/vespa/searchlib/engine/searchreply.h
index b44eb6d6d84..b23a5fc192e 100644
--- a/searchlib/src/vespa/searchlib/engine/searchreply.h
+++ b/searchlib/src/vespa/searchlib/engine/searchreply.h
@@ -4,6 +4,7 @@
#include <vespa/document/base/globalid.h>
#include <vespa/searchlib/common/hitrank.h>
+#include <vespa/searchlib/common/unique_issues.h>
#include <vespa/vespalib/util/array.h>
#include <vespa/searchlib/engine/searchrequest.h>
#include <vector>
@@ -72,6 +73,7 @@ public:
PropertiesMap propertiesMap;
SearchRequest::UP request;
+ UniqueIssues::UP my_issues;
SearchReply();
~SearchReply();