HADOOP-12683. Add number of samples in last interval in snapshot of MutableStat. (Vikram Srivastava via kasha)

This commit is contained in:
Karthik Kambatla 2016-01-13 15:43:47 -08:00
parent 9b33a03900
commit fb64e6051a
3 changed files with 22 additions and 1 deletions

View File

@ -663,6 +663,9 @@ Release 2.9.0 - UNRELEASED
when using kerberos and attempting to bind to any port on the local IP when using kerberos and attempting to bind to any port on the local IP
address (cmccabe) address (cmccabe)
HADOOP-12683. Add number of samples in last interval in snapshot of
MutableStat. (Vikram Srivastava via kasha)
BUG FIXES BUG FIXES
HADOOP-12655. TestHttpServer.testBindAddress bind port range is wider HADOOP-12655. TestHttpServer.testBindAddress bind port range is wider

View File

@ -41,6 +41,7 @@ public class MutableStat extends MutableMetric {
private final MetricsInfo iMaxInfo; private final MetricsInfo iMaxInfo;
private final MetricsInfo minInfo; private final MetricsInfo minInfo;
private final MetricsInfo maxInfo; private final MetricsInfo maxInfo;
private final MetricsInfo iNumInfo;
private final SampleStat intervalStat = new SampleStat(); private final SampleStat intervalStat = new SampleStat();
private final SampleStat prevStat = new SampleStat(); private final SampleStat prevStat = new SampleStat();
@ -65,6 +66,8 @@ public MutableStat(String name, String description,
String lsName = StringUtils.uncapitalize(sampleName); String lsName = StringUtils.uncapitalize(sampleName);
String lvName = StringUtils.uncapitalize(valueName); String lvName = StringUtils.uncapitalize(valueName);
numInfo = info(ucName +"Num"+ usName, "Number of "+ lsName +" for "+ desc); numInfo = info(ucName +"Num"+ usName, "Number of "+ lsName +" for "+ desc);
iNumInfo = info(ucName +"INum"+ usName,
"Interval number of "+ lsName +" for "+ desc);
avgInfo = info(ucName +"Avg"+ uvName, "Average "+ lvName +" for "+ desc); avgInfo = info(ucName +"Avg"+ uvName, "Average "+ lvName +" for "+ desc);
stdevInfo = info(ucName +"Stdev"+ uvName, stdevInfo = info(ucName +"Stdev"+ uvName,
"Standard deviation of "+ lvName +" for "+ desc); "Standard deviation of "+ lvName +" for "+ desc);
@ -128,7 +131,8 @@ public synchronized void snapshot(MetricsRecordBuilder builder, boolean all) {
.addGauge(iMinInfo, lastStat().min()) .addGauge(iMinInfo, lastStat().min())
.addGauge(iMaxInfo, lastStat().max()) .addGauge(iMaxInfo, lastStat().max())
.addGauge(minInfo, minMax.min()) .addGauge(minInfo, minMax.min())
.addGauge(maxInfo, minMax.max()); .addGauge(maxInfo, minMax.max())
.addGauge(iNumInfo, lastStat().numSamples());
} }
if (changed()) { if (changed()) {
if (numSamples > 0) { if (numSamples > 0) {

View File

@ -86,6 +86,10 @@ public class TestMutableMetrics {
eq(0.0, EPSILON)); eq(0.0, EPSILON));
verify(mb).addGauge(eq(info("S1MaxTime","Max time for stat")), verify(mb).addGauge(eq(info("S1MaxTime","Max time for stat")),
eq(0.0, EPSILON)); eq(0.0, EPSILON));
verify(mb).addGauge(
eq(info("S1INumOps", "Interval number of ops for stat")),
eq(1L));
verify(mb, times(2)) verify(mb, times(2))
.addCounter(info("S2NumOps", "Number of ops for stat"), 1L); .addCounter(info("S2NumOps", "Number of ops for stat"), 1L);
verify(mb, times(2)).addGauge(eq(info("S2AvgTime", verify(mb, times(2)).addGauge(eq(info("S2AvgTime",
@ -94,6 +98,16 @@ public class TestMutableMetrics {
verify(mb).addCounter(info("S2NumOps", "Number of ops for stat"), 2L); verify(mb).addCounter(info("S2NumOps", "Number of ops for stat"), 2L);
verify(mb).addGauge(eq(info("S2AvgTime", "Average time for stat")), verify(mb).addGauge(eq(info("S2AvgTime", "Average time for stat")),
eq(1.0, EPSILON)); eq(1.0, EPSILON));
// Add one more sample to s1 and verify that total number of ops
// has increased to 2, but interval number is 1 for both intervals.
MutableStat s1 = (MutableStat) registry.get("s1");
s1.add(0);
registry.snapshot(mb, true);
verify(mb).addCounter(info("S1NumOps", "Number of ops for stat"), 2L);
verify(mb, times(2)).addGauge(
eq(info("S1INumOps", "Interval number of ops for stat")),
eq(1L));
} }
interface TestProtocol { interface TestProtocol {