This is an automated email from the ASF dual-hosted git repository.

jianglongtao 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 b7294f7d352 Refactor GlobalClockRule (#32932)
b7294f7d352 is described below

commit b7294f7d352dc25e63cf29a2ea5ebde8090a1218
Author: Liang Zhang <[email protected]>
AuthorDate: Fri Sep 20 11:59:48 2024 +0800

    Refactor GlobalClockRule (#32932)
---
 .../executor/GlobalClockTransactionHook.java       |  6 ------
 .../globalclock/rule/GlobalClockRule.java          | 24 ++++++++++++++--------
 .../ral/queryable/ExportMetaDataExecutor.java      |  7 +------
 3 files changed, 16 insertions(+), 21 deletions(-)

diff --git 
a/kernel/global-clock/core/src/main/java/org/apache/shardingsphere/globalclock/executor/GlobalClockTransactionHook.java
 
b/kernel/global-clock/core/src/main/java/org/apache/shardingsphere/globalclock/executor/GlobalClockTransactionHook.java
index c96091eefff..b316907aefc 100644
--- 
a/kernel/global-clock/core/src/main/java/org/apache/shardingsphere/globalclock/executor/GlobalClockTransactionHook.java
+++ 
b/kernel/global-clock/core/src/main/java/org/apache/shardingsphere/globalclock/executor/GlobalClockTransactionHook.java
@@ -50,20 +50,14 @@ public final class GlobalClockTransactionHook extends 
TransactionHookAdapter {
     
     @Override
     public void init(final Properties props) {
-        if (!Boolean.parseBoolean(props.getProperty("enabled"))) {
-            enabled = false;
-            return;
-        }
         DatabaseType databaseType = 
TypedSPILoader.getService(DatabaseType.class, props.getProperty("trunkType"));
         Optional<GlobalClockTransactionExecutor> 
globalClockTransactionExecutor = 
DatabaseTypedSPILoader.findService(GlobalClockTransactionExecutor.class, 
databaseType);
         if (!globalClockTransactionExecutor.isPresent()) {
-            enabled = false;
             return;
         }
         enabled = true;
         this.globalClockTransactionExecutor = 
globalClockTransactionExecutor.get();
         globalClockProvider = 
TypedSPILoader.getService(GlobalClockProvider.class, String.join(".", 
props.getProperty("type"), props.getProperty("provider")));
-        
     }
     
     @Override
diff --git 
a/kernel/global-clock/core/src/main/java/org/apache/shardingsphere/globalclock/rule/GlobalClockRule.java
 
b/kernel/global-clock/core/src/main/java/org/apache/shardingsphere/globalclock/rule/GlobalClockRule.java
index abe5782bcd7..0bf2aeaf03e 100644
--- 
a/kernel/global-clock/core/src/main/java/org/apache/shardingsphere/globalclock/rule/GlobalClockRule.java
+++ 
b/kernel/global-clock/core/src/main/java/org/apache/shardingsphere/globalclock/rule/GlobalClockRule.java
@@ -36,40 +36,46 @@ import java.util.Properties;
 /**
  * Global clock rule.
  */
-@Getter
 public final class GlobalClockRule implements GlobalRule {
     
+    @Getter
     private final GlobalClockRuleConfiguration configuration;
     
+    private final GlobalClockProvider provider;
+    
     public GlobalClockRule(final GlobalClockRuleConfiguration ruleConfig, 
final Map<String, ShardingSphereDatabase> databases) {
         configuration = ruleConfig;
         if (ruleConfig.isEnabled()) {
-            TypedSPILoader.getService(GlobalClockProvider.class, 
getGlobalClockProviderType(), configuration.getProps());
+            provider = TypedSPILoader.getService(GlobalClockProvider.class, 
getGlobalClockProviderType(), configuration.getProps());
             TypedSPILoader.getService(TransactionHook.class, "GLOBAL_CLOCK", 
createProperties(databases));
+        } else {
+            provider = null;
         }
     }
     
+    private String getGlobalClockProviderType() {
+        return String.join(".", configuration.getType(), 
configuration.getProvider());
+    }
+    
     private Properties createProperties(final Map<String, 
ShardingSphereDatabase> databases) {
         Properties result = new Properties();
         DatabaseType storageType = 
findStorageType(databases.values()).orElseGet(DatabaseTypeEngine::getDefaultStorageType);
         result.setProperty("trunkType", 
storageType.getTrunkDatabaseType().orElse(storageType).getType());
-        result.setProperty("enabled", 
String.valueOf(configuration.isEnabled()));
         result.setProperty("type", configuration.getType());
         result.setProperty("provider", configuration.getProvider());
         return result;
     }
     
     private Optional<DatabaseType> findStorageType(final 
Collection<ShardingSphereDatabase> databases) {
-        return databases.stream()
-                .flatMap(each -> 
each.getResourceMetaData().getStorageUnits().values().stream()).findFirst().map(StorageUnit::getStorageType);
+        return databases.stream().flatMap(each -> 
each.getResourceMetaData().getStorageUnits().values().stream()).findFirst().map(StorageUnit::getStorageType);
     }
     
     /**
-     * Get global clock provider type.
+     * Get current timestamp.
      *
-     * @return global clock provider type
+     * @return current timestamp
      */
-    public String getGlobalClockProviderType() {
-        return String.join(".", configuration.getType(), 
configuration.getProvider());
+    public long getCurrentTimestamp() {
+        return null == provider ? 0L : provider.getCurrentTimestamp();
     }
 }
diff --git 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ExportMetaDataExecutor.java
 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ExportMetaDataExecutor.java
index 326d65e10fd..dc038d9a6d8 100644
--- 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ExportMetaDataExecutor.java
+++ 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ExportMetaDataExecutor.java
@@ -20,14 +20,12 @@ package 
org.apache.shardingsphere.proxy.backend.handler.distsql.ral.queryable;
 import org.apache.commons.codec.binary.Base64;
 import 
org.apache.shardingsphere.distsql.handler.engine.query.DistSQLQueryExecutor;
 import 
org.apache.shardingsphere.distsql.statement.ral.queryable.export.ExportMetaDataStatement;
-import org.apache.shardingsphere.globalclock.provider.GlobalClockProvider;
 import org.apache.shardingsphere.globalclock.rule.GlobalClockRule;
 import org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
 import 
org.apache.shardingsphere.infra.merge.result.impl.local.LocalDataQueryResultRow;
 import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.infra.spi.type.ordered.OrderedSPILoader;
-import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
 import org.apache.shardingsphere.infra.util.json.JsonUtils;
 import org.apache.shardingsphere.infra.util.yaml.YamlEngine;
 import 
org.apache.shardingsphere.infra.yaml.config.swapper.rule.YamlRuleConfigurationSwapper;
@@ -129,11 +127,8 @@ public final class ExportMetaDataExecutor implements 
DistSQLQueryExecutor<Export
     private void generateSnapshotInfo(final ShardingSphereMetaData metaData, 
final ExportedClusterInfo exportedClusterInfo) {
         GlobalClockRule globalClockRule = 
metaData.getGlobalRuleMetaData().getSingleRule(GlobalClockRule.class);
         if (globalClockRule.getConfiguration().isEnabled()) {
-            GlobalClockProvider globalClockProvider = 
TypedSPILoader.getService(GlobalClockProvider.class,
-                    globalClockRule.getGlobalClockProviderType(), 
globalClockRule.getConfiguration().getProps());
-            long csn = globalClockProvider.getCurrentTimestamp();
             ExportedSnapshotInfo snapshotInfo = new ExportedSnapshotInfo();
-            snapshotInfo.setCsn(String.valueOf(csn));
+            
snapshotInfo.setCsn(String.valueOf(globalClockRule.getCurrentTimestamp()));
             snapshotInfo.setCreateTime(LocalDateTime.now());
             exportedClusterInfo.setSnapshotInfo(snapshotInfo);
         }

Reply via email to