Browse Source

fix: uuidset combine fix (#3432)

ltamber 4 years ago
parent
commit
e8d138d3bd

+ 3 - 1
driver/src/main/java/com/alibaba/otter/canal/parse/driver/mysql/packets/UUIDSet.java

@@ -181,7 +181,9 @@ public class UUIDSet {
             int j;
             for (j = i + 1; j < len; j++) {
                 if (intervals.get(i).stop >= intervals.get(j).start) {
-                    intervals.get(i).stop = intervals.get(j).stop;
+                    if (intervals.get(i).stop < intervals.get(j).stop) {
+                        intervals.get(i).stop = intervals.get(j).stop;
+                    }
                 } else {
                     break;
                 }

+ 12 - 0
driver/src/test/java/com/alibaba/otter/canal/parse/driver/mysql/MysqlGTIDSetTest.java

@@ -36,6 +36,18 @@ public class MysqlGTIDSetTest {
         }
     }
 
+    @Test
+    public void testUpdate() {
+        String gtid1 = "726757ad-4455-11e8-ae04-0242ac110002:1-25536412";
+        MysqlGTIDSet mysqlGTIDSet1 = MysqlGTIDSet.parse(gtid1);
+
+        String gtid2 = "726757ad-4455-11e8-ae04-0242ac110002:1-20304074";
+        MysqlGTIDSet mysqlGTIDSet2 = MysqlGTIDSet.parse(gtid2);
+
+        mysqlGTIDSet1.update(gtid2);
+        assertEquals("726757ad-4455-11e8-ae04-0242ac110002:1-25536412", mysqlGTIDSet1.toString());
+    }
+
     @Test
     public void testParse() {
         Map<String, MysqlGTIDSet> cases = new HashMap<>(5);