Skip to content

Commit ce586db

Browse files
author
Ravindra Dingankar
committed
Encapsulate common logic for MutableQuantile constructor
1 parent a4cc0c1 commit ce586db

File tree

3 files changed

+42
-51
lines changed

3 files changed

+42
-51
lines changed

hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/metrics2/lib/MutableInverseQuantiles.java

Lines changed: 18 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -17,18 +17,12 @@
1717
*/
1818
package org.apache.hadoop.metrics2.lib;
1919

20-
import org.apache.commons.lang3.StringUtils;
2120
import org.apache.hadoop.classification.InterfaceAudience;
2221
import org.apache.hadoop.classification.InterfaceStability;
2322
import org.apache.hadoop.classification.VisibleForTesting;
2423
import org.apache.hadoop.metrics2.util.Quantile;
2524
import org.apache.hadoop.metrics2.util.SampleQuantiles;
26-
import org.apache.hadoop.thirdparty.com.google.common.util.concurrent.ThreadFactoryBuilder;
2725
import java.text.DecimalFormat;
28-
import java.util.concurrent.Executors;
29-
import java.util.concurrent.ScheduledExecutorService;
30-
import java.util.concurrent.ScheduledFuture;
31-
import java.util.concurrent.TimeUnit;
3226
import static org.apache.hadoop.metrics2.lib.Interns.info;
3327

3428
/**
@@ -55,12 +49,6 @@ static class InversePercentile extends Quantile {
5549
new InversePercentile(25), new InversePercentile(10),
5650
new InversePercentile(5), new InversePercentile(1)};
5751

58-
private ScheduledFuture<?> scheduledTask;
59-
60-
private static final ScheduledExecutorService SCHEDULAR = Executors
61-
.newScheduledThreadPool(1, new ThreadFactoryBuilder().setDaemon(true)
62-
.setNameFormat("MutableInverseQuantiles-%d").build());
63-
6452
/**
6553
* Instantiates a new {@link MutableInverseQuantiles} for a metric that rolls itself
6654
* over on the specified time interval.
@@ -69,41 +57,33 @@ static class InversePercentile extends Quantile {
6957
* @param description long-form textual description of the metric
7058
* @param sampleName type of items in the stream (e.g., "Ops")
7159
* @param valueName type of the values
72-
* @param intervalSecs rollover interval (in seconds) of the estimator
60+
* @param intervalSecs rollover interval (in seconds) of the estimator
7361
*/
7462
public MutableInverseQuantiles(String name, String description, String sampleName,
7563
String valueName, int intervalSecs) {
76-
String ucName = StringUtils.capitalize(name);
77-
String usName = StringUtils.capitalize(sampleName);
78-
String uvName = StringUtils.capitalize(valueName);
79-
String desc = StringUtils.uncapitalize(description);
80-
String lsName = StringUtils.uncapitalize(sampleName);
81-
String lvName = StringUtils.uncapitalize(valueName);
64+
super(name, description, sampleName, valueName, intervalSecs);
65+
}
8266

83-
setNumInfo(info(ucName + "Num" + usName, String.format(
84-
"Number of %s for %s with %ds interval", lsName, desc, intervalSecs)));
85-
// Construct the MetricsInfos for the inverse quantiles, converting to inverse percentiles
67+
/**
68+
* Sets quantileInfo and estimator.
69+
*
70+
* @param ucName capitalized name of the metric
71+
* @param uvName capitalized type of the values
72+
* @param desc uncapitalized long-form textual description of the metric
73+
* @param lvName uncapitalized type of the values
74+
* @param df Number formatter for inverse percentile value
75+
*/
76+
void setQuantiles(String ucName, String uvName, String desc, String lvName, DecimalFormat df) {
77+
// Construct the MetricsInfos for inverse quantiles, converting to inverse percentiles
8678
setQuantileInfos(INVERSE_QUANTILES.length);
87-
DecimalFormat df = new DecimalFormat("###.####");
88-
String nameTemplate = "thInversePercentile" + uvName;
89-
String descTemplate = " inverse percentile " + lvName + " with " + intervalSecs
90-
+ " second interval for " + desc;
9179
for (int i = 0; i < INVERSE_QUANTILES.length; i++) {
9280
double inversePercentile = 100 * (1 - INVERSE_QUANTILES[i].quantile);
93-
addQuantileInfo(i, info(ucName + df.format(inversePercentile) + nameTemplate,
94-
df.format(inversePercentile) + descTemplate));
81+
String nameTemplate = ucName + df.format(inversePercentile) + "thInversePercentile" + uvName;
82+
String descTemplate = df.format(inversePercentile) + " inverse percentile " + lvName
83+
+ " with " + getInterval() + " second interval for " + desc;
84+
addQuantileInfo(i, info(nameTemplate, descTemplate));
9585
}
9686

9787
setEstimator(new SampleQuantiles(INVERSE_QUANTILES));
98-
setInterval(intervalSecs);
99-
scheduledTask = SCHEDULAR.scheduleWithFixedDelay(new RolloverSample(this),
100-
intervalSecs, intervalSecs, TimeUnit.SECONDS);
101-
}
102-
103-
public void stop() {
104-
if (scheduledTask != null) {
105-
scheduledTask.cancel(false);
106-
scheduledTask = null;
107-
}
10888
}
10989
}

hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/metrics2/lib/MutableQuantiles.java

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ public class MutableQuantiles extends MutableMetric {
5656
private MetricsInfo numInfo;
5757
private MetricsInfo[] quantileInfos;
5858
private int intervalSecs;
59+
private static DecimalFormat decimalFormat = new DecimalFormat("###.####");
5960

6061
private QuantileEstimator estimator;
6162
private long previousCount = 0;
@@ -91,26 +92,36 @@ public MutableQuantiles(String name, String description, String sampleName,
9192
String desc = StringUtils.uncapitalize(description);
9293
String lsName = StringUtils.uncapitalize(sampleName);
9394
String lvName = StringUtils.uncapitalize(valueName);
94-
DecimalFormat df = new DecimalFormat("###.####");
9595

96+
setInterval(interval);
9697
setNumInfo(info(ucName + "Num" + usName, String.format(
9798
"Number of %s for %s with %ds interval", lsName, desc, interval)));
99+
scheduledTask = scheduler.scheduleWithFixedDelay(new RolloverSample(this),
100+
interval, interval, TimeUnit.SECONDS);
101+
setQuantiles(ucName, uvName, desc, lvName, decimalFormat);
102+
}
103+
104+
/**
105+
* Sets quantileInfo and estimator.
106+
*
107+
* @param ucName capitalized name of the metric
108+
* @param uvName capitalized type of the values
109+
* @param desc uncapitalized long-form textual description of the metric
110+
* @param lvName uncapitalized type of the values
111+
* @param pDecimalFormat Number formatter for percentile value
112+
*/
113+
void setQuantiles(String ucName, String uvName, String desc, String lvName, DecimalFormat pDecimalFormat) {
98114
// Construct the MetricsInfos for the quantiles, converting to percentiles
99115
setQuantileInfos(quantiles.length);
100-
String nameTemplate = "thPercentile" + uvName;
101-
String descTemplate = " percentile " + lvName + " with " + interval
102-
+ " second interval for " + desc;
103116
for (int i = 0; i < quantiles.length; i++) {
104117
double percentile = 100 * quantiles[i].quantile;
105-
addQuantileInfo(i, info(ucName + df.format(percentile) + nameTemplate,
106-
df.format(percentile) + descTemplate));
118+
String nameTemplate = ucName + pDecimalFormat.format(percentile) + "thPercentile" + uvName;
119+
String descTemplate = pDecimalFormat.format(percentile) + " percentile " + lvName
120+
+ " with " + getInterval() + " second interval for " + desc;
121+
addQuantileInfo(i, info(nameTemplate, descTemplate));
107122
}
108123

109124
setEstimator(new SampleQuantiles(quantiles));
110-
111-
setInterval(interval);
112-
scheduledTask = scheduler.scheduleWithFixedDelay(new RolloverSample(this),
113-
interval, interval, TimeUnit.SECONDS);
114125
}
115126

116127
public MutableQuantiles() {}
@@ -208,7 +219,7 @@ public synchronized void setEstimator(QuantileEstimator quantileEstimator) {
208219
* Runnable used to periodically roll over the internal
209220
* {@link SampleQuantiles} every interval.
210221
*/
211-
static class RolloverSample implements Runnable {
222+
private static class RolloverSample implements Runnable {
212223

213224
MutableQuantiles parent;
214225

hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/test/MetricsAsserts.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -413,13 +413,13 @@ public static void assertQuantileGauges(String prefix,
413413
*/
414414
public static void assertInverseQuantileGauges(String prefix,
415415
MetricsRecordBuilder rb, String valueName) {
416-
verify(rb).addGauge(eqName(info(prefix + "NumOps", "")), geq(0l));
416+
verify(rb).addGauge(eqName(info(prefix + "NumOps", "")), geq(0L));
417417
for (Quantile q : MutableQuantiles.quantiles) {
418418
String nameTemplate = prefix + "%dthInversePercentile" + valueName;
419419
int percentile = (int) (100 * q.quantile);
420420
verify(rb).addGauge(
421421
eqName(info(String.format(nameTemplate, percentile), "")),
422-
geq(0l));
422+
geq(0L));
423423
}
424424
}
425425

0 commit comments

Comments
 (0)