use of org.apache.ignite.internal.processors.timeout.GridTimeoutProcessor in project gridgain by gridgain.
the class TxDeadlockOnEntryToStringTest method testDeadlockOnTimeoutWorkerAndToString.
/**
* We removed locks from toString on Entry. The case, a thread X lock entry, after that trying to do a handshake
* with connecting node. But, handshake fails on the first attempt. Between these events, timeout worked trying to
* print this entry, but I locked. The thread X can't reconnect, because timeout worker hangs.
*/
@Test
public void testDeadlockOnTimeoutWorkerAndToString() throws Exception {
// Setup
TestDependencyResolver nearDepRslvr = new TestDependencyResolver();
IgniteEx nearNode = startGrid(0, nearDepRslvr);
TestDependencyResolver incomingDepRslvr = new TestDependencyResolver(this::resolve);
IgniteEx incomingNode = startGrid(1, incomingDepRslvr);
GridTimeoutProcessor tp = nearNode.context().timeout();
ConnectionClientPool pool = nearDepRslvr.getDependency(ConnectionClientPool.class);
GridCacheEntryEx ex = getEntry(nearNode, DEFAULT_CACHE_NAME, TEST_KEY);
// Act
// Lock entry in current thread
ex.lockEntry();
try {
// Print the entry from another thread via timeObject.
CountDownLatch entryPrinted = new CountDownLatch(1);
CountDownLatch entryReadyToPrint = new CountDownLatch(1);
tp.addTimeoutObject(new EntryPrinterTimeoutObject(ex, entryPrinted, entryReadyToPrint));
entryReadyToPrint.await();
// Try to do first handshake with hangs, after reconnect handshake should be passed.
rejectHandshake.set(true);
pool.forceCloseConnection(incomingNode.localNode().id());
nearNode.configuration().getCommunicationSpi().sendMessage(incomingNode.localNode(), UUIDCollectionMessage.of(UUID.randomUUID()));
// Check
assertTrue(GridTestUtils.waitForCondition(() -> entryPrinted.getCount() == 0, 5_000));
} finally {
// Allow synchronous eviction on node stop.
ex.unlockEntry();
}
}
use of org.apache.ignite.internal.processors.timeout.GridTimeoutProcessor in project gridgain by gridgain.
the class GridQueryCommandHandlerTest method testSupportedCommands.
/**
* @throws Exception If failed.
*/
@Test
public void testSupportedCommands() throws Exception {
GridTestKernalContext ctx = newContext(grid().configuration());
ctx.add(new GridTimeoutProcessor(ctx));
QueryCommandHandler cmdHnd = new QueryCommandHandler(ctx);
Collection<GridRestCommand> commands = cmdHnd.supportedCommands();
assertEquals(5, commands.size());
assertTrue(commands.contains(GridRestCommand.EXECUTE_SQL_QUERY));
assertTrue(commands.contains(GridRestCommand.EXECUTE_SQL_FIELDS_QUERY));
assertTrue(commands.contains(GridRestCommand.EXECUTE_SCAN_QUERY));
assertTrue(commands.contains(GridRestCommand.FETCH_SQL_QUERY));
assertTrue(commands.contains(GridRestCommand.CLOSE_SQL_QUERY));
}
use of org.apache.ignite.internal.processors.timeout.GridTimeoutProcessor in project gridgain by gridgain.
the class GridQueryCommandHandlerTest method testUnsupportedCommands.
/**
* @throws Exception If failed.
*/
@Test
public void testUnsupportedCommands() throws Exception {
GridTestKernalContext ctx = newContext(grid().configuration());
ctx.add(new GridTimeoutProcessor(ctx));
QueryCommandHandler cmdHnd = new QueryCommandHandler(ctx);
Collection<GridRestCommand> commands = cmdHnd.supportedCommands();
assertFalse(commands.contains(GridRestCommand.LOG));
}
use of org.apache.ignite.internal.processors.timeout.GridTimeoutProcessor in project gridgain by gridgain.
the class GridTcpCommunicationSpiMultithreadedSelfTest method beforeTestsStarted.
/**
* {@inheritDoc}
*/
@Override
protected void beforeTestsStarted() throws Exception {
spis.clear();
nodes.clear();
spiRsrcs.clear();
lsnrs.clear();
Map<ClusterNode, GridSpiTestContext> ctxs = new HashMap<>();
timeoutProcessor = new GridTimeoutProcessor(new GridTestKernalContext(log));
timeoutProcessor.start();
timeoutProcessor.onKernalStart(true);
for (int i = 0; i < getSpiCount(); i++) {
CommunicationSpi<Message> spi = newCommunicationSpi();
GridTestUtils.setFieldValue(spi, IgniteSpiAdapter.class, "igniteInstanceName", "grid-" + i);
IgniteTestResources rsrcs = new IgniteTestResources();
GridTestNode node = new GridTestNode(rsrcs.getNodeId());
node.order(i);
GridSpiTestContext ctx = initSpiContext();
MessageFactoryProvider testMsgFactory = factory -> factory.register(GridTestMessage.DIRECT_TYPE, GridTestMessage::new);
ctx.messageFactory(new IgniteMessageFactoryImpl(new MessageFactory[] { new GridIoMessageFactory(), testMsgFactory }));
ctx.timeoutProcessor(timeoutProcessor);
ctx.setLocalNode(node);
info(">>> Initialized context: nodeId=" + ctx.localNode().id());
spiRsrcs.add(rsrcs);
rsrcs.inject(spi);
IgniteMock ignite = GridTestUtils.getFieldValue(spi, IgniteSpiAdapter.class, "ignite");
ignite.setCommunicationSpi(spi);
MessageListener lsnr = new MessageListener(rsrcs.getNodeId());
spi.setListener(lsnr);
lsnrs.put(rsrcs.getNodeId(), lsnr);
info("Lsnrs: " + lsnrs);
spi.spiStart(getTestIgniteInstanceName() + (i + 1));
nodes.add(node);
node.setAttributes(spi.getNodeAttributes());
node.setAttribute(ATTR_MACS, F.concat(U.allLocalMACs(), ", "));
spis.put(rsrcs.getNodeId(), spi);
spi.onContextInitialized(ctx);
ctxs.put(node, ctx);
}
// For each context set remote nodes.
for (Entry<ClusterNode, GridSpiTestContext> e : ctxs.entrySet()) {
for (ClusterNode n : nodes) {
if (!n.equals(e.getKey()))
e.getValue().remoteNodes().add(n);
}
}
}
Aggregations