|
@@ -298,13 +298,24 @@ public class DatabaseTableMeta implements TableMetaTSDB {
|
|
|
createDDL = packet.getFieldValues().get(1);
|
|
|
tableMetaFromDB.setFields(TableMetaCache.parseTableMeta(schema, table, packet));
|
|
|
}
|
|
|
- } catch (IOException e) {
|
|
|
- if (e.getMessage().contains("errorNumber=1146")) {
|
|
|
- logger.error("table not exist in db , pls check :" + getFullName(schema, table) + " , mem : "
|
|
|
- + tableMetaFromMem);
|
|
|
- return false;
|
|
|
+ } catch (Throwable e) {
|
|
|
+ try {
|
|
|
+ // retry for broke pipe, see:
|
|
|
+ // https://github.com/alibaba/canal/issues/724
|
|
|
+ connection.reconnect();
|
|
|
+ ResultSetPacket packet = connection.query("show create table " + getFullName(schema, table));
|
|
|
+ if (packet.getFieldValues().size() > 1) {
|
|
|
+ createDDL = packet.getFieldValues().get(1);
|
|
|
+ tableMetaFromDB.setFields(TableMetaCache.parseTableMeta(schema, table, packet));
|
|
|
+ }
|
|
|
+ } catch (IOException e1) {
|
|
|
+ if (e.getMessage().contains("errorNumber=1146")) {
|
|
|
+ logger.error("table not exist in db , pls check :" + getFullName(schema, table) + " , mem : "
|
|
|
+ + tableMetaFromMem);
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ throw new CanalParseException(e);
|
|
|
}
|
|
|
- throw new CanalParseException(e);
|
|
|
}
|
|
|
|
|
|
boolean result = compareTableMeta(tableMetaFromMem, tableMetaFromDB);
|