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());
}