From 2f9ab5e5e3461293b179263313e52358d62f7c17 Mon Sep 17 00:00:00 2001 From: zeminzhou Date: Thu, 4 Feb 2021 15:20:42 +0800 Subject: [PATCH 1/4] sort mariadb gtid set --- mysql/mariadb_gtid.go | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/mysql/mariadb_gtid.go b/mysql/mariadb_gtid.go index 0a9136bb8..537691f59 100644 --- a/mysql/mariadb_gtid.go +++ b/mysql/mariadb_gtid.go @@ -3,6 +3,7 @@ package mysql import ( "bytes" "fmt" + "sort" "strconv" "strings" @@ -157,7 +158,26 @@ func (s *MariadbGTIDSet) Update(GTIDStr string) error { } func (s *MariadbGTIDSet) String() string { - return hack.String(s.Encode()) + if len(s.Sets) == 1 { + for _, set := range s.Sets { + return set.String() + } + } + + var buf bytes.Buffer + sets := make([]string, 0, len(s.Sets)) + for _, set := range s.Sets { + sets = append(sets, set.String()) + } + sort.Strings(sets) + + sep := "" + for _, set := range sets { + buf.WriteString(sep) + buf.WriteString(set) + sep = "," + } + return hack.String(buf.Bytes()) } // Encode encodes mariadb gtid set From 1e0f69154c5e2b7552d803f64ca322e4b6c276db Mon Sep 17 00:00:00 2001 From: zeminzhou Date: Thu, 4 Feb 2021 15:20:42 +0800 Subject: [PATCH 2/4] sort mariadb gtid set --- mysql/mariadb_gtid.go | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/mysql/mariadb_gtid.go b/mysql/mariadb_gtid.go index 0a9136bb8..537691f59 100644 --- a/mysql/mariadb_gtid.go +++ b/mysql/mariadb_gtid.go @@ -3,6 +3,7 @@ package mysql import ( "bytes" "fmt" + "sort" "strconv" "strings" @@ -157,7 +158,26 @@ func (s *MariadbGTIDSet) Update(GTIDStr string) error { } func (s *MariadbGTIDSet) String() string { - return hack.String(s.Encode()) + if len(s.Sets) == 1 { + for _, set := range s.Sets { + return set.String() + } + } + + var buf bytes.Buffer + sets := make([]string, 0, len(s.Sets)) + for _, set := range s.Sets { + sets = append(sets, set.String()) + } + sort.Strings(sets) + + sep := "" + for _, set := range sets { + buf.WriteString(sep) + buf.WriteString(set) + sep = "," + } + return hack.String(buf.Bytes()) } // Encode encodes mariadb gtid set From f0c2a11d16f4f5f511851062ae9fc2569d0a0937 Mon Sep 17 00:00:00 2001 From: zeminzhou Date: Fri, 9 Apr 2021 10:21:55 +0800 Subject: [PATCH 3/4] add unit test for MariadbGTID's String method --- mysql/mariadb_gtid_test.go | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/mysql/mariadb_gtid_test.go b/mysql/mariadb_gtid_test.go index 1455e2641..b2d06f53f 100644 --- a/mysql/mariadb_gtid_test.go +++ b/mysql/mariadb_gtid_test.go @@ -232,3 +232,12 @@ func (t *mariaDBTestSuite) TestMariaDBGTIDSetClone(c *check.C) { c.Assert(gtidSet.Clone(), check.DeepEquals, gtidSet) } } + +func (t *mariaDBTestSuite) TestMariaDBGTIDSetSortedString(c *check.C) { + gtidSetStr := "2-2-2,1-1-1,3-2-1" + sorted := "1-1-1,2-2-2,3-2-1" + + gtidSet, err := ParseMariadbGTIDSet(gtidSetStr) + c.Assert(err, check.IsNil) + c.Assert(gtidSet.String(), check.Equals, sorted) +} From 8b5c143b283a0ddc7c3934af40dcb5818e475579 Mon Sep 17 00:00:00 2001 From: zeminzhou Date: Fri, 9 Apr 2021 16:16:32 +0800 Subject: [PATCH 4/4] more cases for mariadb_gtid_test --- mysql/mariadb_gtid.go | 16 +--------------- mysql/mariadb_gtid_test.go | 12 +++++++----- 2 files changed, 8 insertions(+), 20 deletions(-) diff --git a/mysql/mariadb_gtid.go b/mysql/mariadb_gtid.go index 537691f59..9cd32d842 100644 --- a/mysql/mariadb_gtid.go +++ b/mysql/mariadb_gtid.go @@ -9,7 +9,6 @@ import ( "github.com/pingcap/errors" "github.com/siddontang/go-log/log" - "github.com/siddontang/go/hack" ) // MariadbGTID represent mariadb gtid, [domain ID]-[server-id]-[sequence] @@ -158,26 +157,13 @@ func (s *MariadbGTIDSet) Update(GTIDStr string) error { } func (s *MariadbGTIDSet) String() string { - if len(s.Sets) == 1 { - for _, set := range s.Sets { - return set.String() - } - } - - var buf bytes.Buffer sets := make([]string, 0, len(s.Sets)) for _, set := range s.Sets { sets = append(sets, set.String()) } sort.Strings(sets) - sep := "" - for _, set := range sets { - buf.WriteString(sep) - buf.WriteString(set) - sep = "," - } - return hack.String(buf.Bytes()) + return strings.Join(sets, ",") } // Encode encodes mariadb gtid set diff --git a/mysql/mariadb_gtid_test.go b/mysql/mariadb_gtid_test.go index b2d06f53f..e898bceb2 100644 --- a/mysql/mariadb_gtid_test.go +++ b/mysql/mariadb_gtid_test.go @@ -234,10 +234,12 @@ func (t *mariaDBTestSuite) TestMariaDBGTIDSetClone(c *check.C) { } func (t *mariaDBTestSuite) TestMariaDBGTIDSetSortedString(c *check.C) { - gtidSetStr := "2-2-2,1-1-1,3-2-1" - sorted := "1-1-1,2-2-2,3-2-1" + cases := [][]string{{"", ""}, {"1-1-1", "1-1-1"}, + {"2-2-2,1-1-1,3-2-1", "1-1-1,2-2-2,3-2-1"}} - gtidSet, err := ParseMariadbGTIDSet(gtidSetStr) - c.Assert(err, check.IsNil) - c.Assert(gtidSet.String(), check.Equals, sorted) + for _, strs := range cases { + gtidSet, err := ParseMariadbGTIDSet(strs[0]) + c.Assert(err, check.IsNil) + c.Assert(gtidSet.String(), check.Equals, strs[1]) + } }