This is an automated email from the ASF dual-hosted git repository.
yx9o 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 9c45d37b9f5 Refactor
StorageResourceCreator.getStorageUnitNodeMappers() (#28596)
9c45d37b9f5 is described below
commit 9c45d37b9f568b319926d8c79ca441df103415ef
Author: Liang Zhang <[email protected]>
AuthorDate: Wed Sep 27 08:19:12 2023 +0800
Refactor StorageResourceCreator.getStorageUnitNodeMappers() (#28596)
* Decouple ResourceMetaData and StorageResource
* Refactor StorageResourceCreator.getStorageUnitNodeMappers()
---
.../metadata/database/ShardingSphereDatabase.java | 2 +-
.../database/resource/ResourceMetaData.java | 8 +--
.../database/resource/StorageResourceCreator.java | 59 ++++++++++------------
.../context/ConfigurationContextManager.java | 5 +-
.../manager/switcher/NewResourceSwitchManager.java | 41 ++++++++-------
.../manager/switcher/ResourceSwitchManager.java | 58 +++++++++++----------
6 files changed, 88 insertions(+), 85 deletions(-)
diff --git
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/ShardingSphereDatabase.java
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/ShardingSphereDatabase.java
index 3c83c2bd206..d7571a1280d 100644
---
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/ShardingSphereDatabase.java
+++
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/ShardingSphereDatabase.java
@@ -124,7 +124,7 @@ public final class ShardingSphereDatabase {
}
private static ResourceMetaData createResourceMetaData(final String
databaseName, final StorageResource storageResource, final Map<String,
DataSourcePoolProperties> propsMap) {
- return new ResourceMetaData(databaseName, storageResource, propsMap);
+ return new ResourceMetaData(databaseName,
storageResource.getDataSourceMap(),
storageResource.getStorageUnitNodeMappers(), propsMap);
}
/**
diff --git
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/resource/ResourceMetaData.java
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/resource/ResourceMetaData.java
index 9c4bd9b3e85..c92a0f6aa09 100644
---
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/resource/ResourceMetaData.java
+++
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/resource/ResourceMetaData.java
@@ -26,6 +26,7 @@ import
org.apache.shardingsphere.infra.datasource.pool.props.creator.DataSourceP
import
org.apache.shardingsphere.infra.metadata.database.resource.node.StorageNode;
import
org.apache.shardingsphere.infra.metadata.database.resource.unit.StorageUnit;
import
org.apache.shardingsphere.infra.metadata.database.resource.unit.StorageUnitMetaData;
+import
org.apache.shardingsphere.infra.metadata.database.resource.unit.StorageUnitNodeMapper;
import javax.sql.DataSource;
import java.util.Collection;
@@ -56,9 +57,10 @@ public final class ResourceMetaData {
StorageResourceUtils.getStorageUnitNodeMappers(dataSources));
}
- public ResourceMetaData(final String databaseName, final StorageResource
storageResource, final Map<String, DataSourcePoolProperties> propsMap) {
- dataSourceMap = storageResource.getDataSourceMap();
- storageUnitMetaData = new StorageUnitMetaData(databaseName,
dataSourceMap, propsMap, storageResource.getStorageUnitNodeMappers());
+ public ResourceMetaData(final String databaseName, final Map<StorageNode,
DataSource> dataSourceMap,
+ final Map<String, StorageUnitNodeMapper>
storageUnitNodeMappers, final Map<String, DataSourcePoolProperties> propsMap) {
+ this.dataSourceMap = dataSourceMap;
+ storageUnitMetaData = new StorageUnitMetaData(databaseName,
dataSourceMap, propsMap, storageUnitNodeMappers);
}
/**
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 70ed45e9df4..5dd9d6e2468 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
@@ -53,18 +53,36 @@ public final class StorageResourceCreator {
Map<String, StorageUnitNodeMapper> mappers = new LinkedHashMap<>();
for (Entry<String, DataSourcePoolProperties> entry :
propsMap.entrySet()) {
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(storageUnitName, entry.getValue(), true,
storageNodes.values()));
- }
- mappers.put(storageUnitName, getStorageUnitNodeMapper(storageNode,
storageUnitName, url, isInstanceConnectionAvailable));
+ StorageUnitNodeMapper mapper =
getStorageUnitNodeMapper(storageUnitName, entry.getValue());
+ mappers.put(storageUnitName, mapper);
+ storageNodes.computeIfAbsent(mapper.getStorageNode(), key ->
DataSourcePoolCreator.create(storageUnitName, entry.getValue(), true,
storageNodes.values()));
}
return new StorageResource(storageNodes, mappers);
}
+ /**
+ * Get storage unit node mappers.
+ *
+ * @param propsMap data source pool properties map
+ * @return storage unit node mappers
+ */
+ public static Map<String, StorageUnitNodeMapper>
getStorageUnitNodeMappers(final Map<String, DataSourcePoolProperties> propsMap)
{
+ Map<String, StorageUnitNodeMapper> result = new LinkedHashMap<>();
+ for (Entry<String, DataSourcePoolProperties> entry :
propsMap.entrySet()) {
+ String storageUnitName = entry.getKey();
+ result.put(storageUnitName,
getStorageUnitNodeMapper(storageUnitName, entry.getValue()));
+ }
+ return result;
+ }
+
+ private static StorageUnitNodeMapper getStorageUnitNodeMapper(final String
storageUnitName, final DataSourcePoolProperties props) {
+ Map<String, Object> standardProps =
props.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));
+ return createStorageUnitNodeMapper(storageNode, storageUnitName, url,
isInstanceConnectionAvailable);
+ }
+
private static String getStorageNodeName(final String dataSourceName,
final String url, final String username, final boolean
isInstanceConnectionAvailable) {
try {
JdbcUrl jdbcUrl = new StandardJdbcUrlParser().parse(url);
@@ -78,35 +96,12 @@ public final class StorageResourceCreator {
return String.format("%s_%s_%s", hostname, port, username);
}
- private static StorageUnitNodeMapper getStorageUnitNodeMapper(final
StorageNode storageNode, final String storageUnitName, final String url, final
boolean isInstanceConnectionAvailable) {
+ private static StorageUnitNodeMapper createStorageUnitNodeMapper(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);
}
- /**
- * Create storage resource without data source.
- *
- * @param propsMap data source pool properties map
- * @return created storage resource
- */
- public static StorageResource createStorageResourceWithoutDataSource(final
Map<String, DataSourcePoolProperties> propsMap) {
- Map<StorageNode, DataSource> storageNodes = new LinkedHashMap<>();
- Map<String, StorageUnitNodeMapper> mappers = new LinkedHashMap<>();
- for (Entry<String, DataSourcePoolProperties> entry :
propsMap.entrySet()) {
- 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);
- }
- mappers.put(storageUnitName, getStorageUnitNodeMapper(storageNode,
storageUnitName, url, isInstanceConnectionAvailable));
- }
- return new StorageResource(storageNodes, mappers);
- }
-
/**
* Get storage node grouped data source pool properties map.
*
diff --git
a/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/context/ConfigurationContextManager.java
b/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/context/ConfigurationContextManager.java
index 6bf91cfe337..02e22e03c09 100644
---
a/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/context/ConfigurationContextManager.java
+++
b/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/context/ConfigurationContextManager.java
@@ -276,11 +276,10 @@ public final class ConfigurationContextManager {
public Map<String, ShardingSphereDatabase> renewDatabase(final
ShardingSphereDatabase database, final SwitchingResource resource) {
Map<StorageNode, DataSource> newStorageNodes =
getNewStorageNodes(database.getResourceMetaData().getDataSourceMap(), resource);
Map<String, StorageUnitNodeMapper> newStorageUnitNodeMappers =
getNewStorageUnitNodeMappers(database.getResourceMetaData().getStorageUnitMetaData().getStorageUnits(),
resource);
- StorageResource newStorageResource = new
StorageResource(newStorageNodes, newStorageUnitNodeMappers);
Map<String, DataSourcePoolProperties> propsMap =
database.getResourceMetaData().getStorageUnitMetaData().getStorageUnits().entrySet().stream()
.collect(Collectors.toMap(Entry::getKey, entry ->
entry.getValue().getDataSourcePoolProperties(), (oldValue, currentValue) ->
currentValue, LinkedHashMap::new));
- return Collections.singletonMap(database.getName().toLowerCase(), new
ShardingSphereDatabase(
- database.getName(), database.getProtocolType(), new
ResourceMetaData(database.getName(), newStorageResource, propsMap),
database.getRuleMetaData(), database.getSchemas()));
+ return Collections.singletonMap(database.getName().toLowerCase(), new
ShardingSphereDatabase(database.getName(), database.getProtocolType(),
+ new ResourceMetaData(database.getName(), newStorageNodes,
newStorageUnitNodeMappers, propsMap), database.getRuleMetaData(),
database.getSchemas()));
}
private Map<StorageNode, DataSource> getNewStorageNodes(final
Map<StorageNode, DataSource> currentStorageNodes, final SwitchingResource
resource) {
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 709c63526a1..5caa61cfe56 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
@@ -26,11 +26,13 @@ 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.Collections;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Map.Entry;
+import java.util.stream.Collectors;
/**
* TODO Rename ResourceSwitchManager when metadata structure adjustment
completed. #25485
@@ -48,21 +50,22 @@ public final class NewResourceSwitchManager {
public SwitchingResource registerStorageUnit(final ResourceMetaData
resourceMetaData, final Map<String, DataSourcePoolProperties>
storageUnitDataSourcePoolProps) {
Map<String, DataSourcePoolProperties> mergedPropsMap = new
HashMap<>(resourceMetaData.getStorageUnitMetaData().getDataSourcePoolPropertiesMap());
mergedPropsMap.putAll(storageUnitDataSourcePoolProps);
- StorageResource toBeCreatedStorageResource =
StorageResourceCreator.createStorageResourceWithoutDataSource(storageUnitDataSourcePoolProps);
- return new SwitchingResource(resourceMetaData,
getRegisterNewStorageResource(resourceMetaData, toBeCreatedStorageResource,
storageUnitDataSourcePoolProps),
+ Map<String, StorageUnitNodeMapper> toBeCreatedMappers =
StorageResourceCreator.getStorageUnitNodeMappers(storageUnitDataSourcePoolProps);
+ return new SwitchingResource(resourceMetaData,
getRegisterNewStorageResource(resourceMetaData, toBeCreatedMappers,
storageUnitDataSourcePoolProps),
new StorageResource(Collections.emptyMap(),
Collections.emptyMap()), mergedPropsMap);
}
private StorageResource getRegisterNewStorageResource(final
ResourceMetaData resourceMetaData,
- final
StorageResource toBeCreatedStorageResource, final Map<String,
DataSourcePoolProperties> storageUnitDataSourcePoolProps) {
+ final Map<String,
StorageUnitNodeMapper> mappers, final Map<String, DataSourcePoolProperties>
storageUnitDataSourcePoolProps) {
+ Collection<StorageNode> storageNodes =
mappers.values().stream().map(StorageUnitNodeMapper::getStorageNode).collect(Collectors.toSet());
Map<StorageNode, DataSourcePoolProperties>
storageNodeDataSourcePoolProps =
StorageResourceCreator.getStorageNodeDataSourcePoolProperties(storageUnitDataSourcePoolProps);
- Map<StorageNode, DataSource> storageNodes = new
LinkedHashMap<>(toBeCreatedStorageResource.getDataSourceMap().size(), 1F);
- for (StorageNode each :
toBeCreatedStorageResource.getDataSourceMap().keySet()) {
+ Map<StorageNode, DataSource> newStorageNodes = new
LinkedHashMap<>(storageNodes.size(), 1F);
+ for (StorageNode each : storageNodes) {
if (!resourceMetaData.getDataSourceMap().containsKey(each)) {
- storageNodes.put(each,
DataSourcePoolCreator.create(storageNodeDataSourcePoolProps.get(each)));
+ newStorageNodes.put(each,
DataSourcePoolCreator.create(storageNodeDataSourcePoolProps.get(each)));
}
}
- return new StorageResource(storageNodes,
toBeCreatedStorageResource.getStorageUnitNodeMappers());
+ return new StorageResource(newStorageNodes, mappers);
}
/**
@@ -75,28 +78,30 @@ public final class NewResourceSwitchManager {
public SwitchingResource alterStorageUnit(final ResourceMetaData
resourceMetaData, final Map<String, DataSourcePoolProperties> propsMap) {
Map<String, DataSourcePoolProperties>
mergedDataSourcePoolPropertiesMap = new
HashMap<>(resourceMetaData.getStorageUnitMetaData().getDataSourcePoolPropertiesMap());
mergedDataSourcePoolPropertiesMap.putAll(propsMap);
- StorageResource toBeAlteredStorageResource =
StorageResourceCreator.createStorageResourceWithoutDataSource(mergedDataSourcePoolPropertiesMap);
- return new SwitchingResource(resourceMetaData,
getAlterNewStorageResource(toBeAlteredStorageResource,
mergedDataSourcePoolPropertiesMap),
- getStaleStorageResource(resourceMetaData,
toBeAlteredStorageResource), mergedDataSourcePoolPropertiesMap);
+ Map<String, StorageUnitNodeMapper> toBeAlteredMappers =
StorageResourceCreator.getStorageUnitNodeMappers(mergedDataSourcePoolPropertiesMap);
+ return new SwitchingResource(resourceMetaData,
getAlterNewStorageResource(toBeAlteredMappers,
mergedDataSourcePoolPropertiesMap),
+ getStaleStorageResource(resourceMetaData, toBeAlteredMappers),
mergedDataSourcePoolPropertiesMap);
}
- private StorageResource getAlterNewStorageResource(final StorageResource
toBeAlteredStorageResource, final Map<String, DataSourcePoolProperties>
storageUnitDataSourcePoolProps) {
+ private StorageResource getAlterNewStorageResource(final Map<String,
StorageUnitNodeMapper> mappers, final Map<String, DataSourcePoolProperties>
storageUnitDataSourcePoolProps) {
+ Collection<StorageNode> toBeAlteredStorageNodes =
mappers.values().stream().map(StorageUnitNodeMapper::getStorageNode).collect(Collectors.toSet());
Map<StorageNode, DataSourcePoolProperties>
storageNodeDataSourcePoolProps =
StorageResourceCreator.getStorageNodeDataSourcePoolProperties(storageUnitDataSourcePoolProps);
- Map<StorageNode, DataSource> storageNodes = new
LinkedHashMap<>(toBeAlteredStorageResource.getDataSourceMap().size(), 1F);
- for (StorageNode each :
toBeAlteredStorageResource.getDataSourceMap().keySet()) {
+ Map<StorageNode, DataSource> storageNodes = new
LinkedHashMap<>(toBeAlteredStorageNodes.size(), 1F);
+ for (StorageNode each : toBeAlteredStorageNodes) {
storageNodes.put(each,
DataSourcePoolCreator.create(storageNodeDataSourcePoolProps.get(each)));
}
- return new StorageResource(storageNodes,
toBeAlteredStorageResource.getStorageUnitNodeMappers());
+ return new StorageResource(storageNodes, mappers);
}
- private StorageResource getStaleStorageResource(final ResourceMetaData
resourceMetaData, final StorageResource toBeAlteredStorageResource) {
- Map<StorageNode, DataSource> storageNodes = new
LinkedHashMap<>(toBeAlteredStorageResource.getDataSourceMap().size(), 1F);
+ private StorageResource getStaleStorageResource(final ResourceMetaData
resourceMetaData, final Map<String, StorageUnitNodeMapper> mappers) {
+ Collection<StorageNode> toBeAlteredStorageNodes =
mappers.values().stream().map(StorageUnitNodeMapper::getStorageNode).collect(Collectors.toSet());
+ Map<StorageNode, DataSource> storageNodes = new
LinkedHashMap<>(toBeAlteredStorageNodes.size(), 1F);
for (Entry<StorageNode, DataSource> entry :
resourceMetaData.getDataSourceMap().entrySet()) {
- if
(toBeAlteredStorageResource.getDataSourceMap().containsKey(entry.getKey())) {
+ if (toBeAlteredStorageNodes.contains(entry.getKey())) {
storageNodes.put(entry.getKey(), entry.getValue());
}
}
- return new StorageResource(storageNodes,
toBeAlteredStorageResource.getStorageUnitNodeMappers());
+ return new StorageResource(storageNodes, mappers);
}
/**
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 14bd8691222..47abbbf6884 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
@@ -51,9 +51,9 @@ public final class ResourceSwitchManager {
public SwitchingResource create(final ResourceMetaData resourceMetaData,
final Map<String, DataSourcePoolProperties> toBeChangedPropsMap) {
Map<String, DataSourcePoolProperties> mergedPropsMap = new
HashMap<>(resourceMetaData.getStorageUnitMetaData().getDataSourcePoolPropertiesMap());
mergedPropsMap.putAll(toBeChangedPropsMap);
- StorageResource toBeChangedStorageResource =
StorageResourceCreator.createStorageResourceWithoutDataSource(toBeChangedPropsMap);
- return new SwitchingResource(resourceMetaData,
createNewStorageResource(resourceMetaData, toBeChangedStorageResource,
toBeChangedPropsMap),
- getStaleDataSources(resourceMetaData,
toBeChangedStorageResource, mergedPropsMap), mergedPropsMap);
+ Map<String, StorageUnitNodeMapper> toBeChangedMappers =
StorageResourceCreator.getStorageUnitNodeMappers(toBeChangedPropsMap);
+ return new SwitchingResource(resourceMetaData,
createNewStorageResource(resourceMetaData, toBeChangedMappers,
toBeChangedPropsMap),
+ getStaleDataSources(resourceMetaData, toBeChangedMappers,
mergedPropsMap), mergedPropsMap);
}
/**
@@ -66,9 +66,9 @@ public final class ResourceSwitchManager {
public SwitchingResource createByDropResource(final ResourceMetaData
resourceMetaData, final Map<String, DataSourcePoolProperties>
toBeDeletedPropsMap) {
Map<String, DataSourcePoolProperties>
mergedDataSourcePoolPropertiesMap = new
HashMap<>(resourceMetaData.getStorageUnitMetaData().getDataSourcePoolPropertiesMap());
mergedDataSourcePoolPropertiesMap.keySet().removeIf(toBeDeletedPropsMap::containsKey);
- StorageResource toToBeRemovedStorageResource =
StorageResourceCreator.createStorageResourceWithoutDataSource(toBeDeletedPropsMap);
+ Map<String, StorageUnitNodeMapper> toRemovedMappers =
StorageResourceCreator.getStorageUnitNodeMappers(toBeDeletedPropsMap);
return new SwitchingResource(resourceMetaData, new
StorageResource(Collections.emptyMap(), Collections.emptyMap()),
- getToBeRemovedStaleDataSources(resourceMetaData,
toToBeRemovedStorageResource), mergedDataSourcePoolPropertiesMap);
+ getToBeRemovedStaleDataSources(resourceMetaData,
toRemovedMappers), mergedDataSourcePoolPropertiesMap);
}
/**
@@ -82,31 +82,32 @@ public final class ResourceSwitchManager {
Map<String, DataSourcePoolProperties>
mergedDataSourcePoolPropertiesMap = new
HashMap<>(resourceMetaData.getStorageUnitMetaData().getDataSourcePoolPropertiesMap());
mergedDataSourcePoolPropertiesMap.keySet().removeIf(each ->
!toBeChangedPropsMap.containsKey(each));
mergedDataSourcePoolPropertiesMap.putAll(toBeChangedPropsMap);
- StorageResource toBeChangedStorageResource =
StorageResourceCreator.createStorageResourceWithoutDataSource(toBeChangedPropsMap);
- StorageResource staleStorageResource =
getStaleDataSources(resourceMetaData, toBeChangedStorageResource,
toBeChangedPropsMap);
- staleStorageResource.getDataSourceMap()
-
.putAll(getToBeDeletedDataSources(resourceMetaData.getDataSourceMap(),
toBeChangedStorageResource.getDataSourceMap().keySet()));
+ Map<String, StorageUnitNodeMapper> toBeChangedMappers =
StorageResourceCreator.getStorageUnitNodeMappers(toBeChangedPropsMap);
+ StorageResource staleStorageResource =
getStaleDataSources(resourceMetaData, toBeChangedMappers, toBeChangedPropsMap);
+ Collection<StorageNode> toBeChangedStorageNodes =
toBeChangedMappers.values().stream().map(StorageUnitNodeMapper::getStorageNode).collect(Collectors.toSet());
+
staleStorageResource.getDataSourceMap().putAll(getToBeDeletedDataSources(resourceMetaData.getDataSourceMap(),
toBeChangedStorageNodes));
staleStorageResource.getStorageUnitNodeMappers().putAll(
-
getToBeDeletedStorageUnitNodeMappers(resourceMetaData.getStorageUnitMetaData().getStorageUnits(),
toBeChangedStorageResource.getStorageUnitNodeMappers().keySet()));
+
getToBeDeletedStorageUnitNodeMappers(resourceMetaData.getStorageUnitMetaData().getStorageUnits(),
toBeChangedMappers.keySet()));
return new SwitchingResource(resourceMetaData,
- createNewStorageResource(resourceMetaData,
toBeChangedStorageResource, toBeChangedPropsMap), staleStorageResource,
mergedDataSourcePoolPropertiesMap);
+ createNewStorageResource(resourceMetaData, toBeChangedMappers,
toBeChangedPropsMap), staleStorageResource, mergedDataSourcePoolPropertiesMap);
}
private StorageResource createNewStorageResource(final ResourceMetaData
resourceMetaData,
- final StorageResource
toBeChangedStorageResource, final Map<String, DataSourcePoolProperties>
storageUnitDataSourcePoolProps) {
+ final Map<String,
StorageUnitNodeMapper> toBeChangedMappers, final Map<String,
DataSourcePoolProperties> storageUnitDataSourcePoolProps) {
+ Collection<StorageNode> toBeChangedStorageNode =
toBeChangedMappers.values().stream().map(StorageUnitNodeMapper::getStorageNode).collect(Collectors.toSet());
Map<StorageNode, DataSourcePoolProperties>
storageNodeDataSourcePoolProps =
StorageResourceCreator.getStorageNodeDataSourcePoolProperties(storageUnitDataSourcePoolProps);
Map<StorageNode, DataSource> storageNodes =
- getNewStorageNodes(resourceMetaData,
toBeChangedStorageResource.getDataSourceMap(), storageNodeDataSourcePoolProps);
- Map<String, StorageUnitNodeMapper> storageUnitNodeMappers =
getNewStorageUnitNodeMappers(resourceMetaData,
toBeChangedStorageResource.getStorageUnitNodeMappers());
+ getNewStorageNodes(resourceMetaData, toBeChangedStorageNode,
storageNodeDataSourcePoolProps);
+ Map<String, StorageUnitNodeMapper> storageUnitNodeMappers =
getNewStorageUnitNodeMappers(resourceMetaData, toBeChangedMappers);
return new StorageResource(storageNodes, storageUnitNodeMappers);
}
- private Map<StorageNode, DataSource> getNewStorageNodes(final
ResourceMetaData resourceMetaData, final Map<StorageNode, DataSource>
toBeChangedStorageNodes,
+ private Map<StorageNode, DataSource> getNewStorageNodes(final
ResourceMetaData resourceMetaData, final Collection<StorageNode>
toBeChangedStorageNode,
final
Map<StorageNode, DataSourcePoolProperties> propsMap) {
Map<StorageNode, DataSource> result = new
LinkedHashMap<>(resourceMetaData.getDataSourceMap());
-
result.keySet().removeAll(getToBeDeletedDataSources(resourceMetaData.getDataSourceMap(),
toBeChangedStorageNodes.keySet()).keySet());
-
result.putAll(getChangedDataSources(resourceMetaData.getDataSourceMap(),
toBeChangedStorageNodes, propsMap));
-
result.putAll(getToBeAddedDataSources(resourceMetaData.getDataSourceMap(),
toBeChangedStorageNodes, propsMap));
+
result.keySet().removeAll(getToBeDeletedDataSources(resourceMetaData.getDataSourceMap(),
toBeChangedStorageNode).keySet());
+
result.putAll(getChangedDataSources(resourceMetaData.getDataSourceMap(),
toBeChangedStorageNode, propsMap));
+
result.putAll(getToBeAddedDataSources(resourceMetaData.getDataSourceMap(),
toBeChangedStorageNode, propsMap));
return result;
}
@@ -119,10 +120,10 @@ public final class ResourceSwitchManager {
}
private Map<StorageNode, DataSource> getChangedDataSources(final
Map<StorageNode, DataSource> storageNodes,
- final
Map<StorageNode, DataSource> toBeChangedStorageNodes, final Map<StorageNode,
DataSourcePoolProperties> propsMap) {
- Collection<StorageNode> toBeChangedDataSourceNames =
toBeChangedStorageNodes.keySet().stream()
+ final
Collection<StorageNode> toBeChangedStorageNode, final Map<StorageNode,
DataSourcePoolProperties> propsMap) {
+ Collection<StorageNode> toBeChangedDataSourceNames =
toBeChangedStorageNode.stream()
.filter(each -> isModifiedDataSource(storageNodes, each,
propsMap.get(each))).collect(Collectors.toList());
- Map<StorageNode, DataSource> result = new
LinkedHashMap<>(toBeChangedStorageNodes.size(), 1F);
+ Map<StorageNode, DataSource> result = new
LinkedHashMap<>(toBeChangedStorageNode.size(), 1F);
for (StorageNode each : toBeChangedDataSourceNames) {
result.put(each, DataSourcePoolCreator.create(propsMap.get(each)));
}
@@ -133,9 +134,9 @@ public final class ResourceSwitchManager {
return originalDataSources.containsKey(storageNode) &&
!propsMap.equals(DataSourcePoolPropertiesCreator.create(originalDataSources.get(storageNode)));
}
- private Map<StorageNode, DataSource> getToBeAddedDataSources(final
Map<StorageNode, DataSource> storageNodes, final Map<StorageNode, DataSource>
toBeChangedStorageNodes,
+ private Map<StorageNode, DataSource> getToBeAddedDataSources(final
Map<StorageNode, DataSource> storageNodes, final Collection<StorageNode>
toBeChangedStorageNode,
final
Map<StorageNode, DataSourcePoolProperties> propsMap) {
- Collection<StorageNode> toBeAddedDataSourceNames =
toBeChangedStorageNodes.keySet().stream().filter(each ->
!storageNodes.containsKey(each)).collect(Collectors.toList());
+ Collection<StorageNode> toBeAddedDataSourceNames =
toBeChangedStorageNode.stream().filter(each ->
!storageNodes.containsKey(each)).collect(Collectors.toList());
Map<StorageNode, DataSource> result = new LinkedHashMap<>();
for (StorageNode each : toBeAddedDataSourceNames) {
result.put(each, DataSourcePoolCreator.create(propsMap.get(each)));
@@ -143,25 +144,26 @@ public final class ResourceSwitchManager {
return result;
}
- private StorageResource getToBeRemovedStaleDataSources(final
ResourceMetaData resourceMetaData, final StorageResource
toBeRemovedStorageResource) {
+ private StorageResource getToBeRemovedStaleDataSources(final
ResourceMetaData resourceMetaData, final Map<String, StorageUnitNodeMapper>
toRemovedMappers) {
Map<String, StorageUnitNodeMapper> reservedStorageUnitNodeMappers =
resourceMetaData.getStorageUnitMetaData().getStorageUnits().entrySet().stream()
- .filter(entry ->
!toBeRemovedStorageResource.getStorageUnitNodeMappers().containsKey(entry.getKey()))
+ .filter(entry -> !toRemovedMappers.containsKey(entry.getKey()))
.collect(Collectors.toMap(Entry::getKey, entry ->
entry.getValue().getUnitNodeMapper()));
+ Collection<StorageNode> toBeRemovedStorageNodes =
toRemovedMappers.values().stream().map(StorageUnitNodeMapper::getStorageNode).collect(Collectors.toSet());
Collection<StorageNode> inUsedDataSourceNames =
reservedStorageUnitNodeMappers.values().stream().map(StorageUnitNodeMapper::getStorageNode).collect(Collectors.toSet());
Map<StorageNode, DataSource> staleStorageNodes =
resourceMetaData.getDataSourceMap().entrySet().stream()
- .filter(entry ->
toBeRemovedStorageResource.getDataSourceMap().containsKey(entry.getKey()) &&
!inUsedDataSourceNames.contains(entry.getKey()))
+ .filter(entry ->
toBeRemovedStorageNodes.contains(entry.getKey()) &&
!inUsedDataSourceNames.contains(entry.getKey()))
.collect(Collectors.toMap(Entry::getKey, Entry::getValue));
Map<String, StorageUnitNodeMapper> staleStorageUnitNodeMappers =
resourceMetaData.getStorageUnitMetaData().getStorageUnits().entrySet().stream()
.filter(entry ->
!reservedStorageUnitNodeMappers.containsKey(entry.getKey())).collect(Collectors.toMap(Entry::getKey,
entry -> entry.getValue().getUnitNodeMapper()));
return new StorageResource(staleStorageNodes,
staleStorageUnitNodeMappers);
}
- private StorageResource getStaleDataSources(final ResourceMetaData
resourceMetaData, final StorageResource toBeChangedStorageResource,
+ private StorageResource getStaleDataSources(final ResourceMetaData
resourceMetaData, final Map<String, StorageUnitNodeMapper> toBeChangedMappers,
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(),
StorageResourceCreator.getStorageNodeDataSourcePoolProperties(storageUnitDataSourcePoolProps)));
-
storageUnitNodeMappers.putAll(getChangedStorageUnitNodeMappers(resourceMetaData.getStorageUnitMetaData().getStorageUnits(),
toBeChangedStorageResource.getStorageUnitNodeMappers()));
+
storageUnitNodeMappers.putAll(getChangedStorageUnitNodeMappers(resourceMetaData.getStorageUnitMetaData().getStorageUnits(),
toBeChangedMappers));
return new StorageResource(storageNodes, storageUnitNodeMappers);
}