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 9676d58  Refactor MetadataRefreshEngine (#9923)
9676d58 is described below

commit 9676d587f5c2938f73a2ad1755412e91210c3ed8
Author: Haoran Meng <[email protected]>
AuthorDate: Sat Apr 3 20:41:19 2021 +0800

    Refactor MetadataRefreshEngine (#9923)
---
 .../infra/metadata/engine/MetadataRefreshEngine.java     | 16 ++++++++--------
 .../shardingsphere/driver/executor/JDBCLockEngine.java   |  2 +-
 .../communication/DatabaseCommunicationEngine.java       |  6 ++----
 3 files changed, 11 insertions(+), 13 deletions(-)

diff --git 
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/engine/MetadataRefreshEngine.java
 
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/engine/MetadataRefreshEngine.java
index 1acfe99..d86201b 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/engine/MetadataRefreshEngine.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/engine/MetadataRefreshEngine.java
@@ -32,6 +32,7 @@ import 
org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
 
 import java.sql.SQLException;
 import java.util.Collection;
+import java.util.Objects;
 import java.util.Optional;
 
 /**
@@ -43,11 +44,11 @@ public final class MetadataRefreshEngine {
     
     private final SchemaBuilderMaterials materials;
     
-    private final Optional<ShardingSphereLock> lockOptional;
+    private final ShardingSphereLock shardingSphereLock;
     
-    public MetadataRefreshEngine(final ShardingSphereMetaData metaData, final 
ConfigurationProperties properties, final Optional<ShardingSphereLock> 
lockOptional) {
+    public MetadataRefreshEngine(final ShardingSphereMetaData metaData, final 
ConfigurationProperties properties, final ShardingSphereLock 
shardingSphereLock) {
         this.metaData = metaData;
-        this.lockOptional = lockOptional;
+        this.shardingSphereLock = shardingSphereLock;
         materials = new 
SchemaBuilderMaterials(metaData.getResource().getDatabaseType(), 
metaData.getResource().getDataSources(), metaData.getRuleMetaData().getRules(), 
properties);
     }
     
@@ -72,7 +73,7 @@ public final class MetadataRefreshEngine {
     
     @SuppressWarnings("rawtypes")
     private void refreshSchema(final SQLStatement sqlStatement, final 
Collection<String> routeDataSourceNames, final SchemaRefresher refresher) 
throws SQLException {
-        if (lockOptional.isPresent()) {
+        if (Objects.nonNull(shardingSphereLock)) {
             refreshSchemaWithLock(sqlStatement, routeDataSourceNames, 
refresher);
         } else {
             refreshSchemaWithoutLock(sqlStatement, routeDataSourceNames, 
refresher);
@@ -80,17 +81,16 @@ public final class MetadataRefreshEngine {
     }
     
     private void refreshSchemaWithLock(final SQLStatement sqlStatement, final 
Collection<String> routeDataSourceNames, final SchemaRefresher refresher) 
throws SQLException {
-        ShardingSphereLock lock = lockOptional.get();
         try {
-            if (!lock.tryLock(LockNameUtil.getMetadataRefreshLockName())) {
+            if 
(!shardingSphereLock.tryLock(LockNameUtil.getMetadataRefreshLockName())) {
                 throw new ShardingSphereException("Metadata refresh failed.");
             }
             refreshSchemaWithoutLock(sqlStatement, routeDataSourceNames, 
refresher);
-            if (!lock.isReleased(LockNameUtil.getMetadataRefreshLockName())) {
+            if 
(!shardingSphereLock.isReleased(LockNameUtil.getMetadataRefreshLockName())) {
                 throw new ShardingSphereException("Metadata refresh failed.");
             }
         } finally {
-            lock.releaseLock(LockNameUtil.getMetadataRefreshLockName());
+            
shardingSphereLock.releaseLock(LockNameUtil.getMetadataRefreshLockName());
         }
     }
     
diff --git 
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/executor/JDBCLockEngine.java
 
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/executor/JDBCLockEngine.java
index 2a05af7..ba3e671 100644
--- 
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/executor/JDBCLockEngine.java
+++ 
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/executor/JDBCLockEngine.java
@@ -55,7 +55,7 @@ public final class JDBCLockEngine {
     public JDBCLockEngine(final MetaDataContexts metaDataContexts, final 
JDBCExecutor jdbcExecutor) {
         this.metaDataContexts = metaDataContexts;
         this.jdbcExecutor = jdbcExecutor;
-        metadataRefreshEngine = new 
MetadataRefreshEngine(metaDataContexts.getDefaultMetaData(), 
metaDataContexts.getProps(), metaDataContexts.getLock());
+        metadataRefreshEngine = new 
MetadataRefreshEngine(metaDataContexts.getDefaultMetaData(), 
metaDataContexts.getProps(), metaDataContexts.getLock().orElse(null));
     }
     
     /**
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/DatabaseCommunicationEngine.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/DatabaseCommunicationEngine.java
index be27b6d..6f8c4d8 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/DatabaseCommunicationEngine.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/DatabaseCommunicationEngine.java
@@ -67,8 +67,6 @@ public final class DatabaseCommunicationEngine {
     
     private final KernelProcessor kernelProcessor;
     
-    private final MetadataRefreshEngine engine;
-    
     private List<QueryHeader> queryHeaders;
     
     private MergedResult mergedResult;
@@ -81,8 +79,8 @@ public final class DatabaseCommunicationEngine {
         this.logicSQL = logicSQL;
         proxySQLExecutor = new ProxySQLExecutor(driverType, backendConnection);
         kernelProcessor = new KernelProcessor();
-        engine = new MetadataRefreshEngine(metaData, 
ProxyContext.getInstance().getMetaDataContexts().getProps(), 
ProxyContext.getInstance().getLock());
-        proxyLockEngine = new ProxyLockEngine(proxySQLExecutor, engine, 
backendConnection.getSchemaName());
+        proxyLockEngine = new ProxyLockEngine(proxySQLExecutor, new 
MetadataRefreshEngine(metaData, 
+                ProxyContext.getInstance().getMetaDataContexts().getProps(), 
ProxyContext.getInstance().getLock().orElse(null)), 
backendConnection.getSchemaName());
     }
     
     /**

Reply via email to