This is an automated email from the ASF dual-hosted git repository. jianglongtao pushed a commit to branch fix-33341 in repository https://gitbox.apache.org/repos/asf/shardingsphere.git
commit d1b8239fd27d48a92ba33a12b509b641ede7a392 Author: Raigor <[email protected]> AuthorDate: Fri Oct 11 20:27:16 2024 +0800 Add configuration property instance-connection-enabled (#14) --- .../DataSourceGeneratedDatabaseConfiguration.java | 8 +++++-- .../DataSourceProvidedDatabaseConfiguration.java | 12 ++++++---- .../TemporaryConfigurationPropertyKey.java | 4 ++++ .../resource/node/StorageNodeAggregator.java | 14 +++++++---- .../resource/unit/StorageUnitNodeMapCreator.java | 15 +++++++----- ...taSourceGeneratedDatabaseConfigurationTest.java | 5 +++- .../mode/manager/ContextManager.java | 6 ++++- .../context/ConfigurationContextManager.java | 16 ++++++++++--- .../manager/switcher/ResourceSwitchManager.java | 22 ++++++++++++----- .../mode/metadata/MetaDataContextsFactory.java | 28 ++++++++++++++++------ .../mode/manager/ContextManagerTest.java | 4 ++++ .../standalone/StandaloneModeContextManager.java | 19 +++++++++++---- .../swapper/YamlProxyConfigurationSwapper.java | 17 +++++++++---- .../YamlDatabaseConfigurationImportExecutor.java | 9 ++++++- .../queryable/ShowDistVariablesExecutorTest.java | 4 +++- .../ImportDatabaseConfigurationExecutorTest.java | 4 ++++ .../ral/updatable/ImportMetaDataExecutorTest.java | 4 ++++ 17 files changed, 146 insertions(+), 45 deletions(-) diff --git a/infra/common/src/main/java/org/apache/shardingsphere/infra/config/database/impl/DataSourceGeneratedDatabaseConfiguration.java b/infra/common/src/main/java/org/apache/shardingsphere/infra/config/database/impl/DataSourceGeneratedDatabaseConfiguration.java index 31c28a144ac..d71656bcce1 100644 --- a/infra/common/src/main/java/org/apache/shardingsphere/infra/config/database/impl/DataSourceGeneratedDatabaseConfiguration.java +++ b/infra/common/src/main/java/org/apache/shardingsphere/infra/config/database/impl/DataSourceGeneratedDatabaseConfiguration.java @@ -27,6 +27,8 @@ import org.apache.shardingsphere.infra.datasource.pool.props.domain.DataSourcePo 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.StorageUnitNodeMapCreator; +import org.apache.shardingsphere.infra.util.SphereEx; +import org.apache.shardingsphere.infra.util.SphereEx.Type; import javax.sql.DataSource; import java.util.Collection; @@ -47,11 +49,13 @@ public final class DataSourceGeneratedDatabaseConfiguration implements DatabaseC private final Map<StorageNode, DataSource> dataSources; - public DataSourceGeneratedDatabaseConfiguration(final Map<String, DataSourceConfiguration> dataSourceConfigs, final Collection<RuleConfiguration> ruleConfigs) { + public DataSourceGeneratedDatabaseConfiguration(final Map<String, DataSourceConfiguration> dataSourceConfigs, final Collection<RuleConfiguration> ruleConfigs, + @SphereEx final boolean isInstanceConnectionEnabled) { ruleConfigurations = ruleConfigs; Map<String, DataSourcePoolProperties> dataSourcePoolPropertiesMap = dataSourceConfigs.entrySet().stream() .collect(Collectors.toMap(Entry::getKey, entry -> DataSourcePoolPropertiesCreator.create(entry.getValue()), (oldValue, currentValue) -> oldValue, LinkedHashMap::new)); - Map<String, StorageNode> storageUnitNodeMap = StorageUnitNodeMapCreator.create(dataSourcePoolPropertiesMap); + @SphereEx(Type.MODIFY) + Map<String, StorageNode> storageUnitNodeMap = StorageUnitNodeMapCreator.create(dataSourcePoolPropertiesMap, isInstanceConnectionEnabled); Map<StorageNode, DataSource> storageNodeDataSources = getStorageNodeDataSourceMap(dataSourcePoolPropertiesMap, storageUnitNodeMap); storageUnits = new LinkedHashMap<>(dataSourceConfigs.size(), 1F); for (Entry<String, DataSourceConfiguration> entry : dataSourceConfigs.entrySet()) { diff --git a/infra/common/src/main/java/org/apache/shardingsphere/infra/config/database/impl/DataSourceProvidedDatabaseConfiguration.java b/infra/common/src/main/java/org/apache/shardingsphere/infra/config/database/impl/DataSourceProvidedDatabaseConfiguration.java index 7543e2a2043..c1183c30291 100644 --- a/infra/common/src/main/java/org/apache/shardingsphere/infra/config/database/impl/DataSourceProvidedDatabaseConfiguration.java +++ b/infra/common/src/main/java/org/apache/shardingsphere/infra/config/database/impl/DataSourceProvidedDatabaseConfiguration.java @@ -26,6 +26,8 @@ import org.apache.shardingsphere.infra.metadata.database.resource.node.StorageNo import org.apache.shardingsphere.infra.metadata.database.resource.node.StorageNodeAggregator; import org.apache.shardingsphere.infra.metadata.database.resource.unit.StorageUnit; import org.apache.shardingsphere.infra.metadata.database.resource.unit.StorageUnitNodeMapCreator; +import org.apache.shardingsphere.infra.util.SphereEx; +import org.apache.shardingsphere.infra.util.SphereEx.Type; import javax.sql.DataSource; import java.util.Collection; @@ -47,7 +49,7 @@ public final class DataSourceProvidedDatabaseConfiguration implements DatabaseCo private final Map<StorageNode, DataSource> dataSources; public DataSourceProvidedDatabaseConfiguration(final Map<String, DataSource> dataSources, final Collection<RuleConfiguration> ruleConfigs) { - this.ruleConfigurations = ruleConfigs; + ruleConfigurations = ruleConfigs; Map<String, StorageNode> storageUnitNodeMap = dataSources.keySet().stream() .collect(Collectors.toMap(each -> each, StorageNode::new, (oldValue, currentValue) -> oldValue, LinkedHashMap::new)); Map<StorageNode, DataSource> storageNodeDataSources = StorageNodeAggregator.aggregateDataSources(dataSources); @@ -56,9 +58,11 @@ public final class DataSourceProvidedDatabaseConfiguration implements DatabaseCo } public DataSourceProvidedDatabaseConfiguration(final Map<StorageNode, DataSource> storageNodeDataSources, - final Collection<RuleConfiguration> ruleConfigs, final Map<String, DataSourcePoolProperties> dataSourcePoolPropsMap) { - this.ruleConfigurations = ruleConfigs; - Map<String, StorageNode> storageUnitNodeMap = StorageUnitNodeMapCreator.create(dataSourcePoolPropsMap); + final Collection<RuleConfiguration> ruleConfigs, final Map<String, DataSourcePoolProperties> dataSourcePoolPropsMap, + @SphereEx final boolean isInstanceConnectionEnabled) { + ruleConfigurations = ruleConfigs; + @SphereEx(Type.MODIFY) + Map<String, StorageNode> storageUnitNodeMap = StorageUnitNodeMapCreator.create(dataSourcePoolPropsMap, isInstanceConnectionEnabled); storageUnits = getStorageUnits(storageUnitNodeMap, storageNodeDataSources, dataSourcePoolPropsMap); dataSources = storageNodeDataSources; } diff --git a/infra/common/src/main/java/org/apache/shardingsphere/infra/config/props/temporary/TemporaryConfigurationPropertyKey.java b/infra/common/src/main/java/org/apache/shardingsphere/infra/config/props/temporary/TemporaryConfigurationPropertyKey.java index fdd63ddaf33..e4e3e834e5c 100644 --- a/infra/common/src/main/java/org/apache/shardingsphere/infra/config/props/temporary/TemporaryConfigurationPropertyKey.java +++ b/infra/common/src/main/java/org/apache/shardingsphere/infra/config/props/temporary/TemporaryConfigurationPropertyKey.java @@ -20,6 +20,7 @@ package org.apache.shardingsphere.infra.config.props.temporary; import lombok.Getter; import lombok.RequiredArgsConstructor; import org.apache.shardingsphere.infra.props.TypedPropertyKey; +import org.apache.shardingsphere.infra.util.SphereEx; import java.util.Arrays; import java.util.Collection; @@ -37,6 +38,9 @@ public enum TemporaryConfigurationPropertyKey implements TypedPropertyKey { */ PROXY_META_DATA_COLLECTOR_ENABLED("proxy-meta-data-collector-enabled", String.valueOf(Boolean.FALSE), boolean.class, false), + @SphereEx + INSTANCE_CONNECTION_ENABLED("instance-connection-enabled", String.valueOf(Boolean.TRUE), boolean.class, true), + /** * System schema metadata enabled. */ diff --git a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/resource/node/StorageNodeAggregator.java b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/resource/node/StorageNodeAggregator.java index 375263ee7d7..f1b0b90ef45 100644 --- a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/resource/node/StorageNodeAggregator.java +++ b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/resource/node/StorageNodeAggregator.java @@ -25,6 +25,8 @@ import org.apache.shardingsphere.infra.database.core.exception.UnrecognizedDatab 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.props.domain.DataSourcePoolProperties; +import org.apache.shardingsphere.infra.util.SphereEx; +import org.apache.shardingsphere.infra.util.SphereEx.Type; import javax.sql.DataSource; import java.util.LinkedHashMap; @@ -53,24 +55,28 @@ public final class StorageNodeAggregator { * Aggregate data source pool properties map to storage node grouped. * * @param storageUnitDataSourcePoolPropsMap storage unit name and data source pool properties map + * @param isInstanceConnectionEnabled is instance connection enabled * @return storage node and data source pool properties map */ - public static Map<StorageNode, DataSourcePoolProperties> aggregateDataSourcePoolProperties(final Map<String, DataSourcePoolProperties> storageUnitDataSourcePoolPropsMap) { + public static Map<StorageNode, DataSourcePoolProperties> aggregateDataSourcePoolProperties(final Map<String, DataSourcePoolProperties> storageUnitDataSourcePoolPropsMap, + @SphereEx final boolean isInstanceConnectionEnabled) { Map<StorageNode, DataSourcePoolProperties> result = new LinkedHashMap<>(); for (Entry<String, DataSourcePoolProperties> entry : storageUnitDataSourcePoolPropsMap.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 = getStorageNode(entry.getKey(), url, standardProps.get("username").toString(), isInstanceConnectionAvailable); + @SphereEx(Type.MODIFY) + StorageNode storageNode = getStorageNode(entry.getKey(), url, standardProps.get("username").toString(), isInstanceConnectionAvailable, isInstanceConnectionEnabled); result.putIfAbsent(storageNode, entry.getValue()); } return result; } - private static StorageNode getStorageNode(final String dataSourceName, final String url, final String username, final boolean isInstanceConnectionAvailable) { + private static StorageNode getStorageNode(final String dataSourceName, final String url, final String username, final boolean isInstanceConnectionAvailable, + @SphereEx final boolean isInstanceConnectionEnabled) { try { JdbcUrl jdbcUrl = new StandardJdbcUrlParser().parse(url); - return isInstanceConnectionAvailable ? new StorageNode(jdbcUrl.getHostname(), jdbcUrl.getPort(), username) : new StorageNode(dataSourceName); + return isInstanceConnectionEnabled && isInstanceConnectionAvailable ? new StorageNode(jdbcUrl.getHostname(), jdbcUrl.getPort(), username) : new StorageNode(dataSourceName); } catch (final UnrecognizedDatabaseURLException ex) { return new StorageNode(dataSourceName); } diff --git a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/resource/unit/StorageUnitNodeMapCreator.java b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/resource/unit/StorageUnitNodeMapCreator.java index 493674467d9..c62f874cdf4 100644 --- a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/resource/unit/StorageUnitNodeMapCreator.java +++ b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/resource/unit/StorageUnitNodeMapCreator.java @@ -26,6 +26,7 @@ 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.props.domain.DataSourcePoolProperties; import org.apache.shardingsphere.infra.metadata.database.resource.node.StorageNode; +import org.apache.shardingsphere.infra.util.SphereEx; import java.util.LinkedHashMap; import java.util.Map; @@ -42,22 +43,24 @@ public final class StorageUnitNodeMapCreator { * Create storage unit node map. * * @param propsMap data source pool properties map + * @param isInstanceConnectionEnabled is instance connection enabled * @return storage unit node map */ - public static Map<String, StorageNode> create(final Map<String, DataSourcePoolProperties> propsMap) { - return propsMap.entrySet().stream().collect(Collectors.toMap(Entry::getKey, entry -> create(entry.getKey(), entry.getValue()), (oldValue, currentValue) -> oldValue, LinkedHashMap::new)); + public static Map<String, StorageNode> create(final Map<String, DataSourcePoolProperties> propsMap, @SphereEx final boolean isInstanceConnectionEnabled) { + return propsMap.entrySet().stream() + .collect(Collectors.toMap(Entry::getKey, entry -> create(entry.getKey(), entry.getValue(), isInstanceConnectionEnabled), (oldValue, currentValue) -> oldValue, LinkedHashMap::new)); } - private static StorageNode create(final String storageUnitName, final DataSourcePoolProperties props) { + private static StorageNode create(final String storageUnitName, final DataSourcePoolProperties props, @SphereEx final boolean isInstanceConnectionEnabled) { Map<String, Object> standardProps = props.getConnectionPropertySynonyms().getStandardProperties(); - return create(storageUnitName, standardProps.get("url").toString(), standardProps.get("username").toString()); + return create(storageUnitName, standardProps.get("url").toString(), standardProps.get("username").toString(), isInstanceConnectionEnabled); } - private static StorageNode create(final String storageUnitName, final String url, final String username) { + private static StorageNode create(final String storageUnitName, final String url, final String username, @SphereEx final boolean isInstanceConnectionEnabled) { boolean isInstanceConnectionAvailable = new DatabaseTypeRegistry(DatabaseTypeFactory.get(url)).getDialectDatabaseMetaData().isInstanceConnectionAvailable(); try { JdbcUrl jdbcUrl = new StandardJdbcUrlParser().parse(url); - return isInstanceConnectionAvailable ? new StorageNode(jdbcUrl.getHostname(), jdbcUrl.getPort(), username) : new StorageNode(storageUnitName); + return isInstanceConnectionEnabled && isInstanceConnectionAvailable ? new StorageNode(jdbcUrl.getHostname(), jdbcUrl.getPort(), username) : new StorageNode(storageUnitName); } catch (final UnrecognizedDatabaseURLException ex) { return new StorageNode(storageUnitName); } diff --git a/infra/common/src/test/java/org/apache/shardingsphere/infra/config/database/impl/DataSourceGeneratedDatabaseConfigurationTest.java b/infra/common/src/test/java/org/apache/shardingsphere/infra/config/database/impl/DataSourceGeneratedDatabaseConfigurationTest.java index db7ab6ae02a..82c0b5cfb2a 100644 --- a/infra/common/src/test/java/org/apache/shardingsphere/infra/config/database/impl/DataSourceGeneratedDatabaseConfigurationTest.java +++ b/infra/common/src/test/java/org/apache/shardingsphere/infra/config/database/impl/DataSourceGeneratedDatabaseConfigurationTest.java @@ -25,6 +25,8 @@ import org.apache.shardingsphere.infra.datasource.pool.config.PoolConfiguration; import org.apache.shardingsphere.infra.datasource.pool.props.domain.DataSourcePoolProperties; import org.apache.shardingsphere.infra.fixture.FixtureRuleConfiguration; import org.apache.shardingsphere.infra.metadata.database.resource.node.StorageNode; +import org.apache.shardingsphere.infra.util.SphereEx; +import org.apache.shardingsphere.infra.util.SphereEx.Type; import org.junit.jupiter.api.Test; import javax.sql.DataSource; @@ -91,8 +93,9 @@ class DataSourceGeneratedDatabaseConfigurationTest { assertThat(connStandardProps.get("password"), is("")); } + @SphereEx(Type.MODIFY) private DataSourceGeneratedDatabaseConfiguration createDataSourceGeneratedDatabaseConfiguration() { - return new DataSourceGeneratedDatabaseConfiguration(createDataSources(), Collections.singletonList(new FixtureRuleConfiguration("test_rule"))); + return new DataSourceGeneratedDatabaseConfiguration(createDataSources(), Collections.singletonList(new FixtureRuleConfiguration("test_rule")), false); } private Map<String, DataSourceConfiguration> createDataSources() { diff --git a/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManager.java b/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManager.java index 699054e8be5..edacb493f9e 100644 --- a/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManager.java +++ b/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManager.java @@ -22,6 +22,7 @@ import lombok.Getter; import lombok.extern.slf4j.Slf4j; import org.apache.shardingsphere.infra.config.props.ConfigurationProperties; import org.apache.shardingsphere.infra.config.props.ConfigurationPropertyKey; +import org.apache.shardingsphere.infra.config.props.temporary.TemporaryConfigurationPropertyKey; import org.apache.shardingsphere.infra.config.rule.RuleConfiguration; import org.apache.shardingsphere.infra.datasource.pool.props.domain.DataSourcePoolProperties; import org.apache.shardingsphere.infra.exception.core.ShardingSpherePreconditions; @@ -170,7 +171,10 @@ public final class ContextManager implements AutoCloseable { private MetaDataContexts createMetaDataContexts(final ShardingSphereDatabase database) throws SQLException { MetaDataBasedPersistService metaDataPersistService = metaDataContexts.get().getPersistService(); Map<String, DataSourcePoolProperties> dataSourcePoolPropsFromRegCenter = metaDataPersistService.getDataSourceUnitService().load(database.getName()); - SwitchingResource switchingResource = new ResourceSwitchManager().alterStorageUnit(database.getResourceMetaData(), dataSourcePoolPropsFromRegCenter); + SwitchingResource switchingResource = new ResourceSwitchManager().alterStorageUnit(database.getResourceMetaData(), dataSourcePoolPropsFromRegCenter, + // SPEX CHANGED: BEGIN + metaDataContexts.get().getMetaData().getTemporaryProps().<Boolean>getValue(TemporaryConfigurationPropertyKey.INSTANCE_CONNECTION_ENABLED)); + // SPEX CHANGED: END metaDataContexts.get().getMetaData().getDatabases().putAll(configurationContextManager.renewDatabase(database, switchingResource)); Collection<RuleConfiguration> ruleConfigs = metaDataPersistService.getDatabaseRulePersistService().load(database.getName()); Map<String, ShardingSphereDatabase> changedDatabases = configurationContextManager.createChangedDatabases(database.getName(), false, switchingResource, ruleConfigs); 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 b570b6006e5..ff7d751731b 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 @@ -25,6 +25,7 @@ import lombok.extern.slf4j.Slf4j; import org.apache.shardingsphere.infra.config.database.DatabaseConfiguration; import org.apache.shardingsphere.infra.config.database.impl.DataSourceProvidedDatabaseConfiguration; import org.apache.shardingsphere.infra.config.props.ConfigurationProperties; +import org.apache.shardingsphere.infra.config.props.temporary.TemporaryConfigurationPropertyKey; import org.apache.shardingsphere.infra.config.rule.RuleConfiguration; import org.apache.shardingsphere.infra.config.rule.scope.DatabaseRuleConfiguration; import org.apache.shardingsphere.infra.datasource.pool.destroyer.DataSourcePoolDestroyer; @@ -44,6 +45,7 @@ import org.apache.shardingsphere.infra.rule.ShardingSphereRule; import org.apache.shardingsphere.infra.rule.builder.database.DatabaseRulesBuilder; import org.apache.shardingsphere.infra.rule.builder.global.GlobalRulesBuilder; import org.apache.shardingsphere.infra.util.SphereEx; +import org.apache.shardingsphere.infra.util.SphereEx.Type; import org.apache.shardingsphere.infra.yaml.config.swapper.rule.YamlDataNodeGlobalRuleConfigurationSwapper; import org.apache.shardingsphere.infra.yaml.config.swapper.rule.YamlDataNodeGlobalRuleConfigurationSwapperEngine; import org.apache.shardingsphere.metadata.factory.ExternalMetaDataFactory; @@ -87,8 +89,11 @@ public final class ConfigurationContextManager { public synchronized void registerStorageUnit(final String databaseName, final Map<String, DataSourcePoolProperties> propsMap) { try { closeStaleRules(databaseName); + @SphereEx + boolean isInstanceConnectionEnabled = metaDataContexts.get().getMetaData().getTemporaryProps().<Boolean>getValue(TemporaryConfigurationPropertyKey.INSTANCE_CONNECTION_ENABLED); + @SphereEx(Type.MODIFY) SwitchingResource switchingResource = - new ResourceSwitchManager().registerStorageUnit(metaDataContexts.get().getMetaData().getDatabase(databaseName).getResourceMetaData(), propsMap); + new ResourceSwitchManager().registerStorageUnit(metaDataContexts.get().getMetaData().getDatabase(databaseName).getResourceMetaData(), propsMap, isInstanceConnectionEnabled); buildNewMetaDataContext(databaseName, switchingResource, false); } catch (final SQLException ex) { log.error("Alter database: {} register storage unit failed", databaseName, ex); @@ -104,8 +109,11 @@ public final class ConfigurationContextManager { public synchronized void alterStorageUnit(final String databaseName, final Map<String, DataSourcePoolProperties> propsMap) { try { closeStaleRules(databaseName); + @SphereEx + boolean isInstanceConnectionEnabled = metaDataContexts.get().getMetaData().getTemporaryProps().<Boolean>getValue(TemporaryConfigurationPropertyKey.INSTANCE_CONNECTION_ENABLED); + @SphereEx(Type.MODIFY) SwitchingResource switchingResource = - new ResourceSwitchManager().alterStorageUnit(metaDataContexts.get().getMetaData().getDatabase(databaseName).getResourceMetaData(), propsMap); + new ResourceSwitchManager().alterStorageUnit(metaDataContexts.get().getMetaData().getDatabase(databaseName).getResourceMetaData(), propsMap, isInstanceConnectionEnabled); // SPEX ADDED: BEGIN ResourceMetaData resourceMetaData = metaDataContexts.get().getMetaData().getDatabase(databaseName).getResourceMetaData(); if (canBeChangedInRuntime(resourceMetaData, propsMap)) { @@ -426,7 +434,9 @@ public final class ConfigurationContextManager { ? resourceMetaData.getStorageUnits().entrySet().stream() .collect(Collectors.toMap(Entry::getKey, entry -> entry.getValue().getDataSourcePoolProperties(), (oldValue, currentValue) -> oldValue, LinkedHashMap::new)) : switchingResource.getMergedDataSourcePoolPropertiesMap(); - return new DataSourceProvidedDatabaseConfiguration(getMergedStorageNodeDataSources(resourceMetaData, switchingResource), toBeCreatedRuleConfigs, propsMap); + @SphereEx + boolean isInstanceConnectionEnabled = metaDataContexts.get().getMetaData().getTemporaryProps().<Boolean>getValue(TemporaryConfigurationPropertyKey.INSTANCE_CONNECTION_ENABLED); + return new DataSourceProvidedDatabaseConfiguration(getMergedStorageNodeDataSources(resourceMetaData, switchingResource), toBeCreatedRuleConfigs, propsMap, isInstanceConnectionEnabled); } private Map<StorageNode, DataSource> getMergedStorageNodeDataSources(final ResourceMetaData currentResourceMetaData, final SwitchingResource switchingResource) { 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 101b55c9327..9d8fdbc784a 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 @@ -24,6 +24,8 @@ import org.apache.shardingsphere.infra.metadata.database.resource.node.StorageNo import org.apache.shardingsphere.infra.metadata.database.resource.node.StorageNodeAggregator; import org.apache.shardingsphere.infra.metadata.database.resource.unit.StorageUnit; import org.apache.shardingsphere.infra.metadata.database.resource.unit.StorageUnitNodeMapCreator; +import org.apache.shardingsphere.infra.util.SphereEx; +import org.apache.shardingsphere.infra.util.SphereEx.Type; import javax.sql.DataSource; import java.util.Collection; @@ -45,14 +47,18 @@ public final class ResourceSwitchManager { * * @param resourceMetaData resource meta data * @param storageUnitDataSourcePoolPropsMap storage unit grouped data source pool properties map + * @param isInstanceConnectionEnabled is instance connection enabled * @return created switching resource */ - public SwitchingResource registerStorageUnit(final ResourceMetaData resourceMetaData, final Map<String, DataSourcePoolProperties> storageUnitDataSourcePoolPropsMap) { + public SwitchingResource registerStorageUnit(final ResourceMetaData resourceMetaData, final Map<String, DataSourcePoolProperties> storageUnitDataSourcePoolPropsMap, + @SphereEx final boolean isInstanceConnectionEnabled) { Map<String, DataSourcePoolProperties> mergedPropsMap = new LinkedHashMap<>(resourceMetaData.getStorageUnits().entrySet().stream() .collect(Collectors.toMap(Entry::getKey, entry -> entry.getValue().getDataSourcePoolProperties(), (oldValue, currentValue) -> oldValue, LinkedHashMap::new))); mergedPropsMap.putAll(storageUnitDataSourcePoolPropsMap); - Map<String, StorageNode> toBeCreatedStorageUintNodeMap = StorageUnitNodeMapCreator.create(storageUnitDataSourcePoolPropsMap); - Map<StorageNode, DataSourcePoolProperties> dataSourcePoolPropsMap = StorageNodeAggregator.aggregateDataSourcePoolProperties(storageUnitDataSourcePoolPropsMap); + @SphereEx(Type.MODIFY) + Map<String, StorageNode> toBeCreatedStorageUintNodeMap = StorageUnitNodeMapCreator.create(storageUnitDataSourcePoolPropsMap, isInstanceConnectionEnabled); + @SphereEx(Type.MODIFY) + Map<StorageNode, DataSourcePoolProperties> dataSourcePoolPropsMap = StorageNodeAggregator.aggregateDataSourcePoolProperties(storageUnitDataSourcePoolPropsMap, isInstanceConnectionEnabled); return new SwitchingResource(getNewDataSources(resourceMetaData, toBeCreatedStorageUintNodeMap, dataSourcePoolPropsMap), Collections.emptyMap(), Collections.emptyList(), mergedPropsMap); } @@ -72,14 +78,18 @@ public final class ResourceSwitchManager { * * @param resourceMetaData resource meta data * @param propsMap data source pool properties map + * @param isInstanceConnectionEnabled is instance connection enabled * @return created switching resource */ - public SwitchingResource alterStorageUnit(final ResourceMetaData resourceMetaData, final Map<String, DataSourcePoolProperties> propsMap) { + public SwitchingResource alterStorageUnit(final ResourceMetaData resourceMetaData, final Map<String, DataSourcePoolProperties> propsMap, + @SphereEx final boolean isInstanceConnectionEnabled) { Map<String, DataSourcePoolProperties> mergedDataSourcePoolPropsMap = new LinkedHashMap<>(resourceMetaData.getStorageUnits().entrySet().stream() .collect(Collectors.toMap(Entry::getKey, entry -> entry.getValue().getDataSourcePoolProperties(), (oldValue, currentValue) -> oldValue, LinkedHashMap::new))); mergedDataSourcePoolPropsMap.putAll(propsMap); - Map<String, StorageNode> toBeAlteredStorageUintNodeMap = StorageUnitNodeMapCreator.create(mergedDataSourcePoolPropsMap); - Map<StorageNode, DataSourcePoolProperties> dataSourcePoolPropsMap = StorageNodeAggregator.aggregateDataSourcePoolProperties(mergedDataSourcePoolPropsMap); + @SphereEx(Type.MODIFY) + Map<String, StorageNode> toBeAlteredStorageUintNodeMap = StorageUnitNodeMapCreator.create(mergedDataSourcePoolPropsMap, isInstanceConnectionEnabled); + @SphereEx(Type.MODIFY) + Map<StorageNode, DataSourcePoolProperties> dataSourcePoolPropsMap = StorageNodeAggregator.aggregateDataSourcePoolProperties(mergedDataSourcePoolPropsMap, isInstanceConnectionEnabled); return new SwitchingResource(getAlterNewDataSources(toBeAlteredStorageUintNodeMap, dataSourcePoolPropsMap), getStaleDataSources(resourceMetaData, toBeAlteredStorageUintNodeMap.values()), new LinkedHashSet<>(toBeAlteredStorageUintNodeMap.keySet()), mergedDataSourcePoolPropsMap); } diff --git a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextsFactory.java b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextsFactory.java index 79fdc4362c9..7393c90acf3 100644 --- a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextsFactory.java +++ b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextsFactory.java @@ -25,6 +25,8 @@ import lombok.NoArgsConstructor; import org.apache.shardingsphere.infra.config.database.DatabaseConfiguration; import org.apache.shardingsphere.infra.config.database.impl.DataSourceGeneratedDatabaseConfiguration; import org.apache.shardingsphere.infra.config.props.ConfigurationProperties; +import org.apache.shardingsphere.infra.config.props.temporary.TemporaryConfigurationProperties; +import org.apache.shardingsphere.infra.config.props.temporary.TemporaryConfigurationPropertyKey; import org.apache.shardingsphere.infra.config.rule.RuleConfiguration; import org.apache.shardingsphere.infra.datasource.pool.config.DataSourceConfiguration; import org.apache.shardingsphere.infra.datasource.pool.destroyer.DataSourcePoolDestroyer; @@ -38,6 +40,8 @@ import org.apache.shardingsphere.infra.rule.ShardingSphereRule; import org.apache.shardingsphere.infra.rule.builder.global.GlobalRulesBuilder; import org.apache.shardingsphere.infra.state.datasource.DataSourceState; import org.apache.shardingsphere.infra.state.datasource.DataSourceStateManager; +import org.apache.shardingsphere.infra.util.SphereEx; +import org.apache.shardingsphere.infra.util.SphereEx.Type; import org.apache.shardingsphere.metadata.factory.ExternalMetaDataFactory; import org.apache.shardingsphere.metadata.factory.InternalMetaDataFactory; import org.apache.shardingsphere.metadata.persist.MetaDataPersistService; @@ -87,8 +91,16 @@ public final class MetaDataContextsFactory { public static MetaDataContexts create(final MetaDataPersistService persistService, final ContextManagerBuilderParameter param, final InstanceContext instanceContext, final Map<String, StorageNodeDataSource> storageNodes) throws SQLException { boolean isDatabaseMetaDataExisted = !persistService.getDatabaseMetaDataService().loadAllDatabaseNames().isEmpty(); + @SphereEx + TemporaryConfigurationProperties tempProps = isDatabaseMetaDataExisted + ? new TemporaryConfigurationProperties(persistService.getPropsService().load()) + : new TemporaryConfigurationProperties(param.getProps()); + @SphereEx + boolean isInstanceConnectionEnabled = tempProps.<Boolean>getValue(TemporaryConfigurationPropertyKey.INSTANCE_CONNECTION_ENABLED); + @SphereEx(Type.MODIFY) Map<String, DatabaseConfiguration> effectiveDatabaseConfigs = isDatabaseMetaDataExisted - ? createEffectiveDatabaseConfigurations(getDatabaseNames(instanceContext, param.getDatabaseConfigs(), persistService), param.getDatabaseConfigs(), persistService) + ? createEffectiveDatabaseConfigurations(getDatabaseNames(instanceContext, param.getDatabaseConfigs(), persistService), + param.getDatabaseConfigs(), persistService, isInstanceConnectionEnabled) : param.getDatabaseConfigs(); checkDataSourceStates(effectiveDatabaseConfigs, storageNodes, param.isForce()); // TODO load global data sources from persist service @@ -120,17 +132,19 @@ public final class MetaDataContextsFactory { return instanceContext.getInstance().getMetaData() instanceof JDBCInstanceMetaData ? databaseConfigs.keySet() : persistService.getDatabaseMetaDataService().loadAllDatabaseNames(); } - private static Map<String, DatabaseConfiguration> createEffectiveDatabaseConfigurations(final Collection<String> databaseNames, - final Map<String, DatabaseConfiguration> databaseConfigs, final MetaDataPersistService persistService) { - return databaseNames.stream().collect(Collectors.toMap(each -> each, each -> createEffectiveDatabaseConfiguration(each, databaseConfigs, persistService))); + @SphereEx(Type.MODIFY) + private static Map<String, DatabaseConfiguration> createEffectiveDatabaseConfigurations(final Collection<String> databaseNames, final Map<String, DatabaseConfiguration> databaseConfigs, + final MetaDataPersistService persistService, @SphereEx final boolean isInstanceConnectionEnabled) { + return databaseNames.stream().collect(Collectors.toMap(each -> each, each -> createEffectiveDatabaseConfiguration(each, databaseConfigs, persistService, isInstanceConnectionEnabled))); } - private static DatabaseConfiguration createEffectiveDatabaseConfiguration(final String databaseName, - final Map<String, DatabaseConfiguration> databaseConfigs, final MetaDataPersistService persistService) { + @SphereEx(Type.MODIFY) + private static DatabaseConfiguration createEffectiveDatabaseConfiguration(final String databaseName, final Map<String, DatabaseConfiguration> databaseConfigs, + final MetaDataPersistService persistService, @SphereEx final boolean isInstanceConnectionEnabled) { closeGeneratedDataSources(databaseName, databaseConfigs); Map<String, DataSourceConfiguration> dataSources = persistService.loadDataSourceConfigurations(databaseName); Collection<RuleConfiguration> databaseRuleConfigs = persistService.getDatabaseRulePersistService().load(databaseName); - return new DataSourceGeneratedDatabaseConfiguration(dataSources, databaseRuleConfigs); + return new DataSourceGeneratedDatabaseConfiguration(dataSources, databaseRuleConfigs, isInstanceConnectionEnabled); } private static void closeGeneratedDataSources(final String databaseName, final Map<String, ? extends DatabaseConfiguration> databaseConfigs) { diff --git a/mode/core/src/test/java/org/apache/shardingsphere/mode/manager/ContextManagerTest.java b/mode/core/src/test/java/org/apache/shardingsphere/mode/manager/ContextManagerTest.java index 07df29308c8..989c5806588 100644 --- a/mode/core/src/test/java/org/apache/shardingsphere/mode/manager/ContextManagerTest.java +++ b/mode/core/src/test/java/org/apache/shardingsphere/mode/manager/ContextManagerTest.java @@ -19,6 +19,7 @@ package org.apache.shardingsphere.mode.manager; import org.apache.shardingsphere.infra.config.props.ConfigurationProperties; import org.apache.shardingsphere.infra.config.props.ConfigurationPropertyKey; +import org.apache.shardingsphere.infra.config.props.temporary.TemporaryConfigurationPropertyKey; import org.apache.shardingsphere.infra.database.core.DefaultDatabase; import org.apache.shardingsphere.infra.database.core.type.DatabaseType; import org.apache.shardingsphere.infra.datanode.DataNode; @@ -81,6 +82,9 @@ class ContextManagerTest { @BeforeEach void setUp() { metaDataContexts = mock(MetaDataContexts.class, RETURNS_DEEP_STUBS); + // SPEX ADDED: BEGIN + when(metaDataContexts.getMetaData().getTemporaryProps().getValue(TemporaryConfigurationPropertyKey.INSTANCE_CONNECTION_ENABLED)).thenReturn(Boolean.FALSE); + // SPEX ADDED: END when(metaDataContexts.getMetaData().getProps().getValue(ConfigurationPropertyKey.KERNEL_EXECUTOR_SIZE)).thenReturn(1); when(metaDataContexts.getMetaData().getProps()).thenReturn(new ConfigurationProperties(new Properties())); ShardingSphereDatabase database = mockDatabase(); diff --git a/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/StandaloneModeContextManager.java b/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/StandaloneModeContextManager.java index 9d43223e5f5..87e801b1dd1 100644 --- a/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/StandaloneModeContextManager.java +++ b/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/StandaloneModeContextManager.java @@ -18,6 +18,7 @@ package org.apache.shardingsphere.mode.manager.standalone; import com.google.common.base.Strings; +import org.apache.shardingsphere.infra.config.props.temporary.TemporaryConfigurationPropertyKey; import org.apache.shardingsphere.infra.config.rule.RuleConfiguration; import org.apache.shardingsphere.infra.connection.refresher.util.TableRefreshUtils; import org.apache.shardingsphere.infra.datasource.pool.props.domain.DataSourcePoolProperties; @@ -34,6 +35,7 @@ import org.apache.shardingsphere.infra.rule.attribute.datanode.MutableDataNodeRu import org.apache.shardingsphere.infra.rule.scope.GlobalRule; import org.apache.shardingsphere.infra.rule.scope.GlobalRule.GlobalRuleChangedType; import org.apache.shardingsphere.infra.spi.type.ordered.cache.OrderedServicesCache; +import org.apache.shardingsphere.infra.util.SphereEx; import org.apache.shardingsphere.metadata.persist.service.config.database.DatabaseBasedPersistService; import org.apache.shardingsphere.metadata.persist.service.config.global.GlobalPersistService; import org.apache.shardingsphere.metadata.persist.service.database.DatabaseMetaDataBasedPersistService; @@ -211,14 +213,17 @@ public final class StandaloneModeContextManager implements ModeContextManager, C @Override public void registerStorageUnits(final String databaseName, final Map<String, DataSourcePoolProperties> toBeRegisteredProps) throws SQLException { + @SphereEx + boolean isInstanceConnectionEnabled = contextManager.getMetaDataContexts().getMetaData().getTemporaryProps().<Boolean>getValue(TemporaryConfigurationPropertyKey.INSTANCE_CONNECTION_ENABLED); + ShardingSphereDatabase database = contextManager.getMetaDataContexts().getMetaData().getDatabase(databaseName); + @SphereEx(SphereEx.Type.MODIFY) SwitchingResource switchingResource = - new ResourceSwitchManager().registerStorageUnit(contextManager.getMetaDataContexts().getMetaData().getDatabase(databaseName).getResourceMetaData(), toBeRegisteredProps); + new ResourceSwitchManager().registerStorageUnit(database.getResourceMetaData(), toBeRegisteredProps, isInstanceConnectionEnabled); contextManager.getMetaDataContexts().getMetaData().getDatabases().putAll(contextManager.getConfigurationContextManager().createChangedDatabases(databaseName, false, switchingResource, null)); contextManager.getMetaDataContexts().getMetaData().getGlobalRuleMetaData().getRules() .forEach(each -> ((GlobalRule) each).refresh(contextManager.getMetaDataContexts().getMetaData().getDatabases(), GlobalRuleChangedType.DATABASE_CHANGED)); - contextManager.getMetaDataContexts().getMetaData().getDatabase(databaseName).getSchemas() - .forEach((schemaName, schema) -> contextManager.getMetaDataContexts().getPersistService().getDatabaseMetaDataService() - .persistByAlterConfiguration(contextManager.getMetaDataContexts().getMetaData().getDatabase(databaseName).getName(), schemaName, schema)); + database.getSchemas().forEach((schemaName, schema) -> contextManager.getMetaDataContexts().getPersistService().getDatabaseMetaDataService() + .persistByAlterConfiguration(database.getName(), schemaName, schema)); DatabaseBasedPersistService<Map<String, DataSourcePoolProperties>> dataSourceService = contextManager.getMetaDataContexts().getPersistService().getDataSourceUnitService(); contextManager.getMetaDataContexts().getPersistService().getMetaDataVersionPersistService().switchActiveVersion(dataSourceService.persistConfig(databaseName, toBeRegisteredProps)); clearServiceCache(); @@ -226,8 +231,12 @@ public final class StandaloneModeContextManager implements ModeContextManager, C @Override public void alterStorageUnits(final String databaseName, final Map<String, DataSourcePoolProperties> toBeUpdatedProps) throws SQLException { + @SphereEx + boolean isInstanceConnectionEnabled = contextManager.getMetaDataContexts().getMetaData().getTemporaryProps().<Boolean>getValue(TemporaryConfigurationPropertyKey.INSTANCE_CONNECTION_ENABLED); + ShardingSphereDatabase database = contextManager.getMetaDataContexts().getMetaData().getDatabase(databaseName); + @SphereEx(SphereEx.Type.MODIFY) SwitchingResource switchingResource = - new ResourceSwitchManager().alterStorageUnit(contextManager.getMetaDataContexts().getMetaData().getDatabase(databaseName).getResourceMetaData(), toBeUpdatedProps); + new ResourceSwitchManager().alterStorageUnit(database.getResourceMetaData(), toBeUpdatedProps, isInstanceConnectionEnabled); contextManager.getMetaDataContexts().getMetaData().getDatabases().putAll(contextManager.getConfigurationContextManager().createChangedDatabases(databaseName, true, switchingResource, null)); contextManager.getMetaDataContexts().getMetaData().getGlobalRuleMetaData().getRules() .forEach(each -> ((GlobalRule) each).refresh(contextManager.getMetaDataContexts().getMetaData().getDatabases(), GlobalRuleChangedType.DATABASE_CHANGED)); diff --git a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/config/yaml/swapper/YamlProxyConfigurationSwapper.java b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/config/yaml/swapper/YamlProxyConfigurationSwapper.java index 8fd6efdf7ab..a9f19a7f348 100644 --- a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/config/yaml/swapper/YamlProxyConfigurationSwapper.java +++ b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/config/yaml/swapper/YamlProxyConfigurationSwapper.java @@ -19,11 +19,14 @@ package org.apache.shardingsphere.proxy.backend.config.yaml.swapper; import org.apache.shardingsphere.infra.config.database.DatabaseConfiguration; import org.apache.shardingsphere.infra.config.database.impl.DataSourceGeneratedDatabaseConfiguration; +import org.apache.shardingsphere.infra.config.props.temporary.TemporaryConfigurationPropertyKey; import org.apache.shardingsphere.infra.config.rule.RuleConfiguration; import org.apache.shardingsphere.infra.datasource.pool.config.DataSourceConfiguration; import org.apache.shardingsphere.infra.datasource.pool.creator.DataSourcePoolCreator; -import org.apache.shardingsphere.infra.datasource.pool.props.domain.DataSourcePoolProperties; import org.apache.shardingsphere.infra.datasource.pool.props.creator.DataSourcePoolPropertiesCreator; +import org.apache.shardingsphere.infra.datasource.pool.props.domain.DataSourcePoolProperties; +import org.apache.shardingsphere.infra.util.SphereEx; +import org.apache.shardingsphere.infra.util.SphereEx.Type; import org.apache.shardingsphere.infra.yaml.config.swapper.rule.YamlRuleConfigurationSwapperEngine; import org.apache.shardingsphere.proxy.backend.config.ProxyConfiguration; import org.apache.shardingsphere.proxy.backend.config.ProxyGlobalConfiguration; @@ -55,7 +58,11 @@ public final class YamlProxyConfigurationSwapper { * @return proxy configuration */ public ProxyConfiguration swap(final YamlProxyConfiguration yamlConfig) { - Map<String, DatabaseConfiguration> databaseConfigs = swapDatabaseConfigurations(yamlConfig.getDatabaseConfigurations()); + @SphereEx + boolean isInstanceConnectionEnabled = Boolean.parseBoolean((String) yamlConfig.getServerConfiguration().getProps() + .getOrDefault(TemporaryConfigurationPropertyKey.INSTANCE_CONNECTION_ENABLED.getKey(), TemporaryConfigurationPropertyKey.INSTANCE_CONNECTION_ENABLED.getDefaultValue())); + @SphereEx(Type.MODIFY) + Map<String, DatabaseConfiguration> databaseConfigs = swapDatabaseConfigurations(yamlConfig.getDatabaseConfigurations(), isInstanceConnectionEnabled); ProxyGlobalConfiguration globalConfig = swapGlobalConfiguration(yamlConfig.getServerConfiguration()); return new ProxyConfiguration(databaseConfigs, globalConfig); } @@ -73,12 +80,14 @@ public final class YamlProxyConfigurationSwapper { return DataSourcePoolCreator.create(propsMap, true); } - private Map<String, DatabaseConfiguration> swapDatabaseConfigurations(final Map<String, YamlProxyDatabaseConfiguration> databaseConfigs) { + private Map<String, DatabaseConfiguration> swapDatabaseConfigurations(final Map<String, YamlProxyDatabaseConfiguration> databaseConfigs, @SphereEx final boolean isInstanceConnectionEnabled) { Map<String, DatabaseConfiguration> result = new LinkedHashMap<>(databaseConfigs.size(), 1F); for (Entry<String, YamlProxyDatabaseConfiguration> entry : databaseConfigs.entrySet()) { Map<String, DataSourceConfiguration> databaseDataSourceConfigs = swapDataSourceConfigurations(entry.getValue().getDataSources()); Collection<RuleConfiguration> databaseRuleConfigs = ruleConfigSwapperEngine.swapToRuleConfigurations(entry.getValue().getRules()); - result.put(entry.getKey(), new DataSourceGeneratedDatabaseConfiguration(databaseDataSourceConfigs, databaseRuleConfigs)); + // SPEX CHANGED: BEGIN + result.put(entry.getKey(), new DataSourceGeneratedDatabaseConfiguration(databaseDataSourceConfigs, databaseRuleConfigs, isInstanceConnectionEnabled)); + // SPEX CHANGED: END } return result; } diff --git a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/util/YamlDatabaseConfigurationImportExecutor.java b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/util/YamlDatabaseConfigurationImportExecutor.java index 76c81c0b754..99b20135c6c 100644 --- a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/util/YamlDatabaseConfigurationImportExecutor.java +++ b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/util/YamlDatabaseConfigurationImportExecutor.java @@ -19,6 +19,7 @@ package org.apache.shardingsphere.proxy.backend.util; import com.google.common.base.Strings; import org.apache.shardingsphere.distsql.handler.validate.DistSQLDataSourcePoolPropertiesValidator; +import org.apache.shardingsphere.infra.config.props.temporary.TemporaryConfigurationPropertyKey; import org.apache.shardingsphere.infra.config.rule.RuleConfiguration; import org.apache.shardingsphere.infra.config.rule.checker.RuleConfigurationCheckEngine; import org.apache.shardingsphere.infra.database.DatabaseTypeEngine; @@ -41,6 +42,8 @@ import org.apache.shardingsphere.infra.metadata.database.resource.unit.StorageUn import org.apache.shardingsphere.infra.rule.ShardingSphereRule; import org.apache.shardingsphere.infra.rule.builder.database.DatabaseRuleBuilder; import org.apache.shardingsphere.infra.spi.type.ordered.OrderedSPILoader; +import org.apache.shardingsphere.infra.util.SphereEx; +import org.apache.shardingsphere.infra.util.SphereEx.Type; import org.apache.shardingsphere.infra.yaml.config.pojo.rule.YamlRuleConfiguration; import org.apache.shardingsphere.infra.yaml.config.swapper.rule.YamlRuleConfigurationSwapper; import org.apache.shardingsphere.mode.manager.ContextManager; @@ -120,7 +123,11 @@ public final class YamlDatabaseConfigurationImportExecutor { } Map<String, StorageUnit> storageUnits = ProxyContext.getInstance().getContextManager() .getMetaDataContexts().getMetaData().getDatabase(databaseName).getResourceMetaData().getStorageUnits(); - Map<String, StorageNode> toBeAddedStorageNode = StorageUnitNodeMapCreator.create(propsMap); + @SphereEx + boolean isInstanceConnectionEnabled = ProxyContext.getInstance().getContextManager().getMetaDataContexts() + .getMetaData().getTemporaryProps().<Boolean>getValue(TemporaryConfigurationPropertyKey.INSTANCE_CONNECTION_ENABLED); + @SphereEx(Type.MODIFY) + Map<String, StorageNode> toBeAddedStorageNode = StorageUnitNodeMapCreator.create(propsMap, isInstanceConnectionEnabled); for (Entry<String, DataSourcePoolProperties> entry : propsMap.entrySet()) { storageUnits.put(entry.getKey(), new StorageUnit(toBeAddedStorageNode.get(entry.getKey()), entry.getValue(), DataSourcePoolCreator.create(entry.getValue()))); } diff --git a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ShowDistVariablesExecutorTest.java b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ShowDistVariablesExecutorTest.java index a9c59443213..6156af62a8d 100644 --- a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ShowDistVariablesExecutorTest.java +++ b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ShowDistVariablesExecutorTest.java @@ -57,7 +57,9 @@ class ShowDistVariablesExecutorTest { executor.setConnectionContext(new DistSQLConnectionContext(mock(ConnectionContext.class), 1, mock(DatabaseType.class), mock(DatabaseConnectionManager.class), mock(ExecutorStatementManager.class))); Collection<LocalDataQueryResultRow> actual = executor.getRows(mock(ShowDistVariablesStatement.class), contextManager); - assertThat(actual.size(), is(21)); + // SPEX CHANGED: BEGIN + assertThat(actual.size(), is(22)); + // SPEX CHANGED: END LocalDataQueryResultRow row = actual.iterator().next(); assertThat(row.getCell(1), is("agent_plugins_enabled")); assertThat(row.getCell(2), is("true")); diff --git a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/ImportDatabaseConfigurationExecutorTest.java b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/ImportDatabaseConfigurationExecutorTest.java index 04bf0fee7e6..36c3049e17c 100644 --- a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/ImportDatabaseConfigurationExecutorTest.java +++ b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/ImportDatabaseConfigurationExecutorTest.java @@ -22,6 +22,7 @@ import org.apache.shardingsphere.distsql.handler.validate.DistSQLDataSourcePoolP import org.apache.shardingsphere.distsql.statement.ral.updatable.ImportDatabaseConfigurationStatement; import org.apache.shardingsphere.infra.config.props.ConfigurationProperties; import org.apache.shardingsphere.infra.config.props.ConfigurationPropertyKey; +import org.apache.shardingsphere.infra.config.props.temporary.TemporaryConfigurationPropertyKey; import org.apache.shardingsphere.infra.database.core.DefaultDatabase; import org.apache.shardingsphere.infra.database.core.type.DatabaseType; import org.apache.shardingsphere.infra.exception.dialect.exception.syntax.database.DatabaseCreateExistsException; @@ -152,6 +153,9 @@ class ImportDatabaseConfigurationExecutorTest { when(result.getMetaDataContexts().getMetaData().getDatabases()).thenReturn(Collections.singletonMap(databaseName, database)); when(result.getMetaDataContexts().getMetaData().getDatabase(databaseName)).thenReturn(database); when(result.getMetaDataContexts().getMetaData().getProps()).thenReturn(new ConfigurationProperties(createProperties())); + // SPEX ADDED: BEGIN + when(result.getMetaDataContexts().getMetaData().getTemporaryProps().<Boolean>getValue(TemporaryConfigurationPropertyKey.INSTANCE_CONNECTION_ENABLED)).thenReturn(Boolean.FALSE); + // SPEX ADDED: END return result; } diff --git a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/ImportMetaDataExecutorTest.java b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/ImportMetaDataExecutorTest.java index d87adca15e9..f84f4f732e9 100644 --- a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/ImportMetaDataExecutorTest.java +++ b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/ImportMetaDataExecutorTest.java @@ -23,6 +23,7 @@ import org.apache.shardingsphere.distsql.handler.validate.DistSQLDataSourcePoolP import org.apache.shardingsphere.distsql.statement.ral.updatable.ImportMetaDataStatement; import org.apache.shardingsphere.infra.config.props.ConfigurationProperties; import org.apache.shardingsphere.infra.config.props.ConfigurationPropertyKey; +import org.apache.shardingsphere.infra.config.props.temporary.TemporaryConfigurationPropertyKey; import org.apache.shardingsphere.infra.database.core.DefaultDatabase; import org.apache.shardingsphere.infra.datasource.pool.props.domain.DataSourcePoolProperties; import org.apache.shardingsphere.infra.exception.dialect.exception.syntax.database.DatabaseCreateExistsException; @@ -135,6 +136,9 @@ class ImportMetaDataExecutorTest { when(result.getMetaDataContexts().getMetaData().getDatabases()).thenReturn(Collections.singletonMap(feature, database)); when(result.getMetaDataContexts().getMetaData().getDatabase(feature)).thenReturn(database); } + // SPEX ADDED: BEGIN + when(result.getMetaDataContexts().getMetaData().getTemporaryProps().<Boolean>getValue(TemporaryConfigurationPropertyKey.INSTANCE_CONNECTION_ENABLED)).thenReturn(Boolean.FALSE); + // SPEX ADDED: END return result; }
