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

(cherry picked from commit 6857a05d6a)
This commit is contained in:
Eric Badger 2021-04-23 22:55:25 +00:00
parent 7ad844ee9e
commit 951ce9b371
2 changed files with 13 additions and 4 deletions

View File

@ -94,6 +94,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;
@ -602,6 +604,11 @@ public class CommonNodeLabelsManager extends AbstractService {
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)
@ -636,6 +643,7 @@ public class CommonNodeLabelsManager extends AbstractService {
node.labels.addAll(labels);
}
addNodeToLabels(node.nodeId, labels);
isNodeLabelFromHost.put(node.nodeId, true);
}
break;
case REPLACE:
@ -645,10 +653,9 @@ public class CommonNodeLabelsManager extends AbstractService {
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);
}
replaceLabelsForNode(node.nodeId, node.labels, labels);
node.labels = null;
isNodeLabelFromHost.put(node.nodeId, true);
}
break;
default:
@ -668,6 +675,7 @@ public class CommonNodeLabelsManager extends AbstractService {
nm.labels = new HashSet<String>();
}
nm.labels.addAll(labels);
isNodeLabelFromHost.put(nm.nodeId, false);
break;
case REPLACE:
oldLabels = getLabelsByNode(nodeId);
@ -678,6 +686,7 @@ public class CommonNodeLabelsManager extends AbstractService {
}
nm.labels.clear();
nm.labels.addAll(labels);
isNodeLabelFromHost.put(nm.nodeId, false);
break;
default:
break;

View File

@ -280,7 +280,7 @@ public class RMNodeLabelsManager extends CommonNodeLabelsManager {
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