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

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


The following commit(s) were added to refs/heads/master by this push:
     new fd0c161081 [enhance](ColdHeatSeparation) forbid change storage policy 
to another one with different storage resource (#22519)
fd0c161081 is described below

commit fd0c1610812cd033cab3a73626b56e29830ee951
Author: AlexYue <yj976240...@gmail.com>
AuthorDate: Thu Aug 10 16:32:09 2023 +0800

    [enhance](ColdHeatSeparation) forbid change storage policy to another one 
with different storage resource (#22519)
---
 .../apache/doris/common/util/PropertyAnalyzer.java | 26 +++++++++++++++++++++-
 .../java/org/apache/doris/alter/AlterTest.java     | 11 ++++++++-
 2 files changed, 35 insertions(+), 2 deletions(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/common/util/PropertyAnalyzer.java 
b/fe/fe-core/src/main/java/org/apache/doris/common/util/PropertyAnalyzer.java
index 1b8d45f569..f916d13336 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/common/util/PropertyAnalyzer.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/common/util/PropertyAnalyzer.java
@@ -190,7 +190,11 @@ public class PropertyAnalyzer {
 
         TStorageMedium storageMedium = oldDataProperty.getStorageMedium();
         long cooldownTimestamp = oldDataProperty.getCooldownTimeMs();
-        String newStoragePolicy = oldDataProperty.getStoragePolicy();
+        final String oldStoragePolicy = oldDataProperty.getStoragePolicy();
+        // When we create one table with table's property set storage policy,
+        // the properties wouldn't contain storage policy so the 
hasStoragePolicy would be false,
+        // then we would just set the partition's storage policy the same as 
the table's
+        String newStoragePolicy = oldStoragePolicy;
         boolean hasStoragePolicy = false;
         boolean storageMediumSpecified = false;
 
@@ -252,6 +256,26 @@ public class PropertyAnalyzer {
             }
 
             StoragePolicy storagePolicy = (StoragePolicy) policy;
+            // Consider a scenario where if cold data has already been 
uploaded to resource A,
+            // and the user attempts to modify the policy to upload it to 
resource B,
+            // the data needs to be transferred from A to B.
+            // However, Doris currently does not support cross-bucket data 
transfer, therefore,
+            // changing the policy to a different policy with different 
resource is disabled.
+            // As for the case where the resource is the same, modifying the 
cooldown time is allowed,
+            // as this will not affect the already cooled data, but only the 
new data after modifying the policy.
+            if (null != oldStoragePolicy && 
!oldStoragePolicy.equals(newStoragePolicy)) {
+                // check remote storage policy
+                StoragePolicy oldPolicy = 
StoragePolicy.ofCheck(oldStoragePolicy);
+                Policy p = 
Env.getCurrentEnv().getPolicyMgr().getPolicy(oldPolicy);
+                if ((p instanceof StoragePolicy)) {
+                    String newResource = storagePolicy.getStorageResource();
+                    String oldResource = ((StoragePolicy) 
p).getStorageResource();
+                    if (!newResource.equals(oldResource)) {
+                        throw new AnalysisException("currently do not support 
change origin "
+                                + "storage policy to another one with 
different resource: ");
+                    }
+                }
+            }
             // check remote storage cool down timestamp
             if (storagePolicy.getCooldownTimestampMs() != -1) {
                 if (storagePolicy.getCooldownTimestampMs() <= currentTimeMs) {
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 d18f5a57f8..af70ca249a 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
@@ -160,6 +160,10 @@ public class AlterTest {
                 "CREATE STORAGE POLICY testPolicy2\n" + "PROPERTIES(\n" + "  
\"storage_resource\" = \"remote_s3\",\n"
                         + "  \"cooldown_ttl\" = \"1\"\n" + ");");
 
+        createRemoteStoragePolicy(
+                "CREATE STORAGE POLICY testPolicyAnotherResource\n" + 
"PROPERTIES(\n" + "  \"storage_resource\" = \"remote_s3_1\",\n"
+                        + "  \"cooldown_ttl\" = \"1\"\n" + ");");
+
         createTable("CREATE TABLE test.tbl_remote\n" + "(\n" + "    k1 
date,\n" + "    k2 int,\n" + "    v1 int sum\n"
                 + ")\n" + "PARTITION BY RANGE(k1)\n" + "(\n" + "    PARTITION 
p1 values less than('2020-02-01'),\n"
                 + "    PARTITION p2 values less than('2020-03-01'),\n"
@@ -597,11 +601,16 @@ public class AlterTest {
         }
         Assert.assertEquals(oldDataProperty, 
tblRemote.getPartitionInfo().getDataProperty(p1.getId()));
 
-        // alter remote_storage
+        // alter remote_storage to one not exist policy
         stmt = "alter table test.tbl_remote modify partition (p2, p3, p4) set 
('storage_policy' = 'testPolicy3')";
         alterTable(stmt, true);
         Assert.assertEquals(oldDataProperty, 
tblRemote.getPartitionInfo().getDataProperty(p1.getId()));
 
+        // alter remote_storage to one another one which points to another 
resource
+        stmt = "alter table test.tbl_remote modify partition (p2, p3, p4) set 
('storage_policy' = 'testPolicyAnotherResource')";
+        alterTable(stmt, true);
+        Assert.assertEquals(oldDataProperty, 
tblRemote.getPartitionInfo().getDataProperty(p1.getId()));
+
         // alter recover to old state
         stmt = "alter table test.tbl_remote modify partition (p2, p3, p4) set 
("
                 + "'storage_medium' = 'SSD', "


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to