in changelog/mysql.go [754:787]
func (b *mysqlReader) handleEvent(ev *replication.BinlogEvent) bool {
if ev.Header.Timestamp != 0 {
b.metrics.TimeToEncounter.Record(time.Duration(time.Now().Unix()-int64(ev.Header.Timestamp)) * time.Second)
}
switch v := ev.Event.(type) {
case *replication.FormatDescriptionEvent:
b.log.Infof("ServerVersion: %+v, BinlogFormatVersion: %+v, ChecksumAlgorithm: %+v", util.BytesToString(v.ServerVersion), v.Version, v.ChecksumAlgorithm)
case *replication.RowsEvent:
if !b.handleRowsEvent(ev, util.BytesToString(v.Table.Schema), util.BytesToString(v.Table.Table)) {
return false
}
case *replication.QueryEvent:
if !b.handleQueryEvent(ev) {
return false
}
case *replication.GTIDEvent:
if !b.incGTID(v) {
return false
}
case *replication.TableMapEvent:
//It's already in RowsEvent, not need to handle separately
case *replication.XIDEvent:
//ignoring
default:
if ev.Header.EventType != replication.HEARTBEAT_EVENT {
b.metrics.ChangelogUnhandledEvents.Inc(1)
bb := new(bytes.Buffer)
ev.Dump(bb)
b.log.Debugf("Unhandled binlog event: %+v", bb.String())
}
}
return true
}