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 <[email protected]>
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");