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);
     }