aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2021-10-15 21:08:01 +0000
committerHenning Baldersheim <balder@yahoo-inc.com>2021-10-15 21:08:01 +0000
commit4ebd712306e770039e5ca8c8a155d031f73b54a6 (patch)
tree3dcdfcc93954aff78bb154838f7cde624227a97e
parent8b65d8a6a47cfef806cd44c3c59e8e14d71c90b9 (diff)
Factor out CatchResult
-rw-r--r--persistence/src/vespa/persistence/spi/CMakeLists.txt1
-rw-r--r--persistence/src/vespa/persistence/spi/catchresult.cpp25
-rw-r--r--persistence/src/vespa/persistence/spi/catchresult.h22
-rw-r--r--persistence/src/vespa/persistence/spi/persistenceprovider.cpp20
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>();