diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2021-01-14 15:46:56 +0000 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2021-01-15 17:41:51 +0000 |
commit | b275087c2a110a1dc9aca0662f7ed01e2e7928ec (patch) | |
tree | 3ecc31d93e2cdae2d73d3da251d84d35d75baf5a | |
parent | dfeaed2d8926952e1898f5d75df2a4e83a2a5ff2 (diff) |
- Add an BucketExecutor interface taking a bucket and a BucketTask for executing a task by the content layer.
- Add method to register this interface.
- Minor followups after PR review.
- Avoid including the world when not necessary to avoid having to recompile everyting for the smallest unrelated change.
28 files changed, 115 insertions, 73 deletions
diff --git a/persistence/src/vespa/persistence/spi/abstractpersistenceprovider.h b/persistence/src/vespa/persistence/spi/abstractpersistenceprovider.h index 016928ab10e..6bb24f582e3 100644 --- a/persistence/src/vespa/persistence/spi/abstractpersistenceprovider.h +++ b/persistence/src/vespa/persistence/spi/abstractpersistenceprovider.h @@ -48,6 +48,8 @@ public: * Default impl empty. */ BucketIdListResult getModifiedBuckets(BucketSpace bucketSpace) const override; + + std::unique_ptr<vespalib::IDestructorCallback> register_executor(std::shared_ptr<BucketExecutor>) override { return {}; } }; } diff --git a/persistence/src/vespa/persistence/spi/bucketexecutor.h b/persistence/src/vespa/persistence/spi/bucketexecutor.h new file mode 100644 index 00000000000..318bec641fe --- /dev/null +++ b/persistence/src/vespa/persistence/spi/bucketexecutor.h @@ -0,0 +1,31 @@ +// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. + +#pragma once + +#include "bucket.h" +#include "operationcomplete.h" + +namespace storage::spi { + + +/** + * Task that will be run in thread from content layer. + * It will hold a bucket lock while run. At token is provided + * for optional async completion. It must not be destructed until + * you no longer require the bucket lock. + */ +class BucketTask { +public: + virtual ~BucketTask() = default; + virtual void run(const Bucket & bucket, std::unique_ptr<OperationComplete> onComplete) = 0; +}; + +/** + * Interface for running a BucketTask + */ +struct BucketExecutor { + virtual ~BucketExecutor() = default; + virtual void execute(const Bucket & bucket, std::unique_ptr<BucketTask> task) = 0; +}; + +} diff --git a/persistence/src/vespa/persistence/spi/operationcomplete.h b/persistence/src/vespa/persistence/spi/operationcomplete.h index 18a3c250e24..5a9b8d258df 100644 --- a/persistence/src/vespa/persistence/spi/operationcomplete.h +++ b/persistence/src/vespa/persistence/spi/operationcomplete.h @@ -1,4 +1,4 @@ -// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.#pragma once +// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. #pragma once @@ -27,4 +27,4 @@ public: virtual void addResultHandler(const ResultHandler * resultHandler) = 0; }; -}
\ No newline at end of file +} diff --git a/persistence/src/vespa/persistence/spi/package.json b/persistence/src/vespa/persistence/spi/package.json new file mode 100644 index 00000000000..ca831b328c1 --- /dev/null +++ b/persistence/src/vespa/persistence/spi/package.json @@ -0,0 +1,6 @@ +{ + "name": "spi", + "version": "1.0.0", + "dependencies": { + } +} diff --git a/persistence/src/vespa/persistence/spi/persistenceprovider.h b/persistence/src/vespa/persistence/spi/persistenceprovider.h index 2fc0713abe8..9ba752c2579 100644 --- a/persistence/src/vespa/persistence/spi/persistenceprovider.h +++ b/persistence/src/vespa/persistence/spi/persistenceprovider.h @@ -10,6 +10,8 @@ #include "selection.h" #include "clusterstate.h" #include "operationcomplete.h" +#include "bucketexecutor.h" +#include <vespa/vespalib/util/idestructorcallback.h> namespace document { class FieldSet; } namespace vespalib { class IDestructorCallback; } @@ -384,6 +386,11 @@ struct PersistenceProvider */ virtual std::unique_ptr<vespalib::IDestructorCallback> register_resource_usage_listener(IResourceUsageListener& listener) = 0; + /** + * Provides an execute interface that can be used by the provider to execute tasks while bucket guarantees are upheld. + * When the returned object goes out of scope the executor is deregistered. + */ + [[nodiscard]] virtual std::unique_ptr<vespalib::IDestructorCallback> register_executor(std::shared_ptr<BucketExecutor> executor) = 0; }; } diff --git a/persistence/src/vespa/persistence/spi/providerfactory.h b/persistence/src/vespa/persistence/spi/providerfactory.h deleted file mode 100644 index 8be143851dd..00000000000 --- a/persistence/src/vespa/persistence/spi/providerfactory.h +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -/** - * \class storage::spi::ProviderFactory - * \ingroup spi - * - * \brief Factory class to generate a persistence provider interface - */ - -#pragma once - -#include "persistenceprovider.h" - -namespace document { class DocumentTypeRepo; } - -namespace storage::spi { - -struct ProviderFactory { - virtual ~ProviderFactory() {} - - virtual PersistenceProvider::UP createProviderInstance( - document::DocumentTypeRepo&) = 0; -}; - -} // spi -} // storage - - diff --git a/searchcore/src/vespa/searchcore/proton/server/lid_space_compaction_job.h b/searchcore/src/vespa/searchcore/proton/server/lid_space_compaction_job.h index 35549f21471..ea92d6ef915 100644 --- a/searchcore/src/vespa/searchcore/proton/server/lid_space_compaction_job.h +++ b/searchcore/src/vespa/searchcore/proton/server/lid_space_compaction_job.h @@ -46,8 +46,6 @@ private: search::DocumentMetaData getNextDocument(const search::LidUsageStats &stats); bool scanDocuments(const search::LidUsageStats &stats); void compactLidSpace(const search::LidUsageStats &stats); - void refreshRunnable(); - void refreshAndConsiderRunnable(); bool remove_batch_is_ongoing() const; bool remove_is_ongoing() const; diff --git a/storage/src/tests/common/teststorageapp.h b/storage/src/tests/common/teststorageapp.h index 4a49b5d7953..b5295fe94a3 100644 --- a/storage/src/tests/common/teststorageapp.h +++ b/storage/src/tests/common/teststorageapp.h @@ -20,7 +20,7 @@ #include "testnodestateupdater.h" #include <vespa/document/base/testdocman.h> #include <vespa/document/bucket/fixed_bucket_spaces.h> -#include <vespa/persistence/spi/persistenceprovider.h> +#include <persistence/spi/types.h> #include <vespa/storage/bucketdb/storbucketdb.h> #include <vespa/storage/common/doneinitializehandler.h> #include <vespa/storage/common/node_identity.h> @@ -34,6 +34,7 @@ namespace storage { +namespace spi { class PersistenceProvider; } class StorageBucketDBInitializer; DEFINE_PRIMITIVE_WRAPPER(uint16_t, NodeIndex); diff --git a/storage/src/tests/persistence/common/filestortestfixture.h b/storage/src/tests/persistence/common/filestortestfixture.h index 69866f7bbf2..8bb3cf8b9fe 100644 --- a/storage/src/tests/persistence/common/filestortestfixture.h +++ b/storage/src/tests/persistence/common/filestortestfixture.h @@ -4,7 +4,6 @@ #include <tests/common/dummystoragelink.h> #include <tests/common/testhelper.h> #include <tests/common/teststorageapp.h> -#include <vespa/persistence/spi/persistenceprovider.h> #include <vespa/storage/persistence/filestorage/filestorhandlerimpl.h> #include <vespa/storage/persistence/filestorage/filestormanager.h> #include <vespa/storageapi/message/persistence.h> diff --git a/storage/src/tests/persistence/persistencetestutils.h b/storage/src/tests/persistence/persistencetestutils.h index 29f77048b51..b7d52bcf241 100644 --- a/storage/src/tests/persistence/persistencetestutils.h +++ b/storage/src/tests/persistence/persistencetestutils.h @@ -9,19 +9,19 @@ #include <vespa/storage/persistence/bucketownershipnotifier.h> #include <vespa/storage/common/messagesender.h> #include <vespa/storage/common/storagecomponent.h> -#include <vespa/persistence/spi/persistenceprovider.h> -#include <vespa/persistence/dummyimpl/dummypersistence.h> -#include <vespa/storage/storageserver/communicationmanager.h> +#include <vespa/storage/common/storagelink.h> +#include <vespa/storageapi/messageapi/storagecommand.h> +#include <vespa/storageapi/messageapi/storagereply.h> #include <vespa/document/base/testdocman.h> #include <vespa/vespalib/gtest/gtest.h> namespace storage { struct MessageKeeper : public MessageSender { - std::vector<api::StorageMessage::SP> _msgs; + std::vector<std::shared_ptr<api::StorageMessage>> _msgs; - void sendCommand(const api::StorageCommand::SP& m) override { _msgs.push_back(m); } - void sendReply(const api::StorageReply::SP& m) override { _msgs.push_back(m); } + void sendCommand(const std::shared_ptr<api::StorageCommand> & m) override { _msgs.push_back(m); } + void sendReply(const std::shared_ptr<api::StorageReply> & m) override { _msgs.push_back(m); } }; struct PersistenceTestEnvironment { diff --git a/storage/src/tests/persistence/persistencethread_splittest.cpp b/storage/src/tests/persistence/persistencethread_splittest.cpp index 45b9f5aeaac..7d83bacd44c 100644 --- a/storage/src/tests/persistence/persistencethread_splittest.cpp +++ b/storage/src/tests/persistence/persistencethread_splittest.cpp @@ -3,6 +3,7 @@ #include <vespa/storage/persistence/persistencehandler.h> #include <vespa/storageapi/message/bucketsplitting.h> #include <vespa/persistence/spi/test.h> +#include <vespa/persistence/spi/persistenceprovider.h> #include <tests/persistence/persistencetestutils.h> #include <vespa/document/test/make_document_bucket.h> diff --git a/storage/src/tests/persistence/testandsettest.cpp b/storage/src/tests/persistence/testandsettest.cpp index 4b509033d2e..18c083bba82 100644 --- a/storage/src/tests/persistence/testandsettest.cpp +++ b/storage/src/tests/persistence/testandsettest.cpp @@ -9,6 +9,7 @@ #include <vespa/document/update/assignvalueupdate.h> #include <vespa/document/fieldset/fieldsets.h> #include <vespa/persistence/spi/test.h> +#include <vespa/persistence/spi/persistenceprovider.h> #include <functional> using std::unique_ptr; diff --git a/storage/src/vespa/storage/persistence/asynchandler.cpp b/storage/src/vespa/storage/persistence/asynchandler.cpp index 5ec1623c599..e7f7321a422 100644 --- a/storage/src/vespa/storage/persistence/asynchandler.cpp +++ b/storage/src/vespa/storage/persistence/asynchandler.cpp @@ -3,6 +3,7 @@ #include "asynchandler.h" #include "persistenceutil.h" #include "testandsethelper.h" +#include <vespa/persistence/spi/persistenceprovider.h> #include <vespa/document/update/documentupdate.h> #include <vespa/vespalib/util/isequencedtaskexecutor.h> diff --git a/storage/src/vespa/storage/persistence/bucketprocessor.cpp b/storage/src/vespa/storage/persistence/bucketprocessor.cpp index 33706e69701..d86ff18a11d 100644 --- a/storage/src/vespa/storage/persistence/bucketprocessor.cpp +++ b/storage/src/vespa/storage/persistence/bucketprocessor.cpp @@ -2,6 +2,7 @@ #include "bucketprocessor.h" #include <vespa/document/fieldset/fieldsets.h> +#include <vespa/persistence/spi/persistenceprovider.h> #include <vespa/vespalib/stllike/asciistream.h> #include <cassert> #include <stdexcept> diff --git a/storage/src/vespa/storage/persistence/bucketprocessor.h b/storage/src/vespa/storage/persistence/bucketprocessor.h index 0f15b4a222d..5b96696475e 100644 --- a/storage/src/vespa/storage/persistence/bucketprocessor.h +++ b/storage/src/vespa/storage/persistence/bucketprocessor.h @@ -6,7 +6,12 @@ */ #pragma once -#include <vespa/persistence/spi/persistenceprovider.h> +#include <vespa/persistence/spi/bucket.h> +#include <vespa/persistence/spi/docentry.h> +#include <vespa/persistence/spi/context.h> + +namespace document { class FieldSet; } +namespace storage::spi { class PersistenceProvider; } namespace storage { diff --git a/storage/src/vespa/storage/persistence/filestorage/filestormanager.cpp b/storage/src/vespa/storage/persistence/filestorage/filestormanager.cpp index 1e858943ce8..f378e750f62 100644 --- a/storage/src/vespa/storage/persistence/filestorage/filestormanager.cpp +++ b/storage/src/vespa/storage/persistence/filestorage/filestormanager.cpp @@ -12,6 +12,7 @@ #include <vespa/storage/persistence/bucketownershipnotifier.h> #include <vespa/storage/persistence/persistencethread.h> #include <vespa/storage/persistence/persistencehandler.h> +#include <vespa/storage/persistence/provider_error_wrapper.h> #include <vespa/storageapi/message/bucketsplitting.h> #include <vespa/storageapi/message/state.h> #include <vespa/storageapi/message/persistence.h> @@ -43,7 +44,7 @@ FileStorManager(const config::ConfigUri & configUri, spi::PersistenceProvider& p framework::HtmlStatusReporter("filestorman", "File store manager"), _compReg(compReg), _component(compReg, "filestormanager"), - _provider(provider), + _provider(std::make_unique<ProviderErrorWrapper>(provider)), _init_handler(init_handler), _bucketIdFactory(_component.getBucketIdFactory()), _persistenceHandlers(), @@ -92,6 +93,11 @@ FileStorManager::print(std::ostream& out, bool , const std::string& ) const out << "FileStorManager"; } +ProviderErrorWrapper & +FileStorManager::error_wrapper() noexcept { + return static_cast<ProviderErrorWrapper &>(*_provider); +} + namespace { uint32_t computeNumResponseThreads(int configured) { @@ -137,7 +143,7 @@ FileStorManager::createRegisteredHandler(const ServiceLayerComponent & component assert(index < _metrics->disk->threads.size()); _persistenceHandlers.push_back( std::make_unique<PersistenceHandler>(*_sequencedExecutor, component, - *_config, _provider, *_filestorHandler, + *_config, *_provider, *_filestorHandler, *_bucketOwnershipNotifier, *_metrics->disk->threads[index])); return *_persistenceHandlers.back(); } @@ -672,7 +678,7 @@ FileStorManager::onInternal(const shared_ptr<api::InternalCommand>& msg) { spi::Context context(msg->getPriority(), msg->getTrace().getLevel()); shared_ptr<DestroyIteratorCommand> cmd(std::static_pointer_cast<DestroyIteratorCommand>(msg)); - _provider.destroyIterator(cmd->getIteratorId(), context); + _provider->destroyIterator(cmd->getIteratorId(), context); msg->getTrace().addChild(context.steal_trace()); return true; } @@ -871,7 +877,7 @@ FileStorManager::updateState() } contentBucketSpace.setNodeUpInLastNodeStateSeenByProvider(nodeUp); spi::ClusterState spiState(*derivedClusterState, _component.getIndex(), *contentBucketSpace.getDistribution()); - _provider.setClusterState(bucketSpace, spiState); + _provider->setClusterState(bucketSpace, spiState); } } @@ -911,7 +917,7 @@ void FileStorManager::initialize_bucket_databases_from_provider() { size_t bucket_count = 0; for (const auto& elem : _component.getBucketSpaceRepo()) { const auto bucket_space = elem.first; - const auto bucket_result = _provider.listBuckets(bucket_space); + const auto bucket_result = _provider->listBuckets(bucket_space); assert(!bucket_result.hasError()); const auto& buckets = bucket_result.getList(); LOG(debug, "Fetching bucket info for %zu buckets in space '%s'", @@ -925,7 +931,7 @@ void FileStorManager::initialize_bucket_databases_from_provider() { StorBucketDatabase::CREATE_IF_NONEXISTING); assert(!entry.preExisted()); auto spi_bucket = spi::Bucket(document::Bucket(bucket_space, bucket)); - auto provider_result = _provider.getBucketInfo(spi_bucket); + auto provider_result = _provider->getBucketInfo(spi_bucket); assert(!provider_result.hasError()); entry->setBucketInfo(PersistenceUtil::convertBucketInfo(provider_result.getBucketInfo())); entry.write(); diff --git a/storage/src/vespa/storage/persistence/filestorage/filestormanager.h b/storage/src/vespa/storage/persistence/filestorage/filestormanager.h index 7a19d837979..b757227e27d 100644 --- a/storage/src/vespa/storage/persistence/filestorage/filestormanager.h +++ b/storage/src/vespa/storage/persistence/filestorage/filestormanager.h @@ -12,7 +12,6 @@ #include <vespa/vespalib/util/document_runnable.h> #include <vespa/vespalib/util/isequencedtaskexecutor.h> #include <vespa/document/bucket/bucketid.h> -#include <vespa/persistence/spi/persistenceprovider.h> #include <vespa/storage/bucketdb/storbucketdb.h> #include <vespa/storage/common/messagesender.h> #include <vespa/storage/common/servicelayercomponent.h> @@ -21,7 +20,6 @@ #include <vespa/config-stor-filestor.h> #include <vespa/storage/persistence/diskthread.h> -#include <vespa/storage/persistence/provider_error_wrapper.h> #include <vespa/storage/common/nodestateupdater.h> #include <vespa/storageframework/generic/status/htmlstatusreporter.h> @@ -35,6 +33,7 @@ namespace api { class StorageReply; class BucketCommand; } +namespace spi { class PersistenceProvider; } struct FileStorManagerTest; class ReadBucketList; @@ -43,6 +42,7 @@ class AbortBucketOperationsCommand; struct DoneInitializeHandler; class PersistenceHandler; struct FileStorMetrics; +class ProviderErrorWrapper; class FileStorManager : public StorageLinkQueued, public framework::HtmlStatusReporter, @@ -50,15 +50,15 @@ class FileStorManager : public StorageLinkQueued, private config::IFetcherCallback<vespa::config::content::StorFilestorConfig>, public MessageSender { - ServiceLayerComponentRegister & _compReg; - ServiceLayerComponent _component; - ProviderErrorWrapper _provider; - DoneInitializeHandler& _init_handler; - const document::BucketIdFactory & _bucketIdFactory; + ServiceLayerComponentRegister & _compReg; + ServiceLayerComponent _component; + std::unique_ptr<spi::PersistenceProvider> _provider; + DoneInitializeHandler & _init_handler; + const document::BucketIdFactory & _bucketIdFactory; std::vector<std::unique_ptr<PersistenceHandler>> _persistenceHandlers; std::vector<std::unique_ptr<DiskThread>> _threads; - std::unique_ptr<BucketOwnershipNotifier> _bucketOwnershipNotifier; + std::unique_ptr<BucketOwnershipNotifier> _bucketOwnershipNotifier; std::unique_ptr<vespa::config::content::StorFilestorConfig> _config; config::ConfigFetcher _configFetcher; @@ -79,16 +79,14 @@ public: void print(std::ostream& out, bool verbose, const std::string& indent) const override; - FileStorHandler& getFileStorHandler() { + FileStorHandler& getFileStorHandler() noexcept { return *_filestorHandler; }; - spi::PersistenceProvider& getPersistenceProvider() { - return _provider; - } - ProviderErrorWrapper& error_wrapper() noexcept { - return _provider; + spi::PersistenceProvider& getPersistenceProvider() noexcept { + return *_provider; } + ProviderErrorWrapper& error_wrapper() noexcept; void handleNewState() override; diff --git a/storage/src/vespa/storage/persistence/filestorage/modifiedbucketchecker.cpp b/storage/src/vespa/storage/persistence/filestorage/modifiedbucketchecker.cpp index 66a122ec666..f09ebf27c3d 100644 --- a/storage/src/vespa/storage/persistence/filestorage/modifiedbucketchecker.cpp +++ b/storage/src/vespa/storage/persistence/filestorage/modifiedbucketchecker.cpp @@ -2,6 +2,7 @@ #include "modifiedbucketchecker.h" #include "filestormanager.h" +#include <vespa/persistence/spi/persistenceprovider.h> #include <vespa/config/common/exceptions.h> #include <algorithm> diff --git a/storage/src/vespa/storage/persistence/mergehandler.cpp b/storage/src/vespa/storage/persistence/mergehandler.cpp index d4d4dd5e62b..6d580ead659 100644 --- a/storage/src/vespa/storage/persistence/mergehandler.cpp +++ b/storage/src/vespa/storage/persistence/mergehandler.cpp @@ -5,6 +5,7 @@ #include "apply_bucket_diff_entry_complete.h" #include "apply_bucket_diff_entry_result.h" #include <vespa/storage/persistence/filestorage/mergestatus.h> +#include <vespa/persistence/spi/persistenceprovider.h> #include <vespa/vespalib/stllike/asciistream.h> #include <vespa/vdslib/distribution/distribution.h> #include <vespa/document/fieldset/fieldsets.h> diff --git a/storage/src/vespa/storage/persistence/persistencehandler.h b/storage/src/vespa/storage/persistence/persistencehandler.h index 29f09c47fc4..9e5eefa8c7e 100644 --- a/storage/src/vespa/storage/persistence/persistencehandler.h +++ b/storage/src/vespa/storage/persistence/persistencehandler.h @@ -6,7 +6,6 @@ #include "mergehandler.h" #include "asynchandler.h" #include "persistenceutil.h" -#include "provider_error_wrapper.h" #include "splitjoinhandler.h" #include "simplemessagehandler.h" #include <vespa/storage/common/storagecomponent.h> diff --git a/storage/src/vespa/storage/persistence/persistenceutil.cpp b/storage/src/vespa/storage/persistence/persistenceutil.cpp index 6e0004af88a..b50abce528a 100644 --- a/storage/src/vespa/storage/persistence/persistenceutil.cpp +++ b/storage/src/vespa/storage/persistence/persistenceutil.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 "persistenceutil.h" +#include <vespa/persistence/spi/persistenceprovider.h> #include <vespa/storageapi/messageapi/bucketinforeply.h> #include <vespa/vespalib/util/exceptions.h> diff --git a/storage/src/vespa/storage/persistence/persistenceutil.h b/storage/src/vespa/storage/persistence/persistenceutil.h index 47233b0ded6..99133073a19 100644 --- a/storage/src/vespa/storage/persistence/persistenceutil.h +++ b/storage/src/vespa/storage/persistence/persistenceutil.h @@ -2,12 +2,13 @@ #pragma once #include "types.h" -#include <vespa/persistence/spi/persistenceprovider.h> #include <vespa/storage/common/servicelayercomponent.h> #include <vespa/storage/persistence/filestorage/filestorhandler.h> #include <vespa/storage/persistence/filestorage/filestormetrics.h> #include <vespa/storageframework/generic/clock/timer.h> #include <vespa/storageapi/messageapi/returncode.h> +#include <vespa/persistence/spi/result.h> +#include <vespa/persistence/spi/context.h> #include <vespa/vespalib/io/fileutil.h> #include <vespa/storage/storageutil/utils.h> @@ -15,8 +16,12 @@ namespace storage::api { class StorageMessage; class StorageReply; } -namespace storage { +namespace storage::spi { + class PersistenceProvider; +} + +namespace storage { class PersistenceUtil; diff --git a/storage/src/vespa/storage/persistence/provider_error_wrapper.cpp b/storage/src/vespa/storage/persistence/provider_error_wrapper.cpp index cf83741f5bb..ada57b66f41 100644 --- a/storage/src/vespa/storage/persistence/provider_error_wrapper.cpp +++ b/storage/src/vespa/storage/persistence/provider_error_wrapper.cpp @@ -200,4 +200,10 @@ ProviderErrorWrapper::updateAsync(const spi::Bucket &bucket, spi::Timestamp ts, _impl.updateAsync(bucket, ts, std::move(upd), context, std::move(onComplete)); } +std::unique_ptr<vespalib::IDestructorCallback> +ProviderErrorWrapper::register_executor(std::shared_ptr<spi::BucketExecutor> executor) +{ + return _impl.register_executor(std::move(executor)); +} + } // ns storage diff --git a/storage/src/vespa/storage/persistence/provider_error_wrapper.h b/storage/src/vespa/storage/persistence/provider_error_wrapper.h index fa24dbeea45..b7c9204caf1 100644 --- a/storage/src/vespa/storage/persistence/provider_error_wrapper.h +++ b/storage/src/vespa/storage/persistence/provider_error_wrapper.h @@ -61,20 +61,13 @@ public: std::unique_ptr<vespalib::IDestructorCallback> register_resource_usage_listener(spi::IResourceUsageListener& listener) override; spi::Result removeEntry(const spi::Bucket&, spi::Timestamp, spi::Context&) override; - spi::PersistenceProvider& getProviderImplementation() { - return _impl; - } - const spi::PersistenceProvider& getProviderImplementation() const { - return _impl; - } - void register_error_listener(std::shared_ptr<ProviderErrorListener> listener); void putAsync(const spi::Bucket &, spi::Timestamp, spi::DocumentSP, spi::Context &, spi::OperationComplete::UP) override; void removeAsync(const spi::Bucket&, spi::Timestamp, const document::DocumentId&, spi::Context&, spi::OperationComplete::UP) override; void removeIfFoundAsync(const spi::Bucket&, spi::Timestamp, const document::DocumentId&, spi::Context&, spi::OperationComplete::UP) override; void updateAsync(const spi::Bucket &, spi::Timestamp, spi::DocumentUpdateSP, spi::Context &, spi::OperationComplete::UP) override; - + std::unique_ptr<vespalib::IDestructorCallback> register_executor(std::shared_ptr<spi::BucketExecutor> executor) override; private: template <typename ResultType> ResultType checkResult(ResultType&& result) const; diff --git a/storage/src/vespa/storage/persistence/splitbitdetector.cpp b/storage/src/vespa/storage/persistence/splitbitdetector.cpp index fdf86f61639..e004c6ff36b 100644 --- a/storage/src/vespa/storage/persistence/splitbitdetector.cpp +++ b/storage/src/vespa/storage/persistence/splitbitdetector.cpp @@ -2,6 +2,7 @@ #include "splitbitdetector.h" #include "bucketprocessor.h" +#include <vespa/persistence/spi/persistenceprovider.h> #include <vespa/document/bucket/bucketidfactory.h> #include <vespa/document/base/documentid.h> #include <vespa/document/fieldset/fieldsets.h> diff --git a/storage/src/vespa/storage/persistence/splitbitdetector.h b/storage/src/vespa/storage/persistence/splitbitdetector.h index 6f1af6c5970..d2c415fc526 100644 --- a/storage/src/vespa/storage/persistence/splitbitdetector.h +++ b/storage/src/vespa/storage/persistence/splitbitdetector.h @@ -17,11 +17,14 @@ */ #pragma once -#include <vespa/persistence/spi/persistenceprovider.h> +#include <vespa/persistence/spi/bucket.h> +#include <vespa/persistence/spi/context.h> #include <vespa/vespalib/util/printable.h> namespace storage { +namespace spi { class PersistenceProvider; } + struct SplitBitDetector { enum ResultType { diff --git a/storage/src/vespa/storage/persistence/testandsethelper.cpp b/storage/src/vespa/storage/persistence/testandsethelper.cpp index 66b8dbd83fc..00a48d83e3a 100644 --- a/storage/src/vespa/storage/persistence/testandsethelper.cpp +++ b/storage/src/vespa/storage/persistence/testandsethelper.cpp @@ -4,6 +4,7 @@ #include "testandsethelper.h" #include "persistenceutil.h" #include "fieldvisitor.h" +#include <vespa/persistence/spi/persistenceprovider.h> #include <vespa/document/select/parser.h> #include <vespa/document/repo/documenttyperepo.h> #include <vespa/vespalib/util/stringfmt.h> diff --git a/storage/src/vespa/storage/storageserver/servicelayernode.h b/storage/src/vespa/storage/storageserver/servicelayernode.h index 2d98b8f9345..f75cf867327 100644 --- a/storage/src/vespa/storage/storageserver/servicelayernode.h +++ b/storage/src/vespa/storage/storageserver/servicelayernode.h @@ -13,11 +13,12 @@ #include "storagenode.h" #include <vespa/storage/visiting/visitormessagesessionfactory.h> #include <vespa/storage/common/visitorfactory.h> -#include <vespa/persistence/spi/persistenceprovider.h> #include <vespa/config/config.h> namespace storage { +namespace spi { class PersistenceProvider; } + class FileStorManager; class ServiceLayerNode |