Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@
import java.util.stream.Collectors;
import org.apache.hadoop.hdds.conf.ConfigurationSource;
import org.apache.hadoop.hdds.protocol.DatanodeDetails;
import org.apache.hadoop.hdds.protocol.DatanodeID;
import org.apache.hadoop.hdds.protocol.proto.HddsProtos;
import org.apache.hadoop.hdds.protocol.proto.HddsProtos.NodeOperationalState;
import org.apache.hadoop.hdds.protocol.proto.HddsProtos.NodeState;
Expand Down Expand Up @@ -309,12 +310,11 @@ public void addNode(DatanodeDetails datanodeDetails,
LayoutVersionProto layoutInfo) throws NodeAlreadyExistsException {
NodeStatus newNodeStatus = newNodeStatus(datanodeDetails, layoutInfo);
nodeStateMap.addNode(datanodeDetails, newNodeStatus, layoutInfo);
UUID dnID = datanodeDetails.getUuid();
try {
updateLastKnownLayoutVersion(datanodeDetails, layoutInfo);
} catch (NodeNotFoundException ex) {
LOG.error("Inconsistent NodeStateMap! Datanode with ID {} was " +
"added but not found in map: {}", dnID, nodeStateMap);
throw new IllegalStateException("Inconsistent NodeStateMap! Datanode "
+ datanodeDetails.getID() + " was added but not found in map: " + nodeStateMap);
}
}

