Skip to content

Commit c461bcd

Browse files
authored
feat(dlm): supports sharding using unique indexes (#1327)
* DLM supports sharding using unique indexes * upgrade sdk to snapshot version. * fix shard key validator * upgrade sdk to 1.0.9
1 parent 56cd7de commit c461bcd

3 files changed

Lines changed: 8 additions & 8 deletions

File tree

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@
119119
<mina.version>2.1.6</mina.version>
120120

121121
<!-- data-lifecycle-manager version -->
122-
<data-lifecycle-manager.version>1.0.8</data-lifecycle-manager.version>
122+
<data-lifecycle-manager.version>1.0.9</data-lifecycle-manager.version>
123123

124124
<!-- plugin version -->
125125
<formatter-maven-plugin.version>2.11.0</formatter-maven-plugin.version>

server/odc-service/src/main/java/com/oceanbase/odc/service/dlm/DataSourceInfoBuilder.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,15 +45,15 @@ public static DataSourceInfo build(ConnectionConfig connectionConfig) {
4545
dataSourceInfo.setIp(connectionConfig.getHost());
4646
dataSourceInfo.setPort(connectionConfig.getPort());
4747
dataSourceInfo.setFullUserName(connectionConfig.getUsername());
48-
dataSourceInfo.setDbType(DataBaseType.MYSQL.name());
48+
dataSourceInfo.setDatabaseType(DataBaseType.MYSQL);
4949
break;
5050
}
5151
case OB_MYSQL: {
5252
dataSourceInfo
5353
.setObProxy(String.format("%s:%s", connectionConfig.getHost(), connectionConfig.getPort()));
5454
dataSourceInfo
5555
.setFullUserName(OBConsoleDataSourceFactory.getUsername(connectionConfig));
56-
dataSourceInfo.setDbType(DataBaseType.OCEANBASEV10.name());
56+
dataSourceInfo.setDatabaseType(DataBaseType.OCEANBASEV10);
5757
dataSourceInfo.setSysUser(connectionConfig.getSysTenantUsername());
5858
dataSourceInfo.setClusterName(connectionConfig.getClusterName());
5959
if (StringUtils.isNotEmpty(connectionConfig.getSysTenantPassword())) {

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

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ public ScheduleEntity buildScheduleEntity(CreateFlowInstanceReq req) {
7878
public void checkTableAndCondition(ConnectionSession connectionSession, Database sourceDb,
7979
List<DataArchiveTableConfig> tables,
8080
List<OffsetConfig> variables) {
81-
checkPrimaryKey(connectionSession, sourceDb.getName(), tables);
81+
checkShardKey(connectionSession, sourceDb.getName(), tables);
8282
Map<DataArchiveTableConfig, String> sqlMap = getDataArchiveSqls(sourceDb, tables, variables);
8383
checkDataArchiveSql(connectionSession, sqlMap);
8484
}
@@ -89,14 +89,14 @@ public void checkDatasource(ConnectionConfig datasource) {
8989
}
9090
}
9191

92-
private void checkPrimaryKey(ConnectionSession connectionSession, String databaseName,
92+
private void checkShardKey(ConnectionSession connectionSession, String databaseName,
9393
List<DataArchiveTableConfig> tables) {
9494
SyncJdbcExecutor syncJdbcExecutor = connectionSession.getSyncJdbcExecutor(
9595
ConnectionSessionConstants.CONSOLE_DS_KEY);
9696
SqlBuilder sqlBuilder = new MySQLSqlBuilder();
97-
sqlBuilder.append("select table_name from information_schema.COLUMNS where ");
98-
sqlBuilder.append(String.format("table_schema='%s' ", databaseName));
99-
sqlBuilder.append("and column_key = 'PRI' group by table_name;");
97+
sqlBuilder.append(
98+
"SELECT TABLE_NAME from INFORMATION_SCHEMA.STATISTICS where NON_UNIQUE = 0 AND NULLABLE != 'YES' ");
99+
sqlBuilder.append(String.format("AND TABLE_SCHEMA='%s' GROUP BY TABLE_NAME", databaseName));
100100
HashSet<String> tableNames =
101101
new HashSet<>(syncJdbcExecutor.query(sqlBuilder.toString(), (rs, num) -> rs.getString(1)));
102102
tables.forEach(tableConfig -> {

0 commit comments

Comments
 (0)