Skip to content

[bug] ExplicitBucketHistogramConfiguration with Boundaries = Array.Empty<double>() throws exception #6771

@rajkumar-rangaraj

Description

@rajkumar-rangaraj

Package

OpenTelemetry.Exporter.OpenTelemetryProtocol

Package Version

Package Name Version
OpenTelemetry.Exporter.OpenTelemetryProtocol 1.14.0

Runtime Version

all

Description

Using Boundaries = Array.Empty<double>() in ExplicitBucketHistogramConfiguration to configure a bucket-less histogram (sum/count/min/max only) throws an exception.

Steps to Reproduce

using System.Diagnostics.Metrics;
using OpenTelemetry;
using OpenTelemetry.Metrics;
using OpenTelemetry.Exporter;

var meter = new Meter("TestMeter", "1.0");
var histogram = meter.CreateHistogram<double>("request_duration");

var meterProvider = Sdk.CreateMeterProviderBuilder()
    .AddMeter(meter.Name)
    .AddView(
        instrumentName: "request_duration",
        new ExplicitBucketHistogramConfiguration { Boundaries = Array.Empty<double>() })
    .AddOtlpExporter()
    .Build();

// Record some measurements
histogram.Record(100);
histogram.Record(200);

Expected Result

The histogram should be configured to export only sum, count, min, and max (no bucket counts), as documented.

Actual Result

An exception is thrown. Exception details from self-diagnostics log:

2025-12-13T01:08:09.0444757Z:Unknown error in export method. Message: 'System.NullReferenceException: Object reference not set to an instance of an object.
   at OpenTelemetry.Exporter.OpenTelemetryProtocol.Implementation.Serializer.ProtobufOtlpMetricSerializer.<WriteHistogramBuckets>g__WriteExplicitBounds|18_1(Byte[] buffer, Int32 writePosition, Double[] values)
   at OpenTelemetry.Exporter.OpenTelemetryProtocol.Implementation.Serializer.ProtobufOtlpMetricSerializer.WriteHistogramBuckets(Byte[] buffer, Int32 writePosition, HistogramBuckets buckets)
   at OpenTelemetry.Exporter.OpenTelemetryProtocol.Implementation.Serializer.ProtobufOtlpMetricSerializer.WriteMetric(Byte[] buffer, Int32 writePosition, Metric metric)
   at OpenTelemetry.Exporter.OpenTelemetryProtocol.Implementation.Serializer.ProtobufOtlpMetricSerializer.WriteScopeMetric(Byte[] buffer, Int32 writePosition, String meterName, List`1 metrics)
   at OpenTelemetry.Exporter.OpenTelemetryProtocol.Implementation.Serializer.ProtobufOtlpMetricSerializer.WriteScopeMetrics(Byte[] buffer, Int32 writePosition, Dictionary`2 scopeMetrics)
   at OpenTelemetry.Exporter.OpenTelemetryProtocol.Implementation.Serializer.ProtobufOtlpMetricSerializer.WriteResourceMetrics(Byte[] buffer, Int32 writePosition, Resource resource, Dictionary`2 scopeMetrics)
   at OpenTelemetry.Exporter.OpenTelemetryProtocol.Implementation.Serializer.ProtobufOtlpMetricSerializer.TryWriteResourceMetrics(Byte[]& buffer, Int32 writePosition, Resource resource, Dictionary`2 scopeMetrics)
   at OpenTelemetry.Exporter.OpenTelemetryProtocol.Implementation.Serializer.ProtobufOtlpMetricSerializer.WriteMetricsData(Byte[]& buffer, Int32 writePosition, Resource resource, Batch`1& batch)
   at OpenTelemetry.Exporter.OtlpMetricExporter.Export(Batch`1& metrics)'. IsRetry: False

Additional Context

No response

Tip

React with 👍 to help prioritize this issue. Please use comments to provide useful context, avoiding +1 or me too, to help us triage it. Learn more here.

Metadata

Metadata

Labels

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions