You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by yx...@apache.org on 2022/11/03 09:40:06 UTC

[shardingsphere] branch master updated: Use ConcurrentHashMap to instead of sync in DistributedLockHolder (#21919)

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

yx9o 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 58e912d6d13 Use ConcurrentHashMap to instead of sync in DistributedLockHolder (#21919)
58e912d6d13 is described below

commit 58e912d6d13f8129c032a9f1f0b749f76e874ba6
Author: Liang Zhang <zh...@apache.org>
AuthorDate: Thu Nov 3 17:40:00 2022 +0800

    Use ConcurrentHashMap to instead of sync in DistributedLockHolder (#21919)
    
    * Remove static code assertions for AtomikosTransactionManagerProviderTest
    
    * Use ConcurrentHashMap to instead of sync in DistributedLockHolder
    
    * Use ConcurrentHashMap to instead of sync in DistributedLockHolder
    
    * fix test case
    
    * Refactor DistributedLockHolder.locks's data type
    
    * revert test case
---
 .../lock/{ => creator}/DistributedLockCreator.java     |  3 ++-
 .../{ => creator}/DistributedLockCreatorFactory.java   |  2 +-
 .../lock/{ => holder}/DistributedLockHolder.java       | 18 ++++++++----------
 .../repository/cluster/consul/ConsulRepository.java    |  2 +-
 .../consul/lock/ConsulDistributedLockCreator.java      |  2 +-
 ...sitory.cluster.lock.creator.DistributedLockCreator} |  0
 .../cluster/consul/ConsulRepositoryTest.java           |  2 +-
 .../mode/repository/cluster/etcd/EtcdRepository.java   |  2 +-
 .../cluster/etcd/lock/EtcdDistributedLockCreator.java  |  2 +-
 ...sitory.cluster.lock.creator.DistributedLockCreator} |  0
 .../cluster/zookeeper/CuratorZookeeperRepository.java  |  2 +-
 .../lock/CuratorZooKeeperDistributedLockCreator.java   |  2 +-
 ...sitory.cluster.lock.creator.DistributedLockCreator} |  0
 .../zookeeper/CuratorZookeeperRepositoryTest.java      |  2 +-
 14 files changed, 19 insertions(+), 20 deletions(-)

diff --git a/mode/type/cluster/repository/api/src/main/java/org/apache/shardingsphere/mode/repository/cluster/lock/DistributedLockCreator.java b/mode/type/cluster/repository/api/src/main/java/org/apache/shardingsphere/mode/repository/cluster/lock/creator/DistributedLockCreator.java
similarity index 90%
rename from mode/type/cluster/repository/api/src/main/java/org/apache/shardingsphere/mode/repository/cluster/lock/DistributedLockCreator.java
rename to mode/type/cluster/repository/api/src/main/java/org/apache/shardingsphere/mode/repository/cluster/lock/creator/DistributedLockCreator.java
index 31909f18131..1824398e324 100644
--- a/mode/type/cluster/repository/api/src/main/java/org/apache/shardingsphere/mode/repository/cluster/lock/DistributedLockCreator.java
+++ b/mode/type/cluster/repository/api/src/main/java/org/apache/shardingsphere/mode/repository/cluster/lock/creator/DistributedLockCreator.java
@@ -15,11 +15,12 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.mode.repository.cluster.lock;
+package org.apache.shardingsphere.mode.repository.cluster.lock.creator;
 
 import org.apache.shardingsphere.infra.util.props.TypedProperties;
 import org.apache.shardingsphere.infra.util.spi.annotation.SingletonSPI;
 import org.apache.shardingsphere.infra.util.spi.type.typed.TypedSPI;
