You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by pe...@apache.org on 2022/12/28 08:09:12 UTC

[doris] branch master updated: [feature](remote)Add alter storage policy (#15381)

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

pengxiangyu 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 69d95c857a [feature](remote)Add alter storage policy (#15381)
69d95c857a is described below

commit 69d95c857a55e0f58e603226b8071c9644e1ce3f
Author: pengxiangyu <di...@163.com>
AuthorDate: Wed Dec 28 16:09:06 2022 +0800

    [feature](remote)Add alter storage policy (#15381)
    
    * add alter storage policy
    
    * add alter storage policy
    
    * add alter storage policy
---
 .../src/main/java/org/apache/doris/alter/Alter.java       | 15 +++++++++++++--
 .../use_policy/alter_table_add_policy.groovy              |  8 ++++----
 2 files changed, 17 insertions(+), 6 deletions(-)

diff --git a/fe/fe-core/src/main/java/org/apache/doris/alter/Alter.java b/fe/fe-core/src/main/java/org/apache/doris/alter/Alter.java
index e506a1adc3..d3f188c46e 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/alter/Alter.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/alter/Alter.java
@@ -52,9 +52,11 @@ import org.apache.doris.catalog.OlapTable;
 import org.apache.doris.catalog.OlapTable.OlapTableState;
 import org.apache.doris.catalog.Partition;
 import org.apache.doris.catalog.PartitionInfo;
+import org.apache.doris.catalog.Replica;
 import org.apache.doris.catalog.ReplicaAllocation;
 import org.apache.doris.catalog.Table;
 import org.apache.doris.catalog.TableIf.TableType;
+import org.apache.doris.catalog.Tablet;
 import org.apache.doris.catalog.View;
 import org.apache.doris.common.AnalysisException;
 import org.apache.doris.common.DdlException;
@@ -187,8 +189,17 @@ public class Alter {
         if (currentAlterOps.checkTableStoragePolicy(alterClauses)) {
             String tableStoragePolicy = olapTable.getStoragePolicy();
             if (!tableStoragePolicy.equals("")) {
-                throw new DdlException("Do not support alter table's storage policy , this table ["
-                        + olapTable.getName() + "] has storage policy " + tableStoragePolicy);
+                for (Partition partition : olapTable.getAllPartitions()) {
+                    for (Tablet tablet : partition.getBaseIndex().getTablets()) {
+                        for (Replica replica : tablet.getReplicas()) {
+                            if (replica.getRowCount() > 0 || replica.getDataSize() > 0) {
+                                throw new DdlException("Do not support alter table's storage policy , this table ["
+                                        + olapTable.getName() + "] has storage policy " + tableStoragePolicy
+                                        + ", the table need to be empty.");
+                            }
+                        }
+                    }
+                }
             }
             String currentStoragePolicy = currentAlterOps.getTableStoragePolicy(alterClauses);
             // check currentStoragePolicy resource exist.
diff --git a/regression-test/suites/cold_heat_separation/use_policy/alter_table_add_policy.groovy b/regression-test/suites/cold_heat_separation/use_policy/alter_table_add_policy.groovy
index 2963650903..bff146f6e0 100644
--- a/regression-test/suites/cold_heat_separation/use_policy/alter_table_add_policy.groovy
+++ b/regression-test/suites/cold_heat_separation/use_policy/alter_table_add_policy.groovy
@@ -83,8 +83,8 @@ suite("add_table_policy_by_alter_table") {
     def alter_table_when_table_has_storage_policy_result = try_sql """
         ALTER TABLE create_table_not_have_policy set ("storage_policy" = "created_create_table_alter_policy");
     """
-    // errCode = 2, detailMessage = Do not support alter table's storage policy , this table [create_table_not_have_policy] has storage policy created_create_table_alter_policy
-    assertEquals(alter_table_when_table_has_storage_policy_result, null);
+    // OK
+    assertEquals(alter_table_when_table_has_storage_policy_result.size(), 1);
 
     if (!storage_exist.call("created_create_table_alter_policy_1")) {
         def create_s3_resource = try_sql """
@@ -113,8 +113,8 @@ suite("add_table_policy_by_alter_table") {
     def cannot_modify_exist_storage_policy_table_result = try_sql """
         ALTER TABLE create_table_not_have_policy set ("storage_policy" = "created_create_table_alter_policy_1");
     """
-    //  errCode = 2, detailMessage = Do not support alter table's storage policy , this table [create_table_not_have_policy] has storage policy created_create_table_alter_policy
-    assertEquals(cannot_modify_exist_storage_policy_table_result, null);
+    // OK
+    assertEquals(cannot_modify_exist_storage_policy_table_result.size(), 1);
 
     // you can change created_create_table_alter_policy's policy cooldown time, cooldown ttl property,
     // by alter storage policy


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