This is an automated email from the ASF dual-hosted git repository.
zhangliang 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 20d18bc8526 Decouple DropDatabaseProxyBackendHandler and ProxyContext
(#36817)
20d18bc8526 is described below
commit 20d18bc8526c33467d479a3bef602dcbcc0622e8
Author: Liang Zhang <[email protected]>
AuthorDate: Wed Oct 8 17:14:26 2025 +0800
Decouple DropDatabaseProxyBackendHandler and ProxyContext (#36817)
---
.../type/DropDatabaseProxyBackendHandler.java | 4 +--
...abaseOperateProxyBackendHandlerFactoryTest.java | 33 +---------------------
.../type/DropDatabaseProxyBackendHandlerTest.java | 23 +++++++--------
3 files changed, 13 insertions(+), 47 deletions(-)
diff --git
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/database/type/DropDatabaseProxyBackendHandler.java
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/database/type/DropDatabaseProxyBackendHandler.java
index 5fd05e09751..526b116936d 100644
---
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/database/type/DropDatabaseProxyBackendHandler.java
+++
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/database/type/DropDatabaseProxyBackendHandler.java
@@ -55,7 +55,7 @@ public final class DropDatabaseProxyBackendHandler implements
ProxyBackendHandle
connectionSession.setCurrentDatabaseName(null);
}
if
(ProxyContext.getInstance().databaseExists(sqlStatement.getDatabaseName())) {
- ShardingSphereDatabase database =
ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData().getDatabase(sqlStatement.getDatabaseName());
+ ShardingSphereDatabase database =
connectionSession.getQueryContext().getMetaData().getDatabase(sqlStatement.getDatabaseName());
ProxyContext.getInstance().getContextManager().getPersistServiceFacade().getModeFacade().getMetaDataManagerService().dropDatabase(database);
}
return new UpdateResponseHeader(sqlStatement);
@@ -63,7 +63,7 @@ public final class DropDatabaseProxyBackendHandler implements
ProxyBackendHandle
private void check(final DropDatabaseStatement sqlStatement, final Grantee
grantee) {
String databaseName = sqlStatement.getDatabaseName().toLowerCase();
- AuthorityRule authorityRule =
ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData().getGlobalRuleMetaData().getSingleRule(AuthorityRule.class);
+ AuthorityRule authorityRule =
connectionSession.getQueryContext().getMetaData().getGlobalRuleMetaData().getSingleRule(AuthorityRule.class);
AuthorityChecker authorityChecker = new
AuthorityChecker(authorityRule, grantee);
ShardingSpherePreconditions.checkState(authorityChecker.isAuthorized(databaseName),
() -> new UnknownDatabaseException(databaseName));
ShardingSpherePreconditions.checkState(sqlStatement.isIfExists() ||
ProxyContext.getInstance().databaseExists(databaseName), () -> new
DatabaseDropNotExistsException(databaseName));
diff --git
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/database/DatabaseOperateProxyBackendHandlerFactoryTest.java
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/database/DatabaseOperateProxyBackendHandlerFactoryTest.java
index 9480a0a2476..e0b20b28bbd 100644
---
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/database/DatabaseOperateProxyBackendHandlerFactoryTest.java
+++
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/database/DatabaseOperateProxyBackendHandlerFactoryTest.java
@@ -25,11 +25,7 @@ import
org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
import
org.apache.shardingsphere.infra.metadata.database.resource.ResourceMetaData;
import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
-import
org.apache.shardingsphere.infra.metadata.statistics.ShardingSphereStatistics;
-import
org.apache.shardingsphere.infra.metadata.statistics.builder.ShardingSphereStatisticsFactory;
import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
-import org.apache.shardingsphere.mode.manager.ContextManager;
-import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
import
org.apache.shardingsphere.proxy.backend.handler.database.type.CreateDatabaseProxyBackendHandler;
import
org.apache.shardingsphere.proxy.backend.handler.database.type.DropDatabaseProxyBackendHandler;
@@ -41,7 +37,6 @@ import
org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.da
import
org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.database.DropDatabaseStatement;
import org.apache.shardingsphere.test.infra.framework.mock.AutoMockExtension;
import org.apache.shardingsphere.test.infra.framework.mock.StaticMockSettings;
-import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
@@ -58,7 +53,6 @@ import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.isA;
import static org.junit.jupiter.api.Assertions.assertNull;
import static org.junit.jupiter.api.Assertions.assertThrows;
-import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
@@ -68,9 +62,6 @@ import static org.mockito.Mockito.when;
@MockitoSettings(strictness = Strictness.LENIENT)
class DatabaseOperateProxyBackendHandlerFactoryTest {
- @Mock(answer = Answers.RETURNS_DEEP_STUBS)
- private ContextManager contextManager;
-
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
private ConnectionSession connectionSession;
@@ -79,22 +70,14 @@ class DatabaseOperateProxyBackendHandlerFactoryTest {
when(connectionSession.getConnectionContext().getGrantee()).thenReturn(null);
ShardingSphereMetaData metaData = new ShardingSphereMetaData(
Collections.singleton(mockDatabase()),
mock(ResourceMetaData.class), mock(RuleMetaData.class), new
ConfigurationProperties(new Properties()));
- MetaDataContexts metaDataContexts = new MetaDataContexts(metaData,
ShardingSphereStatisticsFactory.create(metaData, new
ShardingSphereStatistics()));
-
when(contextManager.getMetaDataContexts()).thenReturn(metaDataContexts);
-
when(ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
+
when(connectionSession.getQueryContext().getMetaData()).thenReturn(metaData);
when(ProxyContext.getInstance().databaseExists("foo_db")).thenReturn(true);
}
- @AfterEach
- void tearDown() {
- setGovernanceMetaDataContexts(false);
- }
-
@Test
void assertExecuteCreateDatabaseContext() throws SQLException {
CreateDatabaseStatement sqlStatement =
mock(CreateDatabaseStatement.class);
when(sqlStatement.getDatabaseName()).thenReturn("new_db");
- setGovernanceMetaDataContexts(true);
ResponseHeader response =
DatabaseOperateProxyBackendHandlerFactory.newInstance(sqlStatement,
connectionSession).execute();
assertThat(response, isA(UpdateResponseHeader.class));
}
@@ -103,7 +86,6 @@ class DatabaseOperateProxyBackendHandlerFactoryTest {
void assertExecuteDropDatabaseContext() throws SQLException {
DropDatabaseStatement sqlStatement = mock(DropDatabaseStatement.class);
when(sqlStatement.getDatabaseName()).thenReturn("foo_db");
- setGovernanceMetaDataContexts(true);
ResponseHeader response =
DatabaseOperateProxyBackendHandlerFactory.newInstance(sqlStatement,
connectionSession).execute();
assertThat(response, isA(UpdateResponseHeader.class));
}
@@ -112,7 +94,6 @@ class DatabaseOperateProxyBackendHandlerFactoryTest {
void assertExecuteCreateDatabaseContextWithException() {
CreateDatabaseStatement sqlStatement =
mock(CreateDatabaseStatement.class);
when(sqlStatement.getDatabaseName()).thenReturn("foo_db");
- setGovernanceMetaDataContexts(true);
try {
DatabaseOperateProxyBackendHandlerFactory.newInstance(sqlStatement,
connectionSession);
} catch (final DatabaseCreateExistsException ex) {
@@ -127,18 +108,6 @@ class DatabaseOperateProxyBackendHandlerFactoryTest {
return result;
}
- private void setGovernanceMetaDataContexts(final boolean isGovernance) {
- ShardingSphereMetaData metaData = new ShardingSphereMetaData();
- MetaDataContexts metaDataContexts = isGovernance ?
mockMetaDataContexts() : new MetaDataContexts(metaData, new
ShardingSphereStatistics());
-
when(contextManager.getMetaDataContexts()).thenReturn(metaDataContexts);
- }
-
- private MetaDataContexts mockMetaDataContexts() {
- MetaDataContexts result =
ProxyContext.getInstance().getContextManager().getMetaDataContexts();
-
when(result.getMetaData().getDatabase("foo_db").getResourceMetaData().getNotExistedDataSources(any())).thenReturn(Collections.emptyList());
- return result;
- }
-
@Test
void
assertDatabaseOperateProxyBackendHandlerFactoryReturnCreateDatabaseProxyBackendHandler()
{
assertThat(DatabaseOperateProxyBackendHandlerFactory.newInstance(mock(CreateDatabaseStatement.class),
mock(ConnectionSession.class)), isA(CreateDatabaseProxyBackendHandler.class));
diff --git
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/database/type/DropDatabaseProxyBackendHandlerTest.java
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/database/type/DropDatabaseProxyBackendHandlerTest.java
index 287ebd27873..507726f961c 100644
---
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/database/type/DropDatabaseProxyBackendHandlerTest.java
+++
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/database/type/DropDatabaseProxyBackendHandlerTest.java
@@ -20,11 +20,10 @@ package
org.apache.shardingsphere.proxy.backend.handler.database.type;
import org.apache.shardingsphere.authority.rule.AuthorityRule;
import org.apache.shardingsphere.database.connector.core.type.DatabaseType;
import
org.apache.shardingsphere.database.exception.core.exception.syntax.database.DatabaseDropNotExistsException;
+import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
-import org.apache.shardingsphere.mode.manager.ContextManager;
-import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
import org.apache.shardingsphere.proxy.backend.response.header.ResponseHeader;
import
org.apache.shardingsphere.proxy.backend.response.header.update.UpdateResponseHeader;
@@ -69,27 +68,25 @@ class DropDatabaseProxyBackendHandlerTest {
@BeforeEach
void setUp() {
- ContextManager contextManager = mockContextManager();
-
when(ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
when(ProxyContext.getInstance().databaseExists("foo_db")).thenReturn(true);
when(ProxyContext.getInstance().databaseExists("bar_db")).thenReturn(true);
when(connectionSession.getConnectionContext().getGrantee()).thenReturn(null);
+ ShardingSphereMetaData metaData = mockMetaData();
+
when(connectionSession.getQueryContext().getMetaData()).thenReturn(metaData);
handler = new DropDatabaseProxyBackendHandler(sqlStatement,
connectionSession);
}
- private ContextManager mockContextManager() {
+ private ShardingSphereMetaData mockMetaData() {
ShardingSphereDatabase database1 = mock(ShardingSphereDatabase.class,
RETURNS_DEEP_STUBS);
when(database1.getName()).thenReturn("foo_db");
ShardingSphereDatabase database2 = mock(ShardingSphereDatabase.class,
RETURNS_DEEP_STUBS);
when(database2.getName()).thenReturn("bar_db");
- MetaDataContexts metaDataContexts = mock(MetaDataContexts.class,
RETURNS_DEEP_STUBS);
-
when(metaDataContexts.getMetaData().getAllDatabases()).thenReturn(Arrays.asList(database1,
database2));
-
when(metaDataContexts.getMetaData().getDatabase("foo_db")).thenReturn(database1);
-
when(metaDataContexts.getMetaData().getDatabase("bar_db")).thenReturn(database2);
-
when(metaDataContexts.getMetaData().getDatabase("test_not_exist_db")).thenReturn(mock(ShardingSphereDatabase.class,
RETURNS_DEEP_STUBS));
-
when(metaDataContexts.getMetaData().getGlobalRuleMetaData()).thenReturn(new
RuleMetaData(Collections.singleton(mock(AuthorityRule.class))));
- ContextManager result = mock(ContextManager.class, RETURNS_DEEP_STUBS);
- when(result.getMetaDataContexts()).thenReturn(metaDataContexts);
+ ShardingSphereMetaData result = mock(ShardingSphereMetaData.class,
RETURNS_DEEP_STUBS);
+ when(result.getAllDatabases()).thenReturn(Arrays.asList(database1,
database2));
+ when(result.getDatabase("foo_db")).thenReturn(database1);
+ when(result.getDatabase("bar_db")).thenReturn(database2);
+
when(result.getDatabase("test_not_exist_db")).thenReturn(mock(ShardingSphereDatabase.class,
RETURNS_DEEP_STUBS));
+ when(result.getGlobalRuleMetaData()).thenReturn(new
RuleMetaData(Collections.singleton(mock(AuthorityRule.class))));
return result;
}