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 a7c137c46f0 Fix e2e error (#34462)
a7c137c46f0 is described below

commit a7c137c46f0947ac135b60b6db55cd2fff5a07fd
Author: Liang Zhang <[email protected]>
AuthorDate: Fri Jan 24 14:14:56 2025 +0800

    Fix e2e error (#34462)
---
 .../driver/executor/engine/DriverExecuteExecutor.java         |  6 ++++--
 .../metadata/federation/FederationMetaDataRefreshEngine.java  | 11 +++++++++++
 .../proxy/backend/connector/StandardDatabaseConnector.java    |  2 +-
 3 files changed, 16 insertions(+), 3 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 bffc76fc489..5b1c4ec7de4 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
@@ -101,8 +101,10 @@ public final class DriverExecuteExecutor {
                     new 
ExecuteQueryCallbackFactory(prepareEngine.getType()).newInstance(database, 
queryContext), new SQLFederationContext(false, queryContext, metaData, 
connection.getProcessId()));
             return null != resultSet;
         }
-        if (sqlFederationEngine.enabled()) {
-            new 
FederationMetaDataRefreshEngine(connection.getContextManager().getPersistServiceFacade().getMetaDataManagerPersistService(),
 database).refresh(queryContext.getSqlStatementContext());
+        FederationMetaDataRefreshEngine federationMetaDataRefreshEngine = new 
FederationMetaDataRefreshEngine(
+                
connection.getContextManager().getPersistServiceFacade().getMetaDataManagerPersistService(),
 database);
+        if (sqlFederationEngine.enabled() && 
federationMetaDataRefreshEngine.isNeedRefresh(queryContext.getSqlStatementContext()))
 {
+            
federationMetaDataRefreshEngine.refresh(queryContext.getSqlStatementContext());
             return true;
         }
         if (transactionExecutor.decide(queryContext)) {
diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/metadata/federation/FederationMetaDataRefreshEngine.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/metadata/federation/FederationMetaDataRefreshEngine.java
index 8c31fd00233..fc20feebe60 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/metadata/federation/FederationMetaDataRefreshEngine.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/metadata/federation/FederationMetaDataRefreshEngine.java
@@ -34,6 +34,17 @@ public final class FederationMetaDataRefreshEngine {
     
     private final ShardingSphereDatabase database;
     
+    /**
+     * 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) {
+        Class<?> sqlStatementClass = 
sqlStatementContext.getSqlStatement().getClass().getSuperclass();
+        return TypedSPILoader.findService(FederationMetaDataRefresher.class, 
sqlStatementClass).isPresent();
+    }
+    
     /**
      * Refresh federation meta data.
      *
diff --git 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/StandardDatabaseConnector.java
 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/StandardDatabaseConnector.java
index 69084d1c646..f25008d1cf2 100644
--- 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/StandardDatabaseConnector.java
+++ 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/StandardDatabaseConnector.java
@@ -187,7 +187,7 @@ public final class StandardDatabaseConnector implements 
DatabaseConnector {
         if (proxySQLExecutor.getSqlFederationEngine().decide(queryContext, 
contextManager.getMetaDataContexts().getMetaData().getGlobalRuleMetaData())) {
             return processExecuteFederation(doExecuteFederation());
         }
-        if (proxySQLExecutor.getSqlFederationEngine().enabled()) {
+        if (proxySQLExecutor.getSqlFederationEngine().enabled() && 
federationMetaDataRefreshEngine.isNeedRefresh(queryContext.getSqlStatementContext()))
 {
             
federationMetaDataRefreshEngine.refresh(queryContext.getSqlStatementContext());
             return new 
UpdateResponseHeader(queryContext.getSqlStatementContext().getSqlStatement());
         }

Reply via email to