From fe125185f161b8ee71de5e59f6ad4f926f64a68d Mon Sep 17 00:00:00 2001 From: Elliott Clark Date: Mon, 24 Aug 2015 10:09:10 -0700 Subject: [PATCH] HBASE-14278 Fix NPE that is showing up since HBASE-14274 went in --- .../regionserver/MetricsRegionAggregateSourceImpl.java | 7 ++++++- .../hbase/regionserver/MetricsRegionSourceImpl.java | 15 ++++++++++----- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/hbase-hadoop2-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionAggregateSourceImpl.java b/hbase-hadoop2-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionAggregateSourceImpl.java index 009fa9c..172bda5 100644 --- a/hbase-hadoop2-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionAggregateSourceImpl.java +++ b/hbase-hadoop2-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionAggregateSourceImpl.java @@ -67,7 +67,12 @@ public class MetricsRegionAggregateSourceImpl extends BaseSourceImpl @Override public void deregister(MetricsRegionSource toRemove) { - regionSources.remove(toRemove); + try { + regionSources.remove(toRemove); + } catch (Exception e) { + // Ignored. If this errors out it means that someone is double + // closing the region source and the region is already nulled out. + } clearCache(); } diff --git a/hbase-hadoop2-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionSourceImpl.java b/hbase-hadoop2-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionSourceImpl.java index 0da6bf8..62e53c1 100644 --- a/hbase-hadoop2-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionSourceImpl.java +++ b/hbase-hadoop2-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionSourceImpl.java @@ -65,6 +65,7 @@ public class MetricsRegionSourceImpl implements MetricsRegionSource { private final MutableCounterLong regionAppend; private final MutableHistogram regionGet; private final MutableHistogram regionScanNext; + private final int hashCode; public MetricsRegionSourceImpl(MetricsRegionWrapper regionWrapper, MetricsRegionAggregateSourceImpl aggregate) { @@ -101,6 +102,8 @@ public class MetricsRegionSourceImpl implements MetricsRegionSource { regionScanNextKey = regionNamePrefix + MetricsRegionServerSource.SCAN_NEXT_KEY; regionScanNext = registry.newHistogram(regionScanNextKey); + + hashCode = regionWrapper.getRegionHashCode(); } @Override @@ -177,8 +180,10 @@ public class MetricsRegionSourceImpl implements MetricsRegionSource { return -1; MetricsRegionSourceImpl impl = (MetricsRegionSourceImpl) source; - return this.regionWrapper.getRegionName() - .compareTo(impl.regionWrapper.getRegionName()); + if (impl == null) + return -1; + + return Long.compare(hashCode, impl.hashCode); } void snapshot(MetricsRecordBuilder mrb, boolean ignored) { @@ -265,12 +270,12 @@ public class MetricsRegionSourceImpl implements MetricsRegionSource { @Override public int hashCode() { - return regionWrapper.getRegionHashCode(); + return hashCode; } @Override public boolean equals(Object obj) { - if (obj == this) return true; - return obj instanceof MetricsRegionSourceImpl && compareTo((MetricsRegionSourceImpl) obj) == 0; + return obj == this || + (obj instanceof MetricsRegionSourceImpl && compareTo((MetricsRegionSourceImpl) obj) == 0); } } -- 2.5.0