From f2b8d000f766f644f2332f45daabc84f158aae73 Mon Sep 17 00:00:00 2001 From: wuwo Date: Tue, 6 Nov 2018 16:58:50 +0800 Subject: [PATCH] skip tsdb snapshot apply if has not receive new ddl change from last snapshot time --- .../canal/parse/inbound/mysql/tsdb/DatabaseTableMeta.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/parse/src/main/java/com/alibaba/otter/canal/parse/inbound/mysql/tsdb/DatabaseTableMeta.java b/parse/src/main/java/com/alibaba/otter/canal/parse/inbound/mysql/tsdb/DatabaseTableMeta.java index 8896e2f5..7f4ba057 100644 --- a/parse/src/main/java/com/alibaba/otter/canal/parse/inbound/mysql/tsdb/DatabaseTableMeta.java +++ b/parse/src/main/java/com/alibaba/otter/canal/parse/inbound/mysql/tsdb/DatabaseTableMeta.java @@ -63,6 +63,7 @@ public class DatabaseTableMeta implements TableMetaTSDB { private CanalEventFilter filter; private CanalEventFilter blackFilter; private EntryPosition lastPosition; + private boolean hasNewDdl; private MetaHistoryDAO metaHistoryDAO; private MetaSnapshotDAO metaSnapshotDAO; private int snapshotInterval = 24; @@ -139,6 +140,7 @@ public class DatabaseTableMeta implements TableMetaTSDB { synchronized (memoryTableMeta) { if (memoryTableMeta.apply(position, schema, ddl, extra)) { this.lastPosition = position; + this.hasNewDdl = true; // 同步每次变更给远程做历史记录 return applyHistoryToDB(position, schema, ddl, extra); } else { @@ -270,10 +272,11 @@ public class DatabaseTableMeta implements TableMetaTSDB { MemoryTableMeta tmpMemoryTableMeta = new MemoryTableMeta(); Map schemaDdls = null; synchronized (memoryTableMeta) { - if (!init && position == null) { + if (!init && !hasNewDdl) { // 如果是持续构建,则识别一下是否有DDL变更过,如果没有就忽略了 return false; } + this.hasNewDdl = false; schemaDdls = memoryTableMeta.snapshot(); for (Map.Entry entry : schemaDdls.entrySet()) { tmpMemoryTableMeta.apply(position, entry.getKey(), entry.getValue(), null);