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() {