|
@@ -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;
|