diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2020-04-30 07:44:33 +0000 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2020-05-04 12:06:51 +0000 |
commit | f57ad042b46830003497d2b5e47cd5157fa12054 (patch) | |
tree | 8bb6586da1c203ce1a8045d50339db6f24277226 /persistence | |
parent | 38adff58b5f6f148c0a2d0116e53f38955eaed8d (diff) |
- Implement async put
- Move result processing to MessageTracker
- Wire putAsync through provider error wrapper too.
- Handle both sync and async replies in tests.
Diffstat (limited to 'persistence')
-rw-r--r-- | persistence/src/vespa/persistence/spi/operationcomplete.h | 7 | ||||
-rw-r--r-- | persistence/src/vespa/persistence/spi/persistenceprovider.cpp | 13 |
2 files changed, 17 insertions, 3 deletions
diff --git a/persistence/src/vespa/persistence/spi/operationcomplete.h b/persistence/src/vespa/persistence/spi/operationcomplete.h index fa386e274f2..18a3c250e24 100644 --- a/persistence/src/vespa/persistence/spi/operationcomplete.h +++ b/persistence/src/vespa/persistence/spi/operationcomplete.h @@ -8,6 +8,12 @@ namespace storage::spi { class Result; +class ResultHandler { +public: + virtual ~ResultHandler() = default; + virtual void handle(const Result &) const = 0; +}; + /** * This is the callback interface when using the async operations * in the persistence provider. @@ -18,6 +24,7 @@ public: using UP = std::unique_ptr<OperationComplete>; virtual ~OperationComplete() = default; virtual void onComplete(std::unique_ptr<Result> result) = 0; + virtual void addResultHandler(const ResultHandler * resultHandler) = 0; }; }
\ No newline at end of file diff --git a/persistence/src/vespa/persistence/spi/persistenceprovider.cpp b/persistence/src/vespa/persistence/spi/persistenceprovider.cpp index c60ac615644..b6569d9561c 100644 --- a/persistence/src/vespa/persistence/spi/persistenceprovider.cpp +++ b/persistence/src/vespa/persistence/spi/persistenceprovider.cpp @@ -2,6 +2,7 @@ #include "persistenceprovider.h" #include <future> +#include <cassert> namespace storage::spi { @@ -9,14 +10,20 @@ PersistenceProvider::~PersistenceProvider() = default; class CatchResult : public OperationComplete { public: + CatchResult() : _promisedResult(), _resulthandler(nullptr) {} std::future<Result::UP> future_result() { - return promisedResult.get_future(); + return _promisedResult.get_future(); } void onComplete(Result::UP result) override { - promisedResult.set_value(std::move(result)); + _promisedResult.set_value(std::move(result)); + } + void addResultHandler(const ResultHandler * resultHandler) override { + assert(_resulthandler == nullptr); + _resulthandler = resultHandler; } private: - std::promise<Result::UP> promisedResult; + std::promise<Result::UP> _promisedResult; + const ResultHandler *_resulthandler; }; Result |