This is an automated email from the ASF dual-hosted git repository. chengzhang 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 2cdc107f74a Refactor ShardingSphereDatabase.schemas' key as ShardingSphereMetaDataIdentifier (#33862) 2cdc107f74a is described below commit 2cdc107f74a52f0f29dc7730473a3774e15e62d4 Author: Liang Zhang <zhangli...@apache.org> AuthorDate: Sun Dec 1 17:20:25 2024 +0800 Refactor ShardingSphereDatabase.schemas' key as ShardingSphereMetaDataIdentifier (#33862) * Remove useless getter of ShardingSphereDatabase.schemas * Refactor ShardingSphereDatabase.schemas' key as ShardingSphereMetaDataIdentifier * Refactor ShardingSphereDatabase.schemas' key as ShardingSphereMetaDataIdentifier --- .../metadata/database/ShardingSphereDatabase.java | 25 ++++++++++++++++------ .../factory/InternalMetaDataFactoryTest.java | 12 +++++++---- 2 files changed, 26 insertions(+), 11 deletions(-) diff --git a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/ShardingSphereDatabase.java b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/ShardingSphereDatabase.java index d3f962eea88..204042b884d 100644 --- a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/ShardingSphereDatabase.java +++ b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/ShardingSphereDatabase.java @@ -17,7 +17,7 @@ package org.apache.shardingsphere.infra.metadata.database; -import com.cedarsoftware.util.CaseInsensitiveMap; +import lombok.AccessLevel; import lombok.Getter; import org.apache.shardingsphere.infra.config.database.DatabaseConfiguration; import org.apache.shardingsphere.infra.config.database.impl.DataSourceProvidedDatabaseConfiguration; @@ -34,6 +34,7 @@ import org.apache.shardingsphere.infra.metadata.database.schema.builder.GenericS import org.apache.shardingsphere.infra.metadata.database.schema.builder.GenericSchemaBuilderMaterial; import org.apache.shardingsphere.infra.metadata.database.schema.builder.SystemSchemaBuilder; import org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema; +import org.apache.shardingsphere.infra.metadata.identifier.ShardingSphereMetaDataIdentifier; import org.apache.shardingsphere.infra.rule.ShardingSphereRule; import org.apache.shardingsphere.infra.rule.attribute.datanode.MutableDataNodeRuleAttribute; import org.apache.shardingsphere.infra.rule.builder.database.DatabaseRulesBuilder; @@ -62,7 +63,8 @@ public final class ShardingSphereDatabase { private final RuleMetaData ruleMetaData; - private final Map<String, ShardingSphereSchema> schemas; + @Getter(AccessLevel.NONE) + private final Map<ShardingSphereMetaDataIdentifier, ShardingSphereSchema> schemas; public ShardingSphereDatabase(final String name, final DatabaseType protocolType, final ResourceMetaData resourceMetaData, final RuleMetaData ruleMetaData, final Map<String, ShardingSphereSchema> schemas) { @@ -70,7 +72,16 @@ public final class ShardingSphereDatabase { this.protocolType = protocolType; this.resourceMetaData = resourceMetaData; this.ruleMetaData = ruleMetaData; - this.schemas = new CaseInsensitiveMap<>(schemas, new ConcurrentHashMap<>(schemas.size(), 1F)); + this.schemas = new ConcurrentHashMap<>(schemas.entrySet().stream().collect(Collectors.toMap(entry -> new ShardingSphereMetaDataIdentifier(entry.getKey()), Entry::getValue))); + } + + public ShardingSphereDatabase(final String name, final DatabaseType protocolType, final ResourceMetaData resourceMetaData, + final RuleMetaData ruleMetaData, final Collection<ShardingSphereSchema> schemas) { + this.name = name; + this.protocolType = protocolType; + this.resourceMetaData = resourceMetaData; + this.ruleMetaData = ruleMetaData; + this.schemas = new ConcurrentHashMap<>(schemas.stream().collect(Collectors.toMap(each -> new ShardingSphereMetaDataIdentifier(each.getName()), each -> each))); } /** @@ -154,7 +165,7 @@ public final class ShardingSphereDatabase { * @return contains schema from database or not */ public boolean containsSchema(final String schemaName) { - return schemas.containsKey(schemaName); + return schemas.containsKey(new ShardingSphereMetaDataIdentifier(schemaName)); } /** @@ -164,7 +175,7 @@ public final class ShardingSphereDatabase { * @return schema */ public ShardingSphereSchema getSchema(final String schemaName) { - return schemas.get(schemaName); + return schemas.get(new ShardingSphereMetaDataIdentifier(schemaName)); } /** @@ -174,7 +185,7 @@ public final class ShardingSphereDatabase { * @param schema schema */ public void addSchema(final String schemaName, final ShardingSphereSchema schema) { - schemas.put(schemaName, schema); + schemas.put(new ShardingSphereMetaDataIdentifier(schemaName), schema); } /** @@ -183,7 +194,7 @@ public final class ShardingSphereDatabase { * @param schemaName schema name */ public void dropSchema(final String schemaName) { - schemas.remove(schemaName); + schemas.remove(new ShardingSphereMetaDataIdentifier(schemaName)); } /** diff --git a/kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/factory/InternalMetaDataFactoryTest.java b/kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/factory/InternalMetaDataFactoryTest.java index c087bf9d6f3..51a59eb30df 100644 --- a/kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/factory/InternalMetaDataFactoryTest.java +++ b/kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/factory/InternalMetaDataFactoryTest.java @@ -43,8 +43,10 @@ class InternalMetaDataFactoryTest { @Test void assertCreateWithDatabaseName() { - ShardingSphereDatabase database = InternalMetaDataFactory.create("foo_db", - mock(MetaDataPersistService.class, RETURNS_DEEP_STUBS), mock(DatabaseConfiguration.class), new ConfigurationProperties(new Properties()), mock(ComputeNodeInstanceContext.class)); + MetaDataPersistService persistService = mock(MetaDataPersistService.class, RETURNS_DEEP_STUBS); + when(persistService.getDatabaseMetaDataFacade().getSchema().load("foo_db")).thenReturn(Collections.emptyMap()); + ShardingSphereDatabase database = InternalMetaDataFactory.create( + "foo_db", persistService, mock(DatabaseConfiguration.class), new ConfigurationProperties(new Properties()), mock(ComputeNodeInstanceContext.class)); assertThat(database.getName(), is("foo_db")); assertThat(database.getProtocolType(), is(TypedSPILoader.getService(DatabaseType.class, "MySQL"))); assertTrue(database.getRuleMetaData().getRules().isEmpty()); @@ -64,12 +66,14 @@ class InternalMetaDataFactoryTest { @Test void assertCreateWithDatabasesWithStorageUnits() { + MetaDataPersistService persistService = mock(MetaDataPersistService.class, RETURNS_DEEP_STUBS); + when(persistService.getDatabaseMetaDataFacade().getSchema().load("foo_db")).thenReturn(Collections.emptyMap()); DatabaseConfiguration databaseConfig = mock(DatabaseConfiguration.class); StorageUnit storageUnit = mock(StorageUnit.class); when(storageUnit.getDataSource()).thenReturn(new MockedDataSource()); when(databaseConfig.getStorageUnits()).thenReturn(Collections.singletonMap("foo_ds", storageUnit)); - Map<String, ShardingSphereDatabase> databases = InternalMetaDataFactory.create(mock(MetaDataPersistService.class, RETURNS_DEEP_STUBS), - Collections.singletonMap("foo_db", databaseConfig), new ConfigurationProperties(new Properties()), mock(ComputeNodeInstanceContext.class)); + Map<String, ShardingSphereDatabase> databases = InternalMetaDataFactory.create( + persistService, Collections.singletonMap("foo_db", databaseConfig), new ConfigurationProperties(new Properties()), mock(ComputeNodeInstanceContext.class)); assertThat(databases.size(), is(1)); assertThat(databases.get("foo_db").getName(), is("foo_db")); assertThat(databases.get("foo_db").getProtocolType(), is(TypedSPILoader.getService(DatabaseType.class, "FIXTURE")));