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

This commit is contained in:
jianghang.loujh
2022-05-16 17:25:43 +08:00
parent ee51f338e0
commit 9b9cfe4037
@@ -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());