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

szetszwo pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ozone.git


The following commit(s) were added to refs/heads/master by this push:
     new b26620ded2 HDDS-10899. Refactor Lease callbacks (#6715)
b26620ded2 is described below

commit b26620ded24057f369d704a09ca1cf8d415e8dc8
Author: Doroszlai, Attila <[email protected]>
AuthorDate: Wed May 22 17:57:07 2024 +0200

    HDDS-10899. Refactor Lease callbacks (#6715)
---
 .../java/org/apache/hadoop/ozone/lease/Lease.java  | 26 +++++++++-------------
 .../hadoop/ozone/lease/LeaseCallbackExecutor.java  | 14 +++++-------
 .../apache/hadoop/ozone/lease/LeaseManager.java    |  5 ++---
 3 files changed, 19 insertions(+), 26 deletions(-)

diff --git 
a/hadoop-hdds/common/src/main/java/org/apache/hadoop/ozone/lease/Lease.java 
b/hadoop-hdds/common/src/main/java/org/apache/hadoop/ozone/lease/Lease.java
index ccf33019ae..727d792253 100644
--- a/hadoop-hdds/common/src/main/java/org/apache/hadoop/ozone/lease/Lease.java
+++ b/hadoop-hdds/common/src/main/java/org/apache/hadoop/ozone/lease/Lease.java
@@ -19,9 +19,6 @@ package org.apache.hadoop.ozone.lease;
 
 import org.apache.hadoop.util.Time;
 
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
 import java.util.Objects;
 import java.util.concurrent.Callable;
 import java.util.concurrent.atomic.AtomicLong;
@@ -49,9 +46,9 @@ public class Lease<T> {
   private boolean expired;
 
   /**
-   * Functions to be called in case of timeout.
+   * Function to be called in case of timeout.
    */
-  private List<Callable<Void>> callbacks;
+  private Callable<Void> callback;
 
 
   /**
@@ -63,11 +60,7 @@ public class Lease<T> {
    *        Lease lifetime in milliseconds
    */
   public Lease(T resource, long timeout) {
-    this.resource = resource;
-    this.leaseTimeout = new AtomicLong(timeout);
-    this.callbacks = Collections.synchronizedList(new ArrayList<>());
-    this.creationTime = Time.monotonicNow();
-    this.expired = false;
+    this(resource, timeout, null);
   }
 
   /**
@@ -81,8 +74,11 @@ public class Lease<T> {
    *        Callback registered to be triggered when lease expire
    */
   public Lease(T resource, long timeout, Callable<Void> callback) {
-    this(resource, timeout);
-    callbacks.add(callback);
+    this.resource = resource;
+    this.leaseTimeout = new AtomicLong(timeout);
+    this.callback = callback;
+    this.creationTime = Time.monotonicNow();
+    this.expired = false;
   }
 
   /**
@@ -176,15 +172,15 @@ public class Lease<T> {
    *
    * @return callbacks to be executed
    */
-  List<Callable<Void>> getCallbacks() {
-    return callbacks;
+  Callable<Void> getCallback() {
+    return callback;
   }
 
   /**
    * Expires/Invalidates the lease.
    */
   void invalidate() {
-    callbacks = null;
+    callback = null;
     expired = true;
   }
 
diff --git 
a/hadoop-hdds/common/src/main/java/org/apache/hadoop/ozone/lease/LeaseCallbackExecutor.java
 
b/hadoop-hdds/common/src/main/java/org/apache/hadoop/ozone/lease/LeaseCallbackExecutor.java
index 3f2d5fbe97..80ca937c00 100644
--- 
a/hadoop-hdds/common/src/main/java/org/apache/hadoop/ozone/lease/LeaseCallbackExecutor.java
+++ 
b/hadoop-hdds/common/src/main/java/org/apache/hadoop/ozone/lease/LeaseCallbackExecutor.java
@@ -20,7 +20,6 @@ package org.apache.hadoop.ozone.lease;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.util.List;
 import java.util.concurrent.Callable;
 
 /**
@@ -33,19 +32,19 @@ public class LeaseCallbackExecutor<T> implements Runnable {
       LoggerFactory.getLogger(LeaseCallbackExecutor.class);
 
   private final T resource;
-  private final List<Callable<Void>> callbacks;
+  private final Callable<Void> callback;
 
   /**
    * Constructs LeaseCallbackExecutor instance with list of callbacks.
    *
    * @param resource
    *        The resource for which the callbacks are executed
-   * @param callbacks
-   *        Callbacks to be executed by this executor
+   * @param callback
+   *        Callback to be executed by this executor
    */
-  public LeaseCallbackExecutor(T resource, List<Callable<Void>> callbacks) {
+  public LeaseCallbackExecutor(T resource, Callable<Void> callback) {
     this.resource = resource;
-    this.callbacks = callbacks;
+    this.callback = callback;
   }
 
   @Override
@@ -53,7 +52,7 @@ public class LeaseCallbackExecutor<T> implements Runnable {
     if (LOG.isDebugEnabled()) {
       LOG.debug("Executing callbacks for lease on {}", resource);
     }
-    for (Callable<Void> callback : callbacks) {
+    if (callback != null) {
       try {
         callback.call();
       } catch (Exception e) {
@@ -62,5 +61,4 @@ public class LeaseCallbackExecutor<T> implements Runnable {
       }
     }
   }
-
 }
diff --git 
a/hadoop-hdds/common/src/main/java/org/apache/hadoop/ozone/lease/LeaseManager.java
 
b/hadoop-hdds/common/src/main/java/org/apache/hadoop/ozone/lease/LeaseManager.java
index 7dfcf3eb8c..bb4ccc1ac1 100644
--- 
a/hadoop-hdds/common/src/main/java/org/apache/hadoop/ozone/lease/LeaseManager.java
+++ 
b/hadoop-hdds/common/src/main/java/org/apache/hadoop/ozone/lease/LeaseManager.java
@@ -17,7 +17,6 @@
 
 package org.apache.hadoop.ozone.lease;
 
-import java.util.List;
 import java.util.Map;
 import java.util.concurrent.Callable;
 import java.util.concurrent.ConcurrentHashMap;
@@ -268,10 +267,10 @@ public class LeaseManager<T> {
             long remainingTime = lease.getRemainingTime();
             if (remainingTime <= 0) {
               //Lease has timed out
-              List<Callable<Void>> leaseCallbacks = lease.getCallbacks();
+              Callable<Void> leaseCallback = lease.getCallback();
               release(resource);
               executorService.execute(
-                  new LeaseCallbackExecutor<>(resource, leaseCallbacks));
+                  new LeaseCallbackExecutor<>(resource, leaseCallback));
             } else {
               sleepTime = Math.min(remainingTime, sleepTime);
             }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to