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 216df382945 Fix data consistency check failed when table with only
unique keys (#24040)
216df382945 is described below
commit 216df3829455db1c9b81adefc12e631eba9b8e94
Author: Xinze Guo <[email protected]>
AuthorDate: Tue Feb 7 14:56:28 2023 +0800
Fix data consistency check failed when table with only unique keys (#24040)
---
.../pipeline/core/metadata/loader/PipelineTableMetaDataUtil.java | 5 ++---
.../e2e/data/pipeline/cases/migration/AbstractMigrationE2EIT.java | 5 ++++-
.../cases/migration/general/PostgreSQLMigrationGeneralE2EIT.java | 2 +-
3 files changed, 7 insertions(+), 5 deletions(-)
diff --git
a/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/metadata/loader/PipelineTableMetaDataUtil.java
b/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/metadata/loader/PipelineTableMetaDataUtil.java
index 69a2a108d8e..ff652e93280 100644
---
a/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/metadata/loader/PipelineTableMetaDataUtil.java
+++
b/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/metadata/loader/PipelineTableMetaDataUtil.java
@@ -55,11 +55,10 @@ public final class PipelineTableMetaDataUtil {
if (1 == primaryKeys.size()) {
return
tableMetaData.getColumnMetaData(tableMetaData.getPrimaryKeyColumns().get(0));
}
- if (primaryKeys.isEmpty()) {
+ Collection<PipelineIndexMetaData> uniqueIndexes =
tableMetaData.getUniqueIndexes();
+ if (uniqueIndexes.isEmpty() && primaryKeys.isEmpty()) {
return null;
}
- Collection<PipelineIndexMetaData> uniqueIndexes =
tableMetaData.getUniqueIndexes();
- ShardingSpherePreconditions.checkState(!uniqueIndexes.isEmpty(), () ->
new SplitPipelineJobByRangeException(tableName, "no primary key or unique
index"));
if (1 == uniqueIndexes.size() && 1 ==
uniqueIndexes.iterator().next().getColumns().size()) {
PipelineColumnMetaData column =
uniqueIndexes.iterator().next().getColumns().get(0);
if (!column.isNullable()) {
diff --git
a/test/e2e/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/data/pipeline/cases/migration/AbstractMigrationE2EIT.java
b/test/e2e/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/data/pipeline/cases/migration/AbstractMigrationE2EIT.java
index d668060cba5..9cdc6d41b69 100644
---
a/test/e2e/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/data/pipeline/cases/migration/AbstractMigrationE2EIT.java
+++
b/test/e2e/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/data/pipeline/cases/migration/AbstractMigrationE2EIT.java
@@ -39,6 +39,7 @@ import java.util.stream.Collectors;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
@Getter
@@ -150,6 +151,7 @@ public abstract class AbstractMigrationE2EIT extends
PipelineBaseE2EIT {
resultList = queryForListWithLog(String.format("SHOW MIGRATION
CHECK STATUS '%s'", jobId));
if (resultList.isEmpty()) {
ThreadUtil.sleep(3, TimeUnit.SECONDS);
+ continue;
}
List<String> checkEndTimeList = resultList.stream().map(map ->
map.get("check_end_time").toString()).filter(each ->
!Strings.isNullOrEmpty(each)).collect(Collectors.toList());
if (checkEndTimeList.size() == resultList.size()) {
@@ -159,8 +161,9 @@ public abstract class AbstractMigrationE2EIT extends
PipelineBaseE2EIT {
}
}
log.info("check job results: {}", resultList);
+ assertFalse(resultList.isEmpty());
for (Map<String, Object> each : resultList) {
- assertTrue("check result is false",
Boolean.parseBoolean(each.get("result").toString()));
+ assertTrue(String.format("%s check result is false",
each.get("tables")), Boolean.parseBoolean(each.get("result").toString()));
assertThat("finished_percentage is not 100",
each.get("finished_percentage").toString(), is("100"));
}
}
diff --git
a/test/e2e/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/data/pipeline/cases/migration/general/PostgreSQLMigrationGeneralE2EIT.java
b/test/e2e/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/data/pipeline/cases/migration/general/PostgreSQLMigrationGeneralE2EIT.java
index 4a1c65f0e48..d1b44b688a1 100644
---
a/test/e2e/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/data/pipeline/cases/migration/general/PostgreSQLMigrationGeneralE2EIT.java
+++
b/test/e2e/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/data/pipeline/cases/migration/general/PostgreSQLMigrationGeneralE2EIT.java
@@ -101,7 +101,7 @@ public final class PostgreSQLMigrationGeneralE2EIT extends
AbstractMigrationE2EI
}
List<String> lastJobIds = listJobId();
assertThat(lastJobIds.size(), is(0));
-
assertGreaterThanOrderTableInitRows(PipelineBaseE2EIT.TABLE_INIT_ROW_COUNT,
PipelineBaseE2EIT.SCHEMA_NAME);
+
assertGreaterThanOrderTableInitRows(PipelineBaseE2EIT.TABLE_INIT_ROW_COUNT + 1,
PipelineBaseE2EIT.SCHEMA_NAME);
log.info("{} E2E IT finished, database type={}, docker image={}",
this.getClass().getName(), testParam.getDatabaseType(),
testParam.getStorageContainerImage());
}