You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by zh...@apache.org on 2023/08/04 11:10:40 UTC

[shardingsphere] branch master updated: Fix StringPrimaryKeyPosition handle empty string. (#27917)

This is an automated email from the ASF dual-hosted git repository.

zhonghongsheng pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git


The following commit(s) were added to refs/heads/master by this push:
     new cf6e3af17f0 Fix StringPrimaryKeyPosition handle empty string. (#27917)
cf6e3af17f0 is described below

commit cf6e3af17f071bf4238a8a4bad8f365ea5aad676
Author: Xinze Guo <10...@users.noreply.github.com>
AuthorDate: Fri Aug 4 19:10:32 2023 +0800

    Fix StringPrimaryKeyPosition handle empty string. (#27917)
---
 .../common/ingest/position/pk/type/StringPrimaryKeyPosition.java  | 8 ++++++--
 .../ingest/position/pk/type/StringPrimaryKeyPositionTest.java     | 8 ++++++++
 .../cases/migration/general/MySQLMigrationGeneralE2EIT.java       | 2 ++
 3 files changed, 16 insertions(+), 2 deletions(-)

diff --git a/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/common/ingest/position/pk/type/StringPrimaryKeyPosition.java b/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/common/ingest/position/pk/type/StringPrimaryKeyPosition.java
index 33e906b3f85..f6466a8c53c 100644
--- a/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/common/ingest/position/pk/type/StringPrimaryKeyPosition.java
+++ b/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/common/ingest/position/pk/type/StringPrimaryKeyPosition.java
@@ -17,14 +17,13 @@
 
 package org.apache.shardingsphere.data.pipeline.common.ingest.position.pk.type;
 
+import com.google.common.base.Strings;
 import lombok.Getter;
-import lombok.RequiredArgsConstructor;
 import org.apache.shardingsphere.data.pipeline.common.ingest.position.pk.PrimaryKeyPosition;
 
 /**
  * String primary key position.
  */
-@RequiredArgsConstructor
 @Getter
 public final class StringPrimaryKeyPosition implements PrimaryKeyPosition<String> {
     
@@ -32,6 +31,11 @@ public final class StringPrimaryKeyPosition implements PrimaryKeyPosition<String
     
     private final String endValue;
     
+    public StringPrimaryKeyPosition(final String beginValue, final String endValue) {
+        this.beginValue = Strings.emptyToNull(beginValue);
+        this.endValue = Strings.emptyToNull(endValue);
+    }
+    
     @Override
     public String convert(final String value) {
         return value;
diff --git a/kernel/data-pipeline/core/src/test/java/org/apache/shardingsphere/data/pipeline/common/ingest/position/pk/type/StringPrimaryKeyPositionTest.java b/kernel/data-pipeline/core/src/test/java/org/apache/shardingsphere/data/pipeline/common/ingest/position/pk/type/StringPrimaryKeyPositionTest.java
index d1e972c5cb6..f7139e02f56 100644
--- a/kernel/data-pipeline/core/src/test/java/org/apache/shardingsphere/data/pipeline/common/ingest/position/pk/type/StringPrimaryKeyPositionTest.java
+++ b/kernel/data-pipeline/core/src/test/java/org/apache/shardingsphere/data/pipeline/common/ingest/position/pk/type/StringPrimaryKeyPositionTest.java
@@ -22,6 +22,7 @@ import org.junit.jupiter.api.Test;
 
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertNull;
 
 class StringPrimaryKeyPositionTest {
     
@@ -36,4 +37,11 @@ class StringPrimaryKeyPositionTest {
     void assertToString() {
         assertThat(new StringPrimaryKeyPosition("hi", "jk").toString(), is("s,hi,jk"));
     }
+    
+    @Test
+    void assertEmptyToNull() {
+        StringPrimaryKeyPosition actual = (StringPrimaryKeyPosition) PrimaryKeyPositionFactory.newInstance("s,,");
+        assertNull(actual.getBeginValue());
+        assertNull(actual.getEndValue());
+    }
 }
diff --git a/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/data/pipeline/cases/migration/general/MySQLMigrationGeneralE2EIT.java b/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/data/pipeline/cases/migration/general/MySQLMigrationGeneralE2EIT.java
index fdadfb1cc52..37f9b4c6294 100644
--- a/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/data/pipeline/cases/migration/general/MySQLMigrationGeneralE2EIT.java
+++ b/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/data/pipeline/cases/migration/general/MySQLMigrationGeneralE2EIT.java
@@ -83,6 +83,8 @@ class MySQLMigrationGeneralE2EIT extends AbstractMigrationE2EIT {
                     new E2EIncrementalTask(containerComposer.getSourceDataSource(), SOURCE_TABLE_NAME, new SnowflakeKeyGenerateAlgorithm(), containerComposer.getDatabaseType(), 30));
             TimeUnit.SECONDS.timedJoin(containerComposer.getIncreaseTaskThread(), 30);
             containerComposer.sourceExecuteWithLog(String.format("INSERT INTO %s (order_id, user_id, status) VALUES (10000, 1, 'OK')", SOURCE_TABLE_NAME));
+            stopMigrationByJobId(containerComposer, orderJobId);
+            startMigrationByJobId(containerComposer, orderJobId);
             DataSource jdbcDataSource = containerComposer.generateShardingSphereDataSourceFromProxy();
             containerComposer.assertOrderRecordExist(jdbcDataSource, "t_order", 10000);
             assertMigrationSuccessById(containerComposer, orderJobId, "DATA_MATCH");