Skip to content

[receiver/datadog] Enable128BitTraceID feature gate causes fatal concurrency writes #42644

@Mystik738

Description

@Mystik738

Component(s)

receiver/datadog

What happened?

Description

The receiver.datadogreceiver.Enable128BitTraceID feature gate causes LRU cache concurrency issues. The current implementation uses the non-thread safe simplelru package within
golang-lru rather than the thread safe package at the root of that repo.

Steps to Reproduce

  1. Run the opentelemetry collector with the datadog receiver configured and the --feature-gates=receiver.datadogreceiver.Enable128BitTraceID flag set.
  2. Receive traces through the receiver.

Expected Result

A concurrent cache write without a fatal error.

Actual Result

fatal error: concurrent map writes

Collector version

0.131.0

Environment information

Environment

OS: Amazon Linux 2

OpenTelemetry Collector configuration

Log output

2025-09-11 18:31:27.441Z fatal error: concurrent map writes
2025-09-11 18:31:27.449Z 
2025-09-11 18:31:27.449Z goroutine 164 [running]:
2025-09-11 18:31:27.449Z internal/runtime/maps.fatal({0xc29e367?, 0x50?})
2025-09-11 18:31:27.449Z        runtime/panic.go:1058 +0x18
2025-09-11 18:31:27.449Z github.com/hashicorp/golang-lru/v2/simplelru.(*LRU[...]).Add(0xd76ccc0, 0x889ea6807553b772, {0x68, 0xc3, 0x15, 0x7f, 0x0, 0x0, 0x0, 0x0, ...})
2025-09-11 18:31:27.449Z        github.com/hashicorp/golang-lru/v2@v2.0.7/simplelru/lru.go:60 +0x185
2025-09-11 18:31:27.449Z github.com/open-telemetry/opentelemetry-collector-contrib/receiver/datadogreceiver/internal/translator.traceID64to128(0xc001bd81c0, 0xc001e2b800)
2025-09-11 18:31:27.449Z        github.com/open-telemetry/opentelemetry-collector-contrib/receiver/datadogreceiver@v0.131.0/internal/translator/traces_translator.go:97 +0x145
2025-09-11 18:31:27.449Z github.com/open-telemetry/opentelemetry-collector-contrib/receiver/datadogreceiver/internal/translator.ToTraces(0xc001d6a600, 0xc001bc65b0, 0xc000da6a00, 0xc001e2b800)
2025-09-11 18:31:27.449Z        github.com/open-telemetry/opentelemetry-collector-contrib/receiver/datadogreceiver@v0.131.0/internal/translator/traces_translator.go:198 +0xfda
2025-09-11 18:31:27.449Z github.com/open-telemetry/opentelemetry-collector-contrib/receiver/datadogreceiver.(*datadogReceiver).handleTraces(0xc0015c2000, {0xd64ffa0, 0xc003fea480}, 0xc000da6a00)
2025-09-11 18:31:27.449Z        github.com/open-telemetry/opentelemetry-collector-contrib/receiver/datadogreceiver@v0.131.0/receiver.go:285 +0x398
2025-09-11 18:31:27.449Z net/http.HandlerFunc.ServeHTTP(0xc0002bd800?, {0xd64ffa0?, 0xc003fea480?}, 0x0?)
2025-09-11 18:31:27.449Z        net/http/server.go:2294 +0x29
2025-09-11 18:31:27.449Z net/http.(*ServeMux).ServeHTTP(0xc001266d80?, {0xd64ffa0, 0xc003fea480}, 0xc000da6a00)
2025-09-11 18:31:27.449Z        net/http/server.go:2822 +0x1c4
2025-09-11 18:31:27.449Z go.opentelemetry.io/collector/config/confighttp.(*decompressor).ServeHTTP(0xc001266d80, {0xd64ffa0, 0xc003fea480}, 0xc000da6a00)
2025-09-11 18:31:27.449Z        go.opentelemetry.io/collector/config/confighttp@v0.131.0/compression.go:239 +0x204
2025-09-11 18:31:27.449Z go.opentelemetry.io/collector/config/confighttp.(*ServerConfig).ToServer.maxRequestBodySizeInterceptor.func2({0xd64ffa0, 0xc003fea480}, 0xc000da6a00)
2025-09-11 18:31:27.449Z        go.opentelemetry.io/collector/config/confighttp@v0.131.0/confighttp.go:631 +0x87
2025-09-11 18:31:27.449Z net/http.HandlerFunc.ServeHTTP(0xd65fca8?, {0xd64ffa0?, 0xc003fea480?}, 0xd55d250?)
2025-09-11 18:31:27.449Z        net/http/server.go:2294 +0x29
2025-09-11 18:31:27.449Z go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp.(*middleware).serveHTTP(0xc00037d900, {0xd632ee0, 0xc001bd80e0}, 0xc000da6780, {0xd58a620, 0xc00180ace0})
2025-09-11 18:31:27.449Z        go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp@v0.62.0/handler.go:180 +0x12fa
2025-09-11 18:31:27.449Z go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp.NewMiddleware.func1.1({0xd632ee0?, 0xc001bd80e0?}, 0x7b2701?)
2025-09-11 18:31:27.449Z        go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp@v0.62.0/handler.go:67 +0x35
2025-09-11 18:31:27.449Z net/http.HandlerFunc.ServeHTTP(0xc000da6640?, {0xd632ee0?, 0xc001bd80e0?}, 0xc005a82b20?)
2025-09-11 18:31:27.449Z        net/http/server.go:2294 +0x29
2025-09-11 18:31:27.449Z go.opentelemetry.io/collector/config/confighttp.(*clientInfoHandler).ServeHTTP(0xc00125d830, {0xd632ee0, 0xc001bd80e0}, 0xc000da6640)
2025-09-11 18:31:27.449Z        go.opentelemetry.io/collector/config/confighttp@v0.131.0/clientinfohandler.go:26 +0xee
2025-09-11 18:31:27.449Z net/http.serverHandler.ServeHTTP({0xd5db910?}, {0xd632ee0?, 0xc001bd80e0?}, 0x6?)
2025-09-11 18:31:27.449Z        net/http/server.go:3301 +0x8e
2025-09-11 18:31:27.449Z net/http.(*conn).serve(0xc0052b9320, {0xd65fca8, 0xc000a05830})
2025-09-11 18:31:27.449Z        net/http/server.go:2102 +0x625
2025-09-11 18:31:27.449Z created by net/http.(*Server).Serve in goroutine 238
2025-09-11 18:31:27.449Z        net/http/server.go:3454 +0x485

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

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions