#IGNITE-53: wip
Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/adf6bf9f Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/adf6bf9f Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/adf6bf9f Branch: refs/heads/sprint-1 Commit: adf6bf9f9ea810beb6e77dde5bd3f36756ba2ea2 Parents: 984ac18 Author: ivasilinets <ivasilin...@gridgain.com> Authored: Thu Jan 15 11:27:52 2015 +0400 Committer: ivasilinets <ivasilin...@gridgain.com> Committed: Thu Jan 15 11:27:52 2015 +0400 ---------------------------------------------------------------------- .../processors/cache/IgniteCacheProxy.java | 66 ++++++++++++-------- .../cache/GridCacheAbstractFullApiSelfTest.java | 15 ++--- 2 files changed, 47 insertions(+), 34 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/adf6bf9f/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheProxy.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheProxy.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheProxy.java index 3d8c75c..6a75ebb 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheProxy.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheProxy.java @@ -1078,57 +1078,49 @@ public class IgniteCacheProxy<K, V> extends IgniteAsyncSupportAdapter implements */ private class IgniteCacheIterator implements Iterator<Cache.Entry<K, V>> { /** Cache query future for all entries in distributed ignite cache. */ - private final GridCacheQueryFuture<Map.Entry<K, V>> fut; + private GridCacheQueryFuture<Map.Entry<K, V>> fut; /** Current element. */ - private Map.Entry<K, V> curIter; + private Map.Entry<K, V> curEntry; /** Next element. */ - private Map.Entry<K,V> nextIter; + private Map.Entry<K,V> nextEntry; - /** - * No-arg constructor. - */ - public IgniteCacheIterator() { - fut = delegate.queries().createScanQuery(null).execute(); - - try { - nextIter = fut.next(); - } - catch (IgniteCheckedException e) { - throw cacheException(e); - } - } + /** Init first time. */ + private boolean firstTime = true; /** {@inheritDoc} */ @Override public boolean hasNext() { - return nextIter != null; + initFirstTime(); + + return nextEntry != null; } /** {@inheritDoc} */ @Override public Entry<K, V> next() { - curIter = nextIter; + initFirstTime(); - if (curIter == null) { + curEntry = nextEntry; + + if (curEntry == null) throw new NoSuchElementException(); - } try { - nextIter = fut.next(); + nextEntry = fut.next(); } catch (IgniteCheckedException e) { - curIter = null; + curEntry = null; throw cacheException(e); } return new Cache.Entry<K, V>() { @Override public K getKey() { - return curIter.getKey(); + return curEntry.getKey(); } @Override public V getValue() { - return curIter.getValue(); + return curEntry.getValue(); } @Override public <T> T unwrap(Class<T> clazz) { @@ -1139,16 +1131,36 @@ public class IgniteCacheProxy<K, V> extends IgniteAsyncSupportAdapter implements /** {@inheritDoc} */ @Override public void remove() { - if (curIter == null) + if (curEntry == null) throw new IllegalStateException(); try { - delegate.removex(curIter.getKey()); + delegate.removex(curEntry.getKey()); + } + catch (IgniteCheckedException e) { + throw cacheException(e); + } + + curEntry = null; + } + + /** + * Initialize fields at first call + */ + private void initFirstTime() { + if (!firstTime) { + return; + } + + firstTime = false; + fut = delegate.queries().createScanQuery(null).execute(); + + try { + nextEntry = fut.next(); } catch (IgniteCheckedException e) { throw cacheException(e); } - curIter = null; } } } http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/adf6bf9f/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/GridCacheAbstractFullApiSelfTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/GridCacheAbstractFullApiSelfTest.java b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/GridCacheAbstractFullApiSelfTest.java index 0753ab4..2cf5860 100644 --- a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/GridCacheAbstractFullApiSelfTest.java +++ b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/GridCacheAbstractFullApiSelfTest.java @@ -5291,19 +5291,20 @@ public abstract class GridCacheAbstractFullApiSelfTest extends GridCacheAbstract checkIteratorCache(entries); - try { - //check that we cannot call Iterator.remove() without next(). - Iterator<Cache.Entry<String, Integer>> iter = jcache(0).iterator(); + //check that we cannot call Iterator.remove() without next(). + Iterator<Cache.Entry<String, Integer>> iter = jcache(0).iterator(); - assertTrue(iter.hasNext()); + assertTrue(iter.hasNext()); - iter.next(); - iter.remove(); + iter.next(); + iter.remove(); + + try { iter.remove(); fail(); } - catch (Exception e) { + catch (IllegalStateException e) { } }