summaryrefslogtreecommitdiffstats
path: root/persistence
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2021-01-14 15:46:56 +0000
committerHenning Baldersheim <balder@yahoo-inc.com>2021-01-15 17:41:51 +0000
commitb275087c2a110a1dc9aca0662f7ed01e2e7928ec (patch)
tree3ecc31d93e2cdae2d73d3da251d84d35d75baf5a /persistence
parentdfeaed2d8926952e1898f5d75df2a4e83a2a5ff2 (diff)
- Add an BucketExecutor interface taking a bucket and a BucketTask for executing a task by the content layer.
- Add method to register this interface. - Minor followups after PR review. - Avoid including the world when not necessary to avoid having to recompile everyting for the smallest unrelated change.
Diffstat (limited to 'persistence')
-rw-r--r--persistence/src/vespa/persistence/spi/abstractpersistenceprovider.h2
-rw-r--r--persistence/src/vespa/persistence/spi/bucketexecutor.h31
-rw-r--r--persistence/src/vespa/persistence/spi/operationcomplete.h4
-rw-r--r--persistence/src/vespa/persistence/spi/package.json6
-rw-r--r--persistence/src/vespa/persistence/spi/persistenceprovider.h7
-rw-r--r--persistence/src/vespa/persistence/spi/providerfactory.h27
6 files changed, 48 insertions, 29 deletions
diff --git a/persistence/src/vespa/persistence/spi/abstractpersistenceprovider.h b/persistence/src/vespa/persistence/spi/abstractpersistenceprovider.h
index 016928ab10e..6bb24f582e3 100644
--- a/persistence/src/vespa/persistence/spi/abstractpersistenceprovider.h
+++ b/persistence/src/vespa/persistence/spi/abstractpersistenceprovider.h
@@ -48,6 +48,8 @@ public:
* Default impl empty.
*/
BucketIdListResult getModifiedBuckets(BucketSpace bucketSpace) const override;
+
+ std::unique_ptr<vespalib::IDestructorCallback> register_executor(std::shared_ptr<BucketExecutor>) override { return {}; }
};
}
diff --git a/persistence/src/vespa/persistence/spi/bucketexecutor.h b/persistence/src/vespa/persistence/spi/bucketexecutor.h
new file mode 100644
index 00000000000..318bec641fe
--- /dev/null
+++ b/persistence/src/vespa/persistence/spi/bucketexecutor.h
@@ -0,0 +1,31 @@
+// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+
+#pragma once
+
+#include "bucket.h"
+#include "operationcomplete.h"
+
+namespace storage::spi {
+
+
+/**
+ * Task that will be run in thread from content layer.
+ * It will hold a bucket lock while run. At token is provided
+ * for optional async completion. It must not be destructed until
+ * you no longer require the bucket lock.
+ */
+class BucketTask {
+public:
+ virtual ~BucketTask() = default;
+ virtual void run(const Bucket & bucket, std::unique_ptr<OperationComplete> onComplete) = 0;
+};
+
+/**
+ * Interface for running a BucketTask
+ */
+struct BucketExecutor {
+ virtual ~BucketExecutor() = default;
+ virtual void execute(const Bucket & bucket, std::unique_ptr<BucketTask> task) = 0;
+};
+
+}
diff --git a/persistence/src/vespa/persistence/spi/operationcomplete.h b/persistence/src/vespa/persistence/spi/operationcomplete.h
index 18a3c250e24..5a9b8d258df 100644
--- a/persistence/src/vespa/persistence/spi/operationcomplete.h
+++ b/persistence/src/vespa/persistence/spi/operationcomplete.h
@@ -1,4 +1,4 @@
-// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.#pragma once
+// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
#pragma once
@@ -27,4 +27,4 @@ public:
virtual void addResultHandler(const ResultHandler * resultHandler) = 0;
};
-} \ No newline at end of file
+}
diff --git a/persistence/src/vespa/persistence/spi/package.json b/persistence/src/vespa/persistence/spi/package.json
new file mode 100644
index 00000000000..ca831b328c1
--- /dev/null
+++ b/persistence/src/vespa/persistence/spi/package.json
@@ -0,0 +1,6 @@
+{
+ "name": "spi",
+ "version": "1.0.0",
+ "dependencies": {
+ }
+}
diff --git a/persistence/src/vespa/persistence/spi/persistenceprovider.h b/persistence/src/vespa/persistence/spi/persistenceprovider.h
index 2fc0713abe8..9ba752c2579 100644
--- a/persistence/src/vespa/persistence/spi/persistenceprovider.h
+++ b/persistence/src/vespa/persistence/spi/persistenceprovider.h
@@ -10,6 +10,8 @@
#include "selection.h"
#include "clusterstate.h"
#include "operationcomplete.h"
+#include "bucketexecutor.h"
+#include <vespa/vespalib/util/idestructorcallback.h>
namespace document { class FieldSet; }
namespace vespalib { class IDestructorCallback; }
@@ -384,6 +386,11 @@ struct PersistenceProvider
*/
virtual std::unique_ptr<vespalib::IDestructorCallback> register_resource_usage_listener(IResourceUsageListener& listener) = 0;
+ /**
+ * Provides an execute interface that can be used by the provider to execute tasks while bucket guarantees are upheld.
+ * When the returned object goes out of scope the executor is deregistered.
+ */
+ [[nodiscard]] virtual std::unique_ptr<vespalib::IDestructorCallback> register_executor(std::shared_ptr<BucketExecutor> executor) = 0;
};
}
diff --git a/persistence/src/vespa/persistence/spi/providerfactory.h b/persistence/src/vespa/persistence/spi/providerfactory.h
deleted file mode 100644
index 8be143851dd..00000000000
--- a/persistence/src/vespa/persistence/spi/providerfactory.h
+++ /dev/null
@@ -1,27 +0,0 @@
-// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-/**
- * \class storage::spi::ProviderFactory
- * \ingroup spi
- *
- * \brief Factory class to generate a persistence provider interface
- */
-
-#pragma once
-
-#include "persistenceprovider.h"
-
-namespace document { class DocumentTypeRepo; }
-
-namespace storage::spi {
-
-struct ProviderFactory {
- virtual ~ProviderFactory() {}
-
- virtual PersistenceProvider::UP createProviderInstance(
- document::DocumentTypeRepo&) = 0;
-};
-
-} // spi
-} // storage
-
-