aboutsummaryrefslogtreecommitdiffstats
path: root/persistence
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2021-10-17 20:11:09 +0000
committerHenning Baldersheim <balder@yahoo-inc.com>2021-10-18 12:53:04 +0000
commitb2ad54a6e83481106835bd27cfdd0d7b60d839a0 (patch)
treec062ff1479e9d49398a2b61fc8596fcaa7d3fd43 /persistence
parent42e8b5ed9678e76b33fb861c09a65fc8ef52bfa7 (diff)
Implement async delete bucket.
Diffstat (limited to 'persistence')
-rw-r--r--persistence/src/vespa/persistence/dummyimpl/dummypersistence.cpp6
-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.h27
-rw-r--r--persistence/src/vespa/persistence/spi/persistenceprovider.cpp8
-rw-r--r--persistence/src/vespa/persistence/spi/persistenceprovider.h3
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