Skip to content

Commit

Permalink
Create Trackednode class to store datanodeDetails
Browse files Browse the repository at this point in the history
  • Loading branch information
tejaskriya committed Dec 7, 2023
1 parent a0a0953 commit 4223bde
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 15 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,6 @@ public interface DatanodeAdminMonitor extends Runnable {

void startMonitoring(DatanodeDetails dn);
void stopMonitoring(DatanodeDetails dn);
Set<DatanodeDetails> getTrackedNodes();
Set<DatanodeAdminMonitorImpl.TrackedNode> getTrackedNodes();
void setMetrics(NodeDecommissionMetrics metrics);
}
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ public class DatanodeAdminMonitorImpl implements DatanodeAdminMonitor {
private ReplicationManager replicationManager;
private Queue<DatanodeDetails> pendingNodes = new ArrayDeque();
private Queue<DatanodeDetails> cancelledNodes = new ArrayDeque();
private Set<DatanodeDetails> trackedNodes = new HashSet<>();
private Set<TrackedNode> trackedNodes = new HashSet<>();
private NodeDecommissionMetrics metrics;
private long pipelinesWaitingToClose = 0;
private long sufficientlyReplicatedContainers = 0;
Expand All @@ -87,6 +87,24 @@ public class DatanodeAdminMonitorImpl implements DatanodeAdminMonitor {
private long unhealthyContainers = 0;
private long underReplicatedContainers = 0;

public static final class TrackedNode {

private DatanodeDetails datanodeDetails;

public TrackedNode(DatanodeDetails datanodeDetails) {
this.datanodeDetails = datanodeDetails;
}

@Override
public int hashCode() {
return datanodeDetails.hashCode();
}

public DatanodeDetails getDatanodeDetails() {
return datanodeDetails;
}
}

private Map<String, ContainerStateInWorkflow> containerStateByHost;

private static final Logger LOG =
Expand Down Expand Up @@ -145,7 +163,7 @@ public synchronized void setMetrics(NodeDecommissionMetrics metrics) {
* @return An unmodifiable set of the tracked nodes.
*/
@Override
public synchronized Set<DatanodeDetails> getTrackedNodes() {
public synchronized Set<TrackedNode> getTrackedNodes() {
return Collections.unmodifiableSet(trackedNodes);
}

Expand Down Expand Up @@ -220,7 +238,7 @@ private void processCancelledNodes() {
while (!cancelledNodes.isEmpty()) {
DatanodeDetails dn = cancelledNodes.poll();
try {
stopTrackingNode(dn);
stopTrackingNode(new TrackedNode(dn));
putNodeBackInService(dn);
LOG.info("Recommissioned node {}", dn);
} catch (NodeNotFoundException e) {
Expand All @@ -237,10 +255,10 @@ private void processPendingNodes() {

private void processTransitioningNodes() {
resetContainerMetrics();
Iterator<DatanodeDetails> iterator = trackedNodes.iterator();
Iterator<TrackedNode> iterator = trackedNodes.iterator();

while (iterator.hasNext()) {
DatanodeDetails dn = iterator.next();
DatanodeDetails dn = iterator.next().getDatanodeDetails();
try {
NodeStatus status = getNodeStatus(dn);

Expand Down Expand Up @@ -462,10 +480,10 @@ private void completeMaintenance(DatanodeDetails dn)

private void startTrackingNode(DatanodeDetails dn) {
eventQueue.fireEvent(SCMEvents.START_ADMIN_ON_NODE, dn);
trackedNodes.add(dn);
trackedNodes.add(new TrackedNode(dn));
}

private void stopTrackingNode(DatanodeDetails dn) {
private void stopTrackingNode(TrackedNode dn) {
trackedNodes.remove(dn);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -188,7 +188,6 @@ public void testDecommissionNodeWaitsForContainersToReplicate()
// REPLICATE_CONTAINERS as there are no pipelines to close.
monitor.startMonitoring(dn1);
monitor.run();
DatanodeDetails node = getFirstTrackedNode();
assertEquals(1, monitor.getTrackedNodeCount());
assertEquals(HddsProtos.NodeOperationalState.DECOMMISSIONING,
nodeManager.getNodeStatus(dn1).getOperationalState());
Expand Down Expand Up @@ -414,7 +413,6 @@ public void testDecommissionNodeWithUnrecoverableECContainer()
// REPLICATE_CONTAINERS as there are no pipelines to close.
monitor.startMonitoring(dn1);
monitor.run();
DatanodeDetails node = getFirstTrackedNode();
assertEquals(1, monitor.getTrackedNodeCount());
assertEquals(HddsProtos.NodeOperationalState.DECOMMISSIONING,
nodeManager.getNodeStatus(dn1).getOperationalState());
Expand Down Expand Up @@ -469,7 +467,6 @@ public void testDecommissionAbortedWhenNodeInUnexpectedState()
monitor.startMonitoring(dn1);
monitor.run();
assertEquals(1, monitor.getTrackedNodeCount());
DatanodeDetails node = getFirstTrackedNode();
assertEquals(HddsProtos.NodeOperationalState.DECOMMISSIONING,
nodeManager.getNodeStatus(dn1).getOperationalState());

Expand Down Expand Up @@ -506,7 +503,6 @@ public void testDecommissionAbortedWhenNodeGoesDead()
monitor.startMonitoring(dn1);
monitor.run();
assertEquals(1, monitor.getTrackedNodeCount());
DatanodeDetails node = getFirstTrackedNode();
assertEquals(HddsProtos.NodeOperationalState.DECOMMISSIONING,
nodeManager.getNodeStatus(dn1).getOperationalState());

Expand Down Expand Up @@ -625,7 +621,6 @@ public void testDeadMaintenanceNodeDoesNotAbortWorkflow()
monitor.startMonitoring(dn1);
monitor.run();
assertEquals(1, monitor.getTrackedNodeCount());
DatanodeDetails node = getFirstTrackedNode();
assertTrue(nodeManager.getNodeStatus(dn1).isInMaintenance());

// Set the node dead and ensure the workflow does not end
Expand All @@ -652,7 +647,6 @@ public void testCancelledNodesMovedToInService()
monitor.startMonitoring(dn1);
monitor.run();
assertEquals(1, monitor.getTrackedNodeCount());
DatanodeDetails node = getFirstTrackedNode();
assertTrue(nodeManager.getNodeStatus(dn1).isInMaintenance());

// Now cancel the node and run the monitor, the node should be IN_SERVICE
Expand Down Expand Up @@ -684,6 +678,7 @@ private Set<ContainerID> generateContainers(int count) {
*/
private DatanodeDetails getFirstTrackedNode() {
return
monitor.getTrackedNodes().toArray(new DatanodeDetails[0])[0];
monitor.getTrackedNodes().toArray(
new DatanodeAdminMonitorImpl.TrackedNode[0])[0].getDatanodeDetails();
}
}

0 comments on commit 4223bde

Please sign in to comment.