DBZ-129 Fix for GTID updates
Workaround for https://github.com/shyiko/mysql-binlog-connector-java/issues/122.
This commit is contained in:
parent
7387654bfa
commit
2f5772712a
@ -72,6 +72,7 @@ public class BinlogReader extends AbstractReader {
|
||||
private long previousOutputMillis = 0L;
|
||||
private final AtomicLong totalRecordCounter = new AtomicLong();
|
||||
private volatile Map<String, ?> lastOffset = null;
|
||||
private com.github.shyiko.mysql.binlog.GtidSet gtidSet;
|
||||
|
||||
/**
|
||||
* Create a binlog reader.
|
||||
@ -142,7 +143,6 @@ protected void doStart() {
|
||||
eventHandlers.put(EventType.ROTATE, this::handleRotateLogsEvent);
|
||||
eventHandlers.put(EventType.TABLE_MAP, this::handleUpdateTableMetadata);
|
||||
eventHandlers.put(EventType.QUERY, this::handleQueryEvent);
|
||||
eventHandlers.put(EventType.GTID, this::handleGtidEvent);
|
||||
eventHandlers.put(EventType.WRITE_ROWS, this::handleInsert);
|
||||
eventHandlers.put(EventType.UPDATE_ROWS, this::handleUpdate);
|
||||
eventHandlers.put(EventType.DELETE_ROWS, this::handleDelete);
|
||||
@ -154,6 +154,9 @@ protected void doStart() {
|
||||
// set set the client to start from that point ...
|
||||
String gtidSetStr = source.gtidSet();
|
||||
if (gtidSetStr != null) {
|
||||
// Register the event handler ...
|
||||
eventHandlers.put(EventType.GTID, this::handleGtidEvent);
|
||||
|
||||
logger.info("GTID set from previous recorded offset: {}", gtidSetStr);
|
||||
// Remove any of the GTID sources that are not required/acceptable ...
|
||||
Predicate<String> gtidSourceFilter = context.gtidSourceFilter();
|
||||
@ -164,9 +167,11 @@ protected void doStart() {
|
||||
source.setGtidSet(gtidSetStr);
|
||||
}
|
||||
client.setGtidSet(gtidSetStr);
|
||||
gtidSet = new com.github.shyiko.mysql.binlog.GtidSet(gtidSetStr);
|
||||
} else {
|
||||
client.setBinlogFilename(source.binlogFilename());
|
||||
client.setBinlogPosition(source.nextBinlogPosition());
|
||||
gtidSet = null;
|
||||
}
|
||||
|
||||
// Set the starting row number, which is the next row number to be read ...
|
||||
@ -357,8 +362,10 @@ protected void handleRotateLogsEvent(Event event) {
|
||||
protected void handleGtidEvent(Event event) {
|
||||
logger.debug("GTID transaction: {}", event);
|
||||
GtidEventData gtidEvent = unwrapData(event);
|
||||
source.setGtid(gtidEvent.getGtid());
|
||||
source.setGtidSet(client.getGtidSet());
|
||||
String gtid = gtidEvent.getGtid();
|
||||
gtidSet.add(gtid);
|
||||
source.setGtid(gtid);
|
||||
source.setGtidSet(gtidSet.toString()); // rather than use the client's GTID set
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -262,7 +262,7 @@ public void setGtid(String gtid) {
|
||||
*/
|
||||
public void setGtidSet(String gtidSet) {
|
||||
if (gtidSet != null && !gtidSet.trim().isEmpty()) {
|
||||
this.gtidSet = gtidSet.replaceAll("\n", ""); // remove all of the newline chars if they exist
|
||||
this.gtidSet = gtidSet.replaceAll("\n", "").replaceAll("\r", ""); // remove all of the newline chars if they exist
|
||||
}
|
||||
}
|
||||
|
||||
@ -385,7 +385,7 @@ private boolean booleanOffsetValue(Map<String, ?> values, String key) {
|
||||
* @return the string representation of the binlog GTID ranges; may be null
|
||||
*/
|
||||
public String gtidSet() {
|
||||
return this.gtidSet != null ? this.gtidSet.toString() : null;
|
||||
return this.gtidSet != null ? this.gtidSet : null;
|
||||
}
|
||||
|
||||
/**
|
||||
|
Loading…
Reference in New Issue
Block a user