This is an automated email from the ASF dual-hosted git repository.
adoroszlai pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ozone.git
The following commit(s) were added to refs/heads/master by this push:
new bcb99336ab HDDS-8886. Refactor RDBStoreIterator and
TypedTableIterator. (#4930)
bcb99336ab is described below
commit bcb99336ab9bfe0d6bf04ea2c66f61dca0554de1
Author: Tsz-Wo Nicholas Sze <[email protected]>
AuthorDate: Tue Jun 20 02:30:51 2023 +0800
HDDS-8886. Refactor RDBStoreIterator and TypedTableIterator. (#4930)
---
...Iterator.java => RDBStoreAbstractIterator.java} | 110 ++++++++++-----------
.../hdds/utils/db/RDBStoreByteArrayIterator.java | 84 ++++++++++++++++
.../org/apache/hadoop/hdds/utils/db/RDBTable.java | 4 +-
.../{ByteArrayKeyValue.java => RawKeyValue.java} | 65 +++++++-----
.../org/apache/hadoop/hdds/utils/db/Table.java | 5 +
.../apache/hadoop/hdds/utils/db/TableIterator.java | 5 +-
.../apache/hadoop/hdds/utils/db/TypedTable.java | 60 +++++++----
...tor.java => TestRDBStoreByteArrayIterator.java} | 59 ++++++-----
8 files changed, 263 insertions(+), 129 deletions(-)
diff --git
a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/utils/db/RDBStoreIterator.java
b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/utils/db/RDBStoreAbstractIterator.java
similarity index 57%
rename from
hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/utils/db/RDBStoreIterator.java
rename to
hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/utils/db/RDBStoreAbstractIterator.java
index ee96072f46..e7b8fb4c63 100644
---
a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/utils/db/RDBStoreIterator.java
+++
b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/utils/db/RDBStoreAbstractIterator.java
@@ -14,13 +14,10 @@
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
- *
*/
-
package org.apache.hadoop.hdds.utils.db;
import java.io.IOException;
-import java.util.Arrays;
import java.util.NoSuchElementException;
import java.util.function.Consumer;
@@ -29,42 +26,61 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
- * RocksDB store iterator.
+ * An abstract {@link TableIterator} to iterate raw {@link Table.KeyValue}s.
+ *
+ * @param <RAW> the raw type.
*/
-public class RDBStoreIterator
- implements TableIterator<byte[], Table.KeyValue<byte[], byte[]>> {
+public abstract class RDBStoreAbstractIterator<RAW>
+ implements TableIterator<RAW, Table.KeyValue<RAW, RAW>> {
private static final Logger LOG =
- LoggerFactory.getLogger(RDBStoreIterator.class);
+ LoggerFactory.getLogger(RDBStoreAbstractIterator.class);
private final ManagedRocksIterator rocksDBIterator;
private final RDBTable rocksDBTable;
- private ByteArrayKeyValue currentEntry;
+ private Table.KeyValue<RAW, RAW> currentEntry;
// This is for schemas that use a fixed-length
// prefix for each key.
- private byte[] prefix;
+ private final RAW prefix;
- public RDBStoreIterator(ManagedRocksIterator iterator) {
- this(iterator, null);
+ RDBStoreAbstractIterator(ManagedRocksIterator iterator, RDBTable table,
+ RAW prefix) {
+ this.rocksDBIterator = iterator;
+ this.rocksDBTable = table;
+ this.prefix = prefix;
+ seekToFirst();
}
- public RDBStoreIterator(ManagedRocksIterator iterator, RDBTable table) {
- this(iterator, table, null);
+ /** @return the key for the current entry. */
+ abstract RAW key();
+
+ /** @return the {@link Table.KeyValue} for the current entry. */
+ abstract Table.KeyValue<RAW, RAW> getKeyValue();
+
+ /** Seek to the given key. */
+ abstract void seek0(RAW key);
+
+ /** Delete the given key. */
+ abstract void delete(RAW key) throws IOException;
+
+ /** Does the given key start with the prefix? */
+ abstract boolean startsWithPrefix(RAW key);
+
+ final ManagedRocksIterator getRocksDBIterator() {
+ return rocksDBIterator;
}
- public RDBStoreIterator(ManagedRocksIterator iterator, RDBTable table,
- byte[] prefix) {
- this.rocksDBIterator = iterator;
- this.rocksDBTable = table;
- if (prefix != null) {
- this.prefix = Arrays.copyOf(prefix, prefix.length);
- }
- seekToFirst();
+ final RDBTable getRocksDBTable() {
+ return rocksDBTable;
+ }
+
+ final RAW getPrefix() {
+ return prefix;
}
@Override
- public void forEachRemaining(
- Consumer<? super Table.KeyValue<byte[], byte[]>> action) {
+ public final void forEachRemaining(
+ Consumer<? super Table.KeyValue<RAW, RAW>> action) {
while (hasNext()) {
action.accept(next());
}
@@ -72,21 +88,20 @@ public class RDBStoreIterator
private void setCurrentEntry() {
if (rocksDBIterator.get().isValid()) {
- currentEntry = ByteArrayKeyValue.create(rocksDBIterator.get().key(),
- rocksDBIterator.get().value());
+ currentEntry = getKeyValue();
} else {
currentEntry = null;
}
}
@Override
- public boolean hasNext() {
+ public final boolean hasNext() {
return rocksDBIterator.get().isValid() &&
- (prefix == null || startsWith(prefix, rocksDBIterator.get().key()));
+ (prefix == null || startsWithPrefix(key()));
}
@Override
- public ByteArrayKeyValue next() {
+ public final Table.KeyValue<RAW, RAW> next() {
setCurrentEntry();
if (currentEntry != null) {
rocksDBIterator.get().next();
@@ -96,41 +111,41 @@ public class RDBStoreIterator
}
@Override
- public void seekToFirst() {
+ public final void seekToFirst() {
if (prefix == null) {
rocksDBIterator.get().seekToFirst();
} else {
- rocksDBIterator.get().seek(prefix);
+ seek0(prefix);
}
setCurrentEntry();
}
@Override
- public void seekToLast() {
+ public final void seekToLast() {
if (prefix == null) {
rocksDBIterator.get().seekToLast();
} else {
- throw new UnsupportedOperationException("seekToLast");
+ throw new UnsupportedOperationException("seekToLast: prefix != null");
}
setCurrentEntry();
}
@Override
- public ByteArrayKeyValue seek(byte[] key) {
- rocksDBIterator.get().seek(key);
+ public final Table.KeyValue<RAW, RAW> seek(RAW key) {
+ seek0(key);
setCurrentEntry();
return currentEntry;
}
@Override
- public void removeFromDB() throws IOException {
+ public final void removeFromDB() throws IOException {
if (rocksDBTable == null) {
throw new UnsupportedOperationException("remove");
}
if (currentEntry != null) {
- rocksDBTable.delete(currentEntry.getKey());
+ delete(currentEntry.getKey());
} else {
- LOG.info("Unable to delete currentEntry as it does not exist.");
+ LOG.info("Failed to removeFromDB: currentEntry == null");
}
}
@@ -138,25 +153,4 @@ public class RDBStoreIterator
public void close() throws IOException {
rocksDBIterator.close();
}
-
- private static boolean startsWith(byte[] prefix, byte[] value) {
- if (prefix == null) {
- return true;
- }
- if (value == null) {
- return false;
- }
-
- int length = prefix.length;
- if (value.length < length) {
- return false;
- }
-
- for (int i = 0; i < length; i++) {
- if (value[i] != prefix[i]) {
- return false;
- }
- }
- return true;
- }
}
diff --git
a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/utils/db/RDBStoreByteArrayIterator.java
b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/utils/db/RDBStoreByteArrayIterator.java
new file mode 100644
index 0000000000..2fac7038c8
--- /dev/null
+++
b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/utils/db/RDBStoreByteArrayIterator.java
@@ -0,0 +1,84 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.hadoop.hdds.utils.db;
+
+import org.apache.hadoop.hdds.utils.db.managed.ManagedRocksIterator;
+
+import java.io.IOException;
+import java.util.Arrays;
+
+/**
+ * RocksDB store iterator using the byte[] API.
+ */
+public class RDBStoreByteArrayIterator
+ extends RDBStoreAbstractIterator<byte[]> {
+ public RDBStoreByteArrayIterator(ManagedRocksIterator iterator,
+ RDBTable table) {
+ this(iterator, table, null);
+ }
+
+ public RDBStoreByteArrayIterator(ManagedRocksIterator iterator,
+ RDBTable table, byte[] prefix) {
+ super(iterator, table,
+ prefix == null ? null : Arrays.copyOf(prefix, prefix.length));
+ }
+
+ @Override
+ byte[] key() {
+ return getRocksDBIterator().get().key();
+ }
+
+ @Override
+ Table.KeyValue<byte[], byte[]> getKeyValue() {
+ final ManagedRocksIterator i = getRocksDBIterator();
+ return RawKeyValue.create(i.get().key(), i.get().value());
+ }
+
+ @Override
+ void seek0(byte[] key) {
+ getRocksDBIterator().get().seek(key);
+ }
+
+ @Override
+ void delete(byte[] key) throws IOException {
+ getRocksDBTable().delete(key);
+ }
+
+ @Override
+ boolean startsWithPrefix(byte[] value) {
+ final byte[] prefix = getPrefix();
+ if (prefix == null) {
+ return true;
+ }
+ if (value == null) {
+ return false;
+ }
+
+ int length = prefix.length;
+ if (value.length < length) {
+ return false;
+ }
+
+ for (int i = 0; i < length; i++) {
+ if (value[i] != prefix[i]) {
+ return false;
+ }
+ }
+ return true;
+ }
+}
diff --git
a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/utils/db/RDBTable.java
b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/utils/db/RDBTable.java
index 53ca13c4da..f57a6bcfe5 100644
---
a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/utils/db/RDBTable.java
+++
b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/utils/db/RDBTable.java
@@ -217,13 +217,13 @@ class RDBTable implements Table<byte[], byte[]> {
@Override
public TableIterator<byte[], KeyValue<byte[], byte[]>> iterator()
throws IOException {
- return new RDBStoreIterator(db.newIterator(family, false), this);
+ return new RDBStoreByteArrayIterator(db.newIterator(family, false), this);
}
@Override
public TableIterator<byte[], KeyValue<byte[], byte[]>> iterator(byte[]
prefix)
throws IOException {
- return new RDBStoreIterator(db.newIterator(family, false), this,
+ return new RDBStoreByteArrayIterator(db.newIterator(family, false), this,
prefix);
}
diff --git
a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/utils/db/ByteArrayKeyValue.java
b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/utils/db/RawKeyValue.java
similarity index 56%
rename from
hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/utils/db/ByteArrayKeyValue.java
rename to
hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/utils/db/RawKeyValue.java
index 48db1a2161..6a659b1c59 100644
---
a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/utils/db/ByteArrayKeyValue.java
+++
b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/utils/db/RawKeyValue.java
@@ -20,18 +20,14 @@ package org.apache.hadoop.hdds.utils.db;
import org.apache.hadoop.hdds.utils.db.Table.KeyValue;
+import java.util.Arrays;
+
/**
- * Key value for raw Table implementations.
+ * {@link KeyValue} for a raw type.
+ *
+ * @param <RAW> The raw type.
*/
-public final class ByteArrayKeyValue implements KeyValue<byte[], byte[]> {
- private byte[] key;
- private byte[] value;
-
- private ByteArrayKeyValue(byte[] key, byte[] value) {
- this.key = key;
- this.value = value;
- }
-
+public abstract class RawKeyValue<RAW> implements KeyValue<RAW, RAW> {
/**
* Create a KeyValue pair.
*
@@ -39,31 +35,52 @@ public final class ByteArrayKeyValue implements
KeyValue<byte[], byte[]> {
* @param value - Value bytes
* @return KeyValue object.
*/
- public static ByteArrayKeyValue create(byte[] key, byte[] value) {
- return new ByteArrayKeyValue(key, value);
+ public static ByteArray create(byte[] key, byte[] value) {
+ return new ByteArray(key, value);
+ }
+
+ /** Implement {@link RawKeyValue} with byte[]. */
+ public static final class ByteArray extends RawKeyValue<byte[]> {
+ static byte[] copy(byte[] bytes) {
+ return Arrays.copyOf(bytes, bytes.length);
+ }
+
+ private ByteArray(byte[] key, byte[] value) {
+ super(key, value);
+ }
+
+ @Override
+ public byte[] getKey() {
+ return copy(super.getKey());
+ }
+
+ @Override
+ public byte[] getValue() {
+ return copy(super.getValue());
+ }
+ }
+
+ private final RAW key;
+ private final RAW value;
+
+ private RawKeyValue(RAW key, RAW value) {
+ this.key = key;
+ this.value = value;
}
/**
* Return key.
- *
- * @return byte[]
*/
@Override
- public byte[] getKey() {
- byte[] result = new byte[key.length];
- System.arraycopy(key, 0, result, 0, key.length);
- return result;
+ public RAW getKey() {
+ return key;
}
/**
* Return value.
- *
- * @return byte[]
*/
@Override
- public byte[] getValue() {
- byte[] result = new byte[value.length];
- System.arraycopy(value, 0, result, 0, value.length);
- return result;
+ public RAW getValue() {
+ return value;
}
}
diff --git
a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/utils/db/Table.java
b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/utils/db/Table.java
index 3d85b357b1..6399718ce2 100644
---
a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/utils/db/Table.java
+++
b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/utils/db/Table.java
@@ -337,4 +337,9 @@ public interface Table<KEY, VALUE> extends AutoCloseable {
VALUE getValue() throws IOException;
}
+
+ /** A {@link TableIterator} to iterate {@link KeyValue}s. */
+ interface KeyValueIterator<KEY, VALUE>
+ extends TableIterator<KEY, KeyValue<KEY, VALUE>> {
+ }
}
diff --git
a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/utils/db/TableIterator.java
b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/utils/db/TableIterator.java
index ce1807356c..9a9393582c 100644
---
a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/utils/db/TableIterator.java
+++
b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/utils/db/TableIterator.java
@@ -24,9 +24,10 @@ import java.io.IOException;
import java.util.Iterator;
/**
- * Iterator for MetaDataStore DB.
+ * To iterate a {@link Table}.
*
- * @param <T>
+ * @param <KEY> The key type to support {@link #seek(Object)}.
+ * @param <T> The type to be iterated.
*/
public interface TableIterator<KEY, T> extends Iterator<T>, Closeable {
diff --git
a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/utils/db/TypedTable.java
b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/utils/db/TypedTable.java
index ad5cb20e6e..7a825f9df9 100644
---
a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/utils/db/TypedTable.java
+++
b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/utils/db/TypedTable.java
@@ -424,12 +424,12 @@ public class TypedTable<KEY, VALUE> implements Table<KEY,
VALUE> {
}
@Override
- public TableIterator<KEY, TypedKeyValue> iterator() throws IOException {
+ public Table.KeyValueIterator<KEY, VALUE> iterator() throws IOException {
return new TypedTableIterator(rawTable.iterator());
}
@Override
- public TableIterator<KEY, TypedKeyValue> iterator(KEY prefix)
+ public Table.KeyValueIterator<KEY, VALUE> iterator(KEY prefix)
throws IOException {
final byte[] prefixBytes = encodeKey(prefix);
return new TypedTableIterator(rawTable.iterator(prefixBytes));
@@ -551,11 +551,11 @@ public class TypedTable<KEY, VALUE> implements Table<KEY,
VALUE> {
/**
* Key value implementation for strongly typed tables.
*/
- public class TypedKeyValue implements KeyValue<KEY, VALUE> {
+ public final class TypedKeyValue implements KeyValue<KEY, VALUE> {
private final KeyValue<byte[], byte[]> rawKeyValue;
- public TypedKeyValue(KeyValue<byte[], byte[]> rawKeyValue) {
+ private TypedKeyValue(KeyValue<byte[], byte[]> rawKeyValue) {
this.rawKeyValue = rawKeyValue;
}
@@ -573,15 +573,45 @@ public class TypedTable<KEY, VALUE> implements Table<KEY,
VALUE> {
/**
* Table Iterator implementation for strongly typed tables.
*/
- public class TypedTableIterator implements TableIterator<KEY, TypedKeyValue>
{
-
- private final TableIterator<byte[], KeyValue<byte[], byte[]>> rawIterator;
-
+ public class TypedTableIterator extends AbstractIterator<byte[]> {
public TypedTableIterator(
TableIterator<byte[], KeyValue<byte[], byte[]>> rawIterator) {
+ super(rawIterator);
+ }
+
+ @Override
+ byte[] convert(KEY key) throws IOException {
+ return encodeKey(key);
+ }
+
+ @Override
+ KeyValue<KEY, VALUE> convert(KeyValue<byte[], byte[]> raw) {
+ return new TypedKeyValue(raw);
+ }
+ }
+
+ /**
+ * An abstract {@link Table.KeyValueIterator} backed by a raw iterator.
+ *
+ * @param <RAW> The raw type.
+ */
+ abstract class AbstractIterator<RAW>
+ implements Table.KeyValueIterator<KEY, VALUE> {
+ private final TableIterator<RAW, KeyValue<RAW, RAW>> rawIterator;
+
+ AbstractIterator(TableIterator<RAW, KeyValue<RAW, RAW>> rawIterator) {
this.rawIterator = rawIterator;
}
+ /** Covert the given key to the {@link RAW} type. */
+ abstract RAW convert(KEY key) throws IOException;
+
+ /**
+ * Covert the given {@link Table.KeyValue}
+ * from ({@link RAW}, {@link RAW}) to ({@link KEY}, {@link VALUE}).
+ */
+ abstract KeyValue<KEY, VALUE> convert(KeyValue<RAW, RAW> raw);
+
@Override
public void seekToFirst() {
rawIterator.seekToFirst();
@@ -593,13 +623,9 @@ public class TypedTable<KEY, VALUE> implements Table<KEY,
VALUE> {
}
@Override
- public TypedKeyValue seek(KEY key) throws IOException {
- final byte[] keyBytes = encodeKey(key);
- KeyValue<byte[], byte[]> result = rawIterator.seek(keyBytes);
- if (result == null) {
- return null;
- }
- return new TypedKeyValue(result);
+ public KeyValue<KEY, VALUE> seek(KEY key) throws IOException {
+ final KeyValue<RAW, RAW> result = rawIterator.seek(convert(key));
+ return result == null ? null : convert(result);
}
@Override
@@ -613,8 +639,8 @@ public class TypedTable<KEY, VALUE> implements Table<KEY,
VALUE> {
}
@Override
- public TypedKeyValue next() {
- return new TypedKeyValue(rawIterator.next());
+ public KeyValue<KEY, VALUE> next() {
+ return convert(rawIterator.next());
}
@Override
diff --git
a/hadoop-hdds/framework/src/test/java/org/apache/hadoop/hdds/utils/db/TestRDBStoreIterator.java
b/hadoop-hdds/framework/src/test/java/org/apache/hadoop/hdds/utils/db/TestRDBStoreByteArrayIterator.java
similarity index 86%
rename from
hadoop-hdds/framework/src/test/java/org/apache/hadoop/hdds/utils/db/TestRDBStoreIterator.java
rename to
hadoop-hdds/framework/src/test/java/org/apache/hadoop/hdds/utils/db/TestRDBStoreByteArrayIterator.java
index 9006fb5721..23c8dee142 100644
---
a/hadoop-hdds/framework/src/test/java/org/apache/hadoop/hdds/utils/db/TestRDBStoreIterator.java
+++
b/hadoop-hdds/framework/src/test/java/org/apache/hadoop/hdds/utils/db/TestRDBStoreByteArrayIterator.java
@@ -55,7 +55,7 @@ import static org.mockito.Mockito.when;
* RDBStoreIterator to provide iteration over table elements in a typed manner.
* The tests are to ensure we access RocksDB via the iterator properly.
*/
-public class TestRDBStoreIterator {
+public class TestRDBStoreByteArrayIterator {
private RocksIterator rocksDBIteratorMock;
private ManagedRocksIterator managedRocksIterator;
@@ -69,6 +69,15 @@ public class TestRDBStoreIterator {
Logger.getLogger(ManagedRocksObjectUtils.class).setLevel(Level.DEBUG);
}
+ RDBStoreByteArrayIterator newIterator() {
+ return new RDBStoreByteArrayIterator(managedRocksIterator, null);
+ }
+
+ RDBStoreByteArrayIterator newIterator(byte[] prefix) {
+ return new RDBStoreByteArrayIterator(
+ managedRocksIterator, rocksTableMock, prefix);
+ }
+
@Test
public void testForeachRemainingCallsConsumerWithAllElements() {
when(rocksDBIteratorMock.isValid())
@@ -85,11 +94,11 @@ public class TestRDBStoreIterator {
final Consumer<Table.KeyValue<byte[], byte[]>> consumerStub
= mock(Consumer.class);
- RDBStoreIterator iter = new RDBStoreIterator(managedRocksIterator);
+ RDBStoreByteArrayIterator iter = newIterator();
iter.forEachRemaining(consumerStub);
- ArgumentCaptor<ByteArrayKeyValue> capture =
- ArgumentCaptor.forClass(ByteArrayKeyValue.class);
+ ArgumentCaptor<RawKeyValue.ByteArray> capture =
+ ArgumentCaptor.forClass(RawKeyValue.ByteArray.class);
verify(consumerStub, times(3)).accept(capture.capture());
assertArrayEquals(
new byte[]{0x00}, capture.getAllValues().get(0).getKey());
@@ -109,7 +118,7 @@ public class TestRDBStoreIterator {
public void testHasNextDependsOnIsvalid() {
when(rocksDBIteratorMock.isValid()).thenReturn(true, true, false);
- RDBStoreIterator iter = new RDBStoreIterator(managedRocksIterator);
+ RDBStoreByteArrayIterator iter = newIterator();
assertTrue(iter.hasNext());
assertFalse(iter.hasNext());
@@ -118,7 +127,7 @@ public class TestRDBStoreIterator {
@Test
public void testNextCallsIsValidThenGetsTheValueAndStepsToNext() {
when(rocksDBIteratorMock.isValid()).thenReturn(true);
- RDBStoreIterator iter = new RDBStoreIterator(managedRocksIterator);
+ RDBStoreByteArrayIterator iter = newIterator();
InOrder verifier = inOrder(rocksDBIteratorMock);
@@ -132,14 +141,14 @@ public class TestRDBStoreIterator {
@Test
public void testConstructorSeeksToFirstElement() {
- new RDBStoreIterator(managedRocksIterator);
+ newIterator();
verify(rocksDBIteratorMock, times(1)).seekToFirst();
}
@Test
public void testSeekToFirstSeeks() {
- RDBStoreIterator iter = new RDBStoreIterator(managedRocksIterator);
+ RDBStoreByteArrayIterator iter = newIterator();
iter.seekToFirst();
@@ -148,7 +157,7 @@ public class TestRDBStoreIterator {
@Test
public void testSeekToLastSeeks() {
- RDBStoreIterator iter = new RDBStoreIterator(managedRocksIterator);
+ RDBStoreByteArrayIterator iter = newIterator();
iter.seekToLast();
@@ -156,13 +165,13 @@ public class TestRDBStoreIterator {
}
@Test
- public void testSeekReturnsTheActualKey() {
+ public void testSeekReturnsTheActualKey() throws Exception {
when(rocksDBIteratorMock.isValid()).thenReturn(true);
when(rocksDBIteratorMock.key()).thenReturn(new byte[]{0x00});
when(rocksDBIteratorMock.value()).thenReturn(new byte[]{0x7f});
- RDBStoreIterator iter = new RDBStoreIterator(managedRocksIterator);
- ByteArrayKeyValue val = iter.seek(new byte[]{0x55});
+ RDBStoreByteArrayIterator iter = newIterator();
+ final Table.KeyValue<byte[], byte[]> val = iter.seek(new byte[]{0x55});
InOrder verifier = inOrder(rocksDBIteratorMock);
@@ -177,14 +186,14 @@ public class TestRDBStoreIterator {
}
@Test
- public void testGettingTheKeyIfIteratorIsValid() {
+ public void testGettingTheKeyIfIteratorIsValid() throws Exception {
when(rocksDBIteratorMock.isValid()).thenReturn(true);
when(rocksDBIteratorMock.key()).thenReturn(new byte[]{0x00});
- RDBStoreIterator iter = new RDBStoreIterator(managedRocksIterator);
+ RDBStoreByteArrayIterator iter = newIterator();
byte[] key = null;
if (iter.hasNext()) {
- ByteArrayKeyValue entry = iter.next();
+ final Table.KeyValue<byte[], byte[]> entry = iter.next();
key = entry.getKey();
}
@@ -196,13 +205,13 @@ public class TestRDBStoreIterator {
}
@Test
- public void testGettingTheValueIfIteratorIsValid() {
+ public void testGettingTheValueIfIteratorIsValid() throws Exception {
when(rocksDBIteratorMock.isValid()).thenReturn(true);
when(rocksDBIteratorMock.key()).thenReturn(new byte[]{0x00});
when(rocksDBIteratorMock.value()).thenReturn(new byte[]{0x7f});
- RDBStoreIterator iter = new RDBStoreIterator(managedRocksIterator);
- ByteArrayKeyValue entry;
+ RDBStoreByteArrayIterator iter = newIterator();
+ Table.KeyValue<byte[], byte[]> entry;
byte[] key = null;
byte[] value = null;
if (iter.hasNext()) {
@@ -225,8 +234,8 @@ public class TestRDBStoreIterator {
when(rocksDBIteratorMock.isValid()).thenReturn(true);
when(rocksDBIteratorMock.key()).thenReturn(testKey);
- RDBStoreIterator iter =
- new RDBStoreIterator(managedRocksIterator, rocksTableMock);
+ RDBStoreByteArrayIterator iter =
+ new RDBStoreByteArrayIterator(managedRocksIterator, rocksTableMock);
iter.removeFromDB();
InOrder verifier = inOrder(rocksDBIteratorMock, rocksTableMock);
@@ -237,14 +246,14 @@ public class TestRDBStoreIterator {
@Test
public void testRemoveFromDBWithoutDBTableSet() {
- RDBStoreIterator iter = new RDBStoreIterator(managedRocksIterator);
+ RDBStoreByteArrayIterator iter = newIterator();
assertThrows(UnsupportedOperationException.class,
iter::removeFromDB);
}
@Test
public void testCloseCloses() throws Exception {
- RDBStoreIterator iter = new RDBStoreIterator(managedRocksIterator);
+ RDBStoreByteArrayIterator iter = newIterator();
iter.close();
verify(rocksDBIteratorMock, times(1)).close();
@@ -252,8 +261,7 @@ public class TestRDBStoreIterator {
@Test
public void testNullPrefixedIterator() throws IOException {
- RDBStoreIterator iter = new RDBStoreIterator(managedRocksIterator,
- rocksTableMock, null);
+ RDBStoreByteArrayIterator iter = newIterator(null);
verify(rocksDBIteratorMock, times(1)).seekToFirst();
clearInvocations(rocksDBIteratorMock);
@@ -275,8 +283,7 @@ public class TestRDBStoreIterator {
@Test
public void testNormalPrefixedIterator() throws IOException {
byte[] testPrefix = "sample".getBytes(StandardCharsets.UTF_8);
- RDBStoreIterator iter = new RDBStoreIterator(managedRocksIterator,
- rocksTableMock, testPrefix);
+ RDBStoreByteArrayIterator iter = newIterator(testPrefix);
verify(rocksDBIteratorMock, times(1)).seek(testPrefix);
clearInvocations(rocksDBIteratorMock);
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]