master.go 969 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. package canal
  2. import (
  3. "sync"
  4. "github.com/go-mysql-org/go-mysql/mysql"
  5. "github.com/siddontang/go-log/log"
  6. )
  7. type masterInfo struct {
  8. sync.RWMutex
  9. pos mysql.Position
  10. gset mysql.GTIDSet
  11. timestamp uint32
  12. }
  13. func (m *masterInfo) Update(pos mysql.Position) {
  14. log.Debugf("update master position %s", pos)
  15. m.Lock()
  16. m.pos = pos
  17. m.Unlock()
  18. }
  19. func (m *masterInfo) UpdateTimestamp(ts uint32) {
  20. log.Debugf("update master timestamp %d", ts)
  21. m.Lock()
  22. m.timestamp = ts
  23. m.Unlock()
  24. }
  25. func (m *masterInfo) UpdateGTIDSet(gset mysql.GTIDSet) {
  26. log.Debugf("update master gtid set %s", gset)
  27. m.Lock()
  28. m.gset = gset
  29. m.Unlock()
  30. }
  31. func (m *masterInfo) Position() mysql.Position {
  32. m.RLock()
  33. defer m.RUnlock()
  34. return m.pos
  35. }
  36. func (m *masterInfo) Timestamp() uint32 {
  37. m.RLock()
  38. defer m.RUnlock()
  39. return m.timestamp
  40. }
  41. func (m *masterInfo) GTIDSet() mysql.GTIDSet {
  42. m.RLock()
  43. defer m.RUnlock()
  44. if m.gset == nil {
  45. return nil
  46. }
  47. return m.gset.Clone()
  48. }