Skip to content

Commit 743c034

Browse files
authored
fix(dlm): don't compare the table structure if syncTableStructure is off (#3014)
1 parent c586b89 commit 743c034

4 files changed

Lines changed: 18 additions & 7 deletions

File tree

server/odc-service/src/main/java/com/oceanbase/odc/service/schedule/flowtask/DataArchivePreprocessor.java

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -86,10 +86,9 @@ public void process(CreateFlowInstanceReq req) {
8686
// permission to access it.
8787
Database sourceDb = databaseService.detail(dataArchiveParameters.getSourceDatabaseId());
8888
Database targetDb = databaseService.detail(dataArchiveParameters.getTargetDataBaseId());
89-
if (!dataArchiveParameters.getSyncTableStructure().isEmpty()
90-
&& sourceDb.getDataSource().getDialectType() != targetDb.getDataSource().getDialectType()) {
91-
throw new UnsupportedException(
92-
"Different types of databases do not support structural synchronization.");
89+
if (!dataArchiveParameters.getSyncTableStructure().isEmpty()) {
90+
supportSyncTableStructure(sourceDb.getDataSource().getDialectType(), targetDb.getDataSource()
91+
.getDialectType());
9392
}
9493
dataArchiveParameters.setSourceDatabaseName(sourceDb.getName());
9594
dataArchiveParameters.setTargetDatabaseName(targetDb.getName());
@@ -188,4 +187,15 @@ private void initDefaultConfig(DataArchiveParameters parameters) {
188187
parameters.setQueryTimeout(dlmConfiguration.getTaskConnectionQueryTimeout());
189188
parameters.setShardingStrategy(dlmConfiguration.getShardingStrategy());
190189
}
190+
191+
private void supportSyncTableStructure(DialectType srcDbType, DialectType tgtDbType) {
192+
if (srcDbType != tgtDbType) {
193+
throw new UnsupportedException(
194+
"Different types of databases do not support table structure synchronization.");
195+
}
196+
if (!srcDbType.isMysql()) {
197+
throw new UnsupportedException(
198+
String.format("The database does not support table structure synchronization,type=%s", srcDbType));
199+
}
200+
}
191201
}

server/odc-service/src/main/java/com/oceanbase/odc/service/schedule/job/AbstractDlmJob.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,8 @@ public void executeTask(Long taskId, List<DlmTableUnit> dlmTableUnits, Long time
114114
dlmTableUnit.getTableName());
115115
continue;
116116
}
117-
if (dlmTableUnit.getType() == JobType.MIGRATE) {
117+
if (dlmTableUnit.getType() == JobType.MIGRATE
118+
&& !dlmTableUnit.getParameters().getSyncDBObjectType().isEmpty()) {
118119
try {
119120
DLMTableStructureSynchronizer.sync(dlmTableUnit.getSourceDatasourceInfo(),
120121
dlmTableUnit.getTargetDatasourceInfo(), dlmTableUnit.getTableName(),

server/odc-service/src/main/java/com/oceanbase/odc/service/task/executor/task/DataArchiveTask.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ protected boolean doStart(JobContext context) throws Exception {
8888
log.info("The table had been completed,tableName={}", dlmTableUnit.getTableName());
8989
continue;
9090
}
91-
if (parameters.getJobType() == JobType.MIGRATE) {
91+
if (parameters.getJobType() == JobType.MIGRATE && !parameters.getSyncTableStructure().isEmpty()) {
9292
try {
9393
DLMTableStructureSynchronizer.sync(
9494
DataSourceInfoMapper.toConnectionConfig(parameters.getSourceDs()),

server/odc-service/src/main/java/com/oceanbase/odc/service/task/listener/DefaultJobTerminateListener.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ public void onEvent(JobTerminateEvent event) {
7777
scheduleService.refreshScheduleStatus(Long.parseLong(o.getJobName()));
7878
// Trigger the data-delete job if necessary after the data-archive task is completed.
7979
if (parameters.getJobType() == com.oceanbase.tools.migrator.common.enums.JobType.MIGRATE
80-
&& parameters.isDeleteAfterMigration()) {
80+
&& parameters.isDeleteAfterMigration() && taskStatus == TaskStatus.DONE) {
8181
scheduleService.dataArchiveDelete(Long.parseLong(o.getJobName()), o.getId());
8282
log.info("Trigger delete job succeed.");
8383
}

0 commit comments

Comments
 (0)