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 af4fa095dce Refactor FederationMetaDataRefreshEngine (#37196)
af4fa095dce is described below

commit af4fa095dce1560e81fd6862ac3c872b000d16a6
Author: Liang Zhang <[email protected]>
AuthorDate: Thu Nov 27 16:13:40 2025 +0800

    Refactor FederationMetaDataRefreshEngine (#37196)
    
    * Refactor FederationMetaDataRefreshEngine
    
    * Refactor FederationMetaDataRefreshEngine
---
 .../executor/engine/DriverExecuteExecutor.java     |  7 ++--
 .../FederationMetaDataRefreshEngine.java           | 41 +++++++++++-----------
 .../connector/StandardDatabaseProxyConnector.java  |  8 ++---
 3 files changed, 27 insertions(+), 29 deletions(-)

diff --git 
a/jdbc/src/main/java/org/apache/shardingsphere/driver/executor/engine/DriverExecuteExecutor.java
 
b/jdbc/src/main/java/org/apache/shardingsphere/driver/executor/engine/DriverExecuteExecutor.java
index a93bc6be652..902fa0d2420 100644
--- 
a/jdbc/src/main/java/org/apache/shardingsphere/driver/executor/engine/DriverExecuteExecutor.java
+++ 
b/jdbc/src/main/java/org/apache/shardingsphere/driver/executor/engine/DriverExecuteExecutor.java
@@ -100,10 +100,9 @@ public final class DriverExecuteExecutor {
                     new 
ExecuteQueryCallbackFactory(prepareEngine.getType()).newInstance(database, 
queryContext), new SQLFederationContext(false, queryContext, metaData, 
connection.getProcessId()));
             return null != resultSet;
         }
-        FederationMetaDataRefreshEngine federationMetaDataRefreshEngine = new 
FederationMetaDataRefreshEngine(
-                
connection.getContextManager().getPersistServiceFacade().getModeFacade().getMetaDataManagerService(),
 database);
-        if (sqlFederationEngine.isSqlFederationEnabled() && 
federationMetaDataRefreshEngine.isNeedRefresh(queryContext.getSqlStatementContext()))
 {
-            
federationMetaDataRefreshEngine.refresh(queryContext.getSqlStatementContext());
+        FederationMetaDataRefreshEngine federationMetaDataRefreshEngine = new 
FederationMetaDataRefreshEngine(queryContext.getSqlStatementContext());
+        if (sqlFederationEngine.isSqlFederationEnabled() && 
federationMetaDataRefreshEngine.isNeedRefresh()) {
+            
federationMetaDataRefreshEngine.refresh(connection.getContextManager().getPersistServiceFacade().getModeFacade().getMetaDataManagerService(),
 database);
             return true;
         }
         if (transactionExecutor.decide(queryContext)) {
diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/federation/FederationMetaDataRefreshEngine.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/federation/FederationMetaDataRefreshEngine.java
index 10a18249666..74640a5be73 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/federation/FederationMetaDataRefreshEngine.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/federation/FederationMetaDataRefreshEngine.java
@@ -17,7 +17,6 @@
 
 package org.apache.shardingsphere.mode.metadata.refresher.federation;
 
-import lombok.RequiredArgsConstructor;
 import 
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
@@ -29,40 +28,42 @@ import java.util.Optional;
 /**
  * Federation meta data refresh engine.
  */
-@RequiredArgsConstructor
 public final class FederationMetaDataRefreshEngine {
     
-    private final MetaDataManagerPersistService metaDataManagerPersistService;
+    private final SQLStatementContext sqlStatementContext;
     
-    private final ShardingSphereDatabase database;
+    @SuppressWarnings("rawtypes")
+    private final FederationMetaDataRefresher refresher;
+    
+    public FederationMetaDataRefreshEngine(final SQLStatementContext 
sqlStatementContext) {
+        this.sqlStatementContext = sqlStatementContext;
+        refresher = findFederationMetaDataRefresher().orElse(null);
+    }
+    
+    @SuppressWarnings("rawtypes")
+    private Optional<FederationMetaDataRefresher> 
findFederationMetaDataRefresher() {
+        Optional<FederationMetaDataRefresher> refresher = 
TypedSPILoader.findService(FederationMetaDataRefresher.class, 
sqlStatementContext.getSqlStatement().getClass());
+        return refresher.isPresent() ? refresher : 
TypedSPILoader.findService(FederationMetaDataRefresher.class, 
sqlStatementContext.getSqlStatement().getClass().getSuperclass());
+    }
     
     /**
      * Whether to need refresh meta data.
      *
-     * @param sqlStatementContext SQL statement context
      * @return is need refresh meta data or not
      */
-    public boolean isNeedRefresh(final SQLStatementContext 
sqlStatementContext) {
-        return 
findFederationMetaDataRefresher(sqlStatementContext).isPresent();
+    public boolean isNeedRefresh() {
+        return null != refresher;
     }
     
     /**
      * Refresh federation meta data.
      *
-     * @param sqlStatementContext SQL statement context
+     * @param metaDataManagerPersistService meta data manager persist service
+     * @param database database
      */
     @SuppressWarnings("unchecked")
-    public void refresh(final SQLStatementContext sqlStatementContext) {
-        
findFederationMetaDataRefresher(sqlStatementContext).ifPresent(optional -> 
optional.refresh(metaDataManagerPersistService,
-                sqlStatementContext.getSqlStatement().getDatabaseType(), 
database, SchemaRefreshUtils.getSchemaName(database, sqlStatementContext), 
sqlStatementContext.getSqlStatement()));
-    }
-    
-    @SuppressWarnings("rawtypes")
-    private Optional<FederationMetaDataRefresher> 
findFederationMetaDataRefresher(final SQLStatementContext sqlStatementContext) {
-        Optional<FederationMetaDataRefresher> refresher = 
TypedSPILoader.findService(FederationMetaDataRefresher.class, 
sqlStatementContext.getSqlStatement().getClass());
-        if (!refresher.isPresent()) {
-            refresher = 
TypedSPILoader.findService(FederationMetaDataRefresher.class, 
sqlStatementContext.getSqlStatement().getClass().getSuperclass());
-        }
-        return refresher;
+    public void refresh(final MetaDataManagerPersistService 
metaDataManagerPersistService, final ShardingSphereDatabase database) {
+        refresher.refresh(metaDataManagerPersistService,
+                sqlStatementContext.getSqlStatement().getDatabaseType(), 
database, SchemaRefreshUtils.getSchemaName(database, sqlStatementContext), 
sqlStatementContext.getSqlStatement());
     }
 }
diff --git 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/StandardDatabaseProxyConnector.java
 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/StandardDatabaseProxyConnector.java
index 1bbef2b7bf2..073ad3ff3ca 100644
--- 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/StandardDatabaseProxyConnector.java
+++ 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/StandardDatabaseProxyConnector.java
@@ -118,8 +118,6 @@ public final class StandardDatabaseProxyConnector 
implements DatabaseProxyConnec
     
     private final PushDownMetaDataRefreshEngine pushDownMetaDataRefreshEngine;
     
-    private final FederationMetaDataRefreshEngine 
federationMetaDataRefreshEngine;
-    
     private final Collection<Statement> cachedStatements = 
Collections.newSetFromMap(new ConcurrentHashMap<>());
     
     private final Collection<ResultSet> cachedResultSets = 
Collections.newSetFromMap(new ConcurrentHashMap<>());
@@ -143,7 +141,6 @@ public final class StandardDatabaseProxyConnector 
implements DatabaseProxyConnec
         proxySQLExecutor = new ProxySQLExecutor(driverType, 
databaseConnectionManager, this, sqlStatementContext);
         pushDownMetaDataRefreshEngine = new PushDownMetaDataRefreshEngine(
                 
contextManager.getPersistServiceFacade().getModeFacade().getMetaDataManagerService(),
 database, contextManager.getMetaDataContexts().getMetaData().getProps());
-        federationMetaDataRefreshEngine = new 
FederationMetaDataRefreshEngine(contextManager.getPersistServiceFacade().getModeFacade().getMetaDataManagerService(),
 database);
     }
     
     private void checkBackendReady(final SQLStatementContext 
sqlStatementContext) {
@@ -190,8 +187,9 @@ public final class StandardDatabaseProxyConnector 
implements DatabaseProxyConnec
         if (proxySQLExecutor.getSqlFederationEngine().decide(queryContext, 
contextManager.getMetaDataContexts().getMetaData().getGlobalRuleMetaData())) {
             return doExecuteFederation();
         }
-        if (proxySQLExecutor.getSqlFederationEngine().isSqlFederationEnabled() 
&& 
federationMetaDataRefreshEngine.isNeedRefresh(queryContext.getSqlStatementContext()))
 {
-            
federationMetaDataRefreshEngine.refresh(queryContext.getSqlStatementContext());
+        FederationMetaDataRefreshEngine federationMetaDataRefreshEngine = new 
FederationMetaDataRefreshEngine(queryContext.getSqlStatementContext());
+        if (proxySQLExecutor.getSqlFederationEngine().isSqlFederationEnabled() 
&& federationMetaDataRefreshEngine.isNeedRefresh()) {
+            
federationMetaDataRefreshEngine.refresh(contextManager.getPersistServiceFacade().getModeFacade().getMetaDataManagerService(),
 database);
             return new 
UpdateResponseHeader(queryContext.getSqlStatementContext().getSqlStatement());
         }
         ExecutionContext executionContext = generateExecutionContext();

Reply via email to