diff --git a/datachecker-check/src/main/java/org/opengauss/datachecker/check/slice/SliceCheckEventHandler.java b/datachecker-check/src/main/java/org/opengauss/datachecker/check/slice/SliceCheckEventHandler.java index 10331d0e2625890475bdd50f23501826bfab0206..7a27341e7178408261580d333136c6ae8ab37d79 100644 --- a/datachecker-check/src/main/java/org/opengauss/datachecker/check/slice/SliceCheckEventHandler.java +++ b/datachecker-check/src/main/java/org/opengauss/datachecker/check/slice/SliceCheckEventHandler.java @@ -99,10 +99,18 @@ public class SliceCheckEventHandler { sliceCheckContext.addCheckResult(checkEvent.getSlice(), result); } + /** + * check table is empty + * source or sink any one is not empty, then table is not empty; + * source and sink both are empty, then table is empty + * + * @param tableName table name + * @return table has any rows + */ private boolean checkTableHasRows(String tableName) { TableMetadata sourceMeta = metaDataManager.getTableMetadata(Endpoint.SOURCE, tableName); TableMetadata sinkMeta = metaDataManager.getTableMetadata(Endpoint.SINK, tableName); - return sourceMeta.isExistTableRows() && sinkMeta.isExistTableRows(); + return sourceMeta.isExistTableRows() || sinkMeta.isExistTableRows(); } /** diff --git a/datachecker-extract/src/main/java/org/opengauss/datachecker/extract/service/DataExtractServiceImpl.java b/datachecker-extract/src/main/java/org/opengauss/datachecker/extract/service/DataExtractServiceImpl.java index f7b801a6ae88e2aa62b96492ea99024a2d2b4b3f..5c108295961e85b0f11d83a42df5cc51d2ceca36 100644 --- a/datachecker-extract/src/main/java/org/opengauss/datachecker/extract/service/DataExtractServiceImpl.java +++ b/datachecker-extract/src/main/java/org/opengauss/datachecker/extract/service/DataExtractServiceImpl.java @@ -536,8 +536,8 @@ public class DataExtractServiceImpl implements DataExtractService { registerCheckPoint(task, endpoint); }); LogUtils.info(log, "tableRegisterCheckPoint finished"); - long count = taskList.stream().filter(task -> task.getTableMetadata().isExistTableRows()).count(); - while (tableCheckPointCache.tableCount() != count) { + // 该出增加空表过滤逻辑,导致检查点注册线程不能终止。迁移失败,导致目标端数据为空,或者源端表迁移完成后,数据清空 + while (tableCheckPointCache.tableCount() != taskList.size()) { ThreadUtil.sleepHalfSecond(); } checkPointManager.close();