private void dumpRecord(LogRecord record) { System.out.println("------------------------------------------------"); if (record instanceof LogRecordWithDLSN) { System.out.println("Record (txn = " + record.getTransactionId() + ", bytes = " + record.getPayload().length + ", dlsn = " + ((LogRecordWithDLSN) record).getDlsn() + ", sequence id = " + ((LogRecordWithDLSN) record).getSequenceId() + ")"); } else { System.out.println("Record (txn = " + record.getTransactionId() + ", bytes = " + record.getPayload().length + ")"); } System.out.println(""); if (skipPayload) { return; } if (printHex) { System.out.println(Hex.encodeHexString(record.getPayload())); } else { System.out.println(new String(record.getPayload(), UTF_8)); } }
private static void transform(final AsyncLogWriter writer, LogRecordWithDLSN record, Transformer<byte[], byte[]> replicationTransformer, final CountDownLatch keepAliveLatch) throws Exception { DLSN srcDLSN = record.getDlsn(); byte[] payload = record.getPayload(); byte[] transformedPayload = replicationTransformer.transform(payload); TransformedRecord transformedRecord = new TransformedRecord(ByteBuffer.wrap(transformedPayload)); transformedRecord.setSrcDlsn(srcDLSN.serializeBytes()); ByteArrayOutputStream baos = new ByteArrayOutputStream(4096); transformedRecord.write(protocolFactory.getProtocol(new TIOStreamTransport(baos))); byte[] data = baos.toByteArray(); writer.write(new LogRecord(record.getSequenceId(), data)) .addEventListener(new FutureEventListener<DLSN>() { @Override public void onFailure(Throwable cause) { System.err.println("Encountered error on writing records to stream " + writer.getStreamName()); cause.printStackTrace(System.err); keepAliveLatch.countDown(); } @Override public void onSuccess(DLSN dlsn) { System.out.println("Write transformed record " + dlsn); } }); }
try { if (monotonic) { assertEquals(startSequenceId, value.getSequenceId()); } else { assertTrue(value.getSequenceId() < 0); assertTrue(value.getSequenceId() > startSequenceId); reader, value.getDlsn().getNextDLSN(), monotonic ? value.getSequenceId() + 1 : value.getSequenceId(), monotonic, syncLatch,
DLMTestUtil.verifyLogRecord(record); assertTrue(lastTxId < record.getTransactionId()); assertEquals(record.getTransactionId() - 1, record.getSequenceId()); lastTxId = record.getTransactionId(); numTrans++;
for (LogRecordWithDLSN record : readRecords) { if (record.getDlsn().getLogSegmentSequenceNo() <= 4) { assertTrue(record.getSequenceId() < 0); assertTrue(record.getSequenceId() > sequenceId); sequenceId = record.getSequenceId(); } else if (record.getDlsn().getLogSegmentSequenceNo() <= 7) { if (sequenceId < 0L) { sequenceId = 0L; assertEquals(sequenceId, record.getSequenceId()); ++sequenceId; } else if (record.getDlsn().getLogSegmentSequenceNo() >= 9) { sequenceId = Long.MIN_VALUE; assertTrue(record.getSequenceId() < 0); assertTrue(record.getSequenceId() > sequenceId); sequenceId = record.getSequenceId();
@Test(timeout = 60000) public void testReaderLockIfLockPathDoesntExist() throws Exception { final String name = runtime.getMethodName(); DistributedLogManager dlm = createNewDLM(conf, name); BKAsyncLogWriter writer = (BKAsyncLogWriter)(dlm.startAsyncLogSegmentNonPartitioned()); writer.write(DLMTestUtil.getLogRecordInstance(1L)); writer.closeAndComplete(); Future<AsyncLogReader> futureReader1 = dlm.getAsyncLogReaderWithLock(DLSN.InitialDLSN); BKAsyncLogReaderDLSN reader1 = (BKAsyncLogReaderDLSN) Await.result(futureReader1); LogRecordWithDLSN record = Await.result(reader1.readNext()); assertEquals(1L, record.getTransactionId()); assertEquals(0L, record.getSequenceId()); DLMTestUtil.verifyLogRecord(record); String readLockPath = reader1.bkLedgerManager.getReadLockPath(); Utils.close(reader1); // simulate a old stream created without readlock path writer.bkDistributedLogManager.getWriterZKC().get().delete(readLockPath, -1); Future<AsyncLogReader> futureReader2 = dlm.getAsyncLogReaderWithLock(DLSN.InitialDLSN); AsyncLogReader reader2 = Await.result(futureReader2); record = Await.result(reader2.readNext()); assertEquals(1L, record.getTransactionId()); assertEquals(0L, record.getSequenceId()); DLMTestUtil.verifyLogRecord(record); }
DLMTestUtil.verifyLogRecord(record); assertEquals(expectedTxID++, record.getTransactionId()); assertEquals(record.getTransactionId() - 1, record.getSequenceId());
while (null != record) { Assert.assertEquals(expectedTxid, record.getTransactionId()); Assert.assertEquals(expectedTxid, record.getSequenceId()); Assert.assertEquals(new DLSN(1L, 0L, expectedTxid), record.getDlsn()); ++numReads;
++numTxns; assertEquals(numTxns, record.getTransactionId()); assertEquals(record.getTransactionId() - 1, record.getSequenceId()); ++startTxID; assertEquals(startTxID, record.getTransactionId()); assertEquals(record.getTransactionId() - 1L, record.getSequenceId());
DLMTestUtil.verifyLogRecord(record); assertEquals(i, record.getTransactionId()); assertEquals(record.getTransactionId() - 1, record.getSequenceId());
private static void transform(final AsyncLogWriter writer, LogRecordWithDLSN record, Transformer<byte[], byte[]> replicationTransformer, final CountDownLatch keepAliveLatch) throws Exception { DLSN srcDLSN = record.getDlsn(); byte[] payload = record.getPayload(); byte[] transformedPayload = replicationTransformer.transform(payload); TransformedRecord transformedRecord = new TransformedRecord(ByteBuffer.wrap(transformedPayload)); transformedRecord.setSrcDlsn(srcDLSN.serializeBytes()); ByteArrayOutputStream baos = new ByteArrayOutputStream(4096); transformedRecord.write(protocolFactory.getProtocol(new TIOStreamTransport(baos))); byte[] data = baos.toByteArray(); writer.write(new LogRecord(record.getSequenceId(), data)) .addEventListener(new FutureEventListener<DLSN>() { @Override public void onFailure(Throwable cause) { System.err.println("Encountered error on writing records to stream " + writer.getStreamName()); cause.printStackTrace(System.err); keepAliveLatch.countDown(); } @Override public void onSuccess(DLSN dlsn) { System.out.println("Write transformed record " + dlsn); } }); }