[
https://issues.apache.org/jira/browse/FLINK-6053?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16369870#comment-16369870
]
ASF GitHub Bot commented on FLINK-6053:
---------------------------------------
Github user zentol commented on the issue:
https://github.com/apache/flink/pull/5501
They are not registered twice. For gauges we create Wrapper that would, for
a `Gauge<Custom>`, implements both `Gauge<Custom>` and `StringGauge`.
Legacy reporters would go through the Gauge interface and behave as they
always did, reporter going through the `StringGauge` interface would stringify
whatever the gauge returns.
Similarly, the new gauge types are wrapped so that we register something
that implements both `Gauge<String/Number>` and `String-/NumberGauge`.
see `AbstractMetricGroup`:
```
public <T, G extends Gauge<T>> G gauge(int name, G gauge) {
return gauge(String.valueOf(name), gauge);
}
public <T, G extends Gauge<T>> G gauge(String name, G gauge) {
addMetric(name, new LegacyGaugeWrapper<>(gauge));
return gauge;
}
public void register(String name, StringGauge gauge) {
addMetric(name, new StringGaugeWrapper(gauge));
}
@Override
public void register(String name, NumberGauge gauge) {
addMetric(name, new NumberGaugeWrapper(gauge));
}
private static class LegacyGaugeWrapper<T> implements StringGauge,
Gauge<T> {
private final Gauge<T> legacyGauge;
private LegacyGaugeWrapper(Gauge<T> legacyGauge) {
this.legacyGauge = legacyGauge;
}
@Override
public String getStringValue() {
T value = legacyGauge.getValue();
if (value == null) {
return null;
} else {
return value.toString();
}
}
@Override
public T getValue() {
return legacyGauge.getValue();
}
}
```
> Gauge<T> should only take subclasses of Number, rather than everything
> ----------------------------------------------------------------------
>
> Key: FLINK-6053
> URL: https://issues.apache.org/jira/browse/FLINK-6053
> Project: Flink
> Issue Type: Improvement
> Components: Metrics
> Affects Versions: 1.2.0
> Reporter: Bowen Li
> Assignee: Chesnay Schepler
> Priority: Major
> Fix For: 1.5.0
>
>
> Currently, Flink's Gauge is defined as
> ```java
> public interface Gauge<T> extends Metric {
> T getValue();
> }
> ```
> But it doesn't make sense to have Gauge take generic types other than Number.
> And it blocks I from finishing FLINK-6013, because I cannot assume Gauge is
> only about Number. So the class should be like
> ```java
> public interface Gauge<T extends Number> extends Metric {
> T getValue();
> }
> ```
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)