@Override public synchronized void start() { if (state != JournalState.STOPPED) { throw new IllegalStateException("Journal " + this + " is not stopped, state is " + state); } if (providedIOThreadPool == null) { ThreadFactory factory = AccessController.doPrivileged(new PrivilegedAction<ThreadFactory>() { @Override public ThreadFactory run() { return new ActiveMQThreadFactory("ArtemisIOThread", true, JournalImpl.class.getClassLoader()); } }); threadPool = new ThreadPoolExecutor(0, Integer.MAX_VALUE, 60L,TimeUnit.SECONDS, new SynchronousQueue(), factory); ioExecutorFactory = new OrderedExecutorFactory(threadPool); } else { ioExecutorFactory = providedIOThreadPool; } filesExecutor = ioExecutorFactory.getExecutor(); compactorExecutor = ioExecutorFactory.getExecutor(); appendExecutor = ioExecutorFactory.getExecutor(); filesRepository.setExecutor(filesExecutor); fileFactory.start(); setJournalState(JournalState.STARTED); }
@Override public synchronized void start() { if (state != JournalState.STOPPED) { throw new IllegalStateException("Journal " + this + " is not stopped, state is " + state); } if (providedIOThreadPool == null) { ThreadFactory factory = AccessController.doPrivileged(new PrivilegedAction<ThreadFactory>() { @Override public ThreadFactory run() { return new ActiveMQThreadFactory("ArtemisIOThread", true, JournalImpl.class.getClassLoader()); } }); threadPool = new ThreadPoolExecutor(0, Integer.MAX_VALUE, 60L,TimeUnit.SECONDS, new SynchronousQueue(), factory); ioExecutorFactory = new OrderedExecutorFactory(threadPool); } else { ioExecutorFactory = providedIOThreadPool; } filesExecutor = ioExecutorFactory.getExecutor(); compactorExecutor = ioExecutorFactory.getExecutor(); appendExecutor = ioExecutorFactory.getExecutor(); filesRepository.setExecutor(filesExecutor); fileFactory.start(); setJournalState(JournalState.STARTED); }
@Override @Before public void setUp() throws Exception { super.setUp(); resetFileFactory(); fileFactory.start(); transactions.clear(); records.clear(); }
private static SequentialFileFactory newFactory(File datafolder, boolean datasync, JournalType journalType, int fileSize, int maxAIO) { SequentialFileFactory factory; if (journalType == JournalType.ASYNCIO && !LibaioContext.isLoaded()) { journalType = JournalType.NIO; } switch (journalType) { case NIO: factory = new NIOSequentialFileFactory(datafolder, 1).setDatasync(datasync); ((NIOSequentialFileFactory) factory).disableBufferReuse(); factory.start(); return factory; case ASYNCIO: factory = new AIOSequentialFileFactory(datafolder, maxAIO).setDatasync(datasync); factory.start(); ((AIOSequentialFileFactory) factory).disableBufferReuse(); return factory; case MAPPED: factory = new MappedSequentialFileFactory(datafolder, fileSize, false, 0, 0, null) .setDatasync(datasync) .disableBufferReuse(); factory.start(); return factory; default: throw ActiveMQMessageBundle.BUNDLE.invalidJournalType2(journalType); } } }
private static SequentialFileFactory newFactory(File datafolder, boolean datasync, JournalType journalType, int fileSize, int maxAIO) { SequentialFileFactory factory; if (journalType == JournalType.ASYNCIO && !LibaioContext.isLoaded()) { journalType = JournalType.NIO; } switch (journalType) { case NIO: factory = new NIOSequentialFileFactory(datafolder, 1).setDatasync(datasync); ((NIOSequentialFileFactory) factory).disableBufferReuse(); factory.start(); return factory; case ASYNCIO: factory = new AIOSequentialFileFactory(datafolder, maxAIO).setDatasync(datasync); factory.start(); ((AIOSequentialFileFactory) factory).disableBufferReuse(); return factory; case MAPPED: factory = new MappedSequentialFileFactory(datafolder, fileSize, false, 0, 0, null) .setDatasync(datasync) .disableBufferReuse(); factory.start(); return factory; default: throw ActiveMQMessageBundle.BUNDLE.invalidJournalType2(journalType); } } }
private void testBuffer(final SequentialFileFactory factory) { factory.start(); ByteBuffer buffer = factory.newBuffer(100); try { for (byte b = 0; b < 100; b++) { buffer.put(b); } buffer.rewind(); for (byte b = 0; b < 100; b++) { Assert.assertEquals(b, buffer.get()); } buffer.limit(10); factory.clearBuffer(buffer); buffer.limit(100); buffer.rewind(); for (byte b = 0; b < 100; b++) { if (b < 10) { Assert.assertEquals(0, buffer.get()); } else { Assert.assertEquals(b, buffer.get()); } } } finally { factory.releaseBuffer(buffer); factory.stop(); } }
@Override public synchronized SequentialFileFactory newFileFactory(final SimpleString address) throws Exception { String tableName = "" + storageManager.generateID(); SequentialFileFactory factory = newFileFactory(tableName, true); factory.start(); SequentialFile file = factory.createSequentialFile(PagingStoreFactoryDatabase.ADDRESS_FILE); file.open(); ActiveMQBuffer buffer = ActiveMQBuffers.fixedBuffer(SimpleString.sizeofNullableString(address)); buffer.writeSimpleString(address); file.write(buffer, true); file.close(); return factory; }
@Override @Before public void setUp() throws Exception { super.setUp(); factory = createFactory(getTestDir()); factory.start(); }
fileFactory.start();
@Test public void testMaxInt() throws Exception { setup(10, 10 * 1024, true); createJournal(); startJournal(); load(); stopJournal(); fileFactory.start(); List<String> files = fileFactory.listFiles(fileExtension); long fileID = Integer.MAX_VALUE; for (String fileStr : files) { SequentialFile file = fileFactory.createSequentialFile(fileStr); file.open(); JournalImpl.initFileHeader(fileFactory, file, journal.getUserVersion(), fileID++); file.close(); } fileFactory.stop(); startJournal(); load(); for (long i = 0; i < 100; i++) { add(i); stopJournal(); startJournal(); loadAndCheck(); } stopJournal(); }