+import org.apache.shardingsphere.mode.repository.cluster.lock.DistributedLock;
 
 /**
  * Distributed lock creator.
diff --git a/mode/type/cluster/repository/api/src/main/java/org/apache/shardingsphere/mode/repository/cluster/lock/DistributedLockCreatorFactory.java b/mode/type/cluster/repository/api/src/main/java/org/apache/shardingsphere/mode/repository/cluster/lock/creator/DistributedLockCreatorFactory.java
similarity index 95%
rename from mode/type/cluster/repository/api/src/main/java/org/apache/shardingsphere/mode/repository/cluster/lock/DistributedLockCreatorFactory.java
rename to mode/type/cluster/repository/api/src/main/java/org/apache/shardingsphere/mode/repository/cluster/lock/creator/DistributedLockCreatorFactory.java
index 3be7532fde6..5a39b8e913f 100644
--- a/mode/type/cluster/repository/api/src/main/java/org/apache/shardingsphere/mode/repository/cluster/lock/DistributedLockCreatorFactory.java
+++ b/mode/type/cluster/repository/api/src/main/java/org/apache/shardingsphere/mode/repository/cluster/lock/creator/DistributedLockCreatorFactory.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.mode.repository.cluster.lock;
+package org.apache.shardingsphere.mode.repository.cluster.lock.creator;
 
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
diff --git a/mode/type/cluster/repository/api/src/main/java/org/apache/shardingsphere/mode/repository/cluster/lock/DistributedLockHolder.java b/mode/type/cluster/repository/api/src/main/java/org/apache/shardingsphere/mode/repository/cluster/lock/holder/DistributedLockHolder.java
similarity index 73%
rename from mode/type/cluster/repository/api/src/main/java/org/apache/shardingsphere/mode/repository/cluster/lock/DistributedLockHolder.java
rename to mode/type/cluster/repository/api/src/main/java/org/apache/shardingsphere/mode/repository/cluster/lock/holder/DistributedLockHolder.java
index 92ca8ef7ce0..05f58a2859f 100644
--- a/mode/type/cluster/repository/api/src/main/java/org/apache/shardingsphere/mode/repository/cluster/lock/DistributedLockHolder.java
+++ b/mode/type/cluster/repository/api/src/main/java/org/apache/shardingsphere/mode/repository/cluster/lock/holder/DistributedLockHolder.java
@@ -15,12 +15,15 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.mode.repository.cluster.lock;
+package org.apache.shardingsphere.mode.repository.cluster.lock.holder;
 
 import org.apache.shardingsphere.infra.util.props.TypedProperties;
+import org.apache.shardingsphere.mode.repository.cluster.lock.DistributedLock;
+import org.apache.shardingsphere.mode.repository.cluster.lock.creator.DistributedLockCreator;
+import org.apache.shardingsphere.mode.repository.cluster.lock.creator.DistributedLockCreatorFactory;
 
-import java.util.HashMap;
 import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
 
 /**
  * Distributed lock holder.
@@ -40,7 +43,7 @@ public final class DistributedLockHolder {
         creator = DistributedLockCreatorFactory.newInstance(type);
         this.client = client;
         this.props = props;
-        locks = new HashMap<>();
+        locks = new ConcurrentHashMap<>();
     }
     
     /**
@@ -49,12 +52,7 @@ public final class DistributedLockHolder {
      * @param lockKey lock key
      * @return distributed lock
      */
-    public synchronized DistributedLock getDistributedLock(final String lockKey) {
-        DistributedLock result = locks.get(lockKey);
-        if (null == result) {
-            result = creator.create(lockKey, client, props);
-            locks.put(lockKey, result);
-        }
-        return result;
+    public DistributedLock getDistributedLock(final String lockKey) {
+        return locks.computeIfAbsent(lockKey, key -> creator.create(key, client, props));
     }
 }
diff --git a/mode/type/cluster/repository/provider/consul/src/main/java/org/apache/shardingsphere/mode/repository/cluster/consul/ConsulRepository.java b/mode/type/cluster/repository/provider/consul/src/main/java/org/apache/shardingsphere/mode/repository/cluster/consul/ConsulRepository.java
index 3734851fc23..3900527e258 100644
--- a/mode/type/cluster/repository/provider/consul/src/main/java/org/apache/shardingsphere/mode/repository/cluster/consul/ConsulRepository.java
+++ b/mode/type/cluster/repository/provider/consul/src/main/java/org/apache/shardingsphere/mode/repository/cluster/consul/ConsulRepository.java
@@ -33,7 +33,7 @@ import org.apache.shardingsphere.mode.repository.cluster.consul.props.ConsulProp
 import org.apache.shardingsphere.mode.repository.cluster.consul.props.ConsulPropertyKey;
 import org.apache.shardingsphere.mode.repository.cluster.listener.DataChangedEvent;
 import org.apache.shardingsphere.mode.repository.cluster.listener.DataChangedEventListener;
