summaryrefslogtreecommitdiffstats
path: root/searchcore
diff options
context:
space:
mode:
authorTor Egge <Tor.Egge@online.no>2024-02-05 17:29:22 +0100
committerTor Egge <Tor.Egge@online.no>2024-02-05 17:29:22 +0100
commit34a58b7c01bca060fe73c4c20f49765c113063a9 (patch)
tree7b17750cccf481378b2a0e52c639faafa1f71dbb /searchcore
parenta30640c1aed5cbe03b0e992936d39ca0263e93d4 (diff)
Track oldest config generation used for streaming search.
Diffstat (limited to 'searchcore')
-rw-r--r--searchcore/src/apps/proton/proton.cpp18
1 files changed, 15 insertions, 3 deletions
diff --git a/searchcore/src/apps/proton/proton.cpp b/searchcore/src/apps/proton/proton.cpp
index 4c20c40b406..e967c012bbe 100644
--- a/searchcore/src/apps/proton/proton.cpp
+++ b/searchcore/src/apps/proton/proton.cpp
@@ -105,6 +105,7 @@ class ProtonServiceLayerProcess : public storage::ServiceLayerProcess {
FNET_Transport& _transport;
vespalib::string _file_distributor_connection_spec;
metrics::MetricManager* _metricManager;
+ std::weak_ptr<streaming::SearchVisitorFactory> _search_visitor_factory;
public:
ProtonServiceLayerProcess(const config::ConfigUri & configUri,
@@ -137,7 +138,8 @@ ProtonServiceLayerProcess::ProtonServiceLayerProcess(const config::ConfigUri & c
_proton(proton),
_transport(transport),
_file_distributor_connection_spec(file_distributor_connection_spec),
- _metricManager(nullptr)
+ _metricManager(nullptr),
+ _search_visitor_factory()
{
setMetricManager(_proton.getMetricManager());
}
@@ -167,13 +169,23 @@ ProtonServiceLayerProcess::getGeneration() const
{
int64_t slGen = storage::ServiceLayerProcess::getGeneration();
int64_t protonGen = _proton.getConfigGeneration();
- return std::min(slGen, protonGen);
+ int64_t gen = std::min(slGen, protonGen);
+ auto factory = _search_visitor_factory.lock();
+ if (factory) {
+ auto factory_gen = factory->get_oldest_config_generation();
+ if (factory_gen.has_value()) {
+ gen = std::min(gen, factory_gen.value());
+ }
+ }
+ return gen;
}
void
ProtonServiceLayerProcess::add_external_visitors()
{
- _externalVisitors["searchvisitor"] = std::make_shared<streaming::SearchVisitorFactory>(_configUri, &_transport, _file_distributor_connection_spec);
+ auto factory = std::make_shared<streaming::SearchVisitorFactory>(_configUri, &_transport, _file_distributor_connection_spec);
+ _search_visitor_factory = factory;
+ _externalVisitors["searchvisitor"] = factory;
}
namespace {