This is an automated email from the ASF dual-hosted git repository.
dataroaring pushed a commit to branch branch-2.1
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-2.1 by this push:
new 6d545273957 [fix](dynamic partition) fix dynamic partition thread met
uncatch exception #35778 (#36166)
6d545273957 is described below
commit 6d5452739573250b87fd37587f4356156999d446
Author: yujun <[email protected]>
AuthorDate: Wed Jun 12 22:16:51 2024 +0800
[fix](dynamic partition) fix dynamic partition thread met uncatch exception
#35778 (#36166)
cherry pick from #35778
---
.../apache/doris/catalog/ColocateGroupSchema.java | 5 +-
.../doris/clone/DynamicPartitionScheduler.java | 91 ++++++++++++++--------
.../java/org/apache/doris/common/ErrorCode.java | 4 +-
.../doris/common/util/DynamicPartitionUtil.java | 23 +++---
.../java/org/apache/doris/alter/AlterTest.java | 10 ++-
.../apache/doris/catalog/ColocateTableTest.java | 4 +-
.../doris/catalog/DynamicPartitionTableTest.java | 20 +++++
.../test_dynamic_partition_failed.groovy | 74 ++++++++++++++++++
8 files changed, 181 insertions(+), 50 deletions(-)
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/catalog/ColocateGroupSchema.java
b/fe/fe-core/src/main/java/org/apache/doris/catalog/ColocateGroupSchema.java
index 40b3405069d..72ed921633a 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/catalog/ColocateGroupSchema.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/ColocateGroupSchema.java
@@ -89,12 +89,13 @@ public class ColocateGroupSchema implements Writable {
HashDistributionInfo info = (HashDistributionInfo)
distributionInfo;
// buckets num
if (info.getBucketNum() != bucketsNum) {
-
ErrorReport.reportDdlException(ErrorCode.ERR_COLOCATE_TABLE_MUST_HAS_SAME_BUCKET_NUM,
bucketsNum);
+
ErrorReport.reportDdlException(ErrorCode.ERR_COLOCATE_TABLE_MUST_HAS_SAME_BUCKET_NUM,
+ info.getBucketNum(), bucketsNum);
}
// distribution col size
if (info.getDistributionColumns().size() !=
distributionColTypes.size()) {
ErrorReport.reportDdlException(ErrorCode.ERR_COLOCATE_TABLE_MUST_HAS_SAME_DISTRIBUTION_COLUMN_SIZE,
- distributionColTypes.size());
+ info.getDistributionColumns().size(),
distributionColTypes.size());
}
// distribution col type
for (int i = 0; i < distributionColTypes.size(); i++) {
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/clone/DynamicPartitionScheduler.java
b/fe/fe-core/src/main/java/org/apache/doris/clone/DynamicPartitionScheduler.java
index 7c884b6fee6..8c5f4f669c5 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/clone/DynamicPartitionScheduler.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/clone/DynamicPartitionScheduler.java
@@ -40,7 +40,6 @@ import org.apache.doris.catalog.PartitionKey;
import org.apache.doris.catalog.RangePartitionInfo;
import org.apache.doris.catalog.RangePartitionItem;
import org.apache.doris.catalog.Table;
-import org.apache.doris.common.AnalysisException;
import org.apache.doris.common.Config;
import org.apache.doris.common.DdlException;
import org.apache.doris.common.FeConstants;
@@ -102,9 +101,9 @@ public class DynamicPartitionScheduler extends MasterDaemon
{
this.initialize = false;
}
- public void executeDynamicPartitionFirstTime(Long dbId, Long tableId) {
+ public void executeDynamicPartitionFirstTime(Long dbId, Long tableId)
throws DdlException {
List<Pair<Long, Long>> tempDynamicPartitionTableInfo =
Lists.newArrayList(Pair.of(dbId, tableId));
- executeDynamicPartition(tempDynamicPartitionTableInfo);
+ executeDynamicPartition(tempDynamicPartitionTableInfo, true);
}
public void registerDynamicPartitionTable(Long dbId, Long tableId) {
@@ -186,8 +185,10 @@ public class DynamicPartitionScheduler extends
MasterDaemon {
}
}
- private static int getBucketsNum(DynamicPartitionProperty property,
OlapTable table, String nowPartitionName) {
- if (!table.isAutoBucket()) {
+ private static int getBucketsNum(DynamicPartitionProperty property,
OlapTable table,
+ String nowPartitionName, boolean executeFirstTime) {
+ // if execute first time, all partitions no contain data
+ if (!table.isAutoBucket() || executeFirstTime) {
return property.getBuckets();
}
@@ -217,7 +218,7 @@ public class DynamicPartitionScheduler extends MasterDaemon
{
}
private ArrayList<AddPartitionClause> getAddPartitionClause(Database db,
OlapTable olapTable,
- Column partitionColumn, String partitionFormat) {
+ Column partitionColumn, String partitionFormat, boolean
executeFirstTime) throws DdlException {
ArrayList<AddPartitionClause> addPartitionClauses = new ArrayList<>();
DynamicPartitionProperty dynamicPartitionProperty =
olapTable.getTableProperty().getDynamicPartitionProperty();
RangePartitionInfo rangePartitionInfo = (RangePartitionInfo)
olapTable.getPartitionInfo();
@@ -225,15 +226,10 @@ public class DynamicPartitionScheduler extends
MasterDaemon {
boolean createHistoryPartition =
dynamicPartitionProperty.isCreateHistoryPartition();
int idx;
- int start = dynamicPartitionProperty.getStart();
- int historyPartitionNum =
dynamicPartitionProperty.getHistoryPartitionNum();
// When enable create_history_partition, will check the valid value
from start and history_partition_num.
if (createHistoryPartition) {
- if (historyPartitionNum ==
DynamicPartitionProperty.NOT_SET_HISTORY_PARTITION_NUM) {
- idx = start;
- } else {
- idx = Math.max(start, -historyPartitionNum);
- }
+ idx =
DynamicPartitionUtil.getRealStart(dynamicPartitionProperty.getStart(),
+ dynamicPartitionProperty.getHistoryPartitionNum());
} else {
idx = 0;
}
@@ -262,12 +258,14 @@ public class DynamicPartitionScheduler extends
MasterDaemon {
PartitionKey upperBound =
PartitionKey.createPartitionKey(Collections.singletonList(upperValue),
Collections.singletonList(partitionColumn));
addPartitionKeyRange = Range.closedOpen(lowerBound,
upperBound);
- } catch (AnalysisException | IllegalArgumentException e) {
+ } catch (Exception e) {
// AnalysisException: keys.size is always equal to
column.size, cannot reach this exception
// IllegalArgumentException: lb is greater than ub
- LOG.warn("Error in gen addPartitionKeyRange. Error={}, db: {},
table: {}", e.getMessage(),
- db.getFullName(), olapTable.getName());
- continue;
+ LOG.warn("Error in gen addPartitionKeyRange. db: {}, table:
{}, partition idx: {}",
+ db.getFullName(), olapTable.getName(), idx, e);
+ recordCreatePartitionFailedMsg(db.getFullName(),
olapTable.getName(),
+ e.getMessage(), olapTable.getId());
+ throw new DdlException(e.getMessage());
}
for (PartitionItem partitionItem :
rangePartitionInfo.getIdToItem(false).values()) {
// only support single column partition now
@@ -277,13 +275,16 @@ public class DynamicPartitionScheduler extends
MasterDaemon {
isPartitionExists = true;
if (addPartitionKeyRange.equals(partitionItem.getItems()))
{
if (LOG.isDebugEnabled()) {
- LOG.debug("partition range {} exist in table {},
clear fail msg",
- addPartitionKeyRange, olapTable.getName());
+ LOG.debug("partition range {} exist in db {} table
{} partition idx {}, clear fail msg",
+ addPartitionKeyRange, db.getFullName(),
olapTable.getName(), idx);
}
clearCreatePartitionFailedMsg(olapTable.getId());
} else {
+ LOG.warn("check partition range {} in db {} table {}
partiton idx {} fail",
+ addPartitionKeyRange, db.getFullName(),
olapTable.getName(), idx, e);
recordCreatePartitionFailedMsg(db.getFullName(),
olapTable.getName(),
e.getMessage(), olapTable.getId());
+ throw new DdlException(e.getMessage());
}
break;
}
@@ -319,7 +320,7 @@ public class DynamicPartitionScheduler extends MasterDaemon
{
DistributionDesc distributionDesc = null;
DistributionInfo distributionInfo =
olapTable.getDefaultDistributionInfo();
- int bucketsNum = getBucketsNum(dynamicPartitionProperty,
olapTable, nowPartitionName);
+ int bucketsNum = getBucketsNum(dynamicPartitionProperty,
olapTable, nowPartitionName, executeFirstTime);
if (distributionInfo.getType() ==
DistributionInfo.DistributionInfoType.HASH) {
HashDistributionInfo hashDistributionInfo =
(HashDistributionInfo) distributionInfo;
List<String> distColumnNames = new ArrayList<>();
@@ -393,11 +394,11 @@ public class DynamicPartitionScheduler extends
MasterDaemon {
PartitionKey upperBorderBound = PartitionKey.createPartitionKey(
Collections.singletonList(upperBorderPartitionValue),
Collections.singletonList(partitionColumn));
reservedHistoryPartitionKeyRange = Range.closed(lowerBorderBound,
upperBorderBound);
- } catch (AnalysisException e) {
+ } catch (org.apache.doris.common.AnalysisException |
org.apache.doris.nereids.exceptions.AnalysisException e) {
// AnalysisException: keys.size is always equal to column.size,
cannot reach this exception
// IllegalArgumentException: lb is greater than ub
- LOG.warn("Error in gen reservePartitionKeyRange. Error={}, db: {},
table: {}", e.getMessage(),
- db.getFullName(), olapTable.getName());
+ LOG.warn("Error in gen reservePartitionKeyRange. {}, table: {}",
+ db.getFullName(), olapTable.getName(), e);
}
return reservedHistoryPartitionKeyRange;
}
@@ -415,9 +416,11 @@ public class DynamicPartitionScheduler extends
MasterDaemon {
return dropPartitionClauses;
}
+ int realStart =
DynamicPartitionUtil.getRealStart(dynamicPartitionProperty.getStart(),
+ dynamicPartitionProperty.getHistoryPartitionNum());
ZonedDateTime now =
ZonedDateTime.now(dynamicPartitionProperty.getTimeZone().toZoneId());
String lowerBorder =
DynamicPartitionUtil.getPartitionRangeString(dynamicPartitionProperty,
- now, dynamicPartitionProperty.getStart(), partitionFormat);
+ now, realStart, partitionFormat);
PartitionValue lowerPartitionValue = new PartitionValue(lowerBorder);
List<Range<PartitionKey>> reservedHistoryPartitionKeyRangeList = new
ArrayList<Range<PartitionKey>>();
Range<PartitionKey> reservePartitionKeyRange;
@@ -426,11 +429,12 @@ public class DynamicPartitionScheduler extends
MasterDaemon {
Collections.singletonList(partitionColumn));
reservePartitionKeyRange = Range.atLeast(lowerBound);
reservedHistoryPartitionKeyRangeList.add(reservePartitionKeyRange);
- } catch (AnalysisException | IllegalArgumentException e) {
+ } catch (Exception e) {
// AnalysisException: keys.size is always equal to column.size,
cannot reach this exception
// IllegalArgumentException: lb is greater than ub
- LOG.warn("Error in gen reservePartitionKeyRange. Error={}, db: {},
table: {}", e.getMessage(),
- db.getFullName(), olapTable.getName());
+ LOG.warn("Error in gen reservePartitionKeyRange. db: {}, table:
{}",
+ db.getFullName(), olapTable.getName(), e);
+ recordDropPartitionFailedMsg(db.getFullName(),
olapTable.getName(), e.getMessage(), olapTable.getId());
return dropPartitionClauses;
}
@@ -451,7 +455,8 @@ public class DynamicPartitionScheduler extends MasterDaemon
{
reservedHistoryPartitionKeyRangeList.add(reservedHistoryPartitionKeyRange);
} catch (IllegalArgumentException e) {
return dropPartitionClauses;
- } catch (AnalysisException e) {
+ } catch (org.apache.doris.common.AnalysisException
+ |
org.apache.doris.nereids.exceptions.AnalysisException e) {
throw new DdlException(e.getMessage());
}
}
@@ -483,7 +488,8 @@ public class DynamicPartitionScheduler extends MasterDaemon
{
return dropPartitionClauses;
}
- private void executeDynamicPartition(Collection<Pair<Long, Long>>
dynamicPartitionTableInfoCol) {
+ private void executeDynamicPartition(Collection<Pair<Long, Long>>
dynamicPartitionTableInfoCol,
+ boolean executeFirstTime) throws DdlException {
Iterator<Pair<Long, Long>> iterator =
dynamicPartitionTableInfoCol.iterator();
while (iterator.hasNext()) {
Pair<Long, Long> tableInfo = iterator.next();
@@ -543,12 +549,16 @@ public class DynamicPartitionScheduler extends
MasterDaemon {
}
if (!skipAddPartition) {
- addPartitionClauses = getAddPartitionClause(db, olapTable,
partitionColumn, partitionFormat);
+ addPartitionClauses = getAddPartitionClause(db, olapTable,
partitionColumn, partitionFormat,
+ executeFirstTime);
}
dropPartitionClauses = getDropPartitionClause(db, olapTable,
partitionColumn, partitionFormat);
tableName = olapTable.getName();
- } catch (DdlException e) {
- LOG.warn("should not happen", e);
+ } catch (Exception e) {
+ LOG.warn("has error", e);
+ if (executeFirstTime) {
+ throw new DdlException(e.getMessage());
+ }
} finally {
olapTable.readUnlock();
}
@@ -562,6 +572,10 @@ public class DynamicPartitionScheduler extends
MasterDaemon {
clearDropPartitionFailedMsg(olapTable.getId());
} catch (Exception e) {
recordDropPartitionFailedMsg(db.getFullName(), tableName,
e.getMessage(), olapTable.getId());
+ LOG.warn("has error", e);
+ if (executeFirstTime) {
+ throw new DdlException(e.getMessage());
+ }
} finally {
olapTable.writeUnlock();
}
@@ -574,6 +588,10 @@ public class DynamicPartitionScheduler extends
MasterDaemon {
clearCreatePartitionFailedMsg(olapTable.getId());
} catch (Exception e) {
recordCreatePartitionFailedMsg(db.getFullName(),
tableName, e.getMessage(), olapTable.getId());
+ LOG.warn("has error", e);
+ if (executeFirstTime) {
+ throw new DdlException(e.getMessage());
+ }
}
}
}
@@ -631,7 +649,14 @@ public class DynamicPartitionScheduler extends
MasterDaemon {
}
setInterval(Config.dynamic_partition_check_interval_seconds * 1000L);
if (Config.dynamic_partition_enable) {
- executeDynamicPartition(dynamicPartitionTableInfo);
+ try {
+ executeDynamicPartition(dynamicPartitionTableInfo, false);
+ } catch (Exception e) {
+ // previous had log DdlException
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("dynamic partition has error: ", e);
+ }
+ }
}
}
}
diff --git a/fe/fe-core/src/main/java/org/apache/doris/common/ErrorCode.java
b/fe/fe-core/src/main/java/org/apache/doris/common/ErrorCode.java
index 51bece5c800..c1c24baead3 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/common/ErrorCode.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/common/ErrorCode.java
@@ -1121,9 +1121,9 @@ public enum ErrorCode {
ERR_COLOCATE_TABLE_MUST_HAS_SAME_REPLICATION_ALLOCATION(5063, new
byte[]{'4', '2', '0', '0', '0'},
"Colocate tables must have same replication allocation: { %s }
should be { %s }"),
ERR_COLOCATE_TABLE_MUST_HAS_SAME_BUCKET_NUM(5063, new byte[]{'4', '2',
'0', '0', '0'},
- "Colocate tables must have same bucket num: %s"),
+ "Colocate tables must have same bucket num: %s should be %s"),
ERR_COLOCATE_TABLE_MUST_HAS_SAME_DISTRIBUTION_COLUMN_SIZE(5063, new
byte[]{'4', '2', '0', '0', '0'},
- "Colocate tables distribution columns size must be same : %s"),
+ "Colocate tables distribution columns size must be same: %s should
be %s"),
ERR_COLOCATE_TABLE_MUST_HAS_SAME_DISTRIBUTION_COLUMN_TYPE(5063, new
byte[]{'4', '2', '0', '0', '0'},
"Colocate tables distribution columns must have the same data
type: %s should be %s"),
ERR_COLOCATE_NOT_COLOCATE_TABLE(5064, new byte[]{'4', '2', '0', '0', '0'},
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/common/util/DynamicPartitionUtil.java
b/fe/fe-core/src/main/java/org/apache/doris/common/util/DynamicPartitionUtil.java
index fe29dfe7eea..6f001ddb2d4 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/common/util/DynamicPartitionUtil.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/common/util/DynamicPartitionUtil.java
@@ -583,21 +583,18 @@ public class DynamicPartitionUtil {
long expectCreatePartitionNum = 0;
if (!createHistoryPartition) {
start = 0;
- expectCreatePartitionNum = (long) end - start;
} else {
int historyPartitionNum =
Integer.parseInt(analyzedProperties.getOrDefault(
DynamicPartitionProperty.HISTORY_PARTITION_NUM,
String.valueOf(DynamicPartitionProperty.NOT_SET_HISTORY_PARTITION_NUM)));
- if (historyPartitionNum !=
DynamicPartitionProperty.NOT_SET_HISTORY_PARTITION_NUM) {
- expectCreatePartitionNum = (long) end - Math.max(start,
-historyPartitionNum);
- } else {
- if (start == Integer.MIN_VALUE) {
- throw new DdlException("Provide start or
history_partition_num property"
- + " when create_history_partition=true. Otherwise
set create_history_partition=false");
- }
- expectCreatePartitionNum = (long) end - start;
+ start = getRealStart(start, historyPartitionNum);
+ if (start == Integer.MIN_VALUE) {
+ throw new DdlException("Provide start or history_partition_num
property"
+ + " when create_history_partition=true. Otherwise set
create_history_partition=false");
}
}
+ expectCreatePartitionNum = (long) end - start;
+
if (hasEnd && (expectCreatePartitionNum >
Config.max_dynamic_partition_num)
&&
Boolean.parseBoolean(analyzedProperties.getOrDefault(DynamicPartitionProperty.ENABLE,
"true"))) {
throw new DdlException("Too many dynamic partitions: "
@@ -683,6 +680,14 @@ public class DynamicPartitionUtil {
return analyzedProperties;
}
+ public static int getRealStart(int start, int historyPartitionNum) {
+ if (historyPartitionNum ==
DynamicPartitionProperty.NOT_SET_HISTORY_PARTITION_NUM) {
+ return start;
+ } else {
+ return Math.max(start, -historyPartitionNum);
+ }
+ }
+
public static void checkAlterAllowed(OlapTable olapTable) throws
DdlException {
TableProperty tableProperty = olapTable.getTableProperty();
if (tableProperty != null &&
tableProperty.getDynamicPartitionProperty() != null
diff --git a/fe/fe-core/src/test/java/org/apache/doris/alter/AlterTest.java
b/fe/fe-core/src/test/java/org/apache/doris/alter/AlterTest.java
index cab0c2ba0f5..bb9cbe0d717 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/alter/AlterTest.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/alter/AlterTest.java
@@ -163,11 +163,12 @@ public class AlterTest {
+ "PROPERTIES\n"
+ "(\n"
+ "\"colocate_with\" = \"group_3\",\n"
+ + "\"replication_num\" = \"1\",\n"
+ "\"dynamic_partition.enable\" = \"true\",\n"
+ "\"dynamic_partition.time_unit\" = \"DAY\",\n"
+ "\"dynamic_partition.end\" = \"3\",\n"
+ "\"dynamic_partition.prefix\" = \"p\",\n"
- + "\"dynamic_partition.buckets\" = \"32\",\n"
+ + "\"dynamic_partition.buckets\" = \"3\",\n"
+ "\"dynamic_partition.replication_num\" = \"1\",\n"
+ "\"dynamic_partition.create_history_partition\"=\"true\",\n"
+ "\"dynamic_partition.start\" = \"-3\"\n"
@@ -254,7 +255,12 @@ public class AlterTest {
private static void createTable(String sql) throws Exception {
Config.enable_odbc_mysql_broker_table = true;
CreateTableStmt createTableStmt = (CreateTableStmt)
UtFrameUtils.parseAndAnalyzeStmt(sql, connectContext);
- Env.getCurrentEnv().createTable(createTableStmt);
+ try {
+ Env.getCurrentEnv().createTable(createTableStmt);
+ } catch (Exception e) {
+ e.printStackTrace();
+ throw e;
+ }
}
private static void createRemoteStorageResource(String sql) throws
Exception {
diff --git
a/fe/fe-core/src/test/java/org/apache/doris/catalog/ColocateTableTest.java
b/fe/fe-core/src/test/java/org/apache/doris/catalog/ColocateTableTest.java
index 87b51808431..6def5f1774b 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/catalog/ColocateTableTest.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/catalog/ColocateTableTest.java
@@ -222,7 +222,7 @@ public class ColocateTableTest {
+ ");");
expectedEx.expect(DdlException.class);
- expectedEx.expectMessage("Colocate tables must have same bucket num:
1");
+ expectedEx.expectMessage("Colocate tables must have same bucket num: 2
should be 1");
createTable("create table " + dbName + "." + tableName2 + " (\n"
+ " `k1` int NULL COMMENT \"\",\n"
+ " `k2` varchar(10) NULL COMMENT \"\"\n"
@@ -282,7 +282,7 @@ public class ColocateTableTest {
+ ");");
expectedEx.expect(DdlException.class);
- expectedEx.expectMessage("Colocate tables distribution columns size
must be same : 2");
+ expectedEx.expectMessage("Colocate tables distribution columns size
must be same: 1 should be 2");
createTable("create table " + dbName + "." + tableName2 + " (\n"
+ " `k1` int NULL COMMENT \"\",\n"
+ " `k2` varchar(10) NULL COMMENT \"\"\n"
diff --git
a/fe/fe-core/src/test/java/org/apache/doris/catalog/DynamicPartitionTableTest.java
b/fe/fe-core/src/test/java/org/apache/doris/catalog/DynamicPartitionTableTest.java
index f5493dedb76..d457be0324f 100644
---
a/fe/fe-core/src/test/java/org/apache/doris/catalog/DynamicPartitionTableTest.java
+++
b/fe/fe-core/src/test/java/org/apache/doris/catalog/DynamicPartitionTableTest.java
@@ -67,6 +67,7 @@ public class DynamicPartitionTableTest {
FeConstants.default_scheduler_interval_millisecond = 1000;
FeConstants.runningUnitTest = true;
Config.disable_storage_medium_check = true;
+ Config.dynamic_partition_enable = false; // disable auto create
dynamic partition
UtFrameUtils.createDorisCluster(runningDir);
@@ -722,6 +723,25 @@ public class DynamicPartitionTableTest {
ExceptionChecker.expectThrowsNoException(() -> alterTable(alter4));
Env.getCurrentEnv().getDynamicPartitionScheduler().executeDynamicPartitionFirstTime(db.getId(),
tbl.getId());
Assert.assertEquals(24, tbl.getPartitionNames().size());
+
+ String createOlapTblStmt5 =
+ "CREATE TABLE test.`dynamic_partition4` (\n" + " `k1`
datetime NULL COMMENT \"\"\n" + ")\n"
+ + "PARTITION BY RANGE (k1)\n" + "()\n" + "DISTRIBUTED
BY HASH(`k1`) BUCKETS 1\n"
+ + "PROPERTIES (\n" + "\"replication_num\" = \"1\",\n"
+ + "\"dynamic_partition.enable\" = \"true\",\n" +
"\"dynamic_partition.end\" = \"3\",\n"
+ + "\"dynamic_partition.time_unit\" = \"day\",\n" +
"\"dynamic_partition.prefix\" = \"p\",\n"
+ + "\"dynamic_partition.buckets\" = \"1\",\n" +
"\"dynamic_partition.start\" = \"-99999999\",\n"
+ + "\"dynamic_partition.history_partition_num\" =
\"5\",\n"
+ + "\"dynamic_partition.create_history_partition\" =
\"true\"\n" + ");";
+ // start and history_partition_num are set, create ok
+ ExceptionChecker.expectThrowsNoException(() ->
createTable(createOlapTblStmt5));
+ OlapTable tbl4 = (OlapTable)
db.getTableOrAnalysisException("dynamic_partition4");
+ Assert.assertEquals(9, tbl4.getPartitionNames().size());
+
+ String alter5 = "alter table test.dynamic_partition4 set
('dynamic_partition.history_partition_num' = '3')";
+ ExceptionChecker.expectThrowsNoException(() -> alterTable(alter5));
+
Env.getCurrentEnv().getDynamicPartitionScheduler().executeDynamicPartitionFirstTime(db.getId(),
tbl4.getId());
+ Assert.assertEquals(7, tbl4.getPartitionNames().size());
}
@Test
diff --git
a/regression-test/suites/partition_p0/dynamic_partition/test_dynamic_partition_failed.groovy
b/regression-test/suites/partition_p0/dynamic_partition/test_dynamic_partition_failed.groovy
new file mode 100644
index 00000000000..7da145a36bc
--- /dev/null
+++
b/regression-test/suites/partition_p0/dynamic_partition/test_dynamic_partition_failed.groovy
@@ -0,0 +1,74 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+suite('test_dynamic_partition_failed', 'nonConcurrent') {
+ def old_max_dynamic_partition_num =
getFeConfig('max_dynamic_partition_num')
+ try {
+ sql 'DROP TABLE IF EXISTS test_dynamic_partition_failed_1'
+ sql '''CREATE TABLE test_dynamic_partition_failed_1
+ ( `k1` datetime NULL )
+ PARTITION BY RANGE (k1)()
+ DISTRIBUTED BY HASH(`k1`) BUCKETS 1
+ PROPERTIES
+ (
+ "replication_num" = "1",
+ "dynamic_partition.enable" = "true",
+ "dynamic_partition.end" = "3",
+ "dynamic_partition.time_unit" = "day",
+ "dynamic_partition.prefix" = "p",
+ "dynamic_partition.buckets" = "1",
+ "dynamic_partition.start" = "-99999999",
+ "dynamic_partition.history_partition_num" = "5",
+ "dynamic_partition.create_history_partition" = "true"
+ )'''
+
+ def partitions = sql_return_maparray "SHOW PARTITIONS FROM
test_dynamic_partition_failed_1"
+ assertEquals(9, partitions.size());
+
+ setFeConfig('max_dynamic_partition_num', Integer.MAX_VALUE)
+
+ sql 'DROP TABLE IF EXISTS test_dynamic_partition_failed_2'
+ test {
+ sql '''CREATE TABLE test_dynamic_partition_failed_2
+ ( `k1` datetime NULL )
+ PARTITION BY RANGE (k1)()
+ DISTRIBUTED BY HASH(`k1`) BUCKETS 1
+ PROPERTIES
+ (
+ "replication_num" = "1",
+ "dynamic_partition.enable" = "true",
+ "dynamic_partition.end" = "3",
+ "dynamic_partition.time_unit" = "day",
+ "dynamic_partition.prefix" = "p",
+ "dynamic_partition.buckets" = "1",
+ "dynamic_partition.start" = "-99999999",
+ "dynamic_partition.create_history_partition" = "true"
+ )'''
+ check { result, exception, startTime, endTime ->
+ assertNotNull(exception)
+ def msg = exception.toString()
+ logger.info("exception: " + msg)
+ // 'date/datetime literal [+271768-09-11 00:00:00] is invalid'
+ assertTrue(msg.contains('date/datetime literal') &&
msg.contains('is invalid'))
+ }
+ }
+ } finally {
+ setFeConfig('max_dynamic_partition_num', old_max_dynamic_partition_num)
+ sql 'DROP TABLE IF EXISTS test_dynamic_partition_failed_1'
+ sql 'DROP TABLE IF EXISTS test_dynamic_partition_failed_2'
+ }
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]