From 9b9cfe4037885dafde7b7139523419d098256664 Mon Sep 17 00:00:00 2001 From: "jianghang.loujh" Date: Mon, 16 May 2022 17:25:43 +0800 Subject: [PATCH] fixed issue #4152, TableMetaTSDB support canal.instance.filter.query.ddl=true --- .../inbound/mysql/dbsync/LogEventConvert.java | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/parse/src/main/java/com/alibaba/otter/canal/parse/inbound/mysql/dbsync/LogEventConvert.java b/parse/src/main/java/com/alibaba/otter/canal/parse/inbound/mysql/dbsync/LogEventConvert.java index ff016465..8636acfd 100644 --- a/parse/src/main/java/com/alibaba/otter/canal/parse/inbound/mysql/dbsync/LogEventConvert.java +++ b/parse/src/main/java/com/alibaba/otter/canal/parse/inbound/mysql/dbsync/LogEventConvert.java @@ -286,12 +286,18 @@ public class LogEventConvert extends AbstractCanalLifeCycle implements BinlogPar boolean isDml = (type == EventType.INSERT || type == EventType.UPDATE || type == EventType.DELETE); + // filterQueryDdl=true的情况下,也得更新tablemeta if (!isSeek && !isDml) { // 使用新的表结构元数据管理方式 EntryPosition position = createPosition(event.getHeader()); tableMetaCache.apply(position, event.getDbName(), queryString, null); } + if (filterQueryDdl) { + // 全部DDL过滤,那就忽略事件生成 + return null; + } + Header header = createHeader(event.getHeader(), schemaName, tableName, type); RowChange.Builder rowChangeBuilder = RowChange.newBuilder(); rowChangeBuilder.setIsDdl(!isDml); @@ -335,12 +341,8 @@ public class LogEventConvert extends AbstractCanalLifeCycle implements BinlogPar || result.getType() == EventType.RENAME || result.getType() == EventType.CINDEX || result.getType() == EventType.DINDEX) { // 针对DDL类型 - if (filterQueryDdl) { - return true; - } - - if (StringUtils.isEmpty(tableName) - || (result.getType() == EventType.RENAME && StringUtils.isEmpty(result.getOriTableName()))) { + if (!filterQueryDdl && (StringUtils.isEmpty(tableName) + || (result.getType() == EventType.RENAME && StringUtils.isEmpty(result.getOriTableName())))) { // 如果解析不出tableName,记录一下日志,方便bugfix,目前直接抛出异常,中断解析 throw new CanalParseException("SimpleDdlParser process query failed. pls submit issue with this queryString: " + queryString + " , and DdlResult: " + result.toString());