diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2021-10-15 14:44:49 +0000 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2021-10-15 14:44:49 +0000 |
commit | 98a41274aace2131b34dad2faf253aa506d313c7 (patch) | |
tree | 785bbfff9ed4f413e9a4637a7a285d43b95a73e8 /persistence/src | |
parent | e138d9f977423cda5a200eab82383d73c20ee05e (diff) |
- Refactor and use CatchResult in the PersistenceEngine in preparation for making more moretaions async.
Diffstat (limited to 'persistence/src')
4 files changed, 49 insertions, 19 deletions
diff --git a/persistence/src/vespa/persistence/spi/CMakeLists.txt b/persistence/src/vespa/persistence/spi/CMakeLists.txt index 14550ef97a6..eda3ffb228f 100644 --- a/persistence/src/vespa/persistence/spi/CMakeLists.txt +++ b/persistence/src/vespa/persistence/spi/CMakeLists.txt @@ -5,6 +5,7 @@ vespa_add_library(persistence_spi OBJECT attribute_resource_usage.cpp bucket.cpp bucketinfo.cpp + catchresult.cpp clusterstate.cpp context.cpp docentry.cpp diff --git a/persistence/src/vespa/persistence/spi/catchresult.cpp b/persistence/src/vespa/persistence/spi/catchresult.cpp new file mode 100644 index 00000000000..3dbe8cfdf7e --- /dev/null +++ b/persistence/src/vespa/persistence/spi/catchresult.cpp @@ -0,0 +1,25 @@ +// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. + +#include "catchresult.h" +#include "result.h" +#include <cassert> + +namespace storage::spi { + +CatchResult::CatchResult() + : _promisedResult(), + _resulthandler(nullptr) +{} +CatchResult::~CatchResult() = default; + +void +CatchResult::onComplete(std::unique_ptr<Result> result) { + _promisedResult.set_value(std::move(result)); +} +void +CatchResult::addResultHandler(const ResultHandler * resultHandler) { + assert(_resulthandler == nullptr); + _resulthandler = resultHandler; +} + +} diff --git a/persistence/src/vespa/persistence/spi/catchresult.h b/persistence/src/vespa/persistence/spi/catchresult.h new file mode 100644 index 00000000000..80d4f863971 --- /dev/null +++ b/persistence/src/vespa/persistence/spi/catchresult.h @@ -0,0 +1,22 @@ +// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. + +#include "operationcomplete.h" +#include <future> + +namespace storage::spi { + +class CatchResult : public OperationComplete { +public: + CatchResult(); + ~CatchResult() override; + std::future<std::unique_ptr<Result>> future_result() { + return _promisedResult.get_future(); + } + void onComplete(std::unique_ptr<Result> result) override; + void addResultHandler(const ResultHandler * resultHandler) override; +private: + std::promise<std::unique_ptr<Result>> _promisedResult; + const ResultHandler *_resulthandler; +}; + +} diff --git a/persistence/src/vespa/persistence/spi/persistenceprovider.cpp b/persistence/src/vespa/persistence/spi/persistenceprovider.cpp index 9d40a494ca6..575a95269c5 100644 --- a/persistence/src/vespa/persistence/spi/persistenceprovider.cpp +++ b/persistence/src/vespa/persistence/spi/persistenceprovider.cpp @@ -1,31 +1,13 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. #include "persistenceprovider.h" +#include "catchresult.h" #include <future> -#include <cassert> namespace storage::spi { PersistenceProvider::~PersistenceProvider() = default; -class CatchResult : public OperationComplete { -public: - CatchResult() : _promisedResult(), _resulthandler(nullptr) {} - std::future<Result::UP> future_result() { - return _promisedResult.get_future(); - } - void onComplete(Result::UP result) override { - _promisedResult.set_value(std::move(result)); - } - void addResultHandler(const ResultHandler * resultHandler) override { - assert(_resulthandler == nullptr); - _resulthandler = resultHandler; - } -private: - std::promise<Result::UP> _promisedResult; - const ResultHandler *_resulthandler; -}; - Result PersistenceProvider::put(const Bucket& bucket, Timestamp timestamp, DocumentSP doc, Context& context) { auto catcher = std::make_unique<CatchResult>(); |