@Test public void testHugeFile() throws Exception { setupPartition(PARTITION_ID_2, 2); int numMsgs = 1000; int msgsPerLine = 10; RecoveryManager rm = (RecoveryManager) ManagementContainer.getInstance().getRecoveryManager(); rm.setMsgIdPerLine(msgsPerLine); String archiveName = "activerecovery.multilinetest.archive"; createActiveRecoveryTestFile(archiveName, msgsPerLine, numMsgs, PARTITION_ID_2); MutableInt chunkPartition = new MutableInt(-1); MutableLong chunkSeekChar = new MutableLong(-1); TimeQueryArchiveBuilder builder; do { resetPipeline(); builder = new TimeQueryArchiveBuilder( 1, 1, m_pipeline, m_quota, archiveName, chunkPartition.intValue(), chunkSeekChar.longValue()); builder.processTimeQuery(1L, 2L); parseChunkHint(builder.getChunkHint(), chunkPartition, chunkSeekChar); builder.finish(); } while (builder.hasMoreChunks()); assertEquals(numMsgs, m_processedIds.size()); }
@Test public void testMultiPartitionFiles() throws Exception { setupPartition(PARTITION_ID_1, 1); setupPartition(PARTITION_ID_2, 2); int numMsgs1 = 8; int numMsgs2 = 15; int msgsPerLine = 10; RecoveryManager rm = (RecoveryManager) ManagementContainer.getInstance().getRecoveryManager(); rm.setMsgIdPerLine(msgsPerLine); String archiveName = "activerecovery.multilinetest.archive"; createActiveRecoveryTestFile(archiveName, msgsPerLine, numMsgs1, PARTITION_ID_1); createActiveRecoveryTestFile(archiveName, msgsPerLine, numMsgs2, PARTITION_ID_2); TimeQueryArchiveBuilder builder = new TimeQueryArchiveBuilder(1, 1, m_pipeline, m_quota, archiveName, -1, -1); builder.processTimeQuery(1L, 2L); builder.finish(); assertTrue(builder.hasMoreChunks()); String chunkHint = builder.getChunkHint(); assertEquals(PARTITION_ID_2 + "_22", chunkHint); assertEquals(numMsgs1 + msgsPerLine, m_processedIds.size()); resetPipeline(); builder = new TimeQueryArchiveBuilder(1, 1, m_pipeline, m_quota, archiveName, PARTITION_ID_2, 22); builder.processTimeQuery(1L, 2L); builder.finish(); assertFalse(builder.hasMoreChunks()); assertEquals(numMsgs1 + numMsgs2, m_processedIds.size()); }
@Test public void testFullLineFile() throws Exception { setupPartition(PARTITION_ID_2, 2); int numMsgs = 10; int msgsPerLine = 10; RecoveryManager rm = (RecoveryManager) ManagementContainer.getInstance().getRecoveryManager(); rm.setMsgIdPerLine(msgsPerLine); String archiveName = "activerecovery.fulllinetest.archive"; createActiveRecoveryTestFile(archiveName, msgsPerLine, numMsgs, PARTITION_ID_2); TimeQueryArchiveBuilder builder = new TimeQueryArchiveBuilder(1, 1, m_pipeline, m_quota, archiveName, -1, -1); builder.processTimeQuery(1L, 2L); builder.finish(); assertFalse(builder.hasMoreChunks()); assertEquals(numMsgs, m_processedIds.size()); }
public File createActiveRecoveryTestFile( String archiveName, int msgsPerLine, int totalMsgs, int partitionID) throws Exception { RecoveryManager rm = (RecoveryManager) ManagementContainer.getInstance().getRecoveryManager(); File dir = rm.getMsgIdDirForArchive(1, archiveName, true); File file = rm.getMsgIdFile(dir, 1, partitionID); // write test file BufferedWriter msgIdWriter = new BufferedWriter(new FileWriter(file, false)); int userCount = 0; for (long msgId = 1; msgId <= totalMsgs; msgId++) { msgIdWriter.write(String.valueOf(msgId) + " "); userCount++; if (userCount % msgsPerLine == 0) { msgIdWriter.write('\n'); } } msgIdWriter.close(); assertTrue(file.exists()); m_testFiles.add(file); return file; }
@Test public void testLineLengthChangeSmallerFile() throws Exception { setupPartition(PARTITION_ID_2, 2); int numMsgs = 1000; int msgsPerLineStart = 100; int msgsPerLineEnd = 10; RecoveryManager rm = (RecoveryManager) ManagementContainer.getInstance().getRecoveryManager(); rm.setMsgIdPerLine(msgsPerLineStart); String archiveName = "activerecovery.multilinetest.archive"; createActiveRecoveryTestFile(archiveName, msgsPerLineStart, numMsgs, PARTITION_ID_2); // set to smaller line length after file was created rm.setMsgIdPerLine(msgsPerLineEnd); MutableInt chunkPartition = new MutableInt(-1); MutableLong chunkSeekChar = new MutableLong(-1); TimeQueryArchiveBuilder builder; int iterations = 0; do { resetPipeline(); builder = new TimeQueryArchiveBuilder( 1, 1, m_pipeline, m_quota, archiveName, chunkPartition.intValue(), chunkSeekChar.longValue()); builder.processTimeQuery(1L, 2L); parseChunkHint(builder.getChunkHint(), chunkPartition, chunkSeekChar); builder.finish(); iterations++; } while (builder.hasMoreChunks()); assertEquals( numMsgs / msgsPerLineStart, iterations); // we'll ask for 10, but we'll get 100 in each batch assertEquals(numMsgs, m_processedIds.size()); }