You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by pa...@apache.org on 2021/05/30 07:21:22 UTC

[shardingsphere] branch master updated: Fix scaling get progress error (#10548)

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 <64...@users.noreply.github.com>
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();