summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@oath.com>2018-02-09 09:58:47 +0100
committerHenning Baldersheim <balder@oath.com>2018-02-09 09:58:47 +0100
commite5bddcb27e266d6545775843eeca617306de5ff6 (patch)
treea9704bbc5a9ca246dd98f6d938aa99245c31f075
parent3e349b470c968586116245ef9a8719002cdf47b7 (diff)
Ensure that we filter and QFLAGS and do not automatically say we have the same capabilities as our master.
-rw-r--r--searchcore/src/vespa/searchcore/fdispatch/search/fnet_search.cpp2
-rw-r--r--searchlib/src/tests/common/packets/packets_test.cpp4
-rw-r--r--searchlib/src/tests/engine/searchapi/searchapi_test.cpp4
-rw-r--r--searchlib/src/vespa/searchlib/common/packets.cpp2
-rw-r--r--searchlib/src/vespa/searchlib/common/packets.h10
-rw-r--r--searchlib/src/vespa/searchlib/common/transport.h1
-rw-r--r--searchlib/src/vespa/searchlib/engine/packetconverter.cpp2
7 files changed, 17 insertions, 8 deletions
diff --git a/searchcore/src/vespa/searchcore/fdispatch/search/fnet_search.cpp b/searchcore/src/vespa/searchcore/fdispatch/search/fnet_search.cpp
index 98642c6edf6..ba67b533ca5 100644
--- a/searchcore/src/vespa/searchcore/fdispatch/search/fnet_search.cpp
+++ b/searchcore/src/vespa/searchcore/fdispatch/search/fnet_search.cpp
@@ -1151,7 +1151,7 @@ FastS_FNET_Search::setupQueryPacket(uint32_t hitsPerNode, uint32_t qflags,
qx._features = search::fs4transport::QF_PARSEDQUERY | search::fs4transport::QF_RANKP;
qx._offset = _util.GetAlignedSearchOffset();
qx._maxhits = hitsPerNode; // capped maxhits
- qx._qflags = qflags; // filtered query flags
+ qx.setQueryFlags(qflags);
qx.setTimeout(_queryArgs->getTimeLeft());
qx.setRanking(_queryArgs->ranking);
diff --git a/searchlib/src/tests/common/packets/packets_test.cpp b/searchlib/src/tests/common/packets/packets_test.cpp
index ad4cf02f4e8..060a07dcdac 100644
--- a/searchlib/src/tests/common/packets/packets_test.cpp
+++ b/searchlib/src/tests/common/packets/packets_test.cpp
@@ -398,7 +398,7 @@ createAndFill_QUERYX()
EXPECT_EQUAL(0l, src->getTimeout());
src->setTimeout(fastos::TimeStamp(4*fastos::TimeStamp::MS));
EXPECT_EQUAL(fastos::TimeStamp(4*fastos::TimeStamp::MS), src->getTimeout());
- src->_qflags = 5u;
+ src->setQueryFlags(5u);
src->setRanking("seven");
src->_numStackItems = 14u;
src->_propsVector.resize(2);
@@ -419,7 +419,7 @@ verifyQueryX(FS4Packet_QUERYX & queryX, uint32_t features)
EXPECT_EQUAL(2u, queryX._offset);
EXPECT_EQUAL(3u, queryX._maxhits);
EXPECT_EQUAL(fastos::TimeStamp(4*fastos::TimeStamp::MS), queryX.getTimeout());
- EXPECT_EQUAL(0x5u, queryX._qflags);
+ EXPECT_EQUAL(0x1u, queryX.getQueryFlags()); //Filtered
if (queryX._features & QF_RANKP) {
EXPECT_EQUAL("seven", queryX._ranking);
} else {
diff --git a/searchlib/src/tests/engine/searchapi/searchapi_test.cpp b/searchlib/src/tests/engine/searchapi/searchapi_test.cpp
index 3e8be3a99fc..a517890620c 100644
--- a/searchlib/src/tests/engine/searchapi/searchapi_test.cpp
+++ b/searchlib/src/tests/engine/searchapi/searchapi_test.cpp
@@ -54,7 +54,7 @@ Test::convertToRequest()
src._offset = 2u;
src._maxhits = 3u;
src.setTimeout(fastos::TimeStamp(4*fastos::TimeStamp::MS));
- src._qflags = 5u;
+ src.setQueryFlags(5u);
src._features |= QF_RANKP;
src.setRanking("seven");
src._features |= QF_PROPERTIES;
@@ -92,7 +92,7 @@ Test::convertToRequest()
EXPECT_EQUAL(dst.offset, 2u);
EXPECT_EQUAL(dst.maxhits, 3u);
EXPECT_EQUAL((dst.getTimeOfDoom() - dst.getStartTime()).ms(), 4u);
- EXPECT_EQUAL(dst.queryFlags, 5u);
+ EXPECT_EQUAL(dst.queryFlags, 1u); //Filtered
EXPECT_EQUAL(vespalib::string("seven"), dst.ranking);
EXPECT_EQUAL(dst.propertiesMap.size(), 2u);
EXPECT_EQUAL(dst.propertiesMap.featureOverrides().lookup("p1k1").get(), std::string("p1v1"));
diff --git a/searchlib/src/vespa/searchlib/common/packets.cpp b/searchlib/src/vespa/searchlib/common/packets.cpp
index 4bb11acaabb..4a436b3ae82 100644
--- a/searchlib/src/vespa/searchlib/common/packets.cpp
+++ b/searchlib/src/vespa/searchlib/common/packets.cpp
@@ -1172,10 +1172,10 @@ FS4Packet_QUERYRESULTX::toString(uint32_t indent) const
FS4Packet_QUERYX::FS4Packet_QUERYX()
: FS4Packet(),
_timeout(0),
+ _qflags(0),
_features(0),
_offset(0),
_maxhits(0),
- _qflags(0),
_ranking(),
_propsVector(),
_sortSpec(),
diff --git a/searchlib/src/vespa/searchlib/common/packets.h b/searchlib/src/vespa/searchlib/common/packets.h
index a876400e503..23411dcb322 100644
--- a/searchlib/src/vespa/searchlib/common/packets.h
+++ b/searchlib/src/vespa/searchlib/common/packets.h
@@ -42,6 +42,12 @@ enum fnet_feature_masks {
GDF_RESCLASSNAME |
GDF_PROPERTIES |
GDF_FLAGS),
+ FNET_QFLAG_SUPPORTED_MASK = (QFLAG_EXTENDED_COVERAGE |
+ QFLAG_COVERAGE_NODES |
+ QFLAG_ESTIMATE |
+ QFLAG_DROP_SORTDATA |
+ QFLAG_NO_RESULTCACHE |
+ QFLAG_DUMP_FEATURES),
FNET_MQF_SUPPORTED_MASK = (MQF_QFLAGS),
@@ -441,12 +447,12 @@ private:
FS4Packet_QUERYX& operator=(const FS4Packet_QUERYX &);
uint32_t _timeout;
+ uint32_t _qflags;
public:
uint32_t _features; // see query_features
uint32_t _offset;
uint32_t _maxhits;
- uint32_t _qflags;
string _ranking; // if QF_RANKP
PropsVector _propsVector; // if QF_PROPERTIES
string _sortSpec; // if QF_SORTSPEC
@@ -457,6 +463,7 @@ public:
uint32_t _numStackItems; // if QF_PARSEDQUERY
string _stackDump; // if QF_PARSEDQUERY
+ void setQueryFlags(uint32_t qflags) { _qflags = FNET_QFLAG_SUPPORTED_MASK & qflags; }
void setRanking(const vespalib::stringref &ranking) { _ranking = ranking; }
void setSortSpec(const vespalib::stringref &spec) { _sortSpec = spec; }
void setGroupSpec(const vespalib::stringref &spec) { _groupSpec = spec; }
@@ -465,6 +472,7 @@ public:
void setStackDump(const vespalib::stringref &buf) { _stackDump = buf; }
void setTimeout(const fastos::TimeStamp & timeout);
fastos::TimeStamp getTimeout() const;
+ uint32_t getQueryFlags() const { return _qflags; }
explicit FS4Packet_QUERYX();
~FS4Packet_QUERYX();
diff --git a/searchlib/src/vespa/searchlib/common/transport.h b/searchlib/src/vespa/searchlib/common/transport.h
index b6a925240c9..55cb44a34d0 100644
--- a/searchlib/src/vespa/searchlib/common/transport.h
+++ b/searchlib/src/vespa/searchlib/common/transport.h
@@ -12,6 +12,7 @@ namespace search::fs4transport {
* are as follows:
* <ul>
* <li><b>QFLAG_EXTENDED_COVERAGE</b>: Indicates that the it is able to receive extended coverage information.</li>
+ * <li><b>QFLAG_COVERAGE_NODES</b>: Indicate that it is able to handle nodes information.</li>
* <li><b>QFLAG_ESTIMATE</b>: Indicates that the query is performed to get
* an estimate of the total number of hits</li>
* <li><b>QFLAG_DUMP_FEATURES</b>: Dump detailed ranking information. Note that
diff --git a/searchlib/src/vespa/searchlib/engine/packetconverter.cpp b/searchlib/src/vespa/searchlib/engine/packetconverter.cpp
index 2ebbb9bf89c..e6fb37223d6 100644
--- a/searchlib/src/vespa/searchlib/engine/packetconverter.cpp
+++ b/searchlib/src/vespa/searchlib/engine/packetconverter.cpp
@@ -55,7 +55,7 @@ PacketConverter::toSearchRequest(const QUERYX &packet, SearchRequest &request)
request.offset = packet._offset;
request.maxhits = packet._maxhits;
request.setTimeout(packet.getTimeout());
- request.queryFlags = packet._qflags;
+ request.queryFlags = packet.getQueryFlags();
request.ranking = packet._ranking;
for (uint32_t i = 0; i < packet._propsVector.size(); ++i) {