@Test public void testCompactFirstFileReclaimed() throws Exception { setup(2, 60 * 1024, false); final byte recordType = (byte) 0; journal = new JournalImpl(fileSize, minFiles, minFiles, 0, 0, fileFactory, filePrefix, fileExtension, maxAIO); journal.start(); journal.loadInternalOnly(); journal.appendAddRecord(1, recordType, "test".getBytes(), true); journal.forceMoveNextFile(); journal.appendUpdateRecord(1, recordType, "update".getBytes(), true); journal.appendDeleteRecord(1, true); journal.appendAddRecord(2, recordType, "finalRecord".getBytes(), true); for (int i = 10; i < 100; i++) { journal.appendAddRecord(i, recordType, ("tst" + i).getBytes(), true); journal.forceMoveNextFile(); journal.appendUpdateRecord(i, recordType, ("uptst" + i).getBytes(), true); journal.appendDeleteRecord(i, true); } journal.testCompact(); journal.stop(); List<RecordInfo> records1 = new ArrayList<>(); List<PreparedTransactionInfo> preparedRecords = new ArrayList<>(); journal.start(); journal.load(records1, preparedRecords, null); assertEquals(1, records1.size()); }
journal.forceMoveNextFile(); journal.forceMoveNextFile(); journal.forceMoveNextFile(); journal.forceMoveNextFile(); journal.checkReclaimStatus();
journal.forceMoveNextFile(); update(id); journal.forceMoveNextFile(); loadAndCheck(); journal.forceMoveNextFile(); journal.forceMoveNextFile();
@Test public void testExportImport() throws Exception { setup(10, 10 * 4096, true); createJournal(); startJournal(); load(); add(1, 2); journal.forceMoveNextFile(); delete(1, 2); add(3, 4); journal.forceMoveNextFile(); addTx(5, 6, 7, 8); journal.forceMoveNextFile(); addTx(5, 9); commit(5); journal.forceMoveNextFile(); deleteTx(10, 6, 7, 8, 9); commit(10); addTx(11, 11, 12); updateTx(11, 11, 12); commit(11); journal.forceMoveNextFile(); update(11, 12); stopJournal(); exportImportJournal(); createJournal(); startJournal(); loadAndCheck(); }
add(id); if (i > 0 && i % 100 == 0) { journal.forceMoveNextFile(); journal.forceMoveNextFile(); add(i); if (i % 10 == 0 && i > 0) { journal.forceMoveNextFile(); updateTx(transactionID, i); if (i % 10 == 0) { journal.forceMoveNextFile(); journal.forceMoveNextFile();
journal.forceMoveNextFile(); journal.forceMoveNextFile(); journal.forceMoveNextFile(); journal.forceMoveNextFile(); commit(tx1); finishCompact();
journal.forceMoveNextFile(); journal.forceMoveNextFile(); expectedSizes.add(0); journal.forceMoveNextFile(); loadAndCheck(); journal.forceMoveNextFile(); journal.forceMoveNextFile();
journal.forceMoveNextFile(); journal.forceMoveNextFile(); journal.forceMoveNextFile();
journal.forceMoveNextFile(); journal.forceMoveNextFile(); journal.forceMoveNextFile(); journal.forceMoveNextFile(); commit(tx1); finishCompact();
journal.forceMoveNextFile(); journal.forceMoveNextFile(); journal.forceMoveNextFile();
@Test public void testCompactSecondFileReclaimed() throws Exception { setup(2, 60 * 1024, false); createJournal(); startJournal(); load(); addTx(1, 1, 2, 3, 4); journal.forceMoveNextFile(); addTx(1, 5, 6, 7, 8); commit(1); journal.forceMoveNextFile(); journal.testCompact(); add(10); stopJournal(); startJournal(); loadAndCheck(); stopJournal(); }
@Test public void testCompactFirstFileWithPendingCommits7() throws Exception { setup(2, 60 * 1024, true); createJournal(); startJournal(); loadAndCheck(); long tx0 = idGenerator.generateID(); add(idGenerator.generateID()); long[] ids = new long[]{idGenerator.generateID(), idGenerator.generateID()}; addTx(tx0, ids[0]); addTx(tx0, ids[1]); journal.forceMoveNextFile(); commit(tx0); journal.forceMoveNextFile(); delete(ids[0]); delete(ids[1]); journal.forceMoveNextFile(); journal.testCompact(); stopJournal(); createJournal(); startJournal(); loadAndCheck(); }
journal.forceMoveNextFile(); delete(i); journal.forceMoveNextFile(); journal.forceMoveNextFile();
@Test public void testOrganicallyWithALimit() throws Exception { setup(2, 5, 10 * 1024, true, 50); createJournal(); journal.setAutoReclaim(true); startJournal(); load(); List<String> files1 = fileFactory.listFiles(fileExtension); Assert.assertEquals(2, files1.size()); Assert.assertEquals(0, journal.getDataFilesCount()); Assert.assertEquals(0, journal.getFreeFilesCount()); Assert.assertEquals(1, journal.getOpenedFilesCount()); Assert.assertEquals(0, journal.getIDMapSize()); // Fill all the files for (int i = 0; i < 200; i++) { add(i); journal.forceMoveNextFile(); } journal.checkReclaimStatus(); for (int i = 0; i < 200; i++) { delete(i); } journal.forceMoveNextFile(); journal.checkReclaimStatus(); files1 = fileFactory.listFiles(fileExtension); Assert.assertTrue("supposed to have less than 10 but it had " + files1.size() + " files created", files1.size() < 10); stopJournal(); }
journal.forceMoveNextFile(); journal.forceMoveNextFile(); journal.forceMoveNextFile(); journal.forceMoveNextFile();
@Test public void testDeleteWhileCleanup() throws Exception { setup(2, 60 * 1024, false); createJournal(); startJournal(); load(); for (int i = 0; i < 100; i++) { add(i); } journal.forceMoveNextFile(); for (int i = 10; i < 90; i++) { delete(i); } startCompact(); // Delete part of the live records while cleanup still working for (int i = 1; i < 5; i++) { delete(i); } finishCompact(); // Delete part of the live records after cleanup is done for (int i = 5; i < 10; i++) { delete(i); } assertEquals(9, journal.getCurrentFile().getNegCount(journal.getDataFiles()[0])); journal.forceMoveNextFile(); stopJournal(); createJournal(); startJournal(); loadAndCheck(); }
@Test public void testCompactAddAndUpdateFollowedByADelete4() throws Exception { setup(2, 60 * 1024, false); SimpleIDGenerator idGen = new SimpleIDGenerator(1000); createJournal(); startJournal(); load(); long consumerTX = idGen.generateID(); long firstID = idGen.generateID(); long appendTX = idGen.generateID(); long addedRecord = idGen.generateID(); startCompact(); addTx(consumerTX, firstID); addTx(appendTX, addedRecord); commit(appendTX); updateTx(consumerTX, addedRecord); commit(consumerTX); delete(addedRecord); finishCompact(); journal.forceMoveNextFile(); long newRecord = idGen.generateID(); add(newRecord); update(newRecord); journal.testCompact(); stopJournal(); createJournal(); startJournal(); loadAndCheck(); }
@Test public void testCompactAddAndUpdateFollowedByADelete2() throws Exception { setup(2, 60 * 1024, false); SimpleIDGenerator idGen = new SimpleIDGenerator(1000); createJournal(); journal.setAutoReclaim(false); startJournal(); load(); long firstID = idGen.generateID(); long consumerTX = idGen.generateID(); long appendTX = idGen.generateID(); long addedRecord = idGen.generateID(); addTx(consumerTX, firstID); startCompact(); addTx(appendTX, addedRecord); commit(appendTX); updateTx(consumerTX, addedRecord); commit(consumerTX); long deleteTXID = idGen.generateID(); deleteTx(deleteTXID, addedRecord); commit(deleteTXID); finishCompact(); journal.forceMoveNextFile(); journal.testCompact(); stopJournal(); createJournal(); startJournal(); loadAndCheck(); }