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

zhaojinchao 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 433ba54d94f Refactor GlobalClockTransactionHook (#26861)
433ba54d94f is described below

commit 433ba54d94f3e763a85695cba3c0829580176e99
Author: Liang Zhang <[email protected]>
AuthorDate: Sun Jul 9 22:54:49 2023 +0800

    Refactor GlobalClockTransactionHook (#26861)
---
 .../core/executor/GlobalClockTransactionHook.java  | 30 +++++++++++++++-------
 1 file changed, 21 insertions(+), 9 deletions(-)

diff --git 
a/kernel/global-clock/core/src/main/java/org/apache/shardingsphere/globalclock/core/executor/GlobalClockTransactionHook.java
 
b/kernel/global-clock/core/src/main/java/org/apache/shardingsphere/globalclock/core/executor/GlobalClockTransactionHook.java
index 6acd91467a5..7213b701506 100644
--- 
a/kernel/global-clock/core/src/main/java/org/apache/shardingsphere/globalclock/core/executor/GlobalClockTransactionHook.java
+++ 
b/kernel/global-clock/core/src/main/java/org/apache/shardingsphere/globalclock/core/executor/GlobalClockTransactionHook.java
@@ -18,10 +18,12 @@
 package org.apache.shardingsphere.globalclock.core.executor;
 
 import org.apache.shardingsphere.globalclock.core.provider.GlobalClockProvider;
-import 
org.apache.shardingsphere.infra.session.connection.transaction.TransactionConnectionContext;
+import org.apache.shardingsphere.infra.database.type.DatabaseType;
 import org.apache.shardingsphere.infra.lock.GlobalLockNames;
 import org.apache.shardingsphere.infra.lock.LockContext;
 import org.apache.shardingsphere.infra.lock.LockDefinition;
+import 
org.apache.shardingsphere.infra.session.connection.transaction.TransactionConnectionContext;
+import org.apache.shardingsphere.infra.spi.DatabaseTypedSPILoader;
 import org.apache.shardingsphere.infra.util.spi.type.typed.TypedSPILoader;
 import org.apache.shardingsphere.mode.lock.GlobalLockDefinition;
 import 
org.apache.shardingsphere.sql.parser.sql.common.enums.TransactionIsolationLevel;
@@ -30,6 +32,7 @@ import 
org.apache.shardingsphere.transaction.spi.TransactionHookAdapter;
 import java.sql.Connection;
 import java.sql.SQLException;
 import java.util.Collection;
+import java.util.Optional;
 import java.util.Properties;
 
 /**
@@ -37,21 +40,30 @@ import java.util.Properties;
  */
 public final class GlobalClockTransactionHook extends TransactionHookAdapter {
     
-    private GlobalClockProvider globalClockProvider;
-    
-    private GlobalClockTransactionExecutor globalClockTransactionExecutor;
-    
     private final LockDefinition lockDefinition = new 
GlobalLockDefinition(GlobalLockNames.GLOBAL_LOCK.getLockName());
     
     private boolean enabled;
     
+    private GlobalClockTransactionExecutor globalClockTransactionExecutor;
+    
+    private GlobalClockProvider globalClockProvider;
+    
     @Override
     public void init(final Properties props) {
-        enabled = Boolean.parseBoolean(props.getProperty("enabled"));
-        if (enabled) {
-            globalClockProvider = 
TypedSPILoader.getService(GlobalClockProvider.class, String.join(".", 
props.getProperty("type"), props.getProperty("provider")));
-            globalClockTransactionExecutor = 
TypedSPILoader.getService(GlobalClockTransactionExecutor.class, 
props.getProperty("trunkType"));
+        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

Reply via email to