You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by du...@apache.org on 2021/11/04 04:58:03 UTC

[shardingsphere] branch master updated: Move drop resource to ContextManager (#13451)

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 327b7b0  Move drop resource to ContextManager (#13451)
327b7b0 is described below

commit 327b7b02acb9894b677739baa54da94bd1a65fb9
Author: Haoran Meng <me...@gmail.com>
AuthorDate: Thu Nov 4 12:57:22 2021 +0800

    Move drop resource to ContextManager (#13451)
---
 .../mode/manager/ContextManager.java               | 10 +++++++++
 .../rdl/resource/DropResourceBackendHandler.java   |  8 +-------
 .../resource/DropResourceBackendHandlerTest.java   | 24 +++++++++++++---------
 3 files changed, 25 insertions(+), 17 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 0e6c7e9..74cc251 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
@@ -153,6 +153,16 @@ public final class ContextManager implements AutoCloseable {
         refreshMetaDataContext(schemaName, dataSourceConfigs);
     }
     
+    /**
+     * Drop resource.
+     *
+     * @param schemaName schema name
+     * @param toBeDroppedResourceNames to be dropped resource names
+     */
+    public void dropResource(final String schemaName, final Collection<String> toBeDroppedResourceNames) {
+        toBeDroppedResourceNames.forEach(metaDataContexts.getMetaData(schemaName).getResource().getDataSources()::remove);
+    }
+    
     private void refreshMetaDataContext(final String schemaName, final Map<String, DataSourceConfiguration> dataSourceConfigs) throws SQLException {
         MetaDataContexts changedMetaDataContext = buildChangedMetaDataContext(metaDataContexts.getMetaDataMap().get(schemaName), dataSourceConfigs);
         metaDataContexts.getMetaDataMap().putAll(changedMetaDataContext.getMetaDataMap());
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/resource/DropResourceBackendHandler.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/resource/DropResourceBackendHandler.java
index 4efbda5..7cb1450 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/resource/DropResourceBackendHandler.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/resource/DropResourceBackendHandler.java
@@ -54,7 +54,7 @@ public final class DropResourceBackendHandler extends SchemaRequiredBackendHandl
     public ResponseHeader execute(final String schemaName, final DropResourceStatement sqlStatement) throws ResourceDefinitionViolationException {
         Collection<String> toBeDroppedResourceNames = sqlStatement.getNames();
         check(schemaName, toBeDroppedResourceNames, sqlStatement.isIgnoreSingleTables());
-        drop(schemaName, toBeDroppedResourceNames);
+        ProxyContext.getInstance().getContextManager().dropResource(schemaName, toBeDroppedResourceNames);
         ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaDataPersistService().ifPresent(
             optional -> optional.getDataSourceService().drop(schemaName, toBeDroppedResourceNames));
         return new UpdateResponseHeader(sqlStatement);
@@ -127,10 +127,4 @@ public final class DropResourceBackendHandler extends SchemaRequiredBackendHandl
         }
         return result;
     }
-    
-    private void drop(final String schemaName, final Collection<String> toBeDroppedResourceNames) {
-        for (String each : toBeDroppedResourceNames) {
-            ProxyContext.getInstance().getMetaData(schemaName).getResource().getDataSources().remove(each);
-        }
-    }
 }
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/resource/DropResourceBackendHandlerTest.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/resource/DropResourceBackendHandlerTest.java
index bb986cb..76323d1 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/resource/DropResourceBackendHandlerTest.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/resource/DropResourceBackendHandlerTest.java
@@ -19,13 +19,13 @@ package org.apache.shardingsphere.proxy.backend.text.distsql.rdl.resource;
 
 import org.apache.shardingsphere.distsql.parser.statement.rdl.drop.DropResourceStatement;
 import org.apache.shardingsphere.infra.datanode.DataNode;
-import org.apache.shardingsphere.infra.distsql.exception.resource.ResourceDefinitionViolationException;
-import org.apache.shardingsphere.mode.manager.ContextManager;
-import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
 import org.apache.shardingsphere.infra.distsql.exception.DistSQLException;
+import org.apache.shardingsphere.infra.distsql.exception.resource.ResourceDefinitionViolationException;
 import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
 import org.apache.shardingsphere.infra.metadata.resource.ShardingSphereResource;
 import org.apache.shardingsphere.infra.metadata.rule.ShardingSphereRuleMetaData;
+import org.apache.shardingsphere.mode.manager.ContextManager;
+import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
 import org.apache.shardingsphere.proxy.backend.communication.jdbc.connection.BackendConnection;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
 import org.apache.shardingsphere.proxy.backend.response.header.ResponseHeader;
@@ -46,11 +46,11 @@ import java.util.LinkedHashMap;
 import java.util.Map;
 
 import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertThat;
 import static org.junit.Assert.assertTrue;
 import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
 import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
 @RunWith(MockitoJUnitRunner.class)
@@ -80,19 +80,21 @@ public final class DropResourceBackendHandlerTest {
     @Mock
     private SingleTableRule singleTableRule;
     
+    private ContextManager contextManager;
+    
     private DropResourceBackendHandler dropResourceBackendHandler;
     
     @Before
     public void setUp() throws Exception {
-        dropResourceBackendHandler = new DropResourceBackendHandler(dropResourceStatement, backendConnection);
         MetaDataContexts metaDataContexts = mock(MetaDataContexts.class, RETURNS_DEEP_STUBS);
         when(metaDataContexts.getAllSchemaNames()).thenReturn(Collections.singleton("test"));
         when(metaDataContexts.getMetaData("test")).thenReturn(metaData);
         when(metaData.getRuleMetaData()).thenReturn(ruleMetaData);
         when(metaData.getResource()).thenReturn(resource);
-        ContextManager contextManager = mock(ContextManager.class, RETURNS_DEEP_STUBS);
+        contextManager = mock(ContextManager.class, RETURNS_DEEP_STUBS);
         when(contextManager.getMetaDataContexts()).thenReturn(metaDataContexts);
         ProxyContext.getInstance().init(contextManager);
+        dropResourceBackendHandler = new DropResourceBackendHandler(dropResourceStatement, backendConnection);
     }
     
     @Test
@@ -101,9 +103,10 @@ public final class DropResourceBackendHandlerTest {
         Map<String, DataSource> dataSources = new HashMap<>(1, 1);
         dataSources.put("test0", dataSource);
         when(resource.getDataSources()).thenReturn(dataSources);
-        ResponseHeader responseHeader = dropResourceBackendHandler.execute("test", createDropResourceStatement());
+        DropResourceStatement dropResourceStatement = createDropResourceStatement();
+        ResponseHeader responseHeader = dropResourceBackendHandler.execute("test", dropResourceStatement);
         assertTrue(responseHeader instanceof UpdateResponseHeader);
-        assertNull(resource.getDataSources().get("test0"));
+        verify(contextManager).dropResource("test", dropResourceStatement.getNames());
     }
     
     @Test
@@ -151,9 +154,10 @@ public final class DropResourceBackendHandlerTest {
         when(dataNode.getDataSourceName()).thenReturn("test0");
         when(singleTableRule.getAllDataNodes()).thenReturn(Collections.singletonMap("", Collections.singleton(dataNode)));
         when(resource.getDataSources()).thenReturn(getDataSourceMapForSupportRemove());
-        ResponseHeader responseHeader = dropResourceBackendHandler.execute("test", createDropResourceStatementIgnoreSingleTables());
+        DropResourceStatement dropResourceStatement = createDropResourceStatementIgnoreSingleTables();
+        ResponseHeader responseHeader = dropResourceBackendHandler.execute("test", dropResourceStatement);
         assertTrue(responseHeader instanceof UpdateResponseHeader);
-        assertNull(resource.getDataSources().get("test0"));
+        verify(contextManager).dropResource("test", dropResourceStatement.getNames());
     }
     
     private Map<String, DataSource> getDataSourceMapForSupportRemove() {