Repository: hadoop Updated Branches: refs/heads/trunk ddc867ceb -> 8acb30b01
YARN-3963. AddNodeLabel on duplicate label addition shows success. (Bibin A Chundatt via wangda) Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/8acb30b0 Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/8acb30b0 Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/8acb30b0 Branch: refs/heads/trunk Commit: 8acb30b0167e498991aef6993df7e36020428844 Parents: ddc867ce Author: Wangda Tan <[email protected]> Authored: Thu Jul 30 09:42:55 2015 -0700 Committer: Wangda Tan <[email protected]> Committed: Thu Jul 30 09:42:55 2015 -0700 ---------------------------------------------------------------------- hadoop-yarn-project/CHANGES.txt | 3 +++ .../nodelabels/CommonNodeLabelsManager.java | 20 +++++++++++++++++++- .../nodelabels/TestCommonNodeLabelsManager.java | 17 ++++++++++++++++- 3 files changed, 38 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hadoop/blob/8acb30b0/hadoop-yarn-project/CHANGES.txt ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/CHANGES.txt b/hadoop-yarn-project/CHANGES.txt index 8e8a76b..4c59da6 100644 --- a/hadoop-yarn-project/CHANGES.txt +++ b/hadoop-yarn-project/CHANGES.txt @@ -710,6 +710,9 @@ Release 2.8.0 - UNRELEASED YARN-3919. NPEs' while stopping service after exception during CommonNodeLabelsManager#start. (varun saxane via rohithsharmaks) + YARN-3963. AddNodeLabel on duplicate label addition shows success. + (Bibin A Chundatt via wangda) + Release 2.7.2 - UNRELEASED INCOMPATIBLE CHANGES http://git-wip-us.apache.org/repos/asf/hadoop/blob/8acb30b0/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/nodelabels/CommonNodeLabelsManager.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/nodelabels/CommonNodeLabelsManager.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/nodelabels/CommonNodeLabelsManager.java index f741f68..34e6832 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/nodelabels/CommonNodeLabelsManager.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/nodelabels/CommonNodeLabelsManager.java @@ -288,7 +288,8 @@ public class CommonNodeLabelsManager extends AbstractService { } List<NodeLabel> newLabels = new ArrayList<NodeLabel>(); normalizeNodeLabels(labels); - + // check any mismatch in exclusivity no mismatch with skip + checkExclusivityMatch(labels); // do a check before actual adding them, will throw exception if any of them // doesn't meet label name requirement for (NodeLabel label : labels) { @@ -931,6 +932,23 @@ public class CommonNodeLabelsManager extends AbstractService { } } + private void checkExclusivityMatch(Collection<NodeLabel> labels) + throws IOException { + ArrayList<NodeLabel> mismatchlabels = new ArrayList<NodeLabel>(); + for (NodeLabel label : labels) { + RMNodeLabel rmNodeLabel = this.labelCollections.get(label.getName()); + if (rmNodeLabel != null + && rmNodeLabel.getIsExclusive() != label.isExclusive()) { + mismatchlabels.add(label); + } + } + if (mismatchlabels.size() > 0) { + throw new IOException( + "Exclusivity cannot be modified for an existing label with : " + + StringUtils.join(mismatchlabels.iterator(), ",")); + } + } + protected String normalizeLabel(String label) { if (label != null) { return label.trim(); http://git-wip-us.apache.org/repos/asf/hadoop/blob/8acb30b0/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 c25b0bf..95e9002 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 @@ -70,7 +70,22 @@ public class TestCommonNodeLabelsManager extends NodeLabelTestBase { Assert.assertTrue(mgr.getClusterNodeLabelNames().containsAll( Sets.newHashSet("hello", "world", "hello1", "world1"))); - + try { + mgr.addToCluserNodeLabels(Arrays.asList(NodeLabel.newInstance("hello1", + false))); + Assert.fail("IOException not thrown on exclusivity change of labels"); + } catch (Exception e) { + Assert.assertTrue("IOException is expected when exclusivity is modified", + e instanceof IOException); + } + try { + mgr.addToCluserNodeLabels(Arrays.asList(NodeLabel.newInstance("hello1", + true))); + } catch (Exception e) { + Assert.assertFalse( + "IOException not expected when no change in exclusivity", + e instanceof IOException); + } // try to remove null, empty and non-existed label, should fail for (String p : Arrays.asList(null, CommonNodeLabelsManager.NO_LABEL, "xx")) { boolean caught = false;