-import org.apache.shardingsphere.mode.repository.cluster.lock.DistributedLockHolder;
+import org.apache.shardingsphere.mode.repository.cluster.lock.holder.DistributedLockHolder;
 
 import java.util.Collection;
 import java.util.Collections;
diff --git a/mode/type/cluster/repository/provider/consul/src/main/java/org/apache/shardingsphere/mode/repository/cluster/consul/lock/ConsulDistributedLockCreator.java b/mode/type/cluster/repository/provider/consul/src/main/java/org/apache/shardingsphere/mode/repository/cluster/consul/lock/ConsulDistributedLockCreator.java
index 33ad78742f3..cd98e7792fb 100644
--- a/mode/type/cluster/repository/provider/consul/src/main/java/org/apache/shardingsphere/mode/repository/cluster/consul/lock/ConsulDistributedLockCreator.java
+++ b/mode/type/cluster/repository/provider/consul/src/main/java/org/apache/shardingsphere/mode/repository/cluster/consul/lock/ConsulDistributedLockCreator.java
@@ -20,7 +20,7 @@ package org.apache.shardingsphere.mode.repository.cluster.consul.lock;
 import com.ecwid.consul.v1.ConsulClient;
 import org.apache.shardingsphere.mode.repository.cluster.consul.props.ConsulProperties;
 import org.apache.shardingsphere.mode.repository.cluster.lock.DistributedLock;
