Search in sources :

Example 1 with LogReader

use of com.twitter.distributedlog.LogReader in project distributedlog by twitter.

the class TestDistributedLogServer method testTruncateStream.

@Test(timeout = 60000)
public void testTruncateStream() throws Exception {
    String name = "dlserver-truncate-stream";
    dlClient.routingService.addHost(name, dlServer.getAddress());
    long txid = 1;
    Map<Long, DLSN> txid2DLSN = new HashMap<Long, DLSN>();
    for (int s = 1; s <= 3; s++) {
        for (long i = 1; i <= 10; i++) {
            long curTxId = txid++;
            logger.debug("Write entry {} to stream {}.", curTxId, name);
            DLSN dlsn = dlClient.dlClient.write(name, ByteBuffer.wrap(("" + curTxId).getBytes())).get();
            txid2DLSN.put(curTxId, dlsn);
        }
        if (s <= 2) {
            dlClient.dlClient.release(name).get();
        }
    }
    DLSN dlsnToDelete = txid2DLSN.get(21L);
    dlClient.dlClient.truncate(name, dlsnToDelete).get();
    DistributedLogManager readDLM = DLMTestUtil.createNewDLM(name, conf, getUri());
    LogReader reader = readDLM.getInputStream(1);
    int numRead = 0;
    int curTxId = 11;
    LogRecord r = reader.readNext(false);
    while (null != r) {
        int i = Integer.parseInt(new String(r.getPayload()));
        assertEquals(curTxId++, i);
        ++numRead;
        r = reader.readNext(false);
    }
    assertEquals(20, numRead);
    reader.close();
    readDLM.close();
}
Also used : DLSN(com.twitter.distributedlog.DLSN) LogRecordWithDLSN(com.twitter.distributedlog.LogRecordWithDLSN) HashMap(java.util.HashMap) LogRecord(com.twitter.distributedlog.LogRecord) DistributedLogManager(com.twitter.distributedlog.DistributedLogManager) AsyncLogReader(com.twitter.distributedlog.AsyncLogReader) LogReader(com.twitter.distributedlog.LogReader) Test(org.junit.Test)

Example 2 with LogReader

use of com.twitter.distributedlog.LogReader in project distributedlog by twitter.

the class TestDistributedLogServer method testDeleteStream.

@Test(timeout = 60000)
public void testDeleteStream() throws Exception {
    String name = "dlserver-delete-stream";
    dlClient.routingService.addHost(name, dlServer.getAddress());
    long txid = 101;
    for (long i = 1; i <= 10; i++) {
        long curTxId = txid++;
        logger.debug("Write entry {} to stream {}.", curTxId, name);
        dlClient.dlClient.write(name, ByteBuffer.wrap(("" + curTxId).getBytes())).get();
    }
    checkStream(1, 1, 1, name, dlServer.getAddress(), true, true);
    dlClient.dlClient.delete(name).get();
    checkStream(0, 0, 0, name, dlServer.getAddress(), false, false);
    Thread.sleep(1000);
    DistributedLogManager dlm101 = DLMTestUtil.createNewDLM(name, conf, getUri());
    AsyncLogReader reader101 = FutureUtils.result(dlm101.openAsyncLogReader(DLSN.InitialDLSN));
    try {
        FutureUtils.result(reader101.readNext());
        fail("Should fail with LogNotFoundException since the stream is deleted");
    } catch (LogNotFoundException lnfe) {
    // expected
    }
    FutureUtils.result(reader101.asyncClose());
    dlm101.close();
    txid = 201;
    for (long i = 1; i <= 10; i++) {
        long curTxId = txid++;
        logger.debug("Write entry {} to stream {}.", curTxId, name);
        DLSN dlsn = dlClient.dlClient.write(name, ByteBuffer.wrap(("" + curTxId).getBytes())).get();
    }
    Thread.sleep(1000);
    DistributedLogManager dlm201 = DLMTestUtil.createNewDLM(name, conf, getUri());
    LogReader reader201 = dlm201.getInputStream(1);
    int numRead = 0;
    int curTxId = 201;
    LogRecord r = reader201.readNext(false);
    while (null != r) {
        int i = Integer.parseInt(new String(r.getPayload()));
        assertEquals(curTxId++, i);
        ++numRead;
        r = reader201.readNext(false);
    }
    assertEquals(10, numRead);
    reader201.close();
    dlm201.close();
}
Also used : DLSN(com.twitter.distributedlog.DLSN) LogRecordWithDLSN(com.twitter.distributedlog.LogRecordWithDLSN) AsyncLogReader(com.twitter.distributedlog.AsyncLogReader) LogRecord(com.twitter.distributedlog.LogRecord) DistributedLogManager(com.twitter.distributedlog.DistributedLogManager) AsyncLogReader(com.twitter.distributedlog.AsyncLogReader) LogReader(com.twitter.distributedlog.LogReader) LogNotFoundException(com.twitter.distributedlog.exceptions.LogNotFoundException) Test(org.junit.Test)

Example 3 with LogReader

use of com.twitter.distributedlog.LogReader in project distributedlog by twitter.

the class TestDistributedLogServer method testFenceWrite.

