You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by ag...@apache.org on 2021/04/08 18:50:42 UTC
[ignite-3] 04/04: IGNITE-14389 Added getAll (WIP)
This is an automated email from the ASF dual-hosted git repository.
agura pushed a commit to branch ignite-14389
in repository https://gitbox.apache.org/repos/asf/ignite-3.git
commit 47e1256283d5470e3f8a4128e3c0b6eab641bba2
Author: Andrey Gura <ag...@apache.org>
AuthorDate: Thu Apr 8 21:49:58 2021 +0300
IGNITE-14389 Added getAll (WIP)
---
.../metastorage/server/KeyValueStorage.java | 8 ++++
.../server/SimpleInMemoryKeyValueStorage.java | 45 +++++++++++++++-------
.../server/SimpleInMemoryKeyValueStorageTest.java | 4 --
3 files changed, 40 insertions(+), 17 deletions(-)
diff --git a/modules/metastorage-server/src/main/java/org/apache/ignite/internal/metastorage/server/KeyValueStorage.java b/modules/metastorage-server/src/main/java/org/apache/ignite/internal/metastorage/server/KeyValueStorage.java
index ead1043..0596c4a 100644
--- a/modules/metastorage-server/src/main/java/org/apache/ignite/internal/metastorage/server/KeyValueStorage.java
+++ b/modules/metastorage-server/src/main/java/org/apache/ignite/internal/metastorage/server/KeyValueStorage.java
@@ -2,7 +2,9 @@ package org.apache.ignite.internal.metastorage.server;
import org.jetbrains.annotations.NotNull;
+import java.util.Collection;
import java.util.Iterator;
+import java.util.List;
public interface KeyValueStorage {
@@ -16,6 +18,12 @@ public interface KeyValueStorage {
@NotNull
Entry get(byte[] key, long rev);
+ @NotNull
+ Collection<Entry> getAll(List<byte[]> keys);
+
+ @NotNull
+ Collection<Entry> getAll(List<byte[]> keys, long revUpperBound);
+
void put(byte[] key, byte[] value);
@NotNull
diff --git a/modules/metastorage-server/src/main/java/org/apache/ignite/internal/metastorage/server/SimpleInMemoryKeyValueStorage.java b/modules/metastorage-server/src/main/java/org/apache/ignite/internal/metastorage/server/SimpleInMemoryKeyValueStorage.java
index 3700f4a..fc551f6 100644
--- a/modules/metastorage-server/src/main/java/org/apache/ignite/internal/metastorage/server/SimpleInMemoryKeyValueStorage.java
+++ b/modules/metastorage-server/src/main/java/org/apache/ignite/internal/metastorage/server/SimpleInMemoryKeyValueStorage.java
@@ -1,14 +1,7 @@
package org.apache.ignite.internal.metastorage.server;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Comparator;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.NavigableMap;
-import java.util.NoSuchElementException;
-import java.util.TreeMap;
+import java.util.*;
+
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.TestOnly;
@@ -78,6 +71,16 @@ public class SimpleInMemoryKeyValueStorage implements KeyValueStorage {
}
@Override
+ public @NotNull Collection<Entry> getAll(List<byte[]> keys) {
+ return doGetAll(keys, LATEST_REV);
+ }
+
+ @Override
+ public @NotNull Collection<Entry> getAll(List<byte[]> keys, long revUpperBound) {
+ return doGetAll(keys, revUpperBound);
+ }
+
+ @Override
public void remove(byte[] key) {
synchronized (mux) {
Entry e = doGet(key, LATEST_REV, false);
@@ -197,17 +200,17 @@ public class SimpleInMemoryKeyValueStorage implements KeyValueStorage {
NavigableMap<byte[], List<Long>> compactedKeysIdx,
NavigableMap<Long, NavigableMap<byte[], Value>> compactedRevsIdx
) {
- Long lrev = lastRevision(revs);
+ Long lastRev = lastRevision(revs);
- NavigableMap<byte[], Value> kv = revsIdx.get(lrev);
+ NavigableMap<byte[], Value> kv = revsIdx.get(lastRev);
Value lastVal = kv.get(key);
if (!lastVal.tombstone()) {
- compactedKeysIdx.put(key, listOf(lrev));
+ compactedKeysIdx.put(key, listOf(lastRev));
NavigableMap<byte[], Value> compactedKv = compactedRevsIdx.computeIfAbsent(
- lrev,
+ lastRev,
k -> new TreeMap<>(LEXICOGRAPHIC_COMPARATOR)
);
@@ -215,6 +218,22 @@ public class SimpleInMemoryKeyValueStorage implements KeyValueStorage {
}
}
+ @NotNull
+ private Collection<Entry> doGetAll(List<byte[]> keys, long rev) {
+ assert keys != null : "keys list can't be null.";
+ assert !keys.isEmpty() : "keys list can't be empty.";
+
+ Collection<Entry> res = new ArrayList<>(keys.size());
+
+ synchronized (mux) {
+ for (byte[] key : keys) {
+ res.add(doGet(key, rev, false));
+ }
+ }
+
+ return res;
+ }
+
/**
* Returns entry for given key.
*
diff --git a/modules/metastorage-server/src/test/java/org/apache/ignite/internal/metastorage/server/SimpleInMemoryKeyValueStorageTest.java b/modules/metastorage-server/src/test/java/org/apache/ignite/internal/metastorage/server/SimpleInMemoryKeyValueStorageTest.java
index 5b797fc..570b34a 100644
--- a/modules/metastorage-server/src/test/java/org/apache/ignite/internal/metastorage/server/SimpleInMemoryKeyValueStorageTest.java
+++ b/modules/metastorage-server/src/test/java/org/apache/ignite/internal/metastorage/server/SimpleInMemoryKeyValueStorageTest.java
@@ -208,7 +208,6 @@ class SimpleInMemoryKeyValueStorageTest {
@Test
public void getAndPutAfterRemove() {
byte[] key = k(1);
-
byte[] val = kv(1, 1);
storage.getAndPut(key, val);
@@ -218,11 +217,8 @@ class SimpleInMemoryKeyValueStorageTest {
Entry e = storage.getAndPut(key, val);
assertEquals(3, storage.revision());
-
assertEquals(3, storage.updateCounter());
-
assertEquals(2, e.revision());
-
assertTrue(e.tombstone());
}