Search in sources :

Example 16 with MemoryEventStoreWithBuffer

use of com.alibaba.otter.canal.store.memory.MemoryEventStoreWithBuffer in project canal by alibaba.

the class MemoryEventStorePutAndGetTest method testFullPut.

@Test
public void testFullPut() {
    int bufferSize = 16;
    MemoryEventStoreWithBuffer eventStore = new MemoryEventStoreWithBuffer();
    eventStore.setBufferSize(bufferSize);
    eventStore.start();
    for (int i = 0; i < bufferSize; i++) {
        boolean result = eventStore.tryPut(buildEvent("1", 1L, 1L + i));
        Assert.assertTrue(result);
    }
    boolean result = eventStore.tryPut(buildEvent("1", 1L, 1L + bufferSize));
    Assert.assertFalse(result);
    try {
        result = eventStore.put(buildEvent("1", 1L, 1L + bufferSize), 1000L, TimeUnit.MILLISECONDS);
    } catch (CanalStoreException e) {
        Assert.fail(e.getMessage());
    } catch (InterruptedException e) {
        Assert.fail(e.getMessage());
    }
    Assert.assertFalse(result);
    eventStore.stop();
}
Also used : MemoryEventStoreWithBuffer(com.alibaba.otter.canal.store.memory.MemoryEventStoreWithBuffer) CanalStoreException(com.alibaba.otter.canal.store.CanalStoreException) Test(org.junit.Test)

Example 17 with MemoryEventStoreWithBuffer

use of com.alibaba.otter.canal.store.memory.MemoryEventStoreWithBuffer in project canal by alibaba.

the class MemoryEventStoreRollbackAndAckTest method testAck.

@Test
public void testAck() {
    int bufferSize = 16;
    MemoryEventStoreWithBuffer eventStore = new MemoryEventStoreWithBuffer();
    eventStore.setBufferSize(bufferSize);
    eventStore.start();
    for (int i = 0; i < bufferSize / 2; i++) {
        boolean result = eventStore.tryPut(buildEvent("1", 1L, 1L + i));
        sleep(100L);
        Assert.assertTrue(result);
    }
    sleep(50L);
    Position first = eventStore.getFirstPosition();
    Position lastest = eventStore.getLatestPosition();
    Assert.assertEquals(first, CanalEventUtils.createPosition(buildEvent("1", 1L, 1L)));
    Assert.assertEquals(lastest, CanalEventUtils.createPosition(buildEvent("1", 1L, 1L + bufferSize / 2 - 1)));
    System.out.println("start get");
    Events<Event> entrys1 = eventStore.tryGet(first, bufferSize);
    System.out.println("first get size : " + entrys1.getEvents().size());
    eventStore.cleanUntil(entrys1.getPositionRange().getEnd());
    sleep(50L);
    // 继续造数据
    for (int i = bufferSize / 2; i < bufferSize; i++) {
        boolean result = eventStore.tryPut(buildEvent("1", 1L, 1L + i));
        sleep(100L);
        Assert.assertTrue(result);
    }
    Events<Event> entrys2 = eventStore.tryGet(entrys1.getPositionRange().getEnd(), bufferSize);
    System.out.println("second get size : " + entrys2.getEvents().size());
    eventStore.rollback();
    entrys2 = eventStore.tryGet(entrys1.getPositionRange().getEnd(), bufferSize);
    System.out.println("after rollback get size : " + entrys2.getEvents().size());
    first = eventStore.getFirstPosition();
    lastest = eventStore.getLatestPosition();
    List<Event> entrys = new ArrayList<Event>(entrys2.getEvents());
    Assert.assertEquals(first, entrys2.getPositionRange().getStart());
    Assert.assertEquals(lastest, entrys2.getPositionRange().getEnd());
    Assert.assertEquals(first, CanalEventUtils.createPosition(entrys.get(0)));
    Assert.assertEquals(lastest, CanalEventUtils.createPosition(entrys.get(entrys.size() - 1)));
    // 全部ack掉
    eventStore.cleanUntil(entrys2.getPositionRange().getEnd());
    // 最后就拿不到数据
    Events<Event> entrys3 = eventStore.tryGet(entrys1.getPositionRange().getEnd(), bufferSize);
    System.out.println("third get size : " + entrys3.getEvents().size());
    Assert.assertEquals(0, entrys3.getEvents().size());
    eventStore.stop();
}
Also used : MemoryEventStoreWithBuffer(com.alibaba.otter.canal.store.memory.MemoryEventStoreWithBuffer) Position(com.alibaba.otter.canal.protocol.position.Position) ArrayList(java.util.ArrayList) Event(com.alibaba.otter.canal.store.model.Event) Test(org.junit.Test)

Aggregations

MemoryEventStoreWithBuffer (com.alibaba.otter.canal.store.memory.MemoryEventStoreWithBuffer)17 Test (org.junit.Test)15 Position (com.alibaba.otter.canal.protocol.position.Position)10 Event (com.alibaba.otter.canal.store.model.Event)10 CanalStoreException (com.alibaba.otter.canal.store.CanalStoreException)7 ArrayList (java.util.ArrayList)4 ExecutorService (java.util.concurrent.ExecutorService)2 CanalException (com.alibaba.otter.canal.common.CanalException)1 StorageMode (com.alibaba.otter.canal.instance.manager.model.CanalParameter.StorageMode)1 StorageScavengeMode (com.alibaba.otter.canal.instance.manager.model.CanalParameter.StorageScavengeMode)1 AbstractCanalStoreScavenge (com.alibaba.otter.canal.store.AbstractCanalStoreScavenge)1 Before (org.junit.Before)1