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

adoroszlai 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 8ac62eb954 HDDS-8813. Prepare for dynamic config in ReplicationManager 
(#4874)
8ac62eb954 is described below

commit 8ac62eb954099bb41cc90cdf9db2a664f23b739f
Author: Doroszlai, Attila <[email protected]>
AuthorDate: Tue Jun 13 07:49:15 2023 +0200

    HDDS-8813. Prepare for dynamic config in ReplicationManager (#4874)
---
 .../replication/OverReplicatedProcessor.java       |   6 +-
 .../container/replication/ReplicationManager.java  | 171 +++++++++------------
 .../replication/UnderReplicatedProcessor.java      |   8 +-
 .../replication/UnhealthyReplicationProcessor.java |  15 +-
 .../replication/TestOverReplicatedProcessor.java   |   2 +-
 .../replication/TestUnderReplicatedProcessor.java  |   2 +-
 6 files changed, 98 insertions(+), 106 deletions(-)

diff --git 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/replication/OverReplicatedProcessor.java
 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/replication/OverReplicatedProcessor.java
index 9868d6e03c..32dfce119d 100644
--- 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/replication/OverReplicatedProcessor.java
+++ 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/replication/OverReplicatedProcessor.java
@@ -18,6 +18,8 @@
 package org.apache.hadoop.hdds.scm.container.replication;
 
 import java.io.IOException;
+import java.time.Duration;
+import java.util.function.Supplier;
 
 /**
  * Class used to pick messages from the ReplicationManager over replicated
@@ -28,8 +30,8 @@ public class OverReplicatedProcessor extends 
UnhealthyReplicationProcessor
         <ContainerHealthResult.OverReplicatedHealthResult> {
 
   public OverReplicatedProcessor(ReplicationManager replicationManager,
-      long intervalInMillis) {
-    super(replicationManager, intervalInMillis);
+      Supplier<Duration> interval) {
+    super(replicationManager, interval);
 
   }
 
diff --git 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/replication/ReplicationManager.java
 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/replication/ReplicationManager.java
index 460655ba39..2cc64f8ed5 100644
--- 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/replication/ReplicationManager.java
+++ 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/replication/ReplicationManager.java
@@ -22,6 +22,7 @@ import com.google.common.annotations.VisibleForTesting;
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import org.apache.commons.lang3.tuple.Pair;
 import org.apache.hadoop.hdds.HddsConfigKeys;
+import org.apache.hadoop.hdds.client.ReplicationConfig;
 import org.apache.hadoop.hdds.conf.Config;
 import org.apache.hadoop.hdds.conf.ConfigGroup;
 import org.apache.hadoop.hdds.conf.ConfigType;
@@ -95,7 +96,6 @@ import static 
org.apache.hadoop.hdds.protocol.DatanodeDetails.isDecommission;
 import static org.apache.hadoop.hdds.protocol.DatanodeDetails.isMaintenance;
 import static 
org.apache.hadoop.hdds.protocol.proto.HddsProtos.NodeState.HEALTHY;
 import static 
org.apache.hadoop.hdds.protocol.proto.HddsProtos.ReplicationType.EC;
-import static 
org.apache.hadoop.hdds.protocol.proto.HddsProtos.ReplicationType.RATIS;
 
 /**
  * Replication Manager (RM) is the one which is responsible for making sure
@@ -190,17 +190,11 @@ public class ReplicationManager implements SCMService {
   private final RatisUnderReplicationHandler ratisUnderReplicationHandler;
   private final RatisOverReplicationHandler ratisOverReplicationHandler;
   private final RatisMisReplicationHandler ratisMisReplicationHandler;
-  private final int maintenanceRedundancy;
-  private final int ratisMaintenanceMinReplicas;
   private Thread underReplicatedProcessorThread;
   private Thread overReplicatedProcessorThread;
   private final UnderReplicatedProcessor underReplicatedProcessor;
   private final OverReplicatedProcessor overReplicatedProcessor;
   private final HealthCheck containerCheckChain;
-  private final int datanodeReplicationLimit;
-  private final int reconstructionCommandWeight;
-  private final int datanodeDeleteLimit;
-  private final double inflightReplicationFactor;
 
   /**
    * Constructs ReplicationManager instance with the given configuration.
@@ -236,7 +230,6 @@ public class ReplicationManager implements SCMService {
     this.running = false;
     this.clock = clock;
     this.containerReport = new ReplicationManagerReport();
-    this.metrics = null;
     this.eventPublisher = eventPublisher;
     this.waitTimeInMillis = conf.getTimeDuration(
         HddsConfigKeys.HDDS_SCM_WAIT_TIME_AFTER_SAFE_MODE_EXIT,
@@ -249,12 +242,6 @@ public class ReplicationManager implements SCMService {
     this.ratisReplicationCheckHandler =
         new RatisReplicationCheckHandler(ratisContainerPlacement);
     this.nodeManager = nodeManager;
-    this.maintenanceRedundancy = rmConf.maintenanceRemainingRedundancy;
-    this.ratisMaintenanceMinReplicas = rmConf.getMaintenanceReplicaMinimum();
-    this.datanodeReplicationLimit = rmConf.getDatanodeReplicationLimit();
-    this.reconstructionCommandWeight = rmConf.getReconstructionCommandWeight();
-    this.datanodeDeleteLimit = rmConf.getDatanodeDeleteLimit();
-    this.inflightReplicationFactor = 
rmConf.getInflightReplicationLimitFactor();
 
     ecUnderReplicationHandler = new ECUnderReplicationHandler(
         ecContainerPlacement, conf, this);
@@ -269,11 +256,9 @@ public class ReplicationManager implements SCMService {
     ratisMisReplicationHandler = new RatisMisReplicationHandler(
         ratisContainerPlacement, conf, this);
     underReplicatedProcessor =
-        new UnderReplicatedProcessor(this,
-            rmConf.getUnderReplicatedInterval());
+        new UnderReplicatedProcessor(this, rmConf::getUnderReplicatedInterval);
     overReplicatedProcessor =
-        new OverReplicatedProcessor(this,
-            rmConf.getOverReplicatedInterval());
+        new OverReplicatedProcessor(this, rmConf::getOverReplicatedInterval);
 
     // Chain together the series of checks that are needed to validate the
     // containers when they are checked by RM.
@@ -386,7 +371,7 @@ public class ReplicationManager implements SCMService {
         break;
       }
       report.increment(c.getState());
-      if (c.getReplicationType() != EC && rmConf.isLegacyEnabled()) {
+      if (rmConf.isLegacyEnabled() && !isEC(c.getReplicationConfig())) {
         legacyReplicationManager.processContainer(c, report);
         continue;
       }
@@ -416,7 +401,8 @@ public class ReplicationManager implements SCMService {
    *         inflight replications allowed across the cluster at any given 
time.
    */
   public long getReplicationInFlightLimit() {
-    if (inflightReplicationFactor <= 0) {
+    final double factor = rmConf.getInflightReplicationLimitFactor();
+    if (factor <= 0) {
       return 0;
     }
     // Any healthy node in the cluster can participate in replication by being
@@ -425,8 +411,8 @@ public class ReplicationManager implements SCMService {
     // dead. Therefore we simply count the number of healthy nodes and include
     // those which are not in service.
     int healthyNodes = nodeManager.getNodeCount(null, HEALTHY);
-    return (long) Math.ceil(
-        healthyNodes * datanodeReplicationLimit * inflightReplicationFactor);
+    return (long) Math.ceil(healthyNodes * rmConf.getDatanodeReplicationLimit()
+        * factor);
   }
 
   /**
@@ -502,12 +488,13 @@ public class ReplicationManager implements SCMService {
     try {
       int commandCount = nodeManager.getTotalDatanodeCommandCount(datanode,
           Type.deleteContainerCommand);
-      if (commandCount >= datanodeDeleteLimit) {
+      int deleteLimit = rmConf.getDatanodeDeleteLimit();
+      if (commandCount >= deleteLimit) {
         metrics.incrDeleteContainerCmdsDeferredTotal();
         throw new CommandTargetOverloadedException("Cannot schedule a delete " 
+
             "container command for container " + container.containerID() +
             " on datanode " + datanode + " as it has too many pending delete " 
+
-            "commands (" + commandCount + ")");
+            "commands (" + commandCount + " > " + deleteLimit + ")");
       }
       sendDeleteCommand(container, replicaIndex, datanode, force);
     } catch (NodeNotFoundException e) {
@@ -561,7 +548,7 @@ public class ReplicationManager implements SCMService {
           "available for reconstruction of " + containerInfo.getContainerID());
     }
     DatanodeDetails target = selectAndOptionallyExcludeDatanode(
-        reconstructionCommandWeight, targetWithCmds);
+        rmConf.getReconstructionCommandWeight(), targetWithCmds);
     sendDatanodeCommand(command, containerInfo, target);
   }
 
@@ -600,9 +587,8 @@ public class ReplicationManager implements SCMService {
         int replicationLimit = getReplicationLimit(dn);
         if (totalCount >= replicationLimit) {
           LOG.debug("Datanode {} has reached the maximum of {} queued " +
-              "commands for state {}, replication + reconstruction * {}: {}",
-              dn, replicationLimit, dn.getPersistedOpState(),
-              reconstructionCommandWeight, totalCount);
+              "commands for state {}: {}",
+              dn, replicationLimit, dn.getPersistedOpState(), totalCount);
           addExcludedNode(dn);
           continue;
         }
@@ -622,7 +608,8 @@ public class ReplicationManager implements SCMService {
         Type.reconstructECContainersCommand);
     int replicateCount = counts.get(Type.replicateContainerCommand);
     int reconstructCount = counts.get(Type.reconstructECContainersCommand);
-    return replicateCount + reconstructCount * reconstructionCommandWeight;
+    return replicateCount +
+        reconstructCount * rmConf.getReconstructionCommandWeight();
   }
 
   /**
@@ -767,32 +754,24 @@ public class ReplicationManager implements SCMService {
         containerID);
     List<ContainerReplicaOp> pendingOps =
         containerReplicaPendingOps.getPendingOps(containerID);
-    if (result.getContainerInfo().getReplicationType() == EC) {
-      if (result.getHealthState()
-          == ContainerHealthResult.HealthState.UNDER_REPLICATED) {
-        return ecUnderReplicationHandler.processAndSendCommands(replicas,
-            pendingOps, result, maintenanceRedundancy);
-      } else if (result.getHealthState()
-          == ContainerHealthResult.HealthState.MIS_REPLICATED) {
-        return ecMisReplicationHandler.processAndSendCommands(replicas,
-            pendingOps, result, maintenanceRedundancy);
-      } else {
-        throw new IllegalArgumentException("Unexpected health state: "
-            + result.getHealthState());
-      }
-    }
+
+    final boolean isEC = 
isEC(result.getContainerInfo().getReplicationConfig());
+    final UnhealthyReplicationHandler handler;
+
     if (result.getHealthState()
         == ContainerHealthResult.HealthState.UNDER_REPLICATED) {
-      return ratisUnderReplicationHandler.processAndSendCommands(replicas,
-          pendingOps, result, ratisMaintenanceMinReplicas);
+      handler = isEC ? ecUnderReplicationHandler
+          : ratisUnderReplicationHandler;
     } else if (result.getHealthState()
         == ContainerHealthResult.HealthState.MIS_REPLICATED) {
-      return ratisMisReplicationHandler.processAndSendCommands(replicas,
-          pendingOps, result, ratisMaintenanceMinReplicas);
+      handler = isEC ? ecMisReplicationHandler : ratisMisReplicationHandler;
     } else {
       throw new IllegalArgumentException("Unexpected health state: "
           + result.getHealthState());
     }
+
+    return handler.processAndSendCommands(replicas, pendingOps, result,
+        getRemainingMaintenanceRedundancy(isEC));
   }
 
   int processOverReplicatedContainer(
@@ -802,12 +781,13 @@ public class ReplicationManager implements SCMService {
         containerID);
     List<ContainerReplicaOp> pendingOps =
         containerReplicaPendingOps.getPendingOps(containerID);
-    if (result.getContainerInfo().getReplicationType() == EC) {
-      return ecOverReplicationHandler.processAndSendCommands(replicas,
-          pendingOps, result, maintenanceRedundancy);
-    }
-    return ratisOverReplicationHandler.processAndSendCommands(replicas,
-        pendingOps, result, ratisMaintenanceMinReplicas);
+
+    final boolean isEC = 
isEC(result.getContainerInfo().getReplicationConfig());
+    final UnhealthyReplicationHandler handler = isEC ? ecOverReplicationHandler
+        : ratisOverReplicationHandler;
+
+    return handler.processAndSendCommands(replicas,
+          pendingOps, result, getRemainingMaintenanceRedundancy(isEC));
   }
 
   public long getScmTerm() throws NotLeaderException {
@@ -858,21 +838,17 @@ public class ReplicationManager implements SCMService {
       throws ContainerNotFoundException {
     synchronized (containerInfo) {
       ContainerID containerID = containerInfo.containerID();
+      final boolean isEC = isEC(containerInfo.getReplicationConfig());
+
       Set<ContainerReplica> replicas = containerManager.getContainerReplicas(
           containerID);
       List<ContainerReplicaOp> pendingOps =
           containerReplicaPendingOps.getPendingOps(containerID);
 
-      // There is a different config for EC and Ratis maintenance
-      // minimum replicas, so we must pass through the correct one.
-      int maintRedundancy = maintenanceRedundancy;
-      if (containerInfo.getReplicationType() == RATIS) {
-        maintRedundancy = ratisMaintenanceMinReplicas;
-      }
       ContainerCheckRequest checkRequest = new ContainerCheckRequest.Builder()
           .setContainerInfo(containerInfo)
           .setContainerReplicas(replicas)
-          .setMaintenanceRedundancy(maintRedundancy)
+          .setMaintenanceRedundancy(getRemainingMaintenanceRedundancy(isEC))
           .setReport(report)
           .setPendingOps(pendingOps)
           .setReplicationQueue(repQueue)
@@ -931,11 +907,10 @@ public class ReplicationManager implements SCMService {
    * interval and processes all the containers in the system.
    */
   private synchronized void run() {
-    final long interval = rmConf.getInterval().toMillis();
     try {
       while (running) {
         processAll();
-        wait(interval);
+        wait(rmConf.getInterval().toMillis());
       }
     } catch (Throwable t) {
       if (t instanceof InterruptedException) {
@@ -958,14 +933,12 @@ public class ReplicationManager implements SCMService {
   public ContainerReplicaCount getContainerReplicaCount(ContainerID 
containerID)
       throws ContainerNotFoundException {
     ContainerInfo container = containerManager.getContainer(containerID);
-    if (container.getReplicationType() == EC) {
-      return getECContainerReplicaCount(container);
-    }
+    final boolean isEC = isEC(container.getReplicationConfig());
 
-    if (rmConf.isLegacyEnabled()) {
+    if (!isEC && rmConf.isLegacyEnabled()) {
       return legacyReplicationManager.getContainerReplicaCount(container);
     } else {
-      return getRatisContainerReplicaCount(container);
+      return getContainerReplicaCount(container, isEC);
     }
   }
 
@@ -977,16 +950,18 @@ public class ReplicationManager implements SCMService {
    */
   public ContainerHealthResult getContainerReplicationHealth(
       ContainerInfo containerInfo, Set<ContainerReplica> replicas) {
-    ContainerCheckRequest.Builder request = new ContainerCheckRequest.Builder()
+    final boolean isEC = isEC(containerInfo.getReplicationConfig());
+    ContainerCheckRequest request = new ContainerCheckRequest.Builder()
         .setContainerInfo(containerInfo)
         .setContainerReplicas(replicas)
-        .setPendingOps(getPendingReplicationOps(containerInfo.containerID()));
-    if (containerInfo.getReplicationConfig().getReplicationType() == EC) {
-      request.setMaintenanceRedundancy(maintenanceRedundancy);
-      return ecReplicationCheckHandler.checkHealth(request.build());
+        .setPendingOps(getPendingReplicationOps(containerInfo.containerID()))
+        .setMaintenanceRedundancy(getRemainingMaintenanceRedundancy(isEC))
+        .build();
+
+    if (isEC) {
+      return ecReplicationCheckHandler.checkHealth(request);
     } else {
-      request.setMaintenanceRedundancy(ratisMaintenanceMinReplicas);
-      return ratisReplicationCheckHandler.checkHealth(request.build());
+      return ratisReplicationCheckHandler.checkHealth(request);
     }
   }
 
@@ -1305,8 +1280,8 @@ public class ReplicationManager implements SCMService {
       return Duration.ofMillis(interval);
     }
 
-    public long getUnderReplicatedInterval() {
-      return underReplicatedInterval;
+    public Duration getUnderReplicatedInterval() {
+      return Duration.ofMillis(underReplicatedInterval);
     }
 
     public void setUnderReplicatedInterval(Duration duration) {
@@ -1317,8 +1292,8 @@ public class ReplicationManager implements SCMService {
       this.overReplicatedInterval = duration.toMillis();
     }
 
-    public long getOverReplicatedInterval() {
-      return overReplicatedInterval;
+    public Duration getOverReplicatedInterval() {
+      return Duration.ofMillis(overReplicatedInterval);
     }
 
     public long getEventTimeout() {
@@ -1466,24 +1441,20 @@ public class ReplicationManager implements SCMService {
     }
   }
 
-  private ECContainerReplicaCount getECContainerReplicaCount(
-      ContainerInfo containerInfo) throws ContainerNotFoundException {
-    Set<ContainerReplica> replicas = containerManager.getContainerReplicas(
-        containerInfo.containerID());
-    List<ContainerReplicaOp> pendingOps =
-        containerReplicaPendingOps.getPendingOps(containerInfo.containerID());
-    return new ECContainerReplicaCount(
-        containerInfo, replicas, pendingOps, maintenanceRedundancy);
-  }
+  private ContainerReplicaCount getContainerReplicaCount(
+      ContainerInfo container, boolean isEC) throws ContainerNotFoundException 
{
 
-  private RatisContainerReplicaCount getRatisContainerReplicaCount(
-      ContainerInfo containerInfo) throws ContainerNotFoundException {
-    Set<ContainerReplica> replicas =
-        containerManager.getContainerReplicas(containerInfo.containerID());
+    ContainerID id = container.containerID();
+    Set<ContainerReplica> replicas = containerManager.getContainerReplicas(id);
     List<ContainerReplicaOp> pendingOps =
-        containerReplicaPendingOps.getPendingOps(containerInfo.containerID());
-    return new RatisContainerReplicaCount(containerInfo, replicas, pendingOps,
-        ratisMaintenanceMinReplicas, false);
+        containerReplicaPendingOps.getPendingOps(id);
+    final int redundancy = getRemainingMaintenanceRedundancy(isEC);
+
+    return isEC
+        ? new ECContainerReplicaCount(container, replicas, pendingOps,
+            redundancy)
+        : new RatisContainerReplicaCount(container, replicas, pendingOps,
+            redundancy, false);
   }
   
   public ContainerReplicaPendingOps getContainerReplicaPendingOps() {
@@ -1492,7 +1463,7 @@ public class ReplicationManager implements SCMService {
 
   private int getReplicationLimit(DatanodeDetails datanode) {
     HddsProtos.NodeOperationalState state = datanode.getPersistedOpState();
-    int limit = datanodeReplicationLimit;
+    int limit = rmConf.getDatanodeReplicationLimit();
     if (isMaintenance(state) || isDecommission(state)) {
       limit = replicationServerConf.scaleOutOfServiceLimit(limit);
     }
@@ -1512,5 +1483,15 @@ public class ReplicationManager implements SCMService {
       throw new IllegalStateException("Unable to find NodeStatus for " + dn, 
e);
     }
   }
+
+  private int getRemainingMaintenanceRedundancy(boolean isEC) {
+    return isEC
+        ? rmConf.getMaintenanceRemainingRedundancy()
+        : rmConf.getMaintenanceReplicaMinimum();
+  }
+
+  private static boolean isEC(ReplicationConfig replicationConfig) {
+    return replicationConfig.getReplicationType() == EC;
+  }
 }
 
diff --git 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/replication/UnderReplicatedProcessor.java
 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/replication/UnderReplicatedProcessor.java
index 20ff8fdff0..cb52714f49 100644
--- 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/replication/UnderReplicatedProcessor.java
+++ 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/replication/UnderReplicatedProcessor.java
@@ -18,6 +18,8 @@
 package org.apache.hadoop.hdds.scm.container.replication;
 
 import java.io.IOException;
+import java.time.Duration;
+import java.util.function.Supplier;
 
 /**
  * Class used to pick messages from the ReplicationManager under replicated
@@ -27,9 +29,9 @@ import java.io.IOException;
 public class UnderReplicatedProcessor extends UnhealthyReplicationProcessor
         <ContainerHealthResult.UnderReplicatedHealthResult> {
 
-  public UnderReplicatedProcessor(ReplicationManager replicationManager,
-                                  long intervalInMillis) {
-    super(replicationManager, intervalInMillis);
+  UnderReplicatedProcessor(ReplicationManager replicationManager,
+      Supplier<Duration> interval) {
+    super(replicationManager, interval);
   }
 
   @Override
diff --git 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/replication/UnhealthyReplicationProcessor.java
 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/replication/UnhealthyReplicationProcessor.java
index f237a913f3..1f04edd2ee 100644
--- 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/replication/UnhealthyReplicationProcessor.java
+++ 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/replication/UnhealthyReplicationProcessor.java
@@ -25,9 +25,11 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import java.io.IOException;
+import java.time.Duration;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
+import java.util.function.Supplier;
 
 /**
  * Class used to pick messages from the respective ReplicationManager
@@ -41,12 +43,12 @@ public abstract class 
UnhealthyReplicationProcessor<HealthResult extends
           .getLogger(UnhealthyReplicationProcessor.class);
   private final ReplicationManager replicationManager;
   private volatile boolean runImmediately = false;
-  private final long intervalInMillis;
+  private final Supplier<Duration> interval;
 
   public UnhealthyReplicationProcessor(ReplicationManager replicationManager,
-                                       long intervalInMillis) {
+                                       Supplier<Duration> interval) {
     this.replicationManager = replicationManager;
-    this.intervalInMillis = intervalInMillis;
+    this.interval = interval;
   }
 
   /**
@@ -160,9 +162,14 @@ public abstract class 
UnhealthyReplicationProcessor<HealthResult extends
         if (replicationManager.shouldRun()) {
           processAll(replicationManager.getQueue());
         }
+
+        final Duration duration = interval.get();
+        if (!runImmediately && LOG.isDebugEnabled()) {
+          LOG.debug("May wait {} before next run", duration);
+        }
         synchronized (this) {
           if (!runImmediately) {
-            wait(intervalInMillis);
+            wait(duration.toMillis());
           }
           runImmediately = false;
         }
diff --git 
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/replication/TestOverReplicatedProcessor.java
 
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/replication/TestOverReplicatedProcessor.java
index 65d517fbb3..3ef1c8f989 100644
--- 
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/replication/TestOverReplicatedProcessor.java
+++ 
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/replication/TestOverReplicatedProcessor.java
@@ -55,7 +55,7 @@ public class TestOverReplicatedProcessor {
     queue = new ReplicationQueue();
     repConfig = new ECReplicationConfig(3, 2);
     overReplicatedProcessor = new OverReplicatedProcessor(
-        replicationManager, rmConf.getOverReplicatedInterval());
+        replicationManager, rmConf::getOverReplicatedInterval);
     Mockito.when(replicationManager.shouldRun()).thenReturn(true);
 
     // Even through the limit has been exceeded, it should not stop over-rep
diff --git 
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/replication/TestUnderReplicatedProcessor.java
 
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/replication/TestUnderReplicatedProcessor.java
index 60584a3e88..d7c3f220a4 100644
--- 
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/replication/TestUnderReplicatedProcessor.java
+++ 
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/replication/TestUnderReplicatedProcessor.java
@@ -56,7 +56,7 @@ public class TestUnderReplicatedProcessor {
     queue = new ReplicationQueue();
     repConfig = new ECReplicationConfig(3, 2);
     underReplicatedProcessor = new UnderReplicatedProcessor(
-        replicationManager, rmConf.getUnderReplicatedInterval());
+        replicationManager, rmConf::getUnderReplicatedInterval);
     Mockito.when(replicationManager.shouldRun()).thenReturn(true);
     Mockito.when(replicationManager.getMetrics())
         .thenReturn(ReplicationManagerMetrics.create(replicationManager));


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

Reply via email to