@Test(timeout = 60000)
public void testFenceWrite() throws Exception {
    String name = "dlserver-fence-write";
    dlClient.routingService.addHost(name, dlServer.getAddress());
    for (long i = 1; i <= 10; i++) {
        logger.debug("Write entry {} to stream {}.", i, name);
        dlClient.dlClient.write(name, ByteBuffer.wrap(("" + i).getBytes())).get();
    }
    Thread.sleep(1000);
    logger.info("Fencing stream {}.", name);
    DLMTestUtil.fenceStream(conf, getUri(), name);
    logger.info("Fenced stream {}.", name);
    for (long i = 11; i <= 20; i++) {
        logger.debug("Write entry {} to stream {}.", i, name);
        dlClient.dlClient.write(name, ByteBuffer.wrap(("" + i).getBytes())).get();
    }
    DistributedLogManager dlm = DLMTestUtil.createNewDLM(name, conf, getUri());
    LogReader reader = dlm.getInputStream(1);
    int numRead = 0;
    LogRecord r = reader.readNext(false);
    while (null != r) {
        int i = Integer.parseInt(new String(r.getPayload()));
        assertEquals(numRead + 1, i);
        ++numRead;
        r = reader.readNext(false);
    }
    assertEquals(20, numRead);
    reader.close();
    dlm.close();
}
Also used : LogRecord(com.twitter.distributedlog.LogRecord) DistributedLogManager(com.twitter.distributedlog.DistributedLogManager) AsyncLogReader(com.twitter.distributedlog.AsyncLogReader) LogReader(com.twitter.distributedlog.LogReader) Test(org.junit.Test)

Example 4 with LogReader

use of com.twitter.distributedlog.LogReader in project distributedlog by twitter.

the class TestDistributedLogServer method testBasicWrite.

/**
     * {@link https://issues.apache.org/jira/browse/DL-27}
     */
@DistributedLogAnnotations.FlakyTest
@Ignore
@Test(timeout = 60000)
public void testBasicWrite() throws Exception {
    String name = "dlserver-basic-write";
    dlClient.routingService.addHost(name, dlServer.getAddress());
    for (long i = 1; i <= 10; i++) {
        logger.debug("Write entry {} to stream {}.", i, name);
        Await.result(dlClient.dlClient.write(name, ByteBuffer.wrap(("" + i).getBytes())));
    }
    HeartbeatOptions hbOptions = new HeartbeatOptions();
    hbOptions.setSendHeartBeatToReader(true);
    // make sure the first log segment of each stream created
    FutureUtils.result(dlClient.dlClient.heartbeat(name));
    DistributedLogManager dlm = DLMTestUtil.createNewDLM(name, conf, getUri());
    LogReader reader = dlm.getInputStream(1);
    int numRead = 0;
    LogRecord r = reader.readNext(false);
    while (null != r) {
        int i = Integer.parseInt(new String(r.getPayload()));
        assertEquals(numRead + 1, i);
        ++numRead;
        r = reader.readNext(false);
    }
    assertEquals(10, numRead);
    reader.close();
    dlm.close();
}
Also used : LogRecord(com.twitter.distributedlog.LogRecord) HeartbeatOptions(com.twitter.distributedlog.thrift.service.HeartbeatOptions) DistributedLogManager(com.twitter.distributedlog.DistributedLogManager) AsyncLogReader(com.twitter.distributedlog.AsyncLogReader) LogReader(com.twitter.distributedlog.LogReader) Ignore(org.junit.Ignore) Test(org.junit.Test)

Example 5 with LogReader

use of com.twitter.distributedlog.LogReader in project distributedlog by twitter.

the class TestDistributedLogTool method testToolTruncateStream.

@Test(timeout = 60000)
public void testToolTruncateStream() throws Exception {
    DistributedLogManager dlm = DLMTestUtil.createNewDLM("testToolTruncateStream", conf, defaultUri);
    DLMTestUtil.generateCompletedLogSegments(dlm, conf, 3, 1000);
    DLSN dlsn = new DLSN(2, 1, 0);
    TruncateStreamCommand cmd = new TruncateStreamCommand();
    cmd.setDlsn(dlsn);
    cmd.setUri(defaultUri);
    cmd.setStreamName("testToolTruncateStream");
    cmd.setForce(true);
    assertEquals(0, cmd.runCmd());
    LogReader reader = dlm.getInputStream(0);
    LogRecordWithDLSN record = reader.readNext(false);
    assertEquals(dlsn, record.getDlsn());
    reader.close();
    dlm.close();
}
Also used : LogRecordWithDLSN(com.twitter.distributedlog.LogRecordWithDLSN) DLSN(com.twitter.distributedlog.DLSN) LogRecordWithDLSN(com.twitter.distributedlog.LogRecordWithDLSN) DistributedLogManager(com.twitter.distributedlog.DistributedLogManager) LogReader(com.twitter.distributedlog.LogReader) Test(org.junit.Test)

Aggregations

DistributedLogManager (com.twitter.distributedlog.DistributedLogManager)8 LogReader (com.twitter.distributedlog.LogReader)8 AsyncLogReader (com.twitter.distributedlog.AsyncLogReader)6 LogRecord (com.twitter.distributedlog.LogRecord)6 Test (org.junit.Test)6 DLSN (com.twitter.distributedlog.DLSN)5 LogRecordWithDLSN (com.twitter.distributedlog.LogRecordWithDLSN)5 Stopwatch (com.google.common.base.Stopwatch)1 LogNotFoundException (com.twitter.distributedlog.exceptions.LogNotFoundException)1 HeartbeatOptions (com.twitter.distributedlog.thrift.service.HeartbeatOptions)1 Future (com.twitter.util.Future)1 IOException (java.io.IOException)1 ByteBuffer (java.nio.ByteBuffer)1 ArrayList (java.util.ArrayList)1 HashMap (java.util.HashMap)1 Counter (org.apache.bookkeeper.stats.Counter)1 OpStatsLogger (org.apache.bookkeeper.stats.OpStatsLogger)1 Ignore (org.junit.Ignore)1