/** * @throws Exception If test failed. */ @Test public void testNoFailover() throws Exception { ClusterNode rmt = getSpiContext().remoteNodes().iterator().next(); GridTestJobResult failed = new GridTestJobResult(rmt); ClusterNode other = getSpi().failover(new GridFailoverTestContext(new GridTestTaskSession(), failed), Collections.singletonList(getSpiContext().remoteNodes().iterator().next())); assert other == null; } }
/** * @throws Exception If test failed. */ @Test public void testFailover() throws Exception { ClusterNode rmt = getSpiContext().remoteNodes().iterator().next(); GridTestJobResult failed = new GridTestJobResult(rmt); failed.getJobContext().setAttribute(JobStealingCollisionSpi.THIEF_NODE_ATTR, getSpiContext().localNode().id()); ClusterNode other = getSpi().failover(new GridFailoverTestContext(new GridTestTaskSession(), failed), Collections.singletonList(getSpiContext().remoteNodes().iterator().next())); assert other == rmt : "Invalid failed-over node: " + other; }
/** * @throws Exception If test failed. */ @Test public void testThiefIdNotSet() throws Exception { ClusterNode rmt = getSpiContext().remoteNodes().iterator().next(); GridTestJobResult failed = new GridTestJobResult(rmt); ClusterNode other = getSpi().failover(new GridFailoverTestContext(new GridTestTaskSession(), failed), new ArrayList<>(getSpiContext().nodes())); assert other != null; assert other != rmt; assert other.equals(getSpiContext().localNode()); checkAttributes(failed.getJobContext(), rmt, 1); }
/** * @throws Exception If test failed. */ @Test public void testMaxHopsExceededThiefNotSet() throws Exception { ClusterNode rmt = getSpiContext().remoteNodes().iterator().next(); GridTestJobResult failed = new GridTestJobResult(rmt); failed.getJobContext().setAttribute(FAILOVER_ATTEMPT_COUNT_ATTR, getSpi().getMaximumFailoverAttempts()); ClusterNode other = getSpi().failover(new GridFailoverTestContext(new GridTestTaskSession(), failed), new ArrayList<>(getSpiContext().nodes())); assert other == null; }
/** * @throws Exception If test failed. */ @Test public void testBothEmptyAttribute() throws Exception { // Collision SPI does not allow to send more than 1 message in a // certain period of time (see getMessageExpireTime() method). // Thus we have to wait for the message to be expired. Thread.sleep(50); List<CollisionJobContext> waitCtxs = Collections.emptyList(); Collection<CollisionJobContext> activeCtxs = Collections.emptyList(); ClusterNode rmtNode = F.first(getSpiContext().remoteNodes()); getSpiContext().triggerMessage(rmtNode, new JobStealingRequest(1)); getSpi().onCollision(new GridCollisionTestContext(activeCtxs, waitCtxs)); // Make sure that no message was sent. Serializable msg = getSpiContext().removeSentMessage(rmtNode); // Message should be sent to remote node because it has the same // attributes. assert msg != null; }
/** * @throws Exception If test failed. */ @Test public void testOnePassiveZeroActive() throws Exception { List<CollisionJobContext> waitCtxs = new ArrayList<>(1); // Add passive. Collections.addAll(waitCtxs, new GridTestCollisionJobContext(createTaskSession(), IgniteUuid.randomUuid())); Collection<CollisionJobContext> activeCtxs = Collections.emptyList(); ClusterNode rmtNode = F.first(getSpiContext().remoteNodes()); getSpiContext().triggerMessage(rmtNode, new JobStealingRequest(1)); getSpi().onCollision(new GridCollisionTestContext(activeCtxs, waitCtxs)); // Rejected. checkActivated((GridTestCollisionJobContext)waitCtxs.get(0)); // Make sure that no message was sent. Serializable msg = getSpiContext().removeSentMessage(rmtNode); assert msg == null; }
/** * @throws Exception If test failed. */ @Test public void testOnePassiveOneActiveJobs() throws Exception { List<CollisionJobContext> waitCtxs = new ArrayList<>(1); // Add passive. Collections.addAll(waitCtxs, new GridTestCollisionJobContext(createTaskSession(), IgniteUuid.randomUuid())); List<CollisionJobContext> activeCtxs = new ArrayList<>(1); // Add active. Collections.addAll(activeCtxs, new GridTestCollisionJobContext(createTaskSession(), IgniteUuid.randomUuid())); ClusterNode rmtNode = F.first(getSpiContext().remoteNodes()); getSpiContext().triggerMessage(rmtNode, new JobStealingRequest(1)); getSpi().onCollision(new GridCollisionTestContext(activeCtxs, waitCtxs)); // Active job. checkNoAction((GridTestCollisionJobContext)activeCtxs.get(0)); // Rejected. checkRejected((GridTestCollisionJobContext)waitCtxs.get(0), rmtNode); // Make sure that no message was sent. Serializable msg = getSpiContext().removeSentMessage(rmtNode); assert msg == null; }
/** * @throws Exception If test failed. */ @Test public void testIsStealingOn() throws Exception { // Collision SPI does not allow to send more than 1 message in a // certain period of time (see getMessageExpireTime() method). // Thus we have to wait for the message to be expired. Thread.sleep(50); List<CollisionJobContext> waitCtxs = Collections.emptyList(); Collection<CollisionJobContext> activeCtxs = Collections.emptyList(); ClusterNode rmtNode = F.first(getSpiContext().remoteNodes()); getSpi().setStealingEnabled(true); getSpiContext().triggerMessage(rmtNode, new JobStealingRequest(1)); getSpi().onCollision(new GridCollisionTestContext(activeCtxs, waitCtxs)); // Make sure that no message was sent. Serializable msg = getSpiContext().removeSentMessage(rmtNode); // Message should not be sent to remote node because stealing is on assert msg != null; } }
/** * @throws Exception If test failed. */ @Test public void testZeroPassiveOneActive() throws Exception { Collection<CollisionJobContext> empty = Collections.emptyList(); List<CollisionJobContext> activeCtxs = new ArrayList<>(1); // Add active. Collections.addAll(activeCtxs, new GridTestCollisionJobContext(createTaskSession(), IgniteUuid.randomUuid())); ClusterNode rmtNode = F.first(getSpiContext().remoteNodes()); getSpiContext().triggerMessage(rmtNode, new JobStealingRequest(1)); getSpi().onCollision(new GridCollisionTestContext(activeCtxs, empty)); // Active job. checkNoAction((GridTestCollisionJobContext)activeCtxs.get(0)); // Make sure that no message was sent. Serializable msg = getSpiContext().removeSentMessage(rmtNode); assert msg == null; }
/** * @throws Exception If test failed. */ @Test public void testThiefEqualsVictim() throws Exception { ClusterNode rmt = getSpiContext().remoteNodes().iterator().next(); GridTestJobResult failed = new GridTestJobResult(rmt); failed.getJobContext().setAttribute(THIEF_NODE_ATTR, rmt.id()); ClusterNode other = getSpi().failover(new GridFailoverTestContext(new GridTestTaskSession(), failed), new ArrayList<>(getSpiContext().nodes())); assert other != null; assert other != rmt; assert other.equals(getSpiContext().localNode()); checkAttributes(failed.getJobContext(), rmt, 1); }
/** * @throws Exception If test failed. */ @Test public void testIsStealingOff() throws Exception { // Collision SPI does not allow to send more than 1 message in a // certain period of time (see getMessageExpireTime() method). // Thus we have to wait for the message to be expired. Thread.sleep(50); List<CollisionJobContext> waitCtxs = Collections.emptyList(); Collection<CollisionJobContext> activeCtxs = Collections.emptyList(); ClusterNode rmtNode = F.first(getSpiContext().remoteNodes()); getSpi().setStealingEnabled(false); getSpiContext().triggerMessage(rmtNode, new JobStealingRequest(1)); getSpi().onCollision(new GridCollisionTestContext(activeCtxs, waitCtxs)); // Make sure that no message was sent. Serializable msg = getSpiContext().removeSentMessage(rmtNode); // Message should not be sent to remote node because stealing is off assert msg == null; }
/** * @throws Exception If test failed. */ @Test public void testSameAttribute() throws Exception { List<CollisionJobContext> waitCtxs = Collections.emptyList(); Collection<CollisionJobContext> activeCtxs = Collections.emptyList(); GridTestNode rmtNode = (GridTestNode)getSpiContext().remoteNodes().iterator().next(); rmtNode.setAttribute("useCollision", true); getSpiContext().triggerMessage(rmtNode, new JobStealingRequest(1)); // Set up the same attribute and value as for remote node. getSpi().setStealingAttributes(F.asMap("useCollision", true)); getSpi().onCollision(new GridCollisionTestContext(activeCtxs, waitCtxs)); // Cleanup rmtNode.removeAttribute("useCollision"); // Set up the same attribute and value as for remote node. getSpi().setStealingAttributes(Collections.<String, Serializable>emptyMap()); // Make sure that no message was sent. Serializable msg = getSpiContext().removeSentMessage(rmtNode); // Message should be sent to remote node because it has the same // attributes. assert msg != null; }
/** * @throws Exception If test failed. */ @Test public void testZeroPassiveZeroActive() throws Exception { Collection<CollisionJobContext> empty = Collections.emptyList(); getSpi().onCollision(new GridCollisionTestContext(empty, empty)); ClusterNode rmtNode = F.first(getSpiContext().remoteNodes()); JobStealingRequest sentMsg = (JobStealingRequest)getSpiContext().getSentMessage(rmtNode); assert sentMsg != null; assert sentMsg.delta() == 1 : "Invalid sent message: " + sentMsg; Serializable msg = getSpiContext().removeSentMessage(rmtNode); assert msg != null; }
/** * @throws Exception If test failed. */ @Test public void testEmptyLocalAttribute() throws Exception { // Collision SPI does not allow to send more than 1 message in a // certain period of time (see getMessageExpireTime() method). // Thus we have to wait for the message to be expired. Thread.sleep(50); List<CollisionJobContext> waitCtxs = Collections.emptyList(); Collection<CollisionJobContext> activeCtxs = Collections.emptyList(); GridTestNode rmtNode = (GridTestNode)F.first(getSpiContext().remoteNodes()); rmtNode.setAttribute("useCollision", true); getSpiContext().triggerMessage(rmtNode, new JobStealingRequest(1)); getSpi().onCollision(new GridCollisionTestContext(activeCtxs, waitCtxs)); // Cleanup. rmtNode.removeAttribute("useCollision"); // Make sure that no message was sent. Serializable msg = getSpiContext().removeSentMessage(rmtNode); // Message should be sent to remote node because it has the same // attributes. assert msg != null; }
/** * @throws Exception If test failed. */ @Test public void testEmptyRemoteAttribute() throws Exception { List<CollisionJobContext> waitCtxs = Collections.emptyList(); Collection<CollisionJobContext> activeCtxs = Collections.emptyList(); ClusterNode rmtNode = F.first(getSpiContext().remoteNodes()); getSpiContext().triggerMessage(rmtNode, new JobStealingRequest(1)); // Set up the same attribute and value as for remote node. getSpi().setStealingAttributes(F.asMap("useCollision", true)); getSpi().onCollision(new GridCollisionTestContext(activeCtxs, waitCtxs)); // Set up the same attribute and value as for remote node. getSpi().setStealingAttributes(Collections.<String, Serializable>emptyMap()); // Make sure that no message was sent. Serializable msg = getSpiContext().removeSentMessage(rmtNode); // Message should not be sent to remote node at it does not have attribute assert msg == null; }
/** * @throws Exception If test failed. */ @Test public void testFailover() throws Exception { ClusterNode rmt = getSpiContext().remoteNodes().iterator().next(); GridTestJobResult failed = new GridTestJobResult(rmt); failed.getJobContext().setAttribute(THIEF_NODE_ATTR, getSpiContext().localNode().id()); ClusterNode other = getSpi().failover(new GridFailoverTestContext(new GridTestTaskSession(), failed), new ArrayList<>(getSpiContext().nodes())); assert other == getSpiContext().localNode(); // This is not a failover but stealing. checkAttributes(failed.getJobContext(), null, 0); }
/** * @throws Exception If test failed. */ @Test public void testMaxHopsExceeded() throws Exception { ClusterNode rmt = getSpiContext().remoteNodes().iterator().next(); GridTestJobResult failed = new GridTestJobResult(rmt); failed.getJobContext().setAttribute(THIEF_NODE_ATTR, getSpiContext().localNode().id()); failed.getJobContext().setAttribute(FAILOVER_ATTEMPT_COUNT_ATTR, getSpi().getMaximumFailoverAttempts()); ClusterNode other = getSpi().failover(new GridFailoverTestContext(new GridTestTaskSession(), failed), new ArrayList<>(getSpiContext().nodes())); assert other == null; }
/** * @throws Exception If test failed. */ @Test public void testNonZeroFailoverCount() throws Exception { ClusterNode rmt = getSpiContext().remoteNodes().iterator().next(); GridTestJobResult failed = new GridTestJobResult(rmt); failed.getJobContext().setAttribute(FAILOVER_ATTEMPT_COUNT_ATTR, getSpi().getMaximumFailoverAttempts() - 1); ClusterNode other = getSpi().failover(new GridFailoverTestContext(new GridTestTaskSession(), failed), new ArrayList<>(getSpiContext().nodes())); assert other != null; assert other != rmt; assert other == getSpiContext().localNode(); checkAttributes(failed.getJobContext(), rmt, getSpi().getMaximumFailoverAttempts()); }
/** * @throws Exception If test failed. */ @Test public void testDiffAttribute() throws Exception { List<CollisionJobContext> waitCtxs = Collections.emptyList(); Collection<CollisionJobContext> activeCtxs = Collections.emptyList(); GridTestNode rmtNode = (GridTestNode)F.first(getSpiContext().remoteNodes()); rmtNode.setAttribute("useCollision1", true); getSpiContext().triggerMessage(rmtNode, new JobStealingRequest(1)); // Set up the same attribute and value as for remote node. getSpi().setStealingAttributes(F.asMap("useCollision2", true)); getSpi().onCollision(new GridCollisionTestContext(activeCtxs, waitCtxs)); // Cleanup rmtNode.removeAttribute("useCollision1"); // Set up the same attribute and value as for remote node. getSpi().setStealingAttributes(Collections.<String, Serializable>emptyMap()); // Make sure that no message was sent. Serializable msg = getSpiContext().removeSentMessage(rmtNode); // Message should be sent to remote node because it has the same // attributes. assert msg == null; }
/** {@inheritDoc} */ @Override protected void beforeTestsStarted() throws Exception { spi = createSpi(); spiRsrc = new IgniteTestResources(getMBeanServer()); locNode = new GridTestNode(spiRsrc.getNodeId()); GridSpiTestContext ctx = initSpiContext(); ctx.setLocalNode(locNode); info(">>> Initialized context: nodeId=" + ctx.localNode().id()); spiRsrc.inject(spi); lsnr = new MessageListener(spiRsrc.getNodeId()); spi.setListener(lsnr); Map<String, Object> attrs = spi.getNodeAttributes(); locNode.setAttributes(attrs); spi.spiStart(getTestIgniteInstanceName()); spi.onContextInitialized(ctx); IgniteTestResources remoteRsrc = new IgniteTestResources(); remoteNode = new GridTestNode(remoteRsrc.getNodeId()); remoteNode.setAttributes(attrs); remoteNode.setAttribute(U.spiAttribute(spi, TcpCommunicationSpi.ATTR_ADDRS), Collections.singleton(remoteAddr)); ctx.remoteNodes().add(remoteNode); }