This is an automated email from the ASF dual-hosted git repository.

duanzhengqiang 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 41b3fe631e3 Add getActualDatabaseName method (#19412)
41b3fe631e3 is described below

commit 41b3fe631e3a037c03eb57d054239342b01d9a93
Author: zhaojinchao <[email protected]>
AuthorDate: Thu Jul 21 17:46:00 2022 +0800

    Add getActualDatabaseName method (#19412)
    
    * Add getActualDatabaseName method
    
    * Fix unit test
    
    * Add put database method
    
    * Adjustment
    
    * Fix unit test
---
 .../infra/metadata/ShardingSphereMetaData.java     | 23 +++++++++++++++++--
 .../jdbc/core/connection/ConnectionManager.java    |  7 +++---
 .../mode/manager/ContextManager.java               | 26 ++++++++++++----------
 .../mode/manager/ContextManagerTest.java           |  4 ++++
 .../cluster/ClusterContextManagerBuilder.java      |  4 ++--
 .../ImportDatabaseConfigurationHandler.java        |  2 +-
 .../rdl/rule/RuleDefinitionBackendHandler.java     |  4 +++-
 7 files changed, 49 insertions(+), 21 deletions(-)

diff --git 
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/ShardingSphereMetaData.java
 
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/ShardingSphereMetaData.java
index b7af6267c3b..ba4fbf27c7d 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/ShardingSphereMetaData.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/ShardingSphereMetaData.java
@@ -63,7 +63,7 @@ public final class ShardingSphereMetaData {
      */
     public void addDatabase(final String databaseName, final DatabaseType 
protocolType) throws SQLException {
         ShardingSphereDatabase database = 
ShardingSphereDatabase.create(databaseName, protocolType);
-        databases.put(databaseName.toLowerCase(), database);
+        putDatabase(database);
         globalRuleMetaData.findRules(ResourceHeldRule.class).forEach(each -> 
each.addResource(database));
     }
     
@@ -87,6 +87,25 @@ public final class ShardingSphereMetaData {
         return databases.get(databaseName.toLowerCase());
     }
     
+    /**
+     * Put database.
+     *
+     * @param database database
+     */
+    public void putDatabase(final ShardingSphereDatabase database) {
+        databases.put(database.getName().toLowerCase(), database);
+    }
+    
+    /**
+     * Get actual database name.
+     *
+     * @param databaseName database name
+     * @return actual database name
+     */
+    public String getActualDatabaseName(final String databaseName) {
+        return getDatabase(databaseName).getName();
+    }
+    
     /**
      * Drop database.
      *
@@ -100,7 +119,7 @@ public final class ShardingSphereMetaData {
         if (null != database.getResource()) {
             database.getResource().getDataSources().values().forEach(each -> 
database.getResource().close(each));
         }
-        String databaseName = database.getName().toLowerCase();
+        String databaseName = database.getName();
         globalRuleMetaData.findRules(ResourceHeldRule.class).forEach(each -> 
each.closeStaleResource(databaseName));
         
database.getRuleMetaData().findRules(ResourceHeldRule.class).forEach(each -> 
each.closeStaleResource(databaseName));
     }
diff --git 
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/connection/ConnectionManager.java
 
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/connection/ConnectionManager.java
index 57edc56814e..71e7cf1a814 100644
--- 
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/connection/ConnectionManager.java
+++ 
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/connection/ConnectionManager.java
@@ -83,18 +83,19 @@ public final class ConnectionManager implements 
ExecutorJDBCConnectionManager, A
         connectionTransaction = createConnectionTransaction(databaseName, 
contextManager);
     }
     
-    private Map<String, DataSource> getTrafficDataSourceMap(final String 
schema, final ContextManager contextManager) {
+    private Map<String, DataSource> getTrafficDataSourceMap(final String 
databaseName, final ContextManager contextManager) {
         TrafficRule trafficRule = 
contextManager.getMetaDataContexts().getMetaData().getGlobalRuleMetaData().getSingleRule(TrafficRule.class);
         MetaDataPersistService persistService = 
contextManager.getMetaDataContexts().getPersistService();
         if (trafficRule.getStrategyRules().isEmpty()) {
             return Collections.emptyMap();
         }
-        Map<String, DataSourceProperties> dataSourcePropsMap = 
persistService.getDataSourceService().load(schema);
+        String actualDatabaseName = 
contextManager.getMetaDataContexts().getMetaData().getActualDatabaseName(databaseName);
+        Map<String, DataSourceProperties> dataSourcePropsMap = 
persistService.getDataSourceService().load(actualDatabaseName);
         Preconditions.checkState(!dataSourcePropsMap.isEmpty(), "Can not get 
data source properties from meta data.");
         DataSourceProperties dataSourcePropsSample = 
dataSourcePropsMap.values().iterator().next();
         Collection<ShardingSphereUser> users = 
persistService.getGlobalRuleService().loadUsers();
         Collection<InstanceMetaData> instances = 
contextManager.getInstanceContext().getAllClusterInstances(InstanceType.PROXY, 
trafficRule.getLabels());
-        return 
DataSourcePoolCreator.create(createDataSourcePropertiesMap(instances, users, 
dataSourcePropsSample, schema));
+        return 
DataSourcePoolCreator.create(createDataSourcePropertiesMap(instances, users, 
dataSourcePropsSample, actualDatabaseName));
     }
     
     private Map<String, DataSourceProperties> 
createDataSourcePropertiesMap(final Collection<InstanceMetaData> instances, 
final Collection<ShardingSphereUser> users,
diff --git 
a/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManager.java
 
b/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManager.java
index bb9007529ef..e486bb9bc70 100644
--- 
a/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManager.java
+++ 
b/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManager.java
@@ -122,9 +122,10 @@ public final class ContextManager implements AutoCloseable 
{
         if (!metaDataContexts.getMetaData().containsDatabase(databaseName)) {
             return;
         }
-        metaDataContexts.getMetaData().dropDatabase(databaseName);
-        metaDataContexts.getOptimizerContext().dropDatabase(databaseName);
-        
metaDataContexts.getPersistService().getDatabaseMetaDataService().deleteDatabase(databaseName);
+        String actualDatabaseName = 
metaDataContexts.getMetaData().getActualDatabaseName(databaseName);
+        metaDataContexts.getMetaData().dropDatabase(actualDatabaseName);
+        
metaDataContexts.getOptimizerContext().dropDatabase(actualDatabaseName);
+        
metaDataContexts.getPersistService().getDatabaseMetaDataService().deleteDatabase(actualDatabaseName);
     }
     
     /**
@@ -219,7 +220,7 @@ public final class ContextManager implements AutoCloseable {
         
metaDataContexts.getMetaData().getGlobalRuleMetaData().findRules(ResourceHeldRule.class).forEach(each
 -> each.addResource(metaDataContexts.getMetaData().getDatabase(databaseName)));
         
metaDataContexts.getOptimizerContext().alterDatabase(metaDataContexts.getMetaData().getDatabase(databaseName),
 metaDataContexts.getMetaData().getGlobalRuleMetaData());
         persistMetaData(metaDataContexts);
-        
metaDataContexts.getPersistService().getDataSourceService().append(databaseName,
 toBeUpdatedDataSourcePropsMap);
+        
metaDataContexts.getPersistService().getDataSourceService().append(metaDataContexts.getMetaData().getActualDatabaseName(databaseName),
 toBeUpdatedDataSourcePropsMap);
         switchingResource.closeStaleDataSources();
     }
     
@@ -235,7 +236,7 @@ public final class ContextManager implements AutoCloseable {
         for (String each : toBeDroppedResourceNames) {
             dataSourceMap.remove(each);
         }
-        
metaDataContexts.getPersistService().getDataSourceService().drop(databaseName, 
toBeDroppedResourceNames);
+        
metaDataContexts.getPersistService().getDataSourceService().drop(metaDataContexts.getMetaData().getActualDatabaseName(databaseName),
 toBeDroppedResourceNames);
     }
     
     /**
@@ -323,9 +324,10 @@ public final class ContextManager implements AutoCloseable 
{
                 ? 
metaDataContexts.getMetaData().getDatabase(databaseName).getRuleMetaData().getConfigurations()
                 : ruleConfigs;
         DatabaseConfiguration toBeCreatedDatabaseConfig = new 
DataSourceProvidedDatabaseConfiguration(toBeCreatedDataSources, 
toBeCreatedRuleConfigs);
-        ShardingSphereDatabase changedDatabase = 
ShardingSphereDatabasesFactory.create(databaseName, toBeCreatedDatabaseConfig, 
metaDataContexts.getMetaData().getProps(), instanceContext);
+        ShardingSphereDatabase changedDatabase = 
ShardingSphereDatabasesFactory.create(metaDataContexts.getMetaData().getActualDatabaseName(databaseName),
+                toBeCreatedDatabaseConfig, 
metaDataContexts.getMetaData().getProps(), instanceContext);
         Map<String, ShardingSphereDatabase> result = new 
LinkedHashMap<>(metaDataContexts.getMetaData().getDatabases());
-        result.put(databaseName, changedDatabase);
+        result.put(databaseName.toLowerCase(), changedDatabase);
         return result;
     }
     
@@ -388,8 +390,8 @@ public final class ContextManager implements AutoCloseable {
     }
     
     private void persistMetaData(final MetaDataContexts metaDataContexts) {
-        metaDataContexts.getMetaData().getDatabases().forEach((databaseName, 
schemas) -> schemas.getSchemas()
-                .forEach((schemaName, tables) -> 
metaDataContexts.getPersistService().getDatabaseMetaDataService().persistMetaData(databaseName,
 schemaName, tables)));
+        metaDataContexts.getMetaData().getDatabases().values().forEach(each -> 
each.getSchemas().forEach((schemaName, tables) ->
+                
metaDataContexts.getPersistService().getDatabaseMetaDataService().persistMetaData(each.getName(),
 schemaName, tables)));
     }
     
     /**
@@ -404,10 +406,10 @@ public final class ContextManager implements 
AutoCloseable {
             ShardingSphereSchema reloadedSchema = loadSchema(databaseName, 
schemaName, dataSourceName);
             if (null == reloadedSchema) {
                 
metaDataContexts.getMetaData().getDatabase(databaseName).getSchemas().remove(schemaName);
-                
metaDataContexts.getPersistService().getDatabaseMetaDataService().deleteSchema(databaseName,
 schemaName);
+                
metaDataContexts.getPersistService().getDatabaseMetaDataService().deleteSchema(metaDataContexts.getMetaData().getActualDatabaseName(databaseName),
 schemaName);
             } else {
                 
metaDataContexts.getMetaData().getDatabase(databaseName).getSchemas().put(schemaName,
 reloadedSchema);
-                
metaDataContexts.getPersistService().getDatabaseMetaDataService().persistMetaData(databaseName,
 schemaName, reloadedSchema);
+                
metaDataContexts.getPersistService().getDatabaseMetaDataService().persistMetaData(metaDataContexts.getMetaData().getActualDatabaseName(databaseName),
 schemaName, reloadedSchema);
             }
         } catch (final SQLException ex) {
             log.error("Reload meta data of database: {} schema: {} with data 
source: {} failed", databaseName, schemaName, dataSourceName, ex);
@@ -464,7 +466,7 @@ public final class ContextManager implements AutoCloseable {
         ShardingSphereSchema schema = 
GenericSchemaBuilder.build(Collections.singletonList(tableName), 
materials).getOrDefault(schemaName, new ShardingSphereSchema());
         if (schema.containsTable(tableName)) {
             database.getSchemas().get(schemaName).put(tableName, 
schema.get(tableName));
-            
metaDataContexts.getPersistService().getDatabaseMetaDataService().persistMetaData(databaseName,
 schemaName, database.getSchemas().get(schemaName));
+            
metaDataContexts.getPersistService().getDatabaseMetaDataService().persistMetaData(database.getName(),
 schemaName, database.getSchemas().get(schemaName));
         }
     }
     
diff --git 
a/shardingsphere-mode/shardingsphere-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/ContextManagerTest.java
 
b/shardingsphere-mode/shardingsphere-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/ContextManagerTest.java
index 7de5b55c53f..37c3cc281f8 100644
--- 
a/shardingsphere-mode/shardingsphere-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/ContextManagerTest.java
+++ 
b/shardingsphere-mode/shardingsphere-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/ContextManagerTest.java
@@ -129,6 +129,7 @@ public final class ContextManagerTest {
     
     @Test
     public void assertDropDatabase() {
+        
when(metaDataContexts.getMetaData().getActualDatabaseName("foo_db")).thenReturn("foo_db");
         
when(metaDataContexts.getMetaData().containsDatabase("foo_db")).thenReturn(true);
         contextManager.dropDatabase("foo_db");
         verify(metaDataContexts.getMetaData()).dropDatabase("foo_db");
@@ -222,6 +223,7 @@ public final class ContextManagerTest {
         
when(metaDataContexts.getMetaData().getDatabases()).thenReturn(databases);
         
when(metaDataContexts.getMetaData().getGlobalRuleMetaData()).thenReturn(new 
ShardingSphereRuleMetaData(Collections.emptyList()));
         
when(metaDataContexts.getPersistService()).thenReturn(mock(MetaDataPersistService.class,
 RETURNS_DEEP_STUBS));
+        
when(metaDataContexts.getMetaData().getActualDatabaseName("foo_db")).thenReturn("foo_db");
         // TODO TransactionRule is global rule, do not use it in database rule 
test
         RuleConfiguration ruleConfig = new 
TransactionRuleConfiguration("LOCAL", null, new Properties());
         contextManager.alterRuleConfiguration("foo_db", 
Collections.singleton(ruleConfig));
@@ -234,6 +236,7 @@ public final class ContextManagerTest {
         ShardingSphereDatabase originalDatabaseMetaData = new 
ShardingSphereDatabase(
                 "foo_db", new MySQLDatabaseType(), createOriginalResource(), 
createOriginalRuleMetaData(), Collections.emptyMap());
         
when(metaDataContexts.getMetaData().getDatabase("foo_db")).thenReturn(originalDatabaseMetaData);
+        
when(metaDataContexts.getMetaData().getActualDatabaseName("foo_db")).thenReturn("foo_db");
         
when(metaDataContexts.getMetaData().getGlobalRuleMetaData()).thenReturn(new 
ShardingSphereRuleMetaData(Collections.emptyList()));
         contextManager.alterDataSourceConfiguration("foo_db", 
Collections.singletonMap("foo_ds", new 
DataSourceProperties(MockedDataSource.class.getName(), createProperties("test", 
"test"))));
         
assertThat(contextManager.getMetaDataContexts().getMetaData().getDatabase("foo_db").getResource().getDataSources().size(),
 is(1));
@@ -273,6 +276,7 @@ public final class ContextManagerTest {
     @Test
     public void assertReloadDatabase() {
         
when(metaDataContexts.getMetaData().getDatabase("foo_db").getResource().getDataSources()).thenReturn(Collections.singletonMap("foo_ds",
 new MockedDataSource()));
+        
when(metaDataContexts.getMetaData().getActualDatabaseName("foo_db")).thenReturn("foo_db");
         DatabaseMetaDataPersistService databaseMetaDataPersistService = 
mock(DatabaseMetaDataPersistService.class, RETURNS_DEEP_STUBS);
         MetaDataPersistService persistService = 
mock(MetaDataPersistService.class);
         
when(persistService.getDatabaseMetaDataService()).thenReturn(databaseMetaDataPersistService);
diff --git 
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/ClusterContextManagerBuilder.java
 
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/ClusterContextManagerBuilder.java
index 9277ee313db..43c102b3d7a 100644
--- 
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/ClusterContextManagerBuilder.java
+++ 
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/ClusterContextManagerBuilder.java
@@ -70,8 +70,8 @@ public final class ClusterContextManagerBuilder implements 
ContextManagerBuilder
     }
     
     private void persistMetaData(final MetaDataContexts metaDataContexts) {
-        metaDataContexts.getMetaData().getDatabases().forEach((databaseName, 
schemas) -> schemas.getSchemas()
-                .forEach((schemaName, tables) -> 
metaDataContexts.getPersistService().getDatabaseMetaDataService().persistMetaData(databaseName,
 schemaName, tables)));
+        metaDataContexts.getMetaData().getDatabases().values().forEach(each -> 
each.getSchemas().forEach((schemaName, tables) ->
+                
metaDataContexts.getPersistService().getDatabaseMetaDataService().persistMetaData(each.getName(),
 schemaName, tables)));
     }
     
     private void registerOnline(final MetaDataPersistService persistService, 
final RegistryCenter registryCenter,
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/updatable/ImportDatabaseConfigurationHandler.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/updatable/ImportDatabaseConfigurationHandler.java
index 12b8512bab4..5c45dc49e03 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/updatable/ImportDatabaseConfigurationHandler.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/updatable/ImportDatabaseConfigurationHandler.java
@@ -171,6 +171,6 @@ public final class ImportDatabaseConfigurationHandler 
extends UpdatableRALBacken
         }
         database.getRuleMetaData().getConfigurations().addAll(ruleConfigs);
         
ProxyContext.getInstance().getContextManager().renewMetaDataContexts(metaDataContexts);
-        
metaDataContexts.getPersistService().getDatabaseRulePersistService().persist(databaseName,
 ruleConfigs);
+        
metaDataContexts.getPersistService().getDatabaseRulePersistService().persist(metaDataContexts.getMetaData().getActualDatabaseName(databaseName),
 ruleConfigs);
     }
 }
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/rule/RuleDefinitionBackendHandler.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/rule/RuleDefinitionBackendHandler.java
index 1933a4a1510..1c136c9c475 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/rule/RuleDefinitionBackendHandler.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/rule/RuleDefinitionBackendHandler.java
@@ -31,6 +31,7 @@ import 
org.apache.shardingsphere.infra.distsql.update.RuleDefinitionUpdater;
 import 
org.apache.shardingsphere.infra.distsql.update.RuleDefinitionUpdaterFactory;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import 
org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.config.event.version.MetadataVersionPreparedEvent;
+import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
 import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
 import org.apache.shardingsphere.proxy.backend.response.header.ResponseHeader;
@@ -168,7 +169,8 @@ public final class RuleDefinitionBackendHandler<T extends 
RuleDefinitionStatemen
     }
     
     private void persistRuleConfigurationChange(final String databaseName, 
final Collection<RuleConfiguration> alteredConfigs) {
-        
ProxyContext.getInstance().getContextManager().getMetaDataContexts().getPersistService().getDatabaseRulePersistService().persist(databaseName,
 alteredConfigs);
+        MetaDataContexts metaDataContexts = 
ProxyContext.getInstance().getContextManager().getMetaDataContexts();
+        
metaDataContexts.getPersistService().getDatabaseRulePersistService().persist(metaDataContexts.getMetaData().getActualDatabaseName(databaseName),
 alteredConfigs);
     }
     
     private RuleConfiguration getAlteredRuleConfig(final T sqlStatement, final 
RuleDefinitionAlterUpdater updater,

Reply via email to