diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/master/RegionState.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/master/RegionState.java index 745e1ea134..1af0cfd3bc 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/master/RegionState.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/master/RegionState.java @@ -218,6 +218,7 @@ public class RegionState { return serverName; } + // TODO: unused public long getRitDuration() { return ritDuration; } @@ -226,6 +227,7 @@ public class RegionState { * Update the duration of region in transition * @param previousStamp previous RegionState's timestamp */ + // TODO: unused @InterfaceAudience.Private void updateRitDuration(long previousStamp) { this.ritDuration += (this.stamp - previousStamp); diff --git a/hbase-hadoop2-compat/src/main/java/org/apache/hadoop/hbase/master/MetricsAssignmentManagerSourceImpl.java b/hbase-hadoop2-compat/src/main/java/org/apache/hadoop/hbase/master/MetricsAssignmentManagerSourceImpl.java index e8ab7d7d46..a702f706a3 100644 --- a/hbase-hadoop2-compat/src/main/java/org/apache/hadoop/hbase/master/MetricsAssignmentManagerSourceImpl.java +++ b/hbase-hadoop2-compat/src/main/java/org/apache/hadoop/hbase/master/MetricsAssignmentManagerSourceImpl.java @@ -82,8 +82,8 @@ public class MetricsAssignmentManagerSourceImpl } @Override - public void setRITOldestAge(final long ritCount) { - ritOldestAgeGauge.set(ritCount); + public void setRITOldestAge(final long ritOldestAge) { + ritOldestAgeGauge.set(ritOldestAge); } @Override diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/AssignmentManager.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/AssignmentManager.java index df26071a5a..2b2208ea48 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/AssignmentManager.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/AssignmentManager.java @@ -1195,7 +1195,16 @@ public class AssignmentManager { private void update(final Collection regions, final long currentTime) { for (RegionState state: regions) { totalRITs++; - final long ritTime = currentTime - state.getStamp(); + final long ritStartedMs = state.getStamp(); + if (ritStartedMs == 0) { + // Don't output bogus values. + // The problem here is that Procedure.lastUpdate is not set until it runs, and that + // there's time when the procedure is set (setProcedure adds the region to RIT) but is + // not yet running. That gap can be long esp. for SCP because it's initializing many + // procedures. So, RegionState ctor with getLastUpdate call will produce a 0 timestamp. + continue; + } + final long ritTime = currentTime - ritStartedMs; if (ritTime > ritThreshold) { if (ritsOverThreshold == null) { ritsOverThreshold = new HashMap();