static List<LogRecord> getLargeLogRecordInstanceList(long firstTxId, int count) { List<LogRecord> logrecs = new ArrayList<LogRecord>(count); for (long i = 0; i < count; i++) { logrecs.add(getLargeLogRecordInstance(firstTxId + i)); } return logrecs; }
@Override public void run() { try { int txid = 1; for (long i = 0; i < numSegments; i++) { long start = txid; BKSyncLogWriter writer = (BKSyncLogWriter) dlm.startLogSegmentNonPartitioned(); for (long j = 1; j <= segmentSize; j++) { writer.write(DLMTestUtil.getLargeLogRecordInstance(txid++)); if ((i == 0) && (j == 1)) { latch.countDown(); } } writer.closeAndComplete(); Thread.sleep(100); } } catch (Exception exc) { if (!executor.isShutdown()) { currentThread.interrupt(); } } } }, 0, TimeUnit.MILLISECONDS);
BKSyncLogWriter writer = (BKSyncLogWriter)dlm.startLogSegmentNonPartitioned(); for (long j = 1; j <= segmentSize; j++) { writer.write(DLMTestUtil.getLargeLogRecordInstance(txid++)); if ((i == 0) && (j == 1)) { latch.countDown(); writer.write(DLMTestUtil.getLargeLogRecordInstance(txid, true)); writer.setReadyToFlush();
public static long generateLogSegmentNonPartitioned(DistributedLogManager dlm, int controlEntries, int userEntries, long startTxid, long txidStep) throws Exception { AsyncLogWriter out = dlm.startAsyncLogSegmentNonPartitioned(); long txid = startTxid; for (int i = 0; i < controlEntries; ++i) { LogRecord record = DLMTestUtil.getLargeLogRecordInstance(txid); record.setControl(); Await.result(out.write(record)); txid += txidStep; } for (int i = 0; i < userEntries; ++i) { LogRecord record = DLMTestUtil.getLargeLogRecordInstance(txid); Await.result(out.write(record)); txid += txidStep; } Utils.close(out); return txid - startTxid; }
@Test(timeout = 60000) public void testGetLastRecordControlRecord() throws Exception { String streamName = runtime.getMethodName(); BKDistributedLogManager bkdlm = (BKDistributedLogManager) createNewDLM(conf, streamName); AsyncLogWriter out = bkdlm.startAsyncLogSegmentNonPartitioned(); int txid = 1; Await.result(out.write(DLMTestUtil.getLargeLogRecordInstance(txid++, false))); Await.result(out.write(DLMTestUtil.getLargeLogRecordInstance(txid++, false))); Await.result(out.write(DLMTestUtil.getLargeLogRecordInstance(txid++, false))); Await.result(out.write(DLMTestUtil.getLargeLogRecordInstance(txid++, true))); Await.result(out.write(DLMTestUtil.getLargeLogRecordInstance(txid++, true))); Utils.close(out); Future<LogRecordWithDLSN> futureLogrec = getLastUserRecord(bkdlm, 0); LogRecordWithDLSN logrec = Await.result(futureLogrec); assertEquals(new DLSN(1,2,0), logrec.getDlsn()); bkdlm.close(); }
private void prepareLogSegmentsNonPartitioned(String name, int numSegments, int numEntriesPerSegment) throws Exception { DistributedLogManager dlm = createNewDLM(conf, name); long txid = 1; for (int sid = 0; sid < numSegments; ++sid) { LogWriter out = dlm.startLogSegmentNonPartitioned(); for (int eid = 0; eid < numEntriesPerSegment; ++eid) { LogRecord record = DLMTestUtil.getLargeLogRecordInstance(txid); out.write(record); ++txid; } out.close(); } dlm.close(); }
@Test(timeout = 60000) public void testGetLogRecordCountWithSingleInProgressLedger() throws Exception { String streamName = runtime.getMethodName(); BKDistributedLogManager bkdlm = (BKDistributedLogManager) createNewDLM(conf, streamName); AsyncLogWriter out = bkdlm.startAsyncLogSegmentNonPartitioned(); int txid = 1; Await.result(out.write(DLMTestUtil.getLargeLogRecordInstance(txid++, false))); Await.result(out.write(DLMTestUtil.getLargeLogRecordInstance(txid++, false))); Await.result(out.write(DLMTestUtil.getLargeLogRecordInstance(txid++, false))); BKLogReadHandler readHandler = bkdlm.createReadHandler(); List<LogSegmentMetadata> ledgerList = readHandler.getLedgerList(false, false, LogSegmentMetadata.COMPARATOR, false); assertEquals(1, ledgerList.size()); assertTrue(ledgerList.get(0).isInProgress()); Future<Long> count = null; count = readHandler.asyncGetLogRecordCount(new DLSN(1, 0, 0)); assertEquals(2, Await.result(count).longValue()); Utils.close(out); }
@Test(timeout = 60000) public void testGetLogRecordCountWithCompletedAndInprogressLedgers() throws Exception { String streamName = runtime.getMethodName(); BKDistributedLogManager bkdlm = (BKDistributedLogManager) createNewDLM(conf, streamName); long txid = 1; txid += DLMTestUtil.generateLogSegmentNonPartitioned(bkdlm, 0, 5, txid); AsyncLogWriter out = bkdlm.startAsyncLogSegmentNonPartitioned(); Await.result(out.write(DLMTestUtil.getLargeLogRecordInstance(txid++, false))); Await.result(out.write(DLMTestUtil.getLargeLogRecordInstance(txid++, false))); Await.result(out.write(DLMTestUtil.getLargeLogRecordInstance(txid++, false))); BKLogReadHandler readHandler = bkdlm.createReadHandler(); List<LogSegmentMetadata> ledgerList = readHandler.getLedgerList(false, false, LogSegmentMetadata.COMPARATOR, false); assertEquals(2, ledgerList.size()); assertFalse(ledgerList.get(0).isInProgress()); assertTrue(ledgerList.get(1).isInProgress()); Future<Long> count = null; count = readHandler.asyncGetLogRecordCount(new DLSN(1, 0, 0)); assertEquals(7, Await.result(count).longValue()); Utils.close(out); }
@Test(timeout = 60000) public void testGetLogRecordGreaterThanTxIdOnSameTxId() throws Exception { String streamName = runtime.getMethodName(); BKDistributedLogManager bkdlm = createNewDLM(conf, streamName); AsyncLogWriter out = bkdlm.startAsyncLogSegmentNonPartitioned(); long txid = 1L; for (int i = 0; i < 10; ++i) { LogRecord record = DLMTestUtil.getLargeLogRecordInstance(txid); Await.result(out.write(record)); txid += 1; } long txidToSearch = txid; for (int i = 0; i < 10; ++i) { LogRecord record = DLMTestUtil.getLargeLogRecordInstance(txidToSearch); Await.result(out.write(record)); } for (int i = 0; i < 10; ++i) { LogRecord record = DLMTestUtil.getLargeLogRecordInstance(txid); Await.result(out.write(record)); txid += 1; } Utils.close(out); Optional<LogRecordWithDLSN> result = FutureUtils.result(getLogRecordNotLessThanTxId(bkdlm, 0, txidToSearch)); assertTrue(result.isPresent()); assertEquals(10L, result.get().getDlsn().getEntryId()); }
for (long j = 0; j < 10; j++) { final long currentEntryId = j; final LogRecord record = DLMTestUtil.getLargeLogRecordInstance(txid++); Future<DLSN> dlsnFuture = writer.write(record); dlsnFuture.addEventListener(new WriteFutureEventListener(
for (long j = 0; j < numRecordsPerLogSegment; j++) { final long currentEntryId = j; final LogRecord record = DLMTestUtil.getLargeLogRecordInstance(txid++); Future<DLSN> dlsnFuture = writer.write(record); dlsnFuture.addEventListener(new WriteFutureEventListener(
writer.write(DLMTestUtil.getEmptyLogRecordInstance(txid++)); } else { writer.write(DLMTestUtil.getLargeLogRecordInstance(txid++));
for (long j = 0; j < 10; j++) { final long currentEntryId = j; final LogRecord record = DLMTestUtil.getLargeLogRecordInstance(txid++); Future<DLSN> dlsnFuture = writer.write(record); dlsnFuture.addEventListener(new WriteFutureEventListener(
for (long j = 0; j < numRecordsPerLogSegment; j++) { Thread.sleep(50); final LogRecord record = DLMTestUtil.getLargeLogRecordInstance(txid++); Future<DLSN> dlsnFuture = writer.write(record); dlsnFuture.addEventListener(new WriteFutureEventListener(
final LogRecord record = DLMTestUtil.getLargeLogRecordInstance(txid++); for (int s = 0; s < count; s++) { Future<DLSN> dlsnFuture = writers[s].write(record);
final LogRecord record = DLMTestUtil.getLargeLogRecordInstance(txid++); for (int s = 0; s < count; s++) { writers[s].write(record);
for (long j = 0; j < numRecordsPerLogSegment; j++) { final long currentEntryId = j; final LogRecord record = DLMTestUtil.getLargeLogRecordInstance(txid++); Future<DLSN> dlsnFuture = writer.write(record); dlsnFuture.addEventListener(new FutureEventListener<DLSN>() {
writer.write(DLMTestUtil.getEmptyLogRecordInstance(txid++)); } else { writer.write(DLMTestUtil.getLargeLogRecordInstance(txid++));
private void prepareLogSegments(String name, int numSegments, int numEntriesPerSegment) throws Exception { DLMTestUtil.BKLogPartitionWriteHandlerAndClients bkdlmAndClients = createNewBKDLM(conf, name); long txid = 1; for (int sid = 0; sid < numSegments; ++sid) { BKLogSegmentWriter out = bkdlmAndClients.getWriteHandler().startLogSegment(txid); for (int eid = 0; eid < numEntriesPerSegment; ++eid) { LogRecord record = DLMTestUtil.getLargeLogRecordInstance(txid); out.write(record); ++txid; } FutureUtils.result(out.asyncClose()); bkdlmAndClients.getWriteHandler().completeAndCloseLogSegment( out.getLogSegmentSequenceNumber(), out.getLogSegmentId(), 1 + sid * numEntriesPerSegment, (sid + 1) * numEntriesPerSegment, numEntriesPerSegment); } bkdlmAndClients.close(); }
assertEquals(0, dlsn.getSlotId()); for (long j = 1; j < 10; j++) { final LogRecord record = DLMTestUtil.getLargeLogRecordInstance(txid++); Await.result(writer.write(record));