diff options
author | Geir Storli <geirst@yahooinc.com> | 2022-03-07 16:18:13 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-03-07 16:18:13 +0100 |
commit | 82dcc119915be3c55af0bb78eac0698f8d0d33cf (patch) | |
tree | ddb335c74e6e6ab1b559d2237b24c28e6281a006 /searchcorespi | |
parent | 2ae65202ead09ca6eb5b7653c9c8735617b260d2 (diff) | |
parent | afff1df19a3f532648bb55aab8dc15457ff9f062 (diff) |
Merge pull request #21578 from vespa-engine/balder/do-not-ever-use-testcode-in-production
Wire in the real clcok and use an explicit RequestContext instead of …
Diffstat (limited to 'searchcorespi')
4 files changed, 43 insertions, 7 deletions
diff --git a/searchcorespi/src/vespa/searchcorespi/index/indexmaintainer.cpp b/searchcorespi/src/vespa/searchcorespi/index/indexmaintainer.cpp index d8bbf435479..f740cec7900 100644 --- a/searchcorespi/src/vespa/searchcorespi/index/indexmaintainer.cpp +++ b/searchcorespi/src/vespa/searchcorespi/index/indexmaintainer.cpp @@ -432,7 +432,8 @@ IndexMaintainer::swapInNewIndex(LockGuard & guard, LOG(debug, "Warming up a disk index."); indexes = std::make_shared<WarmupIndexCollection> (_warmupConfig, getLeaf(guard, _source_list, true), indexes, - static_cast<IDiskIndex &>(source), _ctx.getWarmupExecutor(), *this); + static_cast<IDiskIndex &>(source), _ctx.getWarmupExecutor(), + _ctx.getThreadingService().clock(), *this); } else { LOG(debug, "No warmup needed as it is a memory index that is mapped in."); } diff --git a/searchcorespi/src/vespa/searchcorespi/index/ithreadingservice.h b/searchcorespi/src/vespa/searchcorespi/index/ithreadingservice.h index 60997d6666b..c325d5ded11 100644 --- a/searchcorespi/src/vespa/searchcorespi/index/ithreadingservice.h +++ b/searchcorespi/src/vespa/searchcorespi/index/ithreadingservice.h @@ -5,7 +5,10 @@ class FNET_Transport; -namespace vespalib { class ISequencedTaskExecutor; } +namespace vespalib { + class ISequencedTaskExecutor; + class Clock; +} namespace searchcorespi::index { /** @@ -76,6 +79,7 @@ struct IThreadingService virtual vespalib::ThreadExecutor &summary() = 0; virtual vespalib::Executor &shared() = 0; virtual FNET_Transport &transport() = 0; + virtual const vespalib::Clock &clock() const = 0; virtual vespalib::ISequencedTaskExecutor &indexFieldInverter() = 0; virtual vespalib::ISequencedTaskExecutor &indexFieldWriter() = 0; virtual vespalib::ISequencedTaskExecutor &attributeFieldWriter() = 0; diff --git a/searchcorespi/src/vespa/searchcorespi/index/warmupindexcollection.cpp b/searchcorespi/src/vespa/searchcorespi/index/warmupindexcollection.cpp index b9cbdab1c0a..e6e7d777656 100644 --- a/searchcorespi/src/vespa/searchcorespi/index/warmupindexcollection.cpp +++ b/searchcorespi/src/vespa/searchcorespi/index/warmupindexcollection.cpp @@ -1,10 +1,13 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. + #include "warmupindexcollection.h" #include "idiskindex.h" #include <vespa/searchlib/fef/matchdatalayout.h> #include <vespa/searchlib/query/tree/termnodes.h> #include <vespa/vespalib/stllike/hash_map.hpp> #include <vespa/vespalib/stllike/hash_set.h> +#include <vespa/vespalib/stllike/asciistream.h> +#include <vespa/eval/eval/value.h> #include <thread> #include <vespa/log/log.h> @@ -31,12 +34,14 @@ WarmupIndexCollection::WarmupIndexCollection(const WarmupConfig & warmupConfig, ISearchableIndexCollection::SP next, IndexSearchable & warmup, vespalib::Executor & executor, + const vespalib::Clock & clock, IWarmupDone & warmupDone) : _warmupConfig(warmupConfig), _prev(std::move(prev)), _next(std::move(next)), _warmup(warmup), _executor(executor), + _clock(clock), _warmupDone(warmupDone), _warmupEndTime(vespalib::steady_clock::now() + warmupConfig.getDuration()), _handledTerms(std::make_unique<FieldTermMap>()), @@ -223,12 +228,21 @@ WarmupIndexCollection::drainPending() { _pendingTasks.waitForZeroRefCount(); } +WarmupIndexCollection::WarmupRequestContext::WarmupRequestContext(const vespalib::Clock & clock) + : _doom(clock, vespalib::steady_time::max(), vespalib::steady_time::max(), false) +{} +WarmupIndexCollection::WarmupRequestContext::~WarmupRequestContext() = default; + +std::unique_ptr<vespalib::eval::Value> +WarmupIndexCollection::WarmupRequestContext::get_query_tensor(const vespalib::string&) const { + return {}; +} WarmupIndexCollection::WarmupTask::WarmupTask(std::unique_ptr<MatchData> md, std::shared_ptr<WarmupIndexCollection> warmup) : _warmup(std::move(warmup)), _retainGuard(_warmup->_pendingTasks), _matchData(std::move(md)), _bluePrint(), - _requestContext() + _requestContext(warmup->_clock) { } diff --git a/searchcorespi/src/vespa/searchcorespi/index/warmupindexcollection.h b/searchcorespi/src/vespa/searchcorespi/index/warmupindexcollection.h index b0b2952bee8..c2d70b4fd5c 100644 --- a/searchcorespi/src/vespa/searchcorespi/index/warmupindexcollection.h +++ b/searchcorespi/src/vespa/searchcorespi/index/warmupindexcollection.h @@ -4,10 +4,11 @@ #include "isearchableindexcollection.h" #include "warmupconfig.h" -#include <vespa/vespalib/util/threadexecutor.h> +#include <vespa/searchlib/attribute/attribute_blueprint_params.h> +#include <vespa/vespalib/util/doom.h> +#include <vespa/vespalib/util/executor.h> #include <vespa/vespalib/util/monitored_refcount.h> #include <vespa/vespalib/util/retain_guard.h> -#include <vespa/searchlib/queryeval/fake_requestcontext.h> namespace searchcorespi { @@ -34,6 +35,7 @@ public: ISearchableIndexCollection::SP next, IndexSearchable & warmup, vespalib::Executor & executor, + const vespalib::Clock & clock, IWarmupDone & warmupDone); ~WarmupIndexCollection() override; // Implements IIndexCollection @@ -70,8 +72,22 @@ public: void drainPending(); private: typedef search::fef::MatchData MatchData; - typedef search::queryeval::FakeRequestContext FakeRequestContext; typedef vespalib::Executor::Task Task; + 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; } + std::unique_ptr<vespalib::eval::Value> get_query_tensor(const vespalib::string&) const override; + const AttributeBlueprintParams& get_attribute_blueprint_params() const override { return _params; } + private: + const vespalib::Doom _doom; + const AttributeBlueprintParams _params; + }; class WarmupTask : public Task { public: WarmupTask(std::unique_ptr<MatchData> md, std::shared_ptr<WarmupIndexCollection> warmup); @@ -90,7 +106,7 @@ private: vespalib::RetainGuard _retainGuard; std::unique_ptr<MatchData> _matchData; Blueprint::UP _bluePrint; - FakeRequestContext _requestContext; + WarmupRequestContext _requestContext; }; void fireWarmup(Task::UP task); @@ -101,6 +117,7 @@ private: ISearchableIndexCollection::SP _next; IndexSearchable & _warmup; vespalib::Executor & _executor; + const vespalib::Clock & _clock; IWarmupDone & _warmupDone; vespalib::steady_time _warmupEndTime; std::mutex _lock; |