From 13bf7c85a037a9e24d26c8f5c0aa007441fd9ae4 Mon Sep 17 00:00:00 2001 From: agapple Date: Wed, 17 Dec 2014 20:57:12 +0800 Subject: [PATCH] fixed search by time --- .../canal/parse/inbound/mysql/MysqlEventParser.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/parse/src/main/java/com/alibaba/otter/canal/parse/inbound/mysql/MysqlEventParser.java b/parse/src/main/java/com/alibaba/otter/canal/parse/inbound/mysql/MysqlEventParser.java index d81d5ded..787b72c9 100644 --- a/parse/src/main/java/com/alibaba/otter/canal/parse/inbound/mysql/MysqlEventParser.java +++ b/parse/src/main/java/com/alibaba/otter/canal/parse/inbound/mysql/MysqlEventParser.java @@ -615,10 +615,11 @@ public class MysqlEventParser extends AbstractMysqlEventParser implements CanalE Long logfileoffset = entry.getHeader().getLogfileOffset(); Long logposTimestamp = entry.getHeader().getExecuteTime(); - if (CanalEntry.EntryType.TRANSACTIONBEGIN.equals(entry.getEntryType())) { + if (CanalEntry.EntryType.TRANSACTIONBEGIN.equals(entry.getEntryType()) + || CanalEntry.EntryType.TRANSACTIONEND.equals(entry.getEntryType())) { logger.debug("compare exit condition:{},{},{}, startTimestamp={}...", new Object[] { logfilename, logfileoffset, logposTimestamp, startTimestamp }); - // 寻找第一条记录时间戳,如果最小的一条记录都不满足条件,可直接退出 + // 事务头和尾寻找第一条记录时间戳,如果最小的一条记录都不满足条件,可直接退出 if (logposTimestamp >= startTimestamp) { return false; } @@ -639,6 +640,12 @@ public class MysqlEventParser extends AbstractMysqlEventParser implements CanalE logger.debug("set {} to be pending start position before finding another proper one...", entryPosition); logPosition.setPostion(entryPosition); + } else if (CanalEntry.EntryType.TRANSACTIONBEGIN.equals(entry.getEntryType())) { + // 当前事务开始位点 + entryPosition = new EntryPosition(logfilename, logfileoffset, logposTimestamp); + logger.debug("set {} to be pending start position before finding another proper one...", + entryPosition); + logPosition.setPostion(entryPosition); } lastPosition = buildLastPosition(entry);