You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by su...@apache.org on 2022/12/25 06:11:54 UTC
[shardingsphere] branch master updated: Optimize register storage unit handler. (#23089)
This is an automated email from the ASF dual-hosted git repository.
sunnianjun 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 7a269347697 Optimize register storage unit handler. (#23089)
7a269347697 is described below
commit 7a26934769728c4e6e4b467470a8a0fe77920cb6
Author: Raigor <ra...@gmail.com>
AuthorDate: Sun Dec 25 14:11:44 2022 +0800
Optimize register storage unit handler. (#23089)
---
...erter.java => DataSourceSegmentsConverter.java} | 14 +++----
...t.java => DataSourceSegmentsConverterTest.java} | 4 +-
.../RegisterMigrationSourceStorageUnitUpdater.java | 4 +-
.../resource/AlterStorageUnitBackendHandler.java | 4 +-
.../RegisterStorageUnitBackendHandler.java | 48 +++++++++++-----------
.../RegisterStorageUnitBackendHandlerTest.java | 38 +++--------------
6 files changed, 42 insertions(+), 70 deletions(-)
diff --git a/distsql/statement/src/main/java/org/apache/shardingsphere/distsql/parser/segment/converter/ResourceSegmentsConverter.java b/distsql/statement/src/main/java/org/apache/shardingsphere/distsql/parser/segment/converter/DataSourceSegmentsConverter.java
similarity index 90%
rename from distsql/statement/src/main/java/org/apache/shardingsphere/distsql/parser/segment/converter/ResourceSegmentsConverter.java
rename to distsql/statement/src/main/java/org/apache/shardingsphere/distsql/parser/segment/converter/DataSourceSegmentsConverter.java
index 827b9df4e9b..cd890066349 100644
--- a/distsql/statement/src/main/java/org/apache/shardingsphere/distsql/parser/segment/converter/ResourceSegmentsConverter.java
+++ b/distsql/statement/src/main/java/org/apache/shardingsphere/distsql/parser/segment/converter/DataSourceSegmentsConverter.java
@@ -30,21 +30,21 @@ import java.util.LinkedHashMap;
import java.util.Map;
/**
- * Resource segments converter.
+ * Data source segments converter.
*/
@NoArgsConstructor(access = AccessLevel.PRIVATE)
-public final class ResourceSegmentsConverter {
+public final class DataSourceSegmentsConverter {
/**
- * Convert resource segments to data source properties map.
+ * Convert data source segments to data source properties map.
*
* @param databaseType database type
- * @param resources data source segments
+ * @param dataSourceSegments data source segments
* @return data source properties map
*/
- public static Map<String, DataSourceProperties> convert(final DatabaseType databaseType, final Collection<DataSourceSegment> resources) {
- Map<String, DataSourceProperties> result = new LinkedHashMap<>(resources.size(), 1);
- for (DataSourceSegment each : resources) {
+ public static Map<String, DataSourceProperties> convert(final DatabaseType databaseType, final Collection<DataSourceSegment> dataSourceSegments) {
+ Map<String, DataSourceProperties> result = new LinkedHashMap<>(dataSourceSegments.size(), 1);
+ for (DataSourceSegment each : dataSourceSegments) {
result.put(each.getName(), new DataSourceProperties("com.zaxxer.hikari.HikariDataSource", createProperties(databaseType, each)));
}
return result;
diff --git a/distsql/statement/src/test/java/org/apache/shardingsphere/distsql/parser/segment/converter/ResourceSegmentsConverterTest.java b/distsql/statement/src/test/java/org/apache/shardingsphere/distsql/parser/segment/converter/DataSourceSegmentsConverterTest.java
similarity index 92%
rename from distsql/statement/src/test/java/org/apache/shardingsphere/distsql/parser/segment/converter/ResourceSegmentsConverterTest.java
rename to distsql/statement/src/test/java/org/apache/shardingsphere/distsql/parser/segment/converter/DataSourceSegmentsConverterTest.java
index b56d91e60dc..b8947894a4e 100644
--- a/distsql/statement/src/test/java/org/apache/shardingsphere/distsql/parser/segment/converter/ResourceSegmentsConverterTest.java
+++ b/distsql/statement/src/test/java/org/apache/shardingsphere/distsql/parser/segment/converter/DataSourceSegmentsConverterTest.java
@@ -34,11 +34,11 @@ import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.Assert.assertTrue;
-public final class ResourceSegmentsConverterTest {
+public final class DataSourceSegmentsConverterTest {
@Test
public void assertConvert() {
- Map<String, DataSourceProperties> actual = ResourceSegmentsConverter.convert(new MySQLDatabaseType(), createDataSourceSegments());
+ Map<String, DataSourceProperties> actual = DataSourceSegmentsConverter.convert(new MySQLDatabaseType(), createDataSourceSegments());
assertThat(actual.size(), is(2));
assertTrue(actual.keySet().containsAll(Arrays.asList("ds0", "ds1")));
assertThat(actual.values().iterator().next().getAllLocalProperties().get("username"), is("root0"));
diff --git a/kernel/data-pipeline/distsql/handler/src/main/java/org/apache/shardingsphere/migration/distsql/handler/update/RegisterMigrationSourceStorageUnitUpdater.java b/kernel/data-pipeline/distsql/handler/src/main/java/org/apache/shardingsphere/migration/distsql/handler/update/RegisterMigrationSourceStorageUnitUpdater.java
index fe7c5ed2d61..c526cf5e329 100644
--- a/kernel/data-pipeline/distsql/handler/src/main/java/org/apache/shardingsphere/migration/distsql/handler/update/RegisterMigrationSourceStorageUnitUpdater.java
+++ b/kernel/data-pipeline/distsql/handler/src/main/java/org/apache/shardingsphere/migration/distsql/handler/update/RegisterMigrationSourceStorageUnitUpdater.java
@@ -23,7 +23,7 @@ import org.apache.shardingsphere.distsql.handler.validate.DataSourcePropertiesVa
import org.apache.shardingsphere.distsql.parser.segment.DataSourceSegment;
import org.apache.shardingsphere.distsql.parser.segment.HostnameAndPortBasedDataSourceSegment;
import org.apache.shardingsphere.distsql.parser.segment.URLBasedDataSourceSegment;
-import org.apache.shardingsphere.distsql.parser.segment.converter.ResourceSegmentsConverter;
+import org.apache.shardingsphere.distsql.parser.segment.converter.DataSourceSegmentsConverter;
import org.apache.shardingsphere.infra.database.type.DatabaseType;
import org.apache.shardingsphere.infra.database.type.DatabaseTypeEngine;
import org.apache.shardingsphere.infra.datasource.props.DataSourceProperties;
@@ -51,7 +51,7 @@ public final class RegisterMigrationSourceStorageUnitUpdater implements RALUpdat
() -> new UnsupportedSQLOperationException("Not currently support add hostname and port, please use url"));
URLBasedDataSourceSegment urlBasedDataSourceSegment = (URLBasedDataSourceSegment) dataSources.get(0);
DatabaseType databaseType = DatabaseTypeEngine.getDatabaseType(urlBasedDataSourceSegment.getUrl());
- Map<String, DataSourceProperties> sourcePropertiesMap = ResourceSegmentsConverter.convert(databaseType, dataSources);
+ Map<String, DataSourceProperties> sourcePropertiesMap = DataSourceSegmentsConverter.convert(databaseType, dataSources);
validateHandler.validate(sourcePropertiesMap);
jobAPI.addMigrationSourceResources(sourcePropertiesMap);
}
diff --git a/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rdl/resource/AlterStorageUnitBackendHandler.java b/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rdl/resource/AlterStorageUnitBackendHandler.java
index fbab6054c71..f3853601b7d 100644
--- a/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rdl/resource/AlterStorageUnitBackendHandler.java
+++ b/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rdl/resource/AlterStorageUnitBackendHandler.java
@@ -22,7 +22,7 @@ import org.apache.shardingsphere.distsql.handler.validate.DataSourcePropertiesVa
import org.apache.shardingsphere.distsql.parser.segment.DataSourceSegment;
import org.apache.shardingsphere.distsql.parser.segment.HostnameAndPortBasedDataSourceSegment;
import org.apache.shardingsphere.distsql.parser.segment.URLBasedDataSourceSegment;
-import org.apache.shardingsphere.distsql.parser.segment.converter.ResourceSegmentsConverter;
+import org.apache.shardingsphere.distsql.parser.segment.converter.DataSourceSegmentsConverter;
import org.apache.shardingsphere.distsql.parser.statement.rdl.alter.AlterStorageUnitStatement;
import org.apache.shardingsphere.infra.database.metadata.url.JdbcUrl;
import org.apache.shardingsphere.infra.database.metadata.url.StandardJdbcUrlParser;
@@ -68,7 +68,7 @@ public final class AlterStorageUnitBackendHandler extends DatabaseRequiredBacken
@Override
public ResponseHeader execute(final String databaseName, final AlterStorageUnitStatement sqlStatement) {
checkSQLStatement(databaseName, sqlStatement);
- Map<String, DataSourceProperties> dataSourcePropsMap = ResourceSegmentsConverter.convert(databaseType, sqlStatement.getStorageUnits());
+ Map<String, DataSourceProperties> dataSourcePropsMap = DataSourceSegmentsConverter.convert(databaseType, sqlStatement.getStorageUnits());
validateHandler.validate(dataSourcePropsMap);
try {
ProxyContext.getInstance().getContextManager().getInstanceContext().getModeContextManager().alterStorageUnits(databaseName, dataSourcePropsMap);
diff --git a/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rdl/resource/RegisterStorageUnitBackendHandler.java b/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rdl/resource/RegisterStorageUnitBackendHandler.java
index dcb1c4b3516..332f41f2b13 100644
--- a/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rdl/resource/RegisterStorageUnitBackendHandler.java
+++ b/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rdl/resource/RegisterStorageUnitBackendHandler.java
@@ -22,10 +22,11 @@ import org.apache.shardingsphere.distsql.handler.exception.resource.DuplicateRes
import org.apache.shardingsphere.distsql.handler.exception.resource.InvalidResourcesException;
import org.apache.shardingsphere.distsql.handler.validate.DataSourcePropertiesValidateHandler;
import org.apache.shardingsphere.distsql.parser.segment.DataSourceSegment;
-import org.apache.shardingsphere.distsql.parser.segment.converter.ResourceSegmentsConverter;
+import org.apache.shardingsphere.distsql.parser.segment.converter.DataSourceSegmentsConverter;
import org.apache.shardingsphere.distsql.parser.statement.rdl.create.RegisterStorageUnitStatement;
import org.apache.shardingsphere.infra.database.type.DatabaseType;
import org.apache.shardingsphere.infra.datasource.props.DataSourceProperties;
+import org.apache.shardingsphere.infra.rule.identifier.type.DataSourceContainedRule;
import org.apache.shardingsphere.infra.util.exception.ShardingSpherePreconditions;
import org.apache.shardingsphere.infra.util.exception.external.server.ShardingSphereServerException;
import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
@@ -33,19 +34,13 @@ import org.apache.shardingsphere.proxy.backend.handler.DatabaseRequiredBackendHa
import org.apache.shardingsphere.proxy.backend.response.header.ResponseHeader;
import org.apache.shardingsphere.proxy.backend.response.header.update.UpdateResponseHeader;
import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
-import org.apache.shardingsphere.readwritesplitting.api.ReadwriteSplittingRuleConfiguration;
-import org.apache.shardingsphere.readwritesplitting.api.rule.ReadwriteSplittingDataSourceRuleConfiguration;
-import org.apache.shardingsphere.readwritesplitting.rule.ReadwriteSplittingRule;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
-import java.util.Iterator;
import java.util.Map;
-import java.util.Optional;
-import java.util.Set;
import java.util.stream.Collectors;
/**
@@ -67,15 +62,12 @@ public final class RegisterStorageUnitBackendHandler extends DatabaseRequiredBac
@Override
public ResponseHeader execute(final String databaseName, final RegisterStorageUnitStatement sqlStatement) {
checkSQLStatement(databaseName, sqlStatement);
- Map<String, DataSourceProperties> dataSourcePropsMap = ResourceSegmentsConverter.convert(databaseType, sqlStatement.getStorageUnits());
+ Map<String, DataSourceProperties> dataSourcePropsMap = DataSourceSegmentsConverter.convert(databaseType, sqlStatement.getStorageUnits());
if (sqlStatement.isIfNotExists()) {
- Set<String> currentStorageUnits = ProxyContext.getInstance().getContextManager().getDataSourceMap(databaseName).keySet();
- Iterator<String> iterator = dataSourcePropsMap.keySet().iterator();
- while (iterator.hasNext()) {
- if (currentStorageUnits.contains(iterator.next())) {
- iterator.remove();
- }
- }
+ Collection<String> currentStorageUnits = getCurrentStorageUnitNames(databaseName);
+ Collection<String> logicalDataSourceNames = getLogicalDataSourceNames(databaseName);
+ dataSourcePropsMap.keySet().removeIf(currentStorageUnits::contains);
+ dataSourcePropsMap.keySet().removeIf(logicalDataSourceNames::contains);
}
if (dataSourcePropsMap.isEmpty()) {
return new UpdateResponseHeader(sqlStatement);
@@ -95,14 +87,14 @@ public final class RegisterStorageUnitBackendHandler extends DatabaseRequiredBac
Collection<String> dataSourceNames = new ArrayList<>(sqlStatement.getStorageUnits().size());
if (!sqlStatement.isIfNotExists()) {
checkDuplicatedDataSourceNames(databaseName, dataSourceNames, sqlStatement);
- checkDuplicatedDataSourceNameWithReadwriteSplittingRule(databaseName, dataSourceNames);
+ checkDuplicatedLogicalDataSourceNames(databaseName, dataSourceNames);
}
}
private void checkDuplicatedDataSourceNames(final String databaseName, final Collection<String> dataSourceNames, final RegisterStorageUnitStatement sqlStatement) {
Collection<String> duplicatedDataSourceNames = new HashSet<>(sqlStatement.getStorageUnits().size(), 1);
for (DataSourceSegment each : sqlStatement.getStorageUnits()) {
- if (dataSourceNames.contains(each.getName()) || ProxyContext.getInstance().getDatabase(databaseName).getResourceMetaData().getDataSources().containsKey(each.getName())) {
+ if (dataSourceNames.contains(each.getName()) || getCurrentStorageUnitNames(databaseName).contains(each.getName())) {
duplicatedDataSourceNames.add(each.getName());
}
dataSourceNames.add(each.getName());
@@ -110,16 +102,22 @@ public final class RegisterStorageUnitBackendHandler extends DatabaseRequiredBac
ShardingSpherePreconditions.checkState(duplicatedDataSourceNames.isEmpty(), () -> new DuplicateResourceException(duplicatedDataSourceNames));
}
- private void checkDuplicatedDataSourceNameWithReadwriteSplittingRule(final String databaseName, final Collection<String> requiredDataSourceNames) {
- // TODO use SPI to decouple features
- Optional<ReadwriteSplittingRule> rule = ProxyContext.getInstance().getDatabase(databaseName).getRuleMetaData().findSingleRule(ReadwriteSplittingRule.class);
- if (!rule.isPresent()) {
+ private void checkDuplicatedLogicalDataSourceNames(final String databaseName, final Collection<String> requiredDataSourceNames) {
+ Collection<String> logicalDataSourceNames = getLogicalDataSourceNames(databaseName);
+ if (logicalDataSourceNames.isEmpty()) {
return;
}
- ReadwriteSplittingRuleConfiguration ruleConfig = (ReadwriteSplittingRuleConfiguration) rule.get().getConfiguration();
- Collection<String> existedRuleNames = ruleConfig.getDataSources().stream().map(ReadwriteSplittingDataSourceRuleConfiguration::getName).collect(Collectors.toSet());
- Collection<String> duplicatedDataSourceNames = requiredDataSourceNames.stream().filter(existedRuleNames::contains).collect(Collectors.toSet());
+ Collection<String> duplicatedDataSourceNames = requiredDataSourceNames.stream().filter(logicalDataSourceNames::contains).collect(Collectors.toSet());
ShardingSpherePreconditions.checkState(duplicatedDataSourceNames.isEmpty(),
- () -> new InvalidResourcesException(Collections.singleton(String.format("%s already exists in readwrite splitting", duplicatedDataSourceNames))));
+ () -> new InvalidResourcesException(Collections.singleton(String.format("%s already existed in rule", duplicatedDataSourceNames))));
+ }
+
+ private Collection<String> getCurrentStorageUnitNames(final String databaseName) {
+ return ProxyContext.getInstance().getContextManager().getDataSourceMap(databaseName).keySet();
+ }
+
+ private Collection<String> getLogicalDataSourceNames(final String databaseName) {
+ return ProxyContext.getInstance().getDatabase(databaseName).getRuleMetaData().getRules().stream().filter(each -> each instanceof DataSourceContainedRule)
+ .map(each -> ((DataSourceContainedRule) each).getDataSourceMapper().keySet()).flatMap(Collection::stream).collect(Collectors.toList());
}
}
diff --git a/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rdl/resource/RegisterStorageUnitBackendHandlerTest.java b/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rdl/resource/RegisterStorageUnitBackendHandlerTest.java
index 588cf2e0abe..b098d92f9bd 100644
--- a/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rdl/resource/RegisterStorageUnitBackendHandlerTest.java
+++ b/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rdl/resource/RegisterStorageUnitBackendHandlerTest.java
@@ -26,8 +26,8 @@ import org.apache.shardingsphere.distsql.parser.segment.URLBasedDataSourceSegmen
import org.apache.shardingsphere.distsql.parser.statement.rdl.create.RegisterStorageUnitStatement;
import org.apache.shardingsphere.infra.database.type.dialect.MySQLDatabaseType;
import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
-import org.apache.shardingsphere.infra.metadata.database.resource.ShardingSphereResourceMetaData;
import org.apache.shardingsphere.infra.metadata.database.rule.ShardingSphereRuleMetaData;
+import org.apache.shardingsphere.infra.rule.identifier.type.DataSourceContainedRule;
import org.apache.shardingsphere.mode.manager.ContextManager;
import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
@@ -35,9 +35,6 @@ import org.apache.shardingsphere.proxy.backend.response.header.ResponseHeader;
import org.apache.shardingsphere.proxy.backend.response.header.update.UpdateResponseHeader;
import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
import org.apache.shardingsphere.proxy.backend.util.ProxyContextRestorer;
-import org.apache.shardingsphere.readwritesplitting.api.ReadwriteSplittingRuleConfiguration;
-import org.apache.shardingsphere.readwritesplitting.api.rule.ReadwriteSplittingDataSourceRuleConfiguration;
-import org.apache.shardingsphere.readwritesplitting.rule.ReadwriteSplittingRule;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -49,7 +46,6 @@ import org.mockito.junit.MockitoJUnitRunner;
import java.util.Collection;
import java.util.Collections;
import java.util.LinkedList;
-import java.util.Optional;
import java.util.Properties;
import static org.hamcrest.CoreMatchers.instanceOf;
@@ -76,15 +72,9 @@ public final class RegisterStorageUnitBackendHandlerTest extends ProxyContextRes
@Mock
private ShardingSphereDatabase database;
- @Mock
- private ShardingSphereResourceMetaData resourceMetaData;
-
@Mock
private ShardingSphereRuleMetaData ruleMetaData;
- @Mock
- private ReadwriteSplittingRule readwriteSplittingRule;
-
private RegisterStorageUnitBackendHandler registerStorageUnitBackendHandler;
@Before
@@ -93,7 +83,6 @@ public final class RegisterStorageUnitBackendHandlerTest extends ProxyContextRes
when(metaDataContexts.getMetaData().containsDatabase("test_db")).thenReturn(true);
when(connectionSession.getProtocolType()).thenReturn(new MySQLDatabaseType());
when(database.getRuleMetaData()).thenReturn(ruleMetaData);
- when(ruleMetaData.findSingleRule(ReadwriteSplittingRule.class)).thenReturn(Optional.of(readwriteSplittingRule));
registerStorageUnitBackendHandler = new RegisterStorageUnitBackendHandler(registerStorageUnitStatement, connectionSession);
Plugins.getMemberAccessor().set(registerStorageUnitBackendHandler.getClass().getDeclaredField("validateHandler"), registerStorageUnitBackendHandler, validateHandler);
}
@@ -103,10 +92,6 @@ public final class RegisterStorageUnitBackendHandlerTest extends ProxyContextRes
ContextManager contextManager = mock(ContextManager.class, RETURNS_DEEP_STUBS);
when(contextManager.getMetaDataContexts()).thenReturn(metaDataContexts);
ProxyContext.init(contextManager);
- when(metaDataContexts.getMetaData().getDatabases()).thenReturn(Collections.singletonMap("test_db", database));
- when(database.getResourceMetaData()).thenReturn(resourceMetaData);
- when(resourceMetaData.getDataSources()).thenReturn(Collections.emptyMap());
- when(readwriteSplittingRule.getConfiguration()).thenReturn(createReadwriteSplittingRuleConfiguration("read_write"));
ResponseHeader responseHeader = registerStorageUnitBackendHandler.execute("test_db", createRegisterStorageUnitStatement());
assertThat(responseHeader, instanceOf(UpdateResponseHeader.class));
}
@@ -116,32 +101,25 @@ public final class RegisterStorageUnitBackendHandlerTest extends ProxyContextRes
ContextManager contextManager = mock(ContextManager.class, RETURNS_DEEP_STUBS);
when(contextManager.getMetaDataContexts()).thenReturn(metaDataContexts);
ProxyContext.init(contextManager);
- when(metaDataContexts.getMetaData().getDatabases()).thenReturn(Collections.singletonMap("test_db", database));
- when(database.getResourceMetaData()).thenReturn(resourceMetaData);
- when(resourceMetaData.getDataSources()).thenReturn(Collections.emptyMap());
registerStorageUnitBackendHandler.execute("test_db", createRegisterStorageUnitStatementWithDuplicateStorageUnitNames());
}
@Test(expected = DuplicateResourceException.class)
public void assertExecuteWithDuplicateStorageUnitNamesWithResourceMetaData() {
ContextManager contextManager = mock(ContextManager.class, RETURNS_DEEP_STUBS);
- when(contextManager.getMetaDataContexts()).thenReturn(metaDataContexts);
ProxyContext.init(contextManager);
- when(metaDataContexts.getMetaData().getDatabases()).thenReturn(Collections.singletonMap("test_db", database));
- when(database.getResourceMetaData()).thenReturn(resourceMetaData);
- when(resourceMetaData.getDataSources()).thenReturn(Collections.singletonMap("ds_0", null));
+ when(contextManager.getDataSourceMap("test_db").keySet()).thenReturn(Collections.singleton("ds_0"));
registerStorageUnitBackendHandler.execute("test_db", createRegisterStorageUnitStatement());
}
@Test(expected = InvalidResourcesException.class)
- public void assertExecuteWithDuplicateStorageUnitNamesWithReadwriteSplittingRule() {
+ public void assertExecuteWithDuplicateStorageUnitNamesWithDataSourceContainedRule() {
ContextManager contextManager = mock(ContextManager.class, RETURNS_DEEP_STUBS);
when(contextManager.getMetaDataContexts()).thenReturn(metaDataContexts);
ProxyContext.init(contextManager);
- when(metaDataContexts.getMetaData().getDatabases()).thenReturn(Collections.singletonMap("test_db", database));
- when(database.getResourceMetaData()).thenReturn(resourceMetaData);
- when(resourceMetaData.getDataSources()).thenReturn(Collections.emptyMap());
- when(readwriteSplittingRule.getConfiguration()).thenReturn(createReadwriteSplittingRuleConfiguration("ds_0"));
+ DataSourceContainedRule rule = mock(DataSourceContainedRule.class);
+ when(rule.getDataSourceMapper()).thenReturn(Collections.singletonMap("ds_0", Collections.emptyList()));
+ when(database.getRuleMetaData().getRules()).thenReturn(Collections.singletonList(rule));
registerStorageUnitBackendHandler.execute("test_db", createRegisterStorageUnitStatement());
}
@@ -152,10 +130,6 @@ public final class RegisterStorageUnitBackendHandlerTest extends ProxyContextRes
registerStorageUnitBackendHandler.checkSQLStatement("test_db", registerStorageUnitStatementWithIfNotExists);
}
- private ReadwriteSplittingRuleConfiguration createReadwriteSplittingRuleConfiguration(final String ruleName) {
- return new ReadwriteSplittingRuleConfiguration(Collections.singleton(new ReadwriteSplittingDataSourceRuleConfiguration(ruleName, null, null, null)), Collections.emptyMap());
- }
-
private RegisterStorageUnitStatement createRegisterStorageUnitStatement() {
return new RegisterStorageUnitStatement(false, Collections.singleton(new URLBasedDataSourceSegment("ds_0", "jdbc:mysql://127.0.0.1:3306/test0", "root", "", new Properties())));
}