private void makeSureForwardingFlowControl(int producerWindow, int... indices) throws NoSuchFieldException, IllegalAccessException { for (int i : indices) { ClusterConnectionImpl cc = (ClusterConnectionImpl) servers[i].getClusterManager().getClusterConnection("cluster" + i); Map<String, MessageFlowRecord> map = cc.getRecords(); assertEquals(1, map.size()); MessageFlowRecord record = map.entrySet().iterator().next().getValue(); Field f = record.getClass().getDeclaredField("targetLocator"); //NoSuchFieldException f.setAccessible(true); ServerLocatorInternal targetLocator = (ServerLocatorInternal) f.get(record); assertEquals(producerWindow, targetLocator.getProducerWindowSize()); } }
private void pauseClusteringBridges(ActiveMQServer server) throws Exception { for (ClusterConnection clusterConnection : server.getClusterManager().getClusterConnections()) { for (MessageFlowRecord record : ((ClusterConnectionImpl) clusterConnection).getRecords().values()) { record.getBridge().pause(); } } }
private void crash() throws Exception { /* * Rather than just calling stop() on the server here we want to simulate an actual node crash or bridge failure * so the bridge's failure listener needs to get something other than a DISCONNECTED message. In this case we * simulate a NOT_CONNECTED exception. */ final CountDownLatch latch = new CountDownLatch(1); ClusterConnectionImpl next = (ClusterConnectionImpl) server1.getClusterManager().getClusterConnections().iterator().next(); BridgeImpl bridge = (BridgeImpl) next.getRecords().values().iterator().next().getBridge(); RemotingConnection forwardingConnection = getForwardingConnection(bridge); forwardingConnection.addFailureListener(new FailureListener() { @Override public void connectionFailed(ActiveMQException exception, boolean failedOver) { latch.countDown(); } @Override public void connectionFailed(final ActiveMQException me, boolean failedOver, String scaleDownTargetNodeID) { connectionFailed(me, failedOver); } }); forwardingConnection.fail(new ActiveMQNotConnectedException()); assertTrue(latch.await(5000, TimeUnit.MILLISECONDS)); if (crash) { jmsServer2.stop(); } }
Map<String, MessageFlowRecord> records = null; while (timeout > System.currentTimeMillis()) { records = ccon.getRecords(); if (records != null && records.size() == 1) { break; ccon = (ClusterConnectionImpl) connectionSet.iterator().next(); records = ccon.getRecords(); assertNotNull(records); assertEquals(records.size(), 1); ccon = (ClusterConnectionImpl) connectionSet.iterator().next(); records = ccon.getRecords(); assertNotNull(records); assertEquals(records.size(), 1); ccon = (ClusterConnectionImpl) connectionSet.iterator().next(); records = ccon.getRecords(); assertNotNull(records); assertEquals(records.size(), 1); records = ccon.getRecords(); assertNotNull(records); assertEquals(records.size(), 1);
Assert.assertEquals(1, connection.getRecords().size()); MessageFlowRecord record = connection.getRecords().values().toArray(new MessageFlowRecord[1])[0]; ClusterConnectionBridge bridge = (ClusterConnectionBridge) record.getBridge(); Assert.assertEquals(1, connection.getRecords().size()); Assert.assertNotNull(bridge.getSessionFactory());
for (MessageFlowRecord record : ((ClusterConnectionImpl) clusterConnection).getRecords().values()) { record.getBridge().pause();