From 0f1498e5a4fccaaa8ec2e9189d02715159642fe6 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 --- .../hbase/regionserver/MetricsRegionAggregateSourceImpl.java | 7 ++++++- .../hadoop/hbase/regionserver/MetricsRegionSourceImpl.java | 9 ++++++--- 2 files changed, 12 insertions(+), 4 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..1fc946e 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 @@ -265,12 +268,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