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

jackietien pushed a commit to branch ty/object_type
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit 9a3cbff8c77c937abe6dfca41d775d2ca3c09a04
Author: Caideyipi <[email protected]>
AuthorDate: Wed Dec 3 14:54:45 2025 +0800

    PipePlugin: Optimized the errorCode && Fixed the case-sensitive semantic 
(#16851)
    
    * fix
    
    * fix
    
    (cherry picked from commit db02437f00f3f1f4807347ab30317ed114cee3e4)
---
 .../treemodel/auto/basic/IoTDBPipeSyntaxIT.java    | 61 ++++++++++++++++++++++
 .../config/executor/ClusterConfigTaskExecutor.java | 12 +++--
 2 files changed, 69 insertions(+), 4 deletions(-)

diff --git 
a/integration-test/src/test/java/org/apache/iotdb/pipe/it/dual/treemodel/auto/basic/IoTDBPipeSyntaxIT.java
 
b/integration-test/src/test/java/org/apache/iotdb/pipe/it/dual/treemodel/auto/basic/IoTDBPipeSyntaxIT.java
index e925e9e4428..610a7b974fd 100644
--- 
a/integration-test/src/test/java/org/apache/iotdb/pipe/it/dual/treemodel/auto/basic/IoTDBPipeSyntaxIT.java
+++ 
b/integration-test/src/test/java/org/apache/iotdb/pipe/it/dual/treemodel/auto/basic/IoTDBPipeSyntaxIT.java
@@ -37,6 +37,7 @@ import org.junit.Test;
 import org.junit.experimental.categories.Category;
 import org.junit.runner.RunWith;
 
+import java.io.File;
 import java.sql.Connection;
 import java.sql.SQLException;
 import java.sql.Statement;
@@ -757,4 +758,64 @@ public class IoTDBPipeSyntaxIT extends 
AbstractPipeDualTreeModelAutoIT {
       fail(e.getMessage());
     }
   }
+
+  @Test
+  public void testPipePluginValidation() {
+    try (final Connection connection = senderEnv.getConnection();
+        final Statement statement = connection.createStatement()) {
+      try {
+        statement.execute(
+            "create pipePlugin TestProcessor as 
'org.apache.iotdb.db.pipe.example.TestProcessor' USING URI 'xxx'");
+        fail();
+      } catch (final SQLException e) {
+        Assert.assertEquals(
+            "701: Untrusted uri xxx, current trusted_uri_pattern is file:.*", 
e.getMessage());
+      }
+      try {
+        statement.execute(
+            "create pipePlugin TestProcessor as 
'org.apache.iotdb.db.pipe.example.TestProcessor' USING URI 'file:.*'");
+        fail();
+      } catch (final SQLException e) {
+        Assert.assertEquals("701: URI is not hierarchical", e.getMessage());
+      }
+      try {
+        statement.execute(
+            String.format(
+                "create pipePlugin TestProcessor as 
'org.apache.iotdb.db.pipe.example.TestProcessor' USING URI '%s'",
+                new File(
+                            System.getProperty("user.dir")
+                                + File.separator
+                                + "target"
+                                + File.separator
+                                + "test-classes"
+                                + File.separator)
+                        .toURI()
+                    + "PipePlugin.jar"));
+        fail();
+      } catch (final SQLException e) {
+        Assert.assertEquals(
+            "1603: Failed to get executable for PipePlugin TestProcessor, 
please check the URI.",
+            e.getMessage());
+      }
+      try {
+        statement.execute("drop pipePlugin test_processor");
+        fail();
+      } catch (final SQLException e) {
+        Assert.assertEquals(
+            "1601: Failed to drop pipe plugin TEST_PROCESSOR. Failures: 
TEST_PROCESSOR does not exist.",
+            e.getMessage());
+      }
+      try {
+        statement.execute("drop pipePlugin `Do-Nothing-Sink`");
+        fail();
+      } catch (final SQLException e) {
+        Assert.assertEquals(
+            "1601: Failed to drop PipePlugin [DO-NOTHING-SINK], the PipePlugin 
is a built-in PipePlugin",
+            e.getMessage());
+      }
+    } catch (final SQLException e) {
+      e.printStackTrace();
+      fail(e.getMessage());
+    }
+  }
 }
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/executor/ClusterConfigTaskExecutor.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/executor/ClusterConfigTaskExecutor.java
index 8292fd9d623..34bbd57640a 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/executor/ClusterConfigTaskExecutor.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/executor/ClusterConfigTaskExecutor.java
@@ -1015,7 +1015,11 @@ public class ClusterConfigTaskExecutor implements 
IConfigTaskExecutor {
           // Set md5 of the jar file
           jarMd5 = 
DigestUtils.md5Hex(Files.newInputStream(Paths.get(libRoot)));
         }
-      } catch (final IOException | URISyntaxException e) {
+      } catch (final URISyntaxException | IllegalArgumentException e) {
+        future.setException(
+            new IoTDBException(e.getMessage(), 
TSStatusCode.SEMANTIC_ERROR.getStatusCode()));
+        return future;
+      } catch (final IOException e) {
         LOGGER.warn(
             "Failed to get executable for PipePlugin({}) using URI: {}.",
             createPipePluginStatement.getPluginName(),
@@ -1023,9 +1027,9 @@ public class ClusterConfigTaskExecutor implements 
IConfigTaskExecutor {
             e);
         future.setException(
             new IoTDBException(
-                "Failed to get executable for PipePlugin"
+                "Failed to get executable for PipePlugin "
                     + createPipePluginStatement.getPluginName()
-                    + "', please check the URI.",
+                    + ", please check the URI.",
                 TSStatusCode.PIPE_PLUGIN_DOWNLOAD_ERROR.getStatusCode()));
         return future;
       }
@@ -1114,7 +1118,7 @@ public class ClusterConfigTaskExecutor implements 
IConfigTaskExecutor {
       final TSStatus executionStatus =
           client.dropPipePlugin(
               new TDropPipePluginReq()
-                  .setPluginName(dropPipePluginStatement.getPluginName())
+                  
.setPluginName(dropPipePluginStatement.getPluginName().toUpperCase())
                   
.setIfExistsCondition(dropPipePluginStatement.hasIfExistsCondition())
                   .setIsTableModel(dropPipePluginStatement.isTableModel()));
       if (TSStatusCode.SUCCESS_STATUS.getStatusCode() != 
executionStatus.getCode()) {

Reply via email to