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 95c83940e41 Add 
StorageResourceCreator.getStorageNodeDataSourcePoolProperties() (#28589)
95c83940e41 is described below

commit 95c83940e4186b82584ea680165e6d76996e65e6
Author: Liang Zhang <[email protected]>
AuthorDate: Tue Sep 26 18:51:33 2023 +0800

    Add StorageResourceCreator.getStorageNodeDataSourcePoolProperties() (#28589)
---
 .../database/resource/StorageResource.java         | 10 --------
 .../database/resource/StorageResourceCreator.java  | 27 +++++++++++++++++++---
 .../manager/switcher/NewResourceSwitchManager.java | 23 ++++++++++--------
 .../manager/switcher/ResourceSwitchManager.java    | 20 +++++++++-------
 4 files changed, 49 insertions(+), 31 deletions(-)

diff --git 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/resource/StorageResource.java
 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/resource/StorageResource.java
index 593f9f80e57..b46f82d9799 100644
--- 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/resource/StorageResource.java
+++ 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/resource/StorageResource.java
@@ -19,12 +19,10 @@ package 
org.apache.shardingsphere.infra.metadata.database.resource;
 
 import lombok.Getter;
 import 
org.apache.shardingsphere.infra.datasource.pool.CatalogSwitchableDataSource;
-import 
org.apache.shardingsphere.infra.datasource.pool.props.domain.DataSourcePoolProperties;
 import 
org.apache.shardingsphere.infra.metadata.database.resource.node.StorageNode;
 import 
org.apache.shardingsphere.infra.metadata.database.resource.unit.StorageUnitNodeMapper;
 
 import javax.sql.DataSource;
-import java.util.Collections;
 import java.util.LinkedHashMap;
 import java.util.Map;
 import java.util.Map.Entry;
@@ -41,18 +39,10 @@ public final class StorageResource {
     
     private final Map<String, DataSource> wrappedDataSources;
     
-    private final Map<String, DataSourcePoolProperties> 
dataSourcePoolPropertiesMap;
-    
     public StorageResource(final Map<StorageNode, DataSource> dataSourceMap, 
final Map<String, StorageUnitNodeMapper> storageUnitNodeMappers) {
-        this(dataSourceMap, storageUnitNodeMappers, Collections.emptyMap());
-    }
-    
-    public StorageResource(final Map<StorageNode, DataSource> dataSourceMap,
-                           final Map<String, StorageUnitNodeMapper> 
storageUnitNodeMappers, final Map<String, DataSourcePoolProperties> 
dataSourcePoolPropertiesMap) {
         this.dataSourceMap = dataSourceMap;
         this.storageUnitNodeMappers = storageUnitNodeMappers;
         wrappedDataSources = createWrappedDataSources();
-        this.dataSourcePoolPropertiesMap = dataSourcePoolPropertiesMap;
     }
     
     private Map<String, DataSource> createWrappedDataSources() {
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 8f1bf5c93a0..fd8c98d429d 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
@@ -30,6 +30,8 @@ import 
org.apache.shardingsphere.infra.metadata.database.resource.node.StorageNo
 import 
org.apache.shardingsphere.infra.metadata.database.resource.unit.StorageUnitNodeMapper;
 
 import javax.sql.DataSource;
+import java.util.Collection;
+import java.util.HashSet;
 import java.util.LinkedHashMap;
 import java.util.Map;
 import java.util.Map.Entry;
@@ -91,7 +93,6 @@ public final class StorageResourceCreator {
     public static StorageResource createStorageResourceWithoutDataSource(final 
Map<String, DataSourcePoolProperties> propsMap) {
         Map<StorageNode, DataSource> storageNodes = new LinkedHashMap<>();
         Map<String, StorageUnitNodeMapper> mappers = new LinkedHashMap<>();
-        Map<String, DataSourcePoolProperties> newPropsMap = new 
LinkedHashMap<>();
         for (Entry<String, DataSourcePoolProperties> entry : 
propsMap.entrySet()) {
             String storageUnitName = entry.getKey();
             Map<String, Object> standardProps = 
entry.getValue().getConnectionPropertySynonyms().getStandardProperties();
@@ -100,10 +101,30 @@ public final class StorageResourceCreator {
             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());
             }
             mappers.put(storageUnitName, getStorageUnitNodeMapper(storageNode, 
storageUnitName, url, isInstanceConnectionAvailable));
         }
-        return new StorageResource(storageNodes, mappers, newPropsMap);
+        return new StorageResource(storageNodes, mappers);
+    }
+    
+    /**
+     * Get storage node grouped data source pool properties map.
+     *
+     * @param storageUnitDataSourcePoolProps storage unit grouped data source 
pool properties map
+     * @return storage node grouped data source pool properties map
+     */
+    public static Map<String, DataSourcePoolProperties> 
getStorageNodeDataSourcePoolProperties(final Map<String, 
DataSourcePoolProperties> storageUnitDataSourcePoolProps) {
+        Map<String, DataSourcePoolProperties> result = new LinkedHashMap<>();
+        Collection<StorageNode> storageNodes = new HashSet<>();
+        for (Entry<String, DataSourcePoolProperties> entry : 
storageUnitDataSourcePoolProps.entrySet()) {
+            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(entry.getKey(), url, 
standardProps.get("username").toString(), isInstanceConnectionAvailable));
+            if (storageNodes.add(storageNode)) {
+                result.put(storageNode.getName(), entry.getValue());
+            }
+        }
+        return result;
     }
 }
diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/switcher/NewResourceSwitchManager.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/switcher/NewResourceSwitchManager.java
index 96e8310f3a4..670f6af2caa 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/switcher/NewResourceSwitchManager.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/switcher/NewResourceSwitchManager.java
@@ -42,22 +42,24 @@ public final class NewResourceSwitchManager {
      * Register storage unit.
      *
      * @param resourceMetaData resource meta data
-     * @param propsMap data source pool properties map
+     * @param storageUnitDataSourcePoolProps storage unit grouped data source 
pool properties map
      * @return created switching resource
      */
-    public SwitchingResource registerStorageUnit(final ResourceMetaData 
resourceMetaData, final Map<String, DataSourcePoolProperties> propsMap) {
+    public SwitchingResource registerStorageUnit(final ResourceMetaData 
resourceMetaData, final Map<String, DataSourcePoolProperties> 
storageUnitDataSourcePoolProps) {
         Map<String, DataSourcePoolProperties> mergedPropsMap = new 
HashMap<>(resourceMetaData.getStorageUnitMetaData().getDataSourcePoolPropertiesMap());
-        mergedPropsMap.putAll(propsMap);
-        StorageResource toBeCreatedStorageResource = 
StorageResourceCreator.createStorageResourceWithoutDataSource(propsMap);
-        return new SwitchingResource(resourceMetaData, 
getRegisterNewStorageResource(resourceMetaData, toBeCreatedStorageResource),
+        mergedPropsMap.putAll(storageUnitDataSourcePoolProps);
+        StorageResource toBeCreatedStorageResource = 
StorageResourceCreator.createStorageResourceWithoutDataSource(storageUnitDataSourcePoolProps);
+        return new SwitchingResource(resourceMetaData, 
getRegisterNewStorageResource(resourceMetaData, toBeCreatedStorageResource, 
storageUnitDataSourcePoolProps),
                 new StorageResource(Collections.emptyMap(), 
Collections.emptyMap()), mergedPropsMap);
     }
     
-    private StorageResource getRegisterNewStorageResource(final 
ResourceMetaData resourceMetaData, final StorageResource 
toBeCreatedStorageResource) {
+    private StorageResource getRegisterNewStorageResource(final 
ResourceMetaData resourceMetaData,
+                                                          final 
StorageResource toBeCreatedStorageResource, final Map<String, 
DataSourcePoolProperties> storageUnitDataSourcePoolProps) {
+        Map<String, DataSourcePoolProperties> storageNodeDataSourcePoolProps = 
StorageResourceCreator.getStorageNodeDataSourcePoolProperties(storageUnitDataSourcePoolProps);
         Map<StorageNode, DataSource> storageNodes = new 
LinkedHashMap<>(toBeCreatedStorageResource.getDataSourceMap().size(), 1F);
         for (StorageNode each : 
toBeCreatedStorageResource.getDataSourceMap().keySet()) {
             if (!resourceMetaData.getDataSourceMap().containsKey(each)) {
-                storageNodes.put(each, 
DataSourcePoolCreator.create(toBeCreatedStorageResource.getDataSourcePoolPropertiesMap().get(each.getName())));
+                storageNodes.put(each, 
DataSourcePoolCreator.create(storageNodeDataSourcePoolProps.get(each.getName())));
             }
         }
         return new StorageResource(storageNodes, 
toBeCreatedStorageResource.getStorageUnitNodeMappers());
@@ -74,14 +76,15 @@ public final class NewResourceSwitchManager {
         Map<String, DataSourcePoolProperties> 
mergedDataSourcePoolPropertiesMap = new 
HashMap<>(resourceMetaData.getStorageUnitMetaData().getDataSourcePoolPropertiesMap());
         mergedDataSourcePoolPropertiesMap.putAll(propsMap);
         StorageResource toBeAlteredStorageResource = 
StorageResourceCreator.createStorageResourceWithoutDataSource(mergedDataSourcePoolPropertiesMap);
-        return new SwitchingResource(resourceMetaData, 
getAlterNewStorageResource(toBeAlteredStorageResource),
+        return new SwitchingResource(resourceMetaData, 
getAlterNewStorageResource(toBeAlteredStorageResource, 
mergedDataSourcePoolPropertiesMap),
                 getStaleStorageResource(resourceMetaData, 
toBeAlteredStorageResource), mergedDataSourcePoolPropertiesMap);
     }
     
-    private StorageResource getAlterNewStorageResource(final StorageResource 
toBeAlteredStorageResource) {
+    private StorageResource getAlterNewStorageResource(final StorageResource 
toBeAlteredStorageResource, final Map<String, DataSourcePoolProperties> 
storageUnitDataSourcePoolProps) {
+        Map<String, DataSourcePoolProperties> storageNodeDataSourcePoolProps = 
StorageResourceCreator.getStorageNodeDataSourcePoolProperties(storageUnitDataSourcePoolProps);
         Map<StorageNode, DataSource> storageNodes = new 
LinkedHashMap<>(toBeAlteredStorageResource.getDataSourceMap().size(), 1F);
         for (StorageNode each : 
toBeAlteredStorageResource.getDataSourceMap().keySet()) {
-            storageNodes.put(each, 
DataSourcePoolCreator.create(toBeAlteredStorageResource.getDataSourcePoolPropertiesMap().get(each.getName())));
+            storageNodes.put(each, 
DataSourcePoolCreator.create(storageNodeDataSourcePoolProps.get(each.getName())));
         }
         return new StorageResource(storageNodes, 
toBeAlteredStorageResource.getStorageUnitNodeMappers());
     }
diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/switcher/ResourceSwitchManager.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/switcher/ResourceSwitchManager.java
index 65e5fbdf8a7..fc731013529 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/switcher/ResourceSwitchManager.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/switcher/ResourceSwitchManager.java
@@ -52,8 +52,8 @@ public final class ResourceSwitchManager {
         Map<String, DataSourcePoolProperties> mergedPropsMap = new 
HashMap<>(resourceMetaData.getStorageUnitMetaData().getDataSourcePoolPropertiesMap());
         mergedPropsMap.putAll(toBeChangedPropsMap);
         StorageResource toBeChangedStorageResource = 
StorageResourceCreator.createStorageResourceWithoutDataSource(toBeChangedPropsMap);
-        return new SwitchingResource(resourceMetaData, 
createNewStorageResource(resourceMetaData, toBeChangedStorageResource),
-                getStaleDataSources(resourceMetaData, 
toBeChangedStorageResource), mergedPropsMap);
+        return new SwitchingResource(resourceMetaData, 
createNewStorageResource(resourceMetaData, toBeChangedStorageResource, 
toBeChangedPropsMap),
+                getStaleDataSources(resourceMetaData, 
toBeChangedStorageResource, mergedPropsMap), mergedPropsMap);
     }
     
     /**
@@ -83,17 +83,20 @@ public final class ResourceSwitchManager {
         mergedDataSourcePoolPropertiesMap.keySet().removeIf(each -> 
!toBeChangedPropsMap.containsKey(each));
         mergedDataSourcePoolPropertiesMap.putAll(toBeChangedPropsMap);
         StorageResource toBeChangedStorageResource = 
StorageResourceCreator.createStorageResourceWithoutDataSource(toBeChangedPropsMap);
-        StorageResource staleStorageResource = 
getStaleDataSources(resourceMetaData, toBeChangedStorageResource);
+        StorageResource staleStorageResource = 
getStaleDataSources(resourceMetaData, toBeChangedStorageResource, 
toBeChangedPropsMap);
         staleStorageResource.getDataSourceMap()
                 
.putAll(getToBeDeletedDataSources(resourceMetaData.getDataSourceMap(), 
toBeChangedStorageResource.getDataSourceMap().keySet()));
         staleStorageResource.getStorageUnitNodeMappers().putAll(
                 
getToBeDeletedStorageUnitNodeMappers(resourceMetaData.getStorageUnitMetaData().getStorageUnits(),
 toBeChangedStorageResource.getStorageUnitNodeMappers().keySet()));
-        return new SwitchingResource(resourceMetaData, 
createNewStorageResource(resourceMetaData, toBeChangedStorageResource), 
staleStorageResource, mergedDataSourcePoolPropertiesMap);
+        return new SwitchingResource(resourceMetaData,
+                createNewStorageResource(resourceMetaData, 
toBeChangedStorageResource, toBeChangedPropsMap), staleStorageResource, 
mergedDataSourcePoolPropertiesMap);
     }
     
-    private StorageResource createNewStorageResource(final ResourceMetaData 
resourceMetaData, final StorageResource toBeChangedStorageResource) {
+    private StorageResource createNewStorageResource(final ResourceMetaData 
resourceMetaData,
+                                                     final StorageResource 
toBeChangedStorageResource, final Map<String, DataSourcePoolProperties> 
storageUnitDataSourcePoolProps) {
+        Map<String, DataSourcePoolProperties> storageNodeDataSourcePoolProps = 
StorageResourceCreator.getStorageNodeDataSourcePoolProperties(storageUnitDataSourcePoolProps);
         Map<StorageNode, DataSource> storageNodes =
-                getNewStorageNodes(resourceMetaData, 
toBeChangedStorageResource.getDataSourceMap(), 
toBeChangedStorageResource.getDataSourcePoolPropertiesMap());
+                getNewStorageNodes(resourceMetaData, 
toBeChangedStorageResource.getDataSourceMap(), storageNodeDataSourcePoolProps);
         Map<String, StorageUnitNodeMapper> storageUnitNodeMappers = 
getNewStorageUnitNodeMappers(resourceMetaData, 
toBeChangedStorageResource.getStorageUnitNodeMappers());
         return new StorageResource(storageNodes, storageUnitNodeMappers);
     }
@@ -153,10 +156,11 @@ public final class ResourceSwitchManager {
         return new StorageResource(staleStorageNodes, 
staleStorageUnitNodeMappers);
     }
     
-    private StorageResource getStaleDataSources(final ResourceMetaData 
resourceMetaData, final StorageResource toBeChangedStorageResource) {
+    private StorageResource getStaleDataSources(final ResourceMetaData 
resourceMetaData, final StorageResource toBeChangedStorageResource,
+                                                final Map<String, 
DataSourcePoolProperties> storageUnitDataSourcePoolProps) {
         Map<StorageNode, DataSource> storageNodes = new 
LinkedHashMap<>(resourceMetaData.getDataSourceMap().size(), 1F);
         Map<String, StorageUnitNodeMapper> storageUnitNodeMappers = new 
LinkedHashMap<>(resourceMetaData.getStorageUnitMetaData().getUnitNodeMappers().size(),
 1F);
-        
storageNodes.putAll(getToBeChangedDataSources(resourceMetaData.getDataSourceMap(),
 toBeChangedStorageResource.getDataSourcePoolPropertiesMap()));
+        
storageNodes.putAll(getToBeChangedDataSources(resourceMetaData.getDataSourceMap(),
 
StorageResourceCreator.getStorageNodeDataSourcePoolProperties(storageUnitDataSourcePoolProps)));
         
storageUnitNodeMappers.putAll(getChangedStorageUnitNodeMappers(resourceMetaData.getStorageUnitMetaData().getStorageUnits(),
 toBeChangedStorageResource.getStorageUnitNodeMappers()));
         return new StorageResource(storageNodes, storageUnitNodeMappers);
     }

Reply via email to