diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2021-10-16 00:19:52 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-10-16 00:19:52 +0200 |
commit | 4d60d2845dba1fcfb2b68bd64a616d50578bf88c (patch) | |
tree | e1bc96e148b3a9d7a12963c3f3d1cf9dabefac94 /persistence | |
parent | bdf432f73eadcdc4b21570ad52d5da3bd3a68fc1 (diff) | |
parent | 7abe325aaf70ea093d81cebbd5828a502691cd18 (diff) |
Merge pull request #19597 from vespa-engine/balder/factor-out-catchresultv7.484.47
Factor out CatchResult
Diffstat (limited to 'persistence')
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>(); |