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

Reply via email to