diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2021-10-17 20:11:09 +0000 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2021-10-18 12:53:04 +0000 |
commit | b2ad54a6e83481106835bd27cfdd0d7b60d839a0 (patch) | |
tree | c062ff1479e9d49398a2b61fc8596fcaa7d3fd43 /persistence | |
parent | 42e8b5ed9678e76b33fb861c09a65fc8ef52bfa7 (diff) |
Implement async delete bucket.
Diffstat (limited to 'persistence')
6 files changed, 20 insertions, 31 deletions
diff --git a/persistence/src/vespa/persistence/dummyimpl/dummypersistence.cpp b/persistence/src/vespa/persistence/dummyimpl/dummypersistence.cpp index ff9676da7d0..7793467040e 100644 --- a/persistence/src/vespa/persistence/dummyimpl/dummypersistence.cpp +++ b/persistence/src/vespa/persistence/dummyimpl/dummypersistence.cpp @@ -745,8 +745,8 @@ DummyPersistence::createBucket(const Bucket& b, Context&) return Result(); } -Result -DummyPersistence::deleteBucket(const Bucket& b, Context&) +void +DummyPersistence::deleteBucketAsync(const Bucket& b, Context&, OperationComplete::UP onComplete) { DUMMYPERSISTENCE_VERIFY_INITIALIZED; LOG(debug, "deleteBucket(%s)", b.toString().c_str()); @@ -756,7 +756,7 @@ DummyPersistence::deleteBucket(const Bucket& b, Context&) assert(!_content[b]->_inUse); } _content.erase(b); - return Result(); + onComplete->onComplete(std::make_unique<Result>()); } Result diff --git a/persistence/src/vespa/persistence/dummyimpl/dummypersistence.h b/persistence/src/vespa/persistence/dummyimpl/dummypersistence.h index 9d93316d382..a9b611d131c 100644 --- a/persistence/src/vespa/persistence/dummyimpl/dummypersistence.h +++ b/persistence/src/vespa/persistence/dummyimpl/dummypersistence.h @@ -169,7 +169,7 @@ public: Result destroyIterator(IteratorId, Context&) override; Result createBucket(const Bucket&, Context&) override; - Result deleteBucket(const Bucket&, Context&) override; + void deleteBucketAsync(const Bucket&, Context&, OperationComplete::UP) override; Result split(const Bucket& source, const Bucket& target1, const Bucket& target2, Context&) override; diff --git a/persistence/src/vespa/persistence/spi/abstractpersistenceprovider.cpp b/persistence/src/vespa/persistence/spi/abstractpersistenceprovider.cpp index e423e0aaac5..6be0941d731 100644 --- a/persistence/src/vespa/persistence/spi/abstractpersistenceprovider.cpp +++ b/persistence/src/vespa/persistence/spi/abstractpersistenceprovider.cpp @@ -35,4 +35,9 @@ AbstractPersistenceProvider::setActiveStateAsync(const Bucket &, BucketInfo::Act op->onComplete(std::make_unique<Result>()); } +void +AbstractPersistenceProvider::deleteBucketAsync(const Bucket &, Context &, 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 5f8cf2fc171..472abeca161 100644 --- a/persistence/src/vespa/persistence/spi/abstractpersistenceprovider.h +++ b/persistence/src/vespa/persistence/spi/abstractpersistenceprovider.h @@ -14,39 +14,14 @@ namespace storage::spi { class AbstractPersistenceProvider : public PersistenceProvider { public: - /** - * Default impl is empty. - */ Result initialize() override { return Result(); }; - - /** - * Default impl empty. - */ Result createBucket(const Bucket&, Context&) override { return Result(); } - - /** - * Default impl is empty. - */ Result removeEntry(const Bucket&, Timestamp, Context&) override { return Result(); } - - /** - * Default impl is remove(). - */ RemoveResult removeIfFound(const Bucket&, Timestamp, const DocumentId&, Context&) override; void removeIfFoundAsync(const Bucket&, Timestamp, const DocumentId&, Context&, OperationComplete::UP) override; - - /** - * Default impl empty. - */ Result setClusterState(BucketSpace, const ClusterState&) override { return Result(); } - - /** - * Default impl empty. - */ void setActiveStateAsync(const Bucket &, BucketInfo::ActiveState, OperationComplete::UP ) override; - /** - * Default impl empty. - */ + void deleteBucketAsync(const Bucket&, Context&, OperationComplete::UP) override; BucketIdListResult getModifiedBuckets(BucketSpace bucketSpace) const override; }; diff --git a/persistence/src/vespa/persistence/spi/persistenceprovider.cpp b/persistence/src/vespa/persistence/spi/persistenceprovider.cpp index bb819fc9e50..7da2ee58aa9 100644 --- a/persistence/src/vespa/persistence/spi/persistenceprovider.cpp +++ b/persistence/src/vespa/persistence/spi/persistenceprovider.cpp @@ -17,6 +17,14 @@ PersistenceProvider::setActiveState(const Bucket& bucket, BucketInfo::ActiveStat } Result +PersistenceProvider::deleteBucket(const Bucket& bucket, Context& context) { + auto catcher = std::make_unique<CatchResult>(); + auto future = catcher->future_result(); + deleteBucketAsync(bucket, context, 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 45ca49435a7..99e80cc197a 100644 --- a/persistence/src/vespa/persistence/spi/persistenceprovider.h +++ b/persistence/src/vespa/persistence/spi/persistenceprovider.h @@ -342,7 +342,8 @@ struct PersistenceProvider * After this operation has succeeded, a restart of the provider should * not yield the bucket in getBucketList(). */ - virtual Result deleteBucket(const Bucket&, Context&) = 0; + Result deleteBucket(const Bucket&, Context&); + virtual void deleteBucketAsync(const Bucket&, Context&, OperationComplete::UP) = 0; /** * This function is called continuously by the service layer. It allows the |