summaryrefslogtreecommitdiffstats
path: root/persistence
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2020-04-30 07:44:33 +0000
committerHenning Baldersheim <balder@yahoo-inc.com>2020-05-04 12:06:51 +0000
commitf57ad042b46830003497d2b5e47cd5157fa12054 (patch)
tree8bb6586da1c203ce1a8045d50339db6f24277226 /persistence
parent38adff58b5f6f148c0a2d0116e53f38955eaed8d (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.h7
-rw-r--r--persistence/src/vespa/persistence/spi/persistenceprovider.cpp13
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