This is an automated email from the ASF dual-hosted git repository.

wuweijie pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git


The following commit(s) were added to refs/heads/master by this push:
     new 6634335  Move RegistryCenterRepository out of GovernanceFacade (#11377)
6634335 is described below

commit 66343354181657154a1404c73f6c29fd29a2956b
Author: Liang Zhang <[email protected]>
AuthorDate: Mon Jul 19 02:54:35 2021 +0800

    Move RegistryCenterRepository out of GovernanceFacade (#11377)
    
    * Refactor ProxyConfigurationLoader
    
    * Refactor GovernanceBootstrapInitializer
    
    * Refactor GovernanceMetaDataContexts
    
    * Refactor GovernanceMetaDataContexts
    
    * Refactor GovernanceMetaDataContexts
    
    * Move RegistryCenterRepository out of GovernanceFacade
    
    * Move RegistryCenterRepository out of GovernanceFacade
    
    * Fix test case
---
 .../metadata/GovernanceMetaDataContexts.java       | 17 +++++++------
 .../metadata/GovernanceMetaDataContextsTest.java   |  5 ++--
 .../governance/core/GovernanceFacade.java          | 27 ++++++---------------
 .../governance/core/GovernanceFacadeTest.java      | 25 +++----------------
 .../GovernanceShardingSphereDataSource.java        | 28 ++++++++++++++--------
 .../impl/GovernanceBootstrapInitializer.java       | 17 +++++++++----
 .../proxy/config/ProxyConfigurationLoader.java     |  6 ++---
 7 files changed, 54 insertions(+), 71 deletions(-)

diff --git 
a/shardingsphere-governance/shardingsphere-governance-context/src/main/java/org/apache/shardingsphere/governance/context/metadata/GovernanceMetaDataContexts.java
 
b/shardingsphere-governance/shardingsphere-governance-context/src/main/java/org/apache/shardingsphere/governance/context/metadata/GovernanceMetaDataContexts.java
index 51b947c..b0ce36a 100644
--- 
a/shardingsphere-governance/shardingsphere-governance-context/src/main/java/org/apache/shardingsphere/governance/context/metadata/GovernanceMetaDataContexts.java
+++ 
b/shardingsphere-governance/shardingsphere-governance-context/src/main/java/org/apache/shardingsphere/governance/context/metadata/GovernanceMetaDataContexts.java
@@ -34,6 +34,7 @@ import 
org.apache.shardingsphere.governance.core.registry.metadata.event.SchemaD
 import 
org.apache.shardingsphere.governance.core.registry.state.event.DisabledStateChangedEvent;
 import 
org.apache.shardingsphere.governance.core.registry.state.event.PrimaryStateChangedEvent;
 import org.apache.shardingsphere.governance.core.schema.GovernanceSchema;
+import 
org.apache.shardingsphere.governance.repository.spi.RegistryCenterRepository;
 import org.apache.shardingsphere.infra.config.RuleConfiguration;
 import 
org.apache.shardingsphere.infra.config.datasource.DataSourceConfiguration;
 import org.apache.shardingsphere.infra.config.datasource.DataSourceConverter;
@@ -76,19 +77,19 @@ import java.util.stream.Collectors;
  */
 public final class GovernanceMetaDataContexts implements MetaDataContexts {
     
-    private final GovernanceFacade governanceFacade;
-    
     private volatile StandardMetaDataContexts metaDataContexts;
     
+    private final GovernanceFacade governanceFacade;
+    
     private final ShardingSphereLock lock;
     
-    public GovernanceMetaDataContexts(final StandardMetaDataContexts 
metaDataContexts, final GovernanceFacade governanceFacade) {
-        this.governanceFacade = governanceFacade;
+    public GovernanceMetaDataContexts(final StandardMetaDataContexts 
metaDataContexts, final GovernanceFacade governanceFacade, final 
RegistryCenterRepository repository) {
         this.metaDataContexts = metaDataContexts;
+        this.governanceFacade = governanceFacade;
         ShardingSphereEventBus.getInstance().register(this);
         disableDataSources();
         persistMetaData();
-        lock = createShardingSphereLock();
+        lock = createShardingSphereLock(repository);
     }
     
     private void disableDataSources() {
@@ -109,10 +110,9 @@ public final class GovernanceMetaDataContexts implements 
MetaDataContexts {
         metaDataContexts.getMetaDataMap().forEach((key, value) -> 
governanceFacade.getConfigCenter().getSchemaMetaDataService().persist(key, 
value.getSchema()));
     }
     
-    private ShardingSphereLock createShardingSphereLock() {
+    private ShardingSphereLock createShardingSphereLock(final 
RegistryCenterRepository repository) {
         return 
metaDataContexts.getProps().<Boolean>getValue(ConfigurationPropertyKey.LOCK_ENABLED)
-                ? new 
ShardingSphereDistributeLock(governanceFacade.getRepository(), 
metaDataContexts.getProps().<Long>getValue(ConfigurationPropertyKey.LOCK_WAIT_TIMEOUT_MILLISECONDS))
-                : null;
+                ? new ShardingSphereDistributeLock(repository, 
metaDataContexts.getProps().<Long>getValue(ConfigurationPropertyKey.LOCK_WAIT_TIMEOUT_MILLISECONDS))
 : null;
     }
     
     @Override
@@ -168,7 +168,6 @@ public final class GovernanceMetaDataContexts implements 
MetaDataContexts {
     @Override
     public void close() {
         metaDataContexts.close();
-        governanceFacade.close();
     }
     
     /**
diff --git 
a/shardingsphere-governance/shardingsphere-governance-context/src/test/java/org/apache/shardingsphere/governance/context/metadata/GovernanceMetaDataContextsTest.java
 
b/shardingsphere-governance/shardingsphere-governance-context/src/test/java/org/apache/shardingsphere/governance/context/metadata/GovernanceMetaDataContextsTest.java
index e5d891c..f8135e0 100644
--- 
a/shardingsphere-governance/shardingsphere-governance-context/src/test/java/org/apache/shardingsphere/governance/context/metadata/GovernanceMetaDataContextsTest.java
+++ 
b/shardingsphere-governance/shardingsphere-governance-context/src/test/java/org/apache/shardingsphere/governance/context/metadata/GovernanceMetaDataContextsTest.java
@@ -30,6 +30,7 @@ import 
org.apache.shardingsphere.governance.core.registry.metadata.event.SchemaA
 import 
org.apache.shardingsphere.governance.core.registry.metadata.event.SchemaDeletedEvent;
 import 
org.apache.shardingsphere.governance.core.registry.state.event.DisabledStateChangedEvent;
 import org.apache.shardingsphere.governance.core.schema.GovernanceSchema;
+import 
org.apache.shardingsphere.governance.repository.spi.RegistryCenterRepository;
 import org.apache.shardingsphere.infra.config.RuleConfiguration;
 import 
org.apache.shardingsphere.infra.config.algorithm.ShardingSphereAlgorithmConfiguration;
 import 
org.apache.shardingsphere.infra.config.datasource.DataSourceConfiguration;
@@ -96,8 +97,8 @@ public final class GovernanceMetaDataContextsTest {
     @Before
     public void setUp() {
         when(governanceFacade.getConfigCenter()).thenReturn(configCenter);
-        governanceMetaDataContexts = new GovernanceMetaDataContexts(
-                new StandardMetaDataContexts(createMetaDataMap(), 
globalRuleMetaData, mock(ExecutorEngine.class), props, 
mockOptimizeContextFactory()), governanceFacade);
+        governanceMetaDataContexts = new GovernanceMetaDataContexts(new 
StandardMetaDataContexts(
+                createMetaDataMap(), globalRuleMetaData, 
mock(ExecutorEngine.class), props, mockOptimizeContextFactory()), 
governanceFacade, mock(RegistryCenterRepository.class));
     }
     
     private Map<String, ShardingSphereMetaData> createMetaDataMap() {
diff --git 
a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/GovernanceFacade.java
 
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/GovernanceFacade.java
index 9d2ebd3..f0b68ba 100644
--- 
a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/GovernanceFacade.java
+++ 
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/GovernanceFacade.java
@@ -19,13 +19,11 @@ package org.apache.shardingsphere.governance.core;
 
 import lombok.Getter;
 import 
org.apache.shardingsphere.governance.core.registry.GovernanceWatcherFactory;
-import org.apache.shardingsphere.infra.config.persist.ConfigCenter;
 import org.apache.shardingsphere.governance.core.registry.RegistryCenter;
-import 
org.apache.shardingsphere.governance.core.registry.RegistryCenterRepositoryFactory;
-import 
org.apache.shardingsphere.governance.repository.api.config.GovernanceConfiguration;
 import 
org.apache.shardingsphere.governance.repository.spi.RegistryCenterRepository;
 import org.apache.shardingsphere.infra.config.RuleConfiguration;
 import 
org.apache.shardingsphere.infra.config.datasource.DataSourceConfiguration;
+import org.apache.shardingsphere.infra.config.persist.ConfigCenter;
 
 import java.util.Collection;
 import java.util.Map;
@@ -36,12 +34,7 @@ import java.util.stream.Stream;
 /**
  * Governance facade.
  */
-public final class GovernanceFacade implements AutoCloseable {
-    
-    private boolean isOverwrite;
-    
-    @Getter
-    private RegistryCenterRepository repository;
+public final class GovernanceFacade {
     
     @Getter
     private ConfigCenter configCenter;
@@ -54,12 +47,10 @@ public final class GovernanceFacade implements 
AutoCloseable {
     /**
      * Initialize governance facade.
      *
-     * @param config governance configuration
+     * @param repository registry center repository
      * @param schemaNames schema names
      */
-    public void init(final GovernanceConfiguration config, final 
Collection<String> schemaNames) {
-        isOverwrite = config.isOverwrite();
-        repository = RegistryCenterRepositoryFactory.newInstance(config);
+    public void init(final RegistryCenterRepository repository, final 
Collection<String> schemaNames) {
         configCenter = new ConfigCenter(repository);
         registryCenter = new RegistryCenter(repository);
         listenerFactory = new GovernanceWatcherFactory(repository, 
@@ -73,9 +64,10 @@ public final class GovernanceFacade implements AutoCloseable 
{
      * @param schemaRuleConfigs schema and rule configuration map
      * @param globalRuleConfigs global rule configurations
      * @param props properties
+     * @param isOverwrite is overwrite
      */
-    public void onlineInstance(final Map<String, Map<String, 
DataSourceConfiguration>> dataSourceConfigs,
-                               final Map<String, 
Collection<RuleConfiguration>> schemaRuleConfigs, final 
Collection<RuleConfiguration> globalRuleConfigs, final Properties props) {
+    public void onlineInstance(final Map<String, Map<String, 
DataSourceConfiguration>> dataSourceConfigs, final Map<String, 
Collection<RuleConfiguration>> schemaRuleConfigs, 
+                               final Collection<RuleConfiguration> 
globalRuleConfigs, final Properties props, final boolean isOverwrite) {
         configCenter.persistConfigurations(dataSourceConfigs, 
schemaRuleConfigs, globalRuleConfigs, props, isOverwrite);
         onlineInstance();
     }
@@ -87,9 +79,4 @@ public final class GovernanceFacade implements AutoCloseable {
         registryCenter.registerInstanceOnline();
         listenerFactory.watchListeners();
     }
-    
-    @Override
-    public void close() {
-        repository.close();
-    }
 }
diff --git 
a/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/GovernanceFacadeTest.java
 
b/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/GovernanceFacadeTest.java
index 33102f1..6fdb42c 100644
--- 
a/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/GovernanceFacadeTest.java
+++ 
b/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/GovernanceFacadeTest.java
@@ -19,13 +19,11 @@ package org.apache.shardingsphere.governance.core;
 
 import lombok.SneakyThrows;
 import 
org.apache.shardingsphere.governance.core.registry.GovernanceWatcherFactory;
-import org.apache.shardingsphere.infra.config.persist.ConfigCenter;
 import org.apache.shardingsphere.governance.core.registry.RegistryCenter;
-import 
org.apache.shardingsphere.governance.repository.api.config.GovernanceConfiguration;
-import 
org.apache.shardingsphere.governance.repository.api.config.RegistryCenterConfiguration;
 import 
org.apache.shardingsphere.governance.repository.spi.RegistryCenterRepository;
 import org.apache.shardingsphere.infra.config.RuleConfiguration;
 import 
org.apache.shardingsphere.infra.config.datasource.DataSourceConfiguration;
+import org.apache.shardingsphere.infra.config.persist.ConfigCenter;
 import org.junit.Test;
 
 import java.lang.reflect.Field;
@@ -37,8 +35,6 @@ import java.util.Properties;
 
 import static org.hamcrest.CoreMatchers.instanceOf;
 import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertThat;
 import static org.mockito.Mockito.mock;
@@ -50,17 +46,10 @@ public final class GovernanceFacadeTest {
     
     @Test
     public void assertInit() {
-        GovernanceConfiguration config = new 
GovernanceConfiguration("test_name", new RegistryCenterConfiguration("TEST", 
"127.0.0.1", new Properties()), false);
-        governanceFacade.init(config, Arrays.asList("schema_0", "schema_1"));
+        governanceFacade.init(mock(RegistryCenterRepository.class), 
Arrays.asList("schema_0", "schema_1"));
         assertNotNull(governanceFacade.getRegistryCenter());
-        assertThat(getField(governanceFacade, "isOverwrite"), 
instanceOf(Boolean.class));
-        assertFalse((Boolean) getField(governanceFacade, "isOverwrite"));
-        assertThat(getField(governanceFacade, "repository"), 
instanceOf(RegistryCenterRepository.class));
-        RegistryCenterRepository repository = (RegistryCenterRepository) 
getField(governanceFacade, "repository");
-        assertEquals(repository.getType(), "TEST");
         assertThat(getField(governanceFacade, "listenerFactory"), 
instanceOf(GovernanceWatcherFactory.class));
         GovernanceWatcherFactory listenerFactory = (GovernanceWatcherFactory) 
getField(governanceFacade, "listenerFactory");
-        assertThat(getField(listenerFactory, "repository"), is(repository));
         assertThat(getField(listenerFactory, "schemaNames"), 
is(Arrays.asList("schema_0", "schema_1")));
     }
     
@@ -76,20 +65,12 @@ public final class GovernanceFacadeTest {
         Map<String, Collection<RuleConfiguration>> schemaRuleConfigs = 
Collections.singletonMap("sharding_db", 
Collections.singletonList(mock(RuleConfiguration.class)));
         Collection<RuleConfiguration> globalRuleConfigs = 
Collections.singleton(mock(RuleConfiguration.class));
         Properties props = new Properties();
-        
governanceFacade.onlineInstance(Collections.singletonMap("sharding_db", 
dataSourceConfigs), schemaRuleConfigs, globalRuleConfigs, props);
+        
governanceFacade.onlineInstance(Collections.singletonMap("sharding_db", 
dataSourceConfigs), schemaRuleConfigs, globalRuleConfigs, props, false);
         
verify(configCenter).persistConfigurations(Collections.singletonMap("sharding_db",
 dataSourceConfigs), schemaRuleConfigs, globalRuleConfigs, props, false);
         verify(registryCenter).registerInstanceOnline();
         verify(listenerFactory).watchListeners();
     }
     
-    @Test
-    public void assertClose() {
-        RegistryCenterRepository repository = 
mock(RegistryCenterRepository.class);
-        setField(governanceFacade, "repository", repository);
-        governanceFacade.close();
-        verify(repository).close();
-    }
-    
     @SneakyThrows(ReflectiveOperationException.class)
     private static Object getField(final Object target, final String 
fieldName) {
         Field field = target.getClass().getDeclaredField(fieldName);
diff --git 
a/shardingsphere-jdbc/shardingsphere-jdbc-governance/src/main/java/org/apache/shardingsphere/driver/governance/internal/datasource/GovernanceShardingSphereDataSource.java
 
b/shardingsphere-jdbc/shardingsphere-jdbc-governance/src/main/java/org/apache/shardingsphere/driver/governance/internal/datasource/GovernanceShardingSphereDataSource.java
index a872c34..ad3e3fd 100644
--- 
a/shardingsphere-jdbc/shardingsphere-jdbc-governance/src/main/java/org/apache/shardingsphere/driver/governance/internal/datasource/GovernanceShardingSphereDataSource.java
+++ 
b/shardingsphere-jdbc/shardingsphere-jdbc-governance/src/main/java/org/apache/shardingsphere/driver/governance/internal/datasource/GovernanceShardingSphereDataSource.java
@@ -22,7 +22,9 @@ import 
org.apache.shardingsphere.driver.governance.internal.state.DriverStateCon
 import 
org.apache.shardingsphere.driver.jdbc.unsupported.AbstractUnsupportedOperationDataSource;
 import 
org.apache.shardingsphere.governance.context.metadata.GovernanceMetaDataContexts;
 import org.apache.shardingsphere.governance.core.GovernanceFacade;
+import 
org.apache.shardingsphere.governance.core.registry.RegistryCenterRepositoryFactory;
 import 
org.apache.shardingsphere.governance.repository.api.config.GovernanceConfiguration;
+import 
org.apache.shardingsphere.governance.repository.spi.RegistryCenterRepository;
 import org.apache.shardingsphere.infra.config.RuleConfiguration;
 import 
org.apache.shardingsphere.infra.config.datasource.DataSourceConfiguration;
 import org.apache.shardingsphere.infra.config.datasource.DataSourceConverter;
@@ -52,16 +54,20 @@ import java.util.stream.Collectors;
 /**
  * Governance ShardingSphere data source.
  */
-@Getter
 public final class GovernanceShardingSphereDataSource extends 
AbstractUnsupportedOperationDataSource implements AutoCloseable {
     
+    private final RegistryCenterRepository repository;
+    
+    @Getter
     private final MetaDataContexts metaDataContexts;
     
+    @Getter
     private final TransactionContexts transactionContexts;
     
     public GovernanceShardingSphereDataSource(final GovernanceConfiguration 
governanceConfig) throws SQLException {
-        GovernanceFacade governanceFacade = 
createGovernanceFacade(governanceConfig);
-        metaDataContexts = new 
GovernanceMetaDataContexts(createMetaDataContexts(governanceFacade), 
governanceFacade);
+        repository = 
RegistryCenterRepositoryFactory.newInstance(governanceConfig);
+        GovernanceFacade governanceFacade = createGovernanceFacade();
+        metaDataContexts = new 
GovernanceMetaDataContexts(createMetaDataContexts(governanceFacade), 
governanceFacade, repository);
         String xaTransactionMangerType = 
metaDataContexts.getProps().getValue(ConfigurationPropertyKey.XA_TRANSACTION_MANAGER_TYPE);
         transactionContexts = 
createTransactionContexts(metaDataContexts.getDefaultMetaData().getResource().getDatabaseType(),
                 
metaDataContexts.getDefaultMetaData().getResource().getDataSources(), 
xaTransactionMangerType);
@@ -69,17 +75,18 @@ public final class GovernanceShardingSphereDataSource 
extends AbstractUnsupporte
     
     public GovernanceShardingSphereDataSource(final Map<String, DataSource> 
dataSourceMap, final Collection<RuleConfiguration> ruleConfigs, 
                                               final Properties props, final 
GovernanceConfiguration governanceConfig) throws SQLException {
-        GovernanceFacade governanceFacade = 
createGovernanceFacade(governanceConfig);
-        metaDataContexts = new 
GovernanceMetaDataContexts(createMetaDataContexts(dataSourceMap, ruleConfigs, 
props), governanceFacade);
+        repository = 
RegistryCenterRepositoryFactory.newInstance(governanceConfig);
+        GovernanceFacade governanceFacade = createGovernanceFacade();
+        metaDataContexts = new 
GovernanceMetaDataContexts(createMetaDataContexts(dataSourceMap, ruleConfigs, 
props), governanceFacade, repository);
         String xaTransactionMangerType = 
metaDataContexts.getProps().getValue(ConfigurationPropertyKey.XA_TRANSACTION_MANAGER_TYPE);
         transactionContexts = 
createTransactionContexts(metaDataContexts.getDefaultMetaData().getResource().getDatabaseType(),
                 
metaDataContexts.getDefaultMetaData().getResource().getDataSources(), 
xaTransactionMangerType);
-        uploadLocalConfiguration(governanceFacade, ruleConfigs);
+        uploadLocalConfiguration(governanceFacade, ruleConfigs, 
governanceConfig.isOverwrite());
     }
     
-    private GovernanceFacade createGovernanceFacade(final 
GovernanceConfiguration config) {
+    private GovernanceFacade createGovernanceFacade() {
         GovernanceFacade result = new GovernanceFacade();
-        result.init(config, 
Collections.singletonList(DefaultSchema.LOGIC_NAME));
+        result.init(repository, 
Collections.singletonList(DefaultSchema.LOGIC_NAME));
         result.onlineInstance();
         return result;
     }
@@ -106,12 +113,12 @@ public final class GovernanceShardingSphereDataSource 
extends AbstractUnsupporte
         return new 
StandardTransactionContexts(Collections.singletonMap(DefaultSchema.LOGIC_NAME, 
engine));
     }
     
-    private void uploadLocalConfiguration(final GovernanceFacade 
governanceFacade, final Collection<RuleConfiguration> ruleConfigs) {
+    private void uploadLocalConfiguration(final GovernanceFacade 
governanceFacade, final Collection<RuleConfiguration> ruleConfigs, final 
boolean isOverwrite) {
         Map<String, DataSourceConfiguration> dataSourceConfigs = 
DataSourceConverter.getDataSourceConfigurationMap(metaDataContexts.getDefaultMetaData().getResource().getDataSources());
         Collection<RuleConfiguration> schemaRuleConfigs = 
ruleConfigs.stream().filter(each -> each instanceof 
SchemaRuleConfiguration).collect(Collectors.toList());
         Collection<RuleConfiguration> globalRuleConfigs = 
ruleConfigs.stream().filter(each -> each instanceof 
GlobalRuleConfiguration).collect(Collectors.toList());
         
governanceFacade.onlineInstance(Collections.singletonMap(DefaultSchema.LOGIC_NAME,
 dataSourceConfigs),
-                Collections.singletonMap(DefaultSchema.LOGIC_NAME, 
schemaRuleConfigs), globalRuleConfigs, metaDataContexts.getProps().getProps());
+                Collections.singletonMap(DefaultSchema.LOGIC_NAME, 
schemaRuleConfigs), globalRuleConfigs, metaDataContexts.getProps().getProps(), 
isOverwrite);
     }
     
     @Override
@@ -128,6 +135,7 @@ public final class GovernanceShardingSphereDataSource 
extends AbstractUnsupporte
     public void close() throws Exception {
         getDataSourceMap().forEach((key, value) -> close(value));
         metaDataContexts.close();
+        repository.close();
     }
     
     private void close(final DataSource dataSource) {
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/main/java/org/apache/shardingsphere/proxy/initializer/impl/GovernanceBootstrapInitializer.java
 
b/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/main/java/org/apache/shardingsphere/proxy/initializer/impl/GovernanceBootstrapInitializer.java
index d832e64..bfb148a 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/main/java/org/apache/shardingsphere/proxy/initializer/impl/GovernanceBootstrapInitializer.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/main/java/org/apache/shardingsphere/proxy/initializer/impl/GovernanceBootstrapInitializer.java
@@ -20,7 +20,10 @@ package org.apache.shardingsphere.proxy.initializer.impl;
 import 
org.apache.shardingsphere.governance.context.metadata.GovernanceMetaDataContexts;
 import 
org.apache.shardingsphere.governance.context.transaction.GovernanceTransactionContexts;
 import org.apache.shardingsphere.governance.core.GovernanceFacade;
+import 
org.apache.shardingsphere.governance.core.registry.RegistryCenterRepositoryFactory;
 import 
org.apache.shardingsphere.governance.core.yaml.swapper.GovernanceConfigurationYamlSwapper;
+import 
org.apache.shardingsphere.governance.repository.api.config.GovernanceConfiguration;
+import 
org.apache.shardingsphere.governance.repository.spi.RegistryCenterRepository;
 import org.apache.shardingsphere.infra.config.RuleConfiguration;
 import 
org.apache.shardingsphere.infra.config.datasource.DataSourceConfiguration;
 import org.apache.shardingsphere.infra.config.datasource.DataSourceParameter;
@@ -53,9 +56,13 @@ public final class GovernanceBootstrapInitializer extends 
AbstractBootstrapIniti
     
     private final GovernanceFacade governanceFacade = new GovernanceFacade();
     
+    private volatile RegistryCenterRepository repository;
+    
     @Override
     protected ProxyConfiguration getProxyConfiguration(final 
YamlProxyConfiguration yamlConfig) {
-        governanceFacade.init(new 
GovernanceConfigurationYamlSwapper().swapToObject(yamlConfig.getServerConfiguration().getGovernance()),
 yamlConfig.getRuleConfigurations().keySet());
+        GovernanceConfiguration governanceConfig = new 
GovernanceConfigurationYamlSwapper().swapToObject(yamlConfig.getServerConfiguration().getGovernance());
+        repository = 
RegistryCenterRepositoryFactory.newInstance(governanceConfig);
+        governanceFacade.init(repository, 
yamlConfig.getRuleConfigurations().keySet());
         initConfigurations(yamlConfig);
         return loadProxyConfiguration();
     }
@@ -67,7 +74,7 @@ public final class GovernanceBootstrapInitializer extends 
AbstractBootstrapIniti
             governanceFacade.onlineInstance();
         } else {
             
governanceFacade.onlineInstance(getDataSourceConfigurationMap(ruleConfigs), 
-                    getRuleConfigurations(ruleConfigs), 
getGlobalRuleConfigurations(serverConfig.getRules()), serverConfig.getProps());
+                    getRuleConfigurations(ruleConfigs), 
getGlobalRuleConfigurations(serverConfig.getRules()), serverConfig.getProps(), 
serverConfig.getGovernance().isOverwrite());
         }
     }
     
@@ -84,9 +91,9 @@ public final class GovernanceBootstrapInitializer extends 
AbstractBootstrapIniti
         return result;
     }
     
-    private Map<String, Collection<RuleConfiguration>> 
getRuleConfigurations(final Map<String, YamlProxyRuleConfiguration> 
yamlRuleConfigurations) {
+    private Map<String, Collection<RuleConfiguration>> 
getRuleConfigurations(final Map<String, YamlProxyRuleConfiguration> 
yamlRuleConfigs) {
         YamlRuleConfigurationSwapperEngine swapperEngine = new 
YamlRuleConfigurationSwapperEngine();
-        return 
yamlRuleConfigurations.entrySet().stream().collect(Collectors.toMap(Entry::getKey,
+        return 
yamlRuleConfigs.entrySet().stream().collect(Collectors.toMap(Entry::getKey,
             entry -> 
swapperEngine.swapToRuleConfigurations(entry.getValue().getRules()), (oldValue, 
currentValue) -> oldValue, LinkedHashMap::new));
     }
     
@@ -118,7 +125,7 @@ public final class GovernanceBootstrapInitializer extends 
AbstractBootstrapIniti
     
     @Override
     protected MetaDataContexts decorateMetaDataContexts(final MetaDataContexts 
metaDataContexts) {
-        return new GovernanceMetaDataContexts((StandardMetaDataContexts) 
metaDataContexts, governanceFacade);
+        return new GovernanceMetaDataContexts((StandardMetaDataContexts) 
metaDataContexts, governanceFacade, repository);
     }
     
     @Override
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-common/src/main/java/org/apache/shardingsphere/proxy/config/ProxyConfigurationLoader.java
 
b/shardingsphere-proxy/shardingsphere-proxy-common/src/main/java/org/apache/shardingsphere/proxy/config/ProxyConfigurationLoader.java
index 5b7f3c2..1f2502d 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-common/src/main/java/org/apache/shardingsphere/proxy/config/ProxyConfigurationLoader.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-common/src/main/java/org/apache/shardingsphere/proxy/config/ProxyConfigurationLoader.java
@@ -57,9 +57,9 @@ public final class ProxyConfigurationLoader {
     public static YamlProxyConfiguration load(final String path) throws 
IOException {
         YamlProxyServerConfiguration serverConfig = 
loadServerConfiguration(getResourceFile(String.join("/", path, 
SERVER_CONFIG_FILE)));
         File configPath = getResourceFile(path);
-        Collection<YamlProxyRuleConfiguration> ruleConfigurations = 
loadRuleConfigurations(configPath);
-        Preconditions.checkState(!ruleConfigurations.isEmpty() || null != 
serverConfig.getGovernance(), "Can not find any valid rule configurations file 
in path `%s`.", configPath.getPath());
-        return new YamlProxyConfiguration(serverConfig, 
ruleConfigurations.stream().collect(Collectors.toMap(
+        Collection<YamlProxyRuleConfiguration> ruleConfigs = 
loadRuleConfigurations(configPath);
+        Preconditions.checkState(!ruleConfigs.isEmpty() || null != 
serverConfig.getGovernance(), "Can not find any valid rule configurations file 
in path `%s`.", configPath.getPath());
+        return new YamlProxyConfiguration(serverConfig, 
ruleConfigs.stream().collect(Collectors.toMap(
                 YamlProxyRuleConfiguration::getSchemaName, each -> each, 
(oldValue, currentValue) -> oldValue, LinkedHashMap::new)));
     }
     

Reply via email to