-import org.apache.shardingsphere.mode.repository.cluster.lock.DistributedLockCreator;
+import org.apache.shardingsphere.mode.repository.cluster.lock.creator.DistributedLockCreator;
 
 /**
  * Consul distributed lock creator.
diff --git a/mode/type/cluster/repository/provider/consul/src/main/resources/META-INF.services/org.apache.shardingsphere.mode.repository.cluster.lock.DistributedLockCreator b/mode/type/cluster/repository/provider/consul/src/main/resources/META-INF.services/org.apache.shardingsphere.mode.repository.cluster.lock.creator.DistributedLockCreator
similarity index 100%
rename from mode/type/cluster/repository/provider/consul/src/main/resources/META-INF.services/org.apache.shardingsphere.mode.repository.cluster.lock.DistributedLockCreator
rename to mode/type/cluster/repository/provider/consul/src/main/resources/META-INF.services/org.apache.shardingsphere.mode.repository.cluster.lock.creator.DistributedLockCreator
diff --git a/mode/type/cluster/repository/provider/consul/src/test/java/org/apache/shardingsphere/mode/repository/cluster/consul/ConsulRepositoryTest.java b/mode/type/cluster/repository/provider/consul/src/test/java/org/apache/shardingsphere/mode/repository/cluster/consul/ConsulRepositoryTest.java
index fb21e902e08..ca58ffd4b16 100644
--- a/mode/type/cluster/repository/provider/consul/src/test/java/org/apache/shardingsphere/mode/repository/cluster/consul/ConsulRepositoryTest.java
+++ b/mode/type/cluster/repository/provider/consul/src/test/java/org/apache/shardingsphere/mode/repository/cluster/consul/ConsulRepositoryTest.java
@@ -24,7 +24,7 @@ import com.ecwid.consul.v1.kv.model.PutParams;
 import com.ecwid.consul.v1.session.model.NewSession;
 import lombok.SneakyThrows;
 import org.apache.shardingsphere.mode.repository.cluster.consul.props.ConsulProperties;
-import org.apache.shardingsphere.mode.repository.cluster.lock.DistributedLockHolder;
+import org.apache.shardingsphere.mode.repository.cluster.lock.holder.DistributedLockHolder;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
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 7a28814114c..cebc5f8dda8 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
@@ -40,7 +40,7 @@ import org.apache.shardingsphere.mode.repository.cluster.etcd.props.EtcdProperty
 import org.apache.shardingsphere.mode.repository.cluster.listener.DataChangedEvent;
 import org.apache.shardingsphere.mode.repository.cluster.listener.DataChangedEvent.Type;
 import org.apache.shardingsphere.mode.repository.cluster.listener.DataChangedEventListener;
-import org.apache.shardingsphere.mode.repository.cluster.lock.DistributedLockHolder;
+import org.apache.shardingsphere.mode.repository.cluster.lock.holder.DistributedLockHolder;
 
 import java.nio.charset.StandardCharsets;
 import java.util.List;
diff --git a/mode/type/cluster/repository/provider/etcd/src/main/java/org/apache/shardingsphere/mode/repository/cluster/etcd/lock/EtcdDistributedLockCreator.java b/mode/type/cluster/repository/provider/etcd/src/main/java/org/apache/shardingsphere/mode/repository/cluster/etcd/lock/EtcdDistributedLockCreator.java
index 3cc0bec7787..fe629e3597c 100644
--- a/mode/type/cluster/repository/provider/etcd/src/main/java/org/apache/shardingsphere/mode/repository/cluster/etcd/lock/EtcdDistributedLockCreator.java
+++ b/mode/type/cluster/repository/provider/etcd/src/main/java/org/apache/shardingsphere/mode/repository/cluster/etcd/lock/EtcdDistributedLockCreator.java
@@ -20,7 +20,7 @@ package org.apache.shardingsphere.mode.repository.cluster.etcd.lock;
 import io.etcd.jetcd.Client;
 import org.apache.shardingsphere.mode.repository.cluster.etcd.props.EtcdProperties;
 import org.apache.shardingsphere.mode.repository.cluster.lock.DistributedLock;
-import org.apache.shardingsphere.mode.repository.cluster.lock.DistributedLockCreator;
+import org.apache.shardingsphere.mode.repository.cluster.lock.creator.DistributedLockCreator;
 
 /**
  * Etcd distributed lock creator.
diff --git a/mode/type/cluster/repository/provider/etcd/src/main/resources/META-INF/services/org.apache.shardingsphere.mode.repository.cluster.lock.DistributedLockCreator b/mode/type/cluster/repository/provider/etcd/src/main/resources/META-INF/services/org.apache.shardingsphere.mode.repository.cluster.lock.creator.DistributedLockCreator
similarity index 100%
rename from mode/type/cluster/repository/provider/etcd/src/main/resources/META-INF/services/org.apache.shardingsphere.mode.repository.cluster.lock.DistributedLockCreator
rename to mode/type/cluster/repository/provider/etcd/src/main/resources/META-INF/services/org.apache.shardingsphere.mode.repository.cluster.lock.creator.DistributedLockCreator
diff --git a/mode/type/cluster/repository/provider/zookeeper-curator/src/main/java/org/apache/shardingsphere/mode/repository/cluster/zookeeper/CuratorZookeeperRepository.java b/mode/type/cluster/repository/provider/zookeeper-curator/src/main/java/org/apache/shardingsphere/mode/repository/cluster/zookeeper/CuratorZookeeperRepository.java
index e9e39e120ab..6716a7292d0 100644
--- a/mode/type/cluster/repository/provider/zookeeper-curator/src/main/java/org/apache/shardingsphere/mode/repository/cluster/zookeeper/CuratorZookeeperRepository.java
+++ b/mode/type/cluster/repository/provider/zookeeper-curator/src/main/java/org/apache/shardingsphere/mode/repository/cluster/zookeeper/CuratorZookeeperRepository.java
@@ -36,7 +36,7 @@ import org.apache.shardingsphere.mode.repository.cluster.exception.ClusterPersis
 import org.apache.shardingsphere.mode.repository.cluster.listener.DataChangedEvent;
 import org.apache.shardingsphere.mode.repository.cluster.listener.DataChangedEvent.Type;
 import org.apache.shardingsphere.mode.repository.cluster.listener.DataChangedEventListener;
-import org.apache.shardingsphere.mode.repository.cluster.lock.DistributedLockHolder;
+import org.apache.shardingsphere.mode.repository.cluster.lock.holder.DistributedLockHolder;
 import org.apache.shardingsphere.mode.repository.cluster.zookeeper.handler.CuratorZookeeperExceptionHandler;
 import org.apache.shardingsphere.mode.repository.cluster.zookeeper.listener.SessionConnectionListener;
 import org.apache.shardingsphere.mode.repository.cluster.zookeeper.props.ZookeeperProperties;
diff --git a/mode/type/cluster/repository/provider/zookeeper-curator/src/main/java/org/apache/shardingsphere/mode/repository/cluster/zookeeper/lock/CuratorZooKeeperDistributedLockCreator.java b/mode/type/cluster/repository/provider/zookeeper-curator/src/main/java/org/apache/shardingsphere/mode/repository/cluster/zookeeper/lock/CuratorZooKeeperDistributedLockCreator.java
index 4831f4f61c2..194eb99d98a 100644
--- a/mode/type/cluster/repository/provider/zookeeper-curator/src/main/java/org/apache/shardingsphere/mode/repository/cluster/zookeeper/lock/CuratorZooKeeperDistributedLockCreator.java
+++ b/mode/type/cluster/repository/provider/zookeeper-curator/src/main/java/org/apache/shardingsphere/mode/repository/cluster/zookeeper/lock/CuratorZooKeeperDistributedLockCreator.java
@@ -19,7 +19,7 @@ package org.apache.shardingsphere.mode.repository.cluster.zookeeper.lock;
 
 import org.apache.curator.framework.CuratorFramework;
 import org.apache.shardingsphere.mode.repository.cluster.lock.DistributedLock;
-import org.apache.shardingsphere.mode.repository.cluster.lock.DistributedLockCreator;
+import org.apache.shardingsphere.mode.repository.cluster.lock.creator.DistributedLockCreator;
 import org.apache.shardingsphere.mode.repository.cluster.zookeeper.props.ZookeeperProperties;
 
 /**
diff --git a/mode/type/cluster/repository/provider/zookeeper-curator/src/main/resources/META-INF/services/org.apache.shardingsphere.mode.repository.cluster.lock.DistributedLockCreator b/mode/type/cluster/repository/provider/zookeeper-curator/src/main/resources/META-INF/services/org.apache.shardingsphere.mode.repository.cluster.lock.creator.DistributedLockCreator
similarity index 100%
rename from mode/type/cluster/repository/provider/zookeeper-curator/src/main/resources/META-INF/services/org.apache.shardingsphere.mode.repository.cluster.lock.DistributedLockCreator
rename to mode/type/cluster/repository/provider/zookeeper-curator/src/main/resources/META-INF/services/org.apache.shardingsphere.mode.repository.cluster.lock.creator.DistributedLockCreator
diff --git a/mode/type/cluster/repository/provider/zookeeper-curator/src/test/java/org/apache/shardingsphere/mode/repository/cluster/zookeeper/CuratorZookeeperRepositoryTest.java b/mode/type/cluster/repository/provider/zookeeper-curator/src/test/java/org/apache/shardingsphere/mode/repository/cluster/zookeeper/CuratorZookeeperRepositoryTest.java
index b4fcd592759..84b87844b73 100644
--- a/mode/type/cluster/repository/provider/zookeeper-curator/src/test/java/org/apache/shardingsphere/mode/repository/cluster/zookeeper/CuratorZookeeperRepositoryTest.java
+++ b/mode/type/cluster/repository/provider/zookeeper-curator/src/test/java/org/apache/shardingsphere/mode/repository/cluster/zookeeper/CuratorZookeeperRepositoryTest.java
@@ -38,7 +38,7 @@ import org.apache.shardingsphere.infra.instance.metadata.proxy.ProxyInstanceMeta
 import org.apache.shardingsphere.mode.repository.cluster.ClusterPersistRepositoryConfiguration;
 import org.apache.shardingsphere.mode.repository.cluster.listener.DataChangedEvent;
 import org.apache.shardingsphere.mode.repository.cluster.listener.DataChangedEvent.Type;
-import org.apache.shardingsphere.mode.repository.cluster.lock.DistributedLockHolder;
+import org.apache.shardingsphere.mode.repository.cluster.lock.holder.DistributedLockHolder;
 import org.apache.shardingsphere.mode.repository.cluster.zookeeper.lock.CuratorZookeeperDistributedLock;
 import org.apache.shardingsphere.mode.repository.cluster.zookeeper.props.ZookeeperProperties;
 import org.apache.shardingsphere.mode.repository.cluster.zookeeper.props.ZookeeperPropertyKey;