From cb62b50b4b4a68008f92f98a6c5a9f4d4a81b345 Mon Sep 17 00:00:00 2001 From: Zhang Yonglun Date: Mon, 2 Nov 2020 21:42:42 +0800 Subject: [PATCH] #7318, add governance updater (#8007) --- .../core/facade/GovernanceFacade.java | 12 +++++ .../impl/GovernanceBootstrapInitializer.java | 3 +- .../shardingsphere-proxy-common/pom.xml | 5 ++ .../config/ProxyConfigurationUpdater.java | 52 +++++++++++++++++++ 4 files changed, 71 insertions(+), 1 deletion(-) create mode 100644 shardingsphere-proxy/shardingsphere-proxy-common/src/main/java/org/apache/shardingsphere/proxy/config/ProxyConfigurationUpdater.java diff --git a/shardingsphere-governance/shardingsphere-governance-core/shardingsphere-governance-core-facade/src/main/java/org/apache/shardingsphere/governance/core/facade/GovernanceFacade.java b/shardingsphere-governance/shardingsphere-governance-core/shardingsphere-governance-core-facade/src/main/java/org/apache/shardingsphere/governance/core/facade/GovernanceFacade.java index 57262519ed..0ed71fa6b0 100644 --- a/shardingsphere-governance/shardingsphere-governance-core/shardingsphere-governance-core-facade/src/main/java/org/apache/shardingsphere/governance/core/facade/GovernanceFacade.java +++ b/shardingsphere-governance/shardingsphere-governance-core/shardingsphere-governance-core-facade/src/main/java/org/apache/shardingsphere/governance/core/facade/GovernanceFacade.java @@ -90,6 +90,18 @@ public final class GovernanceFacade implements AutoCloseable { listenerManager.init(); } + /** + * Update configurations. + * + * @param dataSourceConfigMap schema data source configuration map + * @param schemaRuleMap schema rule map + */ + public void updateConfigurations(final Map> dataSourceConfigMap, final Map> schemaRuleMap) { + for (Entry> entry : dataSourceConfigMap.entrySet()) { + configCenter.persistConfigurations(entry.getKey(), dataSourceConfigMap.get(entry.getKey()), schemaRuleMap.get(entry.getKey()), true); + } + } + @Override public void close() { repositoryFacade.close(); 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 f066a401bb..91898d984f 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 @@ -30,6 +30,7 @@ import org.apache.shardingsphere.infra.context.schema.SchemaContexts; import org.apache.shardingsphere.infra.config.datasource.DataSourceParameter; import org.apache.shardingsphere.infra.yaml.swapper.YamlRuleConfigurationSwapperEngine; import org.apache.shardingsphere.proxy.config.ProxyConfiguration; +import org.apache.shardingsphere.proxy.config.ProxyConfigurationUpdater; import org.apache.shardingsphere.proxy.config.YamlProxyConfiguration; import org.apache.shardingsphere.proxy.config.util.DataSourceParameterConverter; import org.apache.shardingsphere.proxy.config.yaml.YamlProxyRuleConfiguration; @@ -48,7 +49,7 @@ import java.util.stream.Collectors; */ public final class GovernanceBootstrapInitializer extends AbstractBootstrapInitializer { - private final GovernanceFacade governanceFacade = new GovernanceFacade(); + private final GovernanceFacade governanceFacade = ProxyConfigurationUpdater.getGovernanceFacade(); @Override protected ProxyConfiguration getProxyConfiguration(final YamlProxyConfiguration yamlConfig) { diff --git a/shardingsphere-proxy/shardingsphere-proxy-common/pom.xml b/shardingsphere-proxy/shardingsphere-proxy-common/pom.xml index 0af1f7d282..e268c48471 100644 --- a/shardingsphere-proxy/shardingsphere-proxy-common/pom.xml +++ b/shardingsphere-proxy/shardingsphere-proxy-common/pom.xml @@ -37,6 +37,11 @@ shardingsphere-governance-core-common ${project.version} + + org.apache.shardingsphere + shardingsphere-governance-core-facade + ${project.version} + org.apache.shardingsphere shardingsphere-infra-context diff --git a/shardingsphere-proxy/shardingsphere-proxy-common/src/main/java/org/apache/shardingsphere/proxy/config/ProxyConfigurationUpdater.java b/shardingsphere-proxy/shardingsphere-proxy-common/src/main/java/org/apache/shardingsphere/proxy/config/ProxyConfigurationUpdater.java new file mode 100644 index 0000000000..62fdac6cf1 --- /dev/null +++ b/shardingsphere-proxy/shardingsphere-proxy-common/src/main/java/org/apache/shardingsphere/proxy/config/ProxyConfigurationUpdater.java @@ -0,0 +1,52 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.shardingsphere.proxy.config; + +import org.apache.shardingsphere.governance.core.facade.GovernanceFacade; +import org.apache.shardingsphere.infra.config.RuleConfiguration; +import org.apache.shardingsphere.infra.config.datasource.DataSourceConfiguration; + +import java.util.Collection; +import java.util.Map; + +/** + * Proxy configuration updater. + */ +public final class ProxyConfigurationUpdater { + + private static final GovernanceFacade GOVERNANCE_FACADE = new GovernanceFacade(); + + /** + * Get governance facade. + * + * @return governance facade + */ + public static GovernanceFacade getGovernanceFacade() { + return GOVERNANCE_FACADE; + } + + /** + * Update configurations. + * + * @param dataSourceConfigMap data source config map + * @param schemaRuleMap schema rule map + */ + public static void update(final Map> dataSourceConfigMap, final Map> schemaRuleMap) { + GOVERNANCE_FACADE.updateConfigurations(dataSourceConfigMap, schemaRuleMap); + } +} -- GitLab