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

sodonnell 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 ec62964e32 HDDS-8167. Inject MoveManager into ContainerBalancer (#4411)
ec62964e32 is described below

commit ec62964e3256708f2b3feb4d699e69dff7e1796d
Author: Siddhant Sangwan <[email protected]>
AuthorDate: Thu Mar 16 20:06:33 2023 +0530

    HDDS-8167. Inject MoveManager into ContainerBalancer (#4411)
---
 .../container/balancer/ContainerBalancerTask.java  |  7 +---
 .../hdds/scm/container/balancer/MoveManager.java   | 37 +---------------------
 .../hdds/scm/server/StorageContainerManager.java   |  9 ++++++
 .../container/balancer/TestContainerBalancer.java  | 10 +-----
 .../balancer/TestContainerBalancerTask.java        | 11 +++----
 .../scm/container/balancer/TestMoveManager.java    |  1 -
 6 files changed, 17 insertions(+), 58 deletions(-)

diff --git 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/balancer/ContainerBalancerTask.java
 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/balancer/ContainerBalancerTask.java
index f46cd466a7..766aa4a2fe 100644
--- 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/balancer/ContainerBalancerTask.java
+++ 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/balancer/ContainerBalancerTask.java
@@ -134,7 +134,7 @@ public class ContainerBalancerTask implements Runnable {
     this.nodeManager = scm.getScmNodeManager();
     this.containerManager = scm.getContainerManager();
     this.replicationManager = scm.getReplicationManager();
-    this.moveManager = new MoveManager(replicationManager, containerManager);
+    this.moveManager = scm.getMoveManager();
     this.ozoneConfiguration = scm.getConfiguration();
     this.containerBalancer = containerBalancer;
     this.config = config;
@@ -1088,11 +1088,6 @@ public class ContainerBalancerTask implements Runnable {
     this.config = config;
   }
 
-  @VisibleForTesting
-  void setMoveManager(MoveManager moveManager) {
-    this.moveManager = moveManager;
-  }
-
   @VisibleForTesting
   void setTaskStatus(Status taskStatus) {
     this.taskStatus = taskStatus;
diff --git 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/balancer/MoveManager.java
 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/balancer/MoveManager.java
index dcba0657ab..895c744122 100644
--- 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/balancer/MoveManager.java
+++ 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/balancer/MoveManager.java
@@ -121,8 +121,6 @@ public final class MoveManager implements
       Pair<CompletableFuture<MoveResult>, MoveDataNodePair>> pendingMoves =
       new ConcurrentHashMap<>();
 
-  private volatile boolean running = false;
-
   public MoveManager(final ReplicationManager replicationManager,
       final ContainerManager containerManager) {
     this.replicationManager = replicationManager;
@@ -193,22 +191,6 @@ public final class MoveManager implements
     }
   }
 
-  /**
-   * notify MoveManager that the current scm has become leader and ready.
-   */
-  public void onLeaderReady() {
-    //discard all stale records
-    pendingMoves.clear();
-    running = true;
-  }
-
-  /**
-   * notify MoveManager that the current scm leader steps down.
-   */
-  public void onNotLeader() {
-    running = false;
-  }
-
   /**
    * move a container replica from source datanode to
    * target datanode. A move is a two part operation. First a replication
@@ -219,17 +201,12 @@ public final class MoveManager implements
    * @param src source datanode
    * @param tgt target datanode
    */
-  public CompletableFuture<MoveResult> move(
+  CompletableFuture<MoveResult> move(
       ContainerID cid, DatanodeDetails src, DatanodeDetails tgt)
       throws ContainerNotFoundException, NodeNotFoundException,
       ContainerReplicaNotFoundException {
     CompletableFuture<MoveResult> ret = new CompletableFuture<>();
 
-    if (!running) {
-      ret.complete(MoveResult.FAIL_LEADER_NOT_READY);
-      return ret;
-    }
-
     // Ensure src and tgt are IN_SERVICE and HEALTHY
     for (DatanodeDetails dn : Arrays.asList(src, tgt)) {
       NodeStatus currentNodeStatus = replicationManager.getNodeStatus(dn);
@@ -333,10 +310,6 @@ public final class MoveManager implements
    */
   private void notifyContainerOpCompleted(ContainerReplicaOp 
containerReplicaOp,
       ContainerID containerID) {
-    if (!running) {
-      return;
-    }
-
     Pair<CompletableFuture<MoveResult>, MoveDataNodePair> pair =
         pendingMoves.get(containerID);
     if (pair != null) {
@@ -365,10 +338,6 @@ public final class MoveManager implements
    */
   private void notifyContainerOpExpired(ContainerReplicaOp containerReplicaOp,
       ContainerID containerID) {
-    if (!running) {
-      return;
-    }
-
     Pair<CompletableFuture<MoveResult>, MoveDataNodePair> pair =
         pendingMoves.get(containerID);
     if (pair != null) {
@@ -513,10 +482,6 @@ public final class MoveManager implements
   @Override
   public void opCompleted(ContainerReplicaOp op, ContainerID containerID,
       boolean timedOut) {
-    if (!running) {
-      return;
-    }
-
     if (timedOut) {
       notifyContainerOpExpired(op, containerID);
     } else {
diff --git 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/StorageContainerManager.java
 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/StorageContainerManager.java
index 035958a39c..d826cb4f28 100644
--- 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/StorageContainerManager.java
+++ 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/StorageContainerManager.java
@@ -46,6 +46,7 @@ import org.apache.hadoop.hdds.scm.container.ContainerManager;
 import org.apache.hadoop.hdds.scm.container.ContainerManagerImpl;
 import org.apache.hadoop.hdds.scm.PlacementPolicyValidateProxy;
 import org.apache.hadoop.hdds.scm.container.ContainerReplica;
+import org.apache.hadoop.hdds.scm.container.balancer.MoveManager;
 import 
org.apache.hadoop.hdds.scm.container.replication.ContainerReplicaPendingOps;
 import 
org.apache.hadoop.hdds.scm.container.replication.DatanodeCommandCountUpdatedHandler;
 import 
org.apache.hadoop.hdds.scm.container.replication.LegacyReplicationManager;
@@ -287,6 +288,8 @@ public final class StorageContainerManager extends 
ServiceRuntimeInfoImpl
   private final SCMHANodeDetails scmHANodeDetails;
 
   private ContainerBalancer containerBalancer;
+  // MoveManager is used by ContainerBalancer to schedule container moves
+  private final MoveManager moveManager;
   private StatefulServiceStateManager statefulServiceStateManager;
   // Used to keep track of pending replication and pending deletes for
   // container replicas.
@@ -403,6 +406,8 @@ public final class StorageContainerManager extends 
ServiceRuntimeInfoImpl
 
     initializeEventHandlers();
 
+    moveManager = new MoveManager(replicationManager, containerManager);
+    containerReplicaPendingOps.registerSubscriber(moveManager);
     containerBalancer = new ContainerBalancer(this);
     LOG.info(containerBalancer.toString());
 
@@ -1768,6 +1773,10 @@ public final class StorageContainerManager extends 
ServiceRuntimeInfoImpl
     return containerBalancer;
   }
 
+  public MoveManager getMoveManager() {
+    return moveManager;
+  }
+
   /**
    * Check if the current scm is the leader and ready for accepting requests.
    * @return - if the current scm is the leader and is ready.
diff --git 
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/balancer/TestContainerBalancer.java
 
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/balancer/TestContainerBalancer.java
index f00c293406..eb4e9ac3f4 100644
--- 
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/balancer/TestContainerBalancer.java
+++ 
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/balancer/TestContainerBalancer.java
@@ -20,13 +20,10 @@ package org.apache.hadoop.hdds.scm.container.balancer;
 
 import com.google.protobuf.ByteString;
 import java.io.IOException;
-import java.time.Clock;
-import java.time.ZoneId;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.concurrent.TimeoutException;
 import org.apache.hadoop.hdds.conf.OzoneConfiguration;
-import org.apache.hadoop.hdds.scm.container.replication.ReplicationManager;
 import org.apache.hadoop.hdds.scm.ha.SCMContext;
 import org.apache.hadoop.hdds.scm.ha.SCMServiceManager;
 import org.apache.hadoop.hdds.scm.ha.StatefulServiceStateManager;
@@ -84,12 +81,7 @@ public class TestContainerBalancer {
     when(scm.getConfiguration()).thenReturn(conf);
     when(scm.getStatefulServiceStateManager()).thenReturn(serviceStateManager);
     when(scm.getSCMServiceManager()).thenReturn(mock(SCMServiceManager.class));
-
-    ReplicationManager replicationManager =
-        Mockito.mock(ReplicationManager.class);
-    when(scm.getReplicationManager()).thenReturn(replicationManager);
-    when(replicationManager.getClock()).thenReturn(
-        Clock.system(ZoneId.systemDefault()));
+    when(scm.getMoveManager()).thenReturn(Mockito.mock(MoveManager.class));
 
     /*
     When StatefulServiceStateManager#saveConfiguration is called, save to
diff --git 
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/balancer/TestContainerBalancerTask.java
 
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/balancer/TestContainerBalancerTask.java
index 1a72b06bb6..9e1c01009b 100644
--- 
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/balancer/TestContainerBalancerTask.java
+++ 
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/balancer/TestContainerBalancerTask.java
@@ -128,6 +128,10 @@ public class TestContainerBalancerTask {
     serviceStateManager = Mockito.mock(StatefulServiceStateManagerImpl.class);
     SCMServiceManager scmServiceManager = 
Mockito.mock(SCMServiceManager.class);
     moveManager = Mockito.mock(MoveManager.class);
+    Mockito.when(moveManager.move(any(ContainerID.class),
+            any(DatanodeDetails.class), any(DatanodeDetails.class)))
+        .thenReturn(CompletableFuture.completedFuture(
+            MoveManager.MoveResult.COMPLETED));
 
     // these configs will usually be specified in each test
     balancerConfiguration =
@@ -194,6 +198,7 @@ public class TestContainerBalancerTask {
     when(scm.getSCMServiceManager()).thenReturn(scmServiceManager);
     when(scm.getPlacementPolicyValidateProxy())
         .thenReturn(placementPolicyValidateProxy);
+    when(scm.getMoveManager()).thenReturn(moveManager);
 
     /*
     When StatefulServiceStateManager#saveConfiguration is called, save to
@@ -219,12 +224,6 @@ public class TestContainerBalancerTask {
     ContainerBalancer sb = new ContainerBalancer(scm);
     containerBalancerTask = new ContainerBalancerTask(scm, 0, sb,
         sb.getMetrics(), balancerConfiguration);
-
-    containerBalancerTask.setMoveManager(moveManager);
-    Mockito.when(moveManager.move(any(ContainerID.class),
-            any(DatanodeDetails.class), any(DatanodeDetails.class)))
-        .thenReturn(CompletableFuture.completedFuture(
-            MoveManager.MoveResult.COMPLETED));
   }
 
   @Test
diff --git 
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/balancer/TestMoveManager.java
 
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/balancer/TestMoveManager.java
index 722d85306b..a55888fe83 100644
--- 
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/balancer/TestMoveManager.java
+++ 
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/balancer/TestMoveManager.java
@@ -110,7 +110,6 @@ public class TestMoveManager {
     Mockito.when(replicationManager.getClock()).thenReturn(clock);
 
     moveManager = new MoveManager(replicationManager, containerManager);
-    moveManager.onLeaderReady();
   }
 
   @Test


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

Reply via email to