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 <[email protected]> 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()); }
