use of org.apache.ignite.internal.processors.cache.persistence.wal.FileWriteAheadLogManager.WAL_SEGMENT_COMPACTED_OR_RAW_FILE_FILTER in project ignite by apache.
the class IgnitePdsStartWIthEmptyArchive method test.
/**
* @throws Exception If failed.
*/
@Test
public void test() throws Exception {
IgniteEx ig = startGrid(0);
ig.cluster().active(true);
FileWriteAheadLogManager walMgr = (FileWriteAheadLogManager) ig.context().cache().context().wal();
// Populate data for generate WAL archive segments.
try (IgniteDataStreamer<Integer, byte[]> st = ig.dataStreamer(DEFAULT_CACHE_NAME)) {
int entries = 1000;
for (int i = 0; i < entries; i++) st.addData(i, new byte[1024 * 1024]);
}
File archiveDir = U.field(walMgr, "walArchiveDir");
stopGrid(0, false);
SegmentAware beforeSaw = U.field(walMgr, "segmentAware");
long beforeLastArchivedAbsoluteIdx = beforeSaw.lastArchivedAbsoluteIndex();
FileWriteHandle fhBefore = U.field(walMgr, "currHnd");
long idxBefore = fhBefore.getSegmentId();
File[] files = archiveDir.listFiles(WAL_SEGMENT_COMPACTED_OR_RAW_FILE_FILTER);
Arrays.sort(files);
// Cleanup archive directory.
for (File f : files) {
if (f.delete())
log.info("File " + f.getAbsolutePath() + " deleted");
}
Assert.assertEquals(0, archiveDir.listFiles().length);
evts.clear();
// Restart grid again after archive was removed.
ig = startGrid(0);
walMgr = (FileWriteAheadLogManager) ig.context().cache().context().wal();
SegmentAware afterSaw = U.field(walMgr, "segmentAware");
long afterLastArchivedAbsoluteIndex = afterSaw.lastArchivedAbsoluteIndex();
int segments = ig.configuration().getDataStorageConfiguration().getWalSegments();
Assert.assertTrue("lastArchivedBeforeIdx=" + beforeLastArchivedAbsoluteIdx + ", lastArchivedAfterIdx=" + afterLastArchivedAbsoluteIndex + ", segments=" + segments, afterLastArchivedAbsoluteIndex >= (beforeLastArchivedAbsoluteIdx - segments));
ig.cluster().active(true);
FileWriteHandle fhAfter = U.field(walMgr, "currHnd");
Assert.assertNotNull(fhAfter);
long idxAfter = fhAfter.getSegmentId();
Assert.assertEquals(idxBefore, idxAfter);
Assert.assertTrue(idxAfter >= beforeLastArchivedAbsoluteIdx);
log.info("currentIdx=" + idxAfter + ", lastArchivedBeforeIdx=" + beforeLastArchivedAbsoluteIdx + ", lastArchivedAfteridx=" + afterLastArchivedAbsoluteIndex + ", segments=" + segments);
// One is a last archived, secod is a current write segment.
final long awaitAchviedSegments = idxAfter - afterLastArchivedAbsoluteIndex - 2;
// Await all current available semgment will be archived.
assertTrue(GridTestUtils.waitForCondition(new GridAbsPredicate() {
@Override
public boolean apply() {
long cut = evts.keySet().stream().filter(e -> e > afterLastArchivedAbsoluteIndex).count();
return cut >= awaitAchviedSegments;
}
}, 10_000));
}
Aggregations