private void checkFailover(String failedNodeID, JsonObject theHAInfo) { try { JsonArray deployments = theHAInfo.getJsonArray("verticles"); String group = theHAInfo.getString("group"); String chosen = chooseHashedNode(group, failedNodeID.hashCode()); if (chosen != null && chosen.equals(this.nodeID)) { if (deployments != null && deployments.size() != 0) { log.info("node" + nodeID + " says: Node " + failedNodeID + " has failed. This node will deploy " + deployments.size() + " deploymentIDs from that node."); for (Object obj: deployments) { JsonObject app = (JsonObject)obj; processFailover(app); } } // Failover is complete! We can now remove the failed node from the cluster map clusterMap.remove(failedNodeID); runOnContextAndWait(() -> { if (failoverCompleteHandler != null) { failoverCompleteHandler.handle(failedNodeID, theHAInfo, true); } }); } } catch (Throwable t) { log.error("Failed to handle failover", t); runOnContextAndWait(() -> { if (failoverCompleteHandler != null) { failoverCompleteHandler.handle(failedNodeID, theHAInfo, false); } }); } }
@Test public void testIterator() { jsonArray.add("foo"); jsonArray.add(123); JsonObject obj = new JsonObject().put("foo", "bar"); jsonArray.add(obj); Iterator<Object> iter = jsonArray.iterator(); assertTrue(iter.hasNext()); Object entry = iter.next(); assertEquals("foo", entry); assertTrue(iter.hasNext()); entry = iter.next(); assertEquals(123, entry); assertTrue(iter.hasNext()); entry = iter.next(); assertEquals(obj, entry); assertFalse(iter.hasNext()); iter.remove(); assertFalse(jsonArray.contains(obj)); assertEquals(2, jsonArray.size()); }
@Test public void testToJsonArray() { List<Object> list = new ArrayList<>(); list.add("the_string"); list.add(4); list.add(true); list.add(new AsciiString("the_charsequence")); list.add(new BigInteger("1234567")); list.add(Buffer.buffer("hello")); list.add(Collections.singletonMap("nested", 4)); list.add(Arrays.asList(1, 2, 3)); JsonArray json = (JsonArray) ConversionHelper.toObject(list); assertEquals(8, json.size()); assertEquals("the_string", json.getString(0)); assertEquals(4, (int)json.getInteger(1)); assertEquals(true, json.getBoolean(2)); assertEquals("the_charsequence", json.getString(3)); assertEquals(1234567, (int)json.getInteger(4)); assertEquals("hello", new String(json.getBinary(5))); assertEquals(new JsonObject().put("nested", 4), json.getJsonObject(6)); assertEquals(new JsonArray().add(1).add(2).add(3), json.getJsonArray(7)); }
@Test public void testChangesNotVisibleArray3() { List<Object> list = new ArrayList<>(); final JsonArray obj = new JsonArray(list); eb.<JsonArray>consumer("foo").handler((Message<JsonArray> msg) -> { vertx.setTimer(1000, id -> { assertEquals(0, msg.body().size()); testComplete(); }); }); eb.send("foo", obj); list.add("uhwqdiuh"); await(); } }
@Test public void testSize() { jsonArray.add("wibble"); jsonArray.add(true); jsonArray.add(123); assertEquals(3, jsonArray.size()); }
@Test public void testRemoveByPos() { jsonArray.add("wibble"); jsonArray.add(true); jsonArray.add(123); assertEquals(3, jsonArray.size()); assertEquals("wibble", jsonArray.remove(0)); assertEquals(2, jsonArray.size()); assertEquals(123, jsonArray.remove(1)); assertEquals(1, jsonArray.size()); assertEquals(true, jsonArray.remove(0)); assertTrue(jsonArray.isEmpty()); }
@Test public void testChangesNotVisibleArray1() { JsonArray obj = new JsonArray(); eb.<JsonArray>consumer("foo").handler((Message<JsonArray> msg) -> { assertEquals(0, msg.body().size()); testComplete(); }); eb.send("foo", obj); obj.add("blah"); await(); }
@Test public void testCopy() { jsonArray.add("foo"); jsonArray.add(123); JsonObject obj = new JsonObject().put("foo", "bar"); jsonArray.add(obj); jsonArray.add(new StringBuilder("eeek")); JsonArray copy = jsonArray.copy(); assertEquals("eeek", copy.getString(3)); assertNotSame(jsonArray, copy); assertEquals(jsonArray, copy); assertEquals(4, copy.size()); assertEquals("foo", copy.getString(0)); assertEquals(Integer.valueOf(123), copy.getInteger(1)); assertEquals(obj, copy.getJsonObject(2)); assertNotSame(obj, copy.getJsonObject(2)); copy.add("foo"); assertEquals(4, jsonArray.size()); jsonArray.add("bar"); assertEquals(5, copy.size()); }
@Test public void testRemoveByObject() { jsonArray.add("wibble"); jsonArray.add(true); jsonArray.add(123); assertEquals(3, jsonArray.size()); assertTrue(jsonArray.remove("wibble")); assertEquals(2, jsonArray.size()); assertFalse(jsonArray.remove("notthere")); assertTrue(jsonArray.remove(true)); assertTrue(jsonArray.remove(Integer.valueOf(123))); assertTrue(jsonArray.isEmpty()); }
@Test public void testChangesNotVisibleArray2() { final JsonArray obj = new JsonArray(); eb.<JsonArray>consumer("foo").handler((Message<JsonArray> msg) -> msg.body().add("blah")); eb.send("foo", obj); vertx.setTimer(1000, id -> { assertEquals(0, obj.size()); testComplete(); }); await(); }
private void ping(Message<JsonArray> message) { JsonArray jsonArray = message.body(); for (int i = 0; i < jsonArray.size(); i++) { int node = jsonArray.getInteger(i); for (int j = 0; j < numAddresses; j++) { vertx.eventBus().send(createAddress(node, j), "ping", ar -> { if (ar.succeeded()) { vertx.eventBus().send("control", "pong"); } else { Throwable cause = ar.cause(); if (cause instanceof ReplyException) { ReplyException replyException = (ReplyException) cause; if (replyException.failureType() == ReplyFailure.NO_HANDLERS) { vertx.eventBus().send("control", "noHandlers"); return; } } log.error("Unexpected error during ping (id=" + id + ")", cause); } }); } } }
@Test public void testIterator() { jsonArray.add("foo"); jsonArray.add(123); JsonObject obj = new JsonObject().put("foo", "bar"); jsonArray.add(obj); Iterator<Object> iter = jsonArray.iterator(); assertTrue(iter.hasNext()); Object entry = iter.next(); assertEquals("foo", entry); assertTrue(iter.hasNext()); entry = iter.next(); assertEquals(123, entry); assertTrue(iter.hasNext()); entry = iter.next(); assertEquals(obj, entry); assertFalse(iter.hasNext()); iter.remove(); assertFalse(jsonArray.contains(obj)); assertEquals(2, jsonArray.size()); }
@Test public void testChangesNotVisibleArray3() { List<Object> list = new ArrayList<>(); final JsonArray obj = new JsonArray(list); eb.<JsonArray>consumer("foo").handler((Message<JsonArray> msg) -> { vertx.setTimer(1000, id -> { assertEquals(0, msg.body().size()); testComplete(); }); }); eb.send("foo", obj); list.add("uhwqdiuh"); await(); } }
@Test public void testSize() { jsonArray.add("wibble"); jsonArray.add(true); jsonArray.add(123); assertEquals(3, jsonArray.size()); }
@Test public void testRemoveByPos() { jsonArray.add("wibble"); jsonArray.add(true); jsonArray.add(123); assertEquals(3, jsonArray.size()); assertEquals("wibble", jsonArray.remove(0)); assertEquals(2, jsonArray.size()); assertEquals(123, jsonArray.remove(1)); assertEquals(1, jsonArray.size()); assertEquals(true, jsonArray.remove(0)); assertTrue(jsonArray.isEmpty()); }
@Test public void testChangesNotVisibleArray1() { JsonArray obj = new JsonArray(); eb.<JsonArray>consumer("foo").handler((Message<JsonArray> msg) -> { assertEquals(0, msg.body().size()); testComplete(); }); eb.send("foo", obj); obj.add("blah"); await(); }
@Test public void testChangesNotVisibleArray2() { final JsonArray obj = new JsonArray(); eb.<JsonArray>consumer("foo").handler((Message<JsonArray> msg) -> msg.body().add("blah")); eb.send("foo", obj); vertx.setTimer(1000, id -> { assertEquals(0, obj.size()); testComplete(); }); await(); }
@Test public void testRemoveByObject() { jsonArray.add("wibble"); jsonArray.add(true); jsonArray.add(123); assertEquals(3, jsonArray.size()); assertTrue(jsonArray.remove("wibble")); assertEquals(2, jsonArray.size()); assertFalse(jsonArray.remove("notthere")); assertTrue(jsonArray.remove(true)); assertTrue(jsonArray.remove(Integer.valueOf(123))); assertTrue(jsonArray.isEmpty()); }