public static ServerLocatorInternal getScaleDownConnector(ScaleDownPolicy scaleDownPolicy, ActiveMQServer activeMQServer) throws ActiveMQException { if (!scaleDownPolicy.getConnectors().isEmpty()) { return (ServerLocatorInternal) ActiveMQClient.createServerLocatorWithHA(connectorNameListToArray(scaleDownPolicy.getConnectors(), activeMQServer)); } else if (scaleDownPolicy.getDiscoveryGroup() != null) { DiscoveryGroupConfiguration dg = activeMQServer.getConfiguration().getDiscoveryGroupConfigurations().get(scaleDownPolicy.getDiscoveryGroup()); if (dg == null) { throw ActiveMQMessageBundle.BUNDLE.noDiscoveryGroupFound(dg); } return (ServerLocatorInternal) ActiveMQClient.createServerLocatorWithHA(dg); } else { Map<String, TransportConfiguration> connectorConfigurations = activeMQServer.getConfiguration().getConnectorConfigurations(); for (TransportConfiguration transportConfiguration : connectorConfigurations.values()) { if (transportConfiguration.getFactoryClassName().equals(InVMConnectorFactory.class.getName())) { return (ServerLocatorInternal) ActiveMQClient.createServerLocatorWithHA(transportConfiguration); } } } throw ActiveMQMessageBundle.BUNDLE.noConfigurationFoundForScaleDown(); }
@Override public String getScaleDownGroupName() { return scaleDownPolicy == null ? null : scaleDownPolicy.getGroupName(); }
@Override public JournalLoader createJournalLoader(PostOffice postOffice, PagingManager pagingManager, StorageManager storageManager, QueueFactory queueFactory, NodeManager nodeManager, ManagementService managementService, GroupingHandler groupingHandler, Configuration configuration, ActiveMQServer parentServer) throws ActiveMQException { if (replicaPolicy.getScaleDownPolicy() != null && replicaPolicy.getScaleDownPolicy().isEnabled()) { return new BackupRecoveryJournalLoader(postOffice, pagingManager, storageManager, queueFactory, nodeManager, managementService, groupingHandler, configuration, parentServer, ScaleDownPolicy.getScaleDownConnector(replicaPolicy.getScaleDownPolicy(), activeMQServer), activeMQServer.getClusterManager().getClusterController()); } else { return super.createJournalLoader(postOffice, pagingManager, storageManager, queueFactory, nodeManager, managementService, groupingHandler, configuration, parentServer); } }
@Override public void scaleDown(String connector) throws Exception { checkStarted(); clearIO(); HAPolicy haPolicy = server.getHAPolicy(); if (haPolicy instanceof LiveOnlyPolicy) { LiveOnlyPolicy liveOnlyPolicy = (LiveOnlyPolicy) haPolicy; if (liveOnlyPolicy.getScaleDownPolicy() == null) { liveOnlyPolicy.setScaleDownPolicy(new ScaleDownPolicy()); } liveOnlyPolicy.getScaleDownPolicy().setEnabled(true); if (connector != null) { liveOnlyPolicy.getScaleDownPolicy().getConnectors().add(0, connector); } server.fail(true); } }
@Test public void liveOnlyTest() throws Exception { Configuration configuration = createConfiguration("live-only-hapolicy-config.xml"); ActiveMQServerImpl server = new ActiveMQServerImpl(configuration); try { server.start(); Activation activation = server.getActivation(); assertTrue(activation instanceof LiveOnlyActivation); HAPolicy haPolicy = server.getHAPolicy(); assertTrue(haPolicy instanceof LiveOnlyPolicy); LiveOnlyPolicy liveOnlyPolicy = (LiveOnlyPolicy) haPolicy; ScaleDownPolicy scaleDownPolicy = liveOnlyPolicy.getScaleDownPolicy(); assertNotNull(scaleDownPolicy); assertEquals(scaleDownPolicy.getGroupName(), "boo!"); assertEquals(scaleDownPolicy.getDiscoveryGroup(), "wahey"); List<String> connectors = scaleDownPolicy.getConnectors(); assertNotNull(connectors); assertEquals(connectors.size(), 0); } finally { server.stop(); } }
@Test public void liveOnlyTest2() throws Exception { Configuration configuration = createConfiguration("live-only-hapolicy-config2.xml"); ActiveMQServerImpl server = new ActiveMQServerImpl(configuration); try { server.start(); Activation activation = server.getActivation(); assertTrue(activation instanceof LiveOnlyActivation); HAPolicy haPolicy = server.getHAPolicy(); assertTrue(haPolicy instanceof LiveOnlyPolicy); LiveOnlyPolicy liveOnlyPolicy = (LiveOnlyPolicy) haPolicy; ScaleDownPolicy scaleDownPolicy = liveOnlyPolicy.getScaleDownPolicy(); assertNotNull(scaleDownPolicy); assertFalse(scaleDownPolicy.isEnabled()); assertEquals(scaleDownPolicy.getGroupName(), "boo!"); assertEquals(scaleDownPolicy.getDiscoveryGroup(), null); List<String> connectors = scaleDownPolicy.getConnectors(); assertNotNull(connectors); assertEquals(connectors.size(), 2); assertTrue(connectors.contains("sd-connector1")); assertTrue(connectors.contains("sd-connector2")); } finally { server.stop(); } }
@Override public void postConnectionFreeze() { if (liveOnlyPolicy.getScaleDownPolicy() != null && liveOnlyPolicy.getScaleDownPolicy().isEnabled() && scaleDownClientSessionFactory != null) { try { scaleDown(); } catch (Exception e) { ActiveMQServerLogger.LOGGER.failedToScaleDown(e); } finally { scaleDownClientSessionFactory.close(); scaleDownServerLocator.close(); } } }
public void connectToScaleDownTarget(ScaleDownPolicy scaleDownPolicy) { try { scaleDownServerLocator = ScaleDownPolicy.getScaleDownConnector(scaleDownPolicy, activeMQServer); LiveNodeLocator nodeLocator = scaleDownPolicy.getGroupName() == null ? new AnyLiveNodeLocatorForScaleDown(activeMQServer) : new NamedLiveNodeLocatorForScaleDown(scaleDownPolicy.getGroupName(), activeMQServer); scaleDownServerLocator.addClusterTopologyListener(nodeLocator);
public static ScaleDownPolicy getScaleDownPolicy(ScaleDownConfiguration scaleDownConfiguration) { if (scaleDownConfiguration != null) { if (scaleDownConfiguration.getDiscoveryGroup() != null) { return new ScaleDownPolicy(scaleDownConfiguration.getDiscoveryGroup(), scaleDownConfiguration.getGroupName(), scaleDownConfiguration.getClusterName(), scaleDownConfiguration.isEnabled()); } else { return new ScaleDownPolicy(scaleDownConfiguration.getConnectors(), scaleDownConfiguration.getGroupName(), scaleDownConfiguration.getClusterName(), scaleDownConfiguration.isEnabled()); } } return null; }
@Test public void SharedStoreSlaveTest2() throws Exception { Configuration configuration = createConfiguration("shared-store-slave-hapolicy-config2.xml"); ActiveMQServerImpl server = new ActiveMQServerImpl(configuration); try { server.start(); Activation activation = server.getActivation(); assertTrue(activation instanceof SharedStoreBackupActivation); HAPolicy haPolicy = server.getHAPolicy(); assertTrue(haPolicy instanceof SharedStoreSlavePolicy); SharedStoreSlavePolicy sharedStoreSlavePolicy = (SharedStoreSlavePolicy) haPolicy; assertTrue(sharedStoreSlavePolicy.isFailoverOnServerShutdown()); assertTrue(sharedStoreSlavePolicy.isRestartBackup()); ScaleDownPolicy scaleDownPolicy = sharedStoreSlavePolicy.getScaleDownPolicy(); assertNotNull(scaleDownPolicy); assertEquals(scaleDownPolicy.getGroupName(), "boo!"); assertEquals(scaleDownPolicy.getDiscoveryGroup(), null); List<String> connectors = scaleDownPolicy.getConnectors(); assertNotNull(connectors); assertEquals(connectors.size(), 2); assertTrue(connectors.contains("sd-connector1")); assertTrue(connectors.contains("sd-connector2")); } finally { server.stop(); } }
@Override public void freezeConnections(RemotingService remotingService) { // connect to the scale-down target first so that when we freeze/disconnect the clients we can tell them where // we're sending the messages if (liveOnlyPolicy.getScaleDownPolicy() != null && liveOnlyPolicy.getScaleDownPolicy().isEnabled()) { connectToScaleDownTarget(liveOnlyPolicy.getScaleDownPolicy()); } RemotingConnection rc = scaleDownClientSessionFactory == null ? null : scaleDownClientSessionFactory.getConnection(); String nodeID = rc == null ? null : scaleDownClientSessionFactory.getServerLocator().getTopology().getMember(rc).getNodeId(); if (remotingService != null) { remotingService.freeze(nodeID, null); } }
@Test public void SharedStoreSlaveTest() throws Exception { Configuration configuration = createConfiguration("shared-store-slave-hapolicy-config.xml"); ActiveMQServerImpl server = new ActiveMQServerImpl(configuration); try { server.start(); Activation activation = server.getActivation(); assertTrue(activation instanceof SharedStoreBackupActivation); HAPolicy haPolicy = server.getHAPolicy(); assertTrue(haPolicy instanceof SharedStoreSlavePolicy); SharedStoreSlavePolicy sharedStoreSlavePolicy = (SharedStoreSlavePolicy) haPolicy; assertFalse(sharedStoreSlavePolicy.isFailoverOnServerShutdown()); assertFalse(sharedStoreSlavePolicy.isRestartBackup()); ScaleDownPolicy scaleDownPolicy = sharedStoreSlavePolicy.getScaleDownPolicy(); assertNotNull(scaleDownPolicy); assertEquals(scaleDownPolicy.getGroupName(), "boo!"); assertEquals(scaleDownPolicy.getDiscoveryGroup(), "wahey"); List<String> connectors = scaleDownPolicy.getConnectors(); assertNotNull(connectors); assertEquals(connectors.size(), 0); } finally { server.stop(); } }
@Override public JournalLoader createJournalLoader(PostOffice postOffice, PagingManager pagingManager, StorageManager storageManager, QueueFactory queueFactory, NodeManager nodeManager, ManagementService managementService, GroupingHandler groupingHandler, Configuration configuration, ActiveMQServer parentServer) throws ActiveMQException { if (sharedStoreSlavePolicy.getScaleDownPolicy() != null && sharedStoreSlavePolicy.getScaleDownPolicy().isEnabled()) { return new BackupRecoveryJournalLoader(postOffice, pagingManager, storageManager, queueFactory, nodeManager, managementService, groupingHandler, configuration, parentServer, ScaleDownPolicy.getScaleDownConnector(sharedStoreSlavePolicy.getScaleDownPolicy(), activeMQServer), activeMQServer.getClusterManager().getClusterController()); } else { return super.createJournalLoader(postOffice, pagingManager, storageManager, queueFactory, nodeManager, managementService, groupingHandler, configuration, parentServer); } }
boolean scalingDown = replicaPolicy.getScaleDownPolicy() != null && replicaPolicy.getScaleDownPolicy().isEnabled();
@Override public String getScaleDownGroupName() { return getScaleDownPolicy() != null ? getScaleDownPolicy().getGroupName() : null; }
@Test public void ReplicaTest2() throws Exception { Configuration configuration = createConfiguration("replica-hapolicy-config2.xml"); ActiveMQServerImpl server = new ActiveMQServerImpl(configuration); try { server.start(); Activation activation = server.getActivation(); assertTrue(activation instanceof SharedNothingBackupActivation); HAPolicy haPolicy = server.getHAPolicy(); assertTrue(haPolicy instanceof ReplicaPolicy); ReplicaPolicy replicaPolicy = (ReplicaPolicy) haPolicy; assertEquals(replicaPolicy.getGroupName(), "tiddles"); assertEquals(replicaPolicy.getMaxSavedReplicatedJournalsSize(), 22); assertEquals(replicaPolicy.getClusterName(), "33rrrrr"); assertFalse(replicaPolicy.isRestartBackup()); ScaleDownPolicy scaleDownPolicy = replicaPolicy.getScaleDownPolicy(); assertNotNull(scaleDownPolicy); assertEquals(scaleDownPolicy.getGroupName(), "boo!"); assertEquals(scaleDownPolicy.getDiscoveryGroup(), null); List<String> connectors = scaleDownPolicy.getConnectors(); assertNotNull(connectors); assertEquals(connectors.size(), 2); assertTrue(connectors.contains("sd-connector1")); assertTrue(connectors.contains("sd-connector2")); } finally { server.stop(); } }
boolean scalingDown = scaleDownPolicy != null && scaleDownPolicy.isEnabled();
@Test public void ReplicaTest() throws Exception { Configuration configuration = createConfiguration("replica-hapolicy-config.xml"); ActiveMQServerImpl server = new ActiveMQServerImpl(configuration); try { server.start(); Activation activation = server.getActivation(); assertTrue(activation instanceof SharedNothingBackupActivation); HAPolicy haPolicy = server.getHAPolicy(); assertTrue(haPolicy instanceof ReplicaPolicy); ReplicaPolicy replicaPolicy = (ReplicaPolicy) haPolicy; assertEquals(replicaPolicy.getGroupName(), "tiddles"); assertEquals(replicaPolicy.getMaxSavedReplicatedJournalsSize(), 22); assertEquals(replicaPolicy.getClusterName(), "33rrrrr"); assertFalse(replicaPolicy.isRestartBackup()); assertTrue(replicaPolicy.isAllowFailback()); assertEquals(replicaPolicy.getInitialReplicationSyncTimeout(), 9876); assertEquals(replicaPolicy.getRetryReplicationWait(), 12345); ScaleDownPolicy scaleDownPolicy = replicaPolicy.getScaleDownPolicy(); assertNotNull(scaleDownPolicy); assertEquals(scaleDownPolicy.getGroupName(), "boo!"); assertEquals(scaleDownPolicy.getDiscoveryGroup(), "wahey"); List<String> connectors = scaleDownPolicy.getConnectors(); assertNotNull(connectors); assertEquals(connectors.size(), 0); } finally { server.stop(); } }