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 <[email protected]>
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;
     }
     

Reply via email to