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