This is an automated email from the ASF dual-hosted git repository. cstamas pushed a commit to branch MRESOLVER-184-alternate in repository https://gitbox.apache.org/repos/asf/maven-resolver.git
commit 13023925f16a64aa5f299dd829862e0846c117c6 Author: Tamas Cservenak <ta...@cservenak.net> AuthorDate: Fri May 28 10:43:15 2021 +0200 [MRESOLVER-184] Add destroy hook And use this hook in Hz and Redisson implemenetations. Drop redundant code from HZ as well. --- .../HazelcastSemaphoreNamedLockFactory.java | 35 ++++++++++------------ .../RedissonSemaphoreNamedLockFactory.java | 12 ++++++-- .../named/support/NamedLockFactorySupport.java | 4 +-- .../aether/named/support/NamedLockSupport.java | 8 +++++ 4 files changed, 35 insertions(+), 24 deletions(-) diff --git a/maven-resolver-named-locks-hazelcast/src/main/java/org/eclipse/aether/named/hazelcast/HazelcastSemaphoreNamedLockFactory.java b/maven-resolver-named-locks-hazelcast/src/main/java/org/eclipse/aether/named/hazelcast/HazelcastSemaphoreNamedLockFactory.java index cd2336b..11832b9 100644 --- a/maven-resolver-named-locks-hazelcast/src/main/java/org/eclipse/aether/named/hazelcast/HazelcastSemaphoreNamedLockFactory.java +++ b/maven-resolver-named-locks-hazelcast/src/main/java/org/eclipse/aether/named/hazelcast/HazelcastSemaphoreNamedLockFactory.java @@ -26,8 +26,6 @@ import org.eclipse.aether.named.support.AdaptedSemaphoreNamedLock.AdaptedSemapho import org.eclipse.aether.named.support.NamedLockFactorySupport; import org.eclipse.aether.named.support.NamedLockSupport; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.ConcurrentMap; import java.util.concurrent.TimeUnit; import java.util.function.BiFunction; @@ -48,8 +46,6 @@ public class HazelcastSemaphoreNamedLockFactory private final boolean manageHazelcast; - private final ConcurrentMap<String, ISemaphore> semaphores; - public HazelcastSemaphoreNamedLockFactory( final HazelcastInstance hazelcastInstance, final BiFunction<HazelcastInstance, String, ISemaphore> semaphoreFunction, @@ -61,16 +57,27 @@ public class HazelcastSemaphoreNamedLockFactory this.semaphoreFunction = semaphoreFunction; this.destroySemaphore = destroySemaphore; this.manageHazelcast = manageHazelcast; - this.semaphores = new ConcurrentHashMap<>(); } @Override protected NamedLockSupport createLock( final String name ) { - ISemaphore semaphore = semaphores.computeIfAbsent( - name, k -> semaphoreFunction.apply( hazelcastInstance, k ) - ); - return new AdaptedSemaphoreNamedLock( name, this, new HazelcastSemaphore( semaphore ) ); + ISemaphore semaphore = semaphoreFunction.apply( hazelcastInstance, name ); + if ( destroySemaphore ) + { + return new AdaptedSemaphoreNamedLock( name, this, new HazelcastSemaphore( semaphore ) ) + { + @Override + public void destroy() + { + semaphore.destroy(); + } + }; + } + else + { + return new AdaptedSemaphoreNamedLock( name, this, new HazelcastSemaphore( semaphore ) ); + } } @Override @@ -82,16 +89,6 @@ public class HazelcastSemaphoreNamedLockFactory } } - @Override - protected void destroyLock( final NamedLockSupport lock ) - { - ISemaphore semaphore = semaphores.remove( lock.name() ); - if ( destroySemaphore ) - { - semaphore.destroy(); - } - } - private static final class HazelcastSemaphore implements AdaptedSemaphore { private final ISemaphore semaphore; diff --git a/maven-resolver-named-locks-redisson/src/main/java/org/eclipse/aether/named/redisson/RedissonSemaphoreNamedLockFactory.java b/maven-resolver-named-locks-redisson/src/main/java/org/eclipse/aether/named/redisson/RedissonSemaphoreNamedLockFactory.java index bef84cc..5f2207e 100644 --- a/maven-resolver-named-locks-redisson/src/main/java/org/eclipse/aether/named/redisson/RedissonSemaphoreNamedLockFactory.java +++ b/maven-resolver-named-locks-redisson/src/main/java/org/eclipse/aether/named/redisson/RedissonSemaphoreNamedLockFactory.java @@ -40,9 +40,15 @@ public class RedissonSemaphoreNamedLockFactory @Override protected NamedLockSupport createLock( final String name ) { - return new AdaptedSemaphoreNamedLock( - name, this, new RedissonSemaphore( redissonClient.getSemaphore( NAME_PREFIX + name ) ) - ); + RSemaphore semaphore = redissonClient.getSemaphore( NAME_PREFIX + name ); + return new AdaptedSemaphoreNamedLock( name, this, new RedissonSemaphore( semaphore ) ) + { + @Override + public void destroy() + { + semaphore.delete(); + } + }; } private static final class RedissonSemaphore implements AdaptedSemaphoreNamedLock.AdaptedSemaphore diff --git a/maven-resolver-named-locks/src/main/java/org/eclipse/aether/named/support/NamedLockFactorySupport.java b/maven-resolver-named-locks/src/main/java/org/eclipse/aether/named/support/NamedLockFactorySupport.java index ef5a402..c8e3963 100644 --- a/maven-resolver-named-locks/src/main/java/org/eclipse/aether/named/support/NamedLockFactorySupport.java +++ b/maven-resolver-named-locks/src/main/java/org/eclipse/aether/named/support/NamedLockFactorySupport.java @@ -98,9 +98,9 @@ public abstract class NamedLockFactorySupport implements NamedLockFactory protected abstract NamedLockSupport createLock( final String name ); - protected void destroyLock( final NamedLockSupport lock ) + private void destroyLock( final NamedLockSupport lock ) { - // override if needed + lock.destroy(); } private static final class NamedLockHolder diff --git a/maven-resolver-named-locks/src/main/java/org/eclipse/aether/named/support/NamedLockSupport.java b/maven-resolver-named-locks/src/main/java/org/eclipse/aether/named/support/NamedLockSupport.java index 02f9960..edbe4a4 100644 --- a/maven-resolver-named-locks/src/main/java/org/eclipse/aether/named/support/NamedLockSupport.java +++ b/maven-resolver-named-locks/src/main/java/org/eclipse/aether/named/support/NamedLockSupport.java @@ -51,4 +51,12 @@ public abstract class NamedLockSupport implements NamedLock { factory.closeLock( this ); } + + /** + * Some implementations may need to perform some action when the lock is about to be destroyed. + */ + public void destroy() + { + // override if needed + } }