Search in sources :

Example 6 with Event

use of com.alibaba.otter.canal.store.model.Event in project canal by alibaba.

the class DummyEventStore method put.

public boolean put(List<Event> datas, long timeout, TimeUnit unit) throws InterruptedException, CanalStoreException {
    Event data = datas.get(0);
    System.out.println("time:" + data.getEntry().getHeader().getExecuteTime());
    return true;
}
Also used : Event(com.alibaba.otter.canal.store.model.Event)

Example 7 with Event

use of com.alibaba.otter.canal.store.model.Event in project canal by alibaba.

the class DummyEventStore method tryPut.

public boolean tryPut(List<Event> datas) throws CanalStoreException {
    Event data = datas.get(0);
    System.out.println("time:" + data.getEntry().getHeader().getExecuteTime());
    return true;
}
Also used : Event(com.alibaba.otter.canal.store.model.Event)

Example 8 with Event

use of com.alibaba.otter.canal.store.model.Event in project canal by alibaba.

the class MemoryEventStoreWithBuffer method doPut.

/**
     * 执行具体的put操作
     */
private void doPut(List<Event> data) {
    long current = putSequence.get();
    long end = current + data.size();
    // 先写数据,再更新对应的cursor,并发度高的情况,putSequence会被get请求可见,拿出了ringbuffer中的老的Entry值
    for (long next = current + 1; next <= end; next++) {
        entries[getIndex(next)] = data.get((int) (next - current - 1));
    }
    putSequence.set(end);
    // 记录一下gets memsize信息,方便快速检索
    if (batchMode.isMemSize()) {
        long size = 0;
        for (Event event : data) {
            size += calculateSize(event);
        }
        putMemSize.getAndAdd(size);
    }
    // tell other threads that store is not empty
    notEmpty.signal();
}
Also used : Event(com.alibaba.otter.canal.store.model.Event)

Example 9 with Event

use of com.alibaba.otter.canal.store.model.Event in project canal by alibaba.

the class MemoryEventStoreMemBatchTest method testAck.

@Test
public void testAck() {
    int bufferSize = 16;
    MemoryEventStoreWithBuffer eventStore = new MemoryEventStoreWithBuffer();
    eventStore.setBufferSize(bufferSize);
    eventStore.setBatchMode(BatchMode.MEMSIZE);
    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)

Example 10 with Event

use of com.alibaba.otter.canal.store.model.Event in project canal by alibaba.

the class MemoryEventStoreMemBatchTest method testOnePutOneGet.

@Test
public void testOnePutOneGet() {
    MemoryEventStoreWithBuffer eventStore = new MemoryEventStoreWithBuffer();
    eventStore.setBatchMode(BatchMode.MEMSIZE);
    eventStore.start();
    boolean result = eventStore.tryPut(buildEvent("1", 1L, 1L));
    Assert.assertTrue(result);
    Position position = eventStore.getFirstPosition();
    Events<Event> entrys = eventStore.tryGet(position, 1);
    Assert.assertTrue(entrys.getEvents().size() == 1);
    Assert.assertEquals(position, entrys.getPositionRange().getStart());
    Assert.assertEquals(position, entrys.getPositionRange().getEnd());
    eventStore.stop();
}
Also used : MemoryEventStoreWithBuffer(com.alibaba.otter.canal.store.memory.MemoryEventStoreWithBuffer) Position(com.alibaba.otter.canal.protocol.position.Position) Event(com.alibaba.otter.canal.store.model.Event) Test(org.junit.Test)

Aggregations

Event (com.alibaba.otter.canal.store.model.Event)26 Position (com.alibaba.otter.canal.protocol.position.Position)12 MemoryEventStoreWithBuffer (com.alibaba.otter.canal.store.memory.MemoryEventStoreWithBuffer)10 Test (org.junit.Test)10 Entry (com.alibaba.otter.canal.protocol.CanalEntry.Entry)5 ArrayList (java.util.ArrayList)5 CanalEntry (com.alibaba.otter.canal.protocol.CanalEntry)4 Date (java.util.Date)4 LogIdentity (com.alibaba.otter.canal.protocol.position.LogIdentity)3 LogPosition (com.alibaba.otter.canal.protocol.position.LogPosition)3 CanalStoreException (com.alibaba.otter.canal.store.CanalStoreException)3 SimpleDateFormat (java.text.SimpleDateFormat)3 ReentrantLock (java.util.concurrent.locks.ReentrantLock)3 CanalInstance (com.alibaba.otter.canal.instance.core.CanalInstance)2 Header (com.alibaba.otter.canal.protocol.CanalEntry.Header)2 Message (com.alibaba.otter.canal.protocol.Message)2 ExecutorService (java.util.concurrent.ExecutorService)2 RowChange (com.alibaba.otter.canal.protocol.CanalEntry.RowChange)1 RowData (com.alibaba.otter.canal.protocol.CanalEntry.RowData)1 PositionRange (com.alibaba.otter.canal.protocol.position.PositionRange)1