开发者社区> 问答> 正文

当前版本otter4.2.14使用的是canal1.0.23,其中有bug

private void loadBinlogChecksum() { ResultSetPacket rs = null; try { rs = query("select @master_binlog_checksum"); } catch (IOException e) { throw new CanalParseException(e); }

List columnValues = rs.getFieldValues();
if ((columnValues != null) && (columnValues.size() >= 1) && (((String)columnValues.get(0)).toUpperCase().equals("CRC32")))
  this.binlogChecksum = 1;
else
  this.binlogChecksum = 0;

}

以上代码是canal1.0.23中的,对于低版本的Mysql,比如mysql5.5,select @master_binlog_checksum这一句查询出的结果如下:

mysql> select @master_binlog_checksum; +-------------------------+ | @master_binlog_checksum | +-------------------------+ | NULL | +-------------------------+ 1 row in set (0.00 sec) 这样在判断的时候回出现空指针的错误,具体表现在 if ((columnValues != null) && (columnValues.size() >= 1) && (((String)columnValues.get(0)).toUpperCase().equals("CRC32")))这一行,并且会导致一直找不到位点。

而最新版本的github上的代码,已经修改为如下方式:

/** * 获取一下binlog image格式 */ private void loadBinlogImage() { ResultSetPacket rs = null; try { rs = query("show variables like 'binlog_row_image'"); } catch (IOException e) { throw new CanalParseException(e); }

    List<String> columnValues = rs.getFieldValues();
    if (columnValues == null || columnValues.size() != 2) {
        // 可能历时版本没有image特性
        binlogImage = BinlogImage.FULL;
    } else {
        binlogImage = BinlogImage.valuesOf(columnValues.get(1));
    }

    if (binlogFormat == null) {
        throw new IllegalStateException("unexpected binlog image query result:" + rs.getFieldValues());
    }

}

看了下,canel最新版本1.0.24中已修复, 为何otter没有及时更新下canal的版本呢

原提问者GitHub用户 whaon

展开
收起
古拉古拉 2023-06-21 12:17:34 54 0
1 条回答
写回答
取消 提交回答
  • otter近期会更新版本

    原回答者GitHub用户 agapple

    2023-06-21 13:00:17
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载