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

tuichenchuxin pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git


The following commit(s) were added to refs/heads/master by this push:
     new a8a9fca66bb Fix exception info missing when data source is unavailable 
(#22718)
a8a9fca66bb is described below

commit a8a9fca66bb18e10a942cb9a57781d748f2af636
Author: ZhangCheng <[email protected]>
AuthorDate: Wed Dec 7 18:38:09 2022 +0800

    Fix exception info missing when data source is unavailable (#22718)
---
 .../infra/datasource/state/DataSourceStateManager.java              | 2 +-
 .../datasource/state/exception/UnavailableDataSourceException.java  | 6 ++++--
 .../shardingsphere/mode/metadata/MetadataContextsFactory.java       | 2 +-
 3 files changed, 6 insertions(+), 4 deletions(-)

diff --git 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/datasource/state/DataSourceStateManager.java
 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/datasource/state/DataSourceStateManager.java
index 223903358a1..b4dd26d1975 100644
--- 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/datasource/state/DataSourceStateManager.java
+++ 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/datasource/state/DataSourceStateManager.java
@@ -84,7 +84,7 @@ public final class DataSourceStateManager {
         try (Connection ignored = dataSource.getConnection()) {
             dataSourceStates.put(getCacheKey(databaseName, 
actualDataSourceName), DataSourceState.ENABLED);
         } catch (final SQLException ex) {
-            ShardingSpherePreconditions.checkState(forceStart, 
UnavailableDataSourceException::new);
+            ShardingSpherePreconditions.checkState(forceStart, () -> new 
UnavailableDataSourceException(ex));
             log.error("Data source unavailable, ignored with the -f 
parameter.", ex);
         }
     }
diff --git 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/datasource/state/exception/UnavailableDataSourceException.java
 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/datasource/state/exception/UnavailableDataSourceException.java
index c6dba88bb57..e54840070da 100644
--- 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/datasource/state/exception/UnavailableDataSourceException.java
+++ 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/datasource/state/exception/UnavailableDataSourceException.java
@@ -19,6 +19,8 @@ package 
org.apache.shardingsphere.infra.datasource.state.exception;
 
 import 
org.apache.shardingsphere.infra.util.exception.external.server.ShardingSphereServerException;
 
+import java.sql.SQLException;
+
 /**
  * Data source state exception.
  */
@@ -30,7 +32,7 @@ public final class UnavailableDataSourceException extends 
ShardingSphereServerEx
     
     private static final int ERROR_CODE = 1;
     
-    public UnavailableDataSourceException() {
-        super(ERROR_CATEGORY, ERROR_CODE, "Data source unavailable.");
+    public UnavailableDataSourceException(final SQLException cause) {
+        super(ERROR_CATEGORY, ERROR_CODE, "Data source unavailable.", cause);
     }
 }
diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetadataContextsFactory.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetadataContextsFactory.java
index 9be63e4c1e9..f079f634191 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetadataContextsFactory.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetadataContextsFactory.java
@@ -109,7 +109,7 @@ public final class MetadataContextsFactory {
     private static void checkDataSourceStates(final Map<String, 
DatabaseConfiguration> databaseConfigs, final Map<String, 
StorageNodeDataSource> storageNodes, final boolean force) {
         Map<String, DataSourceState> storageDataSourceStates = 
getStorageDataSourceStates(storageNodes);
         databaseConfigs.forEach((key, value) -> {
-            if (null != value.getDataSources() && 
!value.getDataSources().isEmpty()) {
+            if (!value.getDataSources().isEmpty()) {
                 DataSourceStateManager.getInstance().initStates(key, 
value.getDataSources(), storageDataSourceStates, force);
             }
         });

Reply via email to