DBZ-1010 Handle error deserialization also in deserializers

This commit is contained in:
Jiri Pechanec 2018-11-28 11:45:55 +01:00 committed by Gunnar Morling
parent 0e91c662cb
commit 2c3d2ee083

View File

@ -20,6 +20,7 @@
import org.apache.kafka.connect.errors.ConnectException;
import org.apache.kafka.connect.source.SourceRecord;
import org.slf4j.event.Level;
import com.github.shyiko.mysql.binlog.BinaryLogClient;
import com.github.shyiko.mysql.binlog.BinaryLogClient.LifecycleListener;
@ -964,17 +965,39 @@ public void onCommunicationFailure(BinaryLogClient client, Exception ex) {
@Override
public void onEventDeserializationFailure(BinaryLogClient client, Exception ex) {
logger.debug("A deserialization failure event arrived", ex);
logReaderState();
BinlogReader.this.failed(ex);
if(eventDeserializationFailureHandlingMode == EventProcessingFailureHandlingMode.FAIL) {
logger.debug("A deserialization failure event arrived", ex);
logReaderState();
BinlogReader.this.failed(ex);
}
else if(eventDeserializationFailureHandlingMode == EventProcessingFailureHandlingMode.WARN) {
logger.warn("A deserialization failure event arrived", ex);
logReaderState(Level.WARN);
}
else {
logger.debug("A deserialization failure event arrived", ex);
logReaderState(Level.DEBUG);
}
}
}
private void logReaderState() {
logger.error("Error during binlog processing. Last offset stored = {}, binlog reader near position = {}",
lastOffset,
client == null ? "N/A" : client.getBinlogFilename() + "/" + client.getBinlogPosition()
);
logReaderState(Level.ERROR);
}
private void logReaderState(Level severity) {
final Object position = client == null ? "N/A" : client.getBinlogFilename() + "/" + client.getBinlogPosition();
final String message = "Error during binlog processing. Last offset stored = {}, binlog reader near position = {}";
switch (severity) {
case WARN:
logger.warn(message, lastOffset, position);
break;
case DEBUG:
logger.debug(message, lastOffset, position);
break;
default:
logger.error(message, lastOffset, position);
}
}
protected BinlogReaderMetrics getMetrics() {