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]