Remove the iterable interface from KeyValueSnapshot
The iterable interface makes it hard for the users to close it after using.
Author: xinyuiscool <xiliu@linkedin.com>
Reviewers: Prateek M <prateekm@apache.org>
Closes #516 from xinyuiscool/kv-snapshot
(cherry picked from commit e204d298e84f549ecf4d8d9d642304502f046c29)
Signed-off-by: xiliu <xiliu@linkedin.com>
diff --git a/samza-api/src/main/java/org/apache/samza/storage/kv/KeyValueSnapshot.java b/samza-api/src/main/java/org/apache/samza/storage/kv/KeyValueSnapshot.java
index 52cb7fa..850d1d9 100644
--- a/samza-api/src/main/java/org/apache/samza/storage/kv/KeyValueSnapshot.java
+++ b/samza-api/src/main/java/org/apache/samza/storage/kv/KeyValueSnapshot.java
@@ -26,7 +26,7 @@
* @param <K> key type
* @param <V> value type
*/
-public interface KeyValueSnapshot<K, V> extends Iterable<Entry<K, V>> {
+public interface KeyValueSnapshot<K, V> {
/**
* Creates a new iterator for this snapshot. The iterator MUST be
* closed after its execution by invoking {@link KeyValueIterator#close}.
diff --git a/samza-kv-inmemory/src/test/java/org/apache/samza/storage/kv/inmemory/TestInMemoryKeyValueStore.java b/samza-kv-inmemory/src/test/java/org/apache/samza/storage/kv/inmemory/TestInMemoryKeyValueStore.java
index 7ee588c..5919690 100644
--- a/samza-kv-inmemory/src/test/java/org/apache/samza/storage/kv/inmemory/TestInMemoryKeyValueStore.java
+++ b/samza-kv-inmemory/src/test/java/org/apache/samza/storage/kv/inmemory/TestInMemoryKeyValueStore.java
@@ -23,6 +23,7 @@
import com.google.common.primitives.Ints;
import org.apache.samza.metrics.MetricsRegistryMap;
import org.apache.samza.storage.kv.Entry;
+import org.apache.samza.storage.kv.KeyValueIterator;
import org.apache.samza.storage.kv.KeyValueSnapshot;
import org.apache.samza.storage.kv.KeyValueStoreMetrics;
import org.junit.Test;
@@ -57,7 +58,9 @@
assertTrue(Iterators.size(snapshot.iterator()) == 100);
List<Integer> keys = new ArrayList<>();
- for (Entry<byte[], byte[]> entry : snapshot) {
+ KeyValueIterator<byte[], byte[]> iter = snapshot.iterator();
+ while (iter.hasNext()) {
+ Entry<byte[], byte[]> entry = iter.next();
int key = Ints.fromByteArray(Arrays.copyOfRange(entry.getKey(), prefix.getBytes().length, entry.getKey().length));
keys.add(key);
}