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
+    }
 }