@Override public String[] getClusterConnectionNames() { checkStarted(); clearIO(); try { List<String> names = new ArrayList<>(); for (ClusterConnection clusterConnection : server.getClusterManager().getClusterConnections()) { names.add(clusterConnection.getName().toString()); } String[] result = new String[names.size()]; return names.toArray(result); } finally { blockOnIO(); } }
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()); } }
public URI getFailoverList() { ClusterManager clusterManager = server.getClusterManager(); ClusterConnection clusterConnection = clusterManager.getDefaultConnection(null); if (clusterConnection != null) { TopologyMemberImpl member = clusterConnection.getTopology().getMember(server.getNodeID().toString()); if (member != null) { return member.toBackupURI(); } } return null; }
public URI getFailoverList() { ClusterManager clusterManager = server.getClusterManager(); ClusterConnection clusterConnection = clusterManager.getDefaultConnection(null); if (clusterConnection != null) { TopologyMemberImpl member = clusterConnection.getTopology().getMember(server.getNodeID().toString()); if (member != null) { return member.toBackupURI(); } } return null; }
private void pauseClusteringBridges(ActiveMQServer server) throws Exception { for (ClusterConnection clusterConnection : server.getClusterManager().getClusterConnections()) { for (MessageFlowRecord record : ((ClusterConnectionImpl) clusterConnection).getRecords().values()) { record.getBridge().pause(); } } }
public OpenWireProtocolManager(OpenWireProtocolManagerFactory factory, ActiveMQServer server) { this.factory = factory; this.server = server; this.wireFactory = new OpenWireFormatFactory(); // preferred prop, should be done via config wireFactory.setCacheEnabled(false); advisoryProducerId.setConnectionId(ID_GENERATOR.generateId()); scheduledPool = server.getScheduledPool(); this.wireFormat = (OpenWireFormat) wireFactory.createWireFormat(); final ClusterManager clusterManager = this.server.getClusterManager(); ClusterConnection cc = clusterManager.getDefaultConnection(null); if (cc != null) { cc.addClusterTopologyListener(this); } }
public Vote sendQuorumVote(SimpleString handler, Vote vote) { try { ActiveMQServerLogger.LOGGER.sendingQuorumVoteRequest(getSessionFactory().getConnection().getRemoteAddress(), vote.toString()); QuorumVoteReplyMessage replyMessage = (QuorumVoteReplyMessage) clusterChannel.sendBlocking(new QuorumVoteMessage(handler, vote), PacketImpl.QUORUM_VOTE_REPLY); QuorumVoteHandler voteHandler = server.getClusterManager().getQuorumManager().getVoteHandler(replyMessage.getHandler()); replyMessage.decodeRest(voteHandler); Vote voteResponse = replyMessage.getVote(); ActiveMQServerLogger.LOGGER.receivedQuorumVoteResponse(getSessionFactory().getConnection().getRemoteAddress(), voteResponse.toString()); return voteResponse; } catch (ActiveMQException e) { return null; } }
protected void stopClusterConnections(final int... nodes) throws Exception { for (int node : nodes) { if (servers[node].isStarted()) { for (ClusterConnection cc : servers[node].getClusterManager().getClusterConnections()) { cc.stop(); cc.flushExecutor(); } } } }
protected String clusterDescription(ActiveMQServer server) { String br = "-------------------------\n"; String out = br; out += "ActiveMQ Artemis server " + server + "\n"; ClusterManager clusterManager = server.getClusterManager(); if (clusterManager == null) { out += "N/A"; } else { for (ClusterConnection cc : clusterManager.getClusterConnections()) { out += cc.describe() + "\n"; out += cc.getTopology().describe(); } } out += "\n\nfull topology:"; return out + br; }
private void checkTopology(final ActiveMQServer serverParameter, final String clusterName, final String nodeId1, final String nodeId2, final TransportConfiguration cfg1, final TransportConfiguration cfg2) { Topology topology = serverParameter.getClusterManager().getClusterConnection(clusterName).getTopology(); TopologyMemberImpl member1 = topology.getMember(nodeId1); TopologyMemberImpl member2 = topology.getMember(nodeId2); Assert.assertEquals(member1.getLive().getParams().toString(), cfg1.getParams().toString()); Assert.assertEquals(member2.getLive().getParams().toString(), cfg2.getParams().toString()); }
public static void crashAndWaitForFailure(ActiveMQServer server, ClientSession... sessions) throws Exception { CountDownLatch latch = new CountDownLatch(sessions.length); for (ClientSession session : sessions) { CountDownSessionFailureListener listener = new CountDownSessionFailureListener(latch, session); session.addFailureListener(listener); } ClusterManager clusterManager = server.getClusterManager(); clusterManager.flushExecutor(); clusterManager.clear(); Assert.assertTrue("server should be running!", server.isStarted()); server.fail(true); if (sessions.length > 0) { // Wait to be informed of failure boolean ok = latch.await(10000, TimeUnit.MILLISECONDS); Assert.assertTrue("Failed to stop the server! Latch count is " + latch.getCount() + " out of " + sessions.length, ok); } }
@Override public CountDownLatch crash(boolean failover, boolean waitFailure, ClientSession... sessions) throws Exception { CountDownLatch latch = new CountDownLatch(sessions.length); CountDownSessionFailureListener[] listeners = new CountDownSessionFailureListener[sessions.length]; for (int i = 0; i < sessions.length; i++) { listeners[i] = new CountDownSessionFailureListener(latch, sessions[i]); sessions[i].addFailureListener(listeners[i]); } ClusterManager clusterManager = server.getClusterManager(); clusterManager.flushExecutor(); clusterManager.clear(); Assert.assertTrue("server should be running!", server.isStarted()); server.fail(failover); if (waitFailure) { // Wait to be informed of failure boolean ok = latch.await(10000, TimeUnit.MILLISECONDS); Assert.assertTrue("Failed to stop the server! Latch count is " + latch.getCount() + " out of " + sessions.length, ok); } return latch; }
protected void verifyBridgeMetrics(final int node, final String clusterName, final String bridgeNodeId, final long expectedMessagesPendingAcknowledgement, final long expectedMessagesAcknowledged) { final ClusterConnection clusterConnection = servers[node].getClusterManager().getClusterConnection(clusterName); final BridgeMetrics bridgeMetrics = clusterConnection.getBridgeMetrics(bridgeNodeId); assertEquals(expectedMessagesPendingAcknowledgement, bridgeMetrics.getMessagesPendingAcknowledgement()); assertEquals(expectedMessagesAcknowledged, bridgeMetrics.getMessagesAcknowledged()); }
protected void verifyClusterMetrics(final int node, final String clusterName, final long expectedMessagesPendingAcknowledgement, final long expectedMessagesAcknowledged) { final ClusterConnection clusterConnection = servers[node].getClusterManager().getClusterConnection(clusterName); final ClusterConnectionMetrics clusterMetrics = clusterConnection.getMetrics(); assertEquals(expectedMessagesPendingAcknowledgement, clusterMetrics.getMessagesPendingAcknowledgement()); assertEquals(expectedMessagesAcknowledged, clusterMetrics.getMessagesAcknowledged()); }
protected ClientSessionFactoryInternal createSessionFactoryAndWaitForTopology(ServerLocator locator, int topologyMembers, ActiveMQServer server) throws Exception { ClientSessionFactoryInternal sf; CountDownLatch countDownLatch = new CountDownLatch(topologyMembers); FailoverTestBase.LatchClusterTopologyListener topListener = new FailoverTestBase.LatchClusterTopologyListener(countDownLatch); locator.addClusterTopologyListener(topListener); sf = (ClientSessionFactoryInternal) locator.createSessionFactory(); addSessionFactory(sf); boolean ok = countDownLatch.await(5, TimeUnit.SECONDS); locator.removeClusterTopologyListener(topListener); if (!ok) { if (server != null) { log.info("failed topology, Topology on server = " + server.getClusterManager().describe()); } } Assert.assertTrue("expected " + topologyMembers + " members", ok); return sf; }
@Override public ConnectionEntry createConnectionEntry(final Acceptor acceptorUsed, final Connection connection) { final Configuration config = server.getConfiguration(); Executor connectionExecutor = server.getExecutorFactory().getExecutor(); final CoreRemotingConnection rc = new RemotingConnectionImpl(new ServerPacketDecoder(), connection, incomingInterceptors, outgoingInterceptors, config.isAsyncConnectionExecutionEnabled() ? connectionExecutor : null, server.getNodeID()); Channel channel1 = rc.getChannel(CHANNEL_ID.SESSION.id, -1); ChannelHandler handler = new ActiveMQPacketHandler(this, server, channel1, rc); channel1.setHandler(handler); long ttl = ActiveMQClient.DEFAULT_CONNECTION_TTL; if (config.getConnectionTTLOverride() != -1) { ttl = config.getConnectionTTLOverride(); } final ConnectionEntry entry = new ConnectionEntry(rc, connectionExecutor, System.currentTimeMillis(), ttl); final Channel channel0 = rc.getChannel(ChannelImpl.CHANNEL_ID.PING.id, -1); channel0.setHandler(new LocalChannelHandler(config, entry, channel0, acceptorUsed, rc)); server.getClusterManager().addClusterChannelHandler(rc.getChannel(CHANNEL_ID.CLUSTER.id, -1), acceptorUsed, rc, server.getActivation()); return entry; }
private long performScaledown() throws Exception { ScaleDownHandler handler = new ScaleDownHandler(servers[0].getPagingManager(), servers[0].getPostOffice(), servers[0].getNodeManager(), servers[0].getClusterManager().getClusterController(), servers[0].getStorageManager()); return handler.scaleDownMessages(sfs[1], servers[1].getNodeID(), servers[0].getConfiguration().getClusterUser(), servers[0].getConfiguration().getClusterPassword()); }
@Test public void testClusterConnectionConfigs() throws Exception { final long ttlOverride = 123456789; final long checkPeriodOverride = 987654321; ExtraConfigurer configurer = new ExtraConfigurer() { @Override public void config(Configuration liveConfig, Configuration backupConfig) { List<ClusterConnectionConfiguration> ccList = backupConfig.getClusterConfigurations(); assertTrue(ccList.size() > 0); ClusterConnectionConfiguration cc = ccList.get(0); cc.setConnectionTTL(ttlOverride); cc.setClientFailureCheckPeriod(checkPeriodOverride); } }; this.setupServer(true, true, configurer); assertTrue(backupServer instanceof ActiveMQServerImpl); ClusterController controller = backupServer.getClusterManager().getClusterController(); ServerLocator replicationLocator = controller.getReplicationLocator(); assertNotNull(replicationLocator); assertEquals(ttlOverride, replicationLocator.getConnectionTTL()); assertEquals(checkPeriodOverride, replicationLocator.getClientFailureCheckPeriod()); }
@Test public void testWrongPasswordTriggersClusterConnectionStop() throws Exception { Configuration config = servers[4].getConfiguration(); for (ActiveMQServer s : servers) { if (s != null) { s.getConfiguration().setSecurityEnabled(true); } } Assert.assertEquals(ActiveMQTestBase.CLUSTER_PASSWORD, config.getClusterPassword()); config.setClusterPassword(config.getClusterPassword() + "-1-2-3-"); startServers(0, 4); Assert.assertTrue("one or the other cluster managers should stop", Wait.waitFor(() -> !servers[4].getClusterManager().isStarted() || !servers[0].getClusterManager().isStarted(), 5000)); final String address = "foo1235"; ServerLocator locator = createNonHALocator(isNetty()); ClientSessionFactory sf = createSessionFactory(locator); ClientSession session = sf.createSession(config.getClusterUser(), ActiveMQTestBase.CLUSTER_PASSWORD, false, true, true, false, 1); session.createQueue(address, address, true); ClientProducer producer = session.createProducer(address); sendMessages(session, producer, 100); ClientConsumer consumer = session.createConsumer(address); session.start(); receiveMessages(consumer, 0, 100, true); }
@Test public void testBasicLocalReceive() throws Exception { startServers(1, 0); setupSessionFactory(0, isNetty(), true); setupSessionFactory(1, isNetty(), true); createQueue(0, "queues.testaddress", "queue0", null, false); addConsumer(0, 0, "queue0", null); waitForBindings(0, "queues.testaddress", 1, 1, true); send(0, "queues.testaddress", 10, false, null); verifyReceiveAll(10, 0); verifyNotReceive(0); addConsumer(1, 0, "queue0", null); verifyNotReceive(1); //Should be 0 as no messages were sent to the second broker verifyClusterMetrics(0, "cluster1", 0, 0); //Should be 0 as no messages were sent to the first broker verifyClusterMetrics(1, "clusterX", 0, 0); //0 messages were sent across the bridge to the second broker verifyBridgeMetrics(0, "cluster1", servers[1].getClusterManager().getNodeId(), 0, 0); }