Browse Source

fixed #227 , loadBinlogChecksum NPE

agapple 8 years ago
parent
commit
a483f03711

+ 14 - 12
parse/src/main/java/com/alibaba/otter/canal/parse/inbound/mysql/MysqlConnection.java

@@ -37,8 +37,8 @@ public class MysqlConnection implements ErosaConnection {
     private Charset             charset = Charset.forName("UTF-8");
     private BinlogFormat        binlogFormat;
     private BinlogImage         binlogImage;
-    private	int 				binlogChecksum;
-    
+    private int                 binlogChecksum;
+
     public MysqlConnection(){
     }
 
@@ -117,7 +117,7 @@ public class MysqlConnection implements ErosaConnection {
         LogDecoder decoder = new LogDecoder(LogEvent.UNKNOWN_EVENT, LogEvent.ENUM_END_EVENT);
         LogContext context = new LogContext();
         context.setLogPosition(new LogPosition(binlogfilename));
-        context.setFormatDescription(new FormatDescriptionLogEvent(4,binlogChecksum));
+        context.setFormatDescription(new FormatDescriptionLogEvent(4, binlogChecksum));
         while (fetcher.fetch()) {
             LogEvent event = null;
             event = decoder.decode(fetcher, context);
@@ -204,7 +204,7 @@ public class MysqlConnection implements ErosaConnection {
             // 如果不设置会出现错误: Slave can not handle replication events with the
             // checksum that master is configured to log
             // 但也不能乱设置,需要和mysql server的checksum配置一致,不然RotateLogEvent会出现乱码
-        	// '@@global.binlog_checksum'需要去掉单引号,在mysql 5.6.29下导致master退出
+            // '@@global.binlog_checksum'需要去掉单引号,在mysql 5.6.29下导致master退出
             update("set @master_binlog_checksum= @@global.binlog_checksum");
         } catch (Exception e) {
             if (!StringUtils.contains(e.getMessage(), "Unknown system variable")) {
@@ -266,12 +266,14 @@ public class MysqlConnection implements ErosaConnection {
             throw new IllegalStateException("unexpected binlog image query result:" + rs.getFieldValues());
         }
     }
+
     /**
      * 获取主库checksum信息
-     * https://dev.mysql.com/doc/refman/5.6/en/replication-options-binary-log.html#option_mysqld_binlog-checksum
+     * https://dev.mysql.com/doc/refman/5.6/en/replication-options
+     * -binary-log.html#option_mysqld_binlog-checksum
      */
-    private void loadBinlogChecksum(){
-    	ResultSetPacket rs = null;
+    private void loadBinlogChecksum() {
+        ResultSetPacket rs = null;
         try {
             rs = query("select @master_binlog_checksum");
         } catch (IOException e) {
@@ -279,13 +281,13 @@ public class MysqlConnection implements ErosaConnection {
         }
 
         List<String> columnValues = rs.getFieldValues();
-        if(columnValues.get(0).toUpperCase().equals("CRC32")){
-        	binlogChecksum = LogEvent.BINLOG_CHECKSUM_ALG_CRC32;
-        }else{
-        	binlogChecksum = LogEvent.BINLOG_CHECKSUM_ALG_OFF;
+        if (columnValues != null && columnValues.size() >= 1 && columnValues.get(0).toUpperCase().equals("CRC32")) {
+            binlogChecksum = LogEvent.BINLOG_CHECKSUM_ALG_CRC32;
+        } else {
+            binlogChecksum = LogEvent.BINLOG_CHECKSUM_ALG_OFF;
         }
     }
-    
+
     public static enum BinlogFormat {
 
         STATEMENT("STATEMENT"), ROW("ROW"), MIXED("MIXED");