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 2025/08/26 18:17:07 UTC
(shardingsphere) branch master updated: Refactor DistSQLUpdateExecuteEngine for lazy fetch database (#36418)
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 29545e675ce Refactor DistSQLUpdateExecuteEngine for lazy fetch database (#36418)
29545e675ce is described below
commit 29545e675ce0dbdd8c51408015e80507b53e946a
Author: Liang Zhang <zh...@apache.org>
AuthorDate: Wed Aug 27 02:17:02 2025 +0800
Refactor DistSQLUpdateExecuteEngine for lazy fetch database (#36418)
* Refactor DistSQLUpdateExecuteEngine for lazy fetch database
* Refactor DistSQLUpdateExecuteEngine for lazy fetch database
* Refactor DistSQLUpdateExecuteEngine for lazy fetch database
* Refactor DistSQLUpdateExecuteEngine for lazy fetch database
---
.../handler/update/CreateBroadcastTableRuleExecutorTest.java | 1 +
.../handler/update/DropBroadcastTableRuleExecutorTest.java | 1 +
.../distsql/handler/update/AlterEncryptRuleExecutorTest.java | 1 +
.../distsql/handler/update/CreateEncryptRuleExecutorTest.java | 1 +
.../distsql/handler/update/DropEncryptRuleExecutorTest.java | 1 +
.../mask/distsql/handler/update/AlterMaskRuleExecutorTest.java | 1 +
.../distsql/handler/update/CreateMaskRuleExecutorTest.java | 1 +
.../mask/distsql/handler/update/DropMaskRuleExecutorTest.java | 1 +
.../handler/engine/update/DistSQLUpdateExecuteEngine.java | 10 ++++++----
.../distsql/handler/update/LoadSingleTableExecutorTest.java | 1 +
.../update/SetDefaultSingleTableStorageUnitExecutorTest.java | 1 +
.../handler/distsql/DistSQLBackendHandlerFactoryTest.java | 1 +
12 files changed, 17 insertions(+), 4 deletions(-)
diff --git a/features/broadcast/distsql/handler/src/test/java/org/apache/shardingsphere/broadcast/distsql/handler/update/CreateBroadcastTableRuleExecutorTest.java b/features/broadcast/distsql/handler/src/test/java/org/apache/shardingsphere/broadcast/distsql/handler/update/CreateBroadcastTableRuleExecutorTest.java
index c2cdb801635..7315b2a2f28 100644
--- a/features/broadcast/distsql/handler/src/test/java/org/apache/shardingsphere/broadcast/distsql/handler/update/CreateBroadcastTableRuleExecutorTest.java
+++ b/features/broadcast/distsql/handler/src/test/java/org/apache/shardingsphere/broadcast/distsql/handler/update/CreateBroadcastTableRuleExecutorTest.java
@@ -104,6 +104,7 @@ class CreateBroadcastTableRuleExecutorTest {
ContextManager result = mock(ContextManager.class, RETURNS_DEEP_STUBS);
when(database.getName()).thenReturn("foo_db");
when(database.getRuleMetaData()).thenReturn(new RuleMetaData(null == rule ? Collections.emptyList() : Collections.singleton(rule)));
+ when(result.getMetaDataContexts().getMetaData().containsDatabase("foo_db")).thenReturn(true);
when(result.getDatabase("foo_db")).thenReturn(database);
return result;
}
diff --git a/features/broadcast/distsql/handler/src/test/java/org/apache/shardingsphere/broadcast/distsql/handler/update/DropBroadcastTableRuleExecutorTest.java b/features/broadcast/distsql/handler/src/test/java/org/apache/shardingsphere/broadcast/distsql/handler/update/DropBroadcastTableRuleExecutorTest.java
index 5609508386d..6f82c951f47 100644
--- a/features/broadcast/distsql/handler/src/test/java/org/apache/shardingsphere/broadcast/distsql/handler/update/DropBroadcastTableRuleExecutorTest.java
+++ b/features/broadcast/distsql/handler/src/test/java/org/apache/shardingsphere/broadcast/distsql/handler/update/DropBroadcastTableRuleExecutorTest.java
@@ -68,6 +68,7 @@ class DropBroadcastTableRuleExecutorTest {
ContextManager result = mock(ContextManager.class, RETURNS_DEEP_STUBS);
when(database.getName()).thenReturn("foo_db");
when(database.getRuleMetaData()).thenReturn(new RuleMetaData(null == rule ? Collections.emptyList() : Collections.singleton(rule)));
+ when(result.getMetaDataContexts().getMetaData().containsDatabase("foo_db")).thenReturn(true);
when(result.getDatabase("foo_db")).thenReturn(database);
return result;
}
diff --git a/features/encrypt/distsql/handler/src/test/java/org/apache/shardingsphere/encrypt/distsql/handler/update/AlterEncryptRuleExecutorTest.java b/features/encrypt/distsql/handler/src/test/java/org/apache/shardingsphere/encrypt/distsql/handler/update/AlterEncryptRuleExecutorTest.java
index e668bfaa4cc..5a3241796a3 100644
--- a/features/encrypt/distsql/handler/src/test/java/org/apache/shardingsphere/encrypt/distsql/handler/update/AlterEncryptRuleExecutorTest.java
+++ b/features/encrypt/distsql/handler/src/test/java/org/apache/shardingsphere/encrypt/distsql/handler/update/AlterEncryptRuleExecutorTest.java
@@ -108,6 +108,7 @@ class AlterEncryptRuleExecutorTest {
private ContextManager mockContextManager(final EncryptRule rule) {
ContextManager result = mock(ContextManager.class, RETURNS_DEEP_STUBS);
+ when(result.getMetaDataContexts().getMetaData().containsDatabase("foo_db")).thenReturn(true);
when(result.getDatabase("foo_db")).thenReturn(new ShardingSphereDatabase("foo_db", mock(), mock(), new RuleMetaData(Collections.singleton(rule)), Collections.emptyList()));
return result;
}
diff --git a/features/encrypt/distsql/handler/src/test/java/org/apache/shardingsphere/encrypt/distsql/handler/update/CreateEncryptRuleExecutorTest.java b/features/encrypt/distsql/handler/src/test/java/org/apache/shardingsphere/encrypt/distsql/handler/update/CreateEncryptRuleExecutorTest.java
index 3f1aaa3b808..5237d5bdb59 100644
--- a/features/encrypt/distsql/handler/src/test/java/org/apache/shardingsphere/encrypt/distsql/handler/update/CreateEncryptRuleExecutorTest.java
+++ b/features/encrypt/distsql/handler/src/test/java/org/apache/shardingsphere/encrypt/distsql/handler/update/CreateEncryptRuleExecutorTest.java
@@ -161,6 +161,7 @@ class CreateEncryptRuleExecutorTest {
when(database.getName()).thenReturn("foo_db");
when(database.getRuleMetaData()).thenReturn(new RuleMetaData(Collections.singleton(rule)));
ContextManager result = mock(ContextManager.class, RETURNS_DEEP_STUBS);
+ when(result.getMetaDataContexts().getMetaData().containsDatabase("foo_db")).thenReturn(true);
when(result.getDatabase("foo_db")).thenReturn(database);
return result;
}
diff --git a/features/encrypt/distsql/handler/src/test/java/org/apache/shardingsphere/encrypt/distsql/handler/update/DropEncryptRuleExecutorTest.java b/features/encrypt/distsql/handler/src/test/java/org/apache/shardingsphere/encrypt/distsql/handler/update/DropEncryptRuleExecutorTest.java
index 7c73f389c29..40cc89b7e71 100644
--- a/features/encrypt/distsql/handler/src/test/java/org/apache/shardingsphere/encrypt/distsql/handler/update/DropEncryptRuleExecutorTest.java
+++ b/features/encrypt/distsql/handler/src/test/java/org/apache/shardingsphere/encrypt/distsql/handler/update/DropEncryptRuleExecutorTest.java
@@ -139,6 +139,7 @@ class DropEncryptRuleExecutorTest {
private ContextManager mockContextManager(final EncryptRule rule) {
ContextManager result = mock(ContextManager.class, RETURNS_DEEP_STUBS);
ShardingSphereDatabase database = new ShardingSphereDatabase("foo_db", mock(), mock(), new RuleMetaData(Collections.singleton(rule)), Collections.emptyList());
+ when(result.getMetaDataContexts().getMetaData().containsDatabase("foo_db")).thenReturn(true);
when(result.getDatabase("foo_db")).thenReturn(database);
return result;
}
diff --git a/features/mask/distsql/handler/src/test/java/org/apache/shardingsphere/mask/distsql/handler/update/AlterMaskRuleExecutorTest.java b/features/mask/distsql/handler/src/test/java/org/apache/shardingsphere/mask/distsql/handler/update/AlterMaskRuleExecutorTest.java
index a61d0dc211f..2db77a27347 100644
--- a/features/mask/distsql/handler/src/test/java/org/apache/shardingsphere/mask/distsql/handler/update/AlterMaskRuleExecutorTest.java
+++ b/features/mask/distsql/handler/src/test/java/org/apache/shardingsphere/mask/distsql/handler/update/AlterMaskRuleExecutorTest.java
@@ -104,6 +104,7 @@ class AlterMaskRuleExecutorTest {
when(database.getName()).thenReturn("foo_db");
when(database.getRuleMetaData()).thenReturn(new RuleMetaData(Collections.singleton(rule)));
ContextManager result = mock(ContextManager.class, RETURNS_DEEP_STUBS);
+ when(result.getMetaDataContexts().getMetaData().containsDatabase("foo_db")).thenReturn(true);
when(result.getDatabase("foo_db")).thenReturn(database);
return result;
}
diff --git a/features/mask/distsql/handler/src/test/java/org/apache/shardingsphere/mask/distsql/handler/update/CreateMaskRuleExecutorTest.java b/features/mask/distsql/handler/src/test/java/org/apache/shardingsphere/mask/distsql/handler/update/CreateMaskRuleExecutorTest.java
index a7198215172..cd4a4a25dc0 100644
--- a/features/mask/distsql/handler/src/test/java/org/apache/shardingsphere/mask/distsql/handler/update/CreateMaskRuleExecutorTest.java
+++ b/features/mask/distsql/handler/src/test/java/org/apache/shardingsphere/mask/distsql/handler/update/CreateMaskRuleExecutorTest.java
@@ -122,6 +122,7 @@ class CreateMaskRuleExecutorTest {
when(database.getName()).thenReturn("foo_db");
when(database.getRuleMetaData()).thenReturn(new RuleMetaData(Collections.singleton(rule)));
ContextManager result = mock(ContextManager.class, RETURNS_DEEP_STUBS);
+ when(result.getMetaDataContexts().getMetaData().containsDatabase("foo_db")).thenReturn(true);
when(result.getDatabase("foo_db")).thenReturn(database);
return result;
}
diff --git a/features/mask/distsql/handler/src/test/java/org/apache/shardingsphere/mask/distsql/handler/update/DropMaskRuleExecutorTest.java b/features/mask/distsql/handler/src/test/java/org/apache/shardingsphere/mask/distsql/handler/update/DropMaskRuleExecutorTest.java
index 03aeeca0a9f..dc9c3bed3b5 100644
--- a/features/mask/distsql/handler/src/test/java/org/apache/shardingsphere/mask/distsql/handler/update/DropMaskRuleExecutorTest.java
+++ b/features/mask/distsql/handler/src/test/java/org/apache/shardingsphere/mask/distsql/handler/update/DropMaskRuleExecutorTest.java
@@ -101,6 +101,7 @@ class DropMaskRuleExecutorTest {
private ContextManager mockContextManager(final MaskRule rule) {
ShardingSphereDatabase database = new ShardingSphereDatabase("foo_db", mock(), mock(), new RuleMetaData(Collections.singleton(rule)), Collections.emptyList());
ContextManager result = mock(ContextManager.class, RETURNS_DEEP_STUBS);
+ when(result.getMetaDataContexts().getMetaData().containsDatabase("foo_db")).thenReturn(true);
when(result.getDatabase("foo_db")).thenReturn(database);
return result;
}
diff --git a/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/engine/update/DistSQLUpdateExecuteEngine.java b/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/engine/update/DistSQLUpdateExecuteEngine.java
index cf5308e60d7..888b9246a71 100644
--- a/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/engine/update/DistSQLUpdateExecuteEngine.java
+++ b/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/engine/update/DistSQLUpdateExecuteEngine.java
@@ -69,10 +69,12 @@ public final class DistSQLUpdateExecuteEngine {
@SuppressWarnings("rawtypes")
private void executeRuleDefinitionUpdate() throws SQLException {
- ShardingSphereDatabase database = contextManager.getDatabase(databaseName);
- Optional<DatabaseRuleDefinitionExecutor> databaseExecutor = DatabaseRuleDefinitionExecutorFactory.findInstance(sqlStatement, database);
- if (databaseExecutor.isPresent()) {
- new DatabaseRuleDefinitionExecuteEngine((DatabaseRuleDefinitionStatement) sqlStatement, contextManager, database, databaseExecutor.get()).executeUpdate();
+ if (contextManager.getMetaDataContexts().getMetaData().containsDatabase(databaseName)) {
+ ShardingSphereDatabase database = contextManager.getDatabase(databaseName);
+ Optional<DatabaseRuleDefinitionExecutor> databaseExecutor = DatabaseRuleDefinitionExecutorFactory.findInstance(sqlStatement, database);
+ if (databaseExecutor.isPresent()) {
+ new DatabaseRuleDefinitionExecuteEngine((DatabaseRuleDefinitionStatement) sqlStatement, contextManager, database, databaseExecutor.get()).executeUpdate();
+ }
} else {
GlobalRuleDefinitionExecutor globalExecutor = GlobalRuleDefinitionExecutorFactory.newInstance(sqlStatement, contextManager.getMetaDataContexts().getMetaData().getGlobalRuleMetaData());
new GlobalRuleDefinitionExecuteEngine((GlobalRuleDefinitionStatement) sqlStatement, contextManager, globalExecutor).executeUpdate();
diff --git a/kernel/single/distsql/handler/src/test/java/org/apache/shardingsphere/single/distsql/handler/update/LoadSingleTableExecutorTest.java b/kernel/single/distsql/handler/src/test/java/org/apache/shardingsphere/single/distsql/handler/update/LoadSingleTableExecutorTest.java
index ed8c28c5b59..4eb3bd0c92b 100644
--- a/kernel/single/distsql/handler/src/test/java/org/apache/shardingsphere/single/distsql/handler/update/LoadSingleTableExecutorTest.java
+++ b/kernel/single/distsql/handler/src/test/java/org/apache/shardingsphere/single/distsql/handler/update/LoadSingleTableExecutorTest.java
@@ -86,6 +86,7 @@ class LoadSingleTableExecutorTest {
private ContextManager mockContextManager(final SingleRule rule) {
ContextManager result = mock(ContextManager.class, RETURNS_DEEP_STUBS);
+ when(result.getMetaDataContexts().getMetaData().containsDatabase("foo_db")).thenReturn(true);
when(result.getDatabase("foo_db")).thenReturn(database);
if (null == rule) {
when(database.getRuleMetaData()).thenReturn(new RuleMetaData(Collections.emptyList()));
diff --git a/kernel/single/distsql/handler/src/test/java/org/apache/shardingsphere/single/distsql/handler/update/SetDefaultSingleTableStorageUnitExecutorTest.java b/kernel/single/distsql/handler/src/test/java/org/apache/shardingsphere/single/distsql/handler/update/SetDefaultSingleTableStorageUnitExecutorTest.java
index 3bddcf8af94..5bfb13f1bcc 100644
--- a/kernel/single/distsql/handler/src/test/java/org/apache/shardingsphere/single/distsql/handler/update/SetDefaultSingleTableStorageUnitExecutorTest.java
+++ b/kernel/single/distsql/handler/src/test/java/org/apache/shardingsphere/single/distsql/handler/update/SetDefaultSingleTableStorageUnitExecutorTest.java
@@ -87,6 +87,7 @@ class SetDefaultSingleTableStorageUnitExecutorTest {
ContextManager result = mock(ContextManager.class, RETURNS_DEEP_STUBS);
when(database.getName()).thenReturn("foo_db");
when(database.getRuleMetaData()).thenReturn(new RuleMetaData(Collections.singleton(rule)));
+ when(result.getMetaDataContexts().getMetaData().containsDatabase("foo_db")).thenReturn(true);
when(result.getDatabase("foo_db")).thenReturn(database);
return result;
}
diff --git a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/DistSQLBackendHandlerFactoryTest.java b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/DistSQLBackendHandlerFactoryTest.java
index 906067aa644..f1cd19a0e7a 100644
--- a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/DistSQLBackendHandlerFactoryTest.java
+++ b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/DistSQLBackendHandlerFactoryTest.java
@@ -109,6 +109,7 @@ class DistSQLBackendHandlerFactoryTest {
private MetaDataContexts mockMetaDataContexts(final ShardingSphereDatabase database) {
MetaDataContexts result = mock(MetaDataContexts.class, RETURNS_DEEP_STUBS);
+ when(result.getMetaData().containsDatabase("foo_db")).thenReturn(true);
when(result.getMetaData().getDatabase("foo_db")).thenReturn(database);
return result;
}