summaryrefslogtreecommitdiffstats
path: root/storage
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2020-10-18 12:54:07 +0000
committerHenning Baldersheim <balder@yahoo-inc.com>2020-10-18 12:54:07 +0000
commitb17c5c96e18ae04a1b39b4d0ec3dc89832038c05 (patch)
treef401ff833fcfaf0dee1852c169671e382b5ed48b /storage
parenta7f45c9843e197c5881ef67fa83e1d23c78daa17 (diff)
Do not retrieve config once for every thread.
Diffstat (limited to 'storage')
-rw-r--r--storage/src/tests/persistence/filestorage/filestormanagertest.cpp3
-rw-r--r--storage/src/tests/persistence/persistencetestutils.cpp5
-rw-r--r--storage/src/vespa/storage/persistence/filestorage/filestormanager.cpp2
-rw-r--r--storage/src/vespa/storage/persistence/mergehandler.cpp23
-rw-r--r--storage/src/vespa/storage/persistence/mergehandler.h9
-rw-r--r--storage/src/vespa/storage/persistence/persistencethread.cpp10
-rw-r--r--storage/src/vespa/storage/persistence/persistencethread.h3
-rw-r--r--storage/src/vespa/storage/persistence/persistenceutil.cpp6
-rw-r--r--storage/src/vespa/storage/persistence/persistenceutil.h4
-rw-r--r--storage/src/vespa/storage/persistence/splitjoinhandler.cpp9
-rw-r--r--storage/src/vespa/storage/persistence/splitjoinhandler.h4
11 files changed, 38 insertions, 40 deletions
diff --git a/storage/src/tests/persistence/filestorage/filestormanagertest.cpp b/storage/src/tests/persistence/filestorage/filestormanagertest.cpp
index ec86c8db679..761888e9f9b 100644
--- a/storage/src/tests/persistence/filestorage/filestormanagertest.cpp
+++ b/storage/src/tests/persistence/filestorage/filestormanagertest.cpp
@@ -202,7 +202,8 @@ createThread(vdstestlib::DirConfig& config,
FileStorThreadMetrics& metrics)
{
(void) config;
- return std::make_unique<PersistenceThread>(node.executor(), node.getComponentRegister(), config.getConfigId(),
+ vespa::config::content::StorFilestorConfig cfg;
+ return std::make_unique<PersistenceThread>(node.executor(), node.getComponentRegister(), cfg,
provider, filestorHandler, notifier, metrics);
}
diff --git a/storage/src/tests/persistence/persistencetestutils.cpp b/storage/src/tests/persistence/persistencetestutils.cpp
index 8d06f25319d..e2d61b9db2c 100644
--- a/storage/src/tests/persistence/persistencetestutils.cpp
+++ b/storage/src/tests/persistence/persistencetestutils.cpp
@@ -56,7 +56,7 @@ PersistenceTestEnvironment::PersistenceTestEnvironment(const std::string & rootO
_node.setupDummyPersistence();
_metrics.initDiskMetrics(1, _node.getLoadTypes()->getMetricLoadTypes(), 1, 1);
_handler = std::make_unique<FileStorHandlerImpl>(_messageKeeper, _metrics, _node.getComponentRegister());
- _diskEnv = std::make_unique<PersistenceUtil>(_config.getConfigId(), _component, *_handler,
+ _diskEnv = std::make_unique<PersistenceUtil>(_component, *_handler,
*_metrics.disks[0]->threads[0], _node.getPersistenceProvider());
}
@@ -89,8 +89,9 @@ PersistenceTestUtils::setupExecutor(uint32_t numThreads) {
std::unique_ptr<PersistenceThread>
PersistenceTestUtils::createPersistenceThread()
{
+ vespa::config::content::StorFilestorConfig cfg;
return std::make_unique<PersistenceThread>(*_sequenceTaskExecutor, _env->_node.getComponentRegister(),
- _env->_config.getConfigId(),getPersistenceProvider(),
+ cfg, getPersistenceProvider(),
getEnv()._fileStorHandler, _bucketOwnershipNotifier, getEnv()._metrics);
}
diff --git a/storage/src/vespa/storage/persistence/filestorage/filestormanager.cpp b/storage/src/vespa/storage/persistence/filestorage/filestormanager.cpp
index 6c2cebfeb19..98b95c16b78 100644
--- a/storage/src/vespa/storage/persistence/filestorage/filestormanager.cpp
+++ b/storage/src/vespa/storage/persistence/filestorage/filestormanager.cpp
@@ -133,7 +133,7 @@ FileStorManager::configure(std::unique_ptr<vespa::config::content::StorFilestorC
assert(_sequencedExecutor);
LOG(spam, "Setting up the disk");
for (uint32_t j = 0; j < numThreads; j++) {
- _threads.push_back(std::make_shared<PersistenceThread>(*_sequencedExecutor, _compReg, _configUri, *_provider,
+ _threads.push_back(std::make_shared<PersistenceThread>(*_sequencedExecutor, _compReg, *_config, *_provider,
*_filestorHandler, *_bucketOwnershipNotifier, *_metrics->disks[0]->threads[j]));
}
}
diff --git a/storage/src/vespa/storage/persistence/mergehandler.cpp b/storage/src/vespa/storage/persistence/mergehandler.cpp
index b2904c6d67b..44ebe4c0901 100644
--- a/storage/src/vespa/storage/persistence/mergehandler.cpp
+++ b/storage/src/vespa/storage/persistence/mergehandler.cpp
@@ -14,21 +14,16 @@ LOG_SETUP(".persistence.mergehandler");
namespace storage {
-MergeHandler::MergeHandler(PersistenceUtil& env, spi::PersistenceProvider& spi)
+MergeHandler::MergeHandler(PersistenceUtil& env, spi::PersistenceProvider& spi, uint32_t maxChunkSize,
+ bool enableMergeLocalNodeChooseDocsOptimalization,
+ uint32_t commonMergeChainOptimalizationMinimumSize)
: _clock(env._component.getClock()),
_clusterName(env._component.getClusterName()),
_env(env),
_spi(spi),
- _maxChunkSize(env._config.bucketMergeChunkSize)
-{
-}
-
-MergeHandler::MergeHandler(PersistenceUtil& env, spi::PersistenceProvider& spi, uint32_t maxChunkSize)
- : _clock(env._component.getClock()),
- _clusterName(env._component.getClusterName()),
- _env(env),
- _spi(spi),
- _maxChunkSize(maxChunkSize)
+ _maxChunkSize(maxChunkSize),
+ _enableMergeLocalNodeChooseDocsOptimalization(enableMergeLocalNodeChooseDocsOptimalization),
+ _commonMergeChainOptimalizationMinimumSize(commonMergeChainOptimalizationMinimumSize)
{
}
@@ -724,7 +719,7 @@ MergeHandler::processBucketMerge(const spi::Bucket& bucket, MergeStatus& status,
// Add all the metadata, and thus use big limit. Max
// data to fetch parameter will control amount added.
uint32_t maxSize =
- (_env._config.enableMergeLocalNodeChooseDocsOptimalization
+ (_enableMergeLocalNodeChooseDocsOptimalization
? std::numeric_limits<uint32_t>::max()
: _maxChunkSize);
@@ -763,7 +758,7 @@ MergeHandler::processBucketMerge(const spi::Bucket& bucket, MergeStatus& status,
++counts[e._hasMask];
}
for (const auto& e : counts) {
- if (e.second >= uint32_t(_env._config.commonMergeChainOptimalizationMinimumSize)
+ if (e.second >= uint32_t(_commonMergeChainOptimalizationMinimumSize)
|| counts.size() == 1)
{
LOG(spam, "Sending separate apply bucket diff for path %x "
@@ -793,7 +788,7 @@ MergeHandler::processBucketMerge(const spi::Bucket& bucket, MergeStatus& status,
}
assert(nodes.size() > 1);
uint32_t maxSize =
- (_env._config.enableMergeLocalNodeChooseDocsOptimalization
+ (_enableMergeLocalNodeChooseDocsOptimalization
? std::numeric_limits<uint32_t>::max()
: _maxChunkSize);
cmd = std::make_shared<api::ApplyBucketDiffCommand>(bucket.getBucket(), nodes, maxSize);
diff --git a/storage/src/vespa/storage/persistence/mergehandler.h b/storage/src/vespa/storage/persistence/mergehandler.h
index 0fca56f639d..9f74a6b93df 100644
--- a/storage/src/vespa/storage/persistence/mergehandler.h
+++ b/storage/src/vespa/storage/persistence/mergehandler.h
@@ -34,9 +34,10 @@ public:
DELETED_IN_PLACE = 0x04
};
- MergeHandler(PersistenceUtil&, spi::PersistenceProvider& spi);
- /** Used for unit testing */
- MergeHandler(PersistenceUtil& env, spi::PersistenceProvider& spi, uint32_t maxChunkSize);
+ MergeHandler(PersistenceUtil& env, spi::PersistenceProvider& spi,
+ uint32_t maxChunkSize = 4190208,
+ bool enableMergeLocalNodeChooseDocsOptimalization = true,
+ uint32_t commonMergeChainOptimalizationMinimumSize = 64);
bool buildBucketInfoList(
const spi::Bucket& bucket,
@@ -69,6 +70,8 @@ private:
PersistenceUtil &_env;
spi::PersistenceProvider &_spi;
uint32_t _maxChunkSize;
+ bool _enableMergeLocalNodeChooseDocsOptimalization;
+ uint32_t _commonMergeChainOptimalizationMinimumSize;
/** Returns a reply if merge is complete */
api::StorageReply::SP processBucketMerge(const spi::Bucket& bucket,
diff --git a/storage/src/vespa/storage/persistence/persistencethread.cpp b/storage/src/vespa/storage/persistence/persistencethread.cpp
index bfa23af5858..6602e9ece4a 100644
--- a/storage/src/vespa/storage/persistence/persistencethread.cpp
+++ b/storage/src/vespa/storage/persistence/persistencethread.cpp
@@ -31,19 +31,21 @@ createThreadName(size_t stripeId) {
PersistenceThread::PersistenceThread(vespalib::ISequencedTaskExecutor & sequencedExecutor,
ServiceLayerComponentRegister& compReg,
- const config::ConfigUri & configUri,
+ const vespa::config::content::StorFilestorConfig & cfg,
spi::PersistenceProvider& provider,
FileStorHandler& filestorHandler,
BucketOwnershipNotifier & bucketOwnershipNotifier,
FileStorThreadMetrics& metrics)
: _stripeId(filestorHandler.getNextStripeId()),
_component(std::make_unique<ServiceLayerComponent>(compReg, createThreadName(_stripeId))),
- _env(configUri, *_component, filestorHandler, metrics, provider),
+ _env(*_component, filestorHandler, metrics, provider),
_spi(provider),
_processAllHandler(_env, provider),
- _mergeHandler(_env, _spi),
+ _mergeHandler(_env, _spi, cfg.bucketMergeChunkSize,
+ cfg.enableMergeLocalNodeChooseDocsOptimalization,
+ cfg.commonMergeChainOptimalizationMinimumSize),
_asyncHandler(_env, _spi, sequencedExecutor),
- _splitJoinHandler(_env, provider, bucketOwnershipNotifier),
+ _splitJoinHandler(_env, provider, bucketOwnershipNotifier, cfg.enableMultibitSplitOptimalization),
_thread()
{
_thread = _component->startThread(*this, 60s, 1s);
diff --git a/storage/src/vespa/storage/persistence/persistencethread.h b/storage/src/vespa/storage/persistence/persistencethread.h
index 6afb58dfc4e..969a17768e2 100644
--- a/storage/src/vespa/storage/persistence/persistencethread.h
+++ b/storage/src/vespa/storage/persistence/persistencethread.h
@@ -13,6 +13,7 @@
#include <vespa/storage/common/storagecomponent.h>
#include <vespa/storage/common/statusmessages.h>
#include <vespa/vespalib/util/isequencedtaskexecutor.h>
+#include <vespa/config-stor-filestor.h>
namespace storage {
@@ -22,7 +23,7 @@ class PersistenceThread final : public DiskThread, public Types
{
public:
PersistenceThread(vespalib::ISequencedTaskExecutor &, ServiceLayerComponentRegister &,
- const config::ConfigUri &, spi::PersistenceProvider &,
+ const vespa::config::content::StorFilestorConfig &, spi::PersistenceProvider &,
FileStorHandler &, BucketOwnershipNotifier &, FileStorThreadMetrics&);
~PersistenceThread() override;
diff --git a/storage/src/vespa/storage/persistence/persistenceutil.cpp b/storage/src/vespa/storage/persistence/persistenceutil.cpp
index 59baf3b4fd3..ba074003b80 100644
--- a/storage/src/vespa/storage/persistence/persistenceutil.cpp
+++ b/storage/src/vespa/storage/persistence/persistenceutil.cpp
@@ -1,8 +1,6 @@
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
#include "persistenceutil.h"
-#include <vespa/config/config.h>
-#include <vespa/config/helper/configgetter.hpp>
#include <vespa/vespalib/util/exceptions.h>
#include <vespa/log/bufferedlogger.h>
@@ -157,13 +155,11 @@ MessageTracker::generateReply(api::StorageCommand& cmd)
}
PersistenceUtil::PersistenceUtil(
- const config::ConfigUri & configUri,
ServiceLayerComponent& component,
FileStorHandler& fileStorHandler,
FileStorThreadMetrics& metrics,
spi::PersistenceProvider& provider)
- : _config(*config::ConfigGetter<vespa::config::content::StorFilestorConfig>::getConfig(configUri.getConfigId(), configUri.getContext())),
- _component(component),
+ : _component(component),
_fileStorHandler(fileStorHandler),
_nodeIndex(component.getIndex()),
_metrics(metrics),
diff --git a/storage/src/vespa/storage/persistence/persistenceutil.h b/storage/src/vespa/storage/persistence/persistenceutil.h
index a98bc1e4e9a..e27419ccc1f 100644
--- a/storage/src/vespa/storage/persistence/persistenceutil.h
+++ b/storage/src/vespa/storage/persistence/persistenceutil.h
@@ -8,8 +8,6 @@
#include <vespa/storage/persistence/filestorage/filestormetrics.h>
#include <vespa/vespalib/io/fileutil.h>
#include <vespa/storage/storageutil/utils.h>
-#include <vespa/config-stor-filestor.h>
-#include <vespa/persistence/spi/persistenceprovider.h>
namespace storage {
@@ -95,7 +93,6 @@ private:
};
struct PersistenceUtil {
- vespa::config::content::StorFilestorConfig _config;
ServiceLayerComponent &_component;
FileStorHandler &_fileStorHandler;
uint16_t _nodeIndex;
@@ -104,7 +101,6 @@ struct PersistenceUtil {
spi::PersistenceProvider &_spi;
PersistenceUtil(
- const config::ConfigUri&,
ServiceLayerComponent&,
FileStorHandler& fileStorHandler,
FileStorThreadMetrics& metrics,
diff --git a/storage/src/vespa/storage/persistence/splitjoinhandler.cpp b/storage/src/vespa/storage/persistence/splitjoinhandler.cpp
index 5b66ffa5929..31f4f8055d5 100644
--- a/storage/src/vespa/storage/persistence/splitjoinhandler.cpp
+++ b/storage/src/vespa/storage/persistence/splitjoinhandler.cpp
@@ -13,10 +13,11 @@ LOG_SETUP(".persistence.splitjoinhandler");
namespace storage {
SplitJoinHandler::SplitJoinHandler(PersistenceUtil & env, spi::PersistenceProvider & spi,
- BucketOwnershipNotifier & notifier)
+ BucketOwnershipNotifier & notifier, bool enableMultibitSplitOptimalization)
: _env(env),
_spi(spi),
- _bucketOwnershipNotifier(notifier)
+ _bucketOwnershipNotifier(notifier),
+ _enableMultibitSplitOptimalization(enableMultibitSplitOptimalization)
{
}
@@ -40,11 +41,11 @@ SplitJoinHandler::handleSplitBucket(api::SplitBucketCommand& cmd, MessageTracker
spi::Bucket spiBucket(cmd.getBucket());
SplitBitDetector::Result targetInfo;
- if (_env._config.enableMultibitSplitOptimalization) {
+ if (_enableMultibitSplitOptimalization) {
targetInfo = SplitBitDetector::detectSplit(_spi, spiBucket, cmd.getMaxSplitBits(),
tracker->context(), cmd.getMinDocCount(), cmd.getMinByteSize());
}
- if (targetInfo.empty() || !_env._config.enableMultibitSplitOptimalization) {
+ if (targetInfo.empty() || !_enableMultibitSplitOptimalization) {
document::BucketId src(cmd.getBucketId());
document::BucketId target1(src.getUsedBits() + 1, src.getId());
document::BucketId target2(src.getUsedBits() + 1, src.getId() | (uint64_t(1) << src.getUsedBits()));
diff --git a/storage/src/vespa/storage/persistence/splitjoinhandler.h b/storage/src/vespa/storage/persistence/splitjoinhandler.h
index b1593931b8f..0d7f593c762 100644
--- a/storage/src/vespa/storage/persistence/splitjoinhandler.h
+++ b/storage/src/vespa/storage/persistence/splitjoinhandler.h
@@ -18,7 +18,8 @@ class RecheckBucketInfoCommand;
*/
class SplitJoinHandler : public Types {
public:
- SplitJoinHandler(PersistenceUtil &, spi::PersistenceProvider &, BucketOwnershipNotifier &);
+ SplitJoinHandler(PersistenceUtil &, spi::PersistenceProvider &,
+ BucketOwnershipNotifier &, bool enableMultibitSplitOptimalization);
MessageTrackerUP handleSplitBucket(api::SplitBucketCommand& cmd, MessageTrackerUP tracker) const;
MessageTrackerUP handleSetBucketState(api::SetBucketStateCommand& cmd, MessageTrackerUP tracker) const;
MessageTrackerUP handleRecheckBucketInfo(RecheckBucketInfoCommand& cmd, MessageTrackerUP tracker) const;
@@ -26,6 +27,7 @@ private:
PersistenceUtil &_env;
spi::PersistenceProvider &_spi;
BucketOwnershipNotifier &_bucketOwnershipNotifier;
+ bool _enableMultibitSplitOptimalization;
};
} // storage