gh-ost/vendor/github.com/siddontang/go-mysql/canal/master.go

67 lines
967 B
Go

package canal
import (
"sync"
"github.com/siddontang/go-log/log"
"github.com/siddontang/go-mysql/mysql"
)
type masterInfo struct {
sync.RWMutex
pos mysql.Position
gset mysql.GTIDSet
timestamp uint32
}
func (m *masterInfo) Update(pos mysql.Position) {
log.Debugf("update master position %s", pos)
m.Lock()
m.pos = pos
m.Unlock()
}
func (m *masterInfo) UpdateTimestamp(ts uint32) {
log.Debugf("update master timestamp %s", ts)
m.Lock()
m.timestamp = ts
m.Unlock()
}
func (m *masterInfo) UpdateGTIDSet(gset mysql.GTIDSet) {
log.Debugf("update master gtid set %s", gset)
m.Lock()
m.gset = gset
m.Unlock()
}
func (m *masterInfo) Position() mysql.Position {
m.RLock()
defer m.RUnlock()
return m.pos
}
func (m *masterInfo) Timestamp() uint32 {
m.RLock()
defer m.RUnlock()
return m.timestamp
}
func (m *masterInfo) GTIDSet() mysql.GTIDSet {
m.RLock()
defer m.RUnlock()
if m.gset == nil {
return nil
}
return m.gset.Clone()
}