You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by cs...@apache.org on 2021/05/28 08:44:07 UTC
[maven-resolver] 01/01: [MRESOLVER-184] Add destroy hook
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
+ }
}