/** * Check if journal directory exists or create it (if configured to do so) */ public void checkJournalDirectory() { File journalDir = configuration.getJournalLocation(); if (!journalDir.exists() && configuration.isPersistenceEnabled()) { if (configuration.isCreateJournalDir()) { journalDir.mkdirs(); } else { throw ActiveMQMessageBundle.BUNDLE.cannotCreateDir(journalDir.getAbsolutePath()); } } }
public void resetNodeManager() throws Exception { if (nodeManager != null) { nodeManager.stop(); } nodeManager = createNodeManager(configuration.getJournalLocation(), true); }
/** * Override this if is needed a different implementation of {@link NodeManager} to be used into {@link #createReplicatedConfigs()}. */ protected NodeManager createReplicatedBackupNodeManager(Configuration backupConfig) { return new InVMNodeManager(true, backupConfig.getJournalLocation()); }
/** * Move data away before starting data synchronization for fail-back. * <p> * Use case is a server, upon restarting, finding a former backup running in its place. It will * move any older data away and log a warning about it. */ void moveServerData(int maxSavedReplicated) throws IOException { File[] dataDirs = new File[]{configuration.getBindingsLocation(), configuration.getJournalLocation(), configuration.getPagingLocation(), configuration.getLargeMessagesLocation()}; for (File data : dataDirs) { FileMoveManager moveManager = new FileMoveManager(data, maxSavedReplicated); moveManager.doMove(); } }
void printJournal(TestableServer server) { try { System.out.println("\n\n BINDINGS JOURNAL\n\n"); Configuration config = server.getServer().getConfiguration(); DescribeJournal.describeBindingsJournal(config.getBindingsLocation()); System.out.println("\n\n MESSAGES JOURNAL\n\n"); DescribeJournal.describeMessagesJournal(config.getJournalLocation()); } catch (Exception ignored) { ignored.printStackTrace(); } }
/** * send a request to a live server to start a backup for us * * @param connectorPair the connector for the node to request a backup from * @param backupSize the current size of the requested nodes backups * @param replicated * @return true if the request wa successful. * @throws Exception */ public boolean requestBackup(Pair<TransportConfiguration, TransportConfiguration> connectorPair, int backupSize, boolean replicated) throws Exception { ClusterController clusterController = server.getClusterManager().getClusterController(); try ( ClusterControl clusterControl = clusterController.connectToNode(connectorPair.getA()); ) { clusterControl.authorize(); if (replicated) { return clusterControl.requestReplicatedBackup(backupSize, server.getNodeID()); } else { return clusterControl.requestSharedStoreBackup(backupSize, server.getConfiguration().getJournalLocation().getAbsolutePath(), server.getConfiguration().getBindingsLocation().getAbsolutePath(), server.getConfiguration().getLargeMessagesLocation().getAbsolutePath(), server.getConfiguration().getPagingLocation().getAbsolutePath()); } } }
System.out.println("Location::" + server.getConfiguration().getJournalLocation().getAbsolutePath()); server.start(); return server;
@Override protected void beforeStart() throws Exception { checkAndCreateDir(config.getBindingsLocation(), config.isCreateBindingsDir()); checkAndCreateDir(config.getJournalLocation(), config.isCreateJournalDir()); checkAndCreateDir(config.getLargeMessagesLocation(), config.isCreateJournalDir()); cleanupIncompleteFiles(); }
System.setProperty("artemis.instance", this.getClass().getClassLoader().getResource("dataprint").getFile()); PrintData.printData(server.getConfiguration().getBindingsLocation().getAbsoluteFile(), server.getConfiguration().getJournalLocation().getAbsoluteFile(), server.getConfiguration().getPagingLocation().getAbsoluteFile(), new PrintStream(new OutputStream() { @Override File dirFile = server.getConfiguration().getJournalLocation().getAbsoluteFile(); File[] files = dirFile.listFiles(); for (int i = 0; i < files.length; i++) {
@Test public void testDataOutsideHome() throws Exception { Configuration configuration = createDefaultConfig(false); File instanceHome = new File(getTemporaryDir(), "artemisHome"); configuration.setBrokerInstance(instanceHome); // the journal should be outside of the artemisInstance on this case File journalOutside = new File(getTemporaryDir(), "./journalOut").getAbsoluteFile(); configuration.setJournalDirectory(journalOutside.getAbsolutePath()); // Somewhere inside artemis.instance configuration.setBindingsDirectory("./bind"); File bindingsInside = new File(instanceHome, "bind"); // configuration.setJournal System.out.println("Journal dir::" + configuration.getJournalDirectory()); System.out.println("Journal loc::" + configuration.getJournalLocation()); ActiveMQServer server = createServer(true, configuration, AddressSettings.DEFAULT_PAGE_SIZE, AddressSettings.DEFAULT_MAX_SIZE_BYTES, new HashMap<String, AddressSettings>()); server.start(); server.stop(); checkData(journalOutside, ".amq"); // Checking if the journal created the lock as well checkData(journalOutside, "server.lock"); checkData(bindingsInside, ".bindings"); }
SequentialFileFactory messagesFF = new NIOSequentialFileFactory(serverToInvestigate.getConfiguration().getJournalLocation(), 1);
ff = new NIOSequentialFileFactory(config.getJournalLocation(), null, 1); journal = new JournalImpl(config.getJournalFileSize(), config.getJournalMinFiles(), config.getJournalPoolFiles(), 0, 0, ff, "activemq-data", "amq", 1); } else {
/** * Reads a journal system and returns a Map<Integer,AtomicInteger> of recordTypes and the number of records per type, * independent of being deleted or not * * @param config * @return * @throws Exception */ protected HashMap<Integer, AtomicInteger> countJournal(Configuration config) throws Exception { final HashMap<Integer, AtomicInteger> recordsType = new HashMap<>(); SequentialFileFactory messagesFF = new NIOSequentialFileFactory(config.getJournalLocation(), null, 1); JournalImpl messagesJournal = new JournalImpl(config.getJournalFileSize(), config.getJournalMinFiles(), config.getJournalPoolFiles(), 0, 0, messagesFF, "activemq-data", "amq", 1); List<JournalFile> filesToRead = messagesJournal.orderFiles(); for (JournalFile file : filesToRead) { JournalImpl.readJournalFile(messagesFF, file, new RecordTypeCounter(recordsType)); } return recordsType; }
@Test public void testConsumeFromFormat() throws Exception { ActiveMQServer server = createServer(true); DecodeJournal.importJournal(server.getConfiguration().getJournalLocation().getAbsolutePath(), "activemq-data", "amq", 2, 102400, new StringReader(journalFile)); DecodeJournal.importJournal(server.getConfiguration().getBindingsLocation().getAbsolutePath(), "activemq-bindings", "bindings", 2, 1048576, new StringReader(bindingsFile)); server.start(); ServerLocator locator = createInVMNonHALocator(); ClientSessionFactory factory = createSessionFactory(locator); ClientSession session = factory.createSession(); session.start(); ClientConsumer consumer = session.createConsumer("A1"); for (int i = 0; i < 10; i++) { ClientMessage msg = consumer.receive(5000); assertNotNull(msg); msg.acknowledge(); assertEquals(i, msg.getIntProperty("key").intValue()); } session.commit(); }
ActiveMQServerLogger.LOGGER.journalUseNIO(); journalFF = new NIOSequentialFileFactory(config.getJournalLocation(), true, config.getJournalBufferSize_NIO(), config.getJournalBufferTimeout_NIO(), config.getJournalMaxIO_NIO(), config.isLogJournalWriteRate(), criticalErrorListener, getCriticalAnalyzer()); break; case ASYNCIO: ActiveMQServerLogger.LOGGER.journalUseAIO(); journalFF = new AIOSequentialFileFactory(config.getJournalLocation(), config.getJournalBufferSize_AIO(), config.getJournalBufferTimeout_AIO(), config.getJournalMaxIO_AIO(), config.isLogJournalWriteRate(), criticalErrorListener, getCriticalAnalyzer()); break; case MAPPED: ActiveMQServerLogger.LOGGER.journalUseMAPPED(); journalFF = new MappedSequentialFileFactory(config.getJournalLocation(), config.getJournalFileSize(), true, config.getJournalBufferSize_NIO(), config.getJournalBufferTimeout_NIO(), criticalErrorListener); break; default:
System.out.println("copy & paste the following as dataFile:"); EncodeJournal.exportJournal(server.getConfiguration().getJournalLocation().getAbsolutePath(), "activemq-data", "amq", 2, 102400, System.out);
@Test public void testDuplicateRecordId() throws Exception { for (int i = 0; i < 3; i++) { server.start(); ActiveMQServerControl serverControl = server.getActiveMQServerControl(); serverControl.removeAddressSettings("q"); AddressSettingsInfo defaultSettings = AddressSettingsInfo.from(serverControl.getAddressSettingsAsJSON("#")); serverControl.addAddressSettings("q", "dlq", defaultSettings.getExpiryAddress(), -1, false, 1, defaultSettings.getMaxSizeBytes(), defaultSettings.getPageSizeBytes(), defaultSettings.getPageCacheMaxSize(), defaultSettings.getRedeliveryDelay(), defaultSettings.getRedeliveryMultiplier(), defaultSettings.getMaxRedeliveryDelay(), defaultSettings.getRedistributionDelay(), defaultSettings.isSendToDLAOnNoRoute(), defaultSettings.getAddressFullMessagePolicy(), defaultSettings.getSlowConsumerThreshold(), defaultSettings.getSlowConsumerCheckPeriod(), defaultSettings.getSlowConsumerPolicy(), defaultSettings.isAutoCreateJmsQueues(), defaultSettings.isAutoDeleteJmsQueues(), defaultSettings.isAutoCreateJmsQueues(), defaultSettings.isAutoDeleteJmsTopics()); server.stop(); PrintData.printData(server.getConfiguration().getBindingsLocation().getAbsoluteFile(), server.getConfiguration().getJournalLocation().getAbsoluteFile(), server.getConfiguration().getPagingLocation().getAbsoluteFile()); } } }
JournalImpl journal = new JournalImpl(server.getConfiguration().getJournalFileSize(), 2, 2, 0, 0, new NIOSequentialFileFactory(server.getConfiguration().getJournalLocation(), 1), "activemq-data", "amq", 1);
assertFalse("must NOT be a backup", liveServer.getServer().getHAPolicy().isBackup()); adaptLiveConfigForReplicatedFailBack(liveServer); FileMoveManager liveMoveManager = new FileMoveManager(liveServer.getServer().getConfiguration().getJournalLocation(), -1); liveServer.getServer().lockActivation(); try {
FileMoveManager moveManager = new FileMoveManager(backupServer.getServer().getConfiguration().getJournalLocation(), 0); Assert.assertEquals(1, moveManager.getNumberOfFolders());