This is an automated email from the ASF dual-hosted git repository.

morningman pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-doris.git


The following commit(s) were added to refs/heads/master by this push:
     new 8c179bb  [fix](alter) fix sql analyzed failed after increase the 
default bucket num of the table. (#7932)
8c179bb is described below

commit 8c179bb09f77b9fb353c610172db373251c1a47c
Author: spaces-x <[email protected]>
AuthorDate: Mon Jan 31 22:16:08 2022 +0800

    [fix](alter) fix sql analyzed failed after increase the default bucket num 
of the table. (#7932)
    
    Distribution info of partitions are deep copied from olapTable.
---
 .../java/org/apache/doris/catalog/Catalog.java     | 15 ++++++-----
 .../apache/doris/catalog/CreateTableLikeTest.java  | 29 ++++++++++++++++++++++
 2 files changed, 38 insertions(+), 6 deletions(-)

diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/Catalog.java 
b/fe/fe-core/src/main/java/org/apache/doris/catalog/Catalog.java
index 71db912..e3df699 100755
--- a/fe/fe-core/src/main/java/org/apache/doris/catalog/Catalog.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/Catalog.java
@@ -3254,7 +3254,8 @@ public class Catalog {
                     }
                 }
             } else {
-                distributionInfo = defaultDistributionInfo;
+                // make sure partition-dristribution-info is deep copied from 
default-distribution-info
+                distributionInfo = 
defaultDistributionInfo.toDistributionDesc().toDistributionInfo(baseSchema);
             }
 
             // check colocation
@@ -3694,7 +3695,7 @@ public class Catalog {
         // create distribution info
         DistributionDesc distributionDesc = stmt.getDistributionDesc();
         Preconditions.checkNotNull(distributionDesc);
-        DistributionInfo distributionInfo = 
distributionDesc.toDistributionInfo(baseSchema);
+        DistributionInfo defaultDistributionInfo = 
distributionDesc.toDistributionInfo(baseSchema);
 
         // calc short key column count
         short shortKeyColumnCount = 
Catalog.calcShortKeyColumnCount(baseSchema, stmt.getProperties());
@@ -3706,7 +3707,7 @@ public class Catalog {
         // create table
         long tableId = Catalog.getCurrentCatalog().getNextId();
         OlapTable olapTable = new OlapTable(tableId, tableName, baseSchema, 
keysType, partitionInfo,
-                distributionInfo, indexes);
+                defaultDistributionInfo, indexes);
         olapTable.setComment(stmt.getComment());
 
         // set base index id
@@ -3879,12 +3880,13 @@ public class Catalog {
             if (partitionInfo.getType() == PartitionType.UNPARTITIONED) {
                 // this is a 1-level partitioned table
                 // use table name as partition name
+                DistributionInfo partitionDistributionInfo = 
distributionDesc.toDistributionInfo(baseSchema);
                 String partitionName = tableName;
                 long partitionId = partitionNameToId.get(partitionName);
 
                 // check replica quota if this operation done
                 long indexNum = olapTable.getIndexIdToMeta().size();
-                long bucketNum = distributionInfo.getBucketNum();
+                long bucketNum = partitionDistributionInfo.getBucketNum();
                 long replicaNum = 
partitionInfo.getReplicaAllocation(partitionId).getTotalReplicaNum();
                 long totalReplicaNum = indexNum * bucketNum * replicaNum;
                 if (totalReplicaNum >= db.getReplicaQuotaLeftWithLock()) {
@@ -3897,7 +3899,7 @@ public class Catalog {
                         olapTable.getId(), olapTable.getBaseIndexId(),
                         partitionId, partitionName,
                         olapTable.getIndexIdToMeta(),
-                        distributionInfo,
+                        partitionDistributionInfo,
                         
partitionInfo.getDataProperty(partitionId).getStorageMedium(),
                         partitionInfo.getReplicaAllocation(partitionId),
                         versionInfo, bfColumns, bfFpp,
@@ -3944,9 +3946,10 @@ public class Catalog {
                 // this is a 2-level partitioned tables
                 for (Map.Entry<String, Long> entry : 
partitionNameToId.entrySet()) {
                     DataProperty dataProperty = 
partitionInfo.getDataProperty(entry.getValue());
+                    DistributionInfo partitionDistributionInfo = 
distributionDesc.toDistributionInfo(baseSchema);
                     Partition partition = 
createPartitionWithIndices(db.getClusterName(), db.getId(), olapTable.getId(),
                             olapTable.getBaseIndexId(), entry.getValue(), 
entry.getKey(),
-                            olapTable.getIndexIdToMeta(), distributionInfo,
+                            olapTable.getIndexIdToMeta(), 
partitionDistributionInfo,
                             dataProperty.getStorageMedium(),
                             
partitionInfo.getReplicaAllocation(entry.getValue()),
                             versionInfo, bfColumns, bfFpp,
diff --git 
a/fe/fe-core/src/test/java/org/apache/doris/catalog/CreateTableLikeTest.java 
b/fe/fe-core/src/test/java/org/apache/doris/catalog/CreateTableLikeTest.java
index 25d0cd5..13a32d5 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/catalog/CreateTableLikeTest.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/catalog/CreateTableLikeTest.java
@@ -134,6 +134,35 @@ public class CreateTableLikeTest {
     }
 
     @Test
+    public void testDeepCopyOfDistributionInfo() throws Exception {
+        String createTableSql = "CREATE TABLE IF NOT EXISTS 
test.bucket_distribution_test (\n" +
+                "  `dt` bigint(20) NULL COMMENT \"\",\n" +
+                "  `id1` bigint(20) NULL COMMENT \"\",\n" +
+                "  `last_time` varchar(20) MAX NULL COMMENT \"\"\n" +
+                ") ENGINE=OLAP\n" +
+                "AGGREGATE KEY(`dt`, `id1`) \n" +
+                "PARTITION BY RANGE(`dt`) \n" +
+                "(\n" +
+                "    PARTITION p1 VALUES  [(\"20220101\"),(\"20220201\")),\n" +
+                "    partition p2 VALUES  [(\"20211201\"),(\"20220101\"))\n" +
+                ")\n" +
+                "DISTRIBUTED BY HASH(`id1`) BUCKETS 1\n" +
+                "PROPERTIES (\n" +
+                "\"replication_num\" = \"1\"\n" +
+                ");";
+        createTable(createTableSql);
+        Database db = 
Catalog.getCurrentCatalog().getDbOrMetaException("default_cluster:test");
+        OlapTable table = (OlapTable) 
db.getTableOrDdlException("bucket_distribution_test");
+        DistributionInfo default_info = table.getDefaultDistributionInfo();
+        DistributionInfo previous = null;
+        for (Partition p : table.getPartitions()) {
+            Assert.assertFalse(p.getDistributionInfo() == default_info);
+            Assert.assertFalse(p.getDistributionInfo() == previous);
+            previous = p.getDistributionInfo();
+        }
+    }
+
+    @Test
     public void testNormal() throws Exception {
         // 1. creat table with single partition
         String createTableSql = "create table test.testTbl1\n" + "(k1 int, k2 
int)\n" + "duplicate key(k1)\n"

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to