diff --git a/mysql/mariadb_gtid.go b/mysql/mariadb_gtid.go index 9cd32d842..8bfffd092 100644 --- a/mysql/mariadb_gtid.go +++ b/mysql/mariadb_gtid.go @@ -113,15 +113,9 @@ func ParseMariadbGTIDSet(str string) (GTIDSet, error) { if str == "" { return s, nil } - - sp := strings.Split(str, ",") - - //todo, handle redundant same uuid - for i := 0; i < len(sp); i++ { - err := s.Update(sp[i]) - if err != nil { - return nil, errors.Trace(err) - } + err := s.Update(str) + if err != nil { + return nil, err } return s, nil } @@ -147,13 +141,19 @@ func (s *MariadbGTIDSet) AddSet(gtid *MariadbGTID) error { // Update updates mariadb gtid set func (s *MariadbGTIDSet) Update(GTIDStr string) error { - gtid, err := ParseMariadbGTID(GTIDStr) - if err != nil { - return err + sp := strings.Split(GTIDStr, ",") + //todo, handle redundant same uuid + for i := 0; i < len(sp); i++ { + gtid, err := ParseMariadbGTID(sp[i]) + if err != nil { + return errors.Trace(err) + } + err = s.AddSet(gtid) + if err != nil { + return errors.Trace(err) + } } - - err = s.AddSet(gtid) - return errors.Trace(err) + return nil } func (s *MariadbGTIDSet) String() string { diff --git a/mysql/mariadb_gtid_test.go b/mysql/mariadb_gtid_test.go index e898bceb2..6d0ce22c3 100644 --- a/mysql/mariadb_gtid_test.go +++ b/mysql/mariadb_gtid_test.go @@ -152,6 +152,7 @@ func (t *mariaDBTestSuite) TestMariaDBGTIDSetUpdate(c *check.C) { {false, "1-2-2", map[uint32]string{1: "1-2-2", 2: "2-2-2"}}, {false, "1-2-1", map[uint32]string{1: "1-2-1", 2: "2-2-2"}}, {false, "3-2-1", map[uint32]string{1: "1-1-1", 2: "2-2-2", 3: "3-2-1"}}, + {false, "3-2-1,4-2-1", map[uint32]string{1: "1-1-1", 2: "2-2-2", 3: "3-2-1", 4: "4-2-1"}}, } for _, cs := range cases { diff --git a/mysql/mysql_gtid.go b/mysql/mysql_gtid.go index ce43b3129..c3cd48ced 100644 --- a/mysql/mysql_gtid.go +++ b/mysql/mysql_gtid.go @@ -363,13 +363,13 @@ func (s *MysqlGTIDSet) AddSet(set *UUIDSet) { } func (s *MysqlGTIDSet) Update(GTIDStr string) error { - uuidSet, err := ParseUUIDSet(GTIDStr) + gtidSet, err := ParseMysqlGTIDSet(GTIDStr) if err != nil { return err } - - s.AddSet(uuidSet) - + for _, uuidSet := range gtidSet.(*MysqlGTIDSet).Sets { + s.AddSet(uuidSet) + } return nil } diff --git a/mysql/mysql_test.go b/mysql/mysql_test.go index a80c19de5..2b79349d4 100644 --- a/mysql/mysql_test.go +++ b/mysql/mysql_test.go @@ -106,6 +106,29 @@ func (t *mysqlTestSuite) TestMysqlUpdate(c *check.C) { c.Assert(err, check.IsNil) c.Assert(strings.ToUpper(g1.String()), check.Equals, "3E11FA47-71CA-11E1-9E33-C80AA9429562:21-58") + + g1, err = ParseMysqlGTIDSet(` + 519CE70F-A893-11E9-A95A-B32DC65A7026:1-1154661, + 5C9CA52B-9F11-11E9-8EAF-3381EC1CC790:1-244, + 802D69FD-A3B6-11E9-B1EA-50BAB55BA838:1-1221371, + F2B50559-A891-11E9-B646-884FF0CA2043:1-479261 + `) + c.Assert(err, check.IsNil) + + err = g1.Update(` + 802D69FD-A3B6-11E9-B1EA-50BAB55BA838:1221110-1221371, + F2B50559-A891-11E9-B646-884FF0CA2043:478509-479266 + `) + c.Assert(err, check.IsNil) + + g2, err := ParseMysqlGTIDSet(` + 519CE70F-A893-11E9-A95A-B32DC65A7026:1-1154661, + 5C9CA52B-9F11-11E9-8EAF-3381EC1CC790:1-244, + 802D69FD-A3B6-11E9-B1EA-50BAB55BA838:1-1221371, + F2B50559-A891-11E9-B646-884FF0CA2043:1-479266 + `) + c.Assert(err, check.IsNil) + c.Assert(g2.Equal(g1), check.IsTrue) } func (t *mysqlTestSuite) TestMysqlGTIDContain(c *check.C) {