不管有没有filter,都应该对meta cache更新一下
This commit is contained in:
+20
-20
@@ -164,6 +164,26 @@ public class LogEventConvert extends AbstractCanalLifeCycle implements BinlogPar
|
||||
|| result.getType() == EventType.RENAME || result.getType() == EventType.CINDEX
|
||||
|| result.getType() == EventType.DINDEX) { // 针对DDL类型
|
||||
|
||||
// 更新下table meta cache
|
||||
if (tableMetaCache != null
|
||||
&& (result.getType() == EventType.ALTER || result.getType() == EventType.ERASE || result.getType() == EventType.RENAME)) {
|
||||
for (DdlResult renameResult = result; renameResult != null; renameResult = renameResult.getRenameTableResult()) {
|
||||
String schemaName0 = event.getDbName(); // 防止rename语句后产生schema变更带来影响
|
||||
if (StringUtils.isNotEmpty(renameResult.getSchemaName())) {
|
||||
schemaName0 = renameResult.getSchemaName();
|
||||
}
|
||||
|
||||
tableName = renameResult.getTableName();
|
||||
if (StringUtils.isNotEmpty(tableName)) {
|
||||
// 如果解析到了正确的表信息,则根据全名进行清除
|
||||
tableMetaCache.clearTableMeta(schemaName0, tableName);
|
||||
} else {
|
||||
// 如果无法解析正确的表信息,则根据schema进行清除
|
||||
tableMetaCache.clearTableMetaWithSchemaName(schemaName0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (filterQueryDdl) {
|
||||
return null;
|
||||
}
|
||||
@@ -214,26 +234,6 @@ public class LogEventConvert extends AbstractCanalLifeCycle implements BinlogPar
|
||||
return null;
|
||||
}
|
||||
|
||||
// 更新下table meta cache
|
||||
if (tableMetaCache != null
|
||||
&& (result.getType() == EventType.ALTER || result.getType() == EventType.ERASE || result.getType() == EventType.RENAME)) {
|
||||
for (DdlResult renameResult = result; renameResult != null; renameResult = renameResult.getRenameTableResult()) {
|
||||
String schemaName0 = event.getDbName(); // 防止rename语句后产生schema变更带来影响
|
||||
if (StringUtils.isNotEmpty(renameResult.getSchemaName())) {
|
||||
schemaName0 = renameResult.getSchemaName();
|
||||
}
|
||||
|
||||
tableName = renameResult.getTableName();
|
||||
if (StringUtils.isNotEmpty(tableName)) {
|
||||
// 如果解析到了正确的表信息,则根据全名进行清除
|
||||
tableMetaCache.clearTableMeta(schemaName0, tableName);
|
||||
} else {
|
||||
// 如果无法解析正确的表信息,则根据schema进行清除
|
||||
tableMetaCache.clearTableMetaWithSchemaName(schemaName0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Header header = createHeader(binlogFileName, event.getHeader(), schemaName, tableName, type);
|
||||
RowChange.Builder rowChangeBuider = RowChange.newBuilder();
|
||||
if (result.getType() != EventType.QUERY) {
|
||||
|
||||
Reference in New Issue
Block a user