This is an automated email from the ASF dual-hosted git repository.
yiguolei 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 11fecd123d5 branch-2.1: [fix](gson) Missing the serialization of the
partition's storage policy #49721 (#49841)
11fecd123d5 is described below
commit 11fecd123d5bef068ad61b6a5af8aa1ccbb94619
Author: github-actions[bot]
<41898282+github-actions[bot]@users.noreply.github.com>
AuthorDate: Tue Apr 8 11:02:13 2025 +0800
branch-2.1: [fix](gson) Missing the serialization of the partition's
storage policy #49721 (#49841)
Cherry-picked from #49721
Co-authored-by: Uniqueyou <[email protected]>
---
.../org/apache/doris/catalog/PartitionInfo.java | 1 +
.../test_partition_serialized_sp.groovy | 134 +++++++++++++++++++++
2 files changed, 135 insertions(+)
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/catalog/PartitionInfo.java
b/fe/fe-core/src/main/java/org/apache/doris/catalog/PartitionInfo.java
index 2c81e8e2aba..1ba46b50926 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/catalog/PartitionInfo.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/PartitionInfo.java
@@ -69,6 +69,7 @@ public class PartitionInfo implements Writable {
@SerializedName("IdToDataProperty")
protected Map<Long, DataProperty> idToDataProperty;
// partition id -> storage policy
+ @SerializedName("IdToStoragePolicy")
protected Map<Long, String> idToStoragePolicy;
// partition id -> replication allocation
@SerializedName("IdToReplicaAllocation")
diff --git
a/regression-test/suites/partition_p0/test_partition_serialized_sp.groovy
b/regression-test/suites/partition_p0/test_partition_serialized_sp.groovy
new file mode 100644
index 00000000000..eb3d5b70fe2
--- /dev/null
+++ b/regression-test/suites/partition_p0/test_partition_serialized_sp.groovy
@@ -0,0 +1,134 @@
+// 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.
+
+import org.apache.doris.regression.suite.ClusterOptions
+
+suite('test_partition_serialized_sp', 'docker') {
+ def resourceName = "test_partition_serialized_sp_resource"
+ def policyName= "test_partition_serialized_sp_policy"
+ def tableName = "test_partition_serialized_sp_table"
+
+ def options = new ClusterOptions()
+ options.feNum = 1
+ options.beNum = 1
+
+ docker(options) {
+ logger.info("Starting test_partition_serialized_sp test...")
+ def check_storage_policy_exist = { name->
+ def polices = sql"""
+ show storage policy;
+ """
+ for (p in polices) {
+ if (name == p[0]) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ if (check_storage_policy_exist(policyName)) {
+ sql """
+ DROP STORAGE POLICY ${policyName}
+ """
+ }
+
+ def has_resource = sql """
+ SHOW RESOURCES WHERE NAME = "${resourceName}";
+ """
+
+ if (has_resource.size() > 0) {
+ sql """
+ DROP RESOURCE ${resourceName}
+ """
+ }
+
+ sql """
+ CREATE RESOURCE IF NOT EXISTS "${resourceName}"
+ PROPERTIES(
+ "type"="s3",
+ "AWS_ENDPOINT" = "${getS3Endpoint()}",
+ "AWS_REGION" = "${getS3Region()}",
+ "AWS_ROOT_PATH" = "regression/cooldown",
+ "AWS_ACCESS_KEY" = "${getS3AK()}",
+ "AWS_SECRET_KEY" = "${getS3SK()}",
+ "AWS_MAX_CONNECTIONS" = "50",
+ "AWS_REQUEST_TIMEOUT_MS" = "3000",
+ "AWS_CONNECTION_TIMEOUT_MS" = "1000",
+ "AWS_BUCKET" = "${getS3BucketName()}",
+ "s3_validity_check" = "false"
+ );
+ """
+
+ sql """
+ CREATE STORAGE POLICY ${policyName}
+ PROPERTIES(
+ "storage_resource" = "${resourceName}",
+ "cooldown_ttl" = "1d"
+ );
+ """
+
+ logger.info("Created storage policy: ${policyName}")
+
+ sql "DROP TABLE IF EXISTS ${tableName}"
+
+ sql """
+ CREATE TABLE IF NOT EXISTS ${tableName} (
+ id INT,
+ ts DATETIME,
+ name VARCHAR(50)
+ )
+ PARTITION BY RANGE(ts) (
+ PARTITION p1 VALUES LESS THAN ("2023-01-01 00:00:00")
("storage_policy" = "${policyName}"),
+ PARTITION p2 VALUES LESS THAN ("2023-02-01 00:00:00")
("storage_policy" = "${policyName}"),
+ PARTITION p3 VALUES LESS THAN ("2023-03-01 00:00:00")
("storage_policy" = "${policyName}")
+ )
+ DISTRIBUTED BY HASH(id) BUCKETS 3
+ PROPERTIES("replication_num" = "1");
+ """
+
+ logger.info("Created partitioned table with storage policy")
+
+ sql """
+ INSERT INTO ${tableName} VALUES
+ (1, "2022-12-15 12:00:00", "test1"),
+ (2, "2023-01-15 12:00:00", "test2"),
+ (3, "2023-02-15 12:00:00", "test3");
+ """
+
+ def res = sql """ SHOW CREATE TABLE ${tableName} """
+
+ assertTrue(res[0][1].contains("\"${policyName}\""))
+
+ logger.info("All partitions have correct storage policy before
restart")
+
+ logger.info("Restarting Doris cluster...")
+ cluster.restartFrontends()
+ sleep(20000)
+ context.reconnectFe()
+ logger.info("Successfully reconnected to the frontend")
+
+ res = sql """ SHOW CREATE TABLE ${tableName} """
+
+ assertTrue(res[0][1].contains("\"${policyName}\""))
+
+ def result = sql """
+ SELECT * FROM ${tableName} ORDER BY id;
+ """
+
+ assertEquals(result.size(), 3)
+ }
+}
\ No newline at end of file
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]