Expand Down Expand Up @@ -374,12 +374,11 @@ public int getPipelinesCount(DatanodeDetails datanodeDetails) {
*/
public DatanodeInfo getNode(DatanodeDetails datanodeDetails)
throws NodeNotFoundException {
return getNode(datanodeDetails.getUuid());
return getNode(datanodeDetails.getID());
}

public DatanodeInfo getNode(UUID uuid)
throws NodeNotFoundException {
return nodeStateMap.getNodeInfo(uuid);
public DatanodeInfo getNode(DatanodeID datanodeID) throws NodeNotFoundException {
return nodeStateMap.getNodeInfo(datanodeID);
}

/**
Expand All @@ -389,7 +388,7 @@ public DatanodeInfo getNode(UUID uuid)
*/
public void updateLastHeartbeatTime(DatanodeDetails datanodeDetails)
throws NodeNotFoundException {
nodeStateMap.getNodeInfo(datanodeDetails.getUuid())
nodeStateMap.getNodeInfo(datanodeDetails.getID())
.updateLastHeartbeatTime();
}

Expand All @@ -403,7 +402,7 @@ public void updateLastHeartbeatTime(DatanodeDetails datanodeDetails)
public void updateLastKnownLayoutVersion(DatanodeDetails datanodeDetails,
LayoutVersionProto layoutInfo)
throws NodeNotFoundException {
nodeStateMap.getNodeInfo(datanodeDetails.getUuid())
nodeStateMap.getNodeInfo(datanodeDetails.getID())
.updateLastKnownLayoutVersion(layoutInfo);
}

Expand All @@ -417,8 +416,7 @@ public void updateLastKnownLayoutVersion(DatanodeDetails datanodeDetails,
public void updateNode(DatanodeDetails datanodeDetails,
LayoutVersionProto layoutInfo)
throws NodeNotFoundException {
DatanodeInfo datanodeInfo =
nodeStateMap.getNodeInfo(datanodeDetails.getUuid());
final DatanodeInfo datanodeInfo = nodeStateMap.getNodeInfo(datanodeDetails.getID());
NodeStatus newNodeStatus = newNodeStatus(datanodeDetails, layoutInfo);
LOG.info("updating node {} from {} to {} with status {}",
datanodeDetails.getUuidString(),
Expand All @@ -440,7 +438,7 @@ public void updateNode(DatanodeDetails datanodeDetails,
*/
public NodeStatus getNodeStatus(DatanodeDetails datanodeDetails)
throws NodeNotFoundException {
return nodeStateMap.getNodeStatus(datanodeDetails.getUuid());
return nodeStateMap.getNodeStatus(datanodeDetails.getID());
}

/**
Expand Down Expand Up @@ -582,12 +580,12 @@ public void setNodeOperationalState(DatanodeDetails dn,
public void setNodeOperationalState(DatanodeDetails dn,
NodeOperationalState newState,
long stateExpiryEpochSec) throws NodeNotFoundException {
DatanodeInfo dni = nodeStateMap.getNodeInfo(dn.getUuid());
final DatanodeID id = dn.getID();
final DatanodeInfo dni = nodeStateMap.getNodeInfo(id);
NodeStatus oldStatus = dni.getNodeStatus();
if (oldStatus.getOperationalState() != newState ||
oldStatus.getOpStateExpiryEpochSeconds() != stateExpiryEpochSec) {
nodeStateMap.updateNodeOperationalState(
dn.getUuid(), newState, stateExpiryEpochSec);
nodeStateMap.updateNodeOperationalState(id, newState, stateExpiryEpochSec);
// This will trigger an event based on the nodes health when the
// operational state changes. Eg a node that was IN_MAINTENANCE goes
// to IN_SERVICE + HEALTHY. This will trigger the HEALTHY node event to
Expand Down Expand Up @@ -680,58 +678,49 @@ public void removePipeline(Pipeline pipeline) {

/**
* Adds the given container to the specified datanode.
*
* @param uuid - datanode uuid
* @param containerId - containerID
* @throws NodeNotFoundException - if datanode is not known. For new datanode
* use addDatanodeInContainerMap call.
*/
public void addContainer(final UUID uuid,
public void addContainer(final DatanodeID datanodeID,
final ContainerID containerId)
throws NodeNotFoundException {
nodeStateMap.addContainer(uuid, containerId);
nodeStateMap.addContainer(datanodeID, containerId);
}

/**
* Removes the given container from the specified datanode.
*
* @param uuid - datanode uuid
* @param containerId - containerID
* @throws NodeNotFoundException - if datanode is not known. For new datanode
* use addDatanodeInContainerMap call.
*/
public void removeContainer(final UUID uuid,
public void removeContainer(final DatanodeID datanodeID,
final ContainerID containerId)
throws NodeNotFoundException {
nodeStateMap.removeContainer(uuid, containerId);
nodeStateMap.removeContainer(datanodeID, containerId);
}

/**
* Update set of containers available on a datanode.
* @param uuid - DatanodeID
* @param containerIds - Set of containerIDs
* @throws NodeNotFoundException - if datanode is not known.
*/
public void setContainers(UUID uuid, Set<ContainerID> containerIds)
public void setContainers(DatanodeID datanodeID, Set<ContainerID> containerIds)
throws NodeNotFoundException {
nodeStateMap.setContainers(uuid, containerIds);
nodeStateMap.setContainers(datanodeID, containerIds);
}

/**
* Return set of containerIDs available on a datanode. This is a copy of the
* set which resides inside NodeStateMap and hence can be modified without
* synchronization or side effects.
* @param uuid - DatanodeID
* @return - set of containerIDs
*/
public Set<ContainerID> getContainers(UUID uuid)
public Set<ContainerID> getContainers(DatanodeID datanodeID)
throws NodeNotFoundException {
return nodeStateMap.getContainers(uuid);
return nodeStateMap.getContainers(datanodeID);
}

public int getContainerCount(UUID uuid)
public int getContainerCount(DatanodeID datanodeID)
throws NodeNotFoundException {
return nodeStateMap.getContainerCount(uuid);
return nodeStateMap.getContainerCount(datanodeID);
}

/**
Expand Down Expand Up @@ -792,7 +781,7 @@ public synchronized void forceNodesToHealthyReadOnly() {
try {
List<DatanodeInfo> nodes = nodeStateMap.getDatanodeInfos(null, HEALTHY);
for (DatanodeInfo node : nodes) {
nodeStateMap.updateNodeHealthState(node.getUuid(),
nodeStateMap.updateNodeHealthState(node.getID(),
HEALTHY_READONLY);
if (state2EventMap.containsKey(HEALTHY_READONLY)) {
// At this point pipeline creation is already frozen and the node's
Expand Down Expand Up @@ -860,7 +849,7 @@ public synchronized void checkNodesHealth() {

try {
for (DatanodeInfo node : nodeStateMap.getAllDatanodeInfos()) {
NodeStatus status = nodeStateMap.getNodeStatus(node.getUuid());
NodeStatus status = nodeStateMap.getNodeStatus(node.getID());
switch (status.getHealth()) {
case HEALTHY:
updateNodeLayoutVersionState(node, layoutMisMatchCondition, status,
Expand Down Expand Up @@ -967,7 +956,7 @@ private void updateNodeState(DatanodeInfo node, Predicate<Long> condition,
NodeState newHealthState = nodeHealthSM.
getNextState(status.getHealth(), lifeCycleEvent);
NodeStatus newStatus =
nodeStateMap.updateNodeHealthState(node.getUuid(), newHealthState);
nodeStateMap.updateNodeHealthState(node.getID(), newHealthState);
fireHealthStateEvent(newStatus.getHealth(), node);
}
} catch (InvalidStateTransitionException e) {
Expand Down Expand Up @@ -1006,7 +995,7 @@ private void updateNodeLayoutVersionState(DatanodeInfo node,
NodeState newHealthState = nodeHealthSM.getNextState(status.getHealth(),
lifeCycleEvent);
NodeStatus newStatus =
nodeStateMap.updateNodeHealthState(node.getUuid(), newHealthState);
nodeStateMap.updateNodeHealthState(node.getID(), newHealthState);
fireHealthStateEvent(newStatus.getHealth(), node);
}
} catch (InvalidStateTransitionException e) {
Expand Down Expand Up @@ -1086,7 +1075,7 @@ ScheduledFuture unpause() {
return healthCheckFuture;
}

protected void removeNode(DatanodeDetails datanodeDetails) {
nodeStateMap.removeNode(datanodeDetails);
protected void removeNode(DatanodeID datanodeID) {
nodeStateMap.removeNode(datanodeID);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -1587,14 +1587,14 @@ public void removePipeline(Pipeline pipeline) {
public void addContainer(final DatanodeDetails datanodeDetails,
final ContainerID containerId)
throws NodeNotFoundException {
nodeStateManager.addContainer(datanodeDetails.getUuid(), containerId);
nodeStateManager.addContainer(datanodeDetails.getID(), containerId);
}

@Override
public void removeContainer(final DatanodeDetails datanodeDetails,
final ContainerID containerId)
throws NodeNotFoundException {
nodeStateManager.removeContainer(datanodeDetails.getUuid(), containerId);
nodeStateManager.removeContainer(datanodeDetails.getID(), containerId);
}

/**
Expand All @@ -1608,8 +1608,7 @@ public void removeContainer(final DatanodeDetails datanodeDetails,
@Override
public void setContainers(DatanodeDetails datanodeDetails,
Set<ContainerID> containerIds) throws NodeNotFoundException {
nodeStateManager.setContainers(datanodeDetails.getUuid(),
containerIds);
nodeStateManager.setContainers(datanodeDetails.getID(), containerIds);
}

/**
Expand All @@ -1623,12 +1622,12 @@ public void setContainers(DatanodeDetails datanodeDetails,
@Override
public Set<ContainerID> getContainers(DatanodeDetails datanodeDetails)
throws NodeNotFoundException {
return nodeStateManager.getContainers(datanodeDetails.getUuid());
return nodeStateManager.getContainers(datanodeDetails.getID());
}

public int getContainerCount(DatanodeDetails datanodeDetails)
throws NodeNotFoundException {
return nodeStateManager.getContainerCount(datanodeDetails.getUuid());
return nodeStateManager.getContainerCount(datanodeDetails.getID());
}

public int getPipeLineCount(DatanodeDetails datanodeDetails)
Expand Down Expand Up @@ -1711,7 +1710,7 @@ public DatanodeDetails getNodeByUuid(UUID uuid) {
}

try {
return nodeStateManager.getNode(uuid);
return nodeStateManager.getNode(DatanodeID.of(uuid));
} catch (NodeNotFoundException e) {
LOG.warn("Cannot find node for uuid {}", uuid);
return null;
Expand Down Expand Up @@ -1850,7 +1849,7 @@ public void removeNode(DatanodeDetails datanodeDetails) throws NodeNotFoundExcep
if (clusterMap.contains(datanodeDetails)) {
clusterMap.remove(datanodeDetails);
}
nodeStateManager.removeNode(datanodeDetails);
nodeStateManager.removeNode(datanodeDetails.getID());
removeFromDnsToDnIdMap(datanodeDetails.getID(), datanodeDetails.getIpAddress());
final List<SCMCommand<?>> cmdList = getCommandQueue(datanodeDetails.getUuid());
LOG.info("Clearing command queue of size {} for DN {}", cmdList.size(), datanodeDetails);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@

package org.apache.hadoop.hdds.scm.node.states;

import org.apache.hadoop.hdds.protocol.DatanodeID;

/**
* This exception represents that the node that is being accessed does not
* exist in NodeStateMap.
Expand All @@ -33,15 +35,10 @@ public NodeNotFoundException() {
}

/**
* Constructs an {@code NodeNotFoundException} with the specified
* detail message.
*
* @param message
* The detail message (which is saved for later retrieval
* by the {@link #getMessage()} method)
* Constructs an {@code NodeNotFoundException} with the given {@link DatanodeID}.
*/
public NodeNotFoundException(String message) {
super(message);
public NodeNotFoundException(DatanodeID datanodeID) {
super("Datanode " + datanodeID + " not found");
}

}
Loading