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;
}