@Test public void testRestartStorageManager() throws Exception { File testdir = new File(getTestDir()); deleteDirectory(testdir); PostOffice postOffice = new FakePostOffice(); final JournalStorageManager journal = new JournalStorageManager(createDefaultInVMConfig(), EmptyCriticalAnalyzer.getInstance(), execFactory, execFactory); try { journal.start(); List<QueueBindingInfo> queueBindingInfos = new ArrayList<>(); journal.loadBindingJournal(queueBindingInfos, new ArrayList<GroupingInfo>(), new ArrayList<AddressBindingInfo>()); journal.loadMessageJournal(postOffice, null, null, null, null, null, null, new FakeJournalLoader()); journal.stop(); deleteDirectory(testdir); journal.start(); journal.loadMessageJournal(postOffice, null, null, null, null, null, null, new FakeJournalLoader()); queueBindingInfos = new ArrayList<>(); journal.loadBindingJournal(queueBindingInfos, new ArrayList<GroupingInfo>(), new ArrayList<AddressBindingInfo>()); journal.start(); } finally { try { journal.stop(); } catch (Exception ex) { RestartSMTest.log.warn(ex.getMessage(), ex); } } }
@Override public void run() { try { while (running.get()) { Thread.sleep(500); System.out.println("Compacting"); ((JournalImpl) storage.getMessageJournal()).testCompact(); ((JournalImpl) storage.getMessageJournal()).checkReclaimStatus(); } } catch (Throwable e) { e.printStackTrace(); errors.incrementAndGet(); } } };
/** * Test of fixJournalFileSize method, of class JournalStorageManager. */ @Test public void testFixJournalFileSize() { JournalStorageManager manager = new JournalStorageManager(new ConfigurationImpl(), null, dumbExecutor, dumbScheduler, dumbExecutor); Assert.assertEquals(4096, manager.fixJournalFileSize(1024, 4096)); Assert.assertEquals(4096, manager.fixJournalFileSize(4098, 4096)); Assert.assertEquals(8192, manager.fixJournalFileSize(8192, 4096)); } }
public void printDataJDBC(Configuration configuration, PrintStream out) throws Exception { initializeJournal(configuration); Artemis.printBanner(out); printBanner(out, BINDINGS_BANNER); DescribeJournal.printSurvivingRecords(storageManager.getBindingsJournal(), out, safe); printBanner(out, MESSAGES_BANNER); DescribeJournal describeJournal = DescribeJournal.printSurvivingRecords(storageManager.getMessageJournal(), out, safe); printPages(describeJournal, storageManager, pagingmanager, out, safe); cleanup(); } public static void printData(File bindingsDirectory, File messagesDirectory, File pagingDirectory) throws Exception {
final JournalStorageManager storage = new JournalStorageManager(config, EmptyCriticalAnalyzer.getInstance(), factory, iofactory); storage.start(); storage.loadInternalOnly(); ((JournalImpl) storage.getMessageJournal()).setAutoReclaim(false); final LinkedList<Long> survivingMsgs = new LinkedList<>(); storage.stop(); } finally { try { storage.stop(); } catch (Exception e) { e.printStackTrace();
@Test public void testIncorrectFileSizeHigher() { ConfigurationImpl config = new ConfigurationImpl(); int origFileSize = config.getJournalFileSize(); config.setJournalFileSize(origFileSize + (align / 2 + 1)); JournalStorageManager manager = new JournalStorageManager(config, EmptyCriticalAnalyzer.getInstance(), new OrderedExecutorFactory(null), new OrderedExecutorFactory(null)); int fileSize = manager.getMessageJournal().getFileSize(); Assert.assertEquals(origFileSize + align, fileSize); }
@Test public void testConstant() { Configuration configuration = new ConfigurationImpl(); configuration.setJournalType(JournalType.NIO); configuration.setJournalPoolFiles(11); configuration.setJournalCompactMinFiles(22); configuration.setJournalCompactPercentage(33); JournalStorageManager journalStorageManager = new JournalStorageManager(configuration, null, dumbExecutor, dumbScheduler, dumbExecutor); JournalImpl journal = (JournalImpl)journalStorageManager.getBindingsJournal(); assertJournalConstants(journal); journal = (JournalImpl)journalStorageManager.getMessageJournal(); assertJournalConstants(journal); }
/** * @param configuration */ protected JournalStorageManager createJournalStorageManager(Configuration configuration) { JournalStorageManager jsm = new JournalStorageManager(configuration, EmptyCriticalAnalyzer.getInstance(), execFactory, execFactory); addActiveMQComponent(jsm); return jsm; }
@Override public void stop() throws Exception { stop(false, true); }
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: int fileSize = fixJournalFileSize(config.getJournalFileSize(), journalFF.getAlignment()); Journal localMessage = createMessageJournal(config, criticalErrorListener, fileSize);
/** * Open the bindings journal and extract all bindings data. * * @throws Exception will be thrown if anything goes wrong reading the bindings journal */ private void getBindings() throws Exception { List<RecordInfo> records = new LinkedList<>(); Journal bindingsJournal = storageManager.getBindingsJournal(); bindingsJournal.start(); ActiveMQServerLogger.LOGGER.debug("Reading bindings journal from " + config.getBindingsDirectory()); bindingsJournal.load(records, null, null); for (RecordInfo info : records) { if (info.getUserRecordType() == JournalRecordIds.QUEUE_BINDING_RECORD) { PersistentQueueBindingEncoding bindingEncoding = (PersistentQueueBindingEncoding) DescribeJournal.newObjectEncoding(info, null); queueBindings.put(bindingEncoding.getId(), bindingEncoding); } else if (info.getUserRecordType() == JournalRecordIds.ADDRESS_BINDING_RECORD) { PersistentAddressBindingEncoding bindingEncoding = (PersistentAddressBindingEncoding) DescribeJournal.newObjectEncoding(info, null); addressBindings.put(bindingEncoding.getId(), bindingEncoding); } } bindingsJournal.stop(); }
@Test public void testIncorrectFileSizeLower() { ConfigurationImpl config = new ConfigurationImpl(); int origFileSize = config.getJournalFileSize(); config.setJournalFileSize(origFileSize + (align / 2 - 1)); JournalStorageManager manager = new JournalStorageManager(config, EmptyCriticalAnalyzer.getInstance(), new OrderedExecutorFactory(null), new OrderedExecutorFactory(null)); int fileSize = manager.getMessageJournal().getFileSize(); Assert.assertEquals(origFileSize, fileSize); }
/** * @return * @throws Exception */ private JournalStorageManager getStorage() throws Exception { return new JournalStorageManager(createDefaultInVMConfig(), EmptyCriticalAnalyzer.getInstance(), factory, factory); }
public void printDataJDBC(Configuration configuration, PrintStream out) throws Exception { initializeJournal(configuration); Artemis.printBanner(out); printBanner(out, BINDINGS_BANNER); DescribeJournal.printSurvivingRecords(storageManager.getBindingsJournal(), out, safe); printBanner(out, MESSAGES_BANNER); DescribeJournal describeJournal = DescribeJournal.printSurvivingRecords(storageManager.getMessageJournal(), out, safe); printPages(describeJournal, storageManager, pagingmanager, out, safe); cleanup(); } public static void printData(File bindingsDirectory, File messagesDirectory, File pagingDirectory) throws Exception {
protected void cleanup() throws Exception { executor.shutdown(); scheduledExecutorService.shutdown(); storageManager.stop(); }
/** * Open the bindings journal and extract all bindings data. * * @throws Exception will be thrown if anything goes wrong reading the bindings journal */ private void getBindings() throws Exception { List<RecordInfo> records = new LinkedList<>(); Journal bindingsJournal = storageManager.getBindingsJournal(); bindingsJournal.start(); ActiveMQServerLogger.LOGGER.debug("Reading bindings journal from " + config.getBindingsDirectory()); bindingsJournal.load(records, null, null); for (RecordInfo info : records) { if (info.getUserRecordType() == JournalRecordIds.QUEUE_BINDING_RECORD) { PersistentQueueBindingEncoding bindingEncoding = (PersistentQueueBindingEncoding) DescribeJournal.newObjectEncoding(info, null); queueBindings.put(bindingEncoding.getId(), bindingEncoding); } else if (info.getUserRecordType() == JournalRecordIds.ADDRESS_BINDING_RECORD) { PersistentAddressBindingEncoding bindingEncoding = (PersistentAddressBindingEncoding) DescribeJournal.newObjectEncoding(info, null); addressBindings.put(bindingEncoding.getId(), bindingEncoding); } } bindingsJournal.stop(); }
journal = new JournalStorageManager(configuration, EmptyCriticalAnalyzer.getInstance(), factory, factory); journal.start(); journal.loadBindingJournal(new ArrayList<QueueBindingInfo>(), new ArrayList<GroupingInfo>(), new ArrayList<AddressBindingInfo>()); journal.loadMessageJournal(postOffice, pagingManager, new ResourceManagerImpl(0, 0, scheduledThreadPool), null, mapDups, null, null, new PostOfficeJournalLoader(postOffice, pagingManager, null, null, null, null, null, null)); journal.stop(); journal = new JournalStorageManager(configuration, EmptyCriticalAnalyzer.getInstance(), factory, factory); journal.start(); journal.loadBindingJournal(new ArrayList<QueueBindingInfo>(), new ArrayList<GroupingInfo>(), new ArrayList<AddressBindingInfo>()); journal.loadMessageJournal(postOffice, pagingManager, new ResourceManagerImpl(0, 0, scheduledThreadPool), null, mapDups, null, null, new PostOfficeJournalLoader(postOffice, pagingManager, null, null, null, null, null, null)); journal.stop(); journal = new JournalStorageManager(configuration, EmptyCriticalAnalyzer.getInstance(), factory, factory); journal.start(); journal.loadBindingJournal(new ArrayList<QueueBindingInfo>(), new ArrayList<GroupingInfo>(), new ArrayList<AddressBindingInfo>()); journal.loadMessageJournal(postOffice, pagingManager, new ResourceManagerImpl(0, 0, scheduledThreadPool), null, mapDups, null, null, new PostOfficeJournalLoader(postOffice, pagingManager, null, null, null, null, null, null)); if (journal != null) { try { journal.stop(); } catch (Throwable ignored) {
@Test public void testIncorrectFileSizeHalf() { ConfigurationImpl config = new ConfigurationImpl(); int origFileSize = config.getJournalFileSize(); config.setJournalFileSize(origFileSize + (align / 2)); JournalStorageManager manager = new JournalStorageManager(config,EmptyCriticalAnalyzer.getInstance(), new OrderedExecutorFactory(null), new OrderedExecutorFactory(null)); int fileSize = manager.getMessageJournal().getFileSize(); Assert.assertEquals(origFileSize + align, fileSize); } }
protected void initializeJournal(Configuration configuration) throws Exception { this.config = configuration; executor = Executors.newFixedThreadPool(5, ActiveMQThreadFactory.defaultThreadFactory()); executorFactory = new OrderedExecutorFactory(executor); scheduledExecutorService = new ScheduledThreadPoolExecutor(configuration.getScheduledThreadPoolMaxSize(), new ThreadFactory() { @Override public Thread newThread(Runnable r) { return new Thread(r); } }); HierarchicalRepository<AddressSettings> addressSettingsRepository = new HierarchicalObjectRepository<>(config.getWildcardConfiguration()); addressSettingsRepository.setDefault(new AddressSettings()); if (configuration.isJDBC()) { storageManager = new JDBCJournalStorageManager(config, null, scheduledExecutorService, executorFactory, executorFactory, null); PagingStoreFactory pageStoreFactory = new PagingStoreFactoryDatabase((DatabaseStorageConfiguration) configuration.getStoreConfiguration(), storageManager, 1000L, scheduledExecutorService, executorFactory, false, null); pagingmanager = new PagingManagerImpl(pageStoreFactory, addressSettingsRepository, configuration.getManagementAddress()); } else { storageManager = new JournalStorageManager(config, EmptyCriticalAnalyzer.getInstance(), executorFactory, executorFactory); PagingStoreFactory pageStoreFactory = new PagingStoreFactoryNIO(storageManager, config.getPagingLocation(), 1000L, scheduledExecutorService, executorFactory, true, null); pagingmanager = new PagingManagerImpl(pageStoreFactory, addressSettingsRepository, configuration.getManagementAddress()); } }
static JournalImpl getMessageJournalFromServer(TestableServer server) { JournalStorageManager sm = (JournalStorageManager) server.getServer().getStorageManager(); return (JournalImpl) sm.getMessageJournal(); }