Browse Source

fixed issue #4152, TableMetaTSDB support canal.instance.filter.query.ddl=true

jianghang.loujh 3 years ago
parent
commit
9b9cfe4037

+ 8 - 6
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());