[ 
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)

Reply via email to