From 2e61ed306f1d525096a800f28546601ef585a832 Mon Sep 17 00:00:00 2001 From: Vinod Kumar Vavilapalli Date: Mon, 19 Sep 2011 14:17:56 +0000 Subject: [PATCH] MAPREDUCE-3030. Fixed a bug in NodeId.equals() that was causing RM to reject all NMs. Contributed by Devaraj K. git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/trunk@1172638 13f79535-47bb-0310-9956-ffa450edef68 --- hadoop-mapreduce-project/CHANGES.txt | 3 + .../hadoop/yarn/api/records/NodeId.java | 2 +- .../apache/hadoop/yarn/api/TestNodeId.java | 56 +++++++++++++++++++ 3 files changed, 60 insertions(+), 1 deletion(-) create mode 100644 hadoop-mapreduce-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/api/TestNodeId.java diff --git a/hadoop-mapreduce-project/CHANGES.txt b/hadoop-mapreduce-project/CHANGES.txt index 00267a72ef..9ebe8c3086 100644 --- a/hadoop-mapreduce-project/CHANGES.txt +++ b/hadoop-mapreduce-project/CHANGES.txt @@ -1348,6 +1348,9 @@ Release 0.23.0 - Unreleased MAPREDUCE-2925. Fixed Yarn+MR client code to behave saner with completed jobs. (Devaraj K via vinodkv) + MAPREDUCE-3030. Fixed a bug in NodeId.equals() that was causing RM to + reject all NMs. (Devaraj K via vinodkv) + Release 0.22.0 - Unreleased INCOMPATIBLE CHANGES diff --git a/hadoop-mapreduce-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/NodeId.java b/hadoop-mapreduce-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/NodeId.java index ffda0d9884..112ea0796d 100644 --- a/hadoop-mapreduce-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/NodeId.java +++ b/hadoop-mapreduce-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/NodeId.java @@ -76,7 +76,7 @@ public int hashCode() { public boolean equals(Object obj) { if (this == obj) return true; - if (!super.equals(obj)) + if (obj == null) return false; if (getClass() != obj.getClass()) return false; diff --git a/hadoop-mapreduce-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/api/TestNodeId.java b/hadoop-mapreduce-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/api/TestNodeId.java new file mode 100644 index 0000000000..641d6250b9 --- /dev/null +++ b/hadoop-mapreduce-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/api/TestNodeId.java @@ -0,0 +1,56 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.hadoop.yarn.api; + +import junit.framework.Assert; + +import org.apache.hadoop.yarn.api.records.NodeId; +import org.apache.hadoop.yarn.util.Records; +import org.junit.Test; + +public class TestNodeId { + @Test + public void testNodeId() { + NodeId nodeId1 = createNodeId("10.18.52.124", 45454); + NodeId nodeId2 = createNodeId("10.18.52.125", 45452); + NodeId nodeId3 = createNodeId("10.18.52.124", 45454); + NodeId nodeId4 = createNodeId("10.18.52.124", 45453); + + Assert.assertTrue(nodeId1.equals(nodeId3)); + Assert.assertFalse(nodeId1.equals(nodeId2)); + Assert.assertFalse(nodeId3.equals(nodeId4)); + + Assert.assertTrue(nodeId1.compareTo(nodeId3) == 0); + Assert.assertTrue(nodeId1.compareTo(nodeId2) < 0); + Assert.assertTrue(nodeId3.compareTo(nodeId4) > 0); + + Assert.assertTrue(nodeId1.hashCode() == nodeId3.hashCode()); + Assert.assertFalse(nodeId1.hashCode() == nodeId2.hashCode()); + Assert.assertFalse(nodeId3.hashCode() == nodeId4.hashCode()); + + Assert.assertEquals("10.18.52.124:45454", nodeId1.toString()); + } + + private NodeId createNodeId(String host, int port) { + NodeId nodeId = Records.newRecord(NodeId.class); + nodeId.setHost(host); + nodeId.setPort(port); + return nodeId; + } +}