aboutsummaryrefslogtreecommitdiffstats
path: root/searchcore/src/vespa/searchcorespi/index/warmupindexcollection.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'searchcore/src/vespa/searchcorespi/index/warmupindexcollection.cpp')
-rw-r--r--searchcore/src/vespa/searchcorespi/index/warmupindexcollection.cpp63
1 files changed, 54 insertions, 9 deletions
diff --git a/searchcore/src/vespa/searchcorespi/index/warmupindexcollection.cpp b/searchcore/src/vespa/searchcorespi/index/warmupindexcollection.cpp
index 8807def03d4..3403f43e150 100644
--- a/searchcore/src/vespa/searchcorespi/index/warmupindexcollection.cpp
+++ b/searchcore/src/vespa/searchcorespi/index/warmupindexcollection.cpp
@@ -4,6 +4,7 @@
#include "idiskindex.h"
#include <vespa/searchlib/fef/matchdatalayout.h>
#include <vespa/searchlib/query/tree/termnodes.h>
+#include <vespa/searchlib/queryeval/blueprint.h>
#include <vespa/vespalib/stllike/hash_map.hpp>
#include <vespa/vespalib/stllike/hash_set.h>
#include <vespa/vespalib/stllike/asciistream.h>
@@ -17,13 +18,57 @@ namespace searchcorespi {
using index::IDiskIndex;
using search::fef::MatchDataLayout;
+using search::fef::MatchData;
using search::index::FieldLengthInfo;
using search::query::StringBase;
+using search::query::Node;
using search::queryeval::Blueprint;
using search::queryeval::ISourceSelector;
using search::queryeval::SearchIterator;
+using search::queryeval::IRequestContext;
+using search::queryeval::FieldSpec;
+using search::queryeval::FieldSpecList;
using TermMap = vespalib::hash_set<vespalib::string>;
+namespace {
+class WarmupRequestContext : public IRequestContext {
+ using IAttributeVector = search::attribute::IAttributeVector;
+ using AttributeBlueprintParams = search::attribute::AttributeBlueprintParams;
+public:
+ WarmupRequestContext(const vespalib::Clock & clock);
+ ~WarmupRequestContext() override;
+ const vespalib::Doom & getDoom() const override { return _doom; }
+ const IAttributeVector *getAttribute(const vespalib::string &) const override { return nullptr; }
+ const IAttributeVector *getAttributeStableEnum(const vespalib::string &) const override { return nullptr; }
+ const vespalib::eval::Value* get_query_tensor(const vespalib::string&) const override;
+ const AttributeBlueprintParams& get_attribute_blueprint_params() const override { return _params; }
+ const MetaStoreReadGuardSP * getMetaStoreReadGuard() const override { return nullptr; }
+private:
+ const vespalib::Doom _doom;
+ const AttributeBlueprintParams _params;
+};
+class WarmupTask : public vespalib::Executor::Task {
+public:
+ WarmupTask(std::unique_ptr<MatchData> md, std::shared_ptr<WarmupIndexCollection> warmup);
+ ~WarmupTask() override;
+ WarmupTask &createBlueprint(const FieldSpec &field, const Node &term) {
+ _bluePrint = _warmup->createBlueprint(_requestContext, field, term);
+ return *this;
+ }
+ WarmupTask &createBlueprint(const FieldSpecList &fields, const Node &term) {
+ _bluePrint = _warmup->createBlueprint(_requestContext, fields, term);
+ return *this;
+ }
+private:
+ void run() override;
+ std::shared_ptr<WarmupIndexCollection> _warmup;
+ vespalib::RetainGuard _retainGuard;
+ std::unique_ptr<MatchData> _matchData;
+ std::unique_ptr<search::queryeval::Blueprint> _bluePrint;
+ WarmupRequestContext _requestContext;
+};
+}
+
class FieldTermMap : public vespalib::hash_map<uint32_t, TermMap>
{
@@ -228,30 +273,30 @@ WarmupIndexCollection::drainPending() {
_pendingTasks.waitForZeroRefCount();
}
-WarmupIndexCollection::WarmupRequestContext::WarmupRequestContext(const vespalib::Clock & clock)
+WarmupRequestContext::WarmupRequestContext(const vespalib::Clock & clock)
: _doom(clock, vespalib::steady_time::max(), vespalib::steady_time::max(), false)
{}
-WarmupIndexCollection::WarmupRequestContext::~WarmupRequestContext() = default;
+WarmupRequestContext::~WarmupRequestContext() = default;
const vespalib::eval::Value*
-WarmupIndexCollection::WarmupRequestContext::get_query_tensor(const vespalib::string&) const {
+WarmupRequestContext::get_query_tensor(const vespalib::string&) const {
return {};
}
-WarmupIndexCollection::WarmupTask::WarmupTask(std::unique_ptr<MatchData> md, std::shared_ptr<WarmupIndexCollection> warmup)
+WarmupTask::WarmupTask(std::unique_ptr<MatchData> md, std::shared_ptr<WarmupIndexCollection> warmup)
: _warmup(std::move(warmup)),
- _retainGuard(_warmup->_pendingTasks),
+ _retainGuard(_warmup->pendingTasks()),
_matchData(std::move(md)),
_bluePrint(),
- _requestContext(_warmup->_clock)
+ _requestContext(_warmup->clock())
{
}
-WarmupIndexCollection::WarmupTask::~WarmupTask() = default;
+WarmupTask::~WarmupTask() = default;
void
-WarmupIndexCollection::WarmupTask::run()
+WarmupTask::run()
{
- if (_warmup->_warmupEndTime != vespalib::steady_time()) {
+ if (_warmup->warmupEndTime() != vespalib::steady_time()) {
LOG(debug, "Warming up %s", _bluePrint->asString().c_str());
_bluePrint->fetchPostings(search::queryeval::ExecuteInfo::TRUE);
SearchIterator::UP it(_bluePrint->createSearch(*_matchData, true));