Skip to content
This repository was archived by the owner on Dec 23, 2023. It is now read-only.

Commit d2367b0

Browse files
authored
feat: Allow users to register the same Meter multiple times without exception (#2017)
* feat: Allow register same metric multiple times * add more test * remove redundant test
1 parent b6d4cbd commit d2367b0

File tree

11 files changed

+102
-21
lines changed

11 files changed

+102
-21
lines changed

impl_core/src/main/java/io/opencensus/implcore/metrics/DerivedDoubleCumulativeImpl.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,11 @@ public synchronized void clear() {
127127
registeredPoints = Collections.<List<LabelValue>, PointWithFunction<?>>emptyMap();
128128
}
129129

130+
@Override
131+
public MetricDescriptor getMetricDescriptor() {
132+
return metricDescriptor;
133+
}
134+
130135
@javax.annotation.Nullable
131136
@Override
132137
public Metric getMetric(Clock clock) {

impl_core/src/main/java/io/opencensus/implcore/metrics/DerivedDoubleGaugeImpl.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,11 @@ public synchronized void clear() {
121121
registeredPoints = Collections.<List<LabelValue>, PointWithFunction<?>>emptyMap();
122122
}
123123

124+
@Override
125+
public MetricDescriptor getMetricDescriptor() {
126+
return metricDescriptor;
127+
}
128+
124129
@javax.annotation.Nullable
125130
@Override
126131
public Metric getMetric(Clock clock) {

impl_core/src/main/java/io/opencensus/implcore/metrics/DerivedLongCumulativeImpl.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,11 @@ public synchronized void clear() {
127127
registeredPoints = Collections.<List<LabelValue>, PointWithFunction<?>>emptyMap();
128128
}
129129

130+
@Override
131+
public MetricDescriptor getMetricDescriptor() {
132+
return metricDescriptor;
133+
}
134+
130135
@javax.annotation.Nullable
131136
@Override
132137
public Metric getMetric(Clock clock) {

impl_core/src/main/java/io/opencensus/implcore/metrics/DerivedLongGaugeImpl.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,11 @@ public synchronized void clear() {
121121
registeredPoints = Collections.<List<LabelValue>, PointWithFunction<?>>emptyMap();
122122
}
123123

124+
@Override
125+
public MetricDescriptor getMetricDescriptor() {
126+
return metricDescriptor;
127+
}
128+
124129
@javax.annotation.Nullable
125130
@Override
126131
public Metric getMetric(Clock clock) {

impl_core/src/main/java/io/opencensus/implcore/metrics/DoubleCumulativeImpl.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,11 @@ public synchronized void clear() {
125125
registeredPoints = Collections.<List<LabelValue>, PointImpl>emptyMap();
126126
}
127127

128+
@Override
129+
public MetricDescriptor getMetricDescriptor() {
130+
return metricDescriptor;
131+
}
132+
128133
private synchronized DoublePoint registerTimeSeries(List<LabelValue> labelValues) {
129134
PointImpl existingPoint = registeredPoints.get(labelValues);
130135
if (existingPoint != null) {

impl_core/src/main/java/io/opencensus/implcore/metrics/DoubleGaugeImpl.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,11 @@ public synchronized void clear() {
121121
registeredPoints = Collections.<List<LabelValue>, PointImpl>emptyMap();
122122
}
123123

124+
@Override
125+
public MetricDescriptor getMetricDescriptor() {
126+
return metricDescriptor;
127+
}
128+
124129
private synchronized DoublePoint registerTimeSeries(List<LabelValue> labelValues) {
125130
PointImpl existingPoint = registeredPoints.get(labelValues);
126131
if (existingPoint != null) {

impl_core/src/main/java/io/opencensus/implcore/metrics/LongCumulativeImpl.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,11 @@ public synchronized void clear() {
125125
registeredPoints = Collections.<List<LabelValue>, PointImpl>emptyMap();
126126
}
127127

128+
@Override
129+
public MetricDescriptor getMetricDescriptor() {
130+
return metricDescriptor;
131+
}
132+
128133
private synchronized LongPoint registerTimeSeries(List<LabelValue> labelValues) {
129134
PointImpl existingPoint = registeredPoints.get(labelValues);
130135
if (existingPoint != null) {

impl_core/src/main/java/io/opencensus/implcore/metrics/LongGaugeImpl.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,11 @@ public synchronized void clear() {
121121
registeredPoints = Collections.<List<LabelValue>, PointImpl>emptyMap();
122122
}
123123

124+
@Override
125+
public MetricDescriptor getMetricDescriptor() {
126+
return metricDescriptor;
127+
}
128+
124129
private synchronized LongPoint registerTimeSeries(List<LabelValue> labelValues) {
125130
PointImpl existingPoint = registeredPoints.get(labelValues);
126131
if (existingPoint != null) {

impl_core/src/main/java/io/opencensus/implcore/metrics/Meter.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
import io.opencensus.common.Clock;
2020
import io.opencensus.metrics.export.Metric;
21+
import io.opencensus.metrics.export.MetricDescriptor;
2122
import javax.annotation.Nullable;
2223

2324
interface Meter {
@@ -31,4 +32,11 @@ interface Meter {
3132
*/
3233
@Nullable
3334
Metric getMetric(Clock clock);
35+
36+
/**
37+
* Provides a {@link io.opencensus.metrics.export.MetricDescriptor}.
38+
*
39+
* @return a {@code MetricDescriptor}.
40+
*/
41+
MetricDescriptor getMetricDescriptor();
3442
}

impl_core/src/main/java/io/opencensus/implcore/metrics/MetricRegistryImpl.java

Lines changed: 16 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,7 @@ public LongGauge addLongGauge(String name, MetricOptions options) {
5959
options.getUnit(),
6060
options.getLabelKeys(),
6161
options.getConstantLabels());
62-
registeredMeters.registerMeter(name, longGaugeMetric);
63-
return longGaugeMetric;
62+
return (LongGauge) registeredMeters.registerMeter(name, longGaugeMetric);
6463
}
6564

6665
@Override
@@ -72,8 +71,7 @@ public DoubleGauge addDoubleGauge(String name, MetricOptions options) {
7271
options.getUnit(),
7372
options.getLabelKeys(),
7473
options.getConstantLabels());
75-
registeredMeters.registerMeter(name, doubleGaugeMetric);
76-
return doubleGaugeMetric;
74+
return (DoubleGauge) registeredMeters.registerMeter(name, doubleGaugeMetric);
7775
}
7876

7977
@Override
@@ -85,8 +83,7 @@ public DerivedLongGauge addDerivedLongGauge(String name, MetricOptions options)
8583
options.getUnit(),
8684
options.getLabelKeys(),
8785
options.getConstantLabels());
88-
registeredMeters.registerMeter(name, derivedLongGauge);
89-
return derivedLongGauge;
86+
return (DerivedLongGauge) registeredMeters.registerMeter(name, derivedLongGauge);
9087
}
9188

9289
@Override
@@ -98,8 +95,7 @@ public DerivedDoubleGauge addDerivedDoubleGauge(String name, MetricOptions optio
9895
options.getUnit(),
9996
options.getLabelKeys(),
10097
options.getConstantLabels());
101-
registeredMeters.registerMeter(name, derivedDoubleGauge);
102-
return derivedDoubleGauge;
98+
return (DerivedDoubleGauge) registeredMeters.registerMeter(name, derivedDoubleGauge);
10399
}
104100

105101
@Override
@@ -112,8 +108,7 @@ public LongCumulative addLongCumulative(String name, MetricOptions options) {
112108
options.getLabelKeys(),
113109
options.getConstantLabels(),
114110
clock.now());
115-
registeredMeters.registerMeter(name, longCumulativeMetric);
116-
return longCumulativeMetric;
111+
return (LongCumulative) registeredMeters.registerMeter(name, longCumulativeMetric);
117112
}
118113

119114
@Override
@@ -126,8 +121,7 @@ public DoubleCumulative addDoubleCumulative(String name, MetricOptions options)
126121
options.getLabelKeys(),
127122
options.getConstantLabels(),
128123
clock.now());
129-
registeredMeters.registerMeter(name, longCumulativeMetric);
130-
return longCumulativeMetric;
124+
return (DoubleCumulative) registeredMeters.registerMeter(name, longCumulativeMetric);
131125
}
132126

133127
@Override
@@ -140,8 +134,7 @@ public DerivedLongCumulative addDerivedLongCumulative(String name, MetricOptions
140134
options.getLabelKeys(),
141135
options.getConstantLabels(),
142136
clock.now());
143-
registeredMeters.registerMeter(name, derivedLongCumulative);
144-
return derivedLongCumulative;
137+
return (DerivedLongCumulative) registeredMeters.registerMeter(name, derivedLongCumulative);
145138
}
146139

147140
@Override
@@ -154,8 +147,7 @@ public DerivedDoubleCumulative addDerivedDoubleCumulative(String name, MetricOpt
154147
options.getLabelKeys(),
155148
options.getConstantLabels(),
156149
clock.now());
157-
registeredMeters.registerMeter(name, derivedDoubleCumulative);
158-
return derivedDoubleCumulative;
150+
return (DerivedDoubleCumulative) registeredMeters.registerMeter(name, derivedDoubleCumulative);
159151
}
160152

161153
private static final class RegisteredMeters {
@@ -165,17 +157,21 @@ private Map<String, Meter> getRegisteredMeters() {
165157
return registeredMeters;
166158
}
167159

168-
private synchronized void registerMeter(String meterName, Meter meter) {
160+
private synchronized Meter registerMeter(String meterName, Meter meter) {
169161
Meter existingMeter = registeredMeters.get(meterName);
170162
if (existingMeter != null) {
171-
// TODO(mayurkale): Allow users to register the same Meter multiple times without exception.
172-
throw new IllegalArgumentException(
173-
"A different metric with the same name already registered.");
163+
if (!existingMeter.getMetricDescriptor().equals(meter.getMetricDescriptor())) {
164+
throw new IllegalArgumentException(
165+
"A different metric with the same name already registered.");
166+
} else {
167+
return existingMeter;
168+
}
174169
}
175170

176171
Map<String, Meter> registeredMetersCopy = new LinkedHashMap<String, Meter>(registeredMeters);
177172
registeredMetersCopy.put(meterName, meter);
178173
registeredMeters = Collections.unmodifiableMap(registeredMetersCopy);
174+
return meter;
179175
}
180176
}
181177

0 commit comments

Comments
 (0)