aboutsummaryrefslogtreecommitdiffstats
path: root/persistence
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2021-10-17 09:56:08 +0000
committerHenning Baldersheim <balder@yahoo-inc.com>2021-10-17 09:56:08 +0000
commitd0c01828bf846d555ba648c342e58f2aa71b6cc7 (patch)
tree134f0aaa67d6e6d678970db09d222aa6edcf64d6 /persistence
parent4d60d2845dba1fcfb2b68bd64a616d50578bf88c (diff)
Make setActiveState async.
Diffstat (limited to 'persistence')
-rw-r--r--persistence/src/vespa/persistence/dummyimpl/dummypersistence.cpp14
-rw-r--r--persistence/src/vespa/persistence/dummyimpl/dummypersistence.h2
-rw-r--r--persistence/src/vespa/persistence/spi/abstractpersistenceprovider.cpp5
-rw-r--r--persistence/src/vespa/persistence/spi/abstractpersistenceprovider.h2
-rw-r--r--persistence/src/vespa/persistence/spi/persistenceprovider.cpp8
-rw-r--r--persistence/src/vespa/persistence/spi/persistenceprovider.h3
6 files changed, 24 insertions, 10 deletions
diff --git a/persistence/src/vespa/persistence/dummyimpl/dummypersistence.cpp b/persistence/src/vespa/persistence/dummyimpl/dummypersistence.cpp
index 66f03edafa2..ff9676da7d0 100644
--- a/persistence/src/vespa/persistence/dummyimpl/dummypersistence.cpp
+++ b/persistence/src/vespa/persistence/dummyimpl/dummypersistence.cpp
@@ -405,9 +405,8 @@ DummyPersistence::setClusterState(BucketSpace bucketSpace, const ClusterState& c
return Result();
}
-Result
-DummyPersistence::setActiveState(const Bucket& b,
- BucketInfo::ActiveState newState)
+void
+DummyPersistence::setActiveStateAsync(const Bucket& b, BucketInfo::ActiveState newState, OperationComplete::UP onComplete)
{
DUMMYPERSISTENCE_VERIFY_INITIALIZED;
LOG(debug, "setCurrentState(%s, %s)",
@@ -416,11 +415,12 @@ DummyPersistence::setActiveState(const Bucket& b,
assert(b.getBucketSpace() == FixedBucketSpaces::default_space());
BucketContentGuard::UP bc(acquireBucketWithLock(b));
- if (!bc.get()) {
- return BucketInfoResult(Result::ErrorType::TRANSIENT_ERROR, "Bucket not found");
+ if ( ! bc ) {
+ onComplete->onComplete(std::make_unique<BucketInfoResult>(Result::ErrorType::TRANSIENT_ERROR, "Bucket not found"));
+ } else {
+ (*bc)->setActive(newState == BucketInfo::ACTIVE);
+ onComplete->onComplete(std::make_unique<Result>());
}
- (*bc)->setActive(newState == BucketInfo::ACTIVE);
- return Result();
}
BucketInfoResult
diff --git a/persistence/src/vespa/persistence/dummyimpl/dummypersistence.h b/persistence/src/vespa/persistence/dummyimpl/dummypersistence.h
index 486f4cec2f2..9d93316d382 100644
--- a/persistence/src/vespa/persistence/dummyimpl/dummypersistence.h
+++ b/persistence/src/vespa/persistence/dummyimpl/dummypersistence.h
@@ -155,7 +155,7 @@ public:
BucketIdListResult getModifiedBuckets(BucketSpace bucketSpace) const override;
Result setClusterState(BucketSpace bucketSpace, const ClusterState& newState) override;
- Result setActiveState(const Bucket& bucket, BucketInfo::ActiveState newState) override;
+ void setActiveStateAsync(const Bucket&, BucketInfo::ActiveState, OperationComplete::UP) override;
BucketInfoResult getBucketInfo(const Bucket&) const override;
Result put(const Bucket&, Timestamp, DocumentSP, Context&) override;
GetResult get(const Bucket&, const document::FieldSet&, const DocumentId&, Context&) const override;
diff --git a/persistence/src/vespa/persistence/spi/abstractpersistenceprovider.cpp b/persistence/src/vespa/persistence/spi/abstractpersistenceprovider.cpp
index 23a8f600024..e423e0aaac5 100644
--- a/persistence/src/vespa/persistence/spi/abstractpersistenceprovider.cpp
+++ b/persistence/src/vespa/persistence/spi/abstractpersistenceprovider.cpp
@@ -30,4 +30,9 @@ AbstractPersistenceProvider::getModifiedBuckets(BucketSpace) const
return BucketIdListResult(list);
}
+void
+AbstractPersistenceProvider::setActiveStateAsync(const Bucket &, BucketInfo::ActiveState, OperationComplete::UP op) {
+ op->onComplete(std::make_unique<Result>());
+}
+
}
diff --git a/persistence/src/vespa/persistence/spi/abstractpersistenceprovider.h b/persistence/src/vespa/persistence/spi/abstractpersistenceprovider.h
index 2332c05b57f..5f8cf2fc171 100644
--- a/persistence/src/vespa/persistence/spi/abstractpersistenceprovider.h
+++ b/persistence/src/vespa/persistence/spi/abstractpersistenceprovider.h
@@ -43,7 +43,7 @@ public:
/**
* Default impl empty.
*/
- Result setActiveState(const Bucket&, BucketInfo::ActiveState) override { return Result(); }
+ void setActiveStateAsync(const Bucket &, BucketInfo::ActiveState, OperationComplete::UP ) override;
/**
* Default impl empty.
*/
diff --git a/persistence/src/vespa/persistence/spi/persistenceprovider.cpp b/persistence/src/vespa/persistence/spi/persistenceprovider.cpp
index 575a95269c5..bb819fc9e50 100644
--- a/persistence/src/vespa/persistence/spi/persistenceprovider.cpp
+++ b/persistence/src/vespa/persistence/spi/persistenceprovider.cpp
@@ -9,6 +9,14 @@ namespace storage::spi {
PersistenceProvider::~PersistenceProvider() = default;
Result
+PersistenceProvider::setActiveState(const Bucket& bucket, BucketInfo::ActiveState activeState) {
+ auto catcher = std::make_unique<CatchResult>();
+ auto future = catcher->future_result();
+ setActiveStateAsync(bucket, activeState, std::move(catcher));
+ return *future.get();
+}
+
+Result
PersistenceProvider::put(const Bucket& bucket, Timestamp timestamp, DocumentSP doc, Context& context) {
auto catcher = std::make_unique<CatchResult>();
auto future = catcher->future_result();
diff --git a/persistence/src/vespa/persistence/spi/persistenceprovider.h b/persistence/src/vespa/persistence/spi/persistenceprovider.h
index 56ef21b5c77..45ca49435a7 100644
--- a/persistence/src/vespa/persistence/spi/persistenceprovider.h
+++ b/persistence/src/vespa/persistence/spi/persistenceprovider.h
@@ -86,7 +86,8 @@ struct PersistenceProvider
* other buckets may be deactivated, so the node must be able to serve
* the data from its secondary index or get reduced coverage.
*/
- virtual Result setActiveState(const Bucket&, BucketInfo::ActiveState) = 0;
+ Result setActiveState(const Bucket&, BucketInfo::ActiveState);
+ virtual void setActiveStateAsync(const Bucket &, BucketInfo::ActiveState, OperationComplete::UP ) = 0;
/**
* Retrieve metadata for a bucket, previously returned in listBuckets(),