diff options
author | Henning Baldersheim <balder@oath.com> | 2018-11-02 16:10:15 +0100 |
---|---|---|
committer | Henning Baldersheim <balder@oath.com> | 2018-11-02 16:10:15 +0100 |
commit | 066d4cd87284df2661bac982cc48199f99024607 (patch) | |
tree | 9310b3a5bb95e4796d7ad6956c5d0a0abedd2491 | |
parent | a132de97ff01f9496a276eba334bc1c17c941d77 (diff) |
Set adaptive-timeout as reason for coverage loss if it has any.
3 files changed, 20 insertions, 7 deletions
diff --git a/searchcore/src/vespa/searchcore/fdispatch/search/fnet_search.cpp b/searchcore/src/vespa/searchcore/fdispatch/search/fnet_search.cpp index 577d6e7edf5..206d798f294 100644 --- a/searchcore/src/vespa/searchcore/fdispatch/search/fnet_search.cpp +++ b/searchcore/src/vespa/searchcore/fdispatch/search/fnet_search.cpp @@ -6,6 +6,7 @@ #include "fnet_search.h" #include "mergehits.h" #include <vespa/searchlib/engine/packetconverter.h> +#include <vespa/searchlib/engine/searchreply.h> #include <vespa/vespalib/util/stringfmt.h> #include <vespa/vespalib/xxhash/xxhash.h> @@ -870,6 +871,7 @@ FastS_FNET_Search::CheckCoverage() uint16_t nodesQueried = 0; uint16_t nodesReplied = 0; size_t cntNone(0); + size_t askedButNotAnswered(0); for (const FastS_FNET_SearchNode & node : _nodes) { if (node._qresult != nullptr) { @@ -882,6 +884,9 @@ FastS_FNET_Search::CheckCoverage() } else { nodesQueried++; cntNone++; + if (node.IsConnected()) { + askedButNotAnswered++; + } } } const ssize_t missingParts = cntNone - (_dataset->getSearchableCopies() - 1); @@ -890,6 +895,9 @@ FastS_FNET_Search::CheckCoverage() // It should be done differently activeDocs += missingParts * activeDocs/(_nodes.size() - cntNone); } + if ((askedButNotAnswered != 0) || (nodesQueried != nodesReplied)) { + degradedReason |= search::engine::SearchReply::Coverage::ADAPTIVE_TIMEOUT; + } _util.SetCoverage(covDocs, activeDocs, soonActiveDocs, degradedReason, nodesQueried, nodesReplied); } @@ -1446,22 +1454,26 @@ FastS_FNET_Search::ProcessDocsumsDone() return RET_OK; } +bool +FastS_FNET_Search::useAdaptiveTimeout() const { + return _dataset->getMinimalSearchCoverage() < 100.0; +} void FastS_FNET_Search::adjustQueryTimeout() { uint32_t pendingQueries = getPendingQueries(); - if (pendingQueries == 0 || _util.IsQueryFlagSet(search::fs4transport::QFLAG_DUMP_FEATURES)) { + if ((pendingQueries == 0) || + _util.IsQueryFlagSet(search::fs4transport::QFLAG_DUMP_FEATURES) || + ! useAdaptiveTimeout()) + { return; } double mincoverage = _dataset->getMinimalSearchCoverage(); - uint32_t wantedAnswers = getRequestedQueries(); - if (mincoverage < 100.0) { - wantedAnswers *= mincoverage / 100.0; - LOG(spam, "Adjusting wanted answers from %u to %u", getRequestedQueries(), wantedAnswers); - } + uint32_t wantedAnswers = getRequestedQueries() * mincoverage / 100.0; + LOG(spam, "Adjusting wanted answers from %u to %u", getRequestedQueries(), wantedAnswers); if (getDoneQueries() < wantedAnswers) { return; } diff --git a/searchcore/src/vespa/searchcore/fdispatch/search/fnet_search.h b/searchcore/src/vespa/searchcore/fdispatch/search/fnet_search.h index 0ad9a7f0067..81e84e92bbd 100644 --- a/searchcore/src/vespa/searchcore/fdispatch/search/fnet_search.h +++ b/searchcore/src/vespa/searchcore/fdispatch/search/fnet_search.h @@ -328,6 +328,7 @@ public: char *ST_GetSortData() { return _util.GetSortData(); } FastS_QueryResult *ST_GetQueryResult() { return _util.GetQueryResult(); } + bool useAdaptiveTimeout() const; void adjustQueryTimeout(); void adjustDocsumTimeout(); uint32_t getRequestedQueries() const { return _queryNodes; } diff --git a/searchlib/src/vespa/searchlib/engine/searchreply.h b/searchlib/src/vespa/searchlib/engine/searchreply.h index 9135866a7f7..40dca8a1c46 100644 --- a/searchlib/src/vespa/searchlib/engine/searchreply.h +++ b/searchlib/src/vespa/searchlib/engine/searchreply.h @@ -53,8 +53,8 @@ public: Coverage & degradeMatchPhase() { _degradeReason |= MATCH_PHASE; return *this; } Coverage & degradeTimeout() { _degradeReason |= TIMEOUT; return *this; } Coverage & degradeAdaptiveTimeout() { _degradeReason |= ADAPTIVE_TIMEOUT; return *this; } - private: enum DegradeReason {MATCH_PHASE=0x01, TIMEOUT=0x02, ADAPTIVE_TIMEOUT=0x04}; + private: uint64_t _covered; uint64_t _active; uint64_t _soonActive; |