This is an automated email from the ASF dual-hosted git repository.
zhangliang 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 27a4dcc Only create data sources that are different from local when
building ContextManager (#11885)
27a4dcc is described below
commit 27a4dcca0ac9034a647077ce4f15332287947394
Author: Haoran Meng <[email protected]>
AuthorDate: Thu Aug 19 16:05:34 2021 +0800
Only create data sources that are different from local when building
ContextManager (#11885)
* Only create data sources that are different from local when building
ContextManager
* Only create data sources that are different from local when building
ContextManager
* Only create data sources that are different from local when building
ContextManager
* Fix unit test
* Fix unit test
* Fix unit test
* Use new HashMap to instead of emptyMap
* Only create data sources that are different from local when building
ContextManager
* For check style
---
.../context/ClusterContextManagerBuilder.java | 34 +++++++++++++++++++---
.../impl/StandaloneContextManagerBuilder.java | 33 ++++++++++++++++++---
.../GovernanceShardingSphereDataSource.java | 3 +-
.../fixture/TestRegistryCenterRepository.java | 14 ++++-----
4 files changed, 68 insertions(+), 16 deletions(-)
diff --git
a/shardingsphere-governance/shardingsphere-governance-context/src/main/java/org/apache/shardingsphere/governance/context/ClusterContextManagerBuilder.java
b/shardingsphere-governance/shardingsphere-governance-context/src/main/java/org/apache/shardingsphere/governance/context/ClusterContextManagerBuilder.java
index 02b11f8..c6c24e5 100644
---
a/shardingsphere-governance/shardingsphere-governance-context/src/main/java/org/apache/shardingsphere/governance/context/ClusterContextManagerBuilder.java
+++
b/shardingsphere-governance/shardingsphere-governance-context/src/main/java/org/apache/shardingsphere/governance/context/ClusterContextManagerBuilder.java
@@ -38,7 +38,6 @@ import
org.apache.shardingsphere.transaction.context.TransactionContexts;
import javax.sql.DataSource;
import java.sql.SQLException;
import java.util.Collection;
-import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
@@ -61,6 +60,7 @@ public final class ClusterContextManagerBuilder implements
ContextManagerBuilder
DistMetaDataPersistService persistService = new
DistMetaDataPersistService(persistRepository.get());
RegistryCenter registryCenter = new
RegistryCenter((RegistryCenterRepository) persistRepository.get());
persistConfigurations(persistService, dataSourcesMap,
schemaRuleConfigs, globalRuleConfigs, props, isOverwrite);
+ // TODO Here may be some problems to load all schemaNames for JDBC
Collection<String> schemaNames =
persistService.getSchemaMetaDataService().loadAllNames();
MetaDataContexts metaDataContexts;
// TODO isEmpty for test reg center fixture, will remove after local
memory reg center fixture finished
@@ -111,7 +111,13 @@ public final class ClusterContextManagerBuilder implements
ContextManagerBuilder
Map<String, Map<String, DataSourceConfiguration>>
loadedDataSourceConfigs = loadDataSourceConfigurations(persistService,
schemaNames);
Map<String, Map<String, DataSourceConfiguration>>
changedDataSourceConfigs = getChangedDataSourceConfigurations(dataSourcesMap,
loadedDataSourceConfigs);
Map<String, Map<String, DataSource>> result = new
LinkedHashMap<>(dataSourcesMap);
- result.putAll(getChangedDataSources(changedDataSourceConfigs));
+
getChangedDataSources(changedDataSourceConfigs).entrySet().forEach(entry -> {
+ if (result.containsKey(entry.getKey())) {
+ result.get(entry.getKey()).putAll(entry.getValue());
+ } else {
+ result.put(entry.getKey(), entry.getValue());
+ }
+ });
return result;
}
@@ -123,10 +129,30 @@ public final class ClusterContextManagerBuilder
implements ContextManagerBuilder
return result;
}
- // TODO finish this method
private Map<String, Map<String, DataSourceConfiguration>>
getChangedDataSourceConfigurations(final Map<String, Map<String, DataSource>>
configuredDataSourcesMap,
final Map<String, Map<String, DataSourceConfiguration>>
loadedDataSourceConfigs) {
- return isEmptyLocalDataSourcesMap(configuredDataSourcesMap) ?
loadedDataSourceConfigs : Collections.emptyMap();
+ if (isEmptyLocalDataSourcesMap(configuredDataSourcesMap)) {
+ return loadedDataSourceConfigs;
+ }
+ Map<String, Map<String, DataSourceConfiguration>> result = new
HashMap<>(loadedDataSourceConfigs.size(), 1);
+ for (Entry<String, Map<String, DataSourceConfiguration>> entry :
loadedDataSourceConfigs.entrySet()) {
+ if (configuredDataSourcesMap.containsKey(entry.getKey())) {
+ Map<String, DataSourceConfiguration> changedDataSources =
getChangedDataSourcesConfigurations(configuredDataSourcesMap.get(entry.getKey()),
entry.getValue());
+ if (!changedDataSources.isEmpty()) {
+ result.put(entry.getKey(), changedDataSources);
+ }
+ } else {
+ result.put(entry.getKey(), entry.getValue());
+ }
+ }
+ return result;
+ }
+
+ private Map<String, DataSourceConfiguration>
getChangedDataSourcesConfigurations(final Map<String, DataSource>
dataSourceMap,
+
final Map<String, DataSourceConfiguration>
loadedDataSourceConfigurationMap) {
+ Map<String, DataSourceConfiguration> dataSourceConfigurationMap =
DataSourceConverter.getDataSourceConfigurationMap(dataSourceMap);
+ return
loadedDataSourceConfigurationMap.entrySet().stream().filter(entry ->
!dataSourceConfigurationMap.containsKey(entry.getKey())
+ ||
!dataSourceConfigurationMap.get(entry.getKey()).equals(entry.getValue())).collect(Collectors.toMap(Entry::getKey,
Entry::getValue));
}
private Map<String, Map<String, DataSource>> getChangedDataSources(final
Map<String, Map<String, DataSourceConfiguration>>
changedDataSourceConfigurations) {
diff --git
a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/manager/impl/StandaloneContextManagerBuilder.java
b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/manager/impl/StandaloneContextManagerBuilder.java
index a4ce02a..78dc6fa 100644
---
a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/manager/impl/StandaloneContextManagerBuilder.java
+++
b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/manager/impl/StandaloneContextManagerBuilder.java
@@ -36,7 +36,6 @@ import
org.apache.shardingsphere.transaction.context.TransactionContexts;
import javax.sql.DataSource;
import java.sql.SQLException;
import java.util.Collection;
-import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
@@ -108,7 +107,13 @@ public final class StandaloneContextManagerBuilder
implements ContextManagerBuil
Map<String, Map<String, DataSourceConfiguration>>
loadedDataSourceConfigs = loadDataSourceConfigurations(persistService,
schemaNames);
Map<String, Map<String, DataSourceConfiguration>>
changedDataSourceConfigs = getChangedDataSourceConfigurations(dataSourcesMap,
loadedDataSourceConfigs);
Map<String, Map<String, DataSource>> result = new
LinkedHashMap<>(dataSourcesMap);
- result.putAll(getChangedDataSources(changedDataSourceConfigs));
+
getChangedDataSources(changedDataSourceConfigs).entrySet().forEach(entry -> {
+ if (result.containsKey(entry.getKey())) {
+ result.get(entry.getKey()).putAll(entry.getValue());
+ } else {
+ result.put(entry.getKey(), entry.getValue());
+ }
+ });
return result;
}
@@ -120,10 +125,30 @@ public final class StandaloneContextManagerBuilder
implements ContextManagerBuil
return result;
}
- // TODO finish this method
private Map<String, Map<String, DataSourceConfiguration>>
getChangedDataSourceConfigurations(final Map<String, Map<String, DataSource>>
configuredDataSourcesMap,
final Map<String, Map<String, DataSourceConfiguration>>
loadedDataSourceConfigs) {
- return isEmptyLocalDataSourcesMap(configuredDataSourcesMap) ?
loadedDataSourceConfigs : Collections.emptyMap();
+ if (isEmptyLocalDataSourcesMap(configuredDataSourcesMap)) {
+ return loadedDataSourceConfigs;
+ }
+ Map<String, Map<String, DataSourceConfiguration>> result = new
HashMap<>(loadedDataSourceConfigs.size(), 1);
+ for (Entry<String, Map<String, DataSourceConfiguration>> entry :
loadedDataSourceConfigs.entrySet()) {
+ if (configuredDataSourcesMap.containsKey(entry.getKey())) {
+ Map<String, DataSourceConfiguration> changedDataSources =
getChangedDataSourcesConfigurations(configuredDataSourcesMap.get(entry.getKey()),
entry.getValue());
+ if (!changedDataSources.isEmpty()) {
+ result.put(entry.getKey(), changedDataSources);
+ }
+ } else {
+ result.put(entry.getKey(), entry.getValue());
+ }
+ }
+ return result;
+ }
+
+ private Map<String, DataSourceConfiguration>
getChangedDataSourcesConfigurations(final Map<String, DataSource> dataSourceMap,
+
final Map<String, DataSourceConfiguration>
loadedDataSourceConfigurationMap) {
+ Map<String, DataSourceConfiguration> dataSourceConfigurationMap =
DataSourceConverter.getDataSourceConfigurationMap(dataSourceMap);
+ return
loadedDataSourceConfigurationMap.entrySet().stream().filter(entry ->
!dataSourceConfigurationMap.containsKey(entry.getKey())
+ ||
!dataSourceConfigurationMap.get(entry.getKey()).equals(entry.getValue())).collect(Collectors.toMap(Entry::getKey,
Entry::getValue));
}
private Map<String, Map<String, DataSource>> getChangedDataSources(final
Map<String, Map<String, DataSourceConfiguration>>
changedDataSourceConfigurations) {
diff --git
a/shardingsphere-jdbc/shardingsphere-jdbc-governance/src/main/java/org/apache/shardingsphere/driver/governance/internal/datasource/GovernanceShardingSphereDataSource.java
b/shardingsphere-jdbc/shardingsphere-jdbc-governance/src/main/java/org/apache/shardingsphere/driver/governance/internal/datasource/GovernanceShardingSphereDataSource.java
index 68b130a..35cda90 100644
---
a/shardingsphere-jdbc/shardingsphere-jdbc-governance/src/main/java/org/apache/shardingsphere/driver/governance/internal/datasource/GovernanceShardingSphereDataSource.java
+++
b/shardingsphere-jdbc/shardingsphere-jdbc-governance/src/main/java/org/apache/shardingsphere/driver/governance/internal/datasource/GovernanceShardingSphereDataSource.java
@@ -38,6 +38,7 @@ import java.sql.Connection;
import java.sql.SQLException;
import java.util.Collection;
import java.util.Collections;
+import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import java.util.stream.Collectors;
@@ -62,7 +63,7 @@ public final class GovernanceShardingSphereDataSource extends
AbstractUnsupporte
this.schemaName = schemaName;
mode = ModeBuilderEngine.build(modeConfig);
contextManager =
TypedSPIRegistry.getRegisteredService(ContextManagerBuilder.class,
modeConfig.getType(), new Properties()).build(
- mode, Collections.singletonMap(schemaName,
Collections.emptyMap()), Collections.singletonMap(schemaName,
Collections.emptyList()), Collections.emptyList(), new Properties(), false);
+ mode, Collections.singletonMap(schemaName, new HashMap<>()),
Collections.singletonMap(schemaName, Collections.emptyList()),
Collections.emptyList(), new Properties(), false);
}
public GovernanceShardingSphereDataSource(final String schemaName, final
ModeConfiguration modeConfig, final Map<String, DataSource> dataSourceMap,
diff --git
a/shardingsphere-jdbc/shardingsphere-jdbc-governance/src/test/java/org/apache/shardingsphere/driver/governance/fixture/TestRegistryCenterRepository.java
b/shardingsphere-jdbc/shardingsphere-jdbc-governance/src/test/java/org/apache/shardingsphere/driver/governance/fixture/TestRegistryCenterRepository.java
index c4a68da..be4ab46 100644
---
a/shardingsphere-jdbc/shardingsphere-jdbc-governance/src/test/java/org/apache/shardingsphere/driver/governance/fixture/TestRegistryCenterRepository.java
+++
b/shardingsphere-jdbc/shardingsphere-jdbc-governance/src/test/java/org/apache/shardingsphere/driver/governance/fixture/TestRegistryCenterRepository.java
@@ -30,31 +30,31 @@ import java.util.concurrent.TimeUnit;
public final class TestRegistryCenterRepository implements
RegistryCenterRepository {
- private static final Map<String, String> REGISTRY_DATA = new
LinkedHashMap<>();
+ private final Map<String, String> registryData = new LinkedHashMap<>();
@Override
public void init(final RegistryCenterConfiguration config) {
- REGISTRY_DATA.put("/metadata", DefaultSchema.LOGIC_NAME);
+ registryData.put("/metadata", DefaultSchema.LOGIC_NAME);
}
@Override
public String get(final String key) {
- return REGISTRY_DATA.get(key);
+ return registryData.get(key);
}
@Override
public List<String> getChildrenKeys(final String key) {
- return REGISTRY_DATA.containsKey(key) ?
Collections.singletonList(REGISTRY_DATA.get(key)) : Collections.emptyList();
+ return registryData.containsKey(key) ?
Collections.singletonList(registryData.get(key)) : Collections.emptyList();
}
@Override
public void persist(final String key, final String value) {
- REGISTRY_DATA.put(key, value);
+ registryData.put(key, value);
}
@Override
public void persistEphemeral(final String key, final String value) {
- REGISTRY_DATA.put(key, value);
+ registryData.put(key, value);
}
@Override
@@ -76,7 +76,7 @@ public final class TestRegistryCenterRepository implements
RegistryCenterReposit
@Override
public void close() {
- REGISTRY_DATA.clear();
+ registryData.clear();
}
@Override