You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by mo...@apache.org on 2022/04/08 02:31:23 UTC

[incubator-doris] 09/14: [improvement](restore) set table property 'dynamic_partition.enable' to false after restore (#8852)

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

morningman pushed a commit to branch dev-1.0.1
in repository https://gitbox.apache.org/repos/asf/incubator-doris.git

commit 8c4c4b237fad39560883f762ee0d7d0d64a62905
Author: morrySnow <10...@users.noreply.github.com>
AuthorDate: Thu Apr 7 11:34:01 2022 +0800

    [improvement](restore) set table property 'dynamic_partition.enable' to false after restore (#8852)
    
    when restore table with dynamic partition properties, 'dynamic_partition.enable' is set to the backup time value.
    but Doris could not turn on dynamic partition automatically when restore.
    So we cloud see table never do dynamic partition with dynamic_partition.enable is set to 'true'.
---
 .../java/org/apache/doris/backup/RestoreJob.java   |  3 ++
 .../java/org/apache/doris/catalog/OlapTable.java   | 10 ++++++
 .../org/apache/doris/catalog/TableProperty.java    | 12 +++++++
 .../org/apache/doris/catalog/OlapTableTest.java    | 42 ++++++++++++++++++++++
 4 files changed, 67 insertions(+)

diff --git a/fe/fe-core/src/main/java/org/apache/doris/backup/RestoreJob.java b/fe/fe-core/src/main/java/org/apache/doris/backup/RestoreJob.java
index f6f183017f..30878a29ca 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/backup/RestoreJob.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/backup/RestoreJob.java
@@ -641,6 +641,9 @@ public class RestoreJob extends AbstractJob {
                         return;
                     }
 
+                    // Reset properties to correct values.
+                    remoteOlapTbl.resetPropertiesForRestore();
+
                     // DO NOT set remote table's new name here, cause we will still need the origin name later
                     // remoteOlapTbl.setName(jobInfo.getAliasByOriginNameIfSet(tblInfo.name));
                     remoteOlapTbl.setState(allowLoad ? OlapTableState.RESTORE_WITH_LOAD : OlapTableState.RESTORE);
diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/OlapTable.java b/fe/fe-core/src/main/java/org/apache/doris/catalog/OlapTable.java
index 13590e5f9c..d23a4609a0 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/catalog/OlapTable.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/OlapTable.java
@@ -420,6 +420,16 @@ public class OlapTable extends Table {
         }
     }
 
+    /**
+     * Reset properties to correct values.
+     */
+    public void resetPropertiesForRestore() {
+        // disable dynamic partition
+        if (tableProperty != null) {
+            tableProperty.resetPropertiesForRestore();
+        }
+    }
+
     public Status resetIdsForRestore(Catalog catalog, Database db, ReplicaAllocation restoreReplicaAlloc) {
         // table id
         id = catalog.getNextId();
diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/TableProperty.java b/fe/fe-core/src/main/java/org/apache/doris/catalog/TableProperty.java
index 427b09af0a..7c0d6f277e 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/catalog/TableProperty.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/TableProperty.java
@@ -102,6 +102,18 @@ public class TableProperty implements Writable {
         return this;
     }
 
+    /**
+     * Reset properties to correct values.
+     * @return this for chained
+     */
+    public TableProperty resetPropertiesForRestore() {
+        if (properties.containsKey(DynamicPartitionProperty.ENABLE)) {
+            properties.put(DynamicPartitionProperty.ENABLE, "false");
+            executeBuildDynamicProperty();
+        }
+        return this;
+    }
+
     public TableProperty buildDynamicProperty() throws DdlException {
         if (properties.containsKey(DynamicPartitionProperty.ENABLE)
                 && Boolean.valueOf(properties.get(DynamicPartitionProperty.ENABLE))
diff --git a/fe/fe-core/src/test/java/org/apache/doris/catalog/OlapTableTest.java b/fe/fe-core/src/test/java/org/apache/doris/catalog/OlapTableTest.java
index 76dea1d59a..cc9d7f47f5 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/catalog/OlapTableTest.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/catalog/OlapTableTest.java
@@ -17,6 +17,7 @@
 
 package org.apache.doris.catalog;
 
+import com.google.common.collect.Maps;
 import mockit.Mock;
 import mockit.MockUp;
 
@@ -28,12 +29,14 @@ import org.apache.doris.common.util.UnitTestUtil;
 
 import com.google.common.collect.Lists;
 
+import org.junit.Assert;
 import org.junit.Test;
 
 import java.io.DataInputStream;
 import java.io.DataOutputStream;
 import java.io.IOException;
 import java.util.List;
+import java.util.Map;
 
 public class OlapTableTest {
 
@@ -73,4 +76,43 @@ public class OlapTableTest {
         
     }
 
+    @Test
+    public void testResetPropertiesForRestore() {
+        // restore with other key
+        String otherKey = "other_key";
+        String otherValue = "other_value";
+
+        Map<String, String> properties = Maps.newHashMap();
+        properties.put(otherKey, otherValue);
+        TableProperty tableProperty = new TableProperty(properties);
+
+        OlapTable olapTable = new OlapTable();
+        olapTable.setTableProperty(tableProperty);
+
+        olapTable.resetPropertiesForRestore();
+        Assert.assertEquals(tableProperty.getProperties(), olapTable.getTableProperty().getProperties());
+        Assert.assertFalse(tableProperty.getDynamicPartitionProperty().isExist());
+
+        // restore with dynamic partition keys
+        properties = Maps.newHashMap();
+        properties.put(DynamicPartitionProperty.ENABLE, "true");
+        properties.put(DynamicPartitionProperty.TIME_UNIT, "HOUR");
+        properties.put(DynamicPartitionProperty.TIME_ZONE, "Asia/Shanghai");
+        properties.put(DynamicPartitionProperty.START, "-2147483648");
+        properties.put(DynamicPartitionProperty.END, "3");
+        properties.put(DynamicPartitionProperty.PREFIX, "dynamic");
+        properties.put(DynamicPartitionProperty.BUCKETS, "10");
+        properties.put(DynamicPartitionProperty.REPLICATION_NUM, "3");
+        properties.put(DynamicPartitionProperty.CREATE_HISTORY_PARTITION, "false");
+
+        tableProperty = new TableProperty(properties);
+        olapTable.setTableProperty(tableProperty);
+        olapTable.resetPropertiesForRestore();
+
+        Map<String, String> expectedProperties = Maps.newHashMap(properties);
+        expectedProperties.put(DynamicPartitionProperty.ENABLE, "false");
+        Assert.assertEquals(expectedProperties, olapTable.getTableProperty().getProperties());
+        Assert.assertTrue(olapTable.getTableProperty().getDynamicPartitionProperty().isExist());
+        Assert.assertFalse(olapTable.getTableProperty().getDynamicPartitionProperty().getEnable());
+    }
 }


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