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

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


The following commit(s) were added to refs/heads/branch-3.0 by this push:
     new 221d5b75597 [fix](tvf) fix FE cannot start when replay `alter view 
from tvf` (#40872)
221d5b75597 is described below

commit 221d5b755975ebbd3ab08a175d75465e57f2947c
Author: Tiewei Fang <43782773+bepppo...@users.noreply.github.com>
AuthorDate: Fri Sep 20 18:13:02 2024 +0800

    [fix](tvf) fix FE cannot start when replay `alter view from tvf` (#40872)
---
 .../main/java/org/apache/doris/alter/Alter.java    |  9 ++--
 .../data/external_table_p0/tvf/test_hdfs_tvf.out   | 44 +++++++++++++++++
 .../data/external_table_p0/tvf/upgrade/test.out    | 45 ++++++++++++++++++
 .../external_table_p0/tvf/test_hdfs_tvf.groovy     | 26 ++++++++++
 .../external_table_p0/tvf/upgrade/load.groovy      | 55 ++++++++++++++++++++++
 .../external_table_p0/tvf/upgrade/test.groovy      | 34 +++++++++++++
 6 files changed, 208 insertions(+), 5 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 51ed811cc06..e004565037e 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
@@ -693,13 +693,12 @@ public class Alter {
         try {
             String viewName = view.getName();
             view.setInlineViewDefWithSqlMode(inlineViewDef, 
alterViewInfo.getSqlMode());
-            try {
-                view.init();
-            } catch (UserException e) {
-                throw new DdlException("failed to init view stmt, reason=" + 
e.getMessage());
-            }
             view.setNewFullSchema(newFullSchema);
 
+            // We do not need to init view here.
+            // During the `init` phase, some `Alter-View` statements will 
access the remote file system,
+            // but they should not access it during the metadata replay phase.
+
             db.unregisterTable(viewName);
             db.registerTable(view);
 
diff --git a/regression-test/data/external_table_p0/tvf/test_hdfs_tvf.out 
b/regression-test/data/external_table_p0/tvf/test_hdfs_tvf.out
index 68e310c5a4f..3f12b448581 100644
--- a/regression-test/data/external_table_p0/tvf/test_hdfs_tvf.out
+++ b/regression-test/data/external_table_p0/tvf/test_hdfs_tvf.out
@@ -615,3 +615,47 @@ string_col text    Yes     false   \N      NONE
 string_col     text    Yes     false   \N      NONE
 tinyint_col    tinyint Yes     false   \N      NONE
 
+-- !create_view --
+0      2       3       4       5       6.6     7.7     8.8     abc     def     
ghiaaaaaa       2020-10-10      2020-10-10 11:12:59
+1      2       3       4       5       6.6     7.7     8.8     abc     def     
ghiaaaaaa       2020-10-10      2020-10-10 11:12:59
+10     2       3       4       5       6.6     7.7     8.8     abc     def     
ghiaaaaaa       2020-10-10      2020-10-10 11:12:59
+100    2       3       4       5       6.6     7.7     8.8     abc     def     
ghiaaaaaa       2020-10-10      2020-10-10 11:12:59
+101    2       3       4       5       6.6     7.7     8.8     abc     def     
ghiaaaaaa       2020-10-10      2020-10-10 11:12:59
+102    2       3       4       5       6.6     7.7     8.8     abc     def     
ghiaaaaaa       2020-10-10      2020-10-10 11:12:59
+103    2       3       4       5       6.6     7.7     8.8     abc     def     
ghiaaaaaa       2020-10-10      2020-10-10 11:12:59
+104    2       3       4       5       6.6     7.7     8.8     abc     def     
ghiaaaaaa       2020-10-10      2020-10-10 11:12:59
+105    2       3       4       5       6.6     7.7     8.8     abc     def     
ghiaaaaaa       2020-10-10      2020-10-10 11:12:59
+106    2       3       4       5       6.6     7.7     8.8     abc     def     
ghiaaaaaa       2020-10-10      2020-10-10 11:12:59
+107    2       3       4       5       6.6     7.7     8.8     abc     def     
ghiaaaaaa       2020-10-10      2020-10-10 11:12:59
+108    2       3       4       5       6.6     7.7     8.8     abc     def     
ghiaaaaaa       2020-10-10      2020-10-10 11:12:59
+109    2       3       4       5       6.6     7.7     8.8     abc     def     
ghiaaaaaa       2020-10-10      2020-10-10 11:12:59
+11     2       3       4       5       6.6     7.7     8.8     abc     def     
ghiaaaaaa       2020-10-10      2020-10-10 11:12:59
+110    2       3       4       5       6.6     7.7     8.8     abc     def     
ghiaaaaaa       2020-10-10      2020-10-10 11:12:59
+111    2       3       4       5       6.6     7.7     8.8     abc     def     
ghiaaaaaa       2020-10-10      2020-10-10 11:12:59
+112    2       3       4       5       6.6     7.7     8.8     abc     def     
ghiaaaaaa       2020-10-10      2020-10-10 11:12:59
+113    2       3       4       5       6.6     7.7     8.8     abc     def     
ghiaaaaaa       2020-10-10      2020-10-10 11:12:59
+114    2       3       4       5       6.6     7.7     8.8     abc     def     
ghiaaaaaa       2020-10-10      2020-10-10 11:12:59
+115    2       3       4       5       6.6     7.7     8.8     abc     def     
ghiaaaaaa       2020-10-10      2020-10-10 11:12:59
+
+-- !alter_view --
+0
+1
+10
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+11
+110
+111
+112
+113
+114
+115
+
diff --git a/regression-test/data/external_table_p0/tvf/upgrade/test.out 
b/regression-test/data/external_table_p0/tvf/upgrade/test.out
new file mode 100644
index 00000000000..12289c25718
--- /dev/null
+++ b/regression-test/data/external_table_p0/tvf/upgrade/test.out
@@ -0,0 +1,45 @@
+-- This file is automatically generated. You should know what you did if you 
want to edit this
+-- !create_view --
+0
+1
+10
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+11
+110
+111
+112
+113
+114
+115
+
+-- !alter_view --
+0
+1
+10
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+11
+110
+111
+112
+113
+114
+115
+
diff --git a/regression-test/suites/external_table_p0/tvf/test_hdfs_tvf.groovy 
b/regression-test/suites/external_table_p0/tvf/test_hdfs_tvf.groovy
index abdfd871a1f..8c4028bfefe 100644
--- a/regression-test/suites/external_table_p0/tvf/test_hdfs_tvf.groovy
+++ b/regression-test/suites/external_table_p0/tvf/test_hdfs_tvf.groovy
@@ -312,6 +312,32 @@ suite("test_hdfs_tvf","external,hive,tvf,external_docker") 
{
                         "column_separator" = ",",
                         "format" = "${format}"); """
 
+
+            // test create view from tvf and alter view from tvf
+            uri = "${defaultFS}" + 
"/user/doris/preinstalled_data/csv_format_test/all_types.csv"
+            format = "csv"
+            sql """ DROP VIEW IF EXISTS test_hdfs_tvf_create_view;"""
+            sql """
+                create view test_hdfs_tvf_create_view as
+                select * from HDFS(
+                        "uri" = "${uri}",
+                        "hadoop.username" = "${hdfsUserName}",
+                        "column_separator" = ",",
+                        "format" = "${format}") order by c1;
+                """
+
+            order_qt_create_view """ select * from test_hdfs_tvf_create_view 
order by c1 limit 20; """
+
+            sql """
+                alter view test_hdfs_tvf_create_view as
+                select c1 from HDFS(
+                        "uri" = "${uri}",
+                        "hadoop.username" = "${hdfsUserName}",
+                        "column_separator" = ",",
+                        "format" = "${format}") order by c1;
+                """
+
+            order_qt_alter_view """ select * from test_hdfs_tvf_create_view 
order by c1 limit 20; """
         } finally {
         }
     }
diff --git a/regression-test/suites/external_table_p0/tvf/upgrade/load.groovy 
b/regression-test/suites/external_table_p0/tvf/upgrade/load.groovy
new file mode 100644
index 00000000000..5fac50e64ff
--- /dev/null
+++ b/regression-test/suites/external_table_p0/tvf/upgrade/load.groovy
@@ -0,0 +1,55 @@
+// 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_tvf_upgrade_load", 
"p0,external,hive,external_docker,external_docker_hive,restart_fe,upgrade_case")
 {
+    String hdfs_port = context.config.otherConfigs.get("hive2HdfsPort")
+    String externalEnvIp = context.config.otherConfigs.get("externalEnvIp")
+
+    // It's okay to use random `hdfsUser`, but can not be empty.
+    def hdfsUserName = "doris"
+    def format = "csv"
+    def defaultFS = "hdfs://${externalEnvIp}:${hdfs_port}"
+    def uri = ""
+
+    String enabled = context.config.otherConfigs.get("enableHiveTest")
+    if (enabled != null && enabled.equalsIgnoreCase("true")) {
+            // test create view from tvf and alter view from tvf
+            uri = "${defaultFS}" + 
"/user/doris/preinstalled_data/csv_format_test/all_types.csv"
+            format = "csv"
+            sql """ DROP VIEW IF EXISTS test_hdfs_tvf_create_view;"""
+            sql """
+                create view test_hdfs_tvf_create_view as
+                select * from HDFS(
+                        "uri" = "${uri}",
+                        "hadoop.username" = "${hdfsUserName}",
+                        "column_separator" = ",",
+                        "format" = "${format}") order by c1;
+                """
+            logger.info("View test_hdfs_tvf_create_view created")
+
+
+            sql """
+                alter view test_hdfs_tvf_create_view as
+                select c1 from HDFS(
+                        "uri" = "${uri}",
+                        "hadoop.username" = "${hdfsUserName}",
+                        "column_separator" = ",",
+                        "format" = "${format}") order by c1;
+                """
+            logger.info("View test_hdfs_tvf_create_view altered")
+    }
+}
\ No newline at end of file
diff --git a/regression-test/suites/external_table_p0/tvf/upgrade/test.groovy 
b/regression-test/suites/external_table_p0/tvf/upgrade/test.groovy
new file mode 100644
index 00000000000..a3b0795ef46
--- /dev/null
+++ b/regression-test/suites/external_table_p0/tvf/upgrade/test.groovy
@@ -0,0 +1,34 @@
+// 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_tvf_upgrade_test", 
"p0,external,hive,external_docker,external_docker_hive,restart_fe,upgrade_case")
 {
+    String hdfs_port = context.config.otherConfigs.get("hive2HdfsPort")
+    String externalEnvIp = context.config.otherConfigs.get("externalEnvIp")
+
+    // It's okay to use random `hdfsUser`, but can not be empty.
+    def hdfsUserName = "doris"
+    def format = "csv"
+    def defaultFS = "hdfs://${externalEnvIp}:${hdfs_port}"
+    def uri = ""
+
+    String enabled = context.config.otherConfigs.get("enableHiveTest")
+    if (enabled != null && enabled.equalsIgnoreCase("true")) {
+        order_qt_create_view """ select * from test_hdfs_tvf_create_view order 
by c1 limit 20; """
+
+        order_qt_alter_view """ select * from test_hdfs_tvf_create_view order 
by c1 limit 20; """
+    }
+}
\ No newline at end of file


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

Reply via email to