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]