From 0a3586ad7095cddff64a18b5bad55e3881e1e29a Mon Sep 17 00:00:00 2001 From: Antoine Toulme Date: Sat, 25 Oct 2025 01:07:04 -0700 Subject: [PATCH 01/10] Add support to remove instruments --- .../api/metrics/DefaultMeter.java | 48 +++++++++++++++++++ .../api/metrics/DoubleCounter.java | 15 ++++++ .../api/metrics/DoubleGauge.java | 15 ++++++ .../api/metrics/DoubleHistogram.java | 15 ++++++ .../api/metrics/DoubleUpDownCounter.java | 15 ++++++ .../api/metrics/LongCounter.java | 15 ++++++ .../opentelemetry/api/metrics/LongGauge.java | 15 ++++++ .../api/metrics/LongHistogram.java | 15 ++++++ .../api/metrics/LongUpDownCounter.java | 15 ++++++ .../metrics/ExtendedDefaultMeter.java | 48 +++++++++++++++++++ .../current_vs_latest/opentelemetry-api.txt | 31 +++++++++++- .../sdk/metrics/SdkDoubleCounter.java | 10 ++++ .../sdk/metrics/SdkDoubleGauge.java | 10 ++++ .../sdk/metrics/SdkDoubleHistogram.java | 10 ++++ .../sdk/metrics/SdkDoubleUpDownCounter.java | 10 ++++ .../sdk/metrics/SdkLongCounter.java | 10 ++++ .../sdk/metrics/SdkLongGauge.java | 10 ++++ .../sdk/metrics/SdkLongHistogram.java | 10 ++++ .../sdk/metrics/SdkLongUpDownCounter.java | 10 ++++ .../opentelemetry/sdk/metrics/SdkMeter.java | 7 +++ .../DefaultSynchronousMetricStorage.java | 13 +++++ .../internal/state/EmptyMetricStorage.java | 3 ++ .../state/WriteableMetricStorage.java | 3 ++ .../sdk/metrics/SdkDoubleCounterTest.java | 9 ++++ .../sdk/metrics/SdkDoubleGaugeTest.java | 12 +++++ .../sdk/metrics/SdkDoubleHistogramTest.java | 11 +++++ .../metrics/SdkDoubleUpDownCounterTest.java | 12 +++++ .../sdk/metrics/SdkLongCounterTest.java | 9 ++++ .../sdk/metrics/SdkLongGaugeTest.java | 10 ++++ .../sdk/metrics/SdkLongHistogramTest.java | 11 +++++ .../sdk/metrics/SdkLongUpDownCounterTest.java | 11 +++++ .../state/MetricStorageRegistryTest.java | 3 ++ 32 files changed, 440 insertions(+), 1 deletion(-) diff --git a/api/all/src/main/java/io/opentelemetry/api/metrics/DefaultMeter.java b/api/all/src/main/java/io/opentelemetry/api/metrics/DefaultMeter.java index 5caa7d829c2..76696ccd596 100644 --- a/api/all/src/main/java/io/opentelemetry/api/metrics/DefaultMeter.java +++ b/api/all/src/main/java/io/opentelemetry/api/metrics/DefaultMeter.java @@ -80,6 +80,12 @@ public void add(long value, Attributes attributes) {} @Override public void add(long value) {} + + @Override + public void remove(Attributes attributes) {} + + @Override + public void remove(Attributes attributes, Context context) {} } private static class NoopDoubleCounter implements DoubleCounter { @@ -96,6 +102,12 @@ public void add(double value, Attributes attributes) {} @Override public void add(double value) {} + + @Override + public void remove(Attributes attributes) {} + + @Override + public void remove(Attributes attributes, Context context) {} } private static class NoopLongCounterBuilder implements LongCounterBuilder { @@ -182,6 +194,12 @@ public void add(long value, Attributes attributes) {} @Override public void add(long value) {} + + @Override + public void remove(Attributes attributes) {} + + @Override + public void remove(Attributes attributes, Context context) {} } private static class NoopDoubleUpDownCounter implements DoubleUpDownCounter { @@ -198,6 +216,12 @@ public void add(double value, Attributes attributes) {} @Override public void add(double value) {} + + @Override + public void remove(Attributes attributes) {} + + @Override + public void remove(Attributes attributes, Context context) {} } private static class NoopLongUpDownCounterBuilder implements LongUpDownCounterBuilder { @@ -286,6 +310,12 @@ public void record(double value, Attributes attributes) {} @Override public void record(double value) {} + + @Override + public void remove(Attributes attributes) {} + + @Override + public void remove(Attributes attributes, Context context) {} } private static class NoopLongHistogram implements LongHistogram { @@ -302,6 +332,12 @@ public void record(long value, Attributes attributes) {} @Override public void record(long value) {} + + @Override + public void remove(Attributes attributes) {} + + @Override + public void remove(Attributes attributes, Context context) {} } private static class NoopDoubleHistogramBuilder implements DoubleHistogramBuilder { @@ -400,6 +436,12 @@ public void set(double value, Attributes attributes) {} @Override public void set(double value, Attributes attributes, Context context) {} + + @Override + public void remove(Attributes attributes) {} + + @Override + public void remove(Attributes attributes, Context context) {} } private static class NoopLongGaugeBuilder implements LongGaugeBuilder { @@ -446,6 +488,12 @@ public void set(long value, Attributes attributes) {} @Override public void set(long value, Attributes attributes, Context context) {} + + @Override + public void remove(Attributes attributes) {} + + @Override + public void remove(Attributes attributes, Context context) {} } private static class NoopObservableDoubleMeasurement implements ObservableDoubleMeasurement { diff --git a/api/all/src/main/java/io/opentelemetry/api/metrics/DoubleCounter.java b/api/all/src/main/java/io/opentelemetry/api/metrics/DoubleCounter.java index 467e21b67b2..53b929825af 100644 --- a/api/all/src/main/java/io/opentelemetry/api/metrics/DoubleCounter.java +++ b/api/all/src/main/java/io/opentelemetry/api/metrics/DoubleCounter.java @@ -60,4 +60,19 @@ default boolean isEnabled() { * @param context The explicit context to associate with this measurement. */ void add(double value, Attributes attributes, Context context); + + /** + * Remove the instrument. + * + * @param attributes A set of attributes to identify the instrument. + */ + void remove(Attributes attributes); + + /** + * Remove the instrument. + * + * @param attributes A set of attributes to identify the instrument. + * @param context The explicit context to associate with this measurement. + */ + void remove(Attributes attributes, Context context); } diff --git a/api/all/src/main/java/io/opentelemetry/api/metrics/DoubleGauge.java b/api/all/src/main/java/io/opentelemetry/api/metrics/DoubleGauge.java index 78a1124ddfa..21e550d9e72 100644 --- a/api/all/src/main/java/io/opentelemetry/api/metrics/DoubleGauge.java +++ b/api/all/src/main/java/io/opentelemetry/api/metrics/DoubleGauge.java @@ -54,4 +54,19 @@ default boolean isEnabled() { * @param context The explicit context to associate with this measurement. */ void set(double value, Attributes attributes, Context context); + + /** + * Remove the instrument. + * + * @param attributes A set of attributes to identify the instrument. + */ + void remove(Attributes attributes); + + /** + * Remove the instrument. + * + * @param attributes A set of attributes to identify the instrument. + * @param context The explicit context to associate with this measurement. + */ + void remove(Attributes attributes, Context context); } diff --git a/api/all/src/main/java/io/opentelemetry/api/metrics/DoubleHistogram.java b/api/all/src/main/java/io/opentelemetry/api/metrics/DoubleHistogram.java index bdea93b66d9..3b2e13af277 100644 --- a/api/all/src/main/java/io/opentelemetry/api/metrics/DoubleHistogram.java +++ b/api/all/src/main/java/io/opentelemetry/api/metrics/DoubleHistogram.java @@ -60,4 +60,19 @@ default boolean isEnabled() { * @param context The explicit context to associate with this measurement. */ void record(double value, Attributes attributes, Context context); + + /** + * Remove the instrument. + * + * @param attributes A set of attributes to identify the instrument. + */ + void remove(Attributes attributes); + + /** + * Remove the instrument. + * + * @param attributes A set of attributes to identify the instrument. + * @param context The explicit context to associate with this measurement. + */ + void remove(Attributes attributes, Context context); } diff --git a/api/all/src/main/java/io/opentelemetry/api/metrics/DoubleUpDownCounter.java b/api/all/src/main/java/io/opentelemetry/api/metrics/DoubleUpDownCounter.java index d38a30f7395..2c3ea5f566e 100644 --- a/api/all/src/main/java/io/opentelemetry/api/metrics/DoubleUpDownCounter.java +++ b/api/all/src/main/java/io/opentelemetry/api/metrics/DoubleUpDownCounter.java @@ -60,4 +60,19 @@ default boolean isEnabled() { * @param context The explicit context to associate with this measurement. */ void add(double value, Attributes attributes, Context context); + + /** + * Remove the instrument. + * + * @param attributes A set of attributes to identify the instrument. + */ + void remove(Attributes attributes); + + /** + * Remove the instrument. + * + * @param attributes A set of attributes to identify the instrument. + * @param context The explicit context to associate with this measurement. + */ + void remove(Attributes attributes, Context context); } diff --git a/api/all/src/main/java/io/opentelemetry/api/metrics/LongCounter.java b/api/all/src/main/java/io/opentelemetry/api/metrics/LongCounter.java index 93b6ffc2266..549a69575fe 100644 --- a/api/all/src/main/java/io/opentelemetry/api/metrics/LongCounter.java +++ b/api/all/src/main/java/io/opentelemetry/api/metrics/LongCounter.java @@ -60,4 +60,19 @@ default boolean isEnabled() { * @param context The explicit context to associate with this measurement. */ void add(long value, Attributes attributes, Context context); + + /** + * Remove the instrument. + * + * @param attributes A set of attributes to identify the instrument. + */ + void remove(Attributes attributes); + + /** + * Remove the instrument. + * + * @param attributes A set of attributes to identify the instrument. + * @param context The explicit context to associate with this measurement. + */ + void remove(Attributes attributes, Context context); } diff --git a/api/all/src/main/java/io/opentelemetry/api/metrics/LongGauge.java b/api/all/src/main/java/io/opentelemetry/api/metrics/LongGauge.java index 16b488f6df9..122592f2437 100644 --- a/api/all/src/main/java/io/opentelemetry/api/metrics/LongGauge.java +++ b/api/all/src/main/java/io/opentelemetry/api/metrics/LongGauge.java @@ -54,4 +54,19 @@ default boolean isEnabled() { * @param context The explicit context to associate with this measurement. */ void set(long value, Attributes attributes, Context context); + + /** + * Remove the instrument. + * + * @param attributes A set of attributes to identify the instrument. + */ + void remove(Attributes attributes); + + /** + * Remove the instrument. + * + * @param attributes A set of attributes to identify the instrument. + * @param context The explicit context to associate with this measurement. + */ + void remove(Attributes attributes, Context context); } diff --git a/api/all/src/main/java/io/opentelemetry/api/metrics/LongHistogram.java b/api/all/src/main/java/io/opentelemetry/api/metrics/LongHistogram.java index 82d886d37c1..7769dbc6b50 100644 --- a/api/all/src/main/java/io/opentelemetry/api/metrics/LongHistogram.java +++ b/api/all/src/main/java/io/opentelemetry/api/metrics/LongHistogram.java @@ -60,4 +60,19 @@ default boolean isEnabled() { * @param context The explicit context to associate with this measurement. */ void record(long value, Attributes attributes, Context context); + + /** + * Remove the instrument. + * + * @param attributes A set of attributes to identify the instrument. + */ + void remove(Attributes attributes); + + /** + * Remove the instrument. + * + * @param attributes A set of attributes to identify the instrument. + * @param context The explicit context to associate with this measurement. + */ + void remove(Attributes attributes, Context context); } diff --git a/api/all/src/main/java/io/opentelemetry/api/metrics/LongUpDownCounter.java b/api/all/src/main/java/io/opentelemetry/api/metrics/LongUpDownCounter.java index f0cbc35f23f..546bda86a46 100644 --- a/api/all/src/main/java/io/opentelemetry/api/metrics/LongUpDownCounter.java +++ b/api/all/src/main/java/io/opentelemetry/api/metrics/LongUpDownCounter.java @@ -60,4 +60,19 @@ default boolean isEnabled() { * @param context The explicit context to associate with this measurement. */ void add(long value, Attributes attributes, Context context); + + /** + * Remove the instrument. + * + * @param attributes A set of attributes to identify the instrument. + */ + void remove(Attributes attributes); + + /** + * Remove the instrument. + * + * @param attributes A set of attributes to identify the instrument. + * @param context The explicit context to associate with this measurement. + */ + void remove(Attributes attributes, Context context); } diff --git a/api/incubator/src/main/java/io/opentelemetry/api/incubator/metrics/ExtendedDefaultMeter.java b/api/incubator/src/main/java/io/opentelemetry/api/incubator/metrics/ExtendedDefaultMeter.java index 8283c7bb0b6..6ad26adc4bf 100644 --- a/api/incubator/src/main/java/io/opentelemetry/api/incubator/metrics/ExtendedDefaultMeter.java +++ b/api/incubator/src/main/java/io/opentelemetry/api/incubator/metrics/ExtendedDefaultMeter.java @@ -107,6 +107,12 @@ public void add(long value, Attributes attributes) {} @Override public void add(long value) {} + + @Override + public void remove(Attributes attributes) {} + + @Override + public void remove(Attributes attributes, Context context) {} } private static class NoopDoubleCounter implements ExtendedDoubleCounter { @@ -123,6 +129,12 @@ public void add(double value, Attributes attributes) {} @Override public void add(double value) {} + + @Override + public void remove(Attributes attributes) {} + + @Override + public void remove(Attributes attributes, Context context) {} } private static class NoopLongCounterBuilder implements ExtendedLongCounterBuilder { @@ -209,6 +221,12 @@ public void add(long value, Attributes attributes) {} @Override public void add(long value) {} + + @Override + public void remove(Attributes attributes) {} + + @Override + public void remove(Attributes attributes, Context context) {} } private static class NoopDoubleUpDownCounter implements ExtendedDoubleUpDownCounter { @@ -225,6 +243,12 @@ public void add(double value, Attributes attributes) {} @Override public void add(double value) {} + + @Override + public void remove(Attributes attributes) {} + + @Override + public void remove(Attributes attributes, Context context) {} } private static class NoopLongUpDownCounterBuilder implements ExtendedLongUpDownCounterBuilder { @@ -314,6 +338,12 @@ public void record(double value, Attributes attributes) {} @Override public void record(double value) {} + + @Override + public void remove(Attributes attributes) {} + + @Override + public void remove(Attributes attributes, Context context) {} } private static class NoopLongHistogram implements ExtendedLongHistogram { @@ -330,6 +360,12 @@ public void record(long value, Attributes attributes) {} @Override public void record(long value) {} + + @Override + public void remove(Attributes attributes) {} + + @Override + public void remove(Attributes attributes, Context context) {} } private static class NoopDoubleHistogramBuilder implements ExtendedDoubleHistogramBuilder { @@ -428,6 +464,12 @@ public void set(double value, Attributes attributes) {} @Override public void set(double value, Attributes attributes, Context context) {} + + @Override + public void remove(Attributes attributes) {} + + @Override + public void remove(Attributes attributes, Context context) {} } private static class NoopLongGaugeBuilder implements ExtendedLongGaugeBuilder { @@ -474,6 +516,12 @@ public void set(long value, Attributes attributes) {} @Override public void set(long value, Attributes attributes, Context context) {} + + @Override + public void remove(Attributes attributes) {} + + @Override + public void remove(Attributes attributes, Context context) {} } private static class NoopObservableDoubleMeasurement implements ObservableDoubleMeasurement { diff --git a/docs/apidiffs/current_vs_latest/opentelemetry-api.txt b/docs/apidiffs/current_vs_latest/opentelemetry-api.txt index 4883d2787cc..23a205e4a1a 100644 --- a/docs/apidiffs/current_vs_latest/opentelemetry-api.txt +++ b/docs/apidiffs/current_vs_latest/opentelemetry-api.txt @@ -1,2 +1,31 @@ Comparing source compatibility of opentelemetry-api-1.62.0-SNAPSHOT.jar against opentelemetry-api-1.61.0.jar -No changes. \ No newline at end of file +No changes. +Comparing source compatibility of opentelemetry-api-1.61.0-SNAPSHOT.jar against opentelemetry-api-1.60.1.jar +**** MODIFIED INTERFACE: PUBLIC ABSTRACT io.opentelemetry.api.metrics.DoubleGauge (not serializable) + === CLASS FILE FORMAT VERSION: 52.0 <- 52.0 + +++* NEW METHOD: PUBLIC(+) ABSTRACT(+) void remove(io.opentelemetry.api.common.Attributes) + +++* NEW METHOD: PUBLIC(+) ABSTRACT(+) void remove(io.opentelemetry.api.common.Attributes, io.opentelemetry.context.Context) +**** MODIFIED INTERFACE: PUBLIC ABSTRACT io.opentelemetry.api.metrics.DoubleHistogram (not serializable) + === CLASS FILE FORMAT VERSION: 52.0 <- 52.0 + +++* NEW METHOD: PUBLIC(+) ABSTRACT(+) void remove(io.opentelemetry.api.common.Attributes) + +++* NEW METHOD: PUBLIC(+) ABSTRACT(+) void remove(io.opentelemetry.api.common.Attributes, io.opentelemetry.context.Context) +**** MODIFIED INTERFACE: PUBLIC ABSTRACT io.opentelemetry.api.metrics.DoubleUpDownCounter (not serializable) + === CLASS FILE FORMAT VERSION: 52.0 <- 52.0 + +++* NEW METHOD: PUBLIC(+) ABSTRACT(+) void remove(io.opentelemetry.api.common.Attributes) + +++* NEW METHOD: PUBLIC(+) ABSTRACT(+) void remove(io.opentelemetry.api.common.Attributes, io.opentelemetry.context.Context) +**** MODIFIED INTERFACE: PUBLIC ABSTRACT io.opentelemetry.api.metrics.LongCounter (not serializable) + === CLASS FILE FORMAT VERSION: 52.0 <- 52.0 + +++* NEW METHOD: PUBLIC(+) ABSTRACT(+) void remove(io.opentelemetry.api.common.Attributes) + +++* NEW METHOD: PUBLIC(+) ABSTRACT(+) void remove(io.opentelemetry.api.common.Attributes, io.opentelemetry.context.Context) +**** MODIFIED INTERFACE: PUBLIC ABSTRACT io.opentelemetry.api.metrics.LongGauge (not serializable) + === CLASS FILE FORMAT VERSION: 52.0 <- 52.0 + +++* NEW METHOD: PUBLIC(+) ABSTRACT(+) void remove(io.opentelemetry.api.common.Attributes) + +++* NEW METHOD: PUBLIC(+) ABSTRACT(+) void remove(io.opentelemetry.api.common.Attributes, io.opentelemetry.context.Context) +**** MODIFIED INTERFACE: PUBLIC ABSTRACT io.opentelemetry.api.metrics.LongHistogram (not serializable) + === CLASS FILE FORMAT VERSION: 52.0 <- 52.0 + +++* NEW METHOD: PUBLIC(+) ABSTRACT(+) void remove(io.opentelemetry.api.common.Attributes) + +++* NEW METHOD: PUBLIC(+) ABSTRACT(+) void remove(io.opentelemetry.api.common.Attributes, io.opentelemetry.context.Context) +**** MODIFIED INTERFACE: PUBLIC ABSTRACT io.opentelemetry.api.metrics.LongUpDownCounter (not serializable) + === CLASS FILE FORMAT VERSION: 52.0 <- 52.0 + +++* NEW METHOD: PUBLIC(+) ABSTRACT(+) void remove(io.opentelemetry.api.common.Attributes) + +++* NEW METHOD: PUBLIC(+) ABSTRACT(+) void remove(io.opentelemetry.api.common.Attributes, io.opentelemetry.context.Context) diff --git a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkDoubleCounter.java b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkDoubleCounter.java index d3ffd20f5c6..c30f5bd5c3c 100644 --- a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkDoubleCounter.java +++ b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkDoubleCounter.java @@ -61,6 +61,16 @@ public void add(double increment) { add(increment, Attributes.empty()); } + @Override + public void remove(Attributes attributes) { + remove(attributes, Context.current()); + } + + @Override + public void remove(Attributes attributes, Context context) { + storage.remove(attributes, context); + } + static class SdkDoubleCounterBuilder implements DoubleCounterBuilder { final InstrumentBuilder builder; diff --git a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkDoubleGauge.java b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkDoubleGauge.java index c3ee314361c..9ad87e8dfba 100644 --- a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkDoubleGauge.java +++ b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkDoubleGauge.java @@ -48,6 +48,16 @@ public void set(double value) { set(value, Attributes.empty()); } + @Override + public void remove(Attributes attributes) { + remove(attributes, Context.current()); + } + + @Override + public void remove(Attributes attributes, Context context) { + storage.remove(attributes, context); + } + static class SdkDoubleGaugeBuilder implements DoubleGaugeBuilder { final InstrumentBuilder builder; diff --git a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkDoubleHistogram.java b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkDoubleHistogram.java index a3e4e5dddb1..ba6fbe1e2a0 100644 --- a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkDoubleHistogram.java +++ b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkDoubleHistogram.java @@ -61,6 +61,16 @@ public void record(double value) { record(value, Attributes.empty()); } + @Override + public void remove(Attributes attributes) { + remove(attributes, Context.current()); + } + + @Override + public void remove(Attributes attributes, Context context) { + storage.remove(attributes, context); + } + static class SdkDoubleHistogramBuilder implements DoubleHistogramBuilder { final InstrumentBuilder builder; diff --git a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkDoubleUpDownCounter.java b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkDoubleUpDownCounter.java index 0c94d89cba9..b4693c42a56 100644 --- a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkDoubleUpDownCounter.java +++ b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkDoubleUpDownCounter.java @@ -48,6 +48,16 @@ public void add(double increment) { add(increment, Attributes.empty()); } + @Override + public void remove(Attributes attributes) { + remove(attributes, Context.current()); + } + + @Override + public void remove(Attributes attributes, Context context) { + storage.remove(attributes, context); + } + static class SdkDoubleUpDownCounterBuilder implements DoubleUpDownCounterBuilder { final InstrumentBuilder builder; diff --git a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkLongCounter.java b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkLongCounter.java index d1834272c14..2827656ba8c 100644 --- a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkLongCounter.java +++ b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkLongCounter.java @@ -62,6 +62,16 @@ public void add(long increment) { add(increment, Attributes.empty()); } + @Override + public void remove(Attributes attributes) { + remove(attributes, Context.current()); + } + + @Override + public void remove(Attributes attributes, Context context) { + storage.remove(attributes, context); + } + static class SdkLongCounterBuilder implements LongCounterBuilder { final InstrumentBuilder builder; diff --git a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkLongGauge.java b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkLongGauge.java index 045d8cc5aa9..20781e6c17c 100644 --- a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkLongGauge.java +++ b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkLongGauge.java @@ -47,6 +47,16 @@ public void set(long value) { set(value, Attributes.empty()); } + @Override + public void remove(Attributes attributes) { + remove(attributes, Context.current()); + } + + @Override + public void remove(Attributes attributes, Context context) { + storage.remove(attributes, context); + } + static class SdkLongGaugeBuilder implements LongGaugeBuilder { final InstrumentBuilder builder; diff --git a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkLongHistogram.java b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkLongHistogram.java index ab743f0b568..0d0d4b1e74f 100644 --- a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkLongHistogram.java +++ b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkLongHistogram.java @@ -62,6 +62,16 @@ public void record(long value) { record(value, Attributes.empty()); } + @Override + public void remove(Attributes attributes) { + remove(attributes, Context.current()); + } + + @Override + public void remove(Attributes attributes, Context context) { + storage.remove(attributes, context); + } + static class SdkLongHistogramBuilder implements LongHistogramBuilder { final InstrumentBuilder builder; diff --git a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkLongUpDownCounter.java b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkLongUpDownCounter.java index 1fe09623d9a..7e43a565d97 100644 --- a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkLongUpDownCounter.java +++ b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkLongUpDownCounter.java @@ -48,6 +48,16 @@ public void add(long increment) { add(increment, Attributes.empty()); } + @Override + public void remove(Attributes attributes) { + remove(attributes, Context.current()); + } + + @Override + public void remove(Attributes attributes, Context context) { + storage.remove(attributes, context); + } + static class SdkLongUpDownCounterBuilder implements LongUpDownCounterBuilder { final InstrumentBuilder builder; diff --git a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkMeter.java b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkMeter.java index 8fb64ae7f38..cb68c3c17a1 100644 --- a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkMeter.java +++ b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkMeter.java @@ -370,6 +370,13 @@ public void recordDouble(double value, Attributes attributes, Context context) { } } + @Override + public void remove(Attributes attributes, Context context) { + for (WriteableMetricStorage storage : storages) { + storage.remove(attributes, context); + } + } + @Override public boolean isEnabled() { for (WriteableMetricStorage storage : storages) { diff --git a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/internal/state/DefaultSynchronousMetricStorage.java b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/internal/state/DefaultSynchronousMetricStorage.java index a44508d6659..5d23f2069f1 100644 --- a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/internal/state/DefaultSynchronousMetricStorage.java +++ b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/internal/state/DefaultSynchronousMetricStorage.java @@ -130,6 +130,19 @@ public void recordDouble(double value, Attributes attributes, Context context) { abstract void doRecordDouble(double value, Attributes attributes, Context context); + @Override + public void remove(Attributes attributes, Context context) { + if (!enabled) { + return; + } + AggregatorHolder aggregatorHolder = getHolderForRecord(); + try { + aggregatorHolder.aggregatorHandles.remove(attributes); + } finally { + releaseHolderForRecord(aggregatorHolder); + } + } + @Override public void setEnabled(boolean enabled) { this.enabled = enabled; diff --git a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/internal/state/EmptyMetricStorage.java b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/internal/state/EmptyMetricStorage.java index c8580e79f61..ad41e89b68d 100644 --- a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/internal/state/EmptyMetricStorage.java +++ b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/internal/state/EmptyMetricStorage.java @@ -37,6 +37,9 @@ public void recordLong(long value, Attributes attributes, Context context) {} @Override public void recordDouble(double value, Attributes attributes, Context context) {} + @Override + public void remove(Attributes attributes, Context context) {} + @Override public boolean isEnabled() { return false; diff --git a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/internal/state/WriteableMetricStorage.java b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/internal/state/WriteableMetricStorage.java index 7191a63f1e0..61b562cbf51 100644 --- a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/internal/state/WriteableMetricStorage.java +++ b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/internal/state/WriteableMetricStorage.java @@ -23,6 +23,9 @@ public interface WriteableMetricStorage { /** Records a measurement. */ void recordDouble(double value, Attributes attributes, Context context); + /** Remove a measurement. */ + void remove(Attributes attributes, Context context); + /** * Returns {@code true} if the storage is actively recording measurements, and {@code false} * otherwise (i.e. noop / empty metric storage is installed). diff --git a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkDoubleCounterTest.java b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkDoubleCounterTest.java index 5f421a1c3b0..ffa12f6c75f 100644 --- a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkDoubleCounterTest.java +++ b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkDoubleCounterTest.java @@ -57,6 +57,15 @@ void collectMetrics_NoRecords() { assertThat(sdkMeterReader.collectAllMetrics()).isEmpty(); } + @Test + void collectMetrics_Remove() { + DoubleCounter counter = sdkMeter.counterBuilder("testCounter").ofDoubles().build(); + Attributes attrs = Attributes.of(stringKey("key"), "value"); + counter.add(1, attrs); + counter.remove(attrs); + assertThat(sdkMeterReader.collectAllMetrics()).isEmpty(); + } + @Test void collectMetrics_WithEmptyAttributes() { DoubleCounter doubleCounter = diff --git a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkDoubleGaugeTest.java b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkDoubleGaugeTest.java index c39558ce978..c11a303940a 100644 --- a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkDoubleGaugeTest.java +++ b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkDoubleGaugeTest.java @@ -27,6 +27,8 @@ import io.opentelemetry.sdk.trace.SdkTracerProvider; import java.time.Duration; import java.util.Collections; +import java.util.stream.IntStream; +import org.assertj.core.api.Assertions; import org.junit.jupiter.api.Test; /** Unit tests for {@link SdkDoubleGauge}. */ @@ -96,6 +98,16 @@ void collectMetrics_NoRecords() { assertThat(cumulativeReader.collectAllMetrics()).isEmpty(); } + @Test + void collectMetrics_Remove() { + DoubleGauge gauge = sdkMeter.gaugeBuilder("testGauge").build(); + assertThat(cumulativeReader.collectAllMetrics()).isEmpty(); + Attributes attrs = Attributes.of(stringKey("key"), "value"); + gauge.set(1, attrs); + gauge.remove(attrs); + Assertions.assertThat(cumulativeReader.collectAllMetrics()).isEmpty(); + } + @Test void collectMetrics_WithEmptyAttributes() { DoubleGauge doubleGauge = diff --git a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkDoubleHistogramTest.java b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkDoubleHistogramTest.java index 409607050fb..30820104b50 100644 --- a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkDoubleHistogramTest.java +++ b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkDoubleHistogramTest.java @@ -27,6 +27,8 @@ import java.time.Duration; import java.util.Arrays; import java.util.Collections; +import java.util.stream.IntStream; +import org.assertj.core.api.Assertions; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.RegisterExtension; @@ -63,6 +65,15 @@ void collectMetrics_NoRecords() { assertThat(sdkMeterReader.collectAllMetrics()).isEmpty(); } + @Test + void collectMetrics_Remove() { + DoubleHistogram histogram = sdkMeter.histogramBuilder("testHistogram").build(); + Attributes attrs = Attributes.of(stringKey("key"), "value"); + histogram.record(1, attrs); + histogram.remove(attrs); + Assertions.assertThat(sdkMeterReader.collectAllMetrics()).isEmpty(); + } + @Test void collectMetrics_WithEmptyAttributes() { DoubleHistogram doubleHistogram = diff --git a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkDoubleUpDownCounterTest.java b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkDoubleUpDownCounterTest.java index 244d3d3c5e2..4d2b90b5541 100644 --- a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkDoubleUpDownCounterTest.java +++ b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkDoubleUpDownCounterTest.java @@ -18,6 +18,8 @@ import io.opentelemetry.sdk.testing.exporter.InMemoryMetricReader; import io.opentelemetry.sdk.testing.time.TestClock; import java.time.Duration; +import java.util.stream.IntStream; +import org.assertj.core.api.Assertions; import org.junit.jupiter.api.Test; /** Unit tests for {@link SdkDoubleUpDownCounter}. */ @@ -56,6 +58,16 @@ void collectMetrics_NoRecords() { assertThat(sdkMeterReader.collectAllMetrics()).isEmpty(); } + @Test + void collectMetrics_Remove() { + DoubleUpDownCounter counter = + sdkMeter.upDownCounterBuilder("testUpDownCounter").ofDoubles().build(); + Attributes attrs = Attributes.of(stringKey("key"), "value"); + counter.add(1, attrs); + counter.remove(attrs); + Assertions.assertThat(sdkMeterReader.collectAllMetrics()).isEmpty(); + } + @Test void collectMetrics_WithEmptyAttributes() { DoubleUpDownCounter doubleUpDownCounter = diff --git a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkLongCounterTest.java b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkLongCounterTest.java index fbfe9fb1803..ee34297d8c4 100644 --- a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkLongCounterTest.java +++ b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkLongCounterTest.java @@ -55,6 +55,15 @@ void collectMetrics_NoRecords() { assertThat(sdkMeterReader.collectAllMetrics()).isEmpty(); } + @Test + void collectMetrics_Remove() { + LongCounter counter = sdkMeter.counterBuilder("Counter").build(); + Attributes attrs = Attributes.of(stringKey("key"), "value"); + counter.add(1, attrs); + counter.remove(attrs); + assertThat(sdkMeterReader.collectAllMetrics()).isEmpty(); + } + @Test void collectMetrics_WithEmptyAttributes() { LongCounter longCounter = diff --git a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkLongGaugeTest.java b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkLongGaugeTest.java index 98d464a019a..762518fefe5 100644 --- a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkLongGaugeTest.java +++ b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkLongGaugeTest.java @@ -80,6 +80,16 @@ void collectMetrics_NoRecords() { assertThat(cumulativeReader.collectAllMetrics()).isEmpty(); } + @Test + void collectMetrics_Remove() { + LongGauge gauge = sdkMeter.gaugeBuilder("testGauge").ofLongs().build(); + assertThat(cumulativeReader.collectAllMetrics()).isEmpty(); + Attributes attrs = Attributes.of(stringKey("key"), "value"); + gauge.set(1, attrs); + gauge.remove(attrs); + Assertions.assertThat(cumulativeReader.collectAllMetrics()).isEmpty(); + } + @Test void collectMetrics_WithEmptyAttributes() { LongGauge longGauge = diff --git a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkLongHistogramTest.java b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkLongHistogramTest.java index fabff7b312d..f45d3decad4 100644 --- a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkLongHistogramTest.java +++ b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkLongHistogramTest.java @@ -26,6 +26,8 @@ import java.time.Duration; import java.util.Arrays; import java.util.Collections; +import java.util.stream.IntStream; +import org.assertj.core.api.Assertions; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.RegisterExtension; @@ -62,6 +64,15 @@ void collectMetrics_NoRecords() { assertThat(reader.collectAllMetrics()).isEmpty(); } + @Test + void collectMetrics_Remove() { + LongHistogram histogram = sdkMeter.histogramBuilder("testHistogram").ofLongs().build(); + Attributes attrs = Attributes.of(stringKey("key"), "value"); + histogram.record(1, attrs); + histogram.remove(attrs); + Assertions.assertThat(reader.collectAllMetrics()).isEmpty(); + } + @Test void collectMetrics_WithEmptyAttributes() { LongHistogram longHistogram = diff --git a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkLongUpDownCounterTest.java b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkLongUpDownCounterTest.java index 63bb43a1468..9d9f64f0043 100644 --- a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkLongUpDownCounterTest.java +++ b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkLongUpDownCounterTest.java @@ -18,6 +18,8 @@ import io.opentelemetry.sdk.testing.exporter.InMemoryMetricReader; import io.opentelemetry.sdk.testing.time.TestClock; import java.time.Duration; +import java.util.stream.IntStream; +import org.assertj.core.api.Assertions; import org.junit.jupiter.api.Test; /** Unit tests for {@link SdkLongUpDownCounter}. */ @@ -50,6 +52,15 @@ void collectMetrics_NoRecords() { assertThat(sdkMeterReader.collectAllMetrics()).isEmpty(); } + @Test + void collectMetrics_Remove() { + LongUpDownCounter counter = sdkMeter.upDownCounterBuilder("testUpDownCounter").build(); + Attributes attrs = Attributes.of(stringKey("key"), "value"); + counter.add(1, attrs); + counter.remove(attrs); + Assertions.assertThat(sdkMeterReader.collectAllMetrics()).isEmpty(); + } + @Test void collectMetrics_WithEmptyAttributes() { LongUpDownCounter longUpDownCounter = diff --git a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/internal/state/MetricStorageRegistryTest.java b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/internal/state/MetricStorageRegistryTest.java index f287b76b05e..c9ec56a84a3 100644 --- a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/internal/state/MetricStorageRegistryTest.java +++ b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/internal/state/MetricStorageRegistryTest.java @@ -112,6 +112,9 @@ public void recordLong(long value, Attributes attributes, Context context) {} @Override public void recordDouble(double value, Attributes attributes, Context context) {} + @Override + public void remove(Attributes attributes, Context context) {} + @Override public boolean isEnabled() { return true; From 1eac40c78eb046c7e755a36d81052bcf6a4d10d0 Mon Sep 17 00:00:00 2001 From: Antoine Toulme Date: Mon, 27 Oct 2025 16:26:02 -0700 Subject: [PATCH 02/10] implement default behavior to avoid breaking change --- .../api/metrics/DefaultMeter.java | 24 --------------- .../api/metrics/DoubleCounter.java | 11 +++++-- .../api/metrics/DoubleGauge.java | 10 +++++-- .../api/metrics/DoubleHistogram.java | 11 +++++-- .../api/metrics/DoubleUpDownCounter.java | 11 +++++-- .../api/metrics/LongCounter.java | 11 +++++-- .../opentelemetry/api/metrics/LongGauge.java | 11 +++++-- .../api/metrics/LongHistogram.java | 11 +++++-- .../api/metrics/LongUpDownCounter.java | 10 +++++-- .../metrics/ExtendedDefaultMeter.java | 24 --------------- .../current_vs_latest/opentelemetry-api.txt | 29 ------------------- .../sdk/metrics/SdkDoubleCounter.java | 5 ---- .../sdk/metrics/SdkDoubleGauge.java | 5 ---- .../sdk/metrics/SdkDoubleHistogram.java | 5 ---- .../sdk/metrics/SdkDoubleUpDownCounter.java | 5 ---- .../sdk/metrics/SdkLongCounter.java | 5 ---- .../sdk/metrics/SdkLongGauge.java | 5 ---- .../sdk/metrics/SdkLongHistogram.java | 5 ---- .../sdk/metrics/SdkLongUpDownCounter.java | 5 ---- 19 files changed, 64 insertions(+), 139 deletions(-) diff --git a/api/all/src/main/java/io/opentelemetry/api/metrics/DefaultMeter.java b/api/all/src/main/java/io/opentelemetry/api/metrics/DefaultMeter.java index 76696ccd596..185c4d14e41 100644 --- a/api/all/src/main/java/io/opentelemetry/api/metrics/DefaultMeter.java +++ b/api/all/src/main/java/io/opentelemetry/api/metrics/DefaultMeter.java @@ -81,9 +81,6 @@ public void add(long value, Attributes attributes) {} @Override public void add(long value) {} - @Override - public void remove(Attributes attributes) {} - @Override public void remove(Attributes attributes, Context context) {} } @@ -103,9 +100,6 @@ public void add(double value, Attributes attributes) {} @Override public void add(double value) {} - @Override - public void remove(Attributes attributes) {} - @Override public void remove(Attributes attributes, Context context) {} } @@ -195,9 +189,6 @@ public void add(long value, Attributes attributes) {} @Override public void add(long value) {} - @Override - public void remove(Attributes attributes) {} - @Override public void remove(Attributes attributes, Context context) {} } @@ -217,9 +208,6 @@ public void add(double value, Attributes attributes) {} @Override public void add(double value) {} - @Override - public void remove(Attributes attributes) {} - @Override public void remove(Attributes attributes, Context context) {} } @@ -311,9 +299,6 @@ public void record(double value, Attributes attributes) {} @Override public void record(double value) {} - @Override - public void remove(Attributes attributes) {} - @Override public void remove(Attributes attributes, Context context) {} } @@ -333,9 +318,6 @@ public void record(long value, Attributes attributes) {} @Override public void record(long value) {} - @Override - public void remove(Attributes attributes) {} - @Override public void remove(Attributes attributes, Context context) {} } @@ -437,9 +419,6 @@ public void set(double value, Attributes attributes) {} @Override public void set(double value, Attributes attributes, Context context) {} - @Override - public void remove(Attributes attributes) {} - @Override public void remove(Attributes attributes, Context context) {} } @@ -489,9 +468,6 @@ public void set(long value, Attributes attributes) {} @Override public void set(long value, Attributes attributes, Context context) {} - @Override - public void remove(Attributes attributes) {} - @Override public void remove(Attributes attributes, Context context) {} } diff --git a/api/all/src/main/java/io/opentelemetry/api/metrics/DoubleCounter.java b/api/all/src/main/java/io/opentelemetry/api/metrics/DoubleCounter.java index 53b929825af..4d51e394191 100644 --- a/api/all/src/main/java/io/opentelemetry/api/metrics/DoubleCounter.java +++ b/api/all/src/main/java/io/opentelemetry/api/metrics/DoubleCounter.java @@ -65,14 +65,19 @@ default boolean isEnabled() { * Remove the instrument. * * @param attributes A set of attributes to identify the instrument. + * + * @since 1.56.0 */ - void remove(Attributes attributes); - + default void remove(Attributes attributes) { + remove(attributes, Context.current()); + } /** * Remove the instrument. * * @param attributes A set of attributes to identify the instrument. * @param context The explicit context to associate with this measurement. + * + * @since 1.56.0 */ - void remove(Attributes attributes, Context context); + default void remove(Attributes attributes, Context context) {} } diff --git a/api/all/src/main/java/io/opentelemetry/api/metrics/DoubleGauge.java b/api/all/src/main/java/io/opentelemetry/api/metrics/DoubleGauge.java index 21e550d9e72..f8e675e226e 100644 --- a/api/all/src/main/java/io/opentelemetry/api/metrics/DoubleGauge.java +++ b/api/all/src/main/java/io/opentelemetry/api/metrics/DoubleGauge.java @@ -59,14 +59,20 @@ default boolean isEnabled() { * Remove the instrument. * * @param attributes A set of attributes to identify the instrument. + * + * @since 1.56.0 */ - void remove(Attributes attributes); + default void remove(Attributes attributes) { + remove(attributes, Context.current()); + } /** * Remove the instrument. * * @param attributes A set of attributes to identify the instrument. * @param context The explicit context to associate with this measurement. + * + * @since 1.56.0 */ - void remove(Attributes attributes, Context context); + default void remove(Attributes attributes, Context context) {} } diff --git a/api/all/src/main/java/io/opentelemetry/api/metrics/DoubleHistogram.java b/api/all/src/main/java/io/opentelemetry/api/metrics/DoubleHistogram.java index 3b2e13af277..7036482bdda 100644 --- a/api/all/src/main/java/io/opentelemetry/api/metrics/DoubleHistogram.java +++ b/api/all/src/main/java/io/opentelemetry/api/metrics/DoubleHistogram.java @@ -65,14 +65,19 @@ default boolean isEnabled() { * Remove the instrument. * * @param attributes A set of attributes to identify the instrument. + * + * @since 1.56.0 */ - void remove(Attributes attributes); - + default void remove(Attributes attributes) { + remove(attributes, Context.current()); + } /** * Remove the instrument. * * @param attributes A set of attributes to identify the instrument. * @param context The explicit context to associate with this measurement. + * + * @since 1.56.0 */ - void remove(Attributes attributes, Context context); + default void remove(Attributes attributes, Context context) {} } diff --git a/api/all/src/main/java/io/opentelemetry/api/metrics/DoubleUpDownCounter.java b/api/all/src/main/java/io/opentelemetry/api/metrics/DoubleUpDownCounter.java index 2c3ea5f566e..b1612b247f3 100644 --- a/api/all/src/main/java/io/opentelemetry/api/metrics/DoubleUpDownCounter.java +++ b/api/all/src/main/java/io/opentelemetry/api/metrics/DoubleUpDownCounter.java @@ -65,14 +65,19 @@ default boolean isEnabled() { * Remove the instrument. * * @param attributes A set of attributes to identify the instrument. + * + * @since 1.56.0 */ - void remove(Attributes attributes); - + default void remove(Attributes attributes) { + remove(attributes, Context.current()); + } /** * Remove the instrument. * * @param attributes A set of attributes to identify the instrument. * @param context The explicit context to associate with this measurement. + * + * @since 1.56.0 */ - void remove(Attributes attributes, Context context); + default void remove(Attributes attributes, Context context) {} } diff --git a/api/all/src/main/java/io/opentelemetry/api/metrics/LongCounter.java b/api/all/src/main/java/io/opentelemetry/api/metrics/LongCounter.java index 549a69575fe..3e2ddd52b8e 100644 --- a/api/all/src/main/java/io/opentelemetry/api/metrics/LongCounter.java +++ b/api/all/src/main/java/io/opentelemetry/api/metrics/LongCounter.java @@ -65,14 +65,19 @@ default boolean isEnabled() { * Remove the instrument. * * @param attributes A set of attributes to identify the instrument. + * + * @since 1.56.0 */ - void remove(Attributes attributes); - + default void remove(Attributes attributes) { + remove(attributes, Context.current()); + } /** * Remove the instrument. * * @param attributes A set of attributes to identify the instrument. * @param context The explicit context to associate with this measurement. + * + * @since 1.56.0 */ - void remove(Attributes attributes, Context context); + default void remove(Attributes attributes, Context context) {} } diff --git a/api/all/src/main/java/io/opentelemetry/api/metrics/LongGauge.java b/api/all/src/main/java/io/opentelemetry/api/metrics/LongGauge.java index 122592f2437..e659cb18134 100644 --- a/api/all/src/main/java/io/opentelemetry/api/metrics/LongGauge.java +++ b/api/all/src/main/java/io/opentelemetry/api/metrics/LongGauge.java @@ -59,14 +59,19 @@ default boolean isEnabled() { * Remove the instrument. * * @param attributes A set of attributes to identify the instrument. + * + * @since 1.56.0 */ - void remove(Attributes attributes); - + default void remove(Attributes attributes) { + remove(attributes, Context.current()); + } /** * Remove the instrument. * * @param attributes A set of attributes to identify the instrument. * @param context The explicit context to associate with this measurement. + * + * @since 1.56.0 */ - void remove(Attributes attributes, Context context); + default void remove(Attributes attributes, Context context) {} } diff --git a/api/all/src/main/java/io/opentelemetry/api/metrics/LongHistogram.java b/api/all/src/main/java/io/opentelemetry/api/metrics/LongHistogram.java index 7769dbc6b50..015f203a578 100644 --- a/api/all/src/main/java/io/opentelemetry/api/metrics/LongHistogram.java +++ b/api/all/src/main/java/io/opentelemetry/api/metrics/LongHistogram.java @@ -65,14 +65,19 @@ default boolean isEnabled() { * Remove the instrument. * * @param attributes A set of attributes to identify the instrument. + * + * @since 1.56.0 */ - void remove(Attributes attributes); - + default void remove(Attributes attributes) { + remove(attributes, Context.current()); + } /** * Remove the instrument. * * @param attributes A set of attributes to identify the instrument. * @param context The explicit context to associate with this measurement. + * + * @since 1.56.0 */ - void remove(Attributes attributes, Context context); + default void remove(Attributes attributes, Context context) {} } diff --git a/api/all/src/main/java/io/opentelemetry/api/metrics/LongUpDownCounter.java b/api/all/src/main/java/io/opentelemetry/api/metrics/LongUpDownCounter.java index 546bda86a46..5d75f15c8a3 100644 --- a/api/all/src/main/java/io/opentelemetry/api/metrics/LongUpDownCounter.java +++ b/api/all/src/main/java/io/opentelemetry/api/metrics/LongUpDownCounter.java @@ -65,14 +65,20 @@ default boolean isEnabled() { * Remove the instrument. * * @param attributes A set of attributes to identify the instrument. + * + * @since 1.56.0 */ - void remove(Attributes attributes); + default void remove(Attributes attributes) { + remove(attributes, Context.current()); + } /** * Remove the instrument. * * @param attributes A set of attributes to identify the instrument. * @param context The explicit context to associate with this measurement. + * + * @since 1.56.0 */ - void remove(Attributes attributes, Context context); + default void remove(Attributes attributes, Context context) {} } diff --git a/api/incubator/src/main/java/io/opentelemetry/api/incubator/metrics/ExtendedDefaultMeter.java b/api/incubator/src/main/java/io/opentelemetry/api/incubator/metrics/ExtendedDefaultMeter.java index 6ad26adc4bf..0b1937b8f64 100644 --- a/api/incubator/src/main/java/io/opentelemetry/api/incubator/metrics/ExtendedDefaultMeter.java +++ b/api/incubator/src/main/java/io/opentelemetry/api/incubator/metrics/ExtendedDefaultMeter.java @@ -108,9 +108,6 @@ public void add(long value, Attributes attributes) {} @Override public void add(long value) {} - @Override - public void remove(Attributes attributes) {} - @Override public void remove(Attributes attributes, Context context) {} } @@ -130,9 +127,6 @@ public void add(double value, Attributes attributes) {} @Override public void add(double value) {} - @Override - public void remove(Attributes attributes) {} - @Override public void remove(Attributes attributes, Context context) {} } @@ -222,9 +216,6 @@ public void add(long value, Attributes attributes) {} @Override public void add(long value) {} - @Override - public void remove(Attributes attributes) {} - @Override public void remove(Attributes attributes, Context context) {} } @@ -244,9 +235,6 @@ public void add(double value, Attributes attributes) {} @Override public void add(double value) {} - @Override - public void remove(Attributes attributes) {} - @Override public void remove(Attributes attributes, Context context) {} } @@ -339,9 +327,6 @@ public void record(double value, Attributes attributes) {} @Override public void record(double value) {} - @Override - public void remove(Attributes attributes) {} - @Override public void remove(Attributes attributes, Context context) {} } @@ -361,9 +346,6 @@ public void record(long value, Attributes attributes) {} @Override public void record(long value) {} - @Override - public void remove(Attributes attributes) {} - @Override public void remove(Attributes attributes, Context context) {} } @@ -465,9 +447,6 @@ public void set(double value, Attributes attributes) {} @Override public void set(double value, Attributes attributes, Context context) {} - @Override - public void remove(Attributes attributes) {} - @Override public void remove(Attributes attributes, Context context) {} } @@ -517,9 +496,6 @@ public void set(long value, Attributes attributes) {} @Override public void set(long value, Attributes attributes, Context context) {} - @Override - public void remove(Attributes attributes) {} - @Override public void remove(Attributes attributes, Context context) {} } diff --git a/docs/apidiffs/current_vs_latest/opentelemetry-api.txt b/docs/apidiffs/current_vs_latest/opentelemetry-api.txt index 23a205e4a1a..5886a7288d5 100644 --- a/docs/apidiffs/current_vs_latest/opentelemetry-api.txt +++ b/docs/apidiffs/current_vs_latest/opentelemetry-api.txt @@ -1,31 +1,2 @@ Comparing source compatibility of opentelemetry-api-1.62.0-SNAPSHOT.jar against opentelemetry-api-1.61.0.jar No changes. -Comparing source compatibility of opentelemetry-api-1.61.0-SNAPSHOT.jar against opentelemetry-api-1.60.1.jar -**** MODIFIED INTERFACE: PUBLIC ABSTRACT io.opentelemetry.api.metrics.DoubleGauge (not serializable) - === CLASS FILE FORMAT VERSION: 52.0 <- 52.0 - +++* NEW METHOD: PUBLIC(+) ABSTRACT(+) void remove(io.opentelemetry.api.common.Attributes) - +++* NEW METHOD: PUBLIC(+) ABSTRACT(+) void remove(io.opentelemetry.api.common.Attributes, io.opentelemetry.context.Context) -**** MODIFIED INTERFACE: PUBLIC ABSTRACT io.opentelemetry.api.metrics.DoubleHistogram (not serializable) - === CLASS FILE FORMAT VERSION: 52.0 <- 52.0 - +++* NEW METHOD: PUBLIC(+) ABSTRACT(+) void remove(io.opentelemetry.api.common.Attributes) - +++* NEW METHOD: PUBLIC(+) ABSTRACT(+) void remove(io.opentelemetry.api.common.Attributes, io.opentelemetry.context.Context) -**** MODIFIED INTERFACE: PUBLIC ABSTRACT io.opentelemetry.api.metrics.DoubleUpDownCounter (not serializable) - === CLASS FILE FORMAT VERSION: 52.0 <- 52.0 - +++* NEW METHOD: PUBLIC(+) ABSTRACT(+) void remove(io.opentelemetry.api.common.Attributes) - +++* NEW METHOD: PUBLIC(+) ABSTRACT(+) void remove(io.opentelemetry.api.common.Attributes, io.opentelemetry.context.Context) -**** MODIFIED INTERFACE: PUBLIC ABSTRACT io.opentelemetry.api.metrics.LongCounter (not serializable) - === CLASS FILE FORMAT VERSION: 52.0 <- 52.0 - +++* NEW METHOD: PUBLIC(+) ABSTRACT(+) void remove(io.opentelemetry.api.common.Attributes) - +++* NEW METHOD: PUBLIC(+) ABSTRACT(+) void remove(io.opentelemetry.api.common.Attributes, io.opentelemetry.context.Context) -**** MODIFIED INTERFACE: PUBLIC ABSTRACT io.opentelemetry.api.metrics.LongGauge (not serializable) - === CLASS FILE FORMAT VERSION: 52.0 <- 52.0 - +++* NEW METHOD: PUBLIC(+) ABSTRACT(+) void remove(io.opentelemetry.api.common.Attributes) - +++* NEW METHOD: PUBLIC(+) ABSTRACT(+) void remove(io.opentelemetry.api.common.Attributes, io.opentelemetry.context.Context) -**** MODIFIED INTERFACE: PUBLIC ABSTRACT io.opentelemetry.api.metrics.LongHistogram (not serializable) - === CLASS FILE FORMAT VERSION: 52.0 <- 52.0 - +++* NEW METHOD: PUBLIC(+) ABSTRACT(+) void remove(io.opentelemetry.api.common.Attributes) - +++* NEW METHOD: PUBLIC(+) ABSTRACT(+) void remove(io.opentelemetry.api.common.Attributes, io.opentelemetry.context.Context) -**** MODIFIED INTERFACE: PUBLIC ABSTRACT io.opentelemetry.api.metrics.LongUpDownCounter (not serializable) - === CLASS FILE FORMAT VERSION: 52.0 <- 52.0 - +++* NEW METHOD: PUBLIC(+) ABSTRACT(+) void remove(io.opentelemetry.api.common.Attributes) - +++* NEW METHOD: PUBLIC(+) ABSTRACT(+) void remove(io.opentelemetry.api.common.Attributes, io.opentelemetry.context.Context) diff --git a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkDoubleCounter.java b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkDoubleCounter.java index c30f5bd5c3c..c94031d6618 100644 --- a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkDoubleCounter.java +++ b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkDoubleCounter.java @@ -61,11 +61,6 @@ public void add(double increment) { add(increment, Attributes.empty()); } - @Override - public void remove(Attributes attributes) { - remove(attributes, Context.current()); - } - @Override public void remove(Attributes attributes, Context context) { storage.remove(attributes, context); diff --git a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkDoubleGauge.java b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkDoubleGauge.java index 9ad87e8dfba..28fd35650b9 100644 --- a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkDoubleGauge.java +++ b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkDoubleGauge.java @@ -48,11 +48,6 @@ public void set(double value) { set(value, Attributes.empty()); } - @Override - public void remove(Attributes attributes) { - remove(attributes, Context.current()); - } - @Override public void remove(Attributes attributes, Context context) { storage.remove(attributes, context); diff --git a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkDoubleHistogram.java b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkDoubleHistogram.java index ba6fbe1e2a0..9e527dbece3 100644 --- a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkDoubleHistogram.java +++ b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkDoubleHistogram.java @@ -61,11 +61,6 @@ public void record(double value) { record(value, Attributes.empty()); } - @Override - public void remove(Attributes attributes) { - remove(attributes, Context.current()); - } - @Override public void remove(Attributes attributes, Context context) { storage.remove(attributes, context); diff --git a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkDoubleUpDownCounter.java b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkDoubleUpDownCounter.java index b4693c42a56..e3e4ba429b9 100644 --- a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkDoubleUpDownCounter.java +++ b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkDoubleUpDownCounter.java @@ -48,11 +48,6 @@ public void add(double increment) { add(increment, Attributes.empty()); } - @Override - public void remove(Attributes attributes) { - remove(attributes, Context.current()); - } - @Override public void remove(Attributes attributes, Context context) { storage.remove(attributes, context); diff --git a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkLongCounter.java b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkLongCounter.java index 2827656ba8c..0fbc2ade147 100644 --- a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkLongCounter.java +++ b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkLongCounter.java @@ -62,11 +62,6 @@ public void add(long increment) { add(increment, Attributes.empty()); } - @Override - public void remove(Attributes attributes) { - remove(attributes, Context.current()); - } - @Override public void remove(Attributes attributes, Context context) { storage.remove(attributes, context); diff --git a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkLongGauge.java b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkLongGauge.java index 20781e6c17c..2489fb2257a 100644 --- a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkLongGauge.java +++ b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkLongGauge.java @@ -47,11 +47,6 @@ public void set(long value) { set(value, Attributes.empty()); } - @Override - public void remove(Attributes attributes) { - remove(attributes, Context.current()); - } - @Override public void remove(Attributes attributes, Context context) { storage.remove(attributes, context); diff --git a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkLongHistogram.java b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkLongHistogram.java index 0d0d4b1e74f..ed76a06e493 100644 --- a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkLongHistogram.java +++ b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkLongHistogram.java @@ -62,11 +62,6 @@ public void record(long value) { record(value, Attributes.empty()); } - @Override - public void remove(Attributes attributes) { - remove(attributes, Context.current()); - } - @Override public void remove(Attributes attributes, Context context) { storage.remove(attributes, context); diff --git a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkLongUpDownCounter.java b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkLongUpDownCounter.java index 7e43a565d97..a0a4c4660e7 100644 --- a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkLongUpDownCounter.java +++ b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkLongUpDownCounter.java @@ -48,11 +48,6 @@ public void add(long increment) { add(increment, Attributes.empty()); } - @Override - public void remove(Attributes attributes) { - remove(attributes, Context.current()); - } - @Override public void remove(Attributes attributes, Context context) { storage.remove(attributes, context); From e13699463c56e2d4f5416315d63aec80e60bd10f Mon Sep 17 00:00:00 2001 From: Antoine Toulme Date: Mon, 27 Oct 2025 20:41:01 -0700 Subject: [PATCH 03/10] spotless --- .../main/java/io/opentelemetry/api/metrics/DoubleCounter.java | 3 +-- .../main/java/io/opentelemetry/api/metrics/DoubleGauge.java | 2 -- .../java/io/opentelemetry/api/metrics/DoubleHistogram.java | 3 +-- .../java/io/opentelemetry/api/metrics/DoubleUpDownCounter.java | 3 +-- .../main/java/io/opentelemetry/api/metrics/LongCounter.java | 3 +-- .../src/main/java/io/opentelemetry/api/metrics/LongGauge.java | 3 +-- .../main/java/io/opentelemetry/api/metrics/LongHistogram.java | 3 +-- .../java/io/opentelemetry/api/metrics/LongUpDownCounter.java | 2 -- 8 files changed, 6 insertions(+), 16 deletions(-) diff --git a/api/all/src/main/java/io/opentelemetry/api/metrics/DoubleCounter.java b/api/all/src/main/java/io/opentelemetry/api/metrics/DoubleCounter.java index 4d51e394191..ff1737c1d79 100644 --- a/api/all/src/main/java/io/opentelemetry/api/metrics/DoubleCounter.java +++ b/api/all/src/main/java/io/opentelemetry/api/metrics/DoubleCounter.java @@ -65,18 +65,17 @@ default boolean isEnabled() { * Remove the instrument. * * @param attributes A set of attributes to identify the instrument. - * * @since 1.56.0 */ default void remove(Attributes attributes) { remove(attributes, Context.current()); } + /** * Remove the instrument. * * @param attributes A set of attributes to identify the instrument. * @param context The explicit context to associate with this measurement. - * * @since 1.56.0 */ default void remove(Attributes attributes, Context context) {} diff --git a/api/all/src/main/java/io/opentelemetry/api/metrics/DoubleGauge.java b/api/all/src/main/java/io/opentelemetry/api/metrics/DoubleGauge.java index f8e675e226e..d9879abe5df 100644 --- a/api/all/src/main/java/io/opentelemetry/api/metrics/DoubleGauge.java +++ b/api/all/src/main/java/io/opentelemetry/api/metrics/DoubleGauge.java @@ -59,7 +59,6 @@ default boolean isEnabled() { * Remove the instrument. * * @param attributes A set of attributes to identify the instrument. - * * @since 1.56.0 */ default void remove(Attributes attributes) { @@ -71,7 +70,6 @@ default void remove(Attributes attributes) { * * @param attributes A set of attributes to identify the instrument. * @param context The explicit context to associate with this measurement. - * * @since 1.56.0 */ default void remove(Attributes attributes, Context context) {} diff --git a/api/all/src/main/java/io/opentelemetry/api/metrics/DoubleHistogram.java b/api/all/src/main/java/io/opentelemetry/api/metrics/DoubleHistogram.java index 7036482bdda..a8c8cfa9f70 100644 --- a/api/all/src/main/java/io/opentelemetry/api/metrics/DoubleHistogram.java +++ b/api/all/src/main/java/io/opentelemetry/api/metrics/DoubleHistogram.java @@ -65,18 +65,17 @@ default boolean isEnabled() { * Remove the instrument. * * @param attributes A set of attributes to identify the instrument. - * * @since 1.56.0 */ default void remove(Attributes attributes) { remove(attributes, Context.current()); } + /** * Remove the instrument. * * @param attributes A set of attributes to identify the instrument. * @param context The explicit context to associate with this measurement. - * * @since 1.56.0 */ default void remove(Attributes attributes, Context context) {} diff --git a/api/all/src/main/java/io/opentelemetry/api/metrics/DoubleUpDownCounter.java b/api/all/src/main/java/io/opentelemetry/api/metrics/DoubleUpDownCounter.java index b1612b247f3..dbd0d88f2cd 100644 --- a/api/all/src/main/java/io/opentelemetry/api/metrics/DoubleUpDownCounter.java +++ b/api/all/src/main/java/io/opentelemetry/api/metrics/DoubleUpDownCounter.java @@ -65,18 +65,17 @@ default boolean isEnabled() { * Remove the instrument. * * @param attributes A set of attributes to identify the instrument. - * * @since 1.56.0 */ default void remove(Attributes attributes) { remove(attributes, Context.current()); } + /** * Remove the instrument. * * @param attributes A set of attributes to identify the instrument. * @param context The explicit context to associate with this measurement. - * * @since 1.56.0 */ default void remove(Attributes attributes, Context context) {} diff --git a/api/all/src/main/java/io/opentelemetry/api/metrics/LongCounter.java b/api/all/src/main/java/io/opentelemetry/api/metrics/LongCounter.java index 3e2ddd52b8e..799233ab635 100644 --- a/api/all/src/main/java/io/opentelemetry/api/metrics/LongCounter.java +++ b/api/all/src/main/java/io/opentelemetry/api/metrics/LongCounter.java @@ -65,18 +65,17 @@ default boolean isEnabled() { * Remove the instrument. * * @param attributes A set of attributes to identify the instrument. - * * @since 1.56.0 */ default void remove(Attributes attributes) { remove(attributes, Context.current()); } + /** * Remove the instrument. * * @param attributes A set of attributes to identify the instrument. * @param context The explicit context to associate with this measurement. - * * @since 1.56.0 */ default void remove(Attributes attributes, Context context) {} diff --git a/api/all/src/main/java/io/opentelemetry/api/metrics/LongGauge.java b/api/all/src/main/java/io/opentelemetry/api/metrics/LongGauge.java index e659cb18134..033970f34c2 100644 --- a/api/all/src/main/java/io/opentelemetry/api/metrics/LongGauge.java +++ b/api/all/src/main/java/io/opentelemetry/api/metrics/LongGauge.java @@ -59,18 +59,17 @@ default boolean isEnabled() { * Remove the instrument. * * @param attributes A set of attributes to identify the instrument. - * * @since 1.56.0 */ default void remove(Attributes attributes) { remove(attributes, Context.current()); } + /** * Remove the instrument. * * @param attributes A set of attributes to identify the instrument. * @param context The explicit context to associate with this measurement. - * * @since 1.56.0 */ default void remove(Attributes attributes, Context context) {} diff --git a/api/all/src/main/java/io/opentelemetry/api/metrics/LongHistogram.java b/api/all/src/main/java/io/opentelemetry/api/metrics/LongHistogram.java index 015f203a578..731dd22cd65 100644 --- a/api/all/src/main/java/io/opentelemetry/api/metrics/LongHistogram.java +++ b/api/all/src/main/java/io/opentelemetry/api/metrics/LongHistogram.java @@ -65,18 +65,17 @@ default boolean isEnabled() { * Remove the instrument. * * @param attributes A set of attributes to identify the instrument. - * * @since 1.56.0 */ default void remove(Attributes attributes) { remove(attributes, Context.current()); } + /** * Remove the instrument. * * @param attributes A set of attributes to identify the instrument. * @param context The explicit context to associate with this measurement. - * * @since 1.56.0 */ default void remove(Attributes attributes, Context context) {} diff --git a/api/all/src/main/java/io/opentelemetry/api/metrics/LongUpDownCounter.java b/api/all/src/main/java/io/opentelemetry/api/metrics/LongUpDownCounter.java index 5d75f15c8a3..d7bc0045f93 100644 --- a/api/all/src/main/java/io/opentelemetry/api/metrics/LongUpDownCounter.java +++ b/api/all/src/main/java/io/opentelemetry/api/metrics/LongUpDownCounter.java @@ -65,7 +65,6 @@ default boolean isEnabled() { * Remove the instrument. * * @param attributes A set of attributes to identify the instrument. - * * @since 1.56.0 */ default void remove(Attributes attributes) { @@ -77,7 +76,6 @@ default void remove(Attributes attributes) { * * @param attributes A set of attributes to identify the instrument. * @param context The explicit context to associate with this measurement. - * * @since 1.56.0 */ default void remove(Attributes attributes, Context context) {} From 620ca21fb15443ab87bc97e2f60553c049e6de3f Mon Sep 17 00:00:00 2001 From: Antoine Toulme Date: Mon, 27 Oct 2025 21:46:37 -0700 Subject: [PATCH 04/10] remove code --- .../api/metrics/DefaultMeter.java | 21 ---------------- .../metrics/ExtendedDefaultMeter.java | 24 ------------------- 2 files changed, 45 deletions(-) diff --git a/api/all/src/main/java/io/opentelemetry/api/metrics/DefaultMeter.java b/api/all/src/main/java/io/opentelemetry/api/metrics/DefaultMeter.java index 185c4d14e41..e8e33474a79 100644 --- a/api/all/src/main/java/io/opentelemetry/api/metrics/DefaultMeter.java +++ b/api/all/src/main/java/io/opentelemetry/api/metrics/DefaultMeter.java @@ -80,9 +80,6 @@ public void add(long value, Attributes attributes) {} @Override public void add(long value) {} - - @Override - public void remove(Attributes attributes, Context context) {} } private static class NoopDoubleCounter implements DoubleCounter { @@ -100,8 +97,6 @@ public void add(double value, Attributes attributes) {} @Override public void add(double value) {} - @Override - public void remove(Attributes attributes, Context context) {} } private static class NoopLongCounterBuilder implements LongCounterBuilder { @@ -189,8 +184,6 @@ public void add(long value, Attributes attributes) {} @Override public void add(long value) {} - @Override - public void remove(Attributes attributes, Context context) {} } private static class NoopDoubleUpDownCounter implements DoubleUpDownCounter { @@ -208,8 +201,6 @@ public void add(double value, Attributes attributes) {} @Override public void add(double value) {} - @Override - public void remove(Attributes attributes, Context context) {} } private static class NoopLongUpDownCounterBuilder implements LongUpDownCounterBuilder { @@ -298,9 +289,6 @@ public void record(double value, Attributes attributes) {} @Override public void record(double value) {} - - @Override - public void remove(Attributes attributes, Context context) {} } private static class NoopLongHistogram implements LongHistogram { @@ -317,9 +305,6 @@ public void record(long value, Attributes attributes) {} @Override public void record(long value) {} - - @Override - public void remove(Attributes attributes, Context context) {} } private static class NoopDoubleHistogramBuilder implements DoubleHistogramBuilder { @@ -418,9 +403,6 @@ public void set(double value, Attributes attributes) {} @Override public void set(double value, Attributes attributes, Context context) {} - - @Override - public void remove(Attributes attributes, Context context) {} } private static class NoopLongGaugeBuilder implements LongGaugeBuilder { @@ -467,9 +449,6 @@ public void set(long value, Attributes attributes) {} @Override public void set(long value, Attributes attributes, Context context) {} - - @Override - public void remove(Attributes attributes, Context context) {} } private static class NoopObservableDoubleMeasurement implements ObservableDoubleMeasurement { diff --git a/api/incubator/src/main/java/io/opentelemetry/api/incubator/metrics/ExtendedDefaultMeter.java b/api/incubator/src/main/java/io/opentelemetry/api/incubator/metrics/ExtendedDefaultMeter.java index 0b1937b8f64..8283c7bb0b6 100644 --- a/api/incubator/src/main/java/io/opentelemetry/api/incubator/metrics/ExtendedDefaultMeter.java +++ b/api/incubator/src/main/java/io/opentelemetry/api/incubator/metrics/ExtendedDefaultMeter.java @@ -107,9 +107,6 @@ public void add(long value, Attributes attributes) {} @Override public void add(long value) {} - - @Override - public void remove(Attributes attributes, Context context) {} } private static class NoopDoubleCounter implements ExtendedDoubleCounter { @@ -126,9 +123,6 @@ public void add(double value, Attributes attributes) {} @Override public void add(double value) {} - - @Override - public void remove(Attributes attributes, Context context) {} } private static class NoopLongCounterBuilder implements ExtendedLongCounterBuilder { @@ -215,9 +209,6 @@ public void add(long value, Attributes attributes) {} @Override public void add(long value) {} - - @Override - public void remove(Attributes attributes, Context context) {} } private static class NoopDoubleUpDownCounter implements ExtendedDoubleUpDownCounter { @@ -234,9 +225,6 @@ public void add(double value, Attributes attributes) {} @Override public void add(double value) {} - - @Override - public void remove(Attributes attributes, Context context) {} } private static class NoopLongUpDownCounterBuilder implements ExtendedLongUpDownCounterBuilder { @@ -326,9 +314,6 @@ public void record(double value, Attributes attributes) {} @Override public void record(double value) {} - - @Override - public void remove(Attributes attributes, Context context) {} } private static class NoopLongHistogram implements ExtendedLongHistogram { @@ -345,9 +330,6 @@ public void record(long value, Attributes attributes) {} @Override public void record(long value) {} - - @Override - public void remove(Attributes attributes, Context context) {} } private static class NoopDoubleHistogramBuilder implements ExtendedDoubleHistogramBuilder { @@ -446,9 +428,6 @@ public void set(double value, Attributes attributes) {} @Override public void set(double value, Attributes attributes, Context context) {} - - @Override - public void remove(Attributes attributes, Context context) {} } private static class NoopLongGaugeBuilder implements ExtendedLongGaugeBuilder { @@ -495,9 +474,6 @@ public void set(long value, Attributes attributes) {} @Override public void set(long value, Attributes attributes, Context context) {} - - @Override - public void remove(Attributes attributes, Context context) {} } private static class NoopObservableDoubleMeasurement implements ObservableDoubleMeasurement { From adb9911fa39cbf651cbb96b30ac0f13b099ed165 Mon Sep 17 00:00:00 2001 From: Antoine Toulme Date: Mon, 27 Oct 2025 21:55:21 -0700 Subject: [PATCH 05/10] spotless --- .../main/java/io/opentelemetry/api/metrics/DefaultMeter.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/api/all/src/main/java/io/opentelemetry/api/metrics/DefaultMeter.java b/api/all/src/main/java/io/opentelemetry/api/metrics/DefaultMeter.java index e8e33474a79..5caa7d829c2 100644 --- a/api/all/src/main/java/io/opentelemetry/api/metrics/DefaultMeter.java +++ b/api/all/src/main/java/io/opentelemetry/api/metrics/DefaultMeter.java @@ -96,7 +96,6 @@ public void add(double value, Attributes attributes) {} @Override public void add(double value) {} - } private static class NoopLongCounterBuilder implements LongCounterBuilder { @@ -183,7 +182,6 @@ public void add(long value, Attributes attributes) {} @Override public void add(long value) {} - } private static class NoopDoubleUpDownCounter implements DoubleUpDownCounter { @@ -200,7 +198,6 @@ public void add(double value, Attributes attributes) {} @Override public void add(double value) {} - } private static class NoopLongUpDownCounterBuilder implements LongUpDownCounterBuilder { From cb69e2a77270365511a1200899159a2730575c85 Mon Sep 17 00:00:00 2001 From: Antoine Toulme Date: Mon, 27 Oct 2025 22:57:51 -0700 Subject: [PATCH 06/10] remove code and add test --- .../metrics/internal/state/EmptyMetricStorage.java | 3 --- .../internal/state/WriteableMetricStorage.java | 2 +- .../internal/state/MetricStorageRegistryTest.java | 3 --- .../state/SynchronousMetricStorageTest.java | 14 ++++++++++++++ 4 files changed, 15 insertions(+), 7 deletions(-) diff --git a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/internal/state/EmptyMetricStorage.java b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/internal/state/EmptyMetricStorage.java index ad41e89b68d..c8580e79f61 100644 --- a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/internal/state/EmptyMetricStorage.java +++ b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/internal/state/EmptyMetricStorage.java @@ -37,9 +37,6 @@ public void recordLong(long value, Attributes attributes, Context context) {} @Override public void recordDouble(double value, Attributes attributes, Context context) {} - @Override - public void remove(Attributes attributes, Context context) {} - @Override public boolean isEnabled() { return false; diff --git a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/internal/state/WriteableMetricStorage.java b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/internal/state/WriteableMetricStorage.java index 61b562cbf51..d2225cf700e 100644 --- a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/internal/state/WriteableMetricStorage.java +++ b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/internal/state/WriteableMetricStorage.java @@ -24,7 +24,7 @@ public interface WriteableMetricStorage { void recordDouble(double value, Attributes attributes, Context context); /** Remove a measurement. */ - void remove(Attributes attributes, Context context); + default void remove(Attributes attributes, Context context) {} /** * Returns {@code true} if the storage is actively recording measurements, and {@code false} diff --git a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/internal/state/MetricStorageRegistryTest.java b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/internal/state/MetricStorageRegistryTest.java index c9ec56a84a3..f287b76b05e 100644 --- a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/internal/state/MetricStorageRegistryTest.java +++ b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/internal/state/MetricStorageRegistryTest.java @@ -112,9 +112,6 @@ public void recordLong(long value, Attributes attributes, Context context) {} @Override public void recordDouble(double value, Attributes attributes, Context context) {} - @Override - public void remove(Attributes attributes, Context context) {} - @Override public boolean isEnabled() { return true; diff --git a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/internal/state/SynchronousMetricStorageTest.java b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/internal/state/SynchronousMetricStorageTest.java index ec2ad73652f..4260fb53698 100644 --- a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/internal/state/SynchronousMetricStorageTest.java +++ b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/internal/state/SynchronousMetricStorageTest.java @@ -941,6 +941,20 @@ void enabledThenDisable_recordAndCollect(MemoryMode memoryMode) { storage.recordDouble(10d, Attributes.empty(), Context.current()); assertThat(storage.collect(RESOURCE, INSTRUMENTATION_SCOPE_INFO, 10).isEmpty()).isTrue(); + + storage.remove(Attributes.empty(), Context.current()); + + storage.setEnabled(true); + + storage.recordDouble(10d, Attributes.empty(), Context.current()); + + storage.setEnabled(false); + + storage.remove(Attributes.empty(), Context.current()); + + storage.setEnabled(true); + + assertThat(storage.collect(RESOURCE, INSTRUMENTATION_SCOPE_INFO, 0, 10).isEmpty()).isFalse(); } @ParameterizedTest From ea5bfd6abf72d7dc407f02a56207e6eec255fff8 Mon Sep 17 00:00:00 2001 From: Antoine Toulme Date: Mon, 16 Mar 2026 11:59:50 -0700 Subject: [PATCH 07/10] remove -> finish --- .../api/metrics/DoubleCounter.java | 10 +++--- .../api/metrics/DoubleGauge.java | 10 +++--- .../api/metrics/DoubleHistogram.java | 10 +++--- .../api/metrics/DoubleUpDownCounter.java | 10 +++--- .../api/metrics/LongCounter.java | 10 +++--- .../opentelemetry/api/metrics/LongGauge.java | 10 +++--- .../api/metrics/LongHistogram.java | 10 +++--- .../api/metrics/LongUpDownCounter.java | 10 +++--- .../sdk/metrics/SdkDoubleCounter.java | 2 +- .../sdk/metrics/SdkDoubleGauge.java | 2 +- .../sdk/metrics/SdkDoubleHistogram.java | 2 +- .../sdk/metrics/SdkDoubleUpDownCounter.java | 2 +- .../sdk/metrics/SdkLongCounter.java | 2 +- .../sdk/metrics/SdkLongGauge.java | 2 +- .../sdk/metrics/SdkLongHistogram.java | 2 +- .../sdk/metrics/SdkLongUpDownCounter.java | 2 +- .../DefaultSynchronousMetricStorage.java | 34 ++++++++++++------- .../sdk/metrics/SdkDoubleCounterTest.java | 4 +-- .../sdk/metrics/SdkDoubleGaugeTest.java | 7 ++-- .../sdk/metrics/SdkDoubleHistogramTest.java | 5 ++- .../metrics/SdkDoubleUpDownCounterTest.java | 5 ++- .../sdk/metrics/SdkLongCounterTest.java | 4 +-- .../sdk/metrics/SdkLongGaugeTest.java | 6 ++-- .../sdk/metrics/SdkLongHistogramTest.java | 5 ++- .../sdk/metrics/SdkLongUpDownCounterTest.java | 5 ++- .../SdkObservableDoubleCounterTest.java | 2 +- .../SdkObservableDoubleUpDownCounterTest.java | 2 +- .../metrics/SdkObservableLongCounterTest.java | 2 +- .../SdkObservableLongUpDownCounterTest.java | 2 +- 29 files changed, 91 insertions(+), 88 deletions(-) diff --git a/api/all/src/main/java/io/opentelemetry/api/metrics/DoubleCounter.java b/api/all/src/main/java/io/opentelemetry/api/metrics/DoubleCounter.java index ff1737c1d79..f9183b3caa3 100644 --- a/api/all/src/main/java/io/opentelemetry/api/metrics/DoubleCounter.java +++ b/api/all/src/main/java/io/opentelemetry/api/metrics/DoubleCounter.java @@ -62,21 +62,21 @@ default boolean isEnabled() { void add(double value, Attributes attributes, Context context); /** - * Remove the instrument. + * Finish the instrument record. * * @param attributes A set of attributes to identify the instrument. * @since 1.56.0 */ - default void remove(Attributes attributes) { - remove(attributes, Context.current()); + default void finish(Attributes attributes) { + finish(attributes, Context.current()); } /** - * Remove the instrument. + * Finish the instrument record. * * @param attributes A set of attributes to identify the instrument. * @param context The explicit context to associate with this measurement. * @since 1.56.0 */ - default void remove(Attributes attributes, Context context) {} + default void finish(Attributes attributes, Context context) {} } diff --git a/api/all/src/main/java/io/opentelemetry/api/metrics/DoubleGauge.java b/api/all/src/main/java/io/opentelemetry/api/metrics/DoubleGauge.java index d9879abe5df..e002c7c6717 100644 --- a/api/all/src/main/java/io/opentelemetry/api/metrics/DoubleGauge.java +++ b/api/all/src/main/java/io/opentelemetry/api/metrics/DoubleGauge.java @@ -56,21 +56,21 @@ default boolean isEnabled() { void set(double value, Attributes attributes, Context context); /** - * Remove the instrument. + * Finish the instrument record. * * @param attributes A set of attributes to identify the instrument. * @since 1.56.0 */ - default void remove(Attributes attributes) { - remove(attributes, Context.current()); + default void finish(Attributes attributes) { + finish(attributes, Context.current()); } /** - * Remove the instrument. + * Finish the instrument record. * * @param attributes A set of attributes to identify the instrument. * @param context The explicit context to associate with this measurement. * @since 1.56.0 */ - default void remove(Attributes attributes, Context context) {} + default void finish(Attributes attributes, Context context) {} } diff --git a/api/all/src/main/java/io/opentelemetry/api/metrics/DoubleHistogram.java b/api/all/src/main/java/io/opentelemetry/api/metrics/DoubleHistogram.java index a8c8cfa9f70..c5f449ac7ee 100644 --- a/api/all/src/main/java/io/opentelemetry/api/metrics/DoubleHistogram.java +++ b/api/all/src/main/java/io/opentelemetry/api/metrics/DoubleHistogram.java @@ -62,21 +62,21 @@ default boolean isEnabled() { void record(double value, Attributes attributes, Context context); /** - * Remove the instrument. + * Finish the instrument record. * * @param attributes A set of attributes to identify the instrument. * @since 1.56.0 */ - default void remove(Attributes attributes) { - remove(attributes, Context.current()); + default void finish(Attributes attributes) { + finish(attributes, Context.current()); } /** - * Remove the instrument. + * Finish the instrument record. * * @param attributes A set of attributes to identify the instrument. * @param context The explicit context to associate with this measurement. * @since 1.56.0 */ - default void remove(Attributes attributes, Context context) {} + default void finish(Attributes attributes, Context context) {} } diff --git a/api/all/src/main/java/io/opentelemetry/api/metrics/DoubleUpDownCounter.java b/api/all/src/main/java/io/opentelemetry/api/metrics/DoubleUpDownCounter.java index dbd0d88f2cd..ade60c054f0 100644 --- a/api/all/src/main/java/io/opentelemetry/api/metrics/DoubleUpDownCounter.java +++ b/api/all/src/main/java/io/opentelemetry/api/metrics/DoubleUpDownCounter.java @@ -62,21 +62,21 @@ default boolean isEnabled() { void add(double value, Attributes attributes, Context context); /** - * Remove the instrument. + * Finish the instrument record. * * @param attributes A set of attributes to identify the instrument. * @since 1.56.0 */ - default void remove(Attributes attributes) { - remove(attributes, Context.current()); + default void finish(Attributes attributes) { + finish(attributes, Context.current()); } /** - * Remove the instrument. + * Finish the instrument record. * * @param attributes A set of attributes to identify the instrument. * @param context The explicit context to associate with this measurement. * @since 1.56.0 */ - default void remove(Attributes attributes, Context context) {} + default void finish(Attributes attributes, Context context) {} } diff --git a/api/all/src/main/java/io/opentelemetry/api/metrics/LongCounter.java b/api/all/src/main/java/io/opentelemetry/api/metrics/LongCounter.java index 799233ab635..3527b89732f 100644 --- a/api/all/src/main/java/io/opentelemetry/api/metrics/LongCounter.java +++ b/api/all/src/main/java/io/opentelemetry/api/metrics/LongCounter.java @@ -62,21 +62,21 @@ default boolean isEnabled() { void add(long value, Attributes attributes, Context context); /** - * Remove the instrument. + * Finish the instrument record. * * @param attributes A set of attributes to identify the instrument. * @since 1.56.0 */ - default void remove(Attributes attributes) { - remove(attributes, Context.current()); + default void finish(Attributes attributes) { + finish(attributes, Context.current()); } /** - * Remove the instrument. + * Finish the instrument record. * * @param attributes A set of attributes to identify the instrument. * @param context The explicit context to associate with this measurement. * @since 1.56.0 */ - default void remove(Attributes attributes, Context context) {} + default void finish(Attributes attributes, Context context) {} } diff --git a/api/all/src/main/java/io/opentelemetry/api/metrics/LongGauge.java b/api/all/src/main/java/io/opentelemetry/api/metrics/LongGauge.java index 033970f34c2..d014ff03303 100644 --- a/api/all/src/main/java/io/opentelemetry/api/metrics/LongGauge.java +++ b/api/all/src/main/java/io/opentelemetry/api/metrics/LongGauge.java @@ -56,21 +56,21 @@ default boolean isEnabled() { void set(long value, Attributes attributes, Context context); /** - * Remove the instrument. + * Finish the instrument record. * * @param attributes A set of attributes to identify the instrument. * @since 1.56.0 */ - default void remove(Attributes attributes) { - remove(attributes, Context.current()); + default void finish(Attributes attributes) { + finish(attributes, Context.current()); } /** - * Remove the instrument. + * Finish the instrument record. * * @param attributes A set of attributes to identify the instrument. * @param context The explicit context to associate with this measurement. * @since 1.56.0 */ - default void remove(Attributes attributes, Context context) {} + default void finish(Attributes attributes, Context context) {} } diff --git a/api/all/src/main/java/io/opentelemetry/api/metrics/LongHistogram.java b/api/all/src/main/java/io/opentelemetry/api/metrics/LongHistogram.java index 731dd22cd65..b4a474f2f7e 100644 --- a/api/all/src/main/java/io/opentelemetry/api/metrics/LongHistogram.java +++ b/api/all/src/main/java/io/opentelemetry/api/metrics/LongHistogram.java @@ -62,21 +62,21 @@ default boolean isEnabled() { void record(long value, Attributes attributes, Context context); /** - * Remove the instrument. + * Finish the instrument record. * * @param attributes A set of attributes to identify the instrument. * @since 1.56.0 */ - default void remove(Attributes attributes) { - remove(attributes, Context.current()); + default void finish(Attributes attributes) { + finish(attributes, Context.current()); } /** - * Remove the instrument. + * Finish the instrument record. * * @param attributes A set of attributes to identify the instrument. * @param context The explicit context to associate with this measurement. * @since 1.56.0 */ - default void remove(Attributes attributes, Context context) {} + default void finish(Attributes attributes, Context context) {} } diff --git a/api/all/src/main/java/io/opentelemetry/api/metrics/LongUpDownCounter.java b/api/all/src/main/java/io/opentelemetry/api/metrics/LongUpDownCounter.java index d7bc0045f93..42b21968a2a 100644 --- a/api/all/src/main/java/io/opentelemetry/api/metrics/LongUpDownCounter.java +++ b/api/all/src/main/java/io/opentelemetry/api/metrics/LongUpDownCounter.java @@ -62,21 +62,21 @@ default boolean isEnabled() { void add(long value, Attributes attributes, Context context); /** - * Remove the instrument. + * Finish the instrument record. * * @param attributes A set of attributes to identify the instrument. * @since 1.56.0 */ - default void remove(Attributes attributes) { - remove(attributes, Context.current()); + default void finish(Attributes attributes) { + finish(attributes, Context.current()); } /** - * Remove the instrument. + * Finish the instrument record. * * @param attributes A set of attributes to identify the instrument. * @param context The explicit context to associate with this measurement. * @since 1.56.0 */ - default void remove(Attributes attributes, Context context) {} + default void finish(Attributes attributes, Context context) {} } diff --git a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkDoubleCounter.java b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkDoubleCounter.java index c94031d6618..01c23f34c83 100644 --- a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkDoubleCounter.java +++ b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkDoubleCounter.java @@ -62,7 +62,7 @@ public void add(double increment) { } @Override - public void remove(Attributes attributes, Context context) { + public void finish(Attributes attributes, Context context) { storage.remove(attributes, context); } diff --git a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkDoubleGauge.java b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkDoubleGauge.java index 28fd35650b9..af006efe171 100644 --- a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkDoubleGauge.java +++ b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkDoubleGauge.java @@ -49,7 +49,7 @@ public void set(double value) { } @Override - public void remove(Attributes attributes, Context context) { + public void finish(Attributes attributes, Context context) { storage.remove(attributes, context); } diff --git a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkDoubleHistogram.java b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkDoubleHistogram.java index 9e527dbece3..392bacfeff6 100644 --- a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkDoubleHistogram.java +++ b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkDoubleHistogram.java @@ -62,7 +62,7 @@ public void record(double value) { } @Override - public void remove(Attributes attributes, Context context) { + public void finish(Attributes attributes, Context context) { storage.remove(attributes, context); } diff --git a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkDoubleUpDownCounter.java b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkDoubleUpDownCounter.java index e3e4ba429b9..3517897a214 100644 --- a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkDoubleUpDownCounter.java +++ b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkDoubleUpDownCounter.java @@ -49,7 +49,7 @@ public void add(double increment) { } @Override - public void remove(Attributes attributes, Context context) { + public void finish(Attributes attributes, Context context) { storage.remove(attributes, context); } diff --git a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkLongCounter.java b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkLongCounter.java index 0fbc2ade147..02071d1d486 100644 --- a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkLongCounter.java +++ b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkLongCounter.java @@ -63,7 +63,7 @@ public void add(long increment) { } @Override - public void remove(Attributes attributes, Context context) { + public void finish(Attributes attributes, Context context) { storage.remove(attributes, context); } diff --git a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkLongGauge.java b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkLongGauge.java index 2489fb2257a..7852431efdf 100644 --- a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkLongGauge.java +++ b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkLongGauge.java @@ -48,7 +48,7 @@ public void set(long value) { } @Override - public void remove(Attributes attributes, Context context) { + public void finish(Attributes attributes, Context context) { storage.remove(attributes, context); } diff --git a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkLongHistogram.java b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkLongHistogram.java index ed76a06e493..5f31fbfacff 100644 --- a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkLongHistogram.java +++ b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkLongHistogram.java @@ -63,7 +63,7 @@ public void record(long value) { } @Override - public void remove(Attributes attributes, Context context) { + public void finish(Attributes attributes, Context context) { storage.remove(attributes, context); } diff --git a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkLongUpDownCounter.java b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkLongUpDownCounter.java index a0a4c4660e7..5c461885b5b 100644 --- a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkLongUpDownCounter.java +++ b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkLongUpDownCounter.java @@ -49,7 +49,7 @@ public void add(long increment) { } @Override - public void remove(Attributes attributes, Context context) { + public void finish(Attributes attributes, Context context) { storage.remove(attributes, context); } diff --git a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/internal/state/DefaultSynchronousMetricStorage.java b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/internal/state/DefaultSynchronousMetricStorage.java index 5d23f2069f1..312cd6bf74e 100644 --- a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/internal/state/DefaultSynchronousMetricStorage.java +++ b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/internal/state/DefaultSynchronousMetricStorage.java @@ -130,19 +130,6 @@ public void recordDouble(double value, Attributes attributes, Context context) { abstract void doRecordDouble(double value, Attributes attributes, Context context); - @Override - public void remove(Attributes attributes, Context context) { - if (!enabled) { - return; - } - AggregatorHolder aggregatorHolder = getHolderForRecord(); - try { - aggregatorHolder.aggregatorHandles.remove(attributes); - } finally { - releaseHolderForRecord(aggregatorHolder); - } - } - @Override public void setEnabled(boolean enabled) { this.enabled = enabled; @@ -250,6 +237,19 @@ void doRecordDouble(double value, Attributes attributes, Context context) { } } + @Override + public void remove(Attributes attributes, Context context) { + if (!enabled) { + return; + } + AggregatorHolder holderForRecord = getHolderForRecord(); + try { + holderForRecord.aggregatorHandles.remove(attributes); + } finally { + releaseHolderForRecord(holderForRecord); + } + } + @Nullable @Override AggregatorHandle maybeGetPooledAggregatorHandle() { @@ -447,6 +447,14 @@ void doRecordDouble(double value, Attributes attributes, Context context) { .recordDouble(value, attributes, context); } + @Override + public void remove(Attributes attributes, Context context) { + if (!enabled) { + return; + } + aggregatorHandles.remove(attributes); + } + @Nullable @Override AggregatorHandle maybeGetPooledAggregatorHandle() { diff --git a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkDoubleCounterTest.java b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkDoubleCounterTest.java index ffa12f6c75f..885e32a8632 100644 --- a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkDoubleCounterTest.java +++ b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkDoubleCounterTest.java @@ -58,11 +58,11 @@ void collectMetrics_NoRecords() { } @Test - void collectMetrics_Remove() { + void collectMetrics_finish() { DoubleCounter counter = sdkMeter.counterBuilder("testCounter").ofDoubles().build(); Attributes attrs = Attributes.of(stringKey("key"), "value"); counter.add(1, attrs); - counter.remove(attrs); + counter.finish(attrs); assertThat(sdkMeterReader.collectAllMetrics()).isEmpty(); } diff --git a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkDoubleGaugeTest.java b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkDoubleGaugeTest.java index c11a303940a..8ef6f32839b 100644 --- a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkDoubleGaugeTest.java +++ b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkDoubleGaugeTest.java @@ -27,7 +27,6 @@ import io.opentelemetry.sdk.trace.SdkTracerProvider; import java.time.Duration; import java.util.Collections; -import java.util.stream.IntStream; import org.assertj.core.api.Assertions; import org.junit.jupiter.api.Test; @@ -66,7 +65,7 @@ void set_NaN() { } @Test - void observable_RemoveCallback() { + void observable_finishCallback() { ObservableDoubleGauge gauge = sdkMeter.gaugeBuilder("testGauge").buildWithCallback(measurement -> measurement.record(10)); @@ -99,12 +98,12 @@ void collectMetrics_NoRecords() { } @Test - void collectMetrics_Remove() { + void collectMetrics_finish() { DoubleGauge gauge = sdkMeter.gaugeBuilder("testGauge").build(); assertThat(cumulativeReader.collectAllMetrics()).isEmpty(); Attributes attrs = Attributes.of(stringKey("key"), "value"); gauge.set(1, attrs); - gauge.remove(attrs); + gauge.finish(attrs); Assertions.assertThat(cumulativeReader.collectAllMetrics()).isEmpty(); } diff --git a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkDoubleHistogramTest.java b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkDoubleHistogramTest.java index 30820104b50..494686bb816 100644 --- a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkDoubleHistogramTest.java +++ b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkDoubleHistogramTest.java @@ -27,7 +27,6 @@ import java.time.Duration; import java.util.Arrays; import java.util.Collections; -import java.util.stream.IntStream; import org.assertj.core.api.Assertions; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.RegisterExtension; @@ -66,11 +65,11 @@ void collectMetrics_NoRecords() { } @Test - void collectMetrics_Remove() { + void collectMetrics_finish() { DoubleHistogram histogram = sdkMeter.histogramBuilder("testHistogram").build(); Attributes attrs = Attributes.of(stringKey("key"), "value"); histogram.record(1, attrs); - histogram.remove(attrs); + histogram.finish(attrs); Assertions.assertThat(sdkMeterReader.collectAllMetrics()).isEmpty(); } diff --git a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkDoubleUpDownCounterTest.java b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkDoubleUpDownCounterTest.java index 4d2b90b5541..e953f085201 100644 --- a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkDoubleUpDownCounterTest.java +++ b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkDoubleUpDownCounterTest.java @@ -18,7 +18,6 @@ import io.opentelemetry.sdk.testing.exporter.InMemoryMetricReader; import io.opentelemetry.sdk.testing.time.TestClock; import java.time.Duration; -import java.util.stream.IntStream; import org.assertj.core.api.Assertions; import org.junit.jupiter.api.Test; @@ -59,12 +58,12 @@ void collectMetrics_NoRecords() { } @Test - void collectMetrics_Remove() { + void collectMetrics_finish() { DoubleUpDownCounter counter = sdkMeter.upDownCounterBuilder("testUpDownCounter").ofDoubles().build(); Attributes attrs = Attributes.of(stringKey("key"), "value"); counter.add(1, attrs); - counter.remove(attrs); + counter.finish(attrs); Assertions.assertThat(sdkMeterReader.collectAllMetrics()).isEmpty(); } diff --git a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkLongCounterTest.java b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkLongCounterTest.java index ee34297d8c4..d8d2f4afa89 100644 --- a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkLongCounterTest.java +++ b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkLongCounterTest.java @@ -56,11 +56,11 @@ void collectMetrics_NoRecords() { } @Test - void collectMetrics_Remove() { + void collectMetrics_finish() { LongCounter counter = sdkMeter.counterBuilder("Counter").build(); Attributes attrs = Attributes.of(stringKey("key"), "value"); counter.add(1, attrs); - counter.remove(attrs); + counter.finish(attrs); assertThat(sdkMeterReader.collectAllMetrics()).isEmpty(); } diff --git a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkLongGaugeTest.java b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkLongGaugeTest.java index 762518fefe5..2a1baaaaee2 100644 --- a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkLongGaugeTest.java +++ b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkLongGaugeTest.java @@ -54,7 +54,7 @@ void set_PreventNullAttributes() { } @Test - void observable_RemoveCallback() { + void observable_finishCallback() { ObservableLongGauge gauge = sdkMeter .gaugeBuilder("testGauge") @@ -81,12 +81,12 @@ void collectMetrics_NoRecords() { } @Test - void collectMetrics_Remove() { + void collectMetrics_finish() { LongGauge gauge = sdkMeter.gaugeBuilder("testGauge").ofLongs().build(); assertThat(cumulativeReader.collectAllMetrics()).isEmpty(); Attributes attrs = Attributes.of(stringKey("key"), "value"); gauge.set(1, attrs); - gauge.remove(attrs); + gauge.finish(attrs); Assertions.assertThat(cumulativeReader.collectAllMetrics()).isEmpty(); } diff --git a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkLongHistogramTest.java b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkLongHistogramTest.java index f45d3decad4..8d2283ef5be 100644 --- a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkLongHistogramTest.java +++ b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkLongHistogramTest.java @@ -26,7 +26,6 @@ import java.time.Duration; import java.util.Arrays; import java.util.Collections; -import java.util.stream.IntStream; import org.assertj.core.api.Assertions; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.RegisterExtension; @@ -65,11 +64,11 @@ void collectMetrics_NoRecords() { } @Test - void collectMetrics_Remove() { + void collectMetrics_finish() { LongHistogram histogram = sdkMeter.histogramBuilder("testHistogram").ofLongs().build(); Attributes attrs = Attributes.of(stringKey("key"), "value"); histogram.record(1, attrs); - histogram.remove(attrs); + histogram.finish(attrs); Assertions.assertThat(reader.collectAllMetrics()).isEmpty(); } diff --git a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkLongUpDownCounterTest.java b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkLongUpDownCounterTest.java index 9d9f64f0043..a8b110544ab 100644 --- a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkLongUpDownCounterTest.java +++ b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkLongUpDownCounterTest.java @@ -18,7 +18,6 @@ import io.opentelemetry.sdk.testing.exporter.InMemoryMetricReader; import io.opentelemetry.sdk.testing.time.TestClock; import java.time.Duration; -import java.util.stream.IntStream; import org.assertj.core.api.Assertions; import org.junit.jupiter.api.Test; @@ -53,11 +52,11 @@ void collectMetrics_NoRecords() { } @Test - void collectMetrics_Remove() { + void collectMetrics_finish() { LongUpDownCounter counter = sdkMeter.upDownCounterBuilder("testUpDownCounter").build(); Attributes attrs = Attributes.of(stringKey("key"), "value"); counter.add(1, attrs); - counter.remove(attrs); + counter.finish(attrs); Assertions.assertThat(sdkMeterReader.collectAllMetrics()).isEmpty(); } diff --git a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkObservableDoubleCounterTest.java b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkObservableDoubleCounterTest.java index cc1c887bf3a..8e7507d6b22 100644 --- a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkObservableDoubleCounterTest.java +++ b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkObservableDoubleCounterTest.java @@ -33,7 +33,7 @@ class SdkObservableDoubleCounterTest { SdkMeterProvider.builder().setClock(testClock).setResource(RESOURCE); @Test - void removeCallback() { + void finishCallback() { InMemoryMetricReader sdkMeterReader = InMemoryMetricReader.create(); ObservableDoubleCounter counter = sdkMeterProviderBuilder diff --git a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkObservableDoubleUpDownCounterTest.java b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkObservableDoubleUpDownCounterTest.java index 8b212220093..22c3c4734d2 100644 --- a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkObservableDoubleUpDownCounterTest.java +++ b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkObservableDoubleUpDownCounterTest.java @@ -35,7 +35,7 @@ class SdkObservableDoubleUpDownCounterTest { SdkMeterProvider.builder().setClock(testClock).setResource(RESOURCE); @Test - void removeCallback() { + void finishCallback() { InMemoryMetricReader sdkMeterReader = InMemoryMetricReader.create(); ObservableDoubleUpDownCounter counter = sdkMeterProviderBuilder diff --git a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkObservableLongCounterTest.java b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkObservableLongCounterTest.java index f4208b1c26d..cd71bb4c34c 100644 --- a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkObservableLongCounterTest.java +++ b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkObservableLongCounterTest.java @@ -30,7 +30,7 @@ class SdkObservableLongCounterTest { SdkMeterProvider.builder().setClock(testClock).setResource(RESOURCE); @Test - void removeCallback() { + void finishCallback() { InMemoryMetricReader sdkMeterReader = InMemoryMetricReader.create(); ObservableLongCounter counter = sdkMeterProviderBuilder diff --git a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkObservableLongUpDownCounterTest.java b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkObservableLongUpDownCounterTest.java index 33c3c17167d..b972f059e5e 100644 --- a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkObservableLongUpDownCounterTest.java +++ b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkObservableLongUpDownCounterTest.java @@ -30,7 +30,7 @@ class SdkObservableLongUpDownCounterTest { SdkMeterProvider.builder().setClock(testClock).setResource(RESOURCE); @Test - void removeCallback() { + void finishCallback() { InMemoryMetricReader sdkMeterReader = InMemoryMetricReader.create(); ObservableLongUpDownCounter counter = sdkMeterProviderBuilder From 538a9f2d31c085b765ff4c47f6181fa6565fa550 Mon Sep 17 00:00:00 2001 From: Antoine Toulme Date: Sat, 25 Apr 2026 11:05:17 -0700 Subject: [PATCH 08/10] move to predicate function --- .../api/metrics/DoubleCounter.java | 19 ++++++----- .../api/metrics/DoubleGauge.java | 19 ++++++----- .../api/metrics/DoubleHistogram.java | 19 ++++++----- .../api/metrics/DoubleUpDownCounter.java | 19 ++++++----- .../api/metrics/LongCounter.java | 19 ++++++----- .../opentelemetry/api/metrics/LongGauge.java | 19 ++++++----- .../api/metrics/LongHistogram.java | 19 ++++++----- .../api/metrics/LongUpDownCounter.java | 19 ++++++----- .../current_vs_latest/opentelemetry-api.txt | 33 ++++++++++++++++++- .../sdk/metrics/SdkDoubleCounter.java | 5 +-- .../sdk/metrics/SdkDoubleGauge.java | 5 +-- .../sdk/metrics/SdkDoubleHistogram.java | 5 +-- .../sdk/metrics/SdkDoubleUpDownCounter.java | 5 +-- .../sdk/metrics/SdkLongCounter.java | 5 +-- .../sdk/metrics/SdkLongGauge.java | 5 +-- .../sdk/metrics/SdkLongHistogram.java | 5 +-- .../sdk/metrics/SdkLongUpDownCounter.java | 5 +-- .../opentelemetry/sdk/metrics/SdkMeter.java | 5 +-- .../DefaultSynchronousMetricStorage.java | 19 ++++++++--- .../state/WriteableMetricStorage.java | 5 +-- .../sdk/metrics/SdkDoubleCounterTest.java | 2 +- .../sdk/metrics/SdkDoubleGaugeTest.java | 2 +- .../sdk/metrics/SdkDoubleHistogramTest.java | 2 +- .../metrics/SdkDoubleUpDownCounterTest.java | 2 +- .../sdk/metrics/SdkLongCounterTest.java | 2 +- .../sdk/metrics/SdkLongGaugeTest.java | 2 +- .../sdk/metrics/SdkLongHistogramTest.java | 2 +- .../sdk/metrics/SdkLongUpDownCounterTest.java | 2 +- .../state/SynchronousMetricStorageTest.java | 6 ++-- 29 files changed, 168 insertions(+), 108 deletions(-) diff --git a/api/all/src/main/java/io/opentelemetry/api/metrics/DoubleCounter.java b/api/all/src/main/java/io/opentelemetry/api/metrics/DoubleCounter.java index f9183b3caa3..d129b6e4dfb 100644 --- a/api/all/src/main/java/io/opentelemetry/api/metrics/DoubleCounter.java +++ b/api/all/src/main/java/io/opentelemetry/api/metrics/DoubleCounter.java @@ -7,6 +7,7 @@ import io.opentelemetry.api.common.Attributes; import io.opentelemetry.context.Context; +import java.util.function.Predicate; import javax.annotation.concurrent.ThreadSafe; /** @@ -62,21 +63,21 @@ default boolean isEnabled() { void add(double value, Attributes attributes, Context context); /** - * Finish the instrument record. + * Finish the recording of the instrument. * - * @param attributes A set of attributes to identify the instrument. - * @since 1.56.0 + * @param condition A function evaluating which instruments to remove based on their attributes. + * @since TODO */ - default void finish(Attributes attributes) { - finish(attributes, Context.current()); + default void finish(Predicate condition) { + finish(condition, Context.current()); } /** - * Finish the instrument record. + * Finish the recording of the instrument. * - * @param attributes A set of attributes to identify the instrument. + * @param condition A function evaluating which instruments to remove based on their attributes. * @param context The explicit context to associate with this measurement. - * @since 1.56.0 + * @since TODO */ - default void finish(Attributes attributes, Context context) {} + default void finish(Predicate condition, Context context) {} } diff --git a/api/all/src/main/java/io/opentelemetry/api/metrics/DoubleGauge.java b/api/all/src/main/java/io/opentelemetry/api/metrics/DoubleGauge.java index e002c7c6717..0d0cc8b0cfa 100644 --- a/api/all/src/main/java/io/opentelemetry/api/metrics/DoubleGauge.java +++ b/api/all/src/main/java/io/opentelemetry/api/metrics/DoubleGauge.java @@ -7,6 +7,7 @@ import io.opentelemetry.api.common.Attributes; import io.opentelemetry.context.Context; +import java.util.function.Predicate; import javax.annotation.concurrent.ThreadSafe; /** @@ -56,21 +57,21 @@ default boolean isEnabled() { void set(double value, Attributes attributes, Context context); /** - * Finish the instrument record. + * Finish the recording of the instrument. * - * @param attributes A set of attributes to identify the instrument. - * @since 1.56.0 + * @param condition A function evaluating which instruments to remove based on their attributes. + * @since TODO */ - default void finish(Attributes attributes) { - finish(attributes, Context.current()); + default void finish(Predicate condition) { + finish(condition, Context.current()); } /** - * Finish the instrument record. + * Finish the recording of the instrument. * - * @param attributes A set of attributes to identify the instrument. + * @param condition A function evaluating which instruments to remove based on their attributes. * @param context The explicit context to associate with this measurement. - * @since 1.56.0 + * @since TODO */ - default void finish(Attributes attributes, Context context) {} + default void finish(Predicate condition, Context context) {} } diff --git a/api/all/src/main/java/io/opentelemetry/api/metrics/DoubleHistogram.java b/api/all/src/main/java/io/opentelemetry/api/metrics/DoubleHistogram.java index c5f449ac7ee..2c20b2e0b15 100644 --- a/api/all/src/main/java/io/opentelemetry/api/metrics/DoubleHistogram.java +++ b/api/all/src/main/java/io/opentelemetry/api/metrics/DoubleHistogram.java @@ -7,6 +7,7 @@ import io.opentelemetry.api.common.Attributes; import io.opentelemetry.context.Context; +import java.util.function.Predicate; import javax.annotation.concurrent.ThreadSafe; /** @@ -62,21 +63,21 @@ default boolean isEnabled() { void record(double value, Attributes attributes, Context context); /** - * Finish the instrument record. + * Finish the recording of the instrument. * - * @param attributes A set of attributes to identify the instrument. - * @since 1.56.0 + * @param condition A function evaluating which instruments to remove based on their attributes. + * @since TODO */ - default void finish(Attributes attributes) { - finish(attributes, Context.current()); + default void finish(Predicate condition) { + finish(condition, Context.current()); } /** - * Finish the instrument record. + * Finish the recording of the instrument. * - * @param attributes A set of attributes to identify the instrument. + * @param condition A function evaluating which instruments to remove based on their attributes. * @param context The explicit context to associate with this measurement. - * @since 1.56.0 + * @since TODO */ - default void finish(Attributes attributes, Context context) {} + default void finish(Predicate condition, Context context) {} } diff --git a/api/all/src/main/java/io/opentelemetry/api/metrics/DoubleUpDownCounter.java b/api/all/src/main/java/io/opentelemetry/api/metrics/DoubleUpDownCounter.java index ade60c054f0..e891f04e0eb 100644 --- a/api/all/src/main/java/io/opentelemetry/api/metrics/DoubleUpDownCounter.java +++ b/api/all/src/main/java/io/opentelemetry/api/metrics/DoubleUpDownCounter.java @@ -7,6 +7,7 @@ import io.opentelemetry.api.common.Attributes; import io.opentelemetry.context.Context; +import java.util.function.Predicate; import javax.annotation.concurrent.ThreadSafe; /** @@ -62,21 +63,21 @@ default boolean isEnabled() { void add(double value, Attributes attributes, Context context); /** - * Finish the instrument record. + * Finish the recording of the instrument. * - * @param attributes A set of attributes to identify the instrument. - * @since 1.56.0 + * @param condition A function evaluating which instruments to remove based on their attributes. + * @since TODO */ - default void finish(Attributes attributes) { - finish(attributes, Context.current()); + default void finish(Predicate condition) { + finish(condition, Context.current()); } /** - * Finish the instrument record. + * Finish the recording of the instrument. * - * @param attributes A set of attributes to identify the instrument. + * @param condition A function evaluating which instruments to remove based on their attributes. * @param context The explicit context to associate with this measurement. - * @since 1.56.0 + * @since TODO */ - default void finish(Attributes attributes, Context context) {} + default void finish(Predicate condition, Context context) {} } diff --git a/api/all/src/main/java/io/opentelemetry/api/metrics/LongCounter.java b/api/all/src/main/java/io/opentelemetry/api/metrics/LongCounter.java index 3527b89732f..c1c786aaf11 100644 --- a/api/all/src/main/java/io/opentelemetry/api/metrics/LongCounter.java +++ b/api/all/src/main/java/io/opentelemetry/api/metrics/LongCounter.java @@ -7,6 +7,7 @@ import io.opentelemetry.api.common.Attributes; import io.opentelemetry.context.Context; +import java.util.function.Predicate; import javax.annotation.concurrent.ThreadSafe; /** @@ -62,21 +63,21 @@ default boolean isEnabled() { void add(long value, Attributes attributes, Context context); /** - * Finish the instrument record. + * Finish the recording of the instrument. * - * @param attributes A set of attributes to identify the instrument. - * @since 1.56.0 + * @param condition A function evaluating which instruments to remove based on their attributes. + * @since TODO */ - default void finish(Attributes attributes) { - finish(attributes, Context.current()); + default void finish(Predicate condition) { + finish(condition, Context.current()); } /** - * Finish the instrument record. + * Finish the recording of the instrument. * - * @param attributes A set of attributes to identify the instrument. + * @param condition A function evaluating which instruments to remove based on their attributes. * @param context The explicit context to associate with this measurement. - * @since 1.56.0 + * @since TODO */ - default void finish(Attributes attributes, Context context) {} + default void finish(Predicate condition, Context context) {} } diff --git a/api/all/src/main/java/io/opentelemetry/api/metrics/LongGauge.java b/api/all/src/main/java/io/opentelemetry/api/metrics/LongGauge.java index d014ff03303..af13708c856 100644 --- a/api/all/src/main/java/io/opentelemetry/api/metrics/LongGauge.java +++ b/api/all/src/main/java/io/opentelemetry/api/metrics/LongGauge.java @@ -7,6 +7,7 @@ import io.opentelemetry.api.common.Attributes; import io.opentelemetry.context.Context; +import java.util.function.Predicate; import javax.annotation.concurrent.ThreadSafe; /** @@ -56,21 +57,21 @@ default boolean isEnabled() { void set(long value, Attributes attributes, Context context); /** - * Finish the instrument record. + * Finish the recording of the instrument. * - * @param attributes A set of attributes to identify the instrument. - * @since 1.56.0 + * @param condition A function evaluating which instruments to remove based on their attributes. + * @since TODO */ - default void finish(Attributes attributes) { - finish(attributes, Context.current()); + default void finish(Predicate condition) { + finish(condition, Context.current()); } /** - * Finish the instrument record. + * Finish the recording of the instrument. * - * @param attributes A set of attributes to identify the instrument. + * @param condition A function evaluating which instruments to remove based on their attributes. * @param context The explicit context to associate with this measurement. - * @since 1.56.0 + * @since TODO */ - default void finish(Attributes attributes, Context context) {} + default void finish(Predicate condition, Context context) {} } diff --git a/api/all/src/main/java/io/opentelemetry/api/metrics/LongHistogram.java b/api/all/src/main/java/io/opentelemetry/api/metrics/LongHistogram.java index b4a474f2f7e..d6b5e163699 100644 --- a/api/all/src/main/java/io/opentelemetry/api/metrics/LongHistogram.java +++ b/api/all/src/main/java/io/opentelemetry/api/metrics/LongHistogram.java @@ -7,6 +7,7 @@ import io.opentelemetry.api.common.Attributes; import io.opentelemetry.context.Context; +import java.util.function.Predicate; import javax.annotation.concurrent.ThreadSafe; /** @@ -62,21 +63,21 @@ default boolean isEnabled() { void record(long value, Attributes attributes, Context context); /** - * Finish the instrument record. + * Finish the recording of the instrument. * - * @param attributes A set of attributes to identify the instrument. - * @since 1.56.0 + * @param condition A function evaluating which instruments to remove based on their attributes. + * @since TODO */ - default void finish(Attributes attributes) { - finish(attributes, Context.current()); + default void finish(Predicate condition) { + finish(condition, Context.current()); } /** - * Finish the instrument record. + * Finish the recording of the instrument. * - * @param attributes A set of attributes to identify the instrument. + * @param condition A function evaluating which instruments to remove based on their attributes. * @param context The explicit context to associate with this measurement. - * @since 1.56.0 + * @since TODO */ - default void finish(Attributes attributes, Context context) {} + default void finish(Predicate condition, Context context) {} } diff --git a/api/all/src/main/java/io/opentelemetry/api/metrics/LongUpDownCounter.java b/api/all/src/main/java/io/opentelemetry/api/metrics/LongUpDownCounter.java index 42b21968a2a..ba968aed4f5 100644 --- a/api/all/src/main/java/io/opentelemetry/api/metrics/LongUpDownCounter.java +++ b/api/all/src/main/java/io/opentelemetry/api/metrics/LongUpDownCounter.java @@ -7,6 +7,7 @@ import io.opentelemetry.api.common.Attributes; import io.opentelemetry.context.Context; +import java.util.function.Predicate; import javax.annotation.concurrent.ThreadSafe; /** @@ -62,21 +63,21 @@ default boolean isEnabled() { void add(long value, Attributes attributes, Context context); /** - * Finish the instrument record. + * Finish the recording of the instrument. * - * @param attributes A set of attributes to identify the instrument. - * @since 1.56.0 + * @param condition A function evaluating which instruments to remove based on their attributes. + * @since TODO */ - default void finish(Attributes attributes) { - finish(attributes, Context.current()); + default void finish(Predicate condition) { + finish(condition, Context.current()); } /** - * Finish the instrument record. + * Finish the recording of the instrument. * - * @param attributes A set of attributes to identify the instrument. + * @param condition A function evaluating which instruments to remove based on their attributes. * @param context The explicit context to associate with this measurement. - * @since 1.56.0 + * @since TODO */ - default void finish(Attributes attributes, Context context) {} + default void finish(Predicate condition, Context context) {} } diff --git a/docs/apidiffs/current_vs_latest/opentelemetry-api.txt b/docs/apidiffs/current_vs_latest/opentelemetry-api.txt index 5886a7288d5..abe3efc0131 100644 --- a/docs/apidiffs/current_vs_latest/opentelemetry-api.txt +++ b/docs/apidiffs/current_vs_latest/opentelemetry-api.txt @@ -1,2 +1,33 @@ Comparing source compatibility of opentelemetry-api-1.62.0-SNAPSHOT.jar against opentelemetry-api-1.61.0.jar -No changes. +*** MODIFIED INTERFACE: PUBLIC ABSTRACT io.opentelemetry.api.metrics.DoubleCounter (not serializable) + === CLASS FILE FORMAT VERSION: 52.0 <- 52.0 + +++ NEW METHOD: PUBLIC(+) void finish(java.util.function.Function) + +++ NEW METHOD: PUBLIC(+) void finish(java.util.function.Function, io.opentelemetry.context.Context) +*** MODIFIED INTERFACE: PUBLIC ABSTRACT io.opentelemetry.api.metrics.DoubleGauge (not serializable) + === CLASS FILE FORMAT VERSION: 52.0 <- 52.0 + +++ NEW METHOD: PUBLIC(+) void finish(java.util.function.Function) + +++ NEW METHOD: PUBLIC(+) void finish(java.util.function.Function, io.opentelemetry.context.Context) +*** MODIFIED INTERFACE: PUBLIC ABSTRACT io.opentelemetry.api.metrics.DoubleHistogram (not serializable) + === CLASS FILE FORMAT VERSION: 52.0 <- 52.0 + +++ NEW METHOD: PUBLIC(+) void finish(java.util.function.Function) + +++ NEW METHOD: PUBLIC(+) void finish(java.util.function.Function, io.opentelemetry.context.Context) +*** MODIFIED INTERFACE: PUBLIC ABSTRACT io.opentelemetry.api.metrics.DoubleUpDownCounter (not serializable) + === CLASS FILE FORMAT VERSION: 52.0 <- 52.0 + +++ NEW METHOD: PUBLIC(+) void finish(java.util.function.Function) + +++ NEW METHOD: PUBLIC(+) void finish(java.util.function.Function, io.opentelemetry.context.Context) +*** MODIFIED INTERFACE: PUBLIC ABSTRACT io.opentelemetry.api.metrics.LongCounter (not serializable) + === CLASS FILE FORMAT VERSION: 52.0 <- 52.0 + +++ NEW METHOD: PUBLIC(+) void finish(java.util.function.Function) + +++ NEW METHOD: PUBLIC(+) void finish(java.util.function.Function, io.opentelemetry.context.Context) +*** MODIFIED INTERFACE: PUBLIC ABSTRACT io.opentelemetry.api.metrics.LongGauge (not serializable) + === CLASS FILE FORMAT VERSION: 52.0 <- 52.0 + +++ NEW METHOD: PUBLIC(+) void finish(java.util.function.Function) + +++ NEW METHOD: PUBLIC(+) void finish(java.util.function.Function, io.opentelemetry.context.Context) +*** MODIFIED INTERFACE: PUBLIC ABSTRACT io.opentelemetry.api.metrics.LongHistogram (not serializable) + === CLASS FILE FORMAT VERSION: 52.0 <- 52.0 + +++ NEW METHOD: PUBLIC(+) void finish(java.util.function.Function) + +++ NEW METHOD: PUBLIC(+) void finish(java.util.function.Function, io.opentelemetry.context.Context) +*** MODIFIED INTERFACE: PUBLIC ABSTRACT io.opentelemetry.api.metrics.LongUpDownCounter (not serializable) + === CLASS FILE FORMAT VERSION: 52.0 <- 52.0 + +++ NEW METHOD: PUBLIC(+) void finish(java.util.function.Function) + +++ NEW METHOD: PUBLIC(+) void finish(java.util.function.Function, io.opentelemetry.context.Context) diff --git a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkDoubleCounter.java b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkDoubleCounter.java index 01c23f34c83..71e13a1f89d 100644 --- a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkDoubleCounter.java +++ b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkDoubleCounter.java @@ -16,6 +16,7 @@ import io.opentelemetry.sdk.metrics.internal.descriptor.InstrumentDescriptor; import io.opentelemetry.sdk.metrics.internal.state.WriteableMetricStorage; import java.util.function.Consumer; +import java.util.function.Predicate; import java.util.logging.Level; import java.util.logging.Logger; @@ -62,8 +63,8 @@ public void add(double increment) { } @Override - public void finish(Attributes attributes, Context context) { - storage.remove(attributes, context); + public void finish(Predicate condition, Context context) { + storage.finish(condition, context); } static class SdkDoubleCounterBuilder implements DoubleCounterBuilder { diff --git a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkDoubleGauge.java b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkDoubleGauge.java index af006efe171..a8198fd0972 100644 --- a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkDoubleGauge.java +++ b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkDoubleGauge.java @@ -15,6 +15,7 @@ import io.opentelemetry.sdk.metrics.internal.descriptor.InstrumentDescriptor; import io.opentelemetry.sdk.metrics.internal.state.WriteableMetricStorage; import java.util.function.Consumer; +import java.util.function.Predicate; class SdkDoubleGauge extends AbstractInstrument implements DoubleGauge { @@ -49,8 +50,8 @@ public void set(double value) { } @Override - public void finish(Attributes attributes, Context context) { - storage.remove(attributes, context); + public void finish(Predicate condition, Context context) { + storage.finish(condition, context); } static class SdkDoubleGaugeBuilder implements DoubleGaugeBuilder { diff --git a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkDoubleHistogram.java b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkDoubleHistogram.java index 392bacfeff6..44fde8f0ed6 100644 --- a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkDoubleHistogram.java +++ b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkDoubleHistogram.java @@ -16,6 +16,7 @@ import io.opentelemetry.sdk.metrics.internal.state.WriteableMetricStorage; import java.util.List; import java.util.Objects; +import java.util.function.Predicate; import java.util.logging.Level; import java.util.logging.Logger; @@ -62,8 +63,8 @@ public void record(double value) { } @Override - public void finish(Attributes attributes, Context context) { - storage.remove(attributes, context); + public void finish(Predicate condition, Context context) { + storage.finish(condition, context); } static class SdkDoubleHistogramBuilder implements DoubleHistogramBuilder { diff --git a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkDoubleUpDownCounter.java b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkDoubleUpDownCounter.java index 3517897a214..401f7298730 100644 --- a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkDoubleUpDownCounter.java +++ b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkDoubleUpDownCounter.java @@ -15,6 +15,7 @@ import io.opentelemetry.sdk.metrics.internal.descriptor.InstrumentDescriptor; import io.opentelemetry.sdk.metrics.internal.state.WriteableMetricStorage; import java.util.function.Consumer; +import java.util.function.Predicate; class SdkDoubleUpDownCounter extends AbstractInstrument implements DoubleUpDownCounter { @@ -49,8 +50,8 @@ public void add(double increment) { } @Override - public void finish(Attributes attributes, Context context) { - storage.remove(attributes, context); + public void finish(Predicate condition, Context context) { + storage.finish(condition, context); } static class SdkDoubleUpDownCounterBuilder implements DoubleUpDownCounterBuilder { diff --git a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkLongCounter.java b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkLongCounter.java index 02071d1d486..aaa4e740bba 100644 --- a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkLongCounter.java +++ b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkLongCounter.java @@ -16,6 +16,7 @@ import io.opentelemetry.sdk.metrics.internal.descriptor.InstrumentDescriptor; import io.opentelemetry.sdk.metrics.internal.state.WriteableMetricStorage; import java.util.function.Consumer; +import java.util.function.Predicate; import java.util.logging.Level; import java.util.logging.Logger; @@ -63,8 +64,8 @@ public void add(long increment) { } @Override - public void finish(Attributes attributes, Context context) { - storage.remove(attributes, context); + public void finish(Predicate condition, Context context) { + storage.finish(condition, context); } static class SdkLongCounterBuilder implements LongCounterBuilder { diff --git a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkLongGauge.java b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkLongGauge.java index 7852431efdf..b5a8b780975 100644 --- a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkLongGauge.java +++ b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkLongGauge.java @@ -15,6 +15,7 @@ import io.opentelemetry.sdk.metrics.internal.descriptor.InstrumentDescriptor; import io.opentelemetry.sdk.metrics.internal.state.WriteableMetricStorage; import java.util.function.Consumer; +import java.util.function.Predicate; class SdkLongGauge extends AbstractInstrument implements LongGauge { @@ -48,8 +49,8 @@ public void set(long value) { } @Override - public void finish(Attributes attributes, Context context) { - storage.remove(attributes, context); + public void finish(Predicate condition, Context context) { + storage.finish(condition, context); } static class SdkLongGaugeBuilder implements LongGaugeBuilder { diff --git a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkLongHistogram.java b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkLongHistogram.java index 5f31fbfacff..49e9a353978 100644 --- a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkLongHistogram.java +++ b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkLongHistogram.java @@ -16,6 +16,7 @@ import io.opentelemetry.sdk.metrics.internal.state.WriteableMetricStorage; import java.util.List; import java.util.Objects; +import java.util.function.Predicate; import java.util.logging.Level; import java.util.logging.Logger; import java.util.stream.Collectors; @@ -63,8 +64,8 @@ public void record(long value) { } @Override - public void finish(Attributes attributes, Context context) { - storage.remove(attributes, context); + public void finish(Predicate condition, Context context) { + storage.finish(condition, context); } static class SdkLongHistogramBuilder implements LongHistogramBuilder { diff --git a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkLongUpDownCounter.java b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkLongUpDownCounter.java index 5c461885b5b..f39baee0e73 100644 --- a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkLongUpDownCounter.java +++ b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkLongUpDownCounter.java @@ -15,6 +15,7 @@ import io.opentelemetry.sdk.metrics.internal.descriptor.InstrumentDescriptor; import io.opentelemetry.sdk.metrics.internal.state.WriteableMetricStorage; import java.util.function.Consumer; +import java.util.function.Predicate; class SdkLongUpDownCounter extends AbstractInstrument implements LongUpDownCounter { @@ -49,8 +50,8 @@ public void add(long increment) { } @Override - public void finish(Attributes attributes, Context context) { - storage.remove(attributes, context); + public void finish(Predicate condition, Context context) { + storage.finish(condition, context); } static class SdkLongUpDownCounterBuilder implements LongUpDownCounterBuilder { diff --git a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkMeter.java b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkMeter.java index cb68c3c17a1..2423c7e6279 100644 --- a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkMeter.java +++ b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/SdkMeter.java @@ -41,6 +41,7 @@ import java.util.Objects; import java.util.Set; import java.util.function.Function; +import java.util.function.Predicate; import java.util.logging.Level; import java.util.logging.Logger; import java.util.regex.Pattern; @@ -371,9 +372,9 @@ public void recordDouble(double value, Attributes attributes, Context context) { } @Override - public void remove(Attributes attributes, Context context) { + public void finish(Predicate condition, Context context) { for (WriteableMetricStorage storage : storages) { - storage.remove(attributes, context); + storage.finish(condition, context); } } diff --git a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/internal/state/DefaultSynchronousMetricStorage.java b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/internal/state/DefaultSynchronousMetricStorage.java index 312cd6bf74e..08c4491e480 100644 --- a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/internal/state/DefaultSynchronousMetricStorage.java +++ b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/internal/state/DefaultSynchronousMetricStorage.java @@ -32,6 +32,7 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentLinkedQueue; import java.util.concurrent.atomic.AtomicInteger; +import java.util.function.Predicate; import java.util.logging.Level; import java.util.logging.Logger; import javax.annotation.Nullable; @@ -238,13 +239,18 @@ void doRecordDouble(double value, Attributes attributes, Context context) { } @Override - public void remove(Attributes attributes, Context context) { + public void finish(Predicate condition, Context context) { if (!enabled) { return; } AggregatorHolder holderForRecord = getHolderForRecord(); try { - holderForRecord.aggregatorHandles.remove(attributes); + holderForRecord.aggregatorHandles.forEach( + (attributes, tAggregatorHandle) -> { + if (condition.test(attributes)) { + holderForRecord.aggregatorHandles.remove(attributes); + } + }); } finally { releaseHolderForRecord(holderForRecord); } @@ -448,11 +454,16 @@ void doRecordDouble(double value, Attributes attributes, Context context) { } @Override - public void remove(Attributes attributes, Context context) { + public void finish(Predicate condition, Context context) { if (!enabled) { return; } - aggregatorHandles.remove(attributes); + aggregatorHandles.forEach( + (attributes, tAggregatorHandle) -> { + if (condition.test(attributes)) { + aggregatorHandles.remove(attributes); + } + }); } @Nullable diff --git a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/internal/state/WriteableMetricStorage.java b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/internal/state/WriteableMetricStorage.java index d2225cf700e..78feb620345 100644 --- a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/internal/state/WriteableMetricStorage.java +++ b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/internal/state/WriteableMetricStorage.java @@ -8,6 +8,7 @@ import io.opentelemetry.api.common.Attributes; import io.opentelemetry.context.Context; import io.opentelemetry.sdk.metrics.data.MetricData; +import java.util.function.Predicate; /** * Stores {@link MetricData} and allows synchronous writes of measurements. @@ -23,8 +24,8 @@ public interface WriteableMetricStorage { /** Records a measurement. */ void recordDouble(double value, Attributes attributes, Context context); - /** Remove a measurement. */ - default void remove(Attributes attributes, Context context) {} + /** Finish measurements matching the predicate. */ + default void finish(Predicate condition, Context context) {} /** * Returns {@code true} if the storage is actively recording measurements, and {@code false} diff --git a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkDoubleCounterTest.java b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkDoubleCounterTest.java index 885e32a8632..5fec2d046a1 100644 --- a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkDoubleCounterTest.java +++ b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkDoubleCounterTest.java @@ -62,7 +62,7 @@ void collectMetrics_finish() { DoubleCounter counter = sdkMeter.counterBuilder("testCounter").ofDoubles().build(); Attributes attrs = Attributes.of(stringKey("key"), "value"); counter.add(1, attrs); - counter.finish(attrs); + counter.finish(at -> true); assertThat(sdkMeterReader.collectAllMetrics()).isEmpty(); } diff --git a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkDoubleGaugeTest.java b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkDoubleGaugeTest.java index 8ef6f32839b..c88a79984f2 100644 --- a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkDoubleGaugeTest.java +++ b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkDoubleGaugeTest.java @@ -103,7 +103,7 @@ void collectMetrics_finish() { assertThat(cumulativeReader.collectAllMetrics()).isEmpty(); Attributes attrs = Attributes.of(stringKey("key"), "value"); gauge.set(1, attrs); - gauge.finish(attrs); + gauge.finish(at -> true); Assertions.assertThat(cumulativeReader.collectAllMetrics()).isEmpty(); } diff --git a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkDoubleHistogramTest.java b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkDoubleHistogramTest.java index 494686bb816..0e812a71dc1 100644 --- a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkDoubleHistogramTest.java +++ b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkDoubleHistogramTest.java @@ -69,7 +69,7 @@ void collectMetrics_finish() { DoubleHistogram histogram = sdkMeter.histogramBuilder("testHistogram").build(); Attributes attrs = Attributes.of(stringKey("key"), "value"); histogram.record(1, attrs); - histogram.finish(attrs); + histogram.finish(at -> true); Assertions.assertThat(sdkMeterReader.collectAllMetrics()).isEmpty(); } diff --git a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkDoubleUpDownCounterTest.java b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkDoubleUpDownCounterTest.java index e953f085201..ef713510ec7 100644 --- a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkDoubleUpDownCounterTest.java +++ b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkDoubleUpDownCounterTest.java @@ -63,7 +63,7 @@ void collectMetrics_finish() { sdkMeter.upDownCounterBuilder("testUpDownCounter").ofDoubles().build(); Attributes attrs = Attributes.of(stringKey("key"), "value"); counter.add(1, attrs); - counter.finish(attrs); + counter.finish(at -> true); Assertions.assertThat(sdkMeterReader.collectAllMetrics()).isEmpty(); } diff --git a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkLongCounterTest.java b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkLongCounterTest.java index d8d2f4afa89..ebf784c3f7c 100644 --- a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkLongCounterTest.java +++ b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkLongCounterTest.java @@ -60,7 +60,7 @@ void collectMetrics_finish() { LongCounter counter = sdkMeter.counterBuilder("Counter").build(); Attributes attrs = Attributes.of(stringKey("key"), "value"); counter.add(1, attrs); - counter.finish(attrs); + counter.finish(at -> true); assertThat(sdkMeterReader.collectAllMetrics()).isEmpty(); } diff --git a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkLongGaugeTest.java b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkLongGaugeTest.java index 2a1baaaaee2..47bc7a21e92 100644 --- a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkLongGaugeTest.java +++ b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkLongGaugeTest.java @@ -86,7 +86,7 @@ void collectMetrics_finish() { assertThat(cumulativeReader.collectAllMetrics()).isEmpty(); Attributes attrs = Attributes.of(stringKey("key"), "value"); gauge.set(1, attrs); - gauge.finish(attrs); + gauge.finish(at -> true); Assertions.assertThat(cumulativeReader.collectAllMetrics()).isEmpty(); } diff --git a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkLongHistogramTest.java b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkLongHistogramTest.java index 8d2283ef5be..29034ac8110 100644 --- a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkLongHistogramTest.java +++ b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkLongHistogramTest.java @@ -68,7 +68,7 @@ void collectMetrics_finish() { LongHistogram histogram = sdkMeter.histogramBuilder("testHistogram").ofLongs().build(); Attributes attrs = Attributes.of(stringKey("key"), "value"); histogram.record(1, attrs); - histogram.finish(attrs); + histogram.finish(at -> true); Assertions.assertThat(reader.collectAllMetrics()).isEmpty(); } diff --git a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkLongUpDownCounterTest.java b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkLongUpDownCounterTest.java index a8b110544ab..03739b2290a 100644 --- a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkLongUpDownCounterTest.java +++ b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/SdkLongUpDownCounterTest.java @@ -56,7 +56,7 @@ void collectMetrics_finish() { LongUpDownCounter counter = sdkMeter.upDownCounterBuilder("testUpDownCounter").build(); Attributes attrs = Attributes.of(stringKey("key"), "value"); counter.add(1, attrs); - counter.finish(attrs); + counter.finish(at -> true); Assertions.assertThat(sdkMeterReader.collectAllMetrics()).isEmpty(); } diff --git a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/internal/state/SynchronousMetricStorageTest.java b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/internal/state/SynchronousMetricStorageTest.java index 4260fb53698..5b0a4e042f7 100644 --- a/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/internal/state/SynchronousMetricStorageTest.java +++ b/sdk/metrics/src/test/java/io/opentelemetry/sdk/metrics/internal/state/SynchronousMetricStorageTest.java @@ -942,7 +942,7 @@ void enabledThenDisable_recordAndCollect(MemoryMode memoryMode) { assertThat(storage.collect(RESOURCE, INSTRUMENTATION_SCOPE_INFO, 10).isEmpty()).isTrue(); - storage.remove(Attributes.empty(), Context.current()); + storage.finish(at -> true, Context.current()); storage.setEnabled(true); @@ -950,11 +950,11 @@ void enabledThenDisable_recordAndCollect(MemoryMode memoryMode) { storage.setEnabled(false); - storage.remove(Attributes.empty(), Context.current()); + storage.finish(at -> true, Context.current()); storage.setEnabled(true); - assertThat(storage.collect(RESOURCE, INSTRUMENTATION_SCOPE_INFO, 0, 10).isEmpty()).isFalse(); + assertThat(storage.collect(RESOURCE, INSTRUMENTATION_SCOPE_INFO, 10).isEmpty()).isFalse(); } @ParameterizedTest From 96a0050aabb368ff58df952fab3170b1874c71fe Mon Sep 17 00:00:00 2001 From: Antoine Toulme Date: Mon, 27 Apr 2026 13:11:01 -0700 Subject: [PATCH 09/10] checkstyle --- .../internal/state/DefaultSynchronousMetricStorage.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/internal/state/DefaultSynchronousMetricStorage.java b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/internal/state/DefaultSynchronousMetricStorage.java index 08c4491e480..a3b8eb37db0 100644 --- a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/internal/state/DefaultSynchronousMetricStorage.java +++ b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/internal/state/DefaultSynchronousMetricStorage.java @@ -246,7 +246,7 @@ public void finish(Predicate condition, Context context) { AggregatorHolder holderForRecord = getHolderForRecord(); try { holderForRecord.aggregatorHandles.forEach( - (attributes, tAggregatorHandle) -> { +// (attributes, tAggregatorHandle) -> { if (condition.test(attributes)) { holderForRecord.aggregatorHandles.remove(attributes); } @@ -459,7 +459,7 @@ public void finish(Predicate condition, Context context) { return; } aggregatorHandles.forEach( - (attributes, tAggregatorHandle) -> { + (attributes, handle) -> { if (condition.test(attributes)) { aggregatorHandles.remove(attributes); } From b82ae6781ee314ce2d237480a1446aa52e93f8fa Mon Sep 17 00:00:00 2001 From: Antoine Toulme Date: Mon, 27 Apr 2026 16:15:54 -0700 Subject: [PATCH 10/10] fix bad comment --- .../metrics/internal/state/DefaultSynchronousMetricStorage.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/internal/state/DefaultSynchronousMetricStorage.java b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/internal/state/DefaultSynchronousMetricStorage.java index a3b8eb37db0..874f760047e 100644 --- a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/internal/state/DefaultSynchronousMetricStorage.java +++ b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/internal/state/DefaultSynchronousMetricStorage.java @@ -246,7 +246,7 @@ public void finish(Predicate condition, Context context) { AggregatorHolder holderForRecord = getHolderForRecord(); try { holderForRecord.aggregatorHandles.forEach( -// (attributes, tAggregatorHandle) -> { + (attributes, handle) -> { if (condition.test(attributes)) { holderForRecord.aggregatorHandles.remove(attributes); }