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