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 1ee97b7 Pull up getProxyConfiguration to AbstractBootstrapInitializer
(#11625)
1ee97b7 is described below
commit 1ee97b786e15bff2219e3135d019e321fdcea25d
Author: Liang Zhang <[email protected]>
AuthorDate: Tue Aug 3 23:34:21 2021 +0800
Pull up getProxyConfiguration to AbstractBootstrapInitializer (#11625)
* Add todo
* Pull up getProxyConfiguration to AbstractBootstrapInitializer
---
.../GovernanceShardingSphereDataSource.java | 1 +
.../org/apache/shardingsphere/proxy/Bootstrap.java | 4 +-
.../proxy/initializer/BootstrapInitializer.java | 8 ++
.../impl/AbstractBootstrapInitializer.java | 13 +-
.../impl/GovernanceBootstrapInitializer.java | 22 +--
.../impl/StandardBootstrapInitializer.java | 11 +-
.../impl/AbstractBootstrapInitializerTest.java | 47 +++----
.../impl/GovernanceBootstrapInitializerTest.java | 143 -------------------
.../impl/StandardBootstrapInitializerTest.java | 153 ---------------------
.../resources/conf/reg_center/data-sources.yaml | 39 ------
.../src/test/resources/conf/reg_center/props.yaml | 19 ---
.../resources/conf/reg_center/sharding-rule.yaml | 39 ------
12 files changed, 63 insertions(+), 436 deletions(-)
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 9b7ac53..b7e4d51 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
@@ -76,6 +76,7 @@ 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 {
+ // TODO new GovernanceRule from SPI
governanceRule = new GovernanceRule(governanceConfig);
DistMetaDataPersistService persistService = new
DistMetaDataPersistService(governanceRule.getRegistryCenter().getRepository());
metaDataContexts = new
GovernanceMetaDataContexts(createMetaDataContexts(persistService,
dataSourceMap, ruleConfigs, props), persistService,
governanceRule.getRegistryCenter());
diff --git
a/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/main/java/org/apache/shardingsphere/proxy/Bootstrap.java
b/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/main/java/org/apache/shardingsphere/proxy/Bootstrap.java
index 0346dc9..950035c 100644
---
a/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/main/java/org/apache/shardingsphere/proxy/Bootstrap.java
+++
b/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/main/java/org/apache/shardingsphere/proxy/Bootstrap.java
@@ -54,7 +54,9 @@ public final class Bootstrap {
public static void main(final String[] args) throws IOException,
SQLException {
BootstrapArguments bootstrapArgs = new BootstrapArguments(args);
YamlProxyConfiguration yamlConfig =
ProxyConfigurationLoader.load(bootstrapArgs.getConfigurationPath());
- createBootstrapInitializer(yamlConfig).init(yamlConfig,
bootstrapArgs.getPort());
+ BootstrapInitializer initializer =
createBootstrapInitializer(yamlConfig);
+ initializer.init(yamlConfig, bootstrapArgs.getPort());
+ initializer.afterInit(yamlConfig);
}
private static BootstrapInitializer createBootstrapInitializer(final
YamlProxyConfiguration yamlConfig) {
diff --git
a/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/main/java/org/apache/shardingsphere/proxy/initializer/BootstrapInitializer.java
b/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/main/java/org/apache/shardingsphere/proxy/initializer/BootstrapInitializer.java
index 8fd1c24..d8f87b5 100644
---
a/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/main/java/org/apache/shardingsphere/proxy/initializer/BootstrapInitializer.java
+++
b/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/main/java/org/apache/shardingsphere/proxy/initializer/BootstrapInitializer.java
@@ -34,4 +34,12 @@ public interface BootstrapInitializer {
* @throws SQLException SQL exception
*/
void init(YamlProxyConfiguration yamlConfig, int port) throws SQLException;
+
+ /**
+ * Called after Initialize.
+ *
+ * @param yamlConfig YAML proxy configuration
+ */
+ default void afterInit(YamlProxyConfiguration yamlConfig) {
+ }
}
diff --git
a/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/main/java/org/apache/shardingsphere/proxy/initializer/impl/AbstractBootstrapInitializer.java
b/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/main/java/org/apache/shardingsphere/proxy/initializer/impl/AbstractBootstrapInitializer.java
index 1e16f52..5aa97c3 100644
---
a/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/main/java/org/apache/shardingsphere/proxy/initializer/impl/AbstractBootstrapInitializer.java
+++
b/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/main/java/org/apache/shardingsphere/proxy/initializer/impl/AbstractBootstrapInitializer.java
@@ -39,6 +39,7 @@ import
org.apache.shardingsphere.proxy.config.YamlProxyConfiguration;
import
org.apache.shardingsphere.proxy.config.util.DataSourceParameterConverter;
import org.apache.shardingsphere.proxy.config.yaml.YamlProxyRuleConfiguration;
import
org.apache.shardingsphere.proxy.config.yaml.YamlProxyServerConfiguration;
+import
org.apache.shardingsphere.proxy.config.yaml.swapper.YamlProxyConfigurationSwapper;
import org.apache.shardingsphere.proxy.database.DatabaseServerInfo;
import org.apache.shardingsphere.proxy.frontend.ShardingSphereProxy;
import org.apache.shardingsphere.proxy.initializer.BootstrapInitializer;
@@ -85,6 +86,16 @@ public abstract class AbstractBootstrapInitializer
implements BootstrapInitializ
shardingSphereProxy.start(port);
}
+ private ProxyConfiguration getProxyConfiguration(final
YamlProxyConfiguration yamlConfig) {
+ persistConfigurations(yamlConfig, isOverwrite(yamlConfig));
+ // TODO remove isEmpty judge after LocalDistMetaDataPersistRepository
finished
+ ProxyConfiguration result = loadProxyConfiguration();
+ if (null != yamlConfig.getServerConfiguration().getGovernance()) {
+ return result;
+ }
+ return (result.getSchemaDataSources().isEmpty()) ? new
YamlProxyConfigurationSwapper().swap(yamlConfig) : result;
+ }
+
private MetaDataContexts createMetaDataContexts(final ProxyConfiguration
proxyConfig) throws SQLException {
Map<String, Map<String, DataSource>> dataSourcesMap =
createDataSourcesMap(proxyConfig.getSchemaDataSources());
return new MetaDataContextsBuilder(dataSourcesMap,
proxyConfig.getSchemaRules(), proxyConfig.getGlobalRules(),
proxyConfig.getProps()).build(distMetaDataPersistService);
@@ -144,7 +155,7 @@ public abstract class AbstractBootstrapInitializer
implements BootstrapInitializ
return Optional.of(result);
}
- protected abstract ProxyConfiguration
getProxyConfiguration(YamlProxyConfiguration yamlConfig);
+ protected abstract boolean isOverwrite(YamlProxyConfiguration yamlConfig);
protected abstract MetaDataContexts
decorateMetaDataContexts(MetaDataContexts metaDataContexts);
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 9519c6b..922873e 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
@@ -24,7 +24,6 @@ import
org.apache.shardingsphere.governance.core.yaml.pojo.YamlGovernanceConfigu
import
org.apache.shardingsphere.governance.core.yaml.swapper.GovernanceConfigurationYamlSwapper;
import org.apache.shardingsphere.infra.context.metadata.MetaDataContexts;
import
org.apache.shardingsphere.infra.context.metadata.impl.StandardMetaDataContexts;
-import org.apache.shardingsphere.proxy.config.ProxyConfiguration;
import org.apache.shardingsphere.proxy.config.YamlProxyConfiguration;
import org.apache.shardingsphere.scaling.core.api.ScalingWorker;
import org.apache.shardingsphere.scaling.core.config.ScalingContext;
@@ -50,15 +49,8 @@ public final class GovernanceBootstrapInitializer extends
AbstractBootstrapIniti
}
@Override
- protected ProxyConfiguration getProxyConfiguration(final
YamlProxyConfiguration yamlConfig) {
- persistConfigurations(yamlConfig,
yamlConfig.getServerConfiguration().getGovernance().isOverwrite());
-
governanceRule.getRegistryCenter().onlineInstance(getSchemaNames(yamlConfig));
- return loadProxyConfiguration();
- }
-
- private Set<String> getSchemaNames(final YamlProxyConfiguration
yamlConfig) {
- return
Stream.of(getDistMetaDataPersistService().getSchemaMetaDataService().loadAllNames(),
yamlConfig.getRuleConfigurations().keySet()).flatMap(Collection::stream)
- .collect(Collectors.toSet());
+ protected boolean isOverwrite(final YamlProxyConfiguration yamlConfig) {
+ return
yamlConfig.getServerConfiguration().getGovernance().isOverwrite();
}
@Override
@@ -82,4 +74,14 @@ public final class GovernanceBootstrapInitializer extends
AbstractBootstrapIniti
ScalingContext.getInstance().init(scalingConfig);
ScalingWorker.init();
}
+
+ @Override
+ public void afterInit(final YamlProxyConfiguration yamlConfig) {
+
governanceRule.getRegistryCenter().onlineInstance(getSchemaNames(yamlConfig));
+ }
+
+ private Set<String> getSchemaNames(final YamlProxyConfiguration
yamlConfig) {
+ return
Stream.of(getDistMetaDataPersistService().getSchemaMetaDataService().loadAllNames(),
yamlConfig.getRuleConfigurations().keySet()).flatMap(Collection::stream)
+ .collect(Collectors.toSet());
+ }
}
diff --git
a/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/main/java/org/apache/shardingsphere/proxy/initializer/impl/StandardBootstrapInitializer.java
b/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/main/java/org/apache/shardingsphere/proxy/initializer/impl/StandardBootstrapInitializer.java
index f3a98bf..ba70442 100644
---
a/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/main/java/org/apache/shardingsphere/proxy/initializer/impl/StandardBootstrapInitializer.java
+++
b/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/main/java/org/apache/shardingsphere/proxy/initializer/impl/StandardBootstrapInitializer.java
@@ -19,9 +19,7 @@ package org.apache.shardingsphere.proxy.initializer.impl;
import
org.apache.shardingsphere.infra.config.persist.repository.DistMetaDataPersistRepository;
import org.apache.shardingsphere.infra.context.metadata.MetaDataContexts;
-import org.apache.shardingsphere.proxy.config.ProxyConfiguration;
import org.apache.shardingsphere.proxy.config.YamlProxyConfiguration;
-import
org.apache.shardingsphere.proxy.config.yaml.swapper.YamlProxyConfigurationSwapper;
import org.apache.shardingsphere.scaling.core.config.ScalingContext;
import org.apache.shardingsphere.transaction.context.TransactionContexts;
@@ -35,12 +33,9 @@ public final class StandardBootstrapInitializer extends
AbstractBootstrapInitial
}
@Override
- protected ProxyConfiguration getProxyConfiguration(final
YamlProxyConfiguration yamlConfig) {
- // TODO get overwrite from rule
- persistConfigurations(yamlConfig, true);
- // TODO remove isEmpty judge after LocalDistMetaDataPersistRepository
finished
- ProxyConfiguration result = loadProxyConfiguration();
- return (result.getSchemaDataSources().isEmpty()) ? new
YamlProxyConfigurationSwapper().swap(yamlConfig) : result;
+ protected boolean isOverwrite(final YamlProxyConfiguration yamlConfig) {
+ // TODO get overwrite from rule
+ return true;
}
@Override
diff --git
a/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/test/java/org/apache/shardingsphere/proxy/initializer/impl/AbstractBootstrapInitializerTest.java
b/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/test/java/org/apache/shardingsphere/proxy/initializer/impl/AbstractBootstrapInitializerTest.java
index a50c6e4..66163bc 100644
---
a/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/test/java/org/apache/shardingsphere/proxy/initializer/impl/AbstractBootstrapInitializerTest.java
+++
b/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/test/java/org/apache/shardingsphere/proxy/initializer/impl/AbstractBootstrapInitializerTest.java
@@ -19,35 +19,34 @@ package org.apache.shardingsphere.proxy.initializer.impl;
import lombok.Getter;
import lombok.Setter;
+import lombok.SneakyThrows;
+import
org.apache.shardingsphere.infra.config.persist.DistMetaDataPersistService;
import
org.apache.shardingsphere.infra.config.properties.ConfigurationProperties;
import
org.apache.shardingsphere.infra.config.properties.ConfigurationPropertyKey;
import org.apache.shardingsphere.infra.context.metadata.MetaDataContexts;
-import org.apache.shardingsphere.proxy.config.ProxyConfiguration;
import org.apache.shardingsphere.proxy.config.YamlProxyConfiguration;
import
org.apache.shardingsphere.proxy.config.yaml.YamlProxyServerConfiguration;
import org.apache.shardingsphere.proxy.frontend.ShardingSphereProxy;
import org.apache.shardingsphere.transaction.context.TransactionContexts;
import org.junit.Before;
-import org.junit.Ignore;
import org.junit.Test;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.sql.SQLException;
+import java.util.Collections;
import java.util.Properties;
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.CALLS_REAL_METHODS;
+import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
-@Ignore
public abstract class AbstractBootstrapInitializerTest {
@Getter
@@ -61,37 +60,39 @@ public abstract class AbstractBootstrapInitializerTest {
}
protected void doEnvironmentPrepare() {
-
}
protected abstract void prepareSpecifiedInitializer();
@Test
- public final void assertInit() throws NoSuchFieldException,
IllegalAccessException, SQLException {
- Field field =
AbstractBootstrapInitializer.class.getDeclaredField("shardingSphereProxy");
- field.setAccessible(true);
- Field modifiersField = Field.class.getDeclaredField("modifiers");
- modifiersField.setAccessible(true);
- modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL);
- AbstractBootstrapInitializer abstractBootstrapInitializer =
mock(AbstractBootstrapInitializer.class, CALLS_REAL_METHODS);
+ public final void assertInit() throws SQLException {
+ AbstractBootstrapInitializer initializer =
mock(AbstractBootstrapInitializer.class, CALLS_REAL_METHODS);
ShardingSphereProxy shardingSphereProxy =
mock(ShardingSphereProxy.class);
- field.set(abstractBootstrapInitializer, shardingSphereProxy);
-
doReturn(mock(ProxyConfiguration.class)).when(abstractBootstrapInitializer).getProxyConfiguration(any());
+ setFieldValue(initializer, "shardingSphereProxy", shardingSphereProxy);
+ DistMetaDataPersistService distMetaDataPersistService =
mock(DistMetaDataPersistService.class, RETURNS_DEEP_STUBS);
+
when(distMetaDataPersistService.getSchemaMetaDataService().loadAllNames()).thenReturn(Collections.emptyList());
+ setFieldValue(initializer, "distMetaDataPersistService",
distMetaDataPersistService);
MetaDataContexts metaDataContexts = mock(MetaDataContexts.class);
ConfigurationProperties props = mock(ConfigurationProperties.class);
when(props.getValue(ConfigurationPropertyKey.XA_TRANSACTION_MANAGER_TYPE)).thenReturn("Atomikos");
-
when(props.getValue(ConfigurationPropertyKey.PROXY_OPENTRACING_ENABLED)).thenReturn(Boolean.FALSE);
when(metaDataContexts.getProps()).thenReturn(props);
-
doReturn(metaDataContexts).when(abstractBootstrapInitializer).decorateMetaDataContexts(any());
-
doReturn(mock(TransactionContexts.class)).when(abstractBootstrapInitializer).decorateTransactionContexts(any(),
any());
- YamlProxyConfiguration yamlConfig = mock(YamlProxyConfiguration.class);
+
doReturn(metaDataContexts).when(initializer).decorateMetaDataContexts(any());
+
doReturn(mock(TransactionContexts.class)).when(initializer).decorateTransactionContexts(any(),
any());
+ YamlProxyConfiguration yamlConfig = mock(YamlProxyConfiguration.class,
RETURNS_DEEP_STUBS);
+
when(yamlConfig.getRuleConfigurations()).thenReturn(Collections.emptyMap());
when(yamlConfig.getServerConfiguration()).thenReturn(mock(YamlProxyServerConfiguration.class));
- abstractBootstrapInitializer.init(yamlConfig, eq(anyInt()));
+ when(yamlConfig.getServerConfiguration().getProps()).thenReturn(new
Properties());
+ initializer.init(yamlConfig, eq(anyInt()));
verify(shardingSphereProxy).start(anyInt());
}
- protected final void assertProps(final Properties actual) {
- assertThat(actual.getProperty("alpha-1"), is("alpha-A"));
- assertThat(actual.getProperty("beta-2"), is("beta-B"));
+ @SneakyThrows(ReflectiveOperationException.class)
+ private void setFieldValue(final AbstractBootstrapInitializer initializer,
final String fieldName, final Object fieldValue) {
+ Field field =
AbstractBootstrapInitializer.class.getDeclaredField(fieldName);
+ field.setAccessible(true);
+ Field modifiersField = Field.class.getDeclaredField("modifiers");
+ modifiersField.setAccessible(true);
+ modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL);
+ field.set(initializer, fieldValue);
}
}
diff --git
a/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/test/java/org/apache/shardingsphere/proxy/initializer/impl/GovernanceBootstrapInitializerTest.java
b/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/test/java/org/apache/shardingsphere/proxy/initializer/impl/GovernanceBootstrapInitializerTest.java
index cf41c36..380d263 100644
---
a/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/test/java/org/apache/shardingsphere/proxy/initializer/impl/GovernanceBootstrapInitializerTest.java
+++
b/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/test/java/org/apache/shardingsphere/proxy/initializer/impl/GovernanceBootstrapInitializerTest.java
@@ -21,174 +21,31 @@ import lombok.SneakyThrows;
import
org.apache.shardingsphere.governance.context.metadata.GovernanceMetaDataContexts;
import
org.apache.shardingsphere.governance.context.transaction.GovernanceTransactionContexts;
import org.apache.shardingsphere.governance.core.rule.GovernanceRule;
-import org.apache.shardingsphere.infra.config.RuleConfiguration;
-import
org.apache.shardingsphere.infra.config.algorithm.ShardingSphereAlgorithmConfiguration;
-import org.apache.shardingsphere.infra.config.datasource.DataSourceParameter;
import
org.apache.shardingsphere.infra.config.persist.DistMetaDataPersistService;
-import org.apache.shardingsphere.infra.config.persist.node.GlobalNode;
-import org.apache.shardingsphere.infra.config.persist.node.SchemaMetadataNode;
import
org.apache.shardingsphere.infra.config.properties.ConfigurationProperties;
import org.apache.shardingsphere.infra.context.metadata.MetaDataContexts;
import
org.apache.shardingsphere.infra.context.metadata.impl.StandardMetaDataContexts;
-import org.apache.shardingsphere.proxy.config.ProxyConfiguration;
-import org.apache.shardingsphere.proxy.config.ProxyConfigurationLoader;
-import org.apache.shardingsphere.proxy.config.YamlProxyConfiguration;
import org.apache.shardingsphere.proxy.fixture.FixtureRegistryCenterRepository;
-import org.apache.shardingsphere.sharding.api.config.ShardingRuleConfiguration;
-import
org.apache.shardingsphere.sharding.api.config.rule.ShardingTableRuleConfiguration;
-import
org.apache.shardingsphere.sharding.api.config.strategy.sharding.ShardingStrategyConfiguration;
-import
org.apache.shardingsphere.sharding.api.config.strategy.sharding.StandardShardingStrategyConfiguration;
import org.apache.shardingsphere.transaction.context.TransactionContexts;
import org.apache.shardingsphere.transaction.core.XATransactionManagerType;
import org.junit.Test;
-import java.io.IOException;
import java.lang.reflect.Field;
-import java.net.URISyntaxException;
-import java.nio.file.Files;
-import java.nio.file.Paths;
-import java.util.Collection;
-import java.util.Map;
import java.util.Properties;
-import java.util.stream.Collectors;
import static org.hamcrest.CoreMatchers.instanceOf;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertThat;
-import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
public final class GovernanceBootstrapInitializerTest extends
AbstractBootstrapInitializerTest {
- private static final String DATA_SOURCE_YAML =
"conf/reg_center/data-sources.yaml";
-
- private static final String SHARDING_RULE_YAML =
"conf/reg_center/sharding-rule.yaml";
-
- private static final String PROPS_YAML = "conf/reg_center/props.yaml";
-
private final FixtureRegistryCenterRepository registryCenterRepository =
new FixtureRegistryCenterRepository();
@Test
- public void assertGetProxyConfiguration() throws IOException {
- init();
- YamlProxyConfiguration yamlProxyConfig =
ProxyConfigurationLoader.load("/conf/reg_center/");
-
assertProxyConfiguration(getInitializer().getProxyConfiguration(yamlProxyConfig));
- close();
- }
-
- private void init() {
- registryCenterRepository.persist(GlobalNode.getPropsPath(),
readYAML(PROPS_YAML));
-
registryCenterRepository.persist(SchemaMetadataNode.getMetadataNodePath(),
"db");
-
registryCenterRepository.persist(SchemaMetadataNode.getMetadataDataSourcePath("db"),
readYAML(DATA_SOURCE_YAML));
- registryCenterRepository.persist(SchemaMetadataNode.getRulePath("db"),
readYAML(SHARDING_RULE_YAML));
- }
-
- @SneakyThrows({URISyntaxException.class, IOException.class})
- private String readYAML(final String yamlFile) {
- return
Files.readAllLines(Paths.get(ClassLoader.getSystemResource(yamlFile).toURI())).stream().map(each
-> each + System.lineSeparator()).collect(Collectors.joining());
- }
-
- private void close() {
- registryCenterRepository.close();
- }
-
- @Test
- public void assertGetProxyConfigurationFromLocalConfiguration() throws
IOException {
- YamlProxyConfiguration yamlProxyConfig =
ProxyConfigurationLoader.load("/conf/local");
- ProxyConfiguration actual =
getInitializer().getProxyConfiguration(yamlProxyConfig);
- assertNotNull(actual);
- assertProxyConfiguration(actual);
- close();
- }
-
- private void assertProxyConfiguration(final ProxyConfiguration actual) {
- assertNotNull(actual);
- assertSchemaDataSources(actual.getSchemaDataSources());
- assertSchemaRules(actual.getSchemaRules());
- assertProps(actual.getProps());
- }
-
- private void assertSchemaDataSources(final Map<String, Map<String,
DataSourceParameter>> actual) {
- assertThat(actual.size(), is(1));
- assertTrue(actual.containsKey("db"));
- Map<String, DataSourceParameter> dataSourceParameterMap =
actual.get("db");
- assertThat(dataSourceParameterMap.size(), is(2));
- assertTrue(dataSourceParameterMap.containsKey("ds_0"));
- assertDataSourceParameter(dataSourceParameterMap.get("ds_0"));
- assertTrue(dataSourceParameterMap.containsKey("ds_1"));
- assertDataSourceParameter(dataSourceParameterMap.get("ds_1"));
- }
-
- private void assertDataSourceParameter(final DataSourceParameter actual) {
- assertThat(actual.getUrl(), is("jdbc:fixturedb:xxx"));
- assertThat(actual.getUsername(), is("root"));
- assertThat(actual.getPassword(), is("pwd"));
- assertTrue(actual.isReadOnly());
- assertThat(actual.getConnectionTimeoutMilliseconds(), is(1000L));
- assertThat(actual.getIdleTimeoutMilliseconds(), is(2000L));
- assertThat(actual.getMaxLifetimeMilliseconds(), is(4000L));
- assertThat(actual.getMaxPoolSize(), is(20));
- assertThat(actual.getMinPoolSize(), is(10));
- }
-
- private void assertSchemaRules(final Map<String,
Collection<RuleConfiguration>> actual) {
- assertThat(actual.size(), is(1));
- assertTrue(actual.containsKey("db"));
- Collection<RuleConfiguration> ruleConfigurations = actual.get("db");
- assertThat(ruleConfigurations.size(), is(1));
- assertRuleConfiguration(ruleConfigurations.iterator().next());
- }
-
- private void assertRuleConfiguration(final RuleConfiguration actual) {
- assertNotNull(actual);
- assertThat(actual, instanceOf(ShardingRuleConfiguration.class));
- ShardingRuleConfiguration shardingRule = (ShardingRuleConfiguration)
actual;
- assertShardingTableRules(shardingRule.getTables());
- assertShardingAlgorithms(shardingRule.getShardingAlgorithms());
- }
-
- private void assertShardingTableRules(final
Collection<ShardingTableRuleConfiguration> shardingTableRules) {
- assertNotNull(shardingTableRules);
- assertThat(shardingTableRules.size(), is(1));
- ShardingTableRuleConfiguration shardingTableRule =
shardingTableRules.iterator().next();
- assertNotNull(shardingTableRule);
- assertThat(shardingTableRule.getLogicTable(), is("t_order"));
- assertThat(shardingTableRule.getActualDataNodes(),
is("ds_${0..1}.t_order_${0..1}"));
- assertShardingStrategy(shardingTableRule.getTableShardingStrategy(),
"order_id", "t_order_inline");
-
assertShardingStrategy(shardingTableRule.getDatabaseShardingStrategy(),
"user_id", "database_inline");
- assertNull(shardingTableRule.getKeyGenerateStrategy());
- }
-
- private void assertShardingStrategy(final ShardingStrategyConfiguration
shardingStrategy, final String shardingColumn, final String
shardingAlgorithmName) {
- assertNotNull(shardingStrategy);
- assertThat(shardingStrategy,
instanceOf(StandardShardingStrategyConfiguration.class));
- StandardShardingStrategyConfiguration standardShardingStrategy =
(StandardShardingStrategyConfiguration) shardingStrategy;
- assertThat(standardShardingStrategy.getShardingColumn(),
is(shardingColumn));
- assertThat(standardShardingStrategy.getShardingAlgorithmName(),
is(shardingAlgorithmName));
- }
-
- private void assertShardingAlgorithms(final Map<String,
ShardingSphereAlgorithmConfiguration> shardingAlgorithms) {
- assertNotNull(shardingAlgorithms);
- assertThat(shardingAlgorithms.size(), is(2));
- assertTrue(shardingAlgorithms.containsKey("database_inline"));
- assertShardingAlgorithm(shardingAlgorithms.get("database_inline"),
"ds_${user_id % 2}");
- assertTrue(shardingAlgorithms.containsKey("t_order_inline"));
- assertShardingAlgorithm(shardingAlgorithms.get("t_order_inline"),
"t_order_${order_id % 2}");
- }
-
- private void assertShardingAlgorithm(final
ShardingSphereAlgorithmConfiguration shardingAlgorithm, final String
expectedAlgorithmExpr) {
- assertNotNull(shardingAlgorithm);
- assertThat(shardingAlgorithm.getType(), is("INLINE"));
- Properties props = shardingAlgorithm.getProps();
- assertNotNull(props);
- assertThat(props.getProperty("algorithm-expression"),
is(expectedAlgorithmExpr));
- }
-
- @Test
public void assertDecorateMetaDataContexts() {
StandardMetaDataContexts metaDataContexts =
mock(StandardMetaDataContexts.class);
when(metaDataContexts.getProps()).thenReturn(new
ConfigurationProperties(new Properties()));
diff --git
a/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/test/java/org/apache/shardingsphere/proxy/initializer/impl/StandardBootstrapInitializerTest.java
b/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/test/java/org/apache/shardingsphere/proxy/initializer/impl/StandardBootstrapInitializerTest.java
index 2161af1..cacc241 100644
---
a/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/test/java/org/apache/shardingsphere/proxy/initializer/impl/StandardBootstrapInitializerTest.java
+++
b/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/test/java/org/apache/shardingsphere/proxy/initializer/impl/StandardBootstrapInitializerTest.java
@@ -17,175 +17,22 @@
package org.apache.shardingsphere.proxy.initializer.impl;
-import
org.apache.shardingsphere.authority.api.config.AuthorityRuleConfiguration;
-import
org.apache.shardingsphere.authority.yaml.config.YamlAuthorityRuleConfiguration;
-import org.apache.shardingsphere.infra.config.RuleConfiguration;
-import org.apache.shardingsphere.infra.config.datasource.DataSourceParameter;
import
org.apache.shardingsphere.infra.config.persist.repository.DistMetaDataPersistRepository;
import org.apache.shardingsphere.infra.context.metadata.MetaDataContexts;
-import org.apache.shardingsphere.infra.metadata.user.Grantee;
-import org.apache.shardingsphere.infra.metadata.user.ShardingSphereUser;
-import org.apache.shardingsphere.infra.metadata.user.ShardingSphereUsers;
import org.apache.shardingsphere.infra.spi.ShardingSphereServiceLoader;
-import org.apache.shardingsphere.infra.yaml.config.pojo.YamlRuleConfiguration;
-import
org.apache.shardingsphere.infra.yaml.config.pojo.algorithm.YamlShardingSphereAlgorithmConfiguration;
import
org.apache.shardingsphere.infra.yaml.config.swapper.YamlRuleConfigurationSwapper;
-import org.apache.shardingsphere.proxy.config.ProxyConfiguration;
-import org.apache.shardingsphere.proxy.config.YamlProxyConfiguration;
-import org.apache.shardingsphere.proxy.config.yaml.YamlDataSourceParameter;
-import org.apache.shardingsphere.proxy.config.yaml.YamlProxyRuleConfiguration;
-import
org.apache.shardingsphere.proxy.config.yaml.YamlProxyServerConfiguration;
-import org.apache.shardingsphere.proxy.fixture.RuleConfigurationFixture;
-import org.apache.shardingsphere.proxy.fixture.YamlRuleConfigurationFixture;
import org.apache.shardingsphere.transaction.context.TransactionContexts;
import org.apache.shardingsphere.transaction.core.XATransactionManagerType;
import org.junit.Test;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Optional;
-import java.util.Properties;
-
-import static org.hamcrest.CoreMatchers.instanceOf;
import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertThat;
-import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.mock;
public final class StandardBootstrapInitializerTest extends
AbstractBootstrapInitializerTest {
@Test
- public void assertGetProxyConfiguration() {
- YamlProxyConfiguration yamlConfig = makeProxyConfiguration();
- ProxyConfiguration actual =
getInitializer().getProxyConfiguration(yamlConfig);
- assertNotNull(actual);
- assertProxyConfiguration(actual);
- }
-
- private YamlProxyConfiguration makeProxyConfiguration() {
- return new
YamlProxyConfiguration(createYamlProxyServerConfiguration(),
createYamlProxyRuleConfigurationMap());
- }
-
- private Map<String, YamlProxyRuleConfiguration>
createYamlProxyRuleConfigurationMap() {
- Map<String, YamlProxyRuleConfiguration> result = new HashMap<>(1, 1);
- result.put("logic-db", createYamlProxyRuleConfiguration());
- return result;
- }
-
- private YamlProxyRuleConfiguration createYamlProxyRuleConfiguration() {
- YamlProxyRuleConfiguration result = new YamlProxyRuleConfiguration();
- result.setDataSources(createYamlDataSourceParameterMap());
- result.setRules(createYamlRuleConfigurations());
- return result;
- }
-
- private Collection<YamlRuleConfiguration> createYamlRuleConfigurations() {
- YamlRuleConfigurationFixture result = new
YamlRuleConfigurationFixture();
- result.setName("testRule");
- return Collections.singletonList(result);
- }
-
- private Map<String, YamlDataSourceParameter>
createYamlDataSourceParameterMap() {
- Map<String, YamlDataSourceParameter> result = new HashMap<>(1, 1);
- result.put("ds", createYamlDataSourceParameter());
- return result;
- }
-
- private YamlDataSourceParameter createYamlDataSourceParameter() {
- YamlDataSourceParameter result = new YamlDataSourceParameter();
- result.setUrl("jdbc:mysql://localhost:3306/ds");
- result.setUsername("root");
- result.setPassword("root");
- result.setReadOnly(false);
- result.setConnectionTimeoutMilliseconds(1000L);
- result.setIdleTimeoutMilliseconds(2000L);
- result.setMaxLifetimeMilliseconds(4000L);
- result.setMaxPoolSize(20);
- result.setMinPoolSize(10);
- return result;
- }
-
- private void assertProxyConfiguration(final ProxyConfiguration actual) {
- assertSchemaDataSources(actual.getSchemaDataSources());
- assertSchemaRules(actual.getSchemaRules());
- assertUsers(new
ShardingSphereUsers(getUsersFromAuthorityRule(actual.getGlobalRules())));
- assertProps(actual.getProps());
- }
-
- private Collection<ShardingSphereUser> getUsersFromAuthorityRule(final
Collection<RuleConfiguration> globalRuleConfigs) {
- for (RuleConfiguration ruleConfig : globalRuleConfigs) {
- if (ruleConfig instanceof AuthorityRuleConfiguration) {
- AuthorityRuleConfiguration authorityRuleConfiguration =
(AuthorityRuleConfiguration) ruleConfig;
- return authorityRuleConfiguration.getUsers();
- }
- }
- return Collections.emptyList();
- }
-
- private void assertSchemaDataSources(final Map<String, Map<String,
DataSourceParameter>> actual) {
- assertThat(actual.size(), is(1));
- assertTrue(actual.containsKey("logic-db"));
- Map<String, DataSourceParameter> dataSourceParameterMap =
actual.get("logic-db");
- assertThat(dataSourceParameterMap.size(), is(1));
- assertTrue(dataSourceParameterMap.containsKey("ds"));
- assertDataSourceParameter(dataSourceParameterMap.get("ds"));
- }
-
- private void assertDataSourceParameter(final DataSourceParameter actual) {
- assertThat(actual.getUrl(), is("jdbc:mysql://localhost:3306/ds"));
- assertThat(actual.getUsername(), is("root"));
- assertThat(actual.getPassword(), is("root"));
- assertFalse(actual.isReadOnly());
- assertThat(actual.getConnectionTimeoutMilliseconds(), is(1000L));
- assertThat(actual.getIdleTimeoutMilliseconds(), is(2000L));
- assertThat(actual.getMaxLifetimeMilliseconds(), is(4000L));
- assertThat(actual.getMaxPoolSize(), is(20));
- assertThat(actual.getMinPoolSize(), is(10));
- }
-
- private void assertSchemaRules(final Map<String,
Collection<RuleConfiguration>> actual) {
- assertThat(actual.size(), is(1));
- assertTrue(actual.containsKey("logic-db"));
- Collection<RuleConfiguration> ruleConfigurations =
actual.get("logic-db");
- assertThat(ruleConfigurations.size(), is(1));
- assertRuleConfiguration(ruleConfigurations.iterator().next());
- }
-
- private void assertRuleConfiguration(final RuleConfiguration actual) {
- assertThat(actual, instanceOf(RuleConfigurationFixture.class));
- assertThat(((RuleConfigurationFixture) actual).getName(),
is("testRule"));
- }
-
- private void assertUsers(final ShardingSphereUsers actual) {
- Optional<ShardingSphereUser> rootUser = actual.findUser(new
Grantee("root", ""));
- assertTrue(rootUser.isPresent());
- assertThat(rootUser.get().getPassword(), is("root"));
- }
-
- private YamlProxyServerConfiguration createYamlProxyServerConfiguration() {
- final YamlProxyServerConfiguration result = new
YamlProxyServerConfiguration();
- YamlAuthorityRuleConfiguration yamlRule = new
YamlAuthorityRuleConfiguration();
- yamlRule.setUsers(Collections.singletonList("root@%:root"));
- YamlShardingSphereAlgorithmConfiguration provider = new
YamlShardingSphereAlgorithmConfiguration();
- provider.setType("test");
- yamlRule.setProvider(provider);
- result.getRules().add(yamlRule);
- result.setProps(createProperties());
- return result;
- }
-
- private Properties createProperties() {
- Properties result = new Properties();
- result.setProperty("alpha-1", "alpha-A");
- result.setProperty("beta-2", "beta-B");
- return result;
- }
-
- @Test
public void assertDecorateMetaDataContexts() {
MetaDataContexts metaDataContexts = mock(MetaDataContexts.class);
assertThat(getInitializer().decorateMetaDataContexts(metaDataContexts),
is(metaDataContexts));
diff --git
a/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/test/resources/conf/reg_center/data-sources.yaml
b/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/test/resources/conf/reg_center/data-sources.yaml
deleted file mode 100644
index 3ed7a49..0000000
---
a/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/test/resources/conf/reg_center/data-sources.yaml
+++ /dev/null
@@ -1,39 +0,0 @@
-#
-# 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.
-#
-
-ds_0:
- dataSourceClassName: com.zaxxer.hikari.HikariDataSource
- jdbcUrl: jdbc:fixturedb:xxx
- username: root
- password: pwd
- connectionTimeout: 1000
- idleTimeout: 2000
- maxLifetime: 4000
- maxPoolSize: 20
- minPoolSize: 10
- readOnly: true
-ds_1:
- dataSourceClassName: com.zaxxer.hikari.HikariDataSource
- jdbcUrl: jdbc:fixturedb:xxx
- username: root
- password: pwd
- connectionTimeout: 1000
- idleTimeout: 2000
- maxLifetime: 4000
- maxPoolSize: 20
- minPoolSize: 10
- readOnly: true
diff --git
a/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/test/resources/conf/reg_center/props.yaml
b/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/test/resources/conf/reg_center/props.yaml
deleted file mode 100644
index 84ce968..0000000
---
a/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/test/resources/conf/reg_center/props.yaml
+++ /dev/null
@@ -1,19 +0,0 @@
-#
-# 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.
-#
-
-alpha-1: alpha-A
-beta-2: beta-B
diff --git
a/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/test/resources/conf/reg_center/sharding-rule.yaml
b/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/test/resources/conf/reg_center/sharding-rule.yaml
deleted file mode 100644
index 43e7618..0000000
---
a/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/test/resources/conf/reg_center/sharding-rule.yaml
+++ /dev/null
@@ -1,39 +0,0 @@
-#
-# 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.
-#
-
-- !SHARDING
- tables:
- t_order:
- actualDataNodes: ds_${0..1}.t_order_${0..1}
- tableStrategy:
- standard:
- shardingColumn: order_id
- shardingAlgorithmName: t_order_inline
- databaseStrategy:
- standard:
- shardingColumn: user_id
- shardingAlgorithmName: database_inline
-
- shardingAlgorithms:
- database_inline:
- type: INLINE
- props:
- algorithm-expression: ds_${user_id % 2}
- t_order_inline:
- type: INLINE
- props:
- algorithm-expression: t_order_${order_id % 2}