summaryrefslogtreecommitdiffstats
path: root/searchcore
diff options
context:
space:
mode:
authorTor Egge <Tor.Egge@broadpark.no>2020-10-20 11:08:55 +0200
committerTor Egge <Tor.Egge@broadpark.no>2020-10-20 11:08:55 +0200
commit9b7c1372098851cb099350c1c780458f38cc8470 (patch)
treeb41cfa58b27f2d54e8a7e8afb00628d14f2f11bb /searchcore
parente698e639b67d89f374c7457d87c05012a242de75 (diff)
Allow changing indexing.tasklimit and indexing.semiunboundtasklimit in
proton config without restart.
Diffstat (limited to 'searchcore')
-rw-r--r--searchcore/src/apps/tests/persistenceconformance_test.cpp2
-rw-r--r--searchcore/src/apps/vespa-feed-bm/vespa_feed_bm.cpp3
-rw-r--r--searchcore/src/tests/proton/documentdb/threading_service_config/threading_service_config_test.cpp30
-rw-r--r--searchcore/src/tests/proton/proton_configurer/proton_configurer_test.cpp2
-rw-r--r--searchcore/src/vespa/searchcore/config/proton.def4
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/documentdb.cpp8
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/documentdbconfig.cpp17
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/documentdbconfig.h8
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/documentdbconfigmanager.cpp33
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/threading_service_config.cpp18
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/threading_service_config.h2
-rw-r--r--searchcore/src/vespa/searchcore/proton/test/documentdb_config_builder.cpp5
-rw-r--r--searchcore/src/vespa/searchcore/proton/test/documentdb_config_builder.h1
13 files changed, 119 insertions, 14 deletions
diff --git a/searchcore/src/apps/tests/persistenceconformance_test.cpp b/searchcore/src/apps/tests/persistenceconformance_test.cpp
index 26a44606898..417e47f6bda 100644
--- a/searchcore/src/apps/tests/persistenceconformance_test.cpp
+++ b/searchcore/src/apps/tests/persistenceconformance_test.cpp
@@ -24,6 +24,7 @@
#include <vespa/searchcore/proton/server/fileconfigmanager.h>
#include <vespa/searchcore/proton/server/memoryconfigstore.h>
#include <vespa/searchcore/proton/server/persistencehandlerproxy.h>
+#include <vespa/searchcore/proton/server/threading_service_config.h>
#include <vespa/searchlib/index/dummyfileheadercontext.h>
#include <vespa/searchlib/transactionlog/translogserver.h>
#include <vespa/searchsummary/config/config-juniperrc.h>
@@ -140,6 +141,7 @@ public:
schema,
std::make_shared<DocumentDBMaintenanceConfig>(),
search::LogDocumentStore::Config(),
+ std::make_shared<const ThreadingServiceConfig>(ThreadingServiceConfig::make(1)),
"client",
docTypeName.getName());
}
diff --git a/searchcore/src/apps/vespa-feed-bm/vespa_feed_bm.cpp b/searchcore/src/apps/vespa-feed-bm/vespa_feed_bm.cpp
index 506881ec61e..36b81106ef2 100644
--- a/searchcore/src/apps/vespa-feed-bm/vespa_feed_bm.cpp
+++ b/searchcore/src/apps/vespa-feed-bm/vespa_feed_bm.cpp
@@ -51,6 +51,7 @@
#include <vespa/searchcore/proton/server/fileconfigmanager.h>
#include <vespa/searchcore/proton/server/memoryconfigstore.h>
#include <vespa/searchcore/proton/server/persistencehandlerproxy.h>
+#include <vespa/searchcore/proton/server/threading_service_config.h>
#include <vespa/searchlib/index/dummyfileheadercontext.h>
#include <vespa/searchlib/transactionlog/translogserver.h>
#include <vespa/searchsummary/config/config-juniperrc.h>
@@ -146,6 +147,7 @@ using storage::rpc::StorageApiRpcService;
using storage::spi::PersistenceProvider;
using vespalib::compression::CompressionConfig;
using vespalib::makeLambdaTask;
+using proton::ThreadingServiceConfig;
using DocumentDBMap = std::map<DocTypeName, std::shared_ptr<DocumentDB>>;
@@ -196,6 +198,7 @@ std::shared_ptr<DocumentDBConfig> make_document_db_config(std::shared_ptr<Docume
schema,
std::make_shared<DocumentDBMaintenanceConfig>(),
search::LogDocumentStore::Config(),
+ std::make_shared<const ThreadingServiceConfig>(ThreadingServiceConfig::make(1)),
"client",
doc_type_name.getName());
}
diff --git a/searchcore/src/tests/proton/documentdb/threading_service_config/threading_service_config_test.cpp b/searchcore/src/tests/proton/documentdb/threading_service_config/threading_service_config_test.cpp
index 37ac5f0d65c..a3c031cd5c4 100644
--- a/searchcore/src/tests/proton/documentdb/threading_service_config/threading_service_config_test.cpp
+++ b/searchcore/src/tests/proton/documentdb/threading_service_config/threading_service_config_test.cpp
@@ -14,15 +14,15 @@ using ProtonConfigBuilder = vespa::config::search::core::ProtonConfigBuilder;
struct Fixture {
ProtonConfig cfg;
- Fixture(uint32_t baseLineIndexingThreads = 2)
- : cfg(makeConfig(baseLineIndexingThreads))
+ Fixture(uint32_t baseLineIndexingThreads = 2, uint32_t task_limit = 500, uint32_t semi_unbound_task_limit = 50000)
+ : cfg(makeConfig(baseLineIndexingThreads, task_limit, semi_unbound_task_limit))
{
}
- ProtonConfig makeConfig(uint32_t baseLineIndexingThreads) {
+ ProtonConfig makeConfig(uint32_t baseLineIndexingThreads, uint32_t task_limit, uint32_t semi_unbound_task_limit) {
ProtonConfigBuilder builder;
builder.indexing.threads = baseLineIndexingThreads;
- builder.indexing.tasklimit = 500;
- builder.indexing.semiunboundtasklimit = 50000;
+ builder.indexing.tasklimit = task_limit;
+ builder.indexing.semiunboundtasklimit = semi_unbound_task_limit;
return builder;
}
ThreadingServiceConfig make(uint32_t cpuCores) {
@@ -61,6 +61,26 @@ TEST_F("require that semiunbound task limit is scaled based on indexing threads"
EXPECT_EQUAL(12500u, f.make(24).semiUnboundTaskLimit());
}
+namespace {
+
+void assertConfig(uint32_t exp_indexing_threads, uint32_t exp_default_task_limit, uint32_t exp_semi_unbound_task_limit, const ThreadingServiceConfig &config) {
+ EXPECT_EQUAL(exp_indexing_threads, config.indexingThreads());
+ EXPECT_EQUAL(exp_default_task_limit, config.defaultTaskLimit());
+ EXPECT_EQUAL(exp_semi_unbound_task_limit, config.semiUnboundTaskLimit());
+}
+
+}
+
+TEST_FF("require that config can be somewhat updated", Fixture(), Fixture(2, 1000, 100000))
+{
+ auto cfg1 = f1.make(1);
+ assertConfig(2u, 500u, 25000u, cfg1);
+ const auto cfg2 = f2.make(13);
+ assertConfig(3u, 1000u, 33333u, cfg2);
+ cfg1.update(cfg2);
+ assertConfig(2u, 1000u, 33333u, cfg1); // Indexing threads not changed
+}
+
TEST_MAIN()
{
TEST_RUN_ALL();
diff --git a/searchcore/src/tests/proton/proton_configurer/proton_configurer_test.cpp b/searchcore/src/tests/proton/proton_configurer/proton_configurer_test.cpp
index 6190177ac9d..5a0cfc18c78 100644
--- a/searchcore/src/tests/proton/proton_configurer/proton_configurer_test.cpp
+++ b/searchcore/src/tests/proton/proton_configurer/proton_configurer_test.cpp
@@ -17,6 +17,7 @@
#include <vespa/searchcore/proton/server/proton_configurer.h>
#include <vespa/searchcore/proton/server/i_proton_configurer_owner.h>
#include <vespa/searchcore/proton/server/i_proton_disk_layout.h>
+#include <vespa/searchcore/proton/server/threading_service_config.h>
#include <vespa/searchsummary/config/config-juniperrc.h>
#include <vespa/searchcore/config/config-ranking-constants.h>
#include <vespa/searchcore/config/config-onnx-models.h>
@@ -101,6 +102,7 @@ struct DBConfigFixture {
buildSchema(),
std::make_shared<DocumentDBMaintenanceConfig>(),
search::LogDocumentStore::Config(),
+ std::make_shared<const ThreadingServiceConfig>(ThreadingServiceConfig::make(1)),
configId,
docTypeName);
}
diff --git a/searchcore/src/vespa/searchcore/config/proton.def b/searchcore/src/vespa/searchcore/config/proton.def
index abe774390f0..c558ad2a12f 100644
--- a/searchcore/src/vespa/searchcore/config/proton.def
+++ b/searchcore/src/vespa/searchcore/config/proton.def
@@ -125,14 +125,14 @@ indexing.optimize enum {LATENCY, THROUGHPUT, ADAPTIVE} default=LATENCY restart
## Maximum number of pending operations for each of the internal
## indexing threads. Only used when visibility delay is zero.
-indexing.tasklimit int default=1000 restart
+indexing.tasklimit int default=1000
## Parameter used to calculate maximum number of pending operations
## for each of the internal indexing threads when visibility delay is
## nonzero. The number is divided by the number of indexing threads,
## i.e. when indexing.threads is 4 and indexing.semiunboundtasklimit
## is 40000 then effective task limit is 10000.
-indexing.semiunboundtasklimit int default = 1000 restart
+indexing.semiunboundtasklimit int default = 1000
## Kind of watermark for when to activate extra manpower
## Utilized if optimize is set to either THROUGHPUT or ADAPTIVE
diff --git a/searchcore/src/vespa/searchcore/proton/server/documentdb.cpp b/searchcore/src/vespa/searchcore/proton/server/documentdb.cpp
index c63785faa35..10af2d16764 100644
--- a/searchcore/src/vespa/searchcore/proton/server/documentdb.cpp
+++ b/searchcore/src/vespa/searchcore/proton/server/documentdb.cpp
@@ -136,10 +136,7 @@ DocumentDB::DocumentDB(const vespalib::string &baseDir,
_bucketSpace(bucketSpace),
_baseDir(baseDir + "/" + _docTypeName.toString()),
// Only one thread per executor, or performDropFeedView() will fail.
- _writeServiceConfig(
- ThreadingServiceConfig::make(protonCfg,
- findDocumentDB(protonCfg.documentdb, docTypeName.getName())->feeding.concurrency,
- hwInfo.cpu())),
+ _writeServiceConfig(configSnapshot->get_threading_service_config()),
_writeService(sharedExecutor, _writeServiceConfig, indexing_thread_stack_size),
_initializeThreads(std::move(initializeThreads)),
_initConfigSnapshot(),
@@ -455,6 +452,9 @@ DocumentDB::applyConfig(DocumentDBConfig::SP configSnapshot, SerialNum serialNum
hasVisibilityDelayChanged = (visibilityDelay != _visibility.getVisibilityDelay());
_visibility.setVisibilityDelay(visibilityDelay);
}
+ if (_state.getState() >= DDBState::State::APPLY_LIVE_CONFIG) {
+ _writeServiceConfig.update(configSnapshot->get_threading_service_config());
+ }
if (_visibility.hasVisibilityDelay()) {
_writeService.setTaskLimit(_writeServiceConfig.semiUnboundTaskLimit(), _writeServiceConfig.defaultTaskLimit());
} else {
diff --git a/searchcore/src/vespa/searchcore/proton/server/documentdbconfig.cpp b/searchcore/src/vespa/searchcore/proton/server/documentdbconfig.cpp
index 8bcf8440101..c254672bfd7 100644
--- a/searchcore/src/vespa/searchcore/proton/server/documentdbconfig.cpp
+++ b/searchcore/src/vespa/searchcore/proton/server/documentdbconfig.cpp
@@ -1,6 +1,7 @@
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
#include "documentdbconfig.h"
+#include "threading_service_config.h"
#include <vespa/config-attributes.h>
#include <vespa/config-imported-fields.h>
#include <vespa/config-indexschema.h>
@@ -47,7 +48,8 @@ DocumentDBConfig::ComparisonResult::ComparisonResult()
maintenanceChanged(false),
storeChanged(false),
visibilityDelayChanged(false),
- flushChanged(false)
+ flushChanged(false),
+ threading_service_config_changed(false)
{ }
DocumentDBConfig::DocumentDBConfig(
@@ -67,6 +69,7 @@ DocumentDBConfig::DocumentDBConfig(
const Schema::SP &schema,
const DocumentDBMaintenanceConfig::SP &maintenance,
const search::LogDocumentStore::Config & storeConfig,
+ std::shared_ptr<const ThreadingServiceConfig> threading_service_config,
const vespalib::string &configId,
const vespalib::string &docTypeName)
: _configId(configId),
@@ -87,6 +90,7 @@ DocumentDBConfig::DocumentDBConfig(
_schema(schema),
_maintenance(maintenance),
_storeConfig(storeConfig),
+ _threading_service_config(std::move(threading_service_config)),
_orig(),
_delayedAttributeAspects(false)
{ }
@@ -112,6 +116,7 @@ DocumentDBConfig(const DocumentDBConfig &cfg)
_schema(cfg._schema),
_maintenance(cfg._maintenance),
_storeConfig(cfg._storeConfig),
+ _threading_service_config(cfg._threading_service_config),
_orig(cfg._orig),
_delayedAttributeAspects(false)
{ }
@@ -135,7 +140,8 @@ DocumentDBConfig::operator==(const DocumentDBConfig & rhs) const
equals<TuneFileDocumentDB>(_tuneFileDocumentDB.get(), rhs._tuneFileDocumentDB.get()) &&
equals<Schema>(_schema.get(), rhs._schema.get()) &&
equals<DocumentDBMaintenanceConfig>(_maintenance.get(), rhs._maintenance.get()) &&
- _storeConfig == rhs._storeConfig;
+ _storeConfig == rhs._storeConfig &&
+ equals<ThreadingServiceConfig>(_threading_service_config.get(), rhs._threading_service_config.get());
}
@@ -160,6 +166,7 @@ DocumentDBConfig::compare(const DocumentDBConfig &rhs) const
retval.storeChanged = (_storeConfig != rhs._storeConfig);
retval.visibilityDelayChanged = (_maintenance->getVisibilityDelay() != rhs._maintenance->getVisibilityDelay());
retval.flushChanged = !equals<DocumentDBMaintenanceConfig>(_maintenance.get(), rhs._maintenance.get(), [](const auto &l, const auto &r) { return l.getFlushConfig() == r.getFlushConfig(); });
+ retval.threading_service_config_changed = !equals<ThreadingServiceConfig>(_threading_service_config.get(), rhs._threading_service_config.get());
return retval;
}
@@ -180,7 +187,8 @@ DocumentDBConfig::valid() const
_importedFields &&
_tuneFileDocumentDB &&
_schema &&
- _maintenance;
+ _maintenance &&
+ _threading_service_config;
}
namespace
@@ -223,6 +231,7 @@ DocumentDBConfig::makeReplayConfig(const SP & orig)
o._schema,
o._maintenance,
o._storeConfig,
+ o._threading_service_config,
o._configId,
o._docTypeName);
ret->_orig = orig;
@@ -264,6 +273,7 @@ DocumentDBConfig::newFromAttributesConfig(const AttributesConfigSP &attributes)
_schema,
_maintenance,
_storeConfig,
+ _threading_service_config,
_configId,
_docTypeName);
}
@@ -300,6 +310,7 @@ DocumentDBConfig::makeDelayedAttributeAspectConfig(const SP &newCfg, const Docum
n._schema,
n._maintenance,
n._storeConfig,
+ n._threading_service_config,
n._configId,
n._docTypeName);
result->_delayedAttributeAspects = true;
diff --git a/searchcore/src/vespa/searchcore/proton/server/documentdbconfig.h b/searchcore/src/vespa/searchcore/proton/server/documentdbconfig.h
index 09fdd5b5b0a..daca84d5fd1 100644
--- a/searchcore/src/vespa/searchcore/proton/server/documentdbconfig.h
+++ b/searchcore/src/vespa/searchcore/proton/server/documentdbconfig.h
@@ -29,6 +29,8 @@ namespace document::internal { class InternalDocumenttypesType; }
namespace proton {
+class ThreadingServiceConfig;
+
class DocumentDBConfig
{
public:
@@ -52,6 +54,7 @@ public:
bool storeChanged;
bool visibilityDelayChanged;
bool flushChanged;
+ bool threading_service_config_changed;
ComparisonResult();
ComparisonResult &setRankProfilesChanged(bool val) { rankProfilesChanged = val; return *this; }
@@ -84,6 +87,7 @@ public:
}
return *this;
}
+ ComparisonResult &set_threading_service_config_changed(bool val) { threading_service_config_changed = val; return *this; }
};
using SP = std::shared_ptr<DocumentDBConfig>;
@@ -126,6 +130,7 @@ private:
search::index::Schema::SP _schema;
MaintenanceConfigSP _maintenance;
search::LogDocumentStore::Config _storeConfig;
+ std::shared_ptr<const ThreadingServiceConfig> _threading_service_config;
SP _orig;
bool _delayedAttributeAspects;
@@ -163,6 +168,7 @@ public:
const search::index::Schema::SP &schema,
const DocumentDBMaintenanceConfig::SP &maintenance,
const search::LogDocumentStore::Config & storeConfig,
+ std::shared_ptr<const ThreadingServiceConfig> threading_service_config,
const vespalib::string &configId,
const vespalib::string &docTypeName);
@@ -202,6 +208,8 @@ public:
const MaintenanceConfigSP &getMaintenanceConfigSP() const { return _maintenance; }
const search::TuneFileDocumentDB::SP &getTuneFileDocumentDBSP() const { return _tuneFileDocumentDB; }
bool getDelayedAttributeAspects() const { return _delayedAttributeAspects; }
+ const ThreadingServiceConfig& get_threading_service_config() const { return *_threading_service_config; }
+ const std::shared_ptr<const ThreadingServiceConfig>& get_threading_service_config_shared_ptr() const { return _threading_service_config; }
bool operator==(const DocumentDBConfig &rhs) const;
diff --git a/searchcore/src/vespa/searchcore/proton/server/documentdbconfigmanager.cpp b/searchcore/src/vespa/searchcore/proton/server/documentdbconfigmanager.cpp
index e842e3cdc41..f32a8a180e3 100644
--- a/searchcore/src/vespa/searchcore/proton/server/documentdbconfigmanager.cpp
+++ b/searchcore/src/vespa/searchcore/proton/server/documentdbconfigmanager.cpp
@@ -2,6 +2,7 @@
#include "documentdbconfigmanager.h"
#include "bootstrapconfig.h"
+#include "threading_service_config.h"
#include <vespa/searchcore/proton/common/hw_info.h>
#include <vespa/searchcore/config/config-ranking-constants.h>
#include <vespa/searchcore/config/config-onnx-models.h>
@@ -225,6 +226,30 @@ filterImportedAttributes(const AttributesConfigSP &attrCfg)
return result;
}
+const ProtonConfig::Documentdb default_document_db_config_entry;
+
+const ProtonConfig::Documentdb&
+find_document_db_config_entry(const ProtonConfig::DocumentdbVector& document_dbs, const vespalib::string& doc_type_name) {
+ for (const auto & db_cfg : document_dbs) {
+ if (db_cfg.inputdoctypename == doc_type_name) {
+ return db_cfg;
+ }
+ }
+ return default_document_db_config_entry;
+}
+
+std::shared_ptr<const ThreadingServiceConfig>
+build_threading_service_config(const ProtonConfig &proton_config,
+ const HwInfo &hw_info,
+ const vespalib::string& doc_type_name)
+{
+ auto& document_db_config_entry = find_document_db_config_entry(proton_config.documentdb, doc_type_name);
+ return std::make_shared<const ThreadingServiceConfig>
+ (ThreadingServiceConfig::make(proton_config,
+ document_db_config_entry.feeding.concurrency,
+ hw_info.cpu()));
+}
+
}
void
@@ -247,6 +272,7 @@ DocumentDBConfigManager::update(const ConfigSnapshot &snapshot)
IndexschemaConfigSP newIndexschemaConfig;
MaintenanceConfigSP oldMaintenanceConfig;
MaintenanceConfigSP newMaintenanceConfig;
+ std::shared_ptr<const ThreadingServiceConfig> old_threading_service_config;
if (!_ignoreForwardedConfig) {
if (!(_bootstrapConfig->getDocumenttypesConfigSP() &&
@@ -270,6 +296,7 @@ DocumentDBConfigManager::update(const ConfigSnapshot &snapshot)
newOnnxModels = current->getOnnxModelsSP();
newIndexschemaConfig = current->getIndexschemaConfigSP();
oldMaintenanceConfig = current->getMaintenanceConfigSP();
+ old_threading_service_config = current->get_threading_service_config_shared_ptr();
currentGeneration = current->getGeneration();
}
@@ -348,6 +375,11 @@ DocumentDBConfigManager::update(const ConfigSnapshot &snapshot)
if (newMaintenanceConfig && oldMaintenanceConfig && (*newMaintenanceConfig == *oldMaintenanceConfig)) {
newMaintenanceConfig = oldMaintenanceConfig;
}
+ auto new_threading_service_config = build_threading_service_config(_bootstrapConfig->getProtonConfig(), _bootstrapConfig->getHwInfo(), _docTypeName);
+ if (new_threading_service_config && old_threading_service_config &&
+ (*new_threading_service_config == *old_threading_service_config)) {
+ new_threading_service_config = old_threading_service_config;
+ }
auto newSnapshot = std::make_shared<DocumentDBConfig>(generation,
newRankProfilesConfig,
newRankingConstants,
@@ -364,6 +396,7 @@ DocumentDBConfigManager::update(const ConfigSnapshot &snapshot)
schema,
newMaintenanceConfig,
storeConfig,
+ new_threading_service_config,
_configId,
_docTypeName);
assert(newSnapshot->valid());
diff --git a/searchcore/src/vespa/searchcore/proton/server/threading_service_config.cpp b/searchcore/src/vespa/searchcore/proton/server/threading_service_config.cpp
index 3b268835331..4169f6fe55c 100644
--- a/searchcore/src/vespa/searchcore/proton/server/threading_service_config.cpp
+++ b/searchcore/src/vespa/searchcore/proton/server/threading_service_config.cpp
@@ -71,4 +71,22 @@ ThreadingServiceConfig::make(uint32_t indexingThreads) {
return ThreadingServiceConfig(indexingThreads, 100, 1000, OptimizeFor::LATENCY, 0, 10ms);
}
+void
+ThreadingServiceConfig::update(const ThreadingServiceConfig& cfg)
+{
+ _defaultTaskLimit = cfg._defaultTaskLimit;
+ _semiUnboundTaskLimit = cfg._semiUnboundTaskLimit;
+}
+
+bool
+ThreadingServiceConfig::operator==(const ThreadingServiceConfig &rhs) const
+{
+ return _indexingThreads == rhs._indexingThreads &&
+ _defaultTaskLimit == rhs._defaultTaskLimit &&
+ _semiUnboundTaskLimit == rhs._semiUnboundTaskLimit &&
+ _optimize == rhs._optimize &&
+ _kindOfWatermark == rhs._kindOfWatermark &&
+ _reactionTime == rhs._reactionTime;
+}
+
}
diff --git a/searchcore/src/vespa/searchcore/proton/server/threading_service_config.h b/searchcore/src/vespa/searchcore/proton/server/threading_service_config.h
index 055c3b46549..24551247c4e 100644
--- a/searchcore/src/vespa/searchcore/proton/server/threading_service_config.h
+++ b/searchcore/src/vespa/searchcore/proton/server/threading_service_config.h
@@ -31,12 +31,14 @@ private:
public:
static ThreadingServiceConfig make(const ProtonConfig &cfg, double concurrency, const HwInfo::Cpu &cpuInfo);
static ThreadingServiceConfig make(uint32_t indexingThreads);
+ void update(const ThreadingServiceConfig& cfg);
uint32_t indexingThreads() const { return _indexingThreads; }
uint32_t defaultTaskLimit() const { return _defaultTaskLimit; }
uint32_t semiUnboundTaskLimit() const { return _semiUnboundTaskLimit; }
OptimizeFor optimize() const { return _optimize; }
uint32_t kindOfwatermark() const { return _kindOfWatermark; }
vespalib::duration reactionTime() const { return _reactionTime; }
+ bool operator==(const ThreadingServiceConfig &rhs) const;
};
}
diff --git a/searchcore/src/vespa/searchcore/proton/test/documentdb_config_builder.cpp b/searchcore/src/vespa/searchcore/proton/test/documentdb_config_builder.cpp
index a2366a3cb92..335c7aca24c 100644
--- a/searchcore/src/vespa/searchcore/proton/test/documentdb_config_builder.cpp
+++ b/searchcore/src/vespa/searchcore/proton/test/documentdb_config_builder.cpp
@@ -10,6 +10,7 @@
#include <vespa/searchsummary/config/config-juniperrc.h>
#include <vespa/document/config/config-documenttypes.h>
#include <vespa/config-imported-fields.h>
+#include <vespa/searchcore/proton/server/threading_service_config.h>
using document::DocumenttypesConfig;
using search::TuneFileDocumentDB;
@@ -21,6 +22,7 @@ using vespa::config::search::SummaryConfig;
using vespa::config::search::SummarymapConfig;
using vespa::config::search::summary::JuniperrcConfig;
using vespa::config::search::ImportedFieldsConfig;
+using proton::ThreadingServiceConfig;
namespace proton::test {
@@ -44,6 +46,7 @@ DocumentDBConfigBuilder::DocumentDBConfigBuilder(int64_t generation,
_schema(schema),
_maintenance(std::make_shared<DocumentDBMaintenanceConfig>()),
_store(),
+ _threading_service_config(std::make_shared<const ThreadingServiceConfig>(ThreadingServiceConfig::make(1))),
_configId(configId),
_docTypeName(docTypeName)
{ }
@@ -66,6 +69,7 @@ DocumentDBConfigBuilder::DocumentDBConfigBuilder(const DocumentDBConfig &cfg)
_schema(cfg.getSchemaSP()),
_maintenance(cfg.getMaintenanceConfigSP()),
_store(cfg.getStoreConfig()),
+ _threading_service_config(cfg.get_threading_service_config_shared_ptr()),
_configId(cfg.getConfigId()),
_docTypeName(cfg.getDocTypeName())
{}
@@ -92,6 +96,7 @@ DocumentDBConfigBuilder::build()
_schema,
_maintenance,
_store,
+ _threading_service_config,
_configId,
_docTypeName);
}
diff --git a/searchcore/src/vespa/searchcore/proton/test/documentdb_config_builder.h b/searchcore/src/vespa/searchcore/proton/test/documentdb_config_builder.h
index 68fb5454eef..218a7c56fa9 100644
--- a/searchcore/src/vespa/searchcore/proton/test/documentdb_config_builder.h
+++ b/searchcore/src/vespa/searchcore/proton/test/documentdb_config_builder.h
@@ -27,6 +27,7 @@ private:
search::index::Schema::SP _schema;
DocumentDBConfig::MaintenanceConfigSP _maintenance;
search::LogDocumentStore::Config _store;
+ std::shared_ptr<const ThreadingServiceConfig> _threading_service_config;
vespalib::string _configId;
vespalib::string _docTypeName;