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);
}