This is an automated email from the ASF dual-hosted git repository.
panjuan 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 b0c25df Fix scaling get progress error (#10548)
b0c25df is described below
commit b0c25dff90f76a0c9c74e5606470e8a6aa4b71bb
Author: avalon5666 <[email protected]>
AuthorDate: Sun May 30 15:20:46 2021 +0800
Fix scaling get progress error (#10548)
---
.../job/preparer/splitter/InventoryTaskSplitter.java | 4 ++++
.../preparer/splitter/InventoryTaskSplitterTest.java | 20 ++++++++++++++++++++
2 files changed, 24 insertions(+)
diff --git
a/shardingsphere-scaling/shardingsphere-scaling-core/src/main/java/org/apache/shardingsphere/scaling/core/job/preparer/splitter/InventoryTaskSplitter.java
b/shardingsphere-scaling/shardingsphere-scaling-core/src/main/java/org/apache/shardingsphere/scaling/core/job/preparer/splitter/InventoryTaskSplitter.java
index e5d2df6..87561b1 100644
---
a/shardingsphere-scaling/shardingsphere-scaling-core/src/main/java/org/apache/shardingsphere/scaling/core/job/preparer/splitter/InventoryTaskSplitter.java
+++
b/shardingsphere-scaling/shardingsphere-scaling-core/src/main/java/org/apache/shardingsphere/scaling/core/job/preparer/splitter/InventoryTaskSplitter.java
@@ -165,6 +165,10 @@ public final class InventoryTaskSplitter {
beginId = endId + 1;
}
}
+ // fix empty table missing inventory task
+ if (0 == result.size()) {
+ result.add(new PrimaryKeyPosition(0, 0));
+ }
} catch (final SQLException ex) {
throw new PrepareFailedException(String.format("Split task for
table %s by primary key %s error", dumperConfig.getTableName(),
dumperConfig.getPrimaryKey()), ex);
}
diff --git
a/shardingsphere-scaling/shardingsphere-scaling-core/src/test/java/org/apache/shardingsphere/scaling/core/job/preparer/splitter/InventoryTaskSplitterTest.java
b/shardingsphere-scaling/shardingsphere-scaling-core/src/test/java/org/apache/shardingsphere/scaling/core/job/preparer/splitter/InventoryTaskSplitterTest.java
index 518e7b7..52586ab 100644
---
a/shardingsphere-scaling/shardingsphere-scaling-core/src/test/java/org/apache/shardingsphere/scaling/core/job/preparer/splitter/InventoryTaskSplitterTest.java
+++
b/shardingsphere-scaling/shardingsphere-scaling-core/src/test/java/org/apache/shardingsphere/scaling/core/job/preparer/splitter/InventoryTaskSplitterTest.java
@@ -56,6 +56,17 @@ public final class InventoryTaskSplitterTest {
}
@Test
+ public void assertSplitInventoryDataWithEmptyTable() throws SQLException {
+ taskConfig.getHandleConfig().setShardingSize(10);
+ initEmptyTablePrimaryEnvironment(taskConfig.getDumperConfig());
+ List<InventoryTask> actual =
inventoryTaskSplitter.splitInventoryData(jobContext, taskConfig,
dataSourceManager);
+ assertNotNull(actual);
+ assertThat(actual.size(), is(1));
+ assertThat(((PrimaryKeyPosition)
actual.get(0).getProgress().getPosition()).getBeginValue(), is(0L));
+ assertThat(((PrimaryKeyPosition)
actual.get(0).getProgress().getPosition()).getEndValue(), is(0L));
+ }
+
+ @Test
public void assertSplitInventoryDataWithIntPrimary() throws SQLException {
taskConfig.getHandleConfig().setShardingSize(10);
initIntPrimaryEnvironment(taskConfig.getDumperConfig());
@@ -95,6 +106,15 @@ public final class InventoryTaskSplitterTest {
dataSourceManager.close();
}
+ private void initEmptyTablePrimaryEnvironment(final DumperConfiguration
dumperConfig) throws SQLException {
+ DataSource dataSource =
dataSourceManager.getDataSource(dumperConfig.getDataSourceConfig());
+ try (Connection connection = dataSource.getConnection();
+ Statement statement = connection.createStatement()) {
+ statement.execute("DROP TABLE IF EXISTS t_order");
+ statement.execute("CREATE TABLE t_order (id INT PRIMARY KEY,
user_id VARCHAR(12))");
+ }
+ }
+
private void initIntPrimaryEnvironment(final DumperConfiguration
dumperConfig) throws SQLException {
DataSource dataSource =
dataSourceManager.getDataSource(dumperConfig.getDataSourceConfig());
try (Connection connection = dataSource.getConnection();