You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by zh...@apache.org on 2024/12/06 14:43:18 UTC
(shardingsphere) branch master updated: Use ShardingSphereMetaDataIdentifier on ShardingSphereMetaData.databases (#33945)
This is an automated email from the ASF dual-hosted git repository.
zhangliang 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 8b47d305a38 Use ShardingSphereMetaDataIdentifier on ShardingSphereMetaData.databases (#33945)
8b47d305a38 is described below
commit 8b47d305a38f6f9817b51974445b15d32638d1d5
Author: Liang Zhang <zh...@apache.org>
AuthorDate: Fri Dec 6 22:43:09 2024 +0800
Use ShardingSphereMetaDataIdentifier on ShardingSphereMetaData.databases (#33945)
* Use ShardingSphereMetaDataIdentifier on ShardingSphereMetaData.databases
* Refactor BroadcastRule
---
.../shardingsphere/broadcast/rule/BroadcastRule.java | 17 ++++-------------
.../engine/BroadcastRouteEngineFactoryTest.java | 1 -
.../broadcast/rule/BroadcastRuleTest.java | 20 +-------------------
.../infra/metadata/ShardingSphereMetaData.java | 16 ++++++++--------
.../ral/queryable/ExportMetaDataExecutor.java | 6 +++---
5 files changed, 16 insertions(+), 44 deletions(-)
diff --git a/features/broadcast/core/src/main/java/org/apache/shardingsphere/broadcast/rule/BroadcastRule.java b/features/broadcast/core/src/main/java/org/apache/shardingsphere/broadcast/rule/BroadcastRule.java
index 64431426ac0..959640d4b45 100644
--- a/features/broadcast/core/src/main/java/org/apache/shardingsphere/broadcast/rule/BroadcastRule.java
+++ b/features/broadcast/core/src/main/java/org/apache/shardingsphere/broadcast/rule/BroadcastRule.java
@@ -23,6 +23,7 @@ import org.apache.shardingsphere.broadcast.config.BroadcastRuleConfiguration;
import org.apache.shardingsphere.broadcast.constant.BroadcastOrder;
import org.apache.shardingsphere.broadcast.rule.attribute.BroadcastDataNodeRuleAttribute;
import org.apache.shardingsphere.broadcast.rule.attribute.BroadcastTableNamesRuleAttribute;
+import org.apache.shardingsphere.infra.annotation.HighFrequencyInvocation;
import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
import org.apache.shardingsphere.infra.rule.attribute.RuleAttributes;
import org.apache.shardingsphere.infra.rule.attribute.datasource.DataSourceMapperRuleAttribute;
@@ -30,7 +31,6 @@ import org.apache.shardingsphere.infra.rule.scope.DatabaseRule;
import javax.sql.DataSource;
import java.util.Collection;
-import java.util.LinkedList;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Optional;
@@ -57,7 +57,7 @@ public final class BroadcastRule implements DatabaseRule {
}
private Collection<String> getAggregatedDataSourceNames(final Map<String, DataSource> dataSources, final Collection<ShardingSphereRule> builtRules) {
- Collection<String> result = new LinkedList<>(dataSources.keySet());
+ Collection<String> result = new CaseInsensitiveSet<>(dataSources.keySet());
for (ShardingSphereRule each : builtRules) {
Optional<DataSourceMapperRuleAttribute> ruleAttribute = each.getAttributes().findAttribute(DataSourceMapperRuleAttribute.class);
if (ruleAttribute.isPresent()) {
@@ -68,7 +68,7 @@ public final class BroadcastRule implements DatabaseRule {
}
private Collection<String> getAggregatedDataSourceNames(final Collection<String> dataSourceNames, final DataSourceMapperRuleAttribute ruleAttribute) {
- Collection<String> result = new LinkedList<>();
+ Collection<String> result = new CaseInsensitiveSet<>();
for (Entry<String, Collection<String>> entry : ruleAttribute.getDataSourceMapper().entrySet()) {
for (String each : entry.getValue()) {
if (dataSourceNames.contains(each)) {
@@ -89,6 +89,7 @@ public final class BroadcastRule implements DatabaseRule {
* @param logicTableNames all logic table names
* @return broadcast table names
*/
+ @HighFrequencyInvocation
public Collection<String> getBroadcastTableNames(final Collection<String> logicTableNames) {
Collection<String> result = new CaseInsensitiveSet<>();
for (String each : logicTableNames) {
@@ -99,16 +100,6 @@ public final class BroadcastRule implements DatabaseRule {
return result;
}
- /**
- * Judge whether logic tables are all broadcast tables.
- *
- * @param logicTableNames logic table names
- * @return logic tables are all broadcast tables or not
- */
- public boolean isAllBroadcastTables(final Collection<String> logicTableNames) {
- return !logicTableNames.isEmpty() && tables.containsAll(logicTableNames);
- }
-
@Override
public int getOrder() {
return BroadcastOrder.ORDER;
diff --git a/features/broadcast/core/src/test/java/org/apache/shardingsphere/broadcast/route/engine/BroadcastRouteEngineFactoryTest.java b/features/broadcast/core/src/test/java/org/apache/shardingsphere/broadcast/route/engine/BroadcastRouteEngineFactoryTest.java
index ca641d5dc2b..1a82b8480b2 100644
--- a/features/broadcast/core/src/test/java/org/apache/shardingsphere/broadcast/route/engine/BroadcastRouteEngineFactoryTest.java
+++ b/features/broadcast/core/src/test/java/org/apache/shardingsphere/broadcast/route/engine/BroadcastRouteEngineFactoryTest.java
@@ -75,7 +75,6 @@ class BroadcastRouteEngineFactoryTest {
@BeforeEach
void setUp() {
when(rule.getBroadcastTableNames(Collections.singleton("foo_tbl"))).thenReturn(Collections.singleton("foo_tbl"));
- when(rule.isAllBroadcastTables(Collections.singleton("foo_tbl"))).thenReturn(true);
}
@Test
diff --git a/features/broadcast/core/src/test/java/org/apache/shardingsphere/broadcast/rule/BroadcastRuleTest.java b/features/broadcast/core/src/test/java/org/apache/shardingsphere/broadcast/rule/BroadcastRuleTest.java
index 95a1383b95b..e3bebe17afc 100644
--- a/features/broadcast/core/src/test/java/org/apache/shardingsphere/broadcast/rule/BroadcastRuleTest.java
+++ b/features/broadcast/core/src/test/java/org/apache/shardingsphere/broadcast/rule/BroadcastRuleTest.java
@@ -33,8 +33,6 @@ import java.util.Map;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;
-import static org.junit.jupiter.api.Assertions.assertFalse;
-import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
@@ -45,7 +43,7 @@ class BroadcastRuleTest {
void assertGetDataSourceNames() {
BroadcastRule rule = new BroadcastRule(
new BroadcastRuleConfiguration(Collections.emptyList()), mockDataSourceMap(), Arrays.asList(mockBuiltRule(), mock(ShardingSphereRule.class, RETURNS_DEEP_STUBS)));
- assertThat(rule.getDataSourceNames(), is(Collections.singletonList("foo_ds")));
+ assertThat(rule.getDataSourceNames(), is(Collections.singleton("foo_ds")));
}
private static Map<String, DataSource> mockDataSourceMap() {
@@ -71,20 +69,4 @@ class BroadcastRuleTest {
BroadcastRule rule = new BroadcastRule(new BroadcastRuleConfiguration(Collections.singleton("foo_tbl")), Collections.emptyMap(), Collections.emptyList());
assertThat(rule.getBroadcastTableNames(Arrays.asList("foo_tbl", "bar_tbl")), is(Collections.singleton("foo_tbl")));
}
-
- @Test
- void assertIsAllBroadcastTables() {
- BroadcastRule rule = new BroadcastRule(new BroadcastRuleConfiguration(Collections.singleton("foo_tbl")), Collections.emptyMap(), Collections.emptyList());
- assertFalse(rule.isAllBroadcastTables(Collections.emptyList()));
- assertTrue(rule.isAllBroadcastTables(Collections.singleton("foo_tbl")));
- assertFalse(rule.isAllBroadcastTables(Arrays.asList("foo_tbl", "bar_tbl")));
- }
-
- @Test
- void assertIsAllBroadcastTablesWhenEmptyRule() {
- BroadcastRule rule = new BroadcastRule(new BroadcastRuleConfiguration(Collections.emptyList()), Collections.emptyMap(), Collections.emptyList());
- assertFalse(rule.isAllBroadcastTables(Collections.emptyList()));
- assertFalse(rule.isAllBroadcastTables(Collections.singleton("foo_tbl")));
- assertFalse(rule.isAllBroadcastTables(Arrays.asList("foo_tbl", "bar_tbl")));
- }
}
diff --git a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/ShardingSphereMetaData.java b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/ShardingSphereMetaData.java
index 1444ed216d0..89f00cf0dc0 100644
--- a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/ShardingSphereMetaData.java
+++ b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/ShardingSphereMetaData.java
@@ -17,7 +17,6 @@
package org.apache.shardingsphere.infra.metadata;
-import com.cedarsoftware.util.CaseInsensitiveMap;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.SneakyThrows;
@@ -28,6 +27,7 @@ import org.apache.shardingsphere.infra.datasource.pool.destroyer.DataSourcePoolD
import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
import org.apache.shardingsphere.infra.metadata.database.resource.ResourceMetaData;
import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
+import org.apache.shardingsphere.infra.metadata.identifier.ShardingSphereMetaDataIdentifier;
import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
import org.apache.shardingsphere.infra.rule.attribute.datasource.StaticDataSourceRuleAttribute;
import org.apache.shardingsphere.infra.rule.scope.GlobalRule;
@@ -48,7 +48,7 @@ import java.util.stream.Collectors;
public final class ShardingSphereMetaData {
@Getter(AccessLevel.NONE)
- private final Map<String, ShardingSphereDatabase> databases;
+ private final Map<ShardingSphereMetaDataIdentifier, ShardingSphereDatabase> databases;
private final ResourceMetaData globalResourceMetaData;
@@ -64,7 +64,7 @@ public final class ShardingSphereMetaData {
public ShardingSphereMetaData(final Collection<ShardingSphereDatabase> databases, final ResourceMetaData globalResourceMetaData,
final RuleMetaData globalRuleMetaData, final ConfigurationProperties props) {
- this.databases = new CaseInsensitiveMap<>(databases.stream().collect(Collectors.toMap(ShardingSphereDatabase::getName, each -> each)), new ConcurrentHashMap<>());
+ this.databases = new ConcurrentHashMap<>(databases.stream().collect(Collectors.toMap(each -> new ShardingSphereMetaDataIdentifier(each.getName()), each -> each)));
this.globalResourceMetaData = globalResourceMetaData;
this.globalRuleMetaData = globalRuleMetaData;
this.props = props;
@@ -87,7 +87,7 @@ public final class ShardingSphereMetaData {
* @return contains database from meta data or not
*/
public boolean containsDatabase(final String databaseName) {
- return databases.containsKey(databaseName);
+ return databases.containsKey(new ShardingSphereMetaDataIdentifier(databaseName));
}
/**
@@ -97,7 +97,7 @@ public final class ShardingSphereMetaData {
* @return meta data database
*/
public ShardingSphereDatabase getDatabase(final String databaseName) {
- return databases.get(databaseName);
+ return databases.get(new ShardingSphereMetaDataIdentifier(databaseName));
}
/**
@@ -109,7 +109,7 @@ public final class ShardingSphereMetaData {
*/
public void addDatabase(final String databaseName, final DatabaseType protocolType, final ConfigurationProperties props) {
ShardingSphereDatabase database = ShardingSphereDatabase.create(databaseName, protocolType, props);
- databases.put(database.getName(), database);
+ databases.put(new ShardingSphereMetaDataIdentifier(database.getName()), database);
globalRuleMetaData.getRules().forEach(each -> ((GlobalRule) each).refresh(databases.values(), GlobalRuleChangedType.DATABASE_CHANGED));
}
@@ -119,7 +119,7 @@ public final class ShardingSphereMetaData {
* @param database database
*/
public void putDatabase(final ShardingSphereDatabase database) {
- databases.put(database.getName(), database);
+ databases.put(new ShardingSphereMetaDataIdentifier(database.getName()), database);
}
/**
@@ -128,7 +128,7 @@ public final class ShardingSphereMetaData {
* @param databaseName database name
*/
public void dropDatabase(final String databaseName) {
- cleanResources(databases.remove(databaseName));
+ cleanResources(databases.remove(new ShardingSphereMetaDataIdentifier(databaseName)));
}
@SneakyThrows(Exception.class)
diff --git a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ExportMetaDataExecutor.java b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ExportMetaDataExecutor.java
index 669facdf74a..cda276c5496 100644
--- a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ExportMetaDataExecutor.java
+++ b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ExportMetaDataExecutor.java
@@ -88,13 +88,13 @@ public final class ExportMetaDataExecutor implements DistSQLQueryExecutor<Export
private Map<String, String> getDatabases(final ProxyContext proxyContext) {
Collection<String> databaseNames = proxyContext.getAllDatabaseNames();
Map<String, String> result = new LinkedHashMap<>(databaseNames.size(), 1F);
- databaseNames.forEach(each -> {
+ for (String each : databaseNames) {
ShardingSphereDatabase database = proxyContext.getContextManager().getDatabase(each);
if (database.getResourceMetaData().getAllInstanceDataSourceNames().isEmpty()) {
- return;
+ continue;
}
result.put(each, ExportUtils.generateExportDatabaseData(database));
- });
+ }
return result;
}