private void liveOnlyTest(String file) throws Exception { Configuration configuration = createConfiguration(file); 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(); assertNull(scaleDownPolicy); } finally { server.stop(); } }
public long scaleDown() throws Exception { ScaleDownHandler scaleDownHandler = new ScaleDownHandler(activeMQServer.getPagingManager(), activeMQServer.getPostOffice(), activeMQServer.getNodeManager(), activeMQServer.getClusterManager().getClusterController(), activeMQServer.getStorageManager()); ConcurrentMap<SimpleString, DuplicateIDCache> duplicateIDCaches = ((PostOfficeImpl) activeMQServer.getPostOffice()).getDuplicateIDCaches(); Map<SimpleString, List<Pair<byte[], Long>>> duplicateIDMap = new HashMap<>(); for (SimpleString address : duplicateIDCaches.keySet()) { DuplicateIDCache duplicateIDCache = activeMQServer.getPostOffice().getDuplicateIDCache(address); duplicateIDMap.put(address, duplicateIDCache.getMap()); } return scaleDownHandler.scaleDown(scaleDownClientSessionFactory, activeMQServer.getResourceManager(), duplicateIDMap, activeMQServer.getManagementService().getManagementAddress(), null); } }
@Override public StorageManager createStorageManager() { StorageManager original = super.createStorageManager(); return new StorageManagerDelegate(original) { @Override public void storeMessage(Message message) throws Exception { if (fail) { if (count.incrementAndGet() == 110) { System.out.println("Failing " + message); System.out.flush(); Thread.sleep(100); Runtime.getRuntime().halt(-1); } } super.storeMessage(message); } }; } };
@Override public void run() { try { activeMQServer.initialisePart1(false); activeMQServer.registerActivateCallback(activeMQServer.getNodeManager().startLiveNode()); if (activeMQServer.getState() == ActiveMQServerImpl.SERVER_STATE.STOPPED || activeMQServer.getState() == ActiveMQServerImpl.SERVER_STATE.STOPPING) { return; } activeMQServer.initialisePart2(false); activeMQServer.completeActivation(); if (activeMQServer.getIdentity() != null) { ActiveMQServerLogger.LOGGER.serverIsLive(activeMQServer.getIdentity()); } else { ActiveMQServerLogger.LOGGER.serverIsLive(); } } catch (Exception e) { ActiveMQServerLogger.LOGGER.initializationError(e); activeMQServer.callActivationFailureListeners(e); } }
@Override public OperationContext newOperationContext() { return getStorageManager().newContext(getExecutorFactory().getExecutor()); }
@Override public ActiveMQServer createBackupServer(Configuration configuration) { return new ActiveMQServerImpl(configuration, null, securityManager, this); }
activeMQServer.setState(ActiveMQServerImpl.SERVER_STATE.STARTED); activeMQServer.getNodeManager().stop(); activeMQServer.moveServerData(replicaPolicy.getMaxSavedReplicatedJournalsSize()); activeMQServer.getNodeManager().start(); synchronized (this) { if (closed) { if (!activeMQServer.initialisePart1(scalingDown)) { if (logger.isTraceEnabled()) { logger.trace("could not initialize part1 " + scalingDown); if (closed) return; backupQuorum = new SharedNothingBackupQuorum(activeMQServer.getStorageManager(), activeMQServer.getNodeManager(), activeMQServer.getScheduledPool(), networkHealthCheck, replicaPolicy.getQuorumSize(), replicaPolicy.getVoteRetries(), replicaPolicy.getVoteRetryWait(), replicaPolicy.getQuorumVoteWait()); activeMQServer.getClusterManager().getQuorumManager().registerQuorum(backupQuorum); activeMQServer.getClusterManager().getQuorumManager().registerQuorumHandler(new ServerConnectVoteHandler(activeMQServer)); ClusterController clusterController = activeMQServer.getClusterManager().getClusterController(); clusterController.addClusterTopologyListenerForReplication(nodeLocator); activeMQServer.getBackupManager().start(); replicationEndpoint.setExecutor(activeMQServer.getExecutorFactory().getExecutor()); EndpointConnector endpointConnector = new EndpointConnector(); ActiveMQServerLogger.LOGGER.backupServerStarted(activeMQServer.getVersion().getFullVersion(), activeMQServer.getNodeManager().getNodeId()); activeMQServer.setState(ActiveMQServerImpl.SERVER_STATE.STARTED);
@Test public void testJournalFileOpenTimeoutDefaultValue() throws Exception { ActiveMQServerImpl server = new ActiveMQServerImpl(); try { server.start(); JournalImpl journal = (JournalImpl) server.getStorageManager().getBindingsJournal(); Assert.assertEquals(ActiveMQDefaultConfiguration.getDefaultJournalFileOpenTimeout(), journal.getFilesRepository().getJournalFileOpenTimeout()); Assert.assertEquals(ActiveMQDefaultConfiguration.getDefaultJournalFileOpenTimeout(), server.getConfiguration().getJournalFileOpenTimeout()); } finally { server.stop(); } }
@Test public void shouldNotUseJdbcNodeManagerWithoutHAPolicy() throws Exception { Configuration configuration = createConfiguration("database-store-no-hapolicy-config.xml"); ActiveMQServerImpl server = new ActiveMQServerImpl(configuration); assertEquals(StoreConfiguration.StoreType.DATABASE, server.getConfiguration().getStoreConfiguration().getStoreType()); assertEquals(HAPolicyConfiguration.TYPE.LIVE_ONLY, server.getConfiguration().getHAPolicyConfiguration().getType()); try { server.start(); assertThat(server.getNodeManager(), instanceOf(FileLockNodeManager.class)); } finally { server.stop(); } }
ActiveMQServerLogger.LOGGER.awaitingLiveLock(); activeMQServer.checkJournalDirectory(); if (!activeMQServer.initialisePart1(false)) return; if (activeMQServer.getNodeManager().isBackupLive()) { logger.debug("announcing backup to the former live" + this); activeMQServer.getBackupManager().start(); activeMQServer.setState(ActiveMQServerImpl.SERVER_STATE.STARTED); activeMQServer.getBackupManager().announceBackup(); activeMQServer.registerActivateCallback(activeMQServer.getNodeManager().startLiveNode()); if (activeMQServer.getState() == ActiveMQServerImpl.SERVER_STATE.STOPPED || activeMQServer.getState() == ActiveMQServerImpl.SERVER_STATE.STOPPING) { return; activeMQServer.initialisePart2(false); activeMQServer.completeActivation(); activeMQServer.callActivationFailureListeners(e);
@Override public void run() { try { activeMQServer.getNodeManager().startBackup(); if (!activeMQServer.initialisePart1(scalingDown)) return; activeMQServer.getBackupManager().start(); activeMQServer.setState(ActiveMQServerImpl.SERVER_STATE.STARTED); ActiveMQServerLogger.LOGGER.backupServerStarted(activeMQServer.getVersion().getFullVersion(), activeMQServer.getNodeManager().getNodeId()); activeMQServer.getNodeManager().awaitLiveNode(); activeMQServer.setHAPolicy(sharedStoreSlavePolicy.getSharedStoreMasterPolicy()); activeMQServer.getBackupManager().activated(); if (activeMQServer.getState() != ActiveMQServerImpl.SERVER_STATE.STARTED) { return; activeMQServer.initialisePart2(scalingDown); activeMQServer.completeActivation(); activeMQServer.getNodeManager().releaseBackup(); if (sharedStoreSlavePolicy.isAllowAutoFailBack() && ActiveMQServerImpl.SERVER_STATE.STOPPING != activeMQServer.getState() && ActiveMQServerImpl.SERVER_STATE.STOPPED != activeMQServer.getState()) { startFailbackChecker();
@Override public void run() { try { activeMQServer.getStorageManager().startReplication(replicationManager, activeMQServer.getPagingManager(), activeMQServer.getNodeID().toString(), isFailBackRequest && replicatedPolicy.isAllowAutoFailBack(), replicatedPolicy.getInitialReplicationSyncTimeout()); clusterConnection.nodeAnnounced(System.currentTimeMillis(), activeMQServer.getNodeID().toString(), replicatedPolicy.getGroupName(), replicatedPolicy.getScaleDownGroupName(), pair, true); BackupTopologyListener listener1 = new BackupTopologyListener(activeMQServer.getNodeID().toString(), clusterConnection.getConnector()); clusterConnection.addClusterTopologyListener(listener1); if (listener1.waitForBackup()) { activeMQServer.fail(true); ActiveMQServerLogger.LOGGER.restartingReplicatedBackupAfterFailback(); activeMQServer.setHAPolicy(replicatedPolicy.getReplicaPolicy()); activeMQServer.start(); } else { ActiveMQServerLogger.LOGGER.failbackMissedBackupAnnouncement(); if (activeMQServer.getState() == ActiveMQServerImpl.SERVER_STATE.STARTED) { ActiveMQServerImpl.stopComponent(replicationManager); } catch (Exception amqe) { ActiveMQServerLogger.LOGGER.errorStoppingReplication(amqe);
@Override public synchronized void start() throws Exception { Configuration config = server.getConfiguration(); try { storageManager = server.getStorageManager(); storageManager.start(); server.getManagementService().setStorageManager(storageManager); journalsHolder.put(JournalContent.BINDINGS, storageManager.getBindingsJournal()); journalsHolder.put(JournalContent.MESSAGES, storageManager.getMessageJournal()); for (JournalContent jc : EnumSet.allOf(JournalContent.class)) { filesReservedForSync.put(jc, new HashMap<Long, JournalSyncFile>()); // We only need to load internal structures on the backup... journalLoadInformation[jc.typeByte] = journalsHolder.get(jc).loadSyncOnly(JournalState.SYNCING); } pageManager = server.createPagingManager(); pageManager.start(); started = true; } catch (Exception e) { if (server.isStarted()) throw e; } }
callPreActiveCallbacks(); storageManager = createStorageManager(); pagingManager = createPagingManager(); deployAddressSettingsFromConfiguration(); deploySecurityFromConfiguration(); deployGroupingHandlerConfiguration(configuration.getGroupingHandlerConfiguration()); this.reloadManager = new ReloadManagerImpl(getScheduledPool(), executorFactory.getExecutor(), configuration.getConfigurationFileRefreshPeriod()); if (configuration.getConfigurationUrl() != null && getScheduledPool() != null) { reloadManager.addCallback(configuration.getConfigurationUrl(), new ConfigurationFileReloader()); if (hasBrokerPlugins()) { callBrokerPlugins(plugin -> plugin.registered(this));
@Test public void databaseStoreConfigTest() throws Exception { Configuration configuration = createConfiguration("database-store-config.xml"); ActiveMQServerImpl server = new ActiveMQServerImpl(configuration); assertEquals(StoreConfiguration.StoreType.DATABASE, server.getConfiguration().getStoreConfiguration().getStoreType()); }
@Override public void close(final boolean permanently, boolean restarting) throws Exception { synchronized (this) { if (backupQuorum != null) backupQuorum.causeExit(STOP); replicationEndpoint = null; closed = true; } //we have to check as the server policy may have changed if (activeMQServer.getHAPolicy().isBackup()) { // To avoid a NPE cause by the stop NodeManager nodeManagerInUse = activeMQServer.getNodeManager(); activeMQServer.interruptActivationThread(nodeManagerInUse); if (nodeManagerInUse != null) { nodeManagerInUse.stopBackup(); } } }
@Override public void run() { try { logger.debug(activeMQServer + "::Stopping live node in favor of failback"); NodeManager nodeManager = activeMQServer.getNodeManager(); activeMQServer.stop(true, false, true); // ensure that the server to which we are failing back actually starts fully before we restart nodeManager.start(); try { nodeManager.awaitLiveStatus(); } finally { nodeManager.stop(); } synchronized (failbackCheckerGuard) { if (cancelFailBackChecker || !sharedStoreSlavePolicy.isRestartBackup()) return; activeMQServer.setHAPolicy(sharedStoreSlavePolicy); logger.debug(activeMQServer + "::Starting backup node now after failback"); activeMQServer.start(); } } catch (Exception e) { ActiveMQServerLogger.LOGGER.serverRestartWarning(e); } } });
private synchronized ReplicationEndpoint connectToReplicationEndpoint(final ClusterControl control) throws Exception { if (!activeMQServer.isStarted()) return null; if (!activeMQServer.getHAPolicy().isBackup()) { throw ActiveMQMessageBundle.BUNDLE.serverNotBackupServer(); } Channel replicationChannel = control.createReplicationChannel(); replicationChannel.setHandler(replicationEndpoint); if (replicationEndpoint.getChannel() != null) { throw ActiveMQMessageBundle.BUNDLE.alreadyHaveReplicationServer(); } replicationEndpoint.setChannel(replicationChannel); return replicationEndpoint; } }
synchronized (replicationLock) { if (replicationManager != null) { activeMQServer.getStorageManager().stopReplication(); replicationManager = null; QuorumManager quorumManager = activeMQServer.getClusterManager().getQuorumManager(); int size = replicatedPolicy.getQuorumSize() == -1 ? quorumManager.getMaxClusterSize() : replicatedPolicy.getQuorumSize(); QuorumVoteServerConnect quorumVote = new QuorumVoteServerConnect(size, activeMQServer.getNodeID().toString(), true);
Activation activation = actualServer.getActivation(); boolean isReplicated = !backup.getHAPolicy().isSharedStore(); boolean isRemoteUpToDate = true; } else { if (actualServer.isStarted()) { (!waitForSync || actualServer.getBackupManager() != null && actualServer.getBackupManager().isBackupAnnounced())) { break; String threadDump = threadDump("can't get synchronization finished " + backup.isReplicaSync()); System.err.println(threadDump); fail("backup started? (" + actualServer.isStarted() + "). Finished synchronizing (" + (activation) + "). SessionFactory!=null ? " + (sessionFactory != null) + " || sessionFactory.getBackupConnector()==" +