Package com.alibaba.otter.canal.store.model

Examples of com.alibaba.otter.canal.store.model.Event


            range.setStart(CanalEventUtils.createPosition(entrys.get(0)));
            range.setEnd(CanalEventUtils.createPosition(entrys.get(result.getEvents().size() - 1)));
            // 记录一下是否存在可以被ack的点

            for (int i = entrys.size() - 1; i >= 0; i--) {
                Event event = entrys.get(i);
                if (CanalEntry.EntryType.TRANSACTIONBEGIN == event.getEntry().getEntryType()
                    || CanalEntry.EntryType.TRANSACTIONEND == event.getEntry().getEntryType()) {
                    // 将事务头/尾设置可被为ack的点
                    range.setAck(CanalEventUtils.createPosition(event));
                    break;
                }
            }
View Full Code Here


        lock.lock();
        try {
            long firstSeqeuence = ackSequence.get();
            if (firstSeqeuence == INIT_SQEUENCE && firstSeqeuence < putSequence.get()) {
                // 没有ack过数据
                Event event = entries[getIndex(firstSeqeuence + 1)]; // 最后一次ack为-1,需要移动到下一条,included = false
                return CanalEventUtils.createPosition(event, false);
            } else if (firstSeqeuence > INIT_SQEUENCE && firstSeqeuence < putSequence.get()) {
                // ack未追上put操作
                Event event = entries[getIndex(firstSeqeuence + 1)]; // 最后一次ack的位置数据 + 1
                return CanalEventUtils.createPosition(event, true);
            } else if (firstSeqeuence > INIT_SQEUENCE && firstSeqeuence == putSequence.get()) {
                // 已经追上,store中没有数据
                Event event = entries[getIndex(firstSeqeuence)]; // 最后一次ack的位置数据,和last为同一条,included = false
                return CanalEventUtils.createPosition(event, false);
            } else {
                // 没有任何数据
                return null;
            }
View Full Code Here

    private boolean sinkData(List<CanalEntry.Entry> entrys, InetSocketAddress remoteAddress)
                                                                                            throws InterruptedException {
        List<Event> events = new ArrayList<Event>();
        for (CanalEntry.Entry entry : entrys) {
            Event event = new Event(new LogIdentity(remoteAddress, -1L), entry);
            if (!doFilter(event)) {
                continue;
            }

            events.add(event);
View Full Code Here

        final ReentrantLock lock = this.lock;
        lock.lock();
        try {
            long latestSequence = putSequence.get();
            if (latestSequence > INIT_SQEUENCE && latestSequence != ackSequence.get()) {
                Event event = entries[(int) putSequence.get() & indexMask]; // 最后一次写入的数据,最后一条未消费的数据
                return CanalEventUtils.createPosition(event, true);
            } else if (latestSequence > INIT_SQEUENCE && latestSequence == ackSequence.get()) {
                // ack已经追上了put操作
                Event event = entries[(int) putSequence.get() & indexMask]; // 最后一次写入的数据,included = false
                return CanalEventUtils.createPosition(event, false);
            } else {
                // 没有任何数据
                return null;
            }
View Full Code Here

            long sequence = ackSequence.get();
            long maxSequence = getSequence.get();

            boolean hasMatch = false;
            for (long next = sequence + 1; next <= maxSequence; next++) {
                Event event = entries[getIndex(next)];
                boolean match = CanalEventUtils.checkPosition(event, (LogPosition) position);
                if (match) {// 找到对应的position,更新ack seq
                    hasMatch = true;
                    if (ackSequence.compareAndSet(sequence, next)) {// 避免并发ack
                        notFull.signal();
View Full Code Here

        lock.lock();
        try {
            long firstSeqeuence = ackSequence.get();
            if (firstSeqeuence == INIT_SQEUENCE && firstSeqeuence < putSequence.get()) {
                // 没有ack过数据
                Event event = entries[getIndex(firstSeqeuence + 1)]; // 最后一次ack为-1,需要移动到下一条,included = false
                return CanalEventUtils.createPosition(event, false);
            } else if (firstSeqeuence > INIT_SQEUENCE && firstSeqeuence < putSequence.get()) {
                // ack未追上put操作
                Event event = entries[getIndex(firstSeqeuence + 1)]; // 最后一次ack的位置数据 + 1
                return CanalEventUtils.createPosition(event, true);
            } else if (firstSeqeuence > INIT_SQEUENCE && firstSeqeuence == putSequence.get()) {
                // 已经追上,store中没有数据
                Event event = entries[getIndex(firstSeqeuence)]; // 最后一次ack的位置数据,和last为同一条,included = false
                return CanalEventUtils.createPosition(event, false);
            } else {
                // 没有任何数据
                return null;
            }
View Full Code Here

        final ReentrantLock lock = this.lock;
        lock.lock();
        try {
            long latestSequence = putSequence.get();
            if (latestSequence > INIT_SQEUENCE && latestSequence != ackSequence.get()) {
                Event event = entries[(int) putSequence.get() & indexMask]; // 最后一次写入的数据,最后一条未消费的数据
                return CanalEventUtils.createPosition(event, true);
            } else if (latestSequence > INIT_SQEUENCE && latestSequence == ackSequence.get()) {
                // ack已经追上了put操作
                Event event = entries[(int) putSequence.get() & indexMask]; // 最后一次写入的数据,included = false
                return CanalEventUtils.createPosition(event, false);
            } else {
                // 没有任何数据
                return null;
            }
View Full Code Here

            long maxSequence = getSequence.get();

            boolean hasMatch = false;
            long memsize = 0;
            for (long next = sequence + 1; next <= maxSequence; next++) {
                Event event = entries[getIndex(next)];
                memsize += calculateSize(event);
                boolean match = CanalEventUtils.checkPosition(event, (LogPosition) position);
                if (match) {// 找到对应的position,更新ack seq
                    hasMatch = true;
View Full Code Here

        } else {
            long memsize = 0;
            long maxMemSize = batchSize * bufferMemUnit;
            for (; memsize <= maxMemSize && next <= maxAbleSequence; next++) {
                // 永远保证可以取出第一条的记录,避免死锁
                Event event = entries[getIndex(next)];
                entrys.add(event);
                memsize += calculateSize(event);
                end = next;// 记录end位点
            }

            getMemSize.addAndGet(memsize);
        }

        PositionRange<LogPosition> range = new PositionRange<LogPosition>();
        result.setPositionRange(range);

        range.setStart(CanalEventUtils.createPosition(entrys.get(0)));
        range.setEnd(CanalEventUtils.createPosition(entrys.get(result.getEvents().size() - 1)));
        // 记录一下是否存在可以被ack的点

        for (int i = entrys.size() - 1; i >= 0; i--) {
            Event event = entrys.get(i);
            if (CanalEntry.EntryType.TRANSACTIONBEGIN == event.getEntry().getEntryType()
                || CanalEntry.EntryType.TRANSACTIONEND == event.getEntry().getEntryType()) {
                // 将事务头/尾设置可被为ack的点
                range.setAck(CanalEventUtils.createPosition(event));
                break;
            }
        }
View Full Code Here

        } catch (InterruptedException e) {
        }
    }

    private Event buildEvent() {
        Event event = new Event();
        event.setLogIdentity(new LogIdentity());

        Header.Builder headBuilder = Header.newBuilder();
        headBuilder.setEventLength(1000L);
        headBuilder.setExecuteTime(new Date().getTime());
        headBuilder.setLogfileName("mysql-bin.000001");
        headBuilder.setLogfileOffset(1000L);
        headBuilder.setSchemaName("test");
        headBuilder.setTableName("ljh");

        Entry.Builder entryBuilder = Entry.newBuilder();
        entryBuilder.setHeader(headBuilder.build());
        entryBuilder.setEntryType(EntryType.ROWDATA);

        RowChange.Builder rowChangeBuilder = RowChange.newBuilder();
        RowData.Builder rowDataBuilder = RowData.newBuilder();
        rowChangeBuilder.addRowDatas(rowDataBuilder.build());

        entryBuilder.setStoreValue(rowChangeBuilder.build().toByteString());
        Entry entry = entryBuilder.build();
        event.setEntry(entry);
        return event;
    }
View Full Code Here

TOP

Related Classes of com.alibaba.otter.canal.store.model.Event

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.