diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2019-06-16 17:33:50 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-06-16 17:33:50 +0200 |
commit | f1110ab151c0dcaf9790dbbdfac986f32d00384c (patch) | |
tree | 7e4d20383996c8820cf7e0d7771089d02dec37b1 | |
parent | 9d34b40060fc5030eaa8a1de8297008ae362efd7 (diff) | |
parent | 6350863dab58beb31628212f507f420587b298dd (diff) |
Merge pull request #9821 from vespa-engine/balder/avoid-repeating-the-work-for-all-threads
Forward prepareSharedState too
5 files changed, 21 insertions, 6 deletions
diff --git a/searchlib/src/tests/features/ranking_expression/ranking_expression_test.cpp b/searchlib/src/tests/features/ranking_expression/ranking_expression_test.cpp index c7c3447a4cc..251040ecfa7 100644 --- a/searchlib/src/tests/features/ranking_expression/ranking_expression_test.cpp +++ b/searchlib/src/tests/features/ranking_expression/ranking_expression_test.cpp @@ -26,6 +26,8 @@ struct DummyExpression : IntrinsicExpression { DummyExpression(const FeatureType &type_in) : type(type_in) {} vespalib::string describe_self() const override { return "dummy"; } const FeatureType &result_type() const override { return type; } + void prepare_shared_state(const QueryEnv &, IObjectStore &) const override { + } FeatureExecutor &create_executor(const QueryEnv &, vespalib::Stash &stash) const override { return stash.create<DummyExecutor>(); } @@ -81,7 +83,7 @@ SetupResult::SetupResult(const TypeMap &object_inputs, setup_ok = rank.setup(index_env, {}); EXPECT_TRUE(!deps.accept_type_mismatch); } -SetupResult::~SetupResult() {} +SetupResult::~SetupResult() = default; void verify_output_type(const TypeMap &object_inputs, const vespalib::string &expression, const FeatureType &expect) diff --git a/searchlib/src/vespa/searchlib/features/rankingexpression/intrinsic_blueprint_adapter.cpp b/searchlib/src/vespa/searchlib/features/rankingexpression/intrinsic_blueprint_adapter.cpp index 018da0e7bcd..4ff9d2f4e30 100644 --- a/searchlib/src/vespa/searchlib/features/rankingexpression/intrinsic_blueprint_adapter.cpp +++ b/searchlib/src/vespa/searchlib/features/rankingexpression/intrinsic_blueprint_adapter.cpp @@ -29,8 +29,11 @@ struct IntrinsicBlueprint : IntrinsicExpression { : blueprint(std::move(blueprint_in)), type(type_in) {} vespalib::string describe_self() const override { return blueprint->getName(); } const FeatureType &result_type() const override { return type; } - FeatureExecutor &create_executor(const QueryEnv &queryEnv, vespalib::Stash &stash) const override { - return blueprint->createExecutor(queryEnv, stash); + void prepare_shared_state(const QueryEnv & env, fef::IObjectStore & store) const override { + blueprint->prepareSharedState(env, store); + } + FeatureExecutor &create_executor(const QueryEnv &env, vespalib::Stash &stash) const override { + return blueprint->createExecutor(env, stash); } }; diff --git a/searchlib/src/vespa/searchlib/features/rankingexpression/intrinsic_expression.h b/searchlib/src/vespa/searchlib/features/rankingexpression/intrinsic_expression.h index 34c4f34b03f..79cb3f9035b 100644 --- a/searchlib/src/vespa/searchlib/features/rankingexpression/intrinsic_expression.h +++ b/searchlib/src/vespa/searchlib/features/rankingexpression/intrinsic_expression.h @@ -11,6 +11,7 @@ namespace search::fef { class FeatureType; class FeatureExecutor; class IQueryEnvironment; +class IObjectStore; } namespace search::features::rankingexpression { @@ -26,8 +27,8 @@ struct IntrinsicExpression { using UP = std::unique_ptr<IntrinsicExpression>; virtual vespalib::string describe_self() const = 0; virtual const FeatureType &result_type() const = 0; - virtual FeatureExecutor &create_executor(const QueryEnv &queryEnv, - vespalib::Stash &stash) const = 0; + virtual void prepare_shared_state(const QueryEnv & env, fef::IObjectStore & store) const = 0; + virtual FeatureExecutor &create_executor(const QueryEnv &queryEnv, vespalib::Stash &stash) const = 0; virtual ~IntrinsicExpression(); }; diff --git a/searchlib/src/vespa/searchlib/features/rankingexpressionfeature.cpp b/searchlib/src/vespa/searchlib/features/rankingexpressionfeature.cpp index ec71ab528a7..2733ec62105 100644 --- a/searchlib/src/vespa/searchlib/features/rankingexpressionfeature.cpp +++ b/searchlib/src/vespa/searchlib/features/rankingexpressionfeature.cpp @@ -282,6 +282,14 @@ RankingExpressionBlueprint::createInstance() const return std::make_unique<RankingExpressionBlueprint>(_expression_replacer); } +void +RankingExpressionBlueprint::prepareSharedState(const fef::IQueryEnvironment & env, fef::IObjectStore & store) const +{ + if (_intrinsic_expression) { + return _intrinsic_expression->prepare_shared_state(env, store); + } +} + fef::FeatureExecutor & RankingExpressionBlueprint::createExecutor(const fef::IQueryEnvironment &env, vespalib::Stash &stash) const { diff --git a/searchlib/src/vespa/searchlib/features/rankingexpressionfeature.h b/searchlib/src/vespa/searchlib/features/rankingexpressionfeature.h index 8d5144206ea..104e8d63a70 100644 --- a/searchlib/src/vespa/searchlib/features/rankingexpressionfeature.h +++ b/searchlib/src/vespa/searchlib/features/rankingexpressionfeature.h @@ -26,7 +26,7 @@ private: public: RankingExpressionBlueprint(); RankingExpressionBlueprint(rankingexpression::ExpressionReplacer::SP replacer); - ~RankingExpressionBlueprint(); + ~RankingExpressionBlueprint() override; void visitDumpFeatures(const fef::IIndexEnvironment &env, fef::IDumpFeatureVisitor &visitor) const override; fef::Blueprint::UP createInstance() const override; @@ -37,6 +37,7 @@ public: } bool setup(const fef::IIndexEnvironment & env, const fef::ParameterList & params) override; + void prepareSharedState(const fef::IQueryEnvironment & queryEnv, fef::IObjectStore & objectStore) const override; fef::FeatureExecutor &createExecutor(const fef::IQueryEnvironment &env, vespalib::Stash &stash) const override; }; |