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 {