You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by me...@apache.org on 2021/05/13 10:19:01 UTC
[shardingsphere] branch master updated: subscribe global rule
configurations changed event,
persist global rule configurations into registry center. (#10327)
This is an automated email from the ASF dual-hosted git repository.
menghaoran 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 71124b4 subscribe global rule configurations changed event, persist global rule configurations into registry center. (#10327)
71124b4 is described below
commit 71124b4286171db319908b20f8a46a0edf90a372
Author: huanghao495430759 <34...@users.noreply.github.com>
AuthorDate: Thu May 13 05:18:24 2021 -0500
subscribe global rule configurations changed event, persist global rule configurations into registry center. (#10327)
* subscribe global rule configurations changed event, persist global rule configurations into registry center.
* persist global rule configurations into registry center.
Co-authored-by: huanghao <hu...@360shuke.com>
---
.../metadata/GovernanceMetaDataContexts.java | 20 ++++++++++++++++-
.../metadata/GovernanceMetaDataContextsTest.java | 25 +++++++++++++++++++++-
.../governance/core/facade/GovernanceFacade.java | 5 +++--
.../governance/core/registry/RegistryCenter.java | 13 +++++++++--
.../core/facade/GovernanceFacadeTest.java | 5 +++--
.../core/registry/RegistryCenterTest.java | 10 ++++++---
.../GovernanceShardingSphereDataSource.java | 6 +++---
.../impl/GovernanceBootstrapInitializer.java | 13 +++++++----
8 files changed, 79 insertions(+), 18 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 859a3c3..876635f 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
@@ -26,6 +26,7 @@ import org.apache.shardingsphere.governance.core.registry.listener.event.metadat
import org.apache.shardingsphere.governance.core.registry.listener.event.metadata.MetaDataDeletedEvent;
import org.apache.shardingsphere.governance.core.registry.listener.event.metadata.MetaDataPersistedEvent;
import org.apache.shardingsphere.governance.core.registry.listener.event.props.PropertiesChangedEvent;
+import org.apache.shardingsphere.governance.core.registry.listener.event.rule.GlobalRuleConfigurationsChangedEvent;
import org.apache.shardingsphere.governance.core.registry.listener.event.rule.RuleConfigurationsChangedEvent;
import org.apache.shardingsphere.governance.core.registry.listener.event.schema.SchemaChangedEvent;
import org.apache.shardingsphere.governance.core.facade.GovernanceFacade;
@@ -53,6 +54,7 @@ import org.apache.shardingsphere.infra.metadata.user.ShardingSphereUsers;
import org.apache.shardingsphere.infra.metadata.schema.ShardingSphereSchema;
import org.apache.shardingsphere.infra.optimize.context.CalciteContextFactory;
import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
+import org.apache.shardingsphere.infra.rule.builder.ShardingSphereRulesBuilder;
import org.apache.shardingsphere.infra.rule.event.impl.DataSourceNameDisabledEvent;
import org.apache.shardingsphere.infra.rule.event.impl.PrimaryDataSourceEvent;
import org.apache.shardingsphere.infra.rule.type.StatusContainedRule;
@@ -320,6 +322,22 @@ public final class GovernanceMetaDataContexts implements MetaDataContexts {
}
}
+ /**
+ * Renew global rule configurations.
+ *
+ * @param event global rule configurations changed event
+ */
+ @Subscribe
+ public synchronized void renew(final GlobalRuleConfigurationsChangedEvent event) {
+ Collection<RuleConfiguration> newGlobalConfigs = event.getRuleConfigurations();
+ if (!newGlobalConfigs.isEmpty()) {
+ ShardingSphereRuleMetaData newGlobalRuleMetaData = new ShardingSphereRuleMetaData(newGlobalConfigs,
+ ShardingSphereRulesBuilder.buildGlobalRules(newGlobalConfigs, metaDataContexts.getMetaDataMap()));
+ metaDataContexts = new StandardMetaDataContexts(
+ metaDataContexts.getMetaDataMap(), newGlobalRuleMetaData, metaDataContexts.getExecutorEngine(), metaDataContexts.getUsers(), metaDataContexts.getProps());
+ }
+ }
+
private ShardingSphereMetaData buildMetaData(final MetaDataPersistedEvent event) throws SQLException {
String schemaName = event.getSchemaName();
if (!governanceFacade.getRegistryCenter().hasDataSourceConfiguration(schemaName)) {
@@ -333,7 +351,7 @@ public final class GovernanceMetaDataContexts implements MetaDataContexts {
MetaDataContextsBuilder metaDataContextsBuilder = new MetaDataContextsBuilder(dataSourcesMap,
Collections.singletonMap(schemaName, governanceFacade.getRegistryCenter().loadRuleConfigurations(schemaName)),
// TODO load global schema from reg center
- new LinkedList<>(),
+ governanceFacade.getRegistryCenter().loadGlobalRuleConfigurations(),
metaDataContexts.getProps().getProps());
return metaDataContextsBuilder.build().getMetaDataMap().get(schemaName);
}
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 76bce82..050d6db 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
@@ -17,17 +17,21 @@
package org.apache.shardingsphere.governance.context.metadata;
+import org.apache.shardingsphere.authority.api.config.AuthorityRuleConfiguration;
import org.apache.shardingsphere.governance.context.authority.listener.event.AuthorityChangedEvent;
import org.apache.shardingsphere.governance.core.registry.listener.event.datasource.DataSourceChangedEvent;
import org.apache.shardingsphere.governance.core.registry.listener.event.metadata.MetaDataDeletedEvent;
import org.apache.shardingsphere.governance.core.registry.listener.event.metadata.MetaDataPersistedEvent;
import org.apache.shardingsphere.governance.core.registry.listener.event.props.PropertiesChangedEvent;
+import org.apache.shardingsphere.governance.core.registry.listener.event.rule.GlobalRuleConfigurationsChangedEvent;
import org.apache.shardingsphere.governance.core.registry.listener.event.rule.RuleConfigurationsChangedEvent;
import org.apache.shardingsphere.governance.core.registry.listener.event.schema.SchemaChangedEvent;
import org.apache.shardingsphere.governance.core.facade.GovernanceFacade;
import org.apache.shardingsphere.governance.core.registry.RegistryCenter;
import org.apache.shardingsphere.governance.core.registry.listener.event.readwritesplitting.DisabledStateChangedEvent;
import org.apache.shardingsphere.governance.core.registry.schema.GovernanceSchema;
+import org.apache.shardingsphere.infra.config.RuleConfiguration;
+import org.apache.shardingsphere.infra.config.algorithm.ShardingSphereAlgorithmConfiguration;
import org.apache.shardingsphere.infra.config.datasource.DataSourceConfiguration;
import org.apache.shardingsphere.infra.config.properties.ConfigurationProperties;
import org.apache.shardingsphere.infra.config.properties.ConfigurationPropertyKey;
@@ -51,6 +55,7 @@ import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
import java.sql.SQLException;
+import java.util.Collection;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.LinkedList;
@@ -89,12 +94,15 @@ public final class GovernanceMetaDataContextsTest {
private GovernanceMetaDataContexts governanceMetaDataContexts;
+ @Mock
+ private ShardingSphereRuleMetaData globalRuleMetaData;
+
@Before
public void setUp() {
when(governanceFacade.getRegistryCenter()).thenReturn(registryCenter);
when(registryCenter.loadDisabledDataSources("schema")).thenReturn(Collections.singletonList("schema.ds_1"));
governanceMetaDataContexts = new GovernanceMetaDataContexts(new StandardMetaDataContexts(
- createMetaDataMap(), mock(ShardingSphereRuleMetaData.class), mock(ExecutorEngine.class), new ShardingSphereUsers(Collections.emptyList()), props), governanceFacade);
+ createMetaDataMap(), globalRuleMetaData, mock(ExecutorEngine.class), new ShardingSphereUsers(Collections.emptyList()), props), governanceFacade);
}
private Map<String, ShardingSphereMetaData> createMetaDataMap() {
@@ -208,4 +216,19 @@ public final class GovernanceMetaDataContextsTest {
result.put("ds_2", DataSourceConfiguration.getDataSourceConfiguration(dataSource));
return result;
}
+
+ @Test
+ public void assertGlobalRuleConfigurationsChanged() {
+ GlobalRuleConfigurationsChangedEvent event = new GlobalRuleConfigurationsChangedEvent("", getChangedGlobalRuleConfigurations());
+ governanceMetaDataContexts.renew(event);
+ assertThat(governanceMetaDataContexts.getGlobalRuleMetaData(), not(globalRuleMetaData));
+ }
+
+ private Collection<RuleConfiguration> getChangedGlobalRuleConfigurations() {
+ Collection<ShardingSphereUser> users = new LinkedList<>();
+ users.add(new ShardingSphereUser("root", "root", "%"));
+ users.add(new ShardingSphereUser("sharding", "sharding", "localhost"));
+ RuleConfiguration authorityRuleConfig = new AuthorityRuleConfiguration(users, new ShardingSphereAlgorithmConfiguration("NATIVE", new Properties()));
+ return Collections.singleton(authorityRuleConfig);
+ }
}
diff --git a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/facade/GovernanceFacade.java b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/facade/GovernanceFacade.java
index ee73c2a..a04309c 100644
--- a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/facade/GovernanceFacade.java
+++ b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/facade/GovernanceFacade.java
@@ -65,11 +65,12 @@ public final class GovernanceFacade implements AutoCloseable {
*
* @param dataSourceConfigMap schema data source configuration map
* @param schemaRuleMap schema rule map
+ * @param globalRuleConfigs global rule configurations
* @param props properties
*/
public void onlineInstance(final Map<String, Map<String, DataSourceConfiguration>> dataSourceConfigMap,
- final Map<String, Collection<RuleConfiguration>> schemaRuleMap, final Properties props) {
- registryCenter.persistGlobalConfiguration(props, isOverwrite);
+ final Map<String, Collection<RuleConfiguration>> schemaRuleMap, final Collection<RuleConfiguration> globalRuleConfigs, final Properties props) {
+ registryCenter.persistGlobalConfiguration(globalRuleConfigs, props, isOverwrite);
for (Entry<String, Map<String, DataSourceConfiguration>> entry : dataSourceConfigMap.entrySet()) {
registryCenter.persistConfigurations(entry.getKey(), dataSourceConfigMap.get(entry.getKey()), schemaRuleMap.get(entry.getKey()), isOverwrite);
}
diff --git a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/RegistryCenter.java b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/RegistryCenter.java
index 89b8f1d..e5afec0 100644
--- a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/RegistryCenter.java
+++ b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/RegistryCenter.java
@@ -40,6 +40,7 @@ import org.apache.shardingsphere.governance.core.registry.listener.event.rule.Sw
import org.apache.shardingsphere.governance.core.registry.listener.event.scaling.StartScalingEvent;
import org.apache.shardingsphere.governance.core.yaml.config.YamlConfigurationConverter;
import org.apache.shardingsphere.governance.core.yaml.config.YamlDataSourceConfigurationWrap;
+import org.apache.shardingsphere.governance.core.yaml.config.YamlRuleConfigurationWrap;
import org.apache.shardingsphere.governance.core.yaml.config.schema.YamlSchema;
import org.apache.shardingsphere.governance.core.yaml.swapper.SchemaYamlSwapper;
import org.apache.shardingsphere.governance.repository.api.RegistryCenterRepository;
@@ -124,10 +125,12 @@ public final class RegistryCenter {
/**
* Persist global configuration.
*
+ * @param globalRuleConfigs global rule configurations
* @param props properties
* @param isOverwrite is overwrite config center's configuration
*/
- public void persistGlobalConfiguration(final Properties props, final boolean isOverwrite) {
+ public void persistGlobalConfiguration(final Collection<RuleConfiguration> globalRuleConfigs, final Properties props, final boolean isOverwrite) {
+ persistGlobalRuleConfigurations(globalRuleConfigs, isOverwrite);
persistProperties(props, isOverwrite);
}
@@ -223,7 +226,7 @@ public final class RegistryCenter {
private void persistGlobalRuleConfigurations(final Collection<RuleConfiguration> globalRuleConfigs, final boolean isOverwrite) {
if (!globalRuleConfigs.isEmpty() && (isOverwrite || !hasGlobalRuleConfigurations())) {
- repository.persist(node.getGlobalRuleNode(), YamlEngine.marshal(new YamlRuleConfigurationSwapperEngine().swapToYamlRuleConfigurations(globalRuleConfigs)));
+ repository.persist(node.getGlobalRuleNode(), YamlEngine.marshal(createYamlGlobalRuleConfigurationsWrap(globalRuleConfigs)));
}
}
@@ -231,6 +234,12 @@ public final class RegistryCenter {
return !Strings.isNullOrEmpty(repository.get(node.getGlobalRuleNode()));
}
+ private YamlRuleConfigurationWrap createYamlGlobalRuleConfigurationsWrap(final Collection<RuleConfiguration> globalRuleConfigs) {
+ YamlRuleConfigurationWrap result = new YamlRuleConfigurationWrap();
+ result.setRules(new YamlRuleConfigurationSwapperEngine().swapToYamlRuleConfigurations(globalRuleConfigs));
+ return result;
+ }
+
private void persistSchemaName(final String schemaName) {
String schemaNames = repository.get(node.getMetadataNodePath());
if (Strings.isNullOrEmpty(schemaNames)) {
diff --git a/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/facade/GovernanceFacadeTest.java b/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/facade/GovernanceFacadeTest.java
index 6443773..b35d67f 100644
--- a/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/facade/GovernanceFacadeTest.java
+++ b/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/facade/GovernanceFacadeTest.java
@@ -67,10 +67,11 @@ public final class GovernanceFacadeTest {
public void assertOnlineInstanceWithParameters() {
Map<String, DataSourceConfiguration> dataSourceConfigMap = Collections.singletonMap("test_ds", mock(DataSourceConfiguration.class));
Map<String, Collection<RuleConfiguration>> ruleConfigurationMap = 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", dataSourceConfigMap), ruleConfigurationMap, props);
+ governanceFacade.onlineInstance(Collections.singletonMap("sharding_db", dataSourceConfigMap), ruleConfigurationMap, globalRuleConfigs, props);
verify(registryCenter).persistConfigurations("sharding_db", dataSourceConfigMap, ruleConfigurationMap.get("sharding_db"), false);
- verify(registryCenter).persistGlobalConfiguration(props, false);
+ verify(registryCenter).persistGlobalConfiguration(globalRuleConfigs, props, false);
verify(registryCenter).persistInstanceOnline();
verify(registryCenter).persistDataNodes();
verify(listenerManager).initListeners();
diff --git a/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/RegistryCenterTest.java b/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/RegistryCenterTest.java
index 8c594e3..f3a9594 100644
--- a/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/RegistryCenterTest.java
+++ b/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/RegistryCenterTest.java
@@ -322,8 +322,8 @@ public final class RegistryCenterTest {
@Test
public void assertPersistGlobalConfiguration() {
RegistryCenter registryCenter = new RegistryCenter(registryCenterRepository);
- registryCenter.persistGlobalConfiguration(createProperties(), true);
- verify(registryCenterRepository, times(0)).persist("/users", readYAML(USERS_YAML));
+ registryCenter.persistGlobalConfiguration(createGlobalRuleConfigurations(), createProperties(), true);
+ verify(registryCenterRepository).persist(eq("/rule"), any());
verify(registryCenterRepository).persist("/props", PROPS_YAML);
}
@@ -371,7 +371,11 @@ public final class RegistryCenterTest {
private Collection<RuleConfiguration> createShadowRuleConfiguration() {
return new YamlRuleConfigurationSwapperEngine().swapToRuleConfigurations(YamlEngine.unmarshal(readYAML(SHADOW_RULE_YAML), YamlRootRuleConfigurations.class).getRules());
}
-
+
+ private Collection<RuleConfiguration> createGlobalRuleConfigurations() {
+ return new YamlRuleConfigurationSwapperEngine().swapToRuleConfigurations(YamlEngine.unmarshal(readYAML(GLOBAL_RULE_YAML), YamlRuleConfigurationWrap.class).getRules());
+ }
+
private Properties createProperties() {
Properties result = new Properties();
result.put(ConfigurationPropertyKey.SQL_SHOW.getKey(), Boolean.FALSE);
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 3317aaa..7576ebf 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
@@ -96,8 +96,8 @@ public final class GovernanceShardingSphereDataSource extends AbstractUnsupporte
Map<String, DataSourceConfiguration> dataSourceConfigs = registryCenter.loadDataSourceConfigurations(DefaultSchema.LOGIC_NAME);
Collection<RuleConfiguration> ruleConfigurations = registryCenter.loadRuleConfigurations(DefaultSchema.LOGIC_NAME);
Map<String, DataSource> dataSourceMap = DataSourceConverter.getDataSourceMap(dataSourceConfigs);
- MetaDataContextsBuilder metaDataContextsBuilder = new MetaDataContextsBuilder(
- Collections.singletonMap(DefaultSchema.LOGIC_NAME, dataSourceMap), Collections.singletonMap(DefaultSchema.LOGIC_NAME, ruleConfigurations), registryCenter.loadProperties());
+ MetaDataContextsBuilder metaDataContextsBuilder = new MetaDataContextsBuilder(Collections.singletonMap(DefaultSchema.LOGIC_NAME, dataSourceMap),
+ Collections.singletonMap(DefaultSchema.LOGIC_NAME, ruleConfigurations), registryCenter.loadGlobalRuleConfigurations(), registryCenter.loadProperties());
return metaDataContextsBuilder.build();
}
@@ -124,7 +124,7 @@ public final class GovernanceShardingSphereDataSource extends AbstractUnsupporte
Map<String, DataSourceConfiguration> dataSourceConfigs = DataSourceConverter.getDataSourceConfigurationMap(metaDataContexts.getDefaultMetaData().getResource().getDataSources());
Collection<RuleConfiguration> ruleConfigurations = metaDataContexts.getDefaultMetaData().getRuleMetaData().getConfigurations();
governanceFacade.onlineInstance(Collections.singletonMap(DefaultSchema.LOGIC_NAME, dataSourceConfigs),
- Collections.singletonMap(DefaultSchema.LOGIC_NAME, ruleConfigurations), metaDataContexts.getProps().getProps());
+ Collections.singletonMap(DefaultSchema.LOGIC_NAME, ruleConfigurations), metaDataContexts.getGlobalRuleMetaData().getConfigurations(), metaDataContexts.getProps().getProps());
}
@Override
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 30da5db..c56ce65 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
@@ -26,6 +26,7 @@ import org.apache.shardingsphere.infra.config.datasource.DataSourceConfiguration
import org.apache.shardingsphere.infra.config.datasource.DataSourceParameter;
import org.apache.shardingsphere.infra.context.metadata.MetaDataContexts;
import org.apache.shardingsphere.infra.context.metadata.impl.StandardMetaDataContexts;
+import org.apache.shardingsphere.infra.yaml.config.YamlRuleConfiguration;
import org.apache.shardingsphere.infra.yaml.swapper.YamlRuleConfigurationSwapperEngine;
import org.apache.shardingsphere.proxy.config.ProxyConfiguration;
import org.apache.shardingsphere.proxy.config.YamlProxyConfiguration;
@@ -38,7 +39,6 @@ import org.apache.shardingsphere.scaling.core.config.ServerConfiguration;
import org.apache.shardingsphere.transaction.context.TransactionContexts;
import java.util.Collection;
-import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Map.Entry;
@@ -67,12 +67,12 @@ public final class GovernanceBootstrapInitializer extends AbstractBootstrapIniti
governanceFacade.onlineInstance();
} else {
governanceFacade.onlineInstance(getDataSourceConfigurationMap(ruleConfigs),
- getRuleConfigurations(ruleConfigs), serverConfig.getProps());
+ getRuleConfigurations(ruleConfigs), getGlobalRuleConfigurations(serverConfig.getRules()), serverConfig.getProps());
}
}
private boolean isEmptyLocalConfiguration(final YamlProxyServerConfiguration serverConfig, final Map<String, YamlProxyRuleConfiguration> ruleConfigs) {
- return ruleConfigs.isEmpty() && serverConfig.getProps().isEmpty();
+ return ruleConfigs.isEmpty() && serverConfig.getRules().isEmpty() && serverConfig.getProps().isEmpty();
}
private Map<String, Map<String, DataSourceConfiguration>> getDataSourceConfigurationMap(final Map<String, YamlProxyRuleConfiguration> ruleConfigs) {
@@ -90,13 +90,18 @@ public final class GovernanceBootstrapInitializer extends AbstractBootstrapIniti
entry -> swapperEngine.swapToRuleConfigurations(entry.getValue().getRules()), (oldValue, currentValue) -> oldValue, LinkedHashMap::new));
}
+ private Collection<RuleConfiguration> getGlobalRuleConfigurations(final Collection<YamlRuleConfiguration> globalRuleConfigs) {
+ return new YamlRuleConfigurationSwapperEngine().swapToRuleConfigurations(globalRuleConfigs);
+ }
+
private ProxyConfiguration loadProxyConfiguration() {
Collection<String> schemaNames = governanceFacade.getRegistryCenter().getAllSchemaNames();
Map<String, Map<String, DataSourceParameter>> schemaDataSources = loadDataSourceParametersMap(schemaNames);
Map<String, Collection<RuleConfiguration>> schemaRules = loadSchemaRules(schemaNames);
Properties props = governanceFacade.getRegistryCenter().loadProperties();
// TODO load global rules from reg center
- return new ProxyConfiguration(schemaDataSources, schemaRules, Collections.emptyList(), props);
+ Collection<RuleConfiguration> globalRuleConfigs = governanceFacade.getRegistryCenter().loadGlobalRuleConfigurations();
+ return new ProxyConfiguration(schemaDataSources, schemaRules, globalRuleConfigs, props);
}
private Map<String, Map<String, DataSourceParameter>> loadDataSourceParametersMap(final Collection<String> schemaNames) {