You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by zy...@apache.org on 2025/11/25 08:48:49 UTC
(doris) branch master updated: [opt](catalog) Improve error messages in connectivity tests (#58184)
This is an automated email from the ASF dual-hosted git repository.
zykkk 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 cfcf6381627 [opt](catalog) Improve error messages in connectivity tests (#58184)
cfcf6381627 is described below
commit cfcf6381627bb81f214e72f69fa2e3bed88ca458
Author: zy-kkk <zh...@gmail.com>
AuthorDate: Tue Nov 25 16:48:43 2025 +0800
[opt](catalog) Improve error messages in connectivity tests (#58184)
---
.../AbstractS3CompatibleConnectivityTester.java | 6 ++++
.../CatalogConnectivityTestCoordinator.java | 28 +++++++++++++-----
.../HdfsCompatibleConnectivityTester.java | 6 ++++
.../HiveGlueMetaStoreConnectivityTester.java | 6 ++++
.../connectivity/HiveHMSConnectivityTester.java | 5 ++++
.../IcebergGlueMetaStoreConnectivityTester.java | 33 ++++++++++++++++++++++
.../connectivity/IcebergHMSConnectivityTester.java | 5 ++++
.../IcebergRestConnectivityTester.java | 6 ++++
...IcebergS3TablesMetaStoreConnectivityTester.java | 6 ++++
.../connectivity/MetaConnectivityTester.java | 8 ++++++
.../connectivity/MinioConnectivityTester.java | 6 ++++
.../connectivity/StorageConnectivityTester.java | 8 ++++++
12 files changed, 116 insertions(+), 7 deletions(-)
diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/connectivity/AbstractS3CompatibleConnectivityTester.java b/fe/fe-core/src/main/java/org/apache/doris/datasource/connectivity/AbstractS3CompatibleConnectivityTester.java
index 23a5d407dcd..df9de5cb77c 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/datasource/connectivity/AbstractS3CompatibleConnectivityTester.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/connectivity/AbstractS3CompatibleConnectivityTester.java
@@ -66,4 +66,10 @@ public abstract class AbstractS3CompatibleConnectivityTester implements StorageC
client.headBucket(b -> b.bucket(s3Uri.getBucket()));
}
}
+
+ @Override
+ public String getErrorHint() {
+ return "Please check S3 credentials (access_key and secret_key or IAM role), "
+ + "region, and bucket (warehouse location) access permissions";
+ }
}
diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/connectivity/CatalogConnectivityTestCoordinator.java b/fe/fe-core/src/main/java/org/apache/doris/datasource/connectivity/CatalogConnectivityTestCoordinator.java
index 35b3ba744c3..cf8c308849a 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/datasource/connectivity/CatalogConnectivityTestCoordinator.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/connectivity/CatalogConnectivityTestCoordinator.java
@@ -18,6 +18,7 @@
package org.apache.doris.datasource.connectivity;
import org.apache.doris.common.DdlException;
+import org.apache.doris.common.util.Util;
import org.apache.doris.datasource.property.metastore.HiveGlueMetaStoreProperties;
import org.apache.doris.datasource.property.metastore.HiveHMSProperties;
import org.apache.doris.datasource.property.metastore.IcebergGlueMetaStoreProperties;
@@ -94,8 +95,10 @@ public class CatalogConnectivityTestCoordinator {
try {
metaTester.testConnection();
} catch (Exception e) {
- throw new DdlException(metaTester.getTestType() + " connectivity test failed: "
- + e.getMessage());
+ String hint = metaTester.getErrorHint();
+ String errorMsg = metaTester.getTestType() + " connectivity test failed: " + hint
+ + " Root cause: " + Util.getRootCauseMessage(e);
+ throw new DdlException(errorMsg);
}
// Store warehouse location for later use
@@ -142,15 +145,20 @@ public class CatalogConnectivityTestCoordinator {
try {
tester.testFeConnection();
} catch (Exception e) {
- throw new DdlException(tester.getTestType() + " connectivity test failed: " + e.getMessage());
+ String hint = tester.getErrorHint();
+ String errorMsg = tester.getTestType() + " connectivity test failed: " + hint
+ + " Root cause: " + Util.getRootCauseMessage(e);
+ throw new DdlException(errorMsg);
}
// Test BE connection
try {
tester.testBeConnection();
} catch (Exception e) {
- throw new DdlException(tester.getTestType()
- + " connectivity test failed (compute node): " + e.getMessage());
+ String hint = tester.getErrorHint();
+ String errorMsg = tester.getTestType() + " connectivity test failed (compute node): " + hint
+ + " Root cause: " + Util.getRootCauseMessage(e);
+ throw new DdlException(errorMsg);
}
}
@@ -240,14 +248,20 @@ public class CatalogConnectivityTestCoordinator {
try {
tester.testFeConnection();
} catch (Exception e) {
- throw new DdlException("HDFS connectivity test failed: " + e.getMessage());
+ String hint = tester.getErrorHint();
+ String errorMsg = "HDFS connectivity test failed: " + hint
+ + " Root cause: " + Util.getRootCauseMessage(e);
+ throw new DdlException(errorMsg);
}
// Test BE connection
try {
tester.testBeConnection();
} catch (Exception e) {
- throw new DdlException("HDFS connectivity test failed (compute node): " + e.getMessage());
+ String hint = tester.getErrorHint();
+ String errorMsg = "HDFS connectivity test failed (compute node): " + hint
+ + " Root cause: " + Util.getRootCauseMessage(e);
+ throw new DdlException(errorMsg);
}
}
diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/connectivity/HdfsCompatibleConnectivityTester.java b/fe/fe-core/src/main/java/org/apache/doris/datasource/connectivity/HdfsCompatibleConnectivityTester.java
index 481017463d8..cd1be0fa9ef 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/datasource/connectivity/HdfsCompatibleConnectivityTester.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/connectivity/HdfsCompatibleConnectivityTester.java
@@ -37,6 +37,12 @@ public abstract class HdfsCompatibleConnectivityTester implements StorageConnect
return "HDFS";
}
+ @Override
+ public String getErrorHint() {
+ return "Please check HDFS namenode connectivity (fs.defaultFS), user permissions, and "
+ + "Kerberos configuration if applicable";
+ }
+
@Override
public void testFeConnection() throws Exception {
// TODO: Implement HDFS connectivity test in the future if needed
diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/connectivity/HiveGlueMetaStoreConnectivityTester.java b/fe/fe-core/src/main/java/org/apache/doris/datasource/connectivity/HiveGlueMetaStoreConnectivityTester.java
index 87edad2c8be..f6b4002fa16 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/datasource/connectivity/HiveGlueMetaStoreConnectivityTester.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/connectivity/HiveGlueMetaStoreConnectivityTester.java
@@ -34,6 +34,12 @@ public class HiveGlueMetaStoreConnectivityTester extends AbstractHiveConnectivit
return "Hive Glue";
}
+ @Override
+ public String getErrorHint() {
+ return "Please check AWS Glue credentials (access_key and secret_key or IAM role), region, "
+ + "and endpoint";
+ }
+
@Override
public void testConnection() throws Exception {
glueTester.testConnection();
diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/connectivity/HiveHMSConnectivityTester.java b/fe/fe-core/src/main/java/org/apache/doris/datasource/connectivity/HiveHMSConnectivityTester.java
index 367a2428bda..855d18b2f0a 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/datasource/connectivity/HiveHMSConnectivityTester.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/connectivity/HiveHMSConnectivityTester.java
@@ -33,6 +33,11 @@ public class HiveHMSConnectivityTester extends AbstractHiveConnectivityTester {
return "Hive HMS";
}
+ @Override
+ public String getErrorHint() {
+ return "Please check Hive Metastore Server connectivity (hive metastore uris)";
+ }
+
@Override
public void testConnection() throws Exception {
hmsTester.testConnection();
diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/connectivity/IcebergGlueMetaStoreConnectivityTester.java b/fe/fe-core/src/main/java/org/apache/doris/datasource/connectivity/IcebergGlueMetaStoreConnectivityTester.java
index 3a543d194a7..978fffceb73 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/datasource/connectivity/IcebergGlueMetaStoreConnectivityTester.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/connectivity/IcebergGlueMetaStoreConnectivityTester.java
@@ -20,7 +20,12 @@ package org.apache.doris.datasource.connectivity;
import org.apache.doris.datasource.property.metastore.AWSGlueMetaStoreBaseProperties;
import org.apache.doris.datasource.property.metastore.AbstractIcebergProperties;
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.regex.Pattern;
+
public class IcebergGlueMetaStoreConnectivityTester extends AbstractIcebergConnectivityTester {
+ private static final Pattern S3_LOCATION_PATTERN = Pattern.compile("^(s3|s3a)://.+");
private final AWSGlueMetaStoreBaseConnectivityTester glueTester;
public IcebergGlueMetaStoreConnectivityTester(AbstractIcebergProperties properties,
@@ -34,8 +39,36 @@ public class IcebergGlueMetaStoreConnectivityTester extends AbstractIcebergConne
return "Iceberg Glue";
}
+ @Override
+ public String getErrorHint() {
+ return "Please check AWS Glue credentials (access_key and secret_key or IAM role), "
+ + "region, warehouse location, and endpoint";
+ }
+
@Override
public void testConnection() throws Exception {
glueTester.testConnection();
}
+
+ @Override
+ public String getTestLocation() {
+ String warehouse = properties.getWarehouse();
+ if (StringUtils.isBlank(warehouse)) {
+ return null;
+ }
+
+ String location = validateS3Location(warehouse);
+ if (location == null) {
+ throw new IllegalArgumentException(
+ "Iceberg Glue warehouse location must be in S3 format (s3:// or s3a://), but got: " + warehouse);
+ }
+ return location;
+ }
+
+ private String validateS3Location(String location) {
+ if (StringUtils.isNotBlank(location) && S3_LOCATION_PATTERN.matcher(location).matches()) {
+ return location;
+ }
+ return null;
+ }
}
diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/connectivity/IcebergHMSConnectivityTester.java b/fe/fe-core/src/main/java/org/apache/doris/datasource/connectivity/IcebergHMSConnectivityTester.java
index 04ff5ea385c..99fc6a42740 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/datasource/connectivity/IcebergHMSConnectivityTester.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/connectivity/IcebergHMSConnectivityTester.java
@@ -33,6 +33,11 @@ public class IcebergHMSConnectivityTester extends AbstractIcebergConnectivityTes
return "Iceberg HMS";
}
+ @Override
+ public String getErrorHint() {
+ return "Please check Hive Metastore Server connectivity (hive metastore uris)";
+ }
+
@Override
public void testConnection() throws Exception {
hmsTester.testConnection();
diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/connectivity/IcebergRestConnectivityTester.java b/fe/fe-core/src/main/java/org/apache/doris/datasource/connectivity/IcebergRestConnectivityTester.java
index a9659d60d2d..ca00fba1501 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/datasource/connectivity/IcebergRestConnectivityTester.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/connectivity/IcebergRestConnectivityTester.java
@@ -43,6 +43,12 @@ public class IcebergRestConnectivityTester extends AbstractIcebergConnectivityTe
return "Iceberg REST";
}
+ @Override
+ public String getErrorHint() {
+ return "Please check Iceberg REST Catalog URI, authentication credentials (OAuth2 or SigV4), "
+ + "warehouse location, and endpoint connectivity";
+ }
+
@Override
public void testConnection() throws Exception {
Map<String, String> restProps = ((IcebergRestProperties) properties).getIcebergRestCatalogProperties();
diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/connectivity/IcebergS3TablesMetaStoreConnectivityTester.java b/fe/fe-core/src/main/java/org/apache/doris/datasource/connectivity/IcebergS3TablesMetaStoreConnectivityTester.java
index c4444839771..ad587aaf77a 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/datasource/connectivity/IcebergS3TablesMetaStoreConnectivityTester.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/connectivity/IcebergS3TablesMetaStoreConnectivityTester.java
@@ -25,6 +25,12 @@ public class IcebergS3TablesMetaStoreConnectivityTester extends AbstractIcebergC
super(properties);
}
+ @Override
+ public String getErrorHint() {
+ return "Please check S3 credentials (access_key and secret_key or IAM role), endpoint, region, "
+ + "and warehouse location";
+ }
+
@Override
public void testConnection() throws Exception {
// TODO: Implement Iceberg S3 Tables connectivity test in the future if needed
diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/connectivity/MetaConnectivityTester.java b/fe/fe-core/src/main/java/org/apache/doris/datasource/connectivity/MetaConnectivityTester.java
index 2f2a9a34140..326f6c5b20f 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/datasource/connectivity/MetaConnectivityTester.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/connectivity/MetaConnectivityTester.java
@@ -34,4 +34,12 @@ public interface MetaConnectivityTester {
default String getTestType() {
return "Meta";
}
+
+ /**
+ * Returns error hint for this connectivity test.
+ * Subclasses can override to provide specific hints for troubleshooting.
+ */
+ default String getErrorHint() {
+ return "";
+ }
}
diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/connectivity/MinioConnectivityTester.java b/fe/fe-core/src/main/java/org/apache/doris/datasource/connectivity/MinioConnectivityTester.java
index 6c9ada8c490..32ce99714e0 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/datasource/connectivity/MinioConnectivityTester.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/connectivity/MinioConnectivityTester.java
@@ -29,4 +29,10 @@ public class MinioConnectivityTester extends AbstractS3CompatibleConnectivityTes
public String getTestType() {
return "Minio";
}
+
+ @Override
+ public String getErrorHint() {
+ return "Please check Minio credentials (access_key and secret_key), "
+ + "endpoint, and bucket (warehouse location) access permissions";
+ }
}
diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/connectivity/StorageConnectivityTester.java b/fe/fe-core/src/main/java/org/apache/doris/datasource/connectivity/StorageConnectivityTester.java
index 7f23c674f71..a3248691fc6 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/datasource/connectivity/StorageConnectivityTester.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/connectivity/StorageConnectivityTester.java
@@ -53,6 +53,14 @@ public interface StorageConnectivityTester {
return "Storage";
}
+ /**
+ * Returns error hint for this connectivity test.
+ * Subclasses can override to provide specific hints for troubleshooting.
+ */
+ default String getErrorHint() {
+ return "";
+ }
+
default void testBeConnection() throws Exception {
List<Long> aliveBeIds = Env.getCurrentSystemInfo().getAllBackendIds(true);
if (aliveBeIds.isEmpty()) {
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org