This is an automated email from the ASF dual-hosted git repository.
toulmean pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-tuweni.git
The following commit(s) were added to refs/heads/main by this push:
new 2594c7b add remove method to kv
new 9ec7454 Merge pull request #375 from atoulme/add_remove_method
2594c7b is described below
commit 2594c7be903534c26979d9abec784f932251f364
Author: Antoine Toulme <[email protected]>
AuthorDate: Sun Mar 13 14:34:57 2022 -0700
add remove method to kv
---
.../apache/tuweni/kv/EntityManagerKeyValueStore.kt | 12 ++++
.../apache/tuweni/kv/InfinispanKeyValueStore.kt | 4 ++
.../kotlin/org/apache/tuweni/kv/KeyValueStore.kt | 7 +++
.../org/apache/tuweni/kv/LevelDBKeyValueStore.kt | 4 ++
.../org/apache/tuweni/kv/MapDBKeyValueStore.kt | 4 ++
.../org/apache/tuweni/kv/MapKeyValueStore.kt | 4 ++
.../org/apache/tuweni/kv/ProxyKeyValueStore.kt | 4 ++
.../org/apache/tuweni/kv/RedisKeyValueStore.kt | 5 ++
.../org/apache/tuweni/kv/RocksDBKeyValueStore.kt | 7 +++
.../org/apache/tuweni/kv/SQLKeyValueStore.kt | 8 +++
.../org/apache/tuweni/kv/KeyValueStoreSpec.kt | 64 ++++++++++++++++++++++
11 files changed, 123 insertions(+)
diff --git
a/kv/src/main/kotlin/org/apache/tuweni/kv/EntityManagerKeyValueStore.kt
b/kv/src/main/kotlin/org/apache/tuweni/kv/EntityManagerKeyValueStore.kt
index c4f86f0..2eb0e9d 100644
--- a/kv/src/main/kotlin/org/apache/tuweni/kv/EntityManagerKeyValueStore.kt
+++ b/kv/src/main/kotlin/org/apache/tuweni/kv/EntityManagerKeyValueStore.kt
@@ -71,6 +71,18 @@ constructor(
}
}
+ override suspend fun remove(key: K) {
+ val em = entityManagerProvider()
+ em.transaction.begin()
+ try {
+ val entity = em.find(entityClass, key)
+ return em.remove(entity)
+ } finally {
+ em.transaction.commit()
+ em.close()
+ }
+ }
+
/**
* Convenience method to put a record directly
* @param value the value to store
diff --git a/kv/src/main/kotlin/org/apache/tuweni/kv/InfinispanKeyValueStore.kt
b/kv/src/main/kotlin/org/apache/tuweni/kv/InfinispanKeyValueStore.kt
index 33da1c9..968fe7a 100644
--- a/kv/src/main/kotlin/org/apache/tuweni/kv/InfinispanKeyValueStore.kt
+++ b/kv/src/main/kotlin/org/apache/tuweni/kv/InfinispanKeyValueStore.kt
@@ -53,6 +53,10 @@ class InfinispanKeyValueStore<K, V> constructor(
cache.putAsync(key, value).await()
}
+ override suspend fun remove(key: K) {
+ cache.removeAsync(key).await()
+ }
+
override suspend fun keys(): Iterable<K> = cache.keys
override suspend fun clear() {
diff --git a/kv/src/main/kotlin/org/apache/tuweni/kv/KeyValueStore.kt
b/kv/src/main/kotlin/org/apache/tuweni/kv/KeyValueStore.kt
index ff2fff9..20613ca 100644
--- a/kv/src/main/kotlin/org/apache/tuweni/kv/KeyValueStore.kt
+++ b/kv/src/main/kotlin/org/apache/tuweni/kv/KeyValueStore.kt
@@ -70,6 +70,13 @@ interface KeyValueStore<K, V> : Closeable, CoroutineScope {
suspend fun put(key: K, value: V)
/**
+ * Removes data from the store.
+ *
+ * @param key The key to associate with the data, for use when retrieving.
+ */
+ suspend fun remove(key: K)
+
+ /**
* Puts data into the store.
*
* Note: if the storage implementation already contains content for the
given key, it does not need to replace the
diff --git a/kv/src/main/kotlin/org/apache/tuweni/kv/LevelDBKeyValueStore.kt
b/kv/src/main/kotlin/org/apache/tuweni/kv/LevelDBKeyValueStore.kt
index 90a498b..d01212e 100644
--- a/kv/src/main/kotlin/org/apache/tuweni/kv/LevelDBKeyValueStore.kt
+++ b/kv/src/main/kotlin/org/apache/tuweni/kv/LevelDBKeyValueStore.kt
@@ -159,6 +159,10 @@ constructor(
}
}
+ override suspend fun remove(key: K) {
+ db.delete(keySerializer(key).toArrayUnsafe())
+ }
+
override suspend fun put(key: K, value: V) = db.put(
keySerializer(key).toArrayUnsafe(),
valueSerializer(value).toArrayUnsafe()
diff --git a/kv/src/main/kotlin/org/apache/tuweni/kv/MapDBKeyValueStore.kt
b/kv/src/main/kotlin/org/apache/tuweni/kv/MapDBKeyValueStore.kt
index d142114..668f170 100644
--- a/kv/src/main/kotlin/org/apache/tuweni/kv/MapDBKeyValueStore.kt
+++ b/kv/src/main/kotlin/org/apache/tuweni/kv/MapDBKeyValueStore.kt
@@ -125,6 +125,10 @@ constructor(
}
}
+ override suspend fun remove(key: K) {
+ storageData.remove(keySerializer(key))
+ }
+
override suspend fun put(key: K, value: V) {
storageData[keySerializer(key)] = valueSerializer(value)
db.commit()
diff --git a/kv/src/main/kotlin/org/apache/tuweni/kv/MapKeyValueStore.kt
b/kv/src/main/kotlin/org/apache/tuweni/kv/MapKeyValueStore.kt
index 4429f38..6134c74 100644
--- a/kv/src/main/kotlin/org/apache/tuweni/kv/MapKeyValueStore.kt
+++ b/kv/src/main/kotlin/org/apache/tuweni/kv/MapKeyValueStore.kt
@@ -62,6 +62,10 @@ constructor(
map[key] = value
}
+ override suspend fun remove(key: K) {
+ map.remove(key)
+ }
+
override suspend fun keys(): Iterable<K> = map.keys
override suspend fun clear() {
diff --git a/kv/src/main/kotlin/org/apache/tuweni/kv/ProxyKeyValueStore.kt
b/kv/src/main/kotlin/org/apache/tuweni/kv/ProxyKeyValueStore.kt
index f043db9..ede7abb 100644
--- a/kv/src/main/kotlin/org/apache/tuweni/kv/ProxyKeyValueStore.kt
+++ b/kv/src/main/kotlin/org/apache/tuweni/kv/ProxyKeyValueStore.kt
@@ -74,6 +74,10 @@ class ProxyKeyValueStore<K, V, E, R>(
}
}
+ override suspend fun remove(key: K) {
+ store.remove(proxyKey(key))
+ }
+
override suspend fun put(key: K, value: V) = store.put(proxyKey(key),
proxyValue(key, value))
override suspend fun keys(): Iterable<K> = store.keys().map(unproxyKey)
diff --git a/kv/src/main/kotlin/org/apache/tuweni/kv/RedisKeyValueStore.kt
b/kv/src/main/kotlin/org/apache/tuweni/kv/RedisKeyValueStore.kt
index 36703bd..7207e1f 100644
--- a/kv/src/main/kotlin/org/apache/tuweni/kv/RedisKeyValueStore.kt
+++ b/kv/src/main/kotlin/org/apache/tuweni/kv/RedisKeyValueStore.kt
@@ -239,6 +239,11 @@ class RedisKeyValueStore<K, V>(
future.await()
}
+ override suspend fun remove(key: K) {
+ val future: CompletionStage<Long> = asyncCommands.del(keySerializer(key))
+ future.await()
+ }
+
override suspend fun keys(): Iterable<K> =
asyncCommands.keys(Bytes.EMPTY).await().map(keyDeserializer)
override suspend fun clear() {
diff --git a/kv/src/main/kotlin/org/apache/tuweni/kv/RocksDBKeyValueStore.kt
b/kv/src/main/kotlin/org/apache/tuweni/kv/RocksDBKeyValueStore.kt
index 19e3f67..6e01d1e 100644
--- a/kv/src/main/kotlin/org/apache/tuweni/kv/RocksDBKeyValueStore.kt
+++ b/kv/src/main/kotlin/org/apache/tuweni/kv/RocksDBKeyValueStore.kt
@@ -138,6 +138,13 @@ constructor(
}
}
+ override suspend fun remove(key: K) {
+ if (closed.get()) {
+ throw IllegalStateException("Closed DB")
+ }
+ db.delete(keySerializer(key).toArrayUnsafe())
+ }
+
override suspend fun put(key: K, value: V) {
if (closed.get()) {
throw IllegalStateException("Closed DB")
diff --git a/kv/src/main/kotlin/org/apache/tuweni/kv/SQLKeyValueStore.kt
b/kv/src/main/kotlin/org/apache/tuweni/kv/SQLKeyValueStore.kt
index 3dd9954..aa4d8af 100644
--- a/kv/src/main/kotlin/org/apache/tuweni/kv/SQLKeyValueStore.kt
+++ b/kv/src/main/kotlin/org/apache/tuweni/kv/SQLKeyValueStore.kt
@@ -154,6 +154,14 @@ constructor(
}
}
+ override suspend fun remove(key: K) {
+ connectionPool.asyncConnection.await().use {
+ val stmt = it.prepareStatement("DELETE FROM $tableName WHERE $keyColumn
= ?")
+ stmt.setBytes(1, keySerializer(key).toArrayUnsafe())
+ stmt.execute()
+ }
+ }
+
override suspend fun put(key: K, value: V) {
connectionPool.asyncConnection.await().use {
val stmt = it.prepareStatement("INSERT INTO $tableName($keyColumn,
$valueColumn) VALUES(?,?)")
diff --git a/kv/src/test/kotlin/org/apache/tuweni/kv/KeyValueStoreSpec.kt
b/kv/src/test/kotlin/org/apache/tuweni/kv/KeyValueStoreSpec.kt
index e587fe5..0c9aacf 100644
--- a/kv/src/test/kotlin/org/apache/tuweni/kv/KeyValueStoreSpec.kt
+++ b/kv/src/test/kotlin/org/apache/tuweni/kv/KeyValueStoreSpec.kt
@@ -65,6 +65,14 @@ object KeyValueStoreSpec : Spek({
}
}
+ it("should allow to remove values") {
+ runBlocking {
+ kv.put(foobar, foo)
+ kv.remove(foobar)
+ kv.get(foobar).should.equal(null)
+ }
+ }
+
it("should allow to see if a key is present") {
runBlocking {
kv.put(foobar, foo)
@@ -112,6 +120,14 @@ object InfinispanKeyValueStoreSpec : Spek({
}
}
+ it("should allow to remove values") {
+ runBlocking {
+ kv.put(foobar, foo)
+ kv.remove(foobar)
+ kv.get(foobar).should.equal(null)
+ }
+ }
+
it("should allow to retrieve values") {
runBlocking {
kv.put(foobar, foo)
@@ -172,6 +188,14 @@ object MapDBKeyValueStoreSpec : Spek({
}
}
+ it("should allow to remove values") {
+ runBlocking {
+ kv.put(foobar, foo)
+ kv.remove(foobar)
+ kv.get(foobar).should.equal(null)
+ }
+ }
+
it("should allow to see if a key is present") {
runBlocking {
kv.put(foobar, foo)
@@ -253,6 +277,14 @@ object LevelDBKeyValueStoreSpec : Spek({
}
}
+ it("should allow to remove values") {
+ runBlocking {
+ kv.put(foobar, foo)
+ kv.remove(foobar)
+ kv.get(foobar).should.equal(null)
+ }
+ }
+
it("should allow to see if a key is present") {
runBlocking {
kv.put(foobar, foo)
@@ -327,6 +359,14 @@ object RocksDBKeyValueStoreSpec : Spek({
}
}
+ it("should allow to remove values") {
+ runBlocking {
+ kv.put(foobar, foo)
+ kv.remove(foobar)
+ kv.get(foobar).should.equal(null)
+ }
+ }
+
it("should allow to see if a key is present") {
runBlocking {
kv.put(foobar, foo)
@@ -420,6 +460,14 @@ object SQLKeyValueStoreSpec : Spek({
}
}
+ it("should allow to remove values") {
+ runBlocking {
+ kv.put(foobar, foo)
+ kv.remove(foobar)
+ kv.get(foobar).should.equal(null)
+ }
+ }
+
it("should allow to see if a key is present") {
runBlocking {
kv.put(foobar, foo)
@@ -504,6 +552,14 @@ object EntityManagerKeyValueStoreSpec : Spek({
}
}
+ it("should allow to remove values") {
+ runBlocking {
+ kv.put("foobar", Store("foo", "bar"))
+ kv.remove("foobar")
+ kv.get("foobar").should.equal(null)
+ }
+ }
+
it("should allow to see if a key is present") {
runBlocking {
kv.put("foo", Store("foo", "bar"))
@@ -576,6 +632,14 @@ object ProxyKeyValueStoreSpec : Spek({
}
}
+ it("should allow to remove values") {
+ runBlocking {
+ proxy.put(foo, bar)
+ proxy.remove(foo)
+ proxy.get(foo).should.equal(null)
+ }
+ }
+
it("should allow to see if a key is present") {
runBlocking {
proxy.put(foo, bar)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]