From e7fa9abb548129308a13f9bc2150fd6764b6227f Mon Sep 17 00:00:00 2001 From: Andrew Purtell Date: Wed, 15 Nov 2017 16:57:49 -0800 Subject: [PATCH] HBASE-19276 RegionPlan should correctly implement equals and hashCode --- .../org/apache/hadoop/hbase/master/RegionPlan.java | 27 +++++++++++++++------- .../apache/hadoop/hbase/master/TestRegionPlan.java | 7 +++--- 2 files changed, 22 insertions(+), 12 deletions(-) diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/RegionPlan.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/RegionPlan.java index 10252df16e..1bddc26763 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/RegionPlan.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/RegionPlan.java @@ -118,19 +118,30 @@ public class RegionPlan implements Comparable { @Override public int hashCode() { - return getRegionName().hashCode(); + final int prime = 31; + int result = 1; + result = prime * result + ((dest == null) ? 0 : dest.hashCode()); + result = prime * result + ((hri == null) ? 0 : hri.hashCode()); + result = prime * result + ((source == null) ? 0 : source.hashCode()); + return result; } @Override public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj == null || getClass() != obj.getClass()) { - return false; - } + if (this == obj) return true; + if (obj == null) return false; + if (getClass() != obj.getClass()) return false; RegionPlan other = (RegionPlan) obj; - return compareTo(other) == 0; + if (dest == null) { + if (other.dest != null) return false; + } else if (!dest.equals(other.dest)) return false; + if (hri == null) { + if (other.hri != null) return false; + } else if (!hri.equals(other.hri)) return false; + if (source == null) { + if (other.source != null) return false; + } else if (!source.equals(other.source)) return false; + return true; } @Override diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestRegionPlan.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestRegionPlan.java index 8d20179b62..08d3bc6222 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestRegionPlan.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestRegionPlan.java @@ -41,14 +41,13 @@ public class TestRegionPlan { ServerName source = ServerName.valueOf("source", 1234, 2345); ServerName dest = ServerName.valueOf("dest", 1234, 2345); - // Identiy equality + // Identity equality RegionPlan plan = new RegionPlan(hri, source, dest); assertEquals(plan.hashCode(), new RegionPlan(hri, source, dest).hashCode()); assertEquals(plan, new RegionPlan(hri, source, dest)); - // Source and destination not used for equality - assertEquals(plan.hashCode(), new RegionPlan(hri, dest, source).hashCode()); - assertEquals(plan, new RegionPlan(hri, dest, source)); + // Source and destination not used for comparison + assertEquals(0, plan.compareTo(new RegionPlan(hri, dest, source))); // HRI is used for equality HRegionInfo other = new HRegionInfo(TableName.valueOf(name.getMethodName() + "other")); -- 2.13.4