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

totalo 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 52fd6fcfb2c Refactor StorageResourceCreator (#28583)
52fd6fcfb2c is described below

commit 52fd6fcfb2cae4c9b6206033c082f8b5514f3b92
Author: Liang Zhang <zhangli...@apache.org>
AuthorDate: Tue Sep 26 00:29:17 2023 +0800

    Refactor StorageResourceCreator (#28583)
---
 .../database/resource/StorageResourceCreator.java  | 52 +++++++++-------------
 1 file changed, 22 insertions(+), 30 deletions(-)

diff --git 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/resource/StorageResourceCreator.java
 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/resource/StorageResourceCreator.java
index c76ec08d82c..8f1bf5c93a0 100644
--- 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/resource/StorageResourceCreator.java
+++ 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/resource/StorageResourceCreator.java
@@ -22,8 +22,6 @@ import lombok.NoArgsConstructor;
 import org.apache.shardingsphere.infra.database.core.connector.url.JdbcUrl;
 import 
org.apache.shardingsphere.infra.database.core.connector.url.StandardJdbcUrlParser;
 import 
org.apache.shardingsphere.infra.database.core.connector.url.UnrecognizedDatabaseURLException;
-import 
org.apache.shardingsphere.infra.database.core.metadata.database.DialectDatabaseMetaData;
-import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
 import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeFactory;
 import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeRegistry;
 import 
org.apache.shardingsphere.infra.datasource.pool.creator.DataSourcePoolCreator;
@@ -52,24 +50,23 @@ public final class StorageResourceCreator {
         Map<StorageNode, DataSource> storageNodes = new LinkedHashMap<>();
         Map<String, StorageUnitNodeMapper> mappers = new LinkedHashMap<>();
         for (Entry<String, DataSourcePoolProperties> entry : 
propsMap.entrySet()) {
-            StorageNode storageNode = new 
StorageNode(getStorageNodeName(entry.getKey(), entry.getValue()));
+            String storageUnitName = entry.getKey();
+            Map<String, Object> standardProps = 
entry.getValue().getConnectionPropertySynonyms().getStandardProperties();
+            String url = standardProps.get("url").toString();
+            boolean isInstanceConnectionAvailable = new 
DatabaseTypeRegistry(DatabaseTypeFactory.get(url)).getDialectDatabaseMetaData().isInstanceConnectionAvailable();
+            StorageNode storageNode = new 
StorageNode(getStorageNodeName(storageUnitName, url, 
standardProps.get("username").toString(), isInstanceConnectionAvailable));
             if (!storageNodes.containsKey(storageNode)) {
-                storageNodes.put(storageNode, 
DataSourcePoolCreator.create(entry.getKey(), entry.getValue(), true, 
storageNodes.values()));
+                storageNodes.put(storageNode, 
DataSourcePoolCreator.create(storageUnitName, entry.getValue(), true, 
storageNodes.values()));
             }
-            appendStorageUnitNodeMapper(mappers, storageNode, entry.getKey(), 
entry.getValue());
+            mappers.put(storageUnitName, getStorageUnitNodeMapper(storageNode, 
storageUnitName, url, isInstanceConnectionAvailable));
         }
         return new StorageResource(storageNodes, mappers);
     }
     
-    private static String getStorageNodeName(final String dataSourceName, 
final DataSourcePoolProperties storageNodeProps) {
-        Map<String, Object> standardProps = 
storageNodeProps.getConnectionPropertySynonyms().getStandardProperties();
-        String url = standardProps.get("url").toString();
-        String username = standardProps.get("username").toString();
-        DatabaseType databaseType = DatabaseTypeFactory.get(url);
+    private static String getStorageNodeName(final String dataSourceName, 
final String url, final String username, final boolean 
isInstanceConnectionAvailable) {
         try {
             JdbcUrl jdbcUrl = new StandardJdbcUrlParser().parse(url);
-            DialectDatabaseMetaData dialectDatabaseMetaData = new 
DatabaseTypeRegistry(databaseType).getDialectDatabaseMetaData();
-            return dialectDatabaseMetaData.isInstanceConnectionAvailable() ? 
generateStorageNodeName(jdbcUrl.getHostname(), jdbcUrl.getPort(), username) : 
dataSourceName;
+            return isInstanceConnectionAvailable ? 
generateStorageNodeName(jdbcUrl.getHostname(), jdbcUrl.getPort(), username) : 
dataSourceName;
         } catch (final UnrecognizedDatabaseURLException ex) {
             return dataSourceName;
         }
@@ -79,17 +76,10 @@ public final class StorageResourceCreator {
         return String.format("%s_%s_%s", hostname, port, username);
     }
     
-    private static void appendStorageUnitNodeMapper(final Map<String, 
StorageUnitNodeMapper> storageUnitNodeMappers, final StorageNode storageNode,
-                                                    final String 
storageUnitName, final DataSourcePoolProperties props) {
-        String url = 
props.getConnectionPropertySynonyms().getStandardProperties().get("url").toString();
-        storageUnitNodeMappers.put(storageUnitName, 
getStorageUnitNodeMapper(storageNode, DatabaseTypeFactory.get(url), 
storageUnitName, url));
-    }
-    
-    private static StorageUnitNodeMapper getStorageUnitNodeMapper(final 
StorageNode storageNode, final DatabaseType databaseType, final String 
unitName, final String url) {
-        DialectDatabaseMetaData dialectDatabaseMetaData = new 
DatabaseTypeRegistry(databaseType).getDialectDatabaseMetaData();
-        return dialectDatabaseMetaData.isInstanceConnectionAvailable()
-                ? new StorageUnitNodeMapper(unitName, storageNode, new 
StandardJdbcUrlParser().parse(url).getDatabase(), url)
-                : new StorageUnitNodeMapper(unitName, storageNode, url);
+    private static StorageUnitNodeMapper getStorageUnitNodeMapper(final 
StorageNode storageNode, final String storageUnitName, final String url, final 
boolean isInstanceConnectionAvailable) {
+        return isInstanceConnectionAvailable
+                ? new StorageUnitNodeMapper(storageUnitName, storageNode, new 
StandardJdbcUrlParser().parse(url).getDatabase(), url)
+                : new StorageUnitNodeMapper(storageUnitName, storageNode, url);
     }
     
     /**
@@ -103,14 +93,16 @@ public final class StorageResourceCreator {
         Map<String, StorageUnitNodeMapper> mappers = new LinkedHashMap<>();
         Map<String, DataSourcePoolProperties> newPropsMap = new 
LinkedHashMap<>();
         for (Entry<String, DataSourcePoolProperties> entry : 
propsMap.entrySet()) {
-            StorageNode storageNode = new 
StorageNode(getStorageNodeName(entry.getKey(), entry.getValue()));
-            if (storageNodes.containsKey(storageNode)) {
-                appendStorageUnitNodeMapper(mappers, storageNode, 
entry.getKey(), entry.getValue());
-                continue;
+            String storageUnitName = entry.getKey();
+            Map<String, Object> standardProps = 
entry.getValue().getConnectionPropertySynonyms().getStandardProperties();
+            String url = standardProps.get("url").toString();
+            boolean isInstanceConnectionAvailable = new 
DatabaseTypeRegistry(DatabaseTypeFactory.get(url)).getDialectDatabaseMetaData().isInstanceConnectionAvailable();
+            StorageNode storageNode = new 
StorageNode(getStorageNodeName(storageUnitName, url, 
standardProps.get("username").toString(), isInstanceConnectionAvailable));
+            if (!storageNodes.containsKey(storageNode)) {
+                storageNodes.put(storageNode, null);
+                newPropsMap.put(storageNode.getName(), entry.getValue());
             }
-            storageNodes.put(storageNode, null);
-            appendStorageUnitNodeMapper(mappers, storageNode, entry.getKey(), 
entry.getValue());
-            newPropsMap.put(storageNode.getName(), entry.getValue());
+            mappers.put(storageUnitName, getStorageUnitNodeMapper(storageNode, 
storageUnitName, url, isInstanceConnectionAvailable));
         }
         return new StorageResource(storageNodes, mappers, newPropsMap);
     }

Reply via email to