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 2022/09/16 02:57:12 UTC

[shardingsphere] branch master updated: Add addDatabaseAndPersist and dropDatabaseAndPersist methods in ContextManager (#21001)

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

zhaojinchao 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 9b4efe9304a Add addDatabaseAndPersist and dropDatabaseAndPersist methods in ContextManager (#21001)
9b4efe9304a is described below

commit 9b4efe9304a7510b1e172398040908470584ccd2
Author: gin <ja...@163.com>
AuthorDate: Fri Sep 16 10:57:04 2022 +0800

    Add addDatabaseAndPersist and dropDatabaseAndPersist methods in ContextManager (#21001)
---
 .../mode/manager/ContextManager.java               | 27 +++++++++++++++++
 .../mode/manager/ContextManagerTest.java           | 35 +++++++++++++++++++---
 .../database/CreateDatabaseBackendHandler.java     |  2 +-
 .../database/DropDatabaseBackendHandler.java       |  2 +-
 .../ImportDatabaseConfigurationHandler.java        |  4 +--
 5 files changed, 62 insertions(+), 8 deletions(-)

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 042372d0728..9421bff5895 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
@@ -110,6 +110,20 @@ public final class ContextManager implements AutoCloseable {
         }
         DatabaseType protocolType = DatabaseTypeEngine.getProtocolType(Collections.emptyMap(), metaDataContexts.getMetaData().getProps());
         metaDataContexts.getMetaData().addDatabase(databaseName, protocolType);
+    }
+    
+    /**
+     * Add database and persist.
+     *
+     * @param databaseName database name
+     * @throws SQLException SQL exception
+     */
+    public synchronized void addDatabaseAndPersist(final String databaseName) throws SQLException {
+        if (metaDataContexts.getMetaData().containsDatabase(databaseName)) {
+            return;
+        }
+        DatabaseType protocolType = DatabaseTypeEngine.getProtocolType(Collections.emptyMap(), metaDataContexts.getMetaData().getProps());
+        metaDataContexts.getMetaData().addDatabase(databaseName, protocolType);
         metaDataContexts.getPersistService().getDatabaseMetaDataService().addDatabase(databaseName);
     }
     
@@ -124,6 +138,19 @@ public final class ContextManager implements AutoCloseable {
         }
         String actualDatabaseName = metaDataContexts.getMetaData().getActualDatabaseName(databaseName);
         metaDataContexts.getMetaData().dropDatabase(actualDatabaseName);
+    }
+    
+    /**
+     * Drop database and persist.
+     *
+     * @param databaseName database name
+     */
+    public synchronized void dropDatabaseAndPersist(final String databaseName) {
+        if (!metaDataContexts.getMetaData().containsDatabase(databaseName)) {
+            return;
+        }
+        String actualDatabaseName = metaDataContexts.getMetaData().getActualDatabaseName(databaseName);
+        metaDataContexts.getMetaData().dropDatabase(actualDatabaseName);
         metaDataContexts.getPersistService().getDatabaseMetaDataService().dropDatabase(actualDatabaseName);
     }
     
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 4fddce70631..cd98cb7d34d 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
@@ -115,14 +115,27 @@ public final class ContextManagerTest {
     
     @Test
     public void assertAddDatabase() throws SQLException {
-        contextManager.addDatabase("new_db");
+        contextManager.addDatabaseAndPersist("new_db");
+        verify(metaDataContexts.getMetaData()).addDatabase(eq("new_db"), any(DatabaseType.class));
+    }
+    
+    @Test
+    public void assertAddDatabaseAndPersist() throws SQLException {
+        contextManager.addDatabaseAndPersist("new_db");
         verify(metaDataContexts.getMetaData()).addDatabase(eq("new_db"), any(DatabaseType.class));
     }
     
     @Test
     public void assertAddExistedDatabase() throws SQLException {
         when(metaDataContexts.getMetaData().containsDatabase("foo_db")).thenReturn(true);
-        contextManager.addDatabase("foo_db");
+        contextManager.addDatabaseAndPersist("foo_db");
+        verify(metaDataContexts.getMetaData(), times(0)).addDatabase(eq("foo_db"), any(DatabaseType.class));
+    }
+    
+    @Test
+    public void assertAddExistedDatabaseAndPersist() throws SQLException {
+        when(metaDataContexts.getMetaData().containsDatabase("foo_db")).thenReturn(true);
+        contextManager.addDatabaseAndPersist("foo_db");
         verify(metaDataContexts.getMetaData(), times(0)).addDatabase(eq("foo_db"), any(DatabaseType.class));
     }
     
@@ -130,13 +143,27 @@ public final class ContextManagerTest {
     public void assertDropDatabase() {
         when(metaDataContexts.getMetaData().getActualDatabaseName("foo_db")).thenReturn("foo_db");
         when(metaDataContexts.getMetaData().containsDatabase("foo_db")).thenReturn(true);
-        contextManager.dropDatabase("foo_db");
+        contextManager.dropDatabaseAndPersist("foo_db");
+        verify(metaDataContexts.getMetaData()).dropDatabase("foo_db");
+    }
+    
+    @Test
+    public void assertDropDatabaseAndPersist() {
+        when(metaDataContexts.getMetaData().getActualDatabaseName("foo_db")).thenReturn("foo_db");
+        when(metaDataContexts.getMetaData().containsDatabase("foo_db")).thenReturn(true);
+        contextManager.dropDatabaseAndPersist("foo_db");
         verify(metaDataContexts.getMetaData()).dropDatabase("foo_db");
     }
     
     @Test
     public void assertDropNotExistedDatabase() {
-        contextManager.dropDatabase("not_existed_db");
+        contextManager.dropDatabaseAndPersist("not_existed_db");
+        verify(metaDataContexts.getMetaData(), times(0)).dropDatabase("not_existed_db");
+    }
+    
+    @Test
+    public void assertDropNotExistedDatabaseAndPersist() {
+        contextManager.dropDatabaseAndPersist("not_existed_db");
         verify(metaDataContexts.getMetaData(), times(0)).dropDatabase("not_existed_db");
     }
     
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/database/CreateDatabaseBackendHandler.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/database/CreateDatabaseBackendHandler.java
index 7b480b4a41c..861d688f9bc 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/database/CreateDatabaseBackendHandler.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/database/CreateDatabaseBackendHandler.java
@@ -38,7 +38,7 @@ public final class CreateDatabaseBackendHandler implements ProxyBackendHandler {
     @Override
     public ResponseHeader execute() throws SQLException {
         check(sqlStatement);
-        ProxyContext.getInstance().getContextManager().addDatabase(sqlStatement.getDatabaseName());
+        ProxyContext.getInstance().getContextManager().addDatabaseAndPersist(sqlStatement.getDatabaseName());
         return new UpdateResponseHeader(sqlStatement);
     }
     
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/database/DropDatabaseBackendHandler.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/database/DropDatabaseBackendHandler.java
index e41b9c1bfc0..1566d13c8d9 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/database/DropDatabaseBackendHandler.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/database/DropDatabaseBackendHandler.java
@@ -51,7 +51,7 @@ public final class DropDatabaseBackendHandler implements ProxyBackendHandler {
         if (isDropCurrentDatabase(sqlStatement.getDatabaseName())) {
             connectionSession.setCurrentDatabase(null);
         }
-        ProxyContext.getInstance().getContextManager().dropDatabase(sqlStatement.getDatabaseName());
+        ProxyContext.getInstance().getContextManager().dropDatabaseAndPersist(sqlStatement.getDatabaseName());
         return new UpdateResponseHeader(sqlStatement);
     }
     
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/ImportDatabaseConfigurationHandler.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/ImportDatabaseConfigurationHandler.java
index d9a46608bca..214513b0b4a 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/ImportDatabaseConfigurationHandler.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/ImportDatabaseConfigurationHandler.java
@@ -115,11 +115,11 @@ public final class ImportDatabaseConfigurationHandler extends UpdatableRALBacken
     }
     
     private void addDatabase(final String databaseName) throws SQLException {
-        ProxyContext.getInstance().getContextManager().addDatabase(databaseName);
+        ProxyContext.getInstance().getContextManager().addDatabaseAndPersist(databaseName);
     }
     
     private void dropDatabase(final String databaseName) {
-        ProxyContext.getInstance().getContextManager().dropDatabase(databaseName);
+        ProxyContext.getInstance().getContextManager().dropDatabaseAndPersist(databaseName);
     }
     
     private void addResources(final String databaseName, final Map<String, YamlProxyDataSourceConfiguration> yamlDataSourceMap) throws DistSQLException {