diff --git a/polardbx-executor/src/main/java/com/alibaba/polardbx/executor/ddl/job/meta/TableMetaChanger.java b/polardbx-executor/src/main/java/com/alibaba/polardbx/executor/ddl/job/meta/TableMetaChanger.java index 11c69d5d3..91d5deb13 100644 --- a/polardbx-executor/src/main/java/com/alibaba/polardbx/executor/ddl/job/meta/TableMetaChanger.java +++ b/polardbx-executor/src/main/java/com/alibaba/polardbx/executor/ddl/job/meta/TableMetaChanger.java @@ -353,6 +353,7 @@ public static void renamePartitionTableMeta(Connection metaDbConn, String schema String tableListDataId = MetaDbDataIdBuilder.getTableListDataId(schemaName); String tableDataId = MetaDbDataIdBuilder.getTableDataId(schemaName, logicalTableName); String newTableDataId = MetaDbDataIdBuilder.getTableDataId(schemaName, newLogicalTableName); + boolean renamePhyTable = executionContext.needToRenamePhyTables(); // Rename sequence if exists. SequenceBaseRecord sequenceRecord = null; @@ -365,9 +366,13 @@ public static void renamePartitionTableMeta(Connection metaDbConn, String schema TableInfoManager tableInfoManager = new TableInfoManager(); tableInfoManager.setConnection(metaDbConn); + // Replace with new physical table name + if (renamePhyTable) { + tableInfoManager.renamePartitionTablePhyTable(schemaName, logicalTableName, newLogicalTableName); + } + // Replace with new table name - tableInfoManager - .renamePartitionTable(schemaName, logicalTableName, newLogicalTableName, sequenceRecord); + tableInfoManager.renamePartitionTable(schemaName, logicalTableName, newLogicalTableName, sequenceRecord); // Unregister the old table data id. CONFIG_MANAGER.unregister(tableDataId, metaDbConn); diff --git a/polardbx-gms/src/main/java/com/alibaba/polardbx/gms/metadb/table/TableInfoManager.java b/polardbx-gms/src/main/java/com/alibaba/polardbx/gms/metadb/table/TableInfoManager.java index ba20204fe..e27515a81 100644 --- a/polardbx-gms/src/main/java/com/alibaba/polardbx/gms/metadb/table/TableInfoManager.java +++ b/polardbx-gms/src/main/java/com/alibaba/polardbx/gms/metadb/table/TableInfoManager.java @@ -38,7 +38,9 @@ import com.alibaba.polardbx.gms.partition.TableLocalPartitionRecord; import com.alibaba.polardbx.gms.partition.TablePartRecordInfoContext; import com.alibaba.polardbx.gms.partition.TablePartitionAccessor; +import com.alibaba.polardbx.gms.partition.TablePartitionConfig; import com.alibaba.polardbx.gms.partition.TablePartitionRecord; +import com.alibaba.polardbx.gms.partition.TablePartitionSpecConfig; import com.alibaba.polardbx.gms.scheduler.FiredScheduledJobsAccessor; import com.alibaba.polardbx.gms.scheduler.ScheduledJobsAccessor; import com.alibaba.polardbx.gms.scheduler.ScheduledJobsRecord; @@ -729,6 +731,16 @@ public void renamePartitionTable(String tableSchema, String tableName, String ne } } + public void renamePartitionTablePhyTable(String tableSchema, String tableName, String newTableName) { + TablePartitionConfig tablePartitionConfig = + tablePartitionAccessor.getTablePartitionConfig(tableSchema, tableName, false); + for (TablePartitionSpecConfig item : tablePartitionConfig.getPartitionSpecConfigs()) { + String phyTableName = item.getSpecConfigInfo().phyTable; + String newPhyTableName = TStringUtil.replaceWithIgnoreCase(phyTableName, tableName, newTableName); + tablePartitionAccessor.renamePhyTableName(item.getSpecConfigInfo().id, newPhyTableName); + } + } + public void setMultiWriteSourceColumn(String tableSchema, String tableName, String columnsName) { columnsAccessor.updateStatus(tableSchema, tableName, ImmutableList.of(columnsName), ColumnStatus.MULTI_WRITE_SOURCE.getValue()); diff --git a/polardbx-gms/src/main/java/com/alibaba/polardbx/gms/partition/TablePartitionAccessor.java b/polardbx-gms/src/main/java/com/alibaba/polardbx/gms/partition/TablePartitionAccessor.java index ddcc275ec..b89131155 100644 --- a/polardbx-gms/src/main/java/com/alibaba/polardbx/gms/partition/TablePartitionAccessor.java +++ b/polardbx-gms/src/main/java/com/alibaba/polardbx/gms/partition/TablePartitionAccessor.java @@ -178,6 +178,9 @@ public class TablePartitionAccessor extends AbstractAccessor { private static final String UPDATE_TABLES_RENAME = "update table_partitions set `table_name` = ? where table_schema=? and table_name=? "; + private static final String UPDATE_RENAME_PHYSICAL_TABLE = + "update table_partitions set `phy_table` = ? where id = ? "; + private static final String GET_TABLE_PARTITIONS_BY_GID_AND_PART_FROM_DELTA_TABLE = "select " + ALL_COLUMNS + " from " + GmsSystemTables.TABLE_PARTITIONS_DELTA + " where table_schema=? and group_id=? and part_name=? and part_level<>0"; @@ -1182,6 +1185,20 @@ public void rename(String tableSchema, String tableName, String newTableName) { } } + public void renamePhyTableName(Long id, String newPhyTableName) { + try { + Map params = new HashMap<>(); + MetaDbUtil.setParameter(1, params, ParameterMethod.setString, newPhyTableName); + MetaDbUtil.setParameter(2, params, ParameterMethod.setLong, id); + MetaDbUtil.update(UPDATE_RENAME_PHYSICAL_TABLE, params, connection); + return; + } catch (Exception e) { + logger.error("Failed to query the system table 'table_partitions'", e); + throw new TddlRuntimeException(ErrorCode.ERR_GMS_ACCESS_TO_SYSTEM_TABLE, e, + e.getMessage()); + } + } + private TablePartitionConfig getTablePartitionConfigInner(String dbName, String tbName, Connection metaDbConn, boolean fromDeltaTable, boolean publicOnly) {