Repository: ignite Updated Branches: refs/heads/master 49fe8cd77 -> 2bb773a8c
IGNITE-8651 VisrTxTask fails when printing transactions having implicit single type - Fixes #4096. Signed-off-by: Alexey Goncharuk <[email protected]> Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/2bb773a8 Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/2bb773a8 Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/2bb773a8 Branch: refs/heads/master Commit: 2bb773a8cbaebdc029a7a6e0328bd473085a1d08 Parents: 49fe8cd Author: Aleksei Scherbakov <[email protected]> Authored: Thu May 31 16:38:33 2018 +0300 Committer: Alexey Goncharuk <[email protected]> Committed: Thu May 31 16:38:33 2018 +0300 ---------------------------------------------------------------------- .../ignite/internal/visor/tx/VisorTxTask.java | 12 ++++- .../ignite/util/GridCommandHandlerTest.java | 47 ++++++++++++++------ 2 files changed, 43 insertions(+), 16 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/2bb773a8/modules/core/src/main/java/org/apache/ignite/internal/visor/tx/VisorTxTask.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/tx/VisorTxTask.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/tx/VisorTxTask.java index 72b1740..b411e29 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/visor/tx/VisorTxTask.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/tx/VisorTxTask.java @@ -21,6 +21,7 @@ import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.Comparator; +import java.util.ConcurrentModificationException; import java.util.List; import java.util.Map; import java.util.TreeMap; @@ -32,6 +33,7 @@ import org.apache.ignite.cluster.ClusterNode; import org.apache.ignite.compute.ComputeJobResult; import org.apache.ignite.internal.processors.cache.distributed.GridDistributedTxMapping; import org.apache.ignite.internal.processors.cache.distributed.near.GridNearTxLocal; +import org.apache.ignite.internal.processors.cache.distributed.near.IgniteTxMappings; import org.apache.ignite.internal.processors.cache.transactions.TransactionProxyImpl; import org.apache.ignite.internal.processors.task.GridInternal; import org.apache.ignite.internal.util.typedef.F; @@ -179,10 +181,16 @@ public class VisorTxTask extends VisorMultiNodeTask<VisorTxTaskArg, Map<ClusterN int size = 0; if (locTx.mappings() != null) { - for (GridDistributedTxMapping mapping : locTx.mappings().mappings()) { + IgniteTxMappings txMappings = locTx.mappings(); + + for (GridDistributedTxMapping mapping : + txMappings.single() ? Collections.singleton(txMappings.singleMapping()) : txMappings.mappings()) { + if (mapping == null) + continue; + mappings.add(mapping.primary().id()); - size += mapping.entries().size(); // Entries are not synchronized so no visibility guaranties. + size += mapping.entries().size(); // Entries are not synchronized so no visibility guaranties for size. } } http://git-wip-us.apache.org/repos/asf/ignite/blob/2bb773a8/modules/core/src/test/java/org/apache/ignite/util/GridCommandHandlerTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/util/GridCommandHandlerTest.java b/modules/core/src/test/java/org/apache/ignite/util/GridCommandHandlerTest.java index 8b98ae6..a0b27d2 100644 --- a/modules/core/src/test/java/org/apache/ignite/util/GridCommandHandlerTest.java +++ b/modules/core/src/test/java/org/apache/ignite/util/GridCommandHandlerTest.java @@ -22,6 +22,7 @@ import java.io.File; import java.io.PrintStream; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collection; import java.util.HashSet; import java.util.Map; import java.util.TreeMap; @@ -47,6 +48,7 @@ import org.apache.ignite.internal.IgniteEx; import org.apache.ignite.internal.IgniteInternalFuture; import org.apache.ignite.internal.commandline.CommandHandler; import org.apache.ignite.internal.commandline.cache.CacheCommand; +import org.apache.ignite.internal.processors.cache.GridCacheFuture; import org.apache.ignite.internal.util.typedef.F; import org.apache.ignite.internal.util.typedef.G; import org.apache.ignite.internal.util.typedef.X; @@ -402,7 +404,7 @@ public class GridCommandHandlerTest extends GridCommonAbstractTest { for (VisorTxInfo info : res.getInfos()) { if (info.getSize() == 100) { - toKill[0] = info; + toKill[0] = info; // Store for further use. break; } @@ -411,7 +413,7 @@ public class GridCommandHandlerTest extends GridCommonAbstractTest { assertEquals(3, map.size()); }, "--tx"); - assertNotNull(toKill); + assertNotNull(toKill[0]); // Test filter by label. validate(h, map -> { @@ -460,21 +462,18 @@ public class GridCommandHandlerTest extends GridCommonAbstractTest { }, "--tx", "order", "DURATION"); // Trigger topology change and test connection. - IgniteInternalFuture<?> startFut = multithreadedAsync(new Runnable() { - @Override public void run() { - try { - startGrid(2); - } - catch (Exception e) { - fail(); - } + IgniteInternalFuture<?> startFut = multithreadedAsync(() -> { + try { + startGrid(2); + } + catch (Exception e) { + fail(); } }, 1, "start-node-thread"); - doSleep(5000); + doSleep(5000); // Give enough time to reach exchange future. - assertEquals(EXIT_CODE_OK, execute(h, "--host", "127.0.0.1", "--port", "11211", "--tx")); - assertEquals(EXIT_CODE_OK, execute(h, "--host", "127.0.0.1", "--port", "11212", "--tx")); + assertEquals(EXIT_CODE_OK, execute(h, "--tx")); // Test kill by xid. validate(h, map -> { @@ -486,7 +485,7 @@ public class GridCommandHandlerTest extends GridCommonAbstractTest { assertEquals(toKill[0].getXid(), info.getXid()); }, "--tx", "kill", - "xid", toKill[0].getXid().toString(), + "xid", toKill[0].getXid().toString(), // Use saved on first run value. "nodes", grid(0).localNode().consistentId().toString()); unlockLatch.countDown(); @@ -494,6 +493,10 @@ public class GridCommandHandlerTest extends GridCommonAbstractTest { startFut.get(); fut.get(); + + awaitPartitionMapExchange(); + + checkFutures(); } /** @@ -880,4 +883,20 @@ public class GridCommandHandlerTest extends GridCommonAbstractTest { } }, 4, "tx-thread"); } + + /** + * Checks if all tx futures are finished. + */ + private void checkFutures() { + for (Ignite ignite : G.allGrids()) { + IgniteEx ig = (IgniteEx)ignite; + + final Collection<GridCacheFuture<?>> futs = ig.context().cache().context().mvcc().activeFutures(); + + for (GridCacheFuture<?> fut : futs) + log.info("Waiting for future: " + fut); + + assertTrue("Expecting no active futures: node=" + ig.localNode().id(), futs.isEmpty()); + } + } }
