YARN-10479. Can't remove all node labels after add node label without

nodemanager port, broken by YARN-10647. Contributed by D M Murali Krishna Reddy
This commit is contained in:
Eric Badger 2021-04-23 22:02:04 +00:00
parent 1cbe35946b
commit 6857a05d6a
2 changed files with 13 additions and 4 deletions

View File

@ -95,6 +95,8 @@ public class CommonNodeLabelsManager extends AbstractService {
new ConcurrentHashMap<String, RMNodeLabel>();
protected ConcurrentMap<String, Host> nodeCollections =
new ConcurrentHashMap<String, Host>();
private ConcurrentMap<NodeId, Boolean> isNodeLabelFromHost =
new ConcurrentHashMap<NodeId, Boolean>();
protected RMNodeLabel noNodeLabel;
@ -603,6 +605,11 @@ private void replaceLabelsForNode(NodeId node, Set<String> oldLabels,
addLabelsToNodeInHost(node, newLabels);
}
protected boolean isNodeLabelExplicit(NodeId nodeId) {
return !isNodeLabelFromHost.containsKey(nodeId) ||
isNodeLabelFromHost.get(nodeId);
}
@SuppressWarnings("unchecked")
protected void internalUpdateLabelsOnNodes(
Map<NodeId, Set<String>> nodeToLabels, NodeLabelUpdateOperation op)
@ -637,6 +644,7 @@ protected void internalUpdateLabelsOnNodes(
node.labels.addAll(labels);
}
addNodeToLabels(node.nodeId, labels);
isNodeLabelFromHost.put(node.nodeId, true);
}
break;
case REPLACE:
@ -646,10 +654,9 @@ protected void internalUpdateLabelsOnNodes(
host.labels.addAll(labels);
for (Node node : host.nms.values()) {
replaceNodeForLabels(node.nodeId, node.labels, labels);
if (node.labels != null) {
replaceLabelsForNode(node.nodeId, node.labels, labels);
}
node.labels = null;
isNodeLabelFromHost.put(node.nodeId, true);
}
break;
default:
@ -669,6 +676,7 @@ protected void internalUpdateLabelsOnNodes(
nm.labels = new HashSet<String>();
}
nm.labels.addAll(labels);
isNodeLabelFromHost.put(nm.nodeId, false);
break;
case REPLACE:
oldLabels = getLabelsByNode(nodeId);
@ -679,6 +687,7 @@ protected void internalUpdateLabelsOnNodes(
}
nm.labels.clear();
nm.labels.addAll(labels);
isNodeLabelFromHost.put(nm.nodeId, false);
break;
default:
break;

View File

@ -275,7 +275,7 @@ public void deactivateNode(NodeId nodeId) {
Map<String, Host> before = cloneNodeMap(ImmutableSet.of(nodeId));
Node nm = getNMInNodeSet(nodeId);
if (null != nm) {
if (null == nm.labels) {
if (isNodeLabelExplicit(nm.nodeId)) {
// When node deactivated, remove the nm from node collection if no
// labels explicitly set for this particular nm