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 f4626002596 Refactor 
ClusterPersistRepository.getDistributedLockHolder() (#35109)
f4626002596 is described below

commit f4626002596a4c0e990f9a9dd461289267642abb
Author: Liang Zhang <[email protected]>
AuthorDate: Sun Mar 30 00:17:09 2025 +0800

    Refactor ClusterPersistRepository.getDistributedLockHolder() (#35109)
    
    * Refactor ClusterPersistRepository.getDistributedLockHolder()
    
    * Refactor ClusterPersistRepository.getDistributedLockHolder()
---
 mode/type/cluster/core/pom.xml                              |  5 -----
 .../cluster/lock/global/GlobalLockPersistService.java       |  5 ++++-
 .../cluster/fixture/ClusterPersistRepositoryFixture.java    |  5 +++--
 .../cluster/lock/global/GlobalLockPersistServiceTest.java   | 13 +++++++++++--
 .../mode/repository/cluster/ClusterPersistRepository.java   |  4 +++-
 .../mode/repository/cluster/etcd/EtcdRepository.java        |  8 ++++++--
 .../repository/cluster/zookeeper/ZookeeperRepository.java   |  7 +++++--
 .../proxy/fixture/ProxyPersistRepositoryFixture.java        |  7 ++++---
 8 files changed, 36 insertions(+), 18 deletions(-)

diff --git a/mode/type/cluster/core/pom.xml b/mode/type/cluster/core/pom.xml
index 05239535806..93b78d9d427 100644
--- a/mode/type/cluster/core/pom.xml
+++ b/mode/type/cluster/core/pom.xml
@@ -32,11 +32,6 @@
             <artifactId>shardingsphere-mode-core</artifactId>
             <version>${project.version}</version>
         </dependency>
-        <dependency>
-            <groupId>org.apache.shardingsphere</groupId>
-            <artifactId>shardingsphere-cluster-mode-repository-api</artifactId>
-            <version>${project.version}</version>
-        </dependency>
         <dependency>
             <groupId>org.apache.shardingsphere</groupId>
             
<artifactId>shardingsphere-cluster-mode-repository-core</artifactId>
diff --git 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/lock/global/GlobalLockPersistService.java
 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/lock/global/GlobalLockPersistService.java
index 8e1146f9bc3..49e6bfcec15 100644
--- 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/lock/global/GlobalLockPersistService.java
+++ 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/lock/global/GlobalLockPersistService.java
@@ -18,8 +18,11 @@
 package org.apache.shardingsphere.mode.manager.cluster.lock.global;
 
 import 
org.apache.shardingsphere.mode.repository.cluster.ClusterPersistRepository;
+import 
org.apache.shardingsphere.mode.repository.cluster.core.lock.props.DefaultLockTypedProperties;
 import 
org.apache.shardingsphere.mode.repository.cluster.lock.holder.DistributedLockHolder;
 
+import java.util.Properties;
+
 /**
  * Global lock persist service.
  */
@@ -28,7 +31,7 @@ public final class GlobalLockPersistService {
     private final DistributedLockHolder lockHolder;
     
     public GlobalLockPersistService(final ClusterPersistRepository repository) 
{
-        lockHolder = repository.getDistributedLockHolder();
+        lockHolder = repository.getDistributedLockHolder().orElseGet(() -> new 
DistributedLockHolder("default", this, new DefaultLockTypedProperties(new 
Properties())));
     }
     
     /**
diff --git 
a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/fixture/ClusterPersistRepositoryFixture.java
 
b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/fixture/ClusterPersistRepositoryFixture.java
index a7a7d1214b9..ce4eeb2f776 100644
--- 
a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/fixture/ClusterPersistRepositoryFixture.java
+++ 
b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/fixture/ClusterPersistRepositoryFixture.java
@@ -26,6 +26,7 @@ import 
org.apache.shardingsphere.mode.repository.cluster.core.lock.props.Default
 
 import java.util.Collections;
 import java.util.List;
+import java.util.Optional;
 import java.util.Properties;
 
 public final class ClusterPersistRepositoryFixture implements 
ClusterPersistRepository {
@@ -67,8 +68,8 @@ public final class ClusterPersistRepositoryFixture implements 
ClusterPersistRepo
     }
     
     @Override
-    public DistributedLockHolder getDistributedLockHolder() {
-        return new DistributedLockHolder("default", this, new 
DefaultLockTypedProperties(new Properties()));
+    public Optional<DistributedLockHolder> getDistributedLockHolder() {
+        return Optional.of(new DistributedLockHolder("default", this, new 
DefaultLockTypedProperties(new Properties())));
     }
     
     @Override
diff --git 
a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/lock/global/GlobalLockPersistServiceTest.java
 
b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/lock/global/GlobalLockPersistServiceTest.java
index 5bb2ca50124..338eab7dabf 100644
--- 
a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/lock/global/GlobalLockPersistServiceTest.java
+++ 
b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/lock/global/GlobalLockPersistServiceTest.java
@@ -18,6 +18,7 @@
 package org.apache.shardingsphere.mode.manager.cluster.lock.global;
 
 import 
org.apache.shardingsphere.mode.repository.cluster.ClusterPersistRepository;
+import 
org.apache.shardingsphere.mode.repository.cluster.lock.holder.DistributedLockHolder;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
@@ -25,7 +26,11 @@ import org.mockito.Answers;
 import org.mockito.Mock;
 import org.mockito.junit.jupiter.MockitoExtension;
 
+import java.util.Optional;
+
 import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
+import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
@@ -40,20 +45,24 @@ class GlobalLockPersistServiceTest {
     
     @BeforeEach
     void setUp() {
+        DistributedLockHolder distributedLockHolder = 
mock(DistributedLockHolder.class, RETURNS_DEEP_STUBS);
+        
when(repository.getDistributedLockHolder()).thenReturn(Optional.of(distributedLockHolder));
         when(globalLock.getName()).thenReturn("foo_lock");
     }
     
+    @SuppressWarnings("OptionalGetWithoutIsPresent")
     @Test
     void assertTryLock() {
-        
when(repository.getDistributedLockHolder().getDistributedLock("/lock/global/locks/foo_lock").tryLock(1000L)).thenReturn(true);
+        
when(repository.getDistributedLockHolder().get().getDistributedLock("/lock/global/locks/foo_lock").tryLock(1000L)).thenReturn(true);
         GlobalLockDefinition lockDefinition = new 
GlobalLockDefinition(globalLock);
         assertTrue(new 
GlobalLockPersistService(repository).tryLock(lockDefinition, 1000L));
     }
     
+    @SuppressWarnings("OptionalGetWithoutIsPresent")
     @Test
     void assertUnlock() {
         GlobalLockDefinition lockDefinition = new 
GlobalLockDefinition(globalLock);
         new GlobalLockPersistService(repository).unlock(lockDefinition);
-        
verify(repository.getDistributedLockHolder().getDistributedLock("/lock/global/locks/foo_lock")).unlock();
+        
verify(repository.getDistributedLockHolder().get().getDistributedLock("/lock/global/locks/foo_lock")).unlock();
     }
 }
diff --git 
a/mode/type/cluster/repository/api/src/main/java/org/apache/shardingsphere/mode/repository/cluster/ClusterPersistRepository.java
 
b/mode/type/cluster/repository/api/src/main/java/org/apache/shardingsphere/mode/repository/cluster/ClusterPersistRepository.java
index 00a535ab113..1579bf32275 100644
--- 
a/mode/type/cluster/repository/api/src/main/java/org/apache/shardingsphere/mode/repository/cluster/ClusterPersistRepository.java
+++ 
b/mode/type/cluster/repository/api/src/main/java/org/apache/shardingsphere/mode/repository/cluster/ClusterPersistRepository.java
@@ -22,6 +22,8 @@ import 
org.apache.shardingsphere.mode.repository.cluster.listener.DataChangedEve
 import 
org.apache.shardingsphere.mode.repository.cluster.lock.holder.DistributedLockHolder;
 import org.apache.shardingsphere.mode.spi.repository.PersistRepository;
 
+import java.util.Optional;
+
 /**
  * Cluster persist repository.
  */
@@ -57,7 +59,7 @@ public interface ClusterPersistRepository extends 
PersistRepository {
      *
      * @return distributed lock holder
      */
-    DistributedLockHolder getDistributedLockHolder();
+    Optional<DistributedLockHolder> getDistributedLockHolder();
     
     /**
      * Watch key or path of governance server.
diff --git 
a/mode/type/cluster/repository/provider/etcd/src/main/java/org/apache/shardingsphere/mode/repository/cluster/etcd/EtcdRepository.java
 
b/mode/type/cluster/repository/provider/etcd/src/main/java/org/apache/shardingsphere/mode/repository/cluster/etcd/EtcdRepository.java
index 004f53e2123..20213cfdb28 100644
--- 
a/mode/type/cluster/repository/provider/etcd/src/main/java/org/apache/shardingsphere/mode/repository/cluster/etcd/EtcdRepository.java
+++ 
b/mode/type/cluster/repository/provider/etcd/src/main/java/org/apache/shardingsphere/mode/repository/cluster/etcd/EtcdRepository.java
@@ -32,7 +32,6 @@ import io.etcd.jetcd.options.WatchOption;
 import io.etcd.jetcd.support.Observers;
 import io.etcd.jetcd.support.Util;
 import io.etcd.jetcd.watch.WatchEvent;
-import lombok.Getter;
 import lombok.SneakyThrows;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.shardingsphere.infra.instance.ComputeNodeInstanceContext;
@@ -47,6 +46,7 @@ import 
org.apache.shardingsphere.mode.repository.cluster.lock.holder.Distributed
 
 import java.nio.charset.StandardCharsets;
 import java.util.List;
+import java.util.Optional;
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.ExecutorService;
@@ -65,7 +65,6 @@ public final class EtcdRepository implements 
ClusterPersistRepository {
     
     private EtcdProperties etcdProps;
     
-    @Getter
     private DistributedLockHolder distributedLockHolder;
     
     @Override
@@ -133,6 +132,11 @@ public final class EtcdRepository implements 
ClusterPersistRepository {
         return true;
     }
     
+    @Override
+    public Optional<DistributedLockHolder> getDistributedLockHolder() {
+        return Optional.of(distributedLockHolder);
+    }
+    
     private void buildParentPath(final String key) throws ExecutionException, 
InterruptedException {
         StringBuilder parentPath = new StringBuilder();
         String[] partPath = key.split(PATH_SEPARATOR);
diff --git 
a/mode/type/cluster/repository/provider/zookeeper/src/main/java/org/apache/shardingsphere/mode/repository/cluster/zookeeper/ZookeeperRepository.java
 
b/mode/type/cluster/repository/provider/zookeeper/src/main/java/org/apache/shardingsphere/mode/repository/cluster/zookeeper/ZookeeperRepository.java
index 4c2af1a8185..e38d39ff0f1 100644
--- 
a/mode/type/cluster/repository/provider/zookeeper/src/main/java/org/apache/shardingsphere/mode/repository/cluster/zookeeper/ZookeeperRepository.java
+++ 
b/mode/type/cluster/repository/provider/zookeeper/src/main/java/org/apache/shardingsphere/mode/repository/cluster/zookeeper/ZookeeperRepository.java
@@ -18,7 +18,6 @@
 package org.apache.shardingsphere.mode.repository.cluster.zookeeper;
 
 import com.google.common.base.Strings;
-import lombok.Getter;
 import org.apache.curator.framework.CuratorFramework;
 import org.apache.curator.framework.CuratorFrameworkFactory;
 import org.apache.curator.framework.CuratorFrameworkFactory.Builder;
@@ -69,7 +68,6 @@ public final class ZookeeperRepository implements 
ClusterPersistRepository {
     
     private CuratorFramework client;
     
-    @Getter
     private DistributedLockHolder distributedLockHolder;
     
     @Override
@@ -224,6 +222,11 @@ public final class ZookeeperRepository implements 
ClusterPersistRepository {
         return true;
     }
     
+    @Override
+    public Optional<DistributedLockHolder> getDistributedLockHolder() {
+        return Optional.of(distributedLockHolder);
+    }
+    
     @Override
     public void delete(final String key) {
         try {
diff --git 
a/proxy/bootstrap/src/test/java/org/apache/shardingsphere/proxy/fixture/ProxyPersistRepositoryFixture.java
 
b/proxy/bootstrap/src/test/java/org/apache/shardingsphere/proxy/fixture/ProxyPersistRepositoryFixture.java
index 48ec59d99de..0fc89ded490 100644
--- 
a/proxy/bootstrap/src/test/java/org/apache/shardingsphere/proxy/fixture/ProxyPersistRepositoryFixture.java
+++ 
b/proxy/bootstrap/src/test/java/org/apache/shardingsphere/proxy/fixture/ProxyPersistRepositoryFixture.java
@@ -20,14 +20,15 @@ package org.apache.shardingsphere.proxy.fixture;
 import org.apache.shardingsphere.infra.instance.ComputeNodeInstanceContext;
 import 
org.apache.shardingsphere.mode.repository.cluster.ClusterPersistRepository;
 import 
org.apache.shardingsphere.mode.repository.cluster.ClusterPersistRepositoryConfiguration;
+import 
org.apache.shardingsphere.mode.repository.cluster.core.lock.props.DefaultLockTypedProperties;
 import 
org.apache.shardingsphere.mode.repository.cluster.listener.DataChangedEventListener;
 import 
org.apache.shardingsphere.mode.repository.cluster.lock.holder.DistributedLockHolder;
-import 
org.apache.shardingsphere.mode.repository.cluster.core.lock.props.DefaultLockTypedProperties;
 
 import java.util.Collections;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Optional;
 import java.util.Properties;
 
 public final class ProxyPersistRepositoryFixture implements 
ClusterPersistRepository {
@@ -73,8 +74,8 @@ public final class ProxyPersistRepositoryFixture implements 
ClusterPersistReposi
     }
     
     @Override
-    public DistributedLockHolder getDistributedLockHolder() {
-        return new DistributedLockHolder("default", this, new 
DefaultLockTypedProperties(new Properties()));
+    public Optional<DistributedLockHolder> getDistributedLockHolder() {
+        return Optional.of(new DistributedLockHolder("default", this, new 
DefaultLockTypedProperties(new Properties())));
     }
     
     @Override

Reply via email to