Repository: ignite Updated Branches: refs/heads/master ecca3e3ed -> cf7003cd3
IGNITE-9532 Binary mode for Ignite Queue uday 2018-10-09 21:11 - Fixes #4720. Signed-off-by: Dmitriy Pavlov <[email protected]> Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/cf7003cd Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/cf7003cd Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/cf7003cd Branch: refs/heads/master Commit: cf7003cd3272c38685f482a9635a9abe2d9a13bf Parents: ecca3e3 Author: uday <[email protected]> Authored: Thu Dec 13 20:57:24 2018 +0300 Committer: Dmitriy Pavlov <[email protected]> Committed: Thu Dec 13 20:57:24 2018 +0300 ---------------------------------------------------------------------- .../java/org/apache/ignite/IgniteQueue.java | 8 + .../datastructures/GridCacheQueueAdapter.java | 34 +++- .../datastructures/GridCacheQueueProxy.java | 12 ++ .../GridCacheQueueApiSelfAbstractTest.java | 197 ++++++++++++------- ...eCacheDataStructuresBinarySelfTestSuite.java | 51 +++++ .../IgniteCacheDataStructuresSelfTestSuite.java | 4 +- 6 files changed, 228 insertions(+), 78 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/cf7003cd/modules/core/src/main/java/org/apache/ignite/IgniteQueue.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/IgniteQueue.java b/modules/core/src/main/java/org/apache/ignite/IgniteQueue.java index 2dc38e7..98fc605 100644 --- a/modules/core/src/main/java/org/apache/ignite/IgniteQueue.java +++ b/modules/core/src/main/java/org/apache/ignite/IgniteQueue.java @@ -204,4 +204,12 @@ public interface IgniteQueue<T> extends BlockingQueue<T>, Closeable { * @throws IgniteException If job failed. */ public <R> R affinityCall(IgniteCallable<R> job) throws IgniteException; + + /** + * Returns queue that will operate with binary objects. This is similar to {@link IgniteCache#withKeepBinary()} but + * for queues. + * + * @return New queue instance for binary objects. + */ + public <V1> IgniteQueue<V1> withKeepBinary(); } http://git-wip-us.apache.org/repos/asf/ignite/blob/cf7003cd/modules/core/src/main/java/org/apache/ignite/internal/processors/datastructures/GridCacheQueueAdapter.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/datastructures/GridCacheQueueAdapter.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/datastructures/GridCacheQueueAdapter.java index d591a29..e3a77c5 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/datastructures/GridCacheQueueAdapter.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/datastructures/GridCacheQueueAdapter.java @@ -37,6 +37,8 @@ import org.apache.ignite.IgniteException; import org.apache.ignite.IgniteInterruptedException; import org.apache.ignite.IgniteLogger; import org.apache.ignite.IgniteQueue; +import org.apache.ignite.binary.BinaryObject; +import org.apache.ignite.internal.processors.cache.CacheOperationContext; import org.apache.ignite.internal.processors.cache.GridCacheAdapter; import org.apache.ignite.internal.processors.cache.GridCacheContext; import org.apache.ignite.internal.util.tostring.GridToStringExclude; @@ -51,6 +53,7 @@ import org.apache.ignite.lang.IgniteUuid; import org.jetbrains.annotations.Nullable; import static java.util.concurrent.TimeUnit.MILLISECONDS; +import static org.apache.ignite.internal.processors.cache.CacheOperationContext.DFLT_ALLOW_ATOMIC_OPS_IN_TX; /** * Common code for {@link IgniteQueue} implementation. @@ -363,12 +366,14 @@ public abstract class GridCacheQueueAdapter<T> extends AbstractCollection<T> imp A.ensure(batchSize >= 0, "Batch size cannot be negative: " + batchSize); try { - IgniteBiTuple<Long, Long> t = - (IgniteBiTuple<Long, Long>)cache.invoke(queueKey, new ClearProcessor(id)).get(); + Object obj = cache.invoke(queueKey, new ClearProcessor(id)).get(); - if (t == null) + if (obj == null) return; + IgniteBiTuple<Long, Long> t = obj instanceof BinaryObject ? ((BinaryObject)obj).deserialize() + : (IgniteBiTuple<Long, Long>)obj; + checkRemoved(t.get1()); removeKeys(cache, id, queueName, collocated, t.get1(), t.get2(), batchSize); @@ -422,6 +427,29 @@ public abstract class GridCacheQueueAdapter<T> extends AbstractCollection<T> imp return compute.affinityCall(cache.name(), queueKey, job); } + /** {@inheritDoc} */ + @Override public <V1> IgniteQueue<V1> withKeepBinary() { + CacheOperationContext opCtx = cctx.operationContextPerCall(); + + if (opCtx != null && opCtx.isKeepBinary()) + return (GridCacheQueueAdapter<V1>)this; + + opCtx = opCtx == null ? new CacheOperationContext( + false, + null, + true, + null, + false, + null, + false, + DFLT_ALLOW_ATOMIC_OPS_IN_TX) + : opCtx.keepBinary(); + + cctx.operationContextPerCall(opCtx); + + return (GridCacheQueueAdapter<V1>)this; + } + /** * @param cache Queue cache. * @param id Queue unique ID. http://git-wip-us.apache.org/repos/asf/ignite/blob/cf7003cd/modules/core/src/main/java/org/apache/ignite/internal/processors/datastructures/GridCacheQueueProxy.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/datastructures/GridCacheQueueProxy.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/datastructures/GridCacheQueueProxy.java index 627f8ec..7a1b92b 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/datastructures/GridCacheQueueProxy.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/datastructures/GridCacheQueueProxy.java @@ -447,6 +447,18 @@ public class GridCacheQueueProxy<T> implements IgniteQueue<T>, Externalizable { } /** {@inheritDoc} */ + @Override public <V1> IgniteQueue<V1> withKeepBinary() { + gate.enter(); + + try { + return new GridCacheQueueProxy<>(cctx, (GridCacheQueueAdapter<V1>)delegate.withKeepBinary()); + } + finally { + gate.leave(); + } + } + + /** {@inheritDoc} */ @Override public int hashCode() { return delegate.hashCode(); } http://git-wip-us.apache.org/repos/asf/ignite/blob/cf7003cd/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/datastructures/GridCacheQueueApiSelfAbstractTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/datastructures/GridCacheQueueApiSelfAbstractTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/datastructures/GridCacheQueueApiSelfAbstractTest.java index d25f405..f018aca 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/datastructures/GridCacheQueueApiSelfAbstractTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/datastructures/GridCacheQueueApiSelfAbstractTest.java @@ -29,6 +29,8 @@ import org.apache.ignite.Ignite; import org.apache.ignite.IgniteCache; import org.apache.ignite.IgniteException; import org.apache.ignite.IgniteQueue; +import org.apache.ignite.IgniteSystemProperties; +import org.apache.ignite.binary.BinaryObject; import org.apache.ignite.cache.CacheMode; import org.apache.ignite.cluster.ClusterNode; import org.apache.ignite.configuration.CacheConfiguration; @@ -43,6 +45,7 @@ import org.apache.ignite.lang.IgniteRunnable; import org.apache.ignite.resources.IgniteInstanceResource; import org.apache.ignite.testframework.GridTestUtils; import org.apache.ignite.transactions.Transaction; +import org.jetbrains.annotations.Nullable; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; @@ -56,6 +59,12 @@ import static org.apache.ignite.cache.CacheWriteSynchronizationMode.FULL_SYNC; */ @RunWith(JUnit4.class) public abstract class GridCacheQueueApiSelfAbstractTest extends IgniteCollectionAbstractTest { + /** To be used as a boolean system property. If true then run binary tests. */ + public static final String BINARY_QUEUE = "BINARY_QUEUE"; + + /** Binary queue mode. */ + private static final boolean BINARY_QUEUE_MODE = IgniteSystemProperties.getBoolean(BINARY_QUEUE, false); + /** */ private static final int QUEUE_CAPACITY = 3; @@ -68,6 +77,19 @@ public abstract class GridCacheQueueApiSelfAbstractTest extends IgniteCollection } /** + * Intialize Ignite queue + */ + protected <T> IgniteQueue<T> initQueue(int idx, String name, int cap, + @Nullable CollectionConfiguration cfg) { + IgniteQueue<T> queue = grid(idx).queue(name, cap, cfg); + + if (queue != null && BINARY_QUEUE_MODE) + return queue.withKeepBinary(); + + return queue; + } + + /** * JUnit. * * @throws Exception If failed. @@ -80,9 +102,9 @@ public abstract class GridCacheQueueApiSelfAbstractTest extends IgniteCollection CollectionConfiguration colCfg = config(false); - IgniteQueue queue1 = grid(0).queue(queueName1, 0, colCfg); - IgniteQueue queue2 = grid(0).queue(queueName2, 0, colCfg); - IgniteQueue queue3 = grid(0).queue(queueName1, 0, colCfg); + IgniteQueue queue1 = initQueue(0, queueName1, 0, colCfg); + IgniteQueue queue2 = initQueue(0, queueName2, 0, colCfg); + IgniteQueue queue3 = initQueue(0, queueName1, 0, colCfg); assertNotNull(queue1); assertNotNull(queue2); @@ -95,8 +117,8 @@ public abstract class GridCacheQueueApiSelfAbstractTest extends IgniteCollection queue2.close(); queue3.close(); - assertNull(grid(0).queue(queueName1, 0, null)); - assertNull(grid(0).queue(queueName2, 0, null)); + assertNull(initQueue(0, queueName1, 0, null)); + assertNull(initQueue(0, queueName2, 0, null)); } /** @@ -111,7 +133,7 @@ public abstract class GridCacheQueueApiSelfAbstractTest extends IgniteCollection String val = UUID.randomUUID().toString(); - IgniteQueue<String> queue = grid(0).queue(queueName, 0, config(false)); + IgniteQueue<String> queue = initQueue(0, queueName, 0, config(false)); assert queue.add(val); @@ -130,7 +152,7 @@ public abstract class GridCacheQueueApiSelfAbstractTest extends IgniteCollection String val = UUID.randomUUID().toString(); - IgniteQueue<String> queue = grid(0).queue(queueName, 0, config(false)); + IgniteQueue<String> queue = initQueue(0, queueName, 0, config(false)); assert queue.add(val); @@ -145,73 +167,71 @@ public abstract class GridCacheQueueApiSelfAbstractTest extends IgniteCollection * @throws Exception If failed. */ @Test - public void testCollectionMethods() throws Exception { + public <T> void testCollectionMethods() throws Exception { // Random queue name. String queueName = UUID.randomUUID().toString(); - IgniteQueue<SameHashItem> queue = grid(0).queue(queueName, 0, config(false)); + IgniteQueue<T> queue = initQueue(0, queueName, 0, config(false)); + + SameHashInstanceFactory<T> factory = new SameHashInstanceFactory<T>(grid(0)); int retries = 100; // Initialize queue. for (int i = 0; i < retries; i++) - queue.addAll(Arrays.asList(new SameHashItem(Integer.toString(i)), new SameHashItem(Integer.toString(i)))); + queue.addAll(Arrays.asList(factory.instance(i), factory.instance(i))); // Get arrays from queue. assertEquals(retries * 2, queue.toArray().length); - SameHashItem[] arr2 = new SameHashItem[retries * 3]; + T[] arr2 = factory.array(retries * 3); Object[] arr3 = queue.toArray(arr2); assertEquals(arr2, arr3); - assertEquals(arr3[0], new SameHashItem("0")); + assertEquals(arr3[0], factory.instance(0)); // Check queue items. assertEquals(retries * 2, queue.size()); - assertTrue(queue.contains(new SameHashItem(Integer.toString(14)))); + assertTrue(queue.contains(factory.instance(14))); - assertFalse(queue.contains(new SameHashItem(Integer.toString(144)))); + assertFalse(queue.contains(factory.instance(144))); - Collection<SameHashItem> col1 = Arrays.asList(new SameHashItem(Integer.toString(14)), - new SameHashItem(Integer.toString(14)), new SameHashItem(Integer.toString(18))); + Collection<T> col1 = Arrays.asList(factory.instance(14), factory.instance(14), factory.instance(18)); assertTrue(queue.containsAll(col1)); - Collection<SameHashItem> col2 = Arrays.asList(new SameHashItem(Integer.toString(245)), - new SameHashItem(Integer.toString(14)), new SameHashItem(Integer.toString(18))); + Collection<T> col2 = Arrays.asList(factory.instance(245), factory.instance(14), factory.instance(18)); assertFalse(queue.containsAll(col2)); // Try to remove item. - assertTrue(queue.remove(new SameHashItem(Integer.toString(14)))); + assertTrue(queue.remove(factory.instance(14))); assertEquals((retries * 2) - 1, queue.size()); - assertTrue(queue.contains(new SameHashItem(Integer.toString(14)))); + assertTrue(queue.contains(factory.instance(14))); - assertTrue(queue.remove(new SameHashItem(Integer.toString(14)))); + assertTrue(queue.remove(factory.instance(14))); assertEquals((retries - 1) * 2, queue.size()); - assertFalse(queue.remove(new SameHashItem(Integer.toString(14)))); + assertFalse(queue.remove(factory.instance(14))); // Try to remove some items. - assertTrue(queue.contains(new SameHashItem(Integer.toString(33)))); + assertTrue(queue.contains(factory.instance(33))); - assertTrue(queue.removeAll(Arrays.asList(new SameHashItem(Integer.toString(15)), - new SameHashItem(Integer.toString(14)), new SameHashItem(Integer.toString(33)), - new SameHashItem(Integer.toString(1))))); + assertTrue(queue.removeAll(Arrays.asList(factory.instance(15), factory.instance(14), factory.instance(33), + factory.instance(1)))); - assertFalse(queue.contains(new SameHashItem(Integer.toString(33)))); + assertFalse(queue.contains(factory.instance(33))); // Try to retain all items. - assertTrue(queue.retainAll(Arrays.asList(new SameHashItem(Integer.toString(15)), - new SameHashItem(Integer.toString(14)), new SameHashItem(Integer.toString(33)), - new SameHashItem(Integer.toString(1))))); + assertTrue(queue.retainAll(Arrays.asList(factory.instance(15), factory.instance(14), factory.instance(33), + factory.instance(1)))); - assertFalse(queue.contains(new SameHashItem(Integer.toString(2)))); + assertFalse(queue.contains(factory.instance(2))); assert queue.isEmpty(); } @@ -226,7 +246,7 @@ public abstract class GridCacheQueueApiSelfAbstractTest extends IgniteCollection // Random queue name. String queueName = UUID.randomUUID().toString(); - IgniteQueue<String> queue = grid(0).queue(queueName, 0, config(false)); + IgniteQueue<String> queue = initQueue(0, queueName, 0, config(false)); assert queue.add("1"); @@ -249,7 +269,7 @@ public abstract class GridCacheQueueApiSelfAbstractTest extends IgniteCollection // Random queue name. String queueName = UUID.randomUUID().toString(); - IgniteQueue<String> queue = grid(0).queue(queueName, 0, config(false)); + IgniteQueue<String> queue = initQueue(0, queueName, 0, config(false)); String item1 = "1"; assert queue.add(item1); @@ -288,7 +308,7 @@ public abstract class GridCacheQueueApiSelfAbstractTest extends IgniteCollection // Random queue name. String queueName = UUID.randomUUID().toString(); - IgniteQueue<String> queue = grid(0).queue(queueName, 0, config(collocated)); + IgniteQueue<String> queue = initQueue(0, queueName, 0, config(collocated)); for (int i = 0; i < 100; i++) assert queue.add(Integer.toString(i)); @@ -345,7 +365,7 @@ public abstract class GridCacheQueueApiSelfAbstractTest extends IgniteCollection // Random queue name. String queueName = UUID.randomUUID().toString(); - IgniteQueue<String> queue = grid(0).queue(queueName, QUEUE_CAPACITY, config(false)); + IgniteQueue<String> queue = initQueue(0, queueName, QUEUE_CAPACITY, config(false)); String thName = Thread.currentThread().getName(); @@ -368,7 +388,7 @@ public abstract class GridCacheQueueApiSelfAbstractTest extends IgniteCollection // Random queue name. String queueName = UUID.randomUUID().toString(); - final IgniteQueue<String> queue = grid(0).queue(queueName, QUEUE_CAPACITY, config(false)); + final IgniteQueue<String> queue = initQueue(0, queueName, QUEUE_CAPACITY, config(false)); multithreaded(new Callable<Void>() { @Override public Void call() throws Exception { @@ -397,7 +417,7 @@ public abstract class GridCacheQueueApiSelfAbstractTest extends IgniteCollection // Random queue name. String queueName = UUID.randomUUID().toString(); - final IgniteQueue<String> queue = grid(0).queue(queueName, QUEUE_CAPACITY, config(false)); + final IgniteQueue<String> queue = initQueue(0, queueName, QUEUE_CAPACITY, config(false)); multithreaded(new Callable<String>() { @Override public String call() throws Exception { @@ -425,7 +445,7 @@ public abstract class GridCacheQueueApiSelfAbstractTest extends IgniteCollection // Random queue name. final String queueName = UUID.randomUUID().toString(); - final IgniteQueue<String> queue = grid(0).queue(queueName, QUEUE_CAPACITY, config(false)); + final IgniteQueue<String> queue = initQueue(0, queueName, QUEUE_CAPACITY, config(false)); final CountDownLatch putLatch = new CountDownLatch(THREAD_NUM); @@ -461,7 +481,7 @@ public abstract class GridCacheQueueApiSelfAbstractTest extends IgniteCollection IgniteInternalFuture<?> closeFut = GridTestUtils.runMultiThreadedAsync(new Callable<Void>() { @Override public Void call() throws Exception { try { - IgniteQueue<String> queue = grid(0).queue(queueName, 0, null); + IgniteQueue<String> queue = initQueue(0, queueName, 0, null); if (queue != null) queue.close(); @@ -506,7 +526,7 @@ public abstract class GridCacheQueueApiSelfAbstractTest extends IgniteCollection // Random queue name. String queueName = UUID.randomUUID().toString(); - IgniteQueue<String> queue = grid(0).queue(queueName, 0, config(false)); + IgniteQueue<String> queue = initQueue(0, queueName, 0, config(false)); String thread = Thread.currentThread().getName(); @@ -532,7 +552,7 @@ public abstract class GridCacheQueueApiSelfAbstractTest extends IgniteCollection // Random queue name. String queueName = UUID.randomUUID().toString(); - final IgniteQueue<String> queue = grid(0).queue(queueName, 0, config(false)); + final IgniteQueue<String> queue = initQueue(0, queueName, 0, config(false)); multithreaded( new Callable<String>() { @@ -567,7 +587,7 @@ public abstract class GridCacheQueueApiSelfAbstractTest extends IgniteCollection // Random queue name. String queueName = UUID.randomUUID().toString(); - IgniteQueue<String> queue = grid(0).queue(queueName, 0, config(false)); + IgniteQueue<String> queue = initQueue(0, queueName, 0, config(false)); for (int i = 0; i < QUEUE_CAPACITY; i++) queue.put("Item-" + i); @@ -599,7 +619,7 @@ public abstract class GridCacheQueueApiSelfAbstractTest extends IgniteCollection // Random queue name. String queueName = UUID.randomUUID().toString(); - IgniteQueue<String> queue = grid(0).queue(queueName, 0, config(false)); + IgniteQueue<String> queue = initQueue(0, queueName, 0, config(false)); for (int i = 0; i < 5; i++) queue.put("Item-" + i); @@ -632,9 +652,9 @@ public abstract class GridCacheQueueApiSelfAbstractTest extends IgniteCollection public void testReuseCache() throws Exception { CollectionConfiguration colCfg = collectionConfiguration(); - IgniteQueue queue1 = grid(0).queue("Queue1", 0, colCfg); + IgniteQueue queue1 = initQueue(0, "Queue1", 0, colCfg); - IgniteQueue queue2 = grid(0).queue("Queue2", 0, colCfg); + IgniteQueue queue2 = initQueue(0, "Queue2", 0, colCfg); assertEquals(getQueueCache(queue1), getQueueCache(queue2)); } @@ -653,9 +673,9 @@ public abstract class GridCacheQueueApiSelfAbstractTest extends IgniteCollection else colCfg2.setAtomicityMode(ATOMIC); - IgniteQueue queue1 = grid(0).queue("Queue1", 0, colCfg1); + IgniteQueue queue1 = initQueue(0, "Queue1", 0, colCfg1); - IgniteQueue queue2 = grid(0).queue("Queue2", 0, colCfg2); + IgniteQueue queue2 = initQueue(0, "Queue2", 0, colCfg2); assertNotSame(getQueueCache(queue1), getQueueCache(queue2)); } @@ -675,10 +695,10 @@ public abstract class GridCacheQueueApiSelfAbstractTest extends IgniteCollection } }); - grid(0).queue("Queue1", 0, colCfg1); + initQueue(0, "Queue1", 0, colCfg1); try { - grid(0).queue("Queue2", 0, colCfg2); + initQueue(0, "Queue2", 0, colCfg2); fail("Exception was expected."); } @@ -694,7 +714,7 @@ public abstract class GridCacheQueueApiSelfAbstractTest extends IgniteCollection public void testSystemCache() throws Exception { CollectionConfiguration colCfg = collectionConfiguration(); - IgniteQueue queue = grid(0).queue("Queue1", 0, colCfg); + IgniteQueue queue = initQueue(0, "Queue1", 0, colCfg); final CacheConfiguration ccfg = getQueueCache(queue); @@ -719,7 +739,7 @@ public abstract class GridCacheQueueApiSelfAbstractTest extends IgniteCollection colCfg.setGroupName("testGroup"); colCfg.setCacheMode(CacheMode.PARTITIONED); - try (final IgniteQueue<Integer> queue1 = grid(0).queue("Queue1", 0, colCfg)) { + try (final IgniteQueue<Integer> queue1 = initQueue(0, "Queue1", 0, colCfg)) { GridTestUtils.assertThrows( log, new Callable<Void>() { @@ -740,7 +760,7 @@ public abstract class GridCacheQueueApiSelfAbstractTest extends IgniteCollection colCfg.setCollocated(true); - try (final IgniteQueue<Integer> queue2 = grid(0).queue("Queue2", 0, colCfg)) { + try (final IgniteQueue<Integer> queue2 = initQueue(0, "Queue2", 0, colCfg)) { queue2.add(100); queue2.affinityRun(new IgniteRunnable() { @@ -768,7 +788,7 @@ public abstract class GridCacheQueueApiSelfAbstractTest extends IgniteCollection colCfg.setGroupName("testGroup"); colCfg.setCacheMode(CacheMode.PARTITIONED); - try (final IgniteQueue<Integer> queue1 = grid(0).queue("Queue1", 0, colCfg)) { + try (final IgniteQueue<Integer> queue1 = initQueue(0, "Queue1", 0, colCfg)) { GridTestUtils.assertThrows( log, new Callable<Void>() { @@ -789,7 +809,7 @@ public abstract class GridCacheQueueApiSelfAbstractTest extends IgniteCollection colCfg.setCollocated(true); - try (final IgniteQueue<Integer> queue2 = grid(0).queue("Queue2", 0, colCfg)) { + try (final IgniteQueue<Integer> queue2 = initQueue(0, "Queue2", 0, colCfg)) { queue2.add(100); Integer res = queue2.affinityCall(new IgniteCallable<Integer>() { @@ -829,7 +849,7 @@ public abstract class GridCacheQueueApiSelfAbstractTest extends IgniteCollection try { String queueName = UUID.randomUUID().toString(); - IgniteQueue<String> queue = grid(0).queue(queueName, 0, config(false)); + IgniteQueue<String> queue = initQueue(0, queueName, 0, config(false)); try (Transaction tx = ignite.transactions().txStart()) { cache.put(1, 1); @@ -870,22 +890,20 @@ public abstract class GridCacheQueueApiSelfAbstractTest extends IgniteCollection */ @Test public void testCacheReuse() throws Exception { - Ignite ignite = grid(0); - CollectionConfiguration colCfg = collectionConfiguration(); colCfg.setAtomicityMode(ATOMIC); colCfg.setGroupName("grp1"); - IgniteQueue queue1 = ignite.queue("queue1", 100, colCfg); - IgniteQueue queue2 = ignite.queue("queue2", 100, colCfg); + IgniteQueue queue1 = initQueue(0, "queue1", 100, colCfg); + IgniteQueue queue2 = initQueue(0, "queue2", 100, colCfg); assert cctx(queue1).cacheId() == cctx(queue2).cacheId(); colCfg.setAtomicityMode(TRANSACTIONAL); - IgniteQueue queue3 = ignite.queue("queue3", 100, colCfg); - IgniteQueue queue4 = ignite.queue("queue4", 100, colCfg); + IgniteQueue queue3 = initQueue(0, "queue3", 100, colCfg); + IgniteQueue queue4 = initQueue(0, "queue4", 100, colCfg); assert cctx(queue3).cacheId() == cctx(queue4).cacheId(); assert cctx(queue1).cacheId() != cctx(queue3).cacheId(); @@ -893,8 +911,8 @@ public abstract class GridCacheQueueApiSelfAbstractTest extends IgniteCollection colCfg.setGroupName("gtp2"); - IgniteQueue queue5 = ignite.queue("queue5", 100, colCfg); - IgniteQueue queue6 = ignite.queue("queue6", 100, colCfg); + IgniteQueue queue5 = initQueue(0, "queue5", 100, colCfg); + IgniteQueue queue6 = initQueue(0, "queue6", 100, colCfg); assert cctx(queue5).cacheId() == cctx(queue6).cacheId(); assert cctx(queue1).groupId() != cctx(queue5).groupId(); @@ -907,15 +925,13 @@ public abstract class GridCacheQueueApiSelfAbstractTest extends IgniteCollection */ @Test public void testMultipleStructuresInDifferentGroups() throws Exception { - Ignite ignite = grid(0); - CollectionConfiguration cfg1 = collectionConfiguration(); CollectionConfiguration cfg2 = collectionConfiguration().setGroupName("grp2"); - IgniteQueue<String> queue1 = ignite.queue("queue1", 100, cfg1); - IgniteQueue<String> queue2 = ignite.queue("queue2", 100, cfg1); - IgniteQueue<String> queue3 = ignite.queue("queue3", 100, cfg2); - IgniteQueue<String> queue4 = ignite.queue("queue4", 100, cfg2); + IgniteQueue<String> queue1 = initQueue(0, "queue1", 100, cfg1); + IgniteQueue<String> queue2 = initQueue(0, "queue2", 100, cfg1); + IgniteQueue<String> queue3 = initQueue(0, "queue3", 100, cfg2); + IgniteQueue<String> queue4 = initQueue(0, "queue4", 100, cfg2); assertTrue(queue1.offer("a")); assertTrue(queue2.offer("b")); @@ -961,8 +977,8 @@ public abstract class GridCacheQueueApiSelfAbstractTest extends IgniteCollection assertFalse(queue1.removed()); assertFalse(queue3.removed()); - assertNotNull(ignite.queue("queue1", 100, null)); - assertNull(ignite.queue("queue2", 100, null)); + assertNotNull(initQueue(0, "queue1", 100, null)); + assertNull(initQueue(0, "queue2", 100, null)); queue1.close(); queue3.close(); @@ -971,14 +987,14 @@ public abstract class GridCacheQueueApiSelfAbstractTest extends IgniteCollection /** * Test class with the same hash code. */ - private static class SameHashItem implements Serializable { - /** Data field*/ + protected static class SameHashItem implements Serializable { + /** Data field */ private final String s; /** * @param s Item data. */ - private SameHashItem(String s) { + protected SameHashItem(String s) { this.s = s; } @@ -1007,4 +1023,37 @@ public abstract class GridCacheQueueApiSelfAbstractTest extends IgniteCollection } } + /** + * Class to generate {@link SameHashItem} or {@link BinaryObject} objects based on wheter the queue mode is + * binary. + */ + private static class SameHashInstanceFactory<T> { + /** Ignite instance. */ + private Ignite ignite; + + /** + * @param ignite Ignite instance. + */ + SameHashInstanceFactory(Ignite ignite) { + this.ignite = ignite; + } + + /** + * @param val value to be used for creating the instance. + */ + public T instance(int val) { + return BINARY_QUEUE_MODE + ? (T)ignite.binary().toBinary(new SameHashItem(Integer.toString(val))) + : (T)new SameHashItem(Integer.toString(val)); + } + + /** + * @param size Size of array. + */ + public T[] array(int size) { + return BINARY_QUEUE_MODE + ? (T[])new BinaryObject[size] + : (T[])new SameHashItem[size]; + } + } } http://git-wip-us.apache.org/repos/asf/ignite/blob/cf7003cd/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheDataStructuresBinarySelfTestSuite.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheDataStructuresBinarySelfTestSuite.java b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheDataStructuresBinarySelfTestSuite.java new file mode 100644 index 0000000..38e236d --- /dev/null +++ b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheDataStructuresBinarySelfTestSuite.java @@ -0,0 +1,51 @@ +/* + * 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.ignite.testsuites; + +import junit.framework.TestSuite; +import org.apache.ignite.internal.processors.cache.datastructures.GridCacheQueueApiSelfAbstractTest; +import org.apache.ignite.internal.processors.cache.datastructures.local.GridCacheLocalAtomicQueueApiSelfTest; +import org.apache.ignite.internal.processors.cache.datastructures.local.GridCacheLocalQueueApiSelfTest; +import org.apache.ignite.internal.processors.cache.datastructures.partitioned.GridCachePartitionedAtomicQueueApiSelfTest; +import org.apache.ignite.internal.processors.cache.datastructures.partitioned.GridCachePartitionedQueueApiSelfTest; +import org.apache.ignite.internal.processors.cache.datastructures.partitioned.IgnitePartitionedQueueNoBackupsTest; +import org.apache.ignite.internal.processors.cache.datastructures.replicated.GridCacheReplicatedQueueApiSelfTest; + +/** + * Test suite for binary cache data structures. + */ +public class IgniteCacheDataStructuresBinarySelfTestSuite extends TestSuite { + /** + * @return Cache test suite. + * @throws Exception If failed. + */ + public static TestSuite suite() throws Exception { + TestSuite suite = new TestSuite("Ignite Cache Data Structures Binary Test Suite"); + + System.setProperty(GridCacheQueueApiSelfAbstractTest.BINARY_QUEUE, "true"); + + suite.addTest(new TestSuite(GridCacheLocalQueueApiSelfTest.class)); + suite.addTest(new TestSuite(GridCacheLocalAtomicQueueApiSelfTest.class)); + suite.addTest(new TestSuite(GridCacheReplicatedQueueApiSelfTest.class)); + suite.addTest(new TestSuite(GridCachePartitionedQueueApiSelfTest.class)); + suite.addTest(new TestSuite(GridCachePartitionedAtomicQueueApiSelfTest.class)); + suite.addTest(new TestSuite(IgnitePartitionedQueueNoBackupsTest.class)); + + return suite; + } +} http://git-wip-us.apache.org/repos/asf/ignite/blob/cf7003cd/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheDataStructuresSelfTestSuite.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheDataStructuresSelfTestSuite.java b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheDataStructuresSelfTestSuite.java index 457ec8a..1ec9ca8 100644 --- a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheDataStructuresSelfTestSuite.java +++ b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheDataStructuresSelfTestSuite.java @@ -94,7 +94,7 @@ public class IgniteCacheDataStructuresSelfTestSuite extends TestSuite { /** * @return Cache test suite. */ - public static TestSuite suite() { + public static TestSuite suite() throws Exception { TestSuite suite = new TestSuite("Ignite Cache Data Structures Test Suite"); // Data structures. @@ -190,6 +190,8 @@ public class IgniteCacheDataStructuresSelfTestSuite extends TestSuite { suite.addTest(new JUnit4TestAdapter(AtomicCacheAffinityConfigurationTest.class)); + suite.addTest(IgniteCacheDataStructuresBinarySelfTestSuite.suite()); + return suite; } }
