@Override public void run() { try { if (!checkReclaimStatus()) { checkCompact(); } } catch (Exception e) { ActiveMQJournalLogger.LOGGER.errorSchedulingCompacting(e); } } });
@Override public void run() { try { if (!checkReclaimStatus()) { checkCompact(); } } catch (Exception e) { ActiveMQJournalLogger.LOGGER.errorSchedulingCompacting(e); } } });
@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 public void testSimpleAdd() throws Exception { final int JOURNAL_SIZE = 1060; setupAndLoadJournal(JOURNAL_SIZE, 10); journalImpl.appendAddRecord(13, (byte) 14, new SimpleEncoding(1, (byte) 15), false); journalImpl.forceMoveNextFile(); journalImpl.checkReclaimStatus(); setupAndLoadJournal(JOURNAL_SIZE, 10); Assert.assertEquals(1, records.size()); Assert.assertEquals(13, records.get(0).id); Assert.assertEquals(14, records.get(0).userRecordType); Assert.assertEquals(1, records.get(0).data.length); Assert.assertEquals(15, records.get(0).data[0]); }
journalImpl.checkReclaimStatus();
journalImpl.checkReclaimStatus();
journalImpl.checkReclaimStatus();
@Test public void testReduceFreeFiles() throws Exception { final int JOURNAL_SIZE = 2000; setupAndLoadJournal(JOURNAL_SIZE, 100, 10); Assert.assertEquals(10, factory.listFiles("tt").size()); setupAndLoadJournal(JOURNAL_SIZE, 100, 2); Assert.assertEquals(10, factory.listFiles("tt").size()); for (int i = 0; i < 10; i++) { journalImpl.appendAddRecord(i, (byte) 0, new SimpleEncoding(1, (byte) 0), false); journalImpl.forceMoveNextFile(); } setupAndLoadJournal(JOURNAL_SIZE, 100, 2); Assert.assertEquals(10, records.size()); Assert.assertEquals(12, factory.listFiles("tt").size()); for (int i = 0; i < 10; i++) { journalImpl.appendDeleteRecord(i, false); } journalImpl.forceMoveNextFile(); journalImpl.checkReclaimStatus(); setupAndLoadJournal(JOURNAL_SIZE, 100, 2); Assert.assertEquals(0, records.size()); Assert.assertEquals(2, factory.listFiles("tt").size()); }
journalImpl.checkReclaimStatus();
journalImpl.checkReclaimStatus();
@Test public void testCommitWithMultipleFiles() throws Exception { final int JOURNAL_SIZE = 20000; setupAndLoadJournal(JOURNAL_SIZE, 100); Assert.assertEquals(0, records.size()); Assert.assertEquals(0, transactions.size()); for (int i = 0; i < 50; i++) { if (i == 10) { journalImpl.forceMoveNextFile(); } journalImpl.appendAddRecordTransactional(1L, i, (byte) 0, new SimpleEncoding(1, (byte) 15)); } journalImpl.appendCommitRecord(1L, false); for (int i = 0; i < 10; i++) { if (i == 5) { journalImpl.forceMoveNextFile(); } journalImpl.appendDeleteRecordTransactional(2L, i); } journalImpl.appendCommitRecord(2L, false); journalImpl.forceMoveNextFile(); journalImpl.checkReclaimStatus(); setupAndLoadJournal(JOURNAL_SIZE, 100); Assert.assertEquals(40, records.size()); }
journalImpl.checkReclaimStatus(); journalImpl.checkReclaimStatus(); journalImpl.checkReclaimStatus(); journalImpl.flush();
Assert.assertEquals(0, transactions.size()); journalImpl.checkReclaimStatus(); journalImpl.checkReclaimStatus();
@Test public void testPartialDelete() throws Exception { final int JOURNAL_SIZE = 10000; setupAndLoadJournal(JOURNAL_SIZE, 100); journalImpl.setAutoReclaim(false); journalImpl.checkReclaimStatus(); journalImpl.debugWait(); Assert.assertEquals(2, factory.listFiles("tt").size()); UnitTestLogger.LOGGER.debug("Initial:--> " + journalImpl.debug()); UnitTestLogger.LOGGER.debug("_______________________________"); for (int i = 0; i < 50; i++) { journalImpl.appendAddRecord(i, (byte) 1, new SimpleEncoding(1, (byte) 'x'), false); } journalImpl.forceMoveNextFile(); // as the request to a new file is asynchronous, we need to make sure the // async requests are done journalImpl.debugWait(); Assert.assertEquals(3, factory.listFiles("tt").size()); for (int i = 10; i < 50; i++) { journalImpl.appendDeleteRecord(i, false); } journalImpl.debugWait(); setupAndLoadJournal(JOURNAL_SIZE, 100); Assert.assertEquals(10, records.size()); Assert.assertEquals(3, factory.listFiles("tt").size()); }
journalImpl.checkReclaimStatus(); journalImpl.checkReclaimStatus();
@Test public void testPrepareAloneOnSeparatedFile() throws Exception { final int JOURNAL_SIZE = 20000; setupAndLoadJournal(JOURNAL_SIZE, 100); Assert.assertEquals(0, records.size()); Assert.assertEquals(0, transactions.size()); for (int i = 0; i < 10; i++) { journalImpl.appendAddRecordTransactional(1L, i, (byte) 0, new SimpleEncoding(1, (byte) 15)); } journalImpl.forceMoveNextFile(); SimpleEncoding xidEncoding = new SimpleEncoding(10, (byte) 'a'); journalImpl.appendPrepareRecord(1L, xidEncoding, false); journalImpl.appendCommitRecord(1L, false); for (int i = 0; i < 10; i++) { journalImpl.appendDeleteRecordTransactional(2L, i); } journalImpl.appendCommitRecord(2L, false); journalImpl.appendAddRecord(100L, (byte) 0, new SimpleEncoding(1, (byte) 10), false); // Add // anything // to // keep // holding // the // file journalImpl.forceMoveNextFile(); journalImpl.checkReclaimStatus(); setupAndLoadJournal(JOURNAL_SIZE, 100); Assert.assertEquals(1, records.size()); }
@Test public void testReclaimAfterRollabck() throws Exception { final int JOURNAL_SIZE = 2000; final int COUNT = 10; setupAndLoadJournal(JOURNAL_SIZE, 1); for (int i = 0; i < COUNT; i++) { journalImpl.appendAddRecordTransactional(1L, i, (byte) 0, new SimpleEncoding(1, (byte) 0)); journalImpl.forceMoveNextFile(); } journalImpl.appendRollbackRecord(1L, false); journalImpl.forceMoveNextFile(); // wait for the previous call to forceMoveNextFile() to complete assertTrue(Wait.waitFor(() -> factory.listFiles("tt").size() == COUNT + 3, 2000, 50)); journalImpl.checkReclaimStatus(); Assert.assertEquals(0, journalImpl.getDataFilesCount()); setupAndLoadJournal(JOURNAL_SIZE, 1); Assert.assertEquals(0, journalImpl.getDataFilesCount()); Assert.assertEquals(2, factory.listFiles("tt").size()); }
@Test public void testEmptyPrepare() throws Exception { final int JOURNAL_SIZE = 512 * 4; setupAndLoadJournal(JOURNAL_SIZE, 1); journalImpl.appendPrepareRecord(2L, new SimpleEncoding(10, (byte) 'j'), false); journalImpl.forceMoveNextFile(); journalImpl.appendAddRecord(1L, (byte) 0, new SimpleEncoding(10, (byte) 'k'), false); setupAndLoadJournal(JOURNAL_SIZE, 1); Assert.assertEquals(1, journalImpl.getDataFilesCount()); Assert.assertEquals(1, transactions.size()); journalImpl.forceMoveNextFile(); setupAndLoadJournal(JOURNAL_SIZE, 1); Assert.assertEquals(1, journalImpl.getDataFilesCount()); Assert.assertEquals(1, transactions.size()); journalImpl.appendCommitRecord(2L, false); journalImpl.appendDeleteRecord(1L, false); journalImpl.forceMoveNextFile(); setupAndLoadJournal(JOURNAL_SIZE, 0); journalImpl.forceMoveNextFile(); journalImpl.debugWait(); journalImpl.checkReclaimStatus(); Assert.assertEquals(0, transactions.size()); Assert.assertEquals(0, journalImpl.getDataFilesCount()); }