0e7b23e6fe
- Using heartbeat - Throttling works based on heartbeat - Refactored binlog_reader stuff. Now streaming events (into golang channel, which makes for nice buffering and throttling) - Binlog table listeners work - More Migrator logic; existing logic for waiting on `state` events (e.g. `TablesCreatedState`)
48 lines
1.3 KiB
Go
48 lines
1.3 KiB
Go
/*
|
|
Copyright 2016 GitHub Inc.
|
|
See https://github.com/github/gh-osc/blob/master/LICENSE
|
|
*/
|
|
|
|
package binlog
|
|
|
|
import (
|
|
"fmt"
|
|
"github.com/github/gh-osc/go/mysql"
|
|
)
|
|
|
|
// BinlogEntry describes an entry in the binary log
|
|
type BinlogEntry struct {
|
|
Coordinates mysql.BinlogCoordinates
|
|
EndLogPos uint64
|
|
|
|
DmlEvent *BinlogDMLEvent
|
|
}
|
|
|
|
// NewBinlogEntry creates an empty, ready to go BinlogEntry object
|
|
func NewBinlogEntry(logFile string, logPos uint64) *BinlogEntry {
|
|
binlogEntry := &BinlogEntry{
|
|
Coordinates: mysql.BinlogCoordinates{LogFile: logFile, LogPos: int64(logPos)},
|
|
}
|
|
return binlogEntry
|
|
}
|
|
|
|
// NewBinlogEntry creates an empty, ready to go BinlogEntry object
|
|
func NewBinlogEntryAt(coordinates mysql.BinlogCoordinates) *BinlogEntry {
|
|
binlogEntry := &BinlogEntry{
|
|
Coordinates: coordinates,
|
|
}
|
|
return binlogEntry
|
|
}
|
|
|
|
// Duplicate creates and returns a new binlog entry, with some of the attributes pre-assigned
|
|
func (this *BinlogEntry) Duplicate() *BinlogEntry {
|
|
binlogEntry := NewBinlogEntry(this.Coordinates.LogFile, uint64(this.Coordinates.LogPos))
|
|
binlogEntry.EndLogPos = this.EndLogPos
|
|
return binlogEntry
|
|
}
|
|
|
|
// Duplicate creates and returns a new binlog entry, with some of the attributes pre-assigned
|
|
func (this *BinlogEntry) String() string {
|
|
return fmt.Sprintf("[BinlogEntry at %+v; dml:%+v]", this.Coordinates, this.DmlEvent)
|
|
}
|