From 9900ae49ba2b839eb3c549bb95cdf397743a8303 Mon Sep 17 00:00:00 2001 From: ivasilinets Date: Thu, 29 Jan 2015 18:14:08 +0300 Subject: [PATCH] Fix IgniteCacheIterator --- .../processors/cache/GridCacheAdapter.java | 16 ++---- .../processors/cache/IgniteCacheProxy.java | 2 +- .../GridCacheAbstractProjectionSelfTest.java | 50 +++++++++++++++++++ 3 files changed, 54 insertions(+), 14 deletions(-) diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheAdapter.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheAdapter.java index 92d20390de1ca..1c04d2905dbc4 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheAdapter.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheAdapter.java @@ -3887,10 +3887,10 @@ IgniteInternalFuture globalLoadCacheAsync(@Nullable IgniteBiPredicate p } /** - * @param prj Projection. + * @param delegate Cache proxy. * @return Distributed ignite cache iterator. */ - public Iterator> igniteIterator(final GridCacheProjectionImpl prj) { + public Iterator> igniteIterator(final IgniteCacheProxy delegate) { CacheQueryFuture> fut = queries().createScanQuery(null) .keepAll(false) .execute(); @@ -3901,17 +3901,7 @@ public Iterator> igniteIterator(final GridCacheProjectionImpl< } @Override protected void remove(Cache.Entry item) { - GridCacheProjectionImpl prev = ctx.gate().enter(prj); - - try { - GridCacheAdapter.this.removex(item.getKey()); - } - catch (IgniteCheckedException e) { - throw new CacheException(e); - } - finally { - ctx.gate().leave(prev); - } + delegate.remove(item.getKey()); } }); } 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 743e5b9231c4c..0bb2543566ab2 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 @@ -943,7 +943,7 @@ else if (clazz.equals(Ignite.class)) GridCacheProjectionImpl prev = gate.enter(prj); try { - return ((GridCacheAdapter)delegate).igniteIterator(prj); + return ctx.cache().igniteIterator(this); } finally { gate.leave(prev); diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheAbstractProjectionSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheAbstractProjectionSelfTest.java index 633733982e116..acdeedea5d82d 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheAbstractProjectionSelfTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheAbstractProjectionSelfTest.java @@ -614,6 +614,56 @@ public void testSkipStoreFlag() throws Exception { assertEquals(100500, (Object) cache().get("kk1")); } + /** + * @throws Exception if failed. + */ + public void testSkipStoreIterator() throws Exception { + assertNull(cache().put("1", 100500)); + + IgniteCache c = jcache().withSkipStore(); + + Iterator i = c.iterator(); + + assertTrue(i.hasNext()); + + i.next(); + + i.remove(); + + i = c.iterator(); + + assertFalse(i.hasNext()); + + assertNull(c.get("1")); + + assertEquals(100500, map.get("1")); + } + + /** + * @throws Exception if failed. + */ + public void testNotSkipStoreIterator() throws Exception { + assertNull(cache().put("1", 100500)); + + IgniteCache c = jcache(); + + Iterator i = c.iterator(); + + assertTrue(i.hasNext()); + + i.next(); + + i.remove(); + + i = c.iterator(); + + assertFalse(i.hasNext()); + + assertNull(c.get("1")); + + assertNull(map.get("1")); + } + /** * @throws Exception if failed. */