Browse Source

不管有没有filter,都应该对meta cache更新一下

jianhao.dai 8 years ago
parent
commit
34bcfbc3cb

+ 20 - 20
parse/src/main/java/com/alibaba/otter/canal/parse/inbound/mysql/dbsync/LogEventConvert.java

@@ -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) {