YARN-4169. Fix racing condition of TestNodeStatusUpdaterForLabels. (Naganarasimha G R via wangda)
Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/6f606214 Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/6f606214 Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/6f606214 Branch: refs/heads/HDFS-8966 Commit: 6f606214e734d9600bc0f25a63142714f0fea633 Parents: 399ad00 Author: Wangda Tan <wan...@apache.org> Authored: Mon Oct 26 16:36:34 2015 -0700 Committer: Wangda Tan <wan...@apache.org> Committed: Mon Oct 26 16:36:34 2015 -0700 ---------------------------------------------------------------------- hadoop-yarn-project/CHANGES.txt | 3 + .../yarn/nodelabels/NodeLabelTestBase.java | 116 ++++++++++--------- .../nodelabels/TestCommonNodeLabelsManager.java | 6 +- .../nodemanager/NodeStatusUpdaterImpl.java | 5 + .../TestNodeStatusUpdaterForLabels.java | 89 ++++++++------ .../nodelabels/TestRMNodeLabelsManager.java | 34 +++--- 6 files changed, 143 insertions(+), 110 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hadoop/blob/6f606214/hadoop-yarn-project/CHANGES.txt ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/CHANGES.txt b/hadoop-yarn-project/CHANGES.txt index 8a2cfc8..b51d89e 100644 --- a/hadoop-yarn-project/CHANGES.txt +++ b/hadoop-yarn-project/CHANGES.txt @@ -1014,6 +1014,9 @@ Release 2.8.0 - UNRELEASED YARN-4284. condition for AM blacklisting is too narrow (Sangjin Lee via jlowe) + YARN-4169. Fix racing condition of TestNodeStatusUpdaterForLabels. + (Naganarasimha G R via wangda) + Release 2.7.2 - UNRELEASED INCOMPATIBLE CHANGES http://git-wip-us.apache.org/repos/asf/hadoop/blob/6f606214/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/nodelabels/NodeLabelTestBase.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/nodelabels/NodeLabelTestBase.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/nodelabels/NodeLabelTestBase.java index f834d54..1f64e50 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/nodelabels/NodeLabelTestBase.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/nodelabels/NodeLabelTestBase.java @@ -22,8 +22,8 @@ import java.util.Collection; import java.util.HashMap; import java.util.HashSet; import java.util.Map; -import java.util.Set; import java.util.Map.Entry; +import java.util.Set; import org.apache.hadoop.yarn.api.records.NodeId; import org.apache.hadoop.yarn.api.records.NodeLabel; @@ -33,47 +33,48 @@ import com.google.common.collect.ImmutableMap; import com.google.common.collect.Sets; public class NodeLabelTestBase { - public static void assertMapEquals(Map<NodeId, Set<String>> m1, - ImmutableMap<NodeId, Set<String>> m2) { - Assert.assertEquals(m1.size(), m2.size()); - for (NodeId k : m1.keySet()) { - Assert.assertTrue(m2.containsKey(k)); - assertCollectionEquals(m1.get(k), m2.get(k)); + public static void assertMapEquals(Map<NodeId, Set<String>> expected, + ImmutableMap<NodeId, Set<String>> actual) { + Assert.assertEquals(expected.size(), actual.size()); + for (NodeId k : expected.keySet()) { + Assert.assertTrue(actual.containsKey(k)); + assertCollectionEquals(expected.get(k), actual.get(k)); } } - public static void assertLabelInfoMapEquals(Map<NodeId, Set<NodeLabel>> m1, - ImmutableMap<NodeId, Set<NodeLabel>> m2) { - Assert.assertEquals(m1.size(), m2.size()); - for (NodeId k : m1.keySet()) { - Assert.assertTrue(m2.containsKey(k)); - assertNLCollectionEquals(m1.get(k), m2.get(k)); + public static void assertLabelInfoMapEquals( + Map<NodeId, Set<NodeLabel>> expected, + ImmutableMap<NodeId, Set<NodeLabel>> actual) { + Assert.assertEquals(expected.size(), actual.size()); + for (NodeId k : expected.keySet()) { + Assert.assertTrue(actual.containsKey(k)); + assertNLCollectionEquals(expected.get(k), actual.get(k)); } } - public static void assertLabelsToNodesEquals(Map<String, Set<NodeId>> m1, - ImmutableMap<String, Set<NodeId>> m2) { - Assert.assertEquals(m1.size(), m2.size()); - for (String k : m1.keySet()) { - Assert.assertTrue(m2.containsKey(k)); - Set<NodeId> s1 = new HashSet<NodeId>(m1.get(k)); - Set<NodeId> s2 = new HashSet<NodeId>(m2.get(k)); - Assert.assertEquals(s1, s2); - Assert.assertTrue(s1.containsAll(s2)); + public static void assertLabelsToNodesEquals( + Map<String, Set<NodeId>> expected, + ImmutableMap<String, Set<NodeId>> actual) { + Assert.assertEquals(expected.size(), actual.size()); + for (String k : expected.keySet()) { + Assert.assertTrue(actual.containsKey(k)); + Set<NodeId> expectedS1 = new HashSet<>(expected.get(k)); + Set<NodeId> actualS2 = new HashSet<>(actual.get(k)); + Assert.assertEquals(expectedS1, actualS2); + Assert.assertTrue(expectedS1.containsAll(actualS2)); } } public static ImmutableMap<String, Set<NodeId>> transposeNodeToLabels( Map<NodeId, Set<String>> mapNodeToLabels) { - Map<String, Set<NodeId>> mapLabelsToNodes = - new HashMap<String, Set<NodeId>>(); + Map<String, Set<NodeId>> mapLabelsToNodes = new HashMap<>(); for(Entry<NodeId, Set<String>> entry : mapNodeToLabels.entrySet()) { NodeId node = entry.getKey(); Set<String> setLabels = entry.getValue(); for(String label : setLabels) { Set<NodeId> setNode = mapLabelsToNodes.get(label); if (setNode == null) { - setNode = new HashSet<NodeId>(); + setNode = new HashSet<>(); } setNode.add(NodeId.newInstance(node.getHost(), node.getPort())); mapLabelsToNodes.put(label, setNode); @@ -82,28 +83,39 @@ public class NodeLabelTestBase { return ImmutableMap.copyOf(mapLabelsToNodes); } - public static void assertMapContains(Map<NodeId, Set<String>> m1, - ImmutableMap<NodeId, Set<String>> m2) { - for (NodeId k : m2.keySet()) { - Assert.assertTrue(m1.containsKey(k)); - assertCollectionEquals(m1.get(k), m2.get(k)); + public static void assertMapContains(Map<NodeId, Set<String>> expected, + ImmutableMap<NodeId, Set<String>> actual) { + for (NodeId k : actual.keySet()) { + Assert.assertTrue(expected.containsKey(k)); + assertCollectionEquals(expected.get(k), actual.get(k)); } } - public static void assertCollectionEquals(Collection<String> c1, - Collection<String> c2) { - Set<String> s1 = new HashSet<String>(c1); - Set<String> s2 = new HashSet<String>(c2); - Assert.assertEquals(s1, s2); - Assert.assertTrue(s1.containsAll(s2)); + public static void assertCollectionEquals(Collection<String> expected, + Collection<String> actual) { + if (expected == null) { + Assert.assertNull(actual); + } else { + Assert.assertNotNull(actual); + } + Set<String> expectedSet = new HashSet<>(expected); + Set<String> actualSet = new HashSet<>(actual); + Assert.assertEquals(expectedSet, actualSet); + Assert.assertTrue(expectedSet.containsAll(actualSet)); } - public static void assertNLCollectionEquals(Collection<NodeLabel> c1, - Collection<NodeLabel> c2) { - Set<NodeLabel> s1 = new HashSet<NodeLabel>(c1); - Set<NodeLabel> s2 = new HashSet<NodeLabel>(c2); - Assert.assertEquals(s1, s2); - Assert.assertTrue(s1.containsAll(s2)); + public static void assertNLCollectionEquals(Collection<NodeLabel> expected, + Collection<NodeLabel> actual) { + if (expected == null) { + Assert.assertNull(actual); + } else { + Assert.assertNotNull(actual); + } + + Set<NodeLabel> expectedSet = new HashSet<>(expected); + Set<NodeLabel> actualSet = new HashSet<>(actual); + Assert.assertEquals(expectedSet, actualSet); + Assert.assertTrue(expectedSet.containsAll(actualSet)); } @SuppressWarnings("unchecked") @@ -112,12 +124,11 @@ public class NodeLabelTestBase { return set; } - @SuppressWarnings("unchecked") public static Set<NodeLabel> toNodeLabelSet(String... nodeLabelsStr) { if (null == nodeLabelsStr) { return null; } - Set<NodeLabel> labels = new HashSet<NodeLabel>(); + Set<NodeLabel> labels = new HashSet<>(); for (String label : nodeLabelsStr) { labels.add(NodeLabel.newInstance(label)); } @@ -137,14 +148,15 @@ public class NodeLabelTestBase { } public static void assertLabelsInfoToNodesEquals( - Map<NodeLabel, Set<NodeId>> m1, ImmutableMap<NodeLabel, Set<NodeId>> m2) { - Assert.assertEquals(m1.size(), m2.size()); - for (NodeLabel k : m1.keySet()) { - Assert.assertTrue(m2.containsKey(k)); - Set<NodeId> s1 = new HashSet<NodeId>(m1.get(k)); - Set<NodeId> s2 = new HashSet<NodeId>(m2.get(k)); - Assert.assertEquals(s1, s2); - Assert.assertTrue(s1.containsAll(s2)); + Map<NodeLabel, Set<NodeId>> expected, + ImmutableMap<NodeLabel, Set<NodeId>> actual) { + Assert.assertEquals(expected.size(), actual.size()); + for (NodeLabel k : expected.keySet()) { + Assert.assertTrue(actual.containsKey(k)); + Set<NodeId> expectedS1 = new HashSet<>(expected.get(k)); + Set<NodeId> actualS2 = new HashSet<>(actual.get(k)); + Assert.assertEquals(expectedS1, actualS2); + Assert.assertTrue(expectedS1.containsAll(actualS2)); } } } http://git-wip-us.apache.org/repos/asf/hadoop/blob/6f606214/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/nodelabels/TestCommonNodeLabelsManager.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/nodelabels/TestCommonNodeLabelsManager.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/nodelabels/TestCommonNodeLabelsManager.java index 95e9002..35bad4d 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/nodelabels/TestCommonNodeLabelsManager.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/nodelabels/TestCommonNodeLabelsManager.java @@ -280,18 +280,18 @@ public class TestCommonNodeLabelsManager extends NodeLabelTestBase { mgr.removeFromClusterNodeLabels(ImmutableSet.of("p1")); assertMapEquals(mgr.getNodeLabels(), ImmutableMap.of(toNodeId("n2"), toSet("p2"), toNodeId("n3"), toSet("p3"))); - assertCollectionEquals(mgr.lastRemovedlabels, Arrays.asList("p1")); + assertCollectionEquals(Arrays.asList("p1"), mgr.lastRemovedlabels); mgr.removeFromClusterNodeLabels(ImmutableSet.of("p2", "p3")); Assert.assertTrue(mgr.getNodeLabels().isEmpty()); Assert.assertTrue(mgr.getClusterNodeLabelNames().isEmpty()); - assertCollectionEquals(mgr.lastRemovedlabels, Arrays.asList("p2", "p3")); + assertCollectionEquals(Arrays.asList("p2", "p3"), mgr.lastRemovedlabels); } @Test(timeout = 5000) public void testTrimLabelsWhenAddRemoveNodeLabels() throws IOException { mgr.addToCluserNodeLabelsWithDefaultExclusivity(toSet(" p1")); - assertCollectionEquals(mgr.getClusterNodeLabelNames(), toSet("p1")); + assertCollectionEquals(toSet("p1"), mgr.getClusterNodeLabelNames()); mgr.removeFromClusterNodeLabels(toSet("p1 ")); Assert.assertTrue(mgr.getClusterNodeLabelNames().isEmpty()); } http://git-wip-us.apache.org/repos/asf/hadoop/blob/6f606214/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/NodeStatusUpdaterImpl.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/NodeStatusUpdaterImpl.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/NodeStatusUpdaterImpl.java index c43d467..3f8cf32 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/NodeStatusUpdaterImpl.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/NodeStatusUpdaterImpl.java @@ -632,6 +632,11 @@ public class NodeStatusUpdaterImpl extends AbstractService implements } } + @VisibleForTesting + Thread.State getStatusUpdaterThreadState() { + return statusUpdater.getState(); + } + public boolean isContainerRecentlyStopped(ContainerId containerId) { synchronized (recentlyStoppedContainers) { return recentlyStoppedContainers.containsKey(containerId); http://git-wip-us.apache.org/repos/asf/hadoop/blob/6f606214/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/TestNodeStatusUpdaterForLabels.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/TestNodeStatusUpdaterForLabels.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/TestNodeStatusUpdaterForLabels.java index d72eeb0..563104e 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/TestNodeStatusUpdaterForLabels.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/TestNodeStatusUpdaterForLabels.java @@ -23,6 +23,7 @@ import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import java.io.IOException; +import java.lang.Thread.State; import java.nio.ByteBuffer; import java.util.Set; @@ -105,29 +106,19 @@ public class TestNodeStatusUpdaterForLabels extends NodeLabelTestBase { return response; } - public void waitTillHeartbeat() { + public void waitTillHeartbeat() throws InterruptedException { if (receivedNMHeartbeat) { return; } - int i = 10; + int i = 15; while (!receivedNMHeartbeat && i > 0) { synchronized (ResourceTrackerForLabels.class) { if (!receivedNMHeartbeat) { - try { - System.out - .println("In ResourceTrackerForLabels waiting for heartbeat : " - + System.currentTimeMillis()); - ResourceTrackerForLabels.class.wait(500l); - // to avoid race condition, i.e. sendOutofBandHeartBeat can be - // sent before NSU thread has gone to sleep, hence we wait and try - // to resend heartbeat again - nm.getNodeStatusUpdater().sendOutofBandHeartBeat(); - ResourceTrackerForLabels.class.wait(500l); - i--; - } catch (InterruptedException e) { - Assert.fail("Exception caught while waiting for Heartbeat"); - e.printStackTrace(); - } + System.out + .println("In ResourceTrackerForLabels waiting for heartbeat : " + + System.currentTimeMillis()); + ResourceTrackerForLabels.class.wait(200); + i--; } } } @@ -136,18 +127,13 @@ public class TestNodeStatusUpdaterForLabels extends NodeLabelTestBase { } } - public void waitTillRegister() { + public void waitTillRegister() throws InterruptedException { if (receivedNMRegister) { return; } while (!receivedNMRegister) { synchronized (ResourceTrackerForLabels.class) { - try { ResourceTrackerForLabels.class.wait(); - } catch (InterruptedException e) { - Assert.fail("Exception caught while waiting for register"); - e.printStackTrace(); - } } } } @@ -213,7 +199,7 @@ public class TestNodeStatusUpdaterForLabels extends NodeLabelTestBase { return conf; } - @Test + @Test(timeout=20000) public void testNodeStatusUpdaterForNodeLabels() throws InterruptedException, IOException { final ResourceTrackerForLabels resourceTracker = @@ -251,8 +237,8 @@ public class TestNodeStatusUpdaterForLabels extends NodeLabelTestBase { resourceTracker.resetNMHeartbeatReceiveFlag(); nm.start(); resourceTracker.waitTillRegister(); - assertNLCollectionEquals(resourceTracker.labels, - dummyLabelsProviderRef.getNodeLabels()); + assertNLCollectionEquals(dummyLabelsProviderRef.getNodeLabels(), + resourceTracker.labels); resourceTracker.waitTillHeartbeat();// wait till the first heartbeat resourceTracker.resetNMHeartbeatReceiveFlag(); @@ -260,15 +246,14 @@ public class TestNodeStatusUpdaterForLabels extends NodeLabelTestBase { // heartbeat with updated labels dummyLabelsProviderRef.setNodeLabels(toNodeLabelSet("P")); - nm.getNodeStatusUpdater().sendOutofBandHeartBeat(); + sendOutofBandHeartBeat(); resourceTracker.waitTillHeartbeat(); - assertNLCollectionEquals(resourceTracker.labels, - dummyLabelsProviderRef - .getNodeLabels()); + assertNLCollectionEquals(dummyLabelsProviderRef.getNodeLabels(), + resourceTracker.labels); resourceTracker.resetNMHeartbeatReceiveFlag(); // heartbeat without updating labels - nm.getNodeStatusUpdater().sendOutofBandHeartBeat(); + sendOutofBandHeartBeat(); resourceTracker.waitTillHeartbeat(); resourceTracker.resetNMHeartbeatReceiveFlag(); assertNull( @@ -277,7 +262,7 @@ public class TestNodeStatusUpdaterForLabels extends NodeLabelTestBase { // provider return with null labels dummyLabelsProviderRef.setNodeLabels(null); - nm.getNodeStatusUpdater().sendOutofBandHeartBeat(); + sendOutofBandHeartBeat(); resourceTracker.waitTillHeartbeat(); assertNotNull( "If provider sends null then empty label set should be sent and not null", @@ -292,7 +277,7 @@ public class TestNodeStatusUpdaterForLabels extends NodeLabelTestBase { int nonNullLabels = 0; dummyLabelsProviderRef.setNodeLabels(toNodeLabelSet("P1")); for (int i = 0; i < 5; i++) { - nm.getNodeStatusUpdater().sendOutofBandHeartBeat(); + sendOutofBandHeartBeat(); resourceTracker.waitTillHeartbeat(); if (null == resourceTracker.labels) { nullLabels++; @@ -311,7 +296,7 @@ public class TestNodeStatusUpdaterForLabels extends NodeLabelTestBase { nm.stop(); } - @Test + @Test(timeout=20000) public void testInvalidNodeLabelsFromProvider() throws InterruptedException, IOException { final ResourceTrackerForLabels resourceTracker = @@ -353,7 +338,7 @@ public class TestNodeStatusUpdaterForLabels extends NodeLabelTestBase { // heartbeat with invalid labels dummyLabelsProviderRef.setNodeLabels(toNodeLabelSet("_.P")); - nm.getNodeStatusUpdater().sendOutofBandHeartBeat(); + sendOutofBandHeartBeat(); resourceTracker.waitTillHeartbeat(); assertNull("On Invalid Labels we need to retain earlier labels, HB " + "needs to send null", resourceTracker.labels); @@ -362,10 +347,40 @@ public class TestNodeStatusUpdaterForLabels extends NodeLabelTestBase { // on next heartbeat same invalid labels will be given by the provider, but // again label validation check and reset RM with empty labels set should // not happen - nm.getNodeStatusUpdater().sendOutofBandHeartBeat(); + sendOutofBandHeartBeat(); resourceTracker.waitTillHeartbeat(); - resourceTracker.resetNMHeartbeatReceiveFlag(); assertNull("NodeStatusUpdater need not send repeatedly empty labels on " + "invalid labels from provider ", resourceTracker.labels); + resourceTracker.resetNMHeartbeatReceiveFlag(); + } + + /** + * This is to avoid race condition in the test case. NodeStatusUpdater + * heartbeat thread after sending the heartbeat needs some time to process the + * response and then go wait state. But in the test case once the main test + * thread returns back after resourceTracker.waitTillHeartbeat() we proceed + * with next sendOutofBandHeartBeat before heartbeat thread is blocked on + * wait. + * @throws InterruptedException + * @throws IOException + */ + private void sendOutofBandHeartBeat() + throws InterruptedException, IOException { + int i = 0; + do { + State statusUpdaterThreadState = ((NodeStatusUpdaterImpl) nm.getNodeStatusUpdater()) + .getStatusUpdaterThreadState(); + if (statusUpdaterThreadState.equals(Thread.State.TIMED_WAITING) + || statusUpdaterThreadState.equals(Thread.State.WAITING)) { + nm.getNodeStatusUpdater().sendOutofBandHeartBeat(); + break; + } + if (++i <= 10) { + Thread.sleep(50); + } else { + throw new IOException( + "Waited for 500 ms but NodeStatusUpdaterThread not in waiting state"); + } + } while (true); } } http://git-wip-us.apache.org/repos/asf/hadoop/blob/6f606214/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/nodelabels/TestRMNodeLabelsManager.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/nodelabels/TestRMNodeLabelsManager.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/nodelabels/TestRMNodeLabelsManager.java index 47e4830..43fd588 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/nodelabels/TestRMNodeLabelsManager.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/nodelabels/TestRMNodeLabelsManager.java @@ -538,40 +538,39 @@ public class TestRMNodeLabelsManager extends NodeLabelTestBase { // Active/Deactive a node directly assigned label, should not remove from // node->label map mgr.activateNode(toNodeId("n1:1"), SMALL_RESOURCE); - assertCollectionEquals(mgr.getNodeLabels().get(toNodeId("n1:1")), - toSet("p1")); + assertCollectionEquals(toSet("p1"), + mgr.getNodeLabels().get(toNodeId("n1:1"))); mgr.deactivateNode(toNodeId("n1:1")); - assertCollectionEquals(mgr.getNodeLabels().get(toNodeId("n1:1")), - toSet("p1")); + assertCollectionEquals(toSet("p1"), + mgr.getNodeLabels().get(toNodeId("n1:1"))); // Host will not affected - assertCollectionEquals(mgr.getNodeLabels().get(toNodeId("n1")), - toSet("p2")); - + assertCollectionEquals(toSet("p2"), + mgr.getNodeLabels().get(toNodeId("n1"))); + // Active/Deactive a node doesn't directly assigned label, should remove // from node->label map mgr.activateNode(toNodeId("n1:2"), SMALL_RESOURCE); - assertCollectionEquals(mgr.getNodeLabels().get(toNodeId("n1:2")), - toSet("p2")); + assertCollectionEquals(toSet("p2"), + mgr.getNodeLabels().get(toNodeId("n1:2"))); mgr.deactivateNode(toNodeId("n1:2")); Assert.assertNull(mgr.getNodeLabels().get(toNodeId("n1:2"))); // Host will not affected too - assertCollectionEquals(mgr.getNodeLabels().get(toNodeId("n1")), - toSet("p2")); - + assertCollectionEquals(toSet("p2"), + mgr.getNodeLabels().get(toNodeId("n1"))); + // When we change label on the host after active a node without directly // assigned label, such node will still be removed after deactive // Active/Deactive a node doesn't directly assigned label, should remove // from node->label map mgr.activateNode(toNodeId("n1:2"), SMALL_RESOURCE); mgr.replaceLabelsOnNode(ImmutableMap.of(toNodeId("n1"), toSet("p3"))); - assertCollectionEquals(mgr.getNodeLabels().get(toNodeId("n1:2")), - toSet("p3")); + assertCollectionEquals(toSet("p3"), + mgr.getNodeLabels().get(toNodeId("n1:2"))); mgr.deactivateNode(toNodeId("n1:2")); Assert.assertNull(mgr.getNodeLabels().get(toNodeId("n1:2"))); // Host will not affected too - assertCollectionEquals(mgr.getNodeLabels().get(toNodeId("n1")), - toSet("p3")); - + assertCollectionEquals(toSet("p3"), + mgr.getNodeLabels().get(toNodeId("n1"))); } private void checkNodeLabelInfo(List<RMNodeLabel> infos, String labelName, int activeNMs, int memory) { @@ -674,5 +673,4 @@ public class TestRMNodeLabelsManager extends NodeLabelTestBase { assertLabelsToNodesEquals( mgr.getLabelsToNodes(), transposeNodeToLabels(mgr.getNodeLabels())); } - }