Merge pull request #754 from wingerx/master

fix issue #751
This commit is contained in:
agapple
2018-07-17 21:04:18 +08:00
committed by GitHub

View File

@@ -504,9 +504,6 @@ public class LogEventConvert extends AbstractCanalLifeCycle implements BinlogPar
throw new CanalParseException("unsupport event type :" + event.getHeader().getType()); throw new CanalParseException("unsupport event type :" + event.getHeader().getType());
} }
TableMapLogEvent table = event.getTable();
Header header = createHeader(event.getHeader(), table.getDbName(), table.getTableName(), eventType);
RowChange.Builder rowChangeBuider = RowChange.newBuilder(); RowChange.Builder rowChangeBuider = RowChange.newBuilder();
rowChangeBuider.setTableId(event.getTableId()); rowChangeBuider.setTableId(event.getTableId());
rowChangeBuider.setIsDdl(false); rowChangeBuider.setIsDdl(false);
@@ -517,6 +514,7 @@ public class LogEventConvert extends AbstractCanalLifeCycle implements BinlogPar
BitSet changeColumns = event.getChangeColumns(); BitSet changeColumns = event.getChangeColumns();
boolean tableError = false; boolean tableError = false;
int rowsCount = 0;
while (buffer.nextOneRow(columns)) { while (buffer.nextOneRow(columns)) {
// 处理row记录 // 处理row记录
RowData.Builder rowDataBuilder = RowData.newBuilder(); RowData.Builder rowDataBuilder = RowData.newBuilder();
@@ -537,9 +535,13 @@ public class LogEventConvert extends AbstractCanalLifeCycle implements BinlogPar
tableError |= parseOneRow(rowDataBuilder, event, buffer, changeColumns, true, tableMeta); tableError |= parseOneRow(rowDataBuilder, event, buffer, changeColumns, true, tableMeta);
} }
rowsCount ++;
rowChangeBuider.addRowDatas(rowDataBuilder.build()); rowChangeBuider.addRowDatas(rowDataBuilder.build());
} }
TableMapLogEvent table = event.getTable();
Header header = createHeader(event.getHeader(), table.getDbName(), table.getTableName(), eventType, rowsCount);
RowChange rowChange = rowChangeBuider.build(); RowChange rowChange = rowChangeBuider.build();
if (tableError) { if (tableError) {
Entry entry = createEntry(header, EntryType.ROWDATA, ByteString.EMPTY); Entry entry = createEntry(header, EntryType.ROWDATA, ByteString.EMPTY);
@@ -793,7 +795,12 @@ public class LogEventConvert extends AbstractCanalLifeCycle implements BinlogPar
return createEntry(header, EntryType.ROWDATA, rowChangeBuider.build().toByteString()); return createEntry(header, EntryType.ROWDATA, rowChangeBuider.build().toByteString());
} }
private Header createHeader(LogHeader logHeader, String schemaName, String tableName, EventType eventType) { private Header createHeader(LogHeader logHeader, String schemaName, String tableName, EventType eventType) {
return createHeader(logHeader, schemaName, tableName, eventType, -1);
}
private Header createHeader(LogHeader logHeader, String schemaName, String tableName, EventType eventType, Integer rowsCount) {
// header会做信息冗余,方便以后做检索或者过滤 // header会做信息冗余,方便以后做检索或者过滤
Header.Builder headerBuilder = Header.newBuilder(); Header.Builder headerBuilder = Header.newBuilder();
headerBuilder.setVersion(version); headerBuilder.setVersion(version);
@@ -818,6 +825,12 @@ public class LogEventConvert extends AbstractCanalLifeCycle implements BinlogPar
String gtid = gtidSet.toString(); String gtid = gtidSet.toString();
headerBuilder.setGtid(gtid); headerBuilder.setGtid(gtid);
} }
// add rowsCount suppport
if (rowsCount > 0) {
Pair pair = createSpecialPair("rowsCount", String.valueOf(rowsCount));
headerBuilder.addProps(pair);
}
return headerBuilder.build(); return headerBuilder.build();
} }