diff --git a/.chloggen/list-map-duality.yaml b/.chloggen/list-map-duality.yaml new file mode 100644 index 00000000000..d43e6cf8efb --- /dev/null +++ b/.chloggen/list-map-duality.yaml @@ -0,0 +1,38 @@ +# Use this changelog template to create an entry for release notes. + +# One of 'breaking', 'deprecation', 'new_component', 'enhancement', 'bug_fix' +change_type: 'breaking' + +# The name of the component, or a single word describing the area of concern, (e.g. otlpreceiver) +component: all + +# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`). +note: Change type of `configgrpc.ClientConfig.Headers`, `confighttp.ClientConfig.Headers`, and `confighttp.ServerConfig.ResponseHeaders` + +# One or more tracking issues or pull requests related to the change +issues: [13930] + +# (Optional) One or more lines of additional information to render under the primary note. +# These lines will be padded with 2 spaces and then inserted directly into the document. +# Use pipe (|) for multiline entries. +subtext: | + `configopaque.MapList` is a new alternative to `map[string]configopaque.String` which can unmarshal + both maps and lists of name/value pairs. + + For example, if `headers` is a field of type `configopaque.MapList`, + then the following YAML configs will unmarshal to the same thing: + ```yaml + headers: + "foo": "bar" + + headers: + - name: "foo" + value: "bar" + ``` + +# Optional: The change log or logs in which this entry should be included. +# e.g. '[user]' or '[user, api]' +# Include 'user' if the change is relevant to end users. +# Include 'api' if there is a change to a library API. +# Default: '[user]' +change_logs: [api] diff --git a/.github/workflows/utils/cspell.json b/.github/workflows/utils/cspell.json index b9e9605e08d..8f70b547a03 100644 --- a/.github/workflows/utils/cspell.json +++ b/.github/workflows/utils/cspell.json @@ -288,6 +288,7 @@ "logstest", "lycheeverse", "mapconverter", + "maplist", "mapstructure", "marshalers", "mdatagen", diff --git a/cmd/builder/internal/builder/main_test.go b/cmd/builder/internal/builder/main_test.go index e15cdf23fe9..b1a64fdd264 100644 --- a/cmd/builder/internal/builder/main_test.go +++ b/cmd/builder/internal/builder/main_test.go @@ -88,6 +88,7 @@ var replaceModules = []string{ "/extension/zpagesextension", "/extension/xextension", "/featuregate", + "/internal/maplist", "/internal/memorylimiter", "/internal/fanoutconsumer", "/internal/sharedcomponent", diff --git a/cmd/mdatagen/go.mod b/cmd/mdatagen/go.mod index 2eed28f19d8..05c326d8afb 100644 --- a/cmd/mdatagen/go.mod +++ b/cmd/mdatagen/go.mod @@ -203,3 +203,5 @@ replace go.opentelemetry.io/collector/pdata/xpdata => ../../pdata/xpdata replace go.opentelemetry.io/collector/exporter/exporterhelper => ../../exporter/exporterhelper replace go.opentelemetry.io/collector/service/telemetry/telemetrytest => ../../service/telemetry/telemetrytest + +replace go.opentelemetry.io/collector/internal/maplist => ../../internal/maplist diff --git a/cmd/otelcorecol/builder-config.yaml b/cmd/otelcorecol/builder-config.yaml index 60253d0bc45..39c3811f6f1 100644 --- a/cmd/otelcorecol/builder-config.yaml +++ b/cmd/otelcorecol/builder-config.yaml @@ -89,6 +89,7 @@ replaces: - go.opentelemetry.io/collector/extension/xextension => ../../extension/xextension - go.opentelemetry.io/collector/extension/zpagesextension => ../../extension/zpagesextension - go.opentelemetry.io/collector/featuregate => ../../featuregate + - go.opentelemetry.io/collector/internal/maplist => ../../internal/maplist - go.opentelemetry.io/collector/internal/memorylimiter => ../../internal/memorylimiter - go.opentelemetry.io/collector/internal/fanoutconsumer => ../../internal/fanoutconsumer - go.opentelemetry.io/collector/internal/telemetry => ../../internal/telemetry diff --git a/cmd/otelcorecol/go.mod b/cmd/otelcorecol/go.mod index f5b285d9413..d361914d6ce 100644 --- a/cmd/otelcorecol/go.mod +++ b/cmd/otelcorecol/go.mod @@ -119,6 +119,7 @@ require ( go.opentelemetry.io/collector/extension/xextension v0.137.0 // indirect go.opentelemetry.io/collector/featuregate v1.43.0 // indirect go.opentelemetry.io/collector/internal/fanoutconsumer v0.137.0 // indirect + go.opentelemetry.io/collector/internal/maplist v0.137.0 // indirect go.opentelemetry.io/collector/internal/memorylimiter v0.137.0 // indirect go.opentelemetry.io/collector/internal/sharedcomponent v0.137.0 // indirect go.opentelemetry.io/collector/internal/telemetry v0.137.0 // indirect @@ -282,6 +283,8 @@ replace go.opentelemetry.io/collector/extension/zpagesextension => ../../extensi replace go.opentelemetry.io/collector/featuregate => ../../featuregate +replace go.opentelemetry.io/collector/internal/maplist => ../../internal/maplist + replace go.opentelemetry.io/collector/internal/memorylimiter => ../../internal/memorylimiter replace go.opentelemetry.io/collector/internal/fanoutconsumer => ../../internal/fanoutconsumer diff --git a/cmd/otelcorecol/go.sum b/cmd/otelcorecol/go.sum index a61293a8b3c..e39e315f29e 100644 --- a/cmd/otelcorecol/go.sum +++ b/cmd/otelcorecol/go.sum @@ -1,3 +1,7 @@ +github.com/alecthomas/assert/v2 v2.11.0 h1:2Q9r3ki8+JYXvGsDyBXwH3LcJ+WK5D0gc5E8vS6K3D0= +github.com/alecthomas/assert/v2 v2.11.0/go.mod h1:Bze95FyfUr7x34QZrjL+XP+0qgp/zg8yS+TtBj1WA3k= +github.com/alecthomas/repr v0.4.0 h1:GhI2A8MACjfegCPVq9f1FLvIBS+DrQ2KQBFZP1iFzXc= +github.com/alecthomas/repr v0.4.0/go.mod h1:Fr0507jx4eOXV7AlPV6AVZLYrLIuIeSOWtW57eE/O/4= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/cenkalti/backoff/v5 v5.0.3 h1:ZN+IMa753KfX5hd8vVaMixjnqRZ3y8CuJKRKj1xcsSM= @@ -51,6 +55,8 @@ github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.2 h1:8Tjv8EJ+pM1xP8mK6egEbD1OgnV github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.2/go.mod h1:pkJQ2tZHJ0aFOVEEot6oZmaVEZcRme73eIFmhiVuRWs= github.com/hashicorp/go-version v1.7.0 h1:5tqGy27NaOTB8yJKUZELlFAS/LTKJkrmONwQKeRZfjY= github.com/hashicorp/go-version v1.7.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM= +github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= diff --git a/config/configgrpc/configgrpc.go b/config/configgrpc/configgrpc.go index 1d329eacaab..c3b3ad90be5 100644 --- a/config/configgrpc/configgrpc.go +++ b/config/configgrpc/configgrpc.go @@ -95,7 +95,7 @@ type ClientConfig struct { WaitForReady bool `mapstructure:"wait_for_ready,omitempty"` // The headers associated with gRPC requests. - Headers map[string]configopaque.String `mapstructure:"headers,omitempty"` + Headers configopaque.MapList `mapstructure:"headers,omitempty"` // Sets the balancer in grpclb_policy to discover the servers. Default is pick_first. // https://github.com/grpc/grpc-go/blob/master/examples/features/load_balancing/README.md @@ -289,7 +289,7 @@ func (cc *ClientConfig) ToClientConn( func (cc *ClientConfig) addHeadersIfAbsent(ctx context.Context) context.Context { kv := make([]string, 0, 2*len(cc.Headers)) existingMd, _ := metadata.FromOutgoingContext(ctx) - for k, v := range cc.Headers { + for k, v := range cc.Headers.Pairs { if len(existingMd.Get(k)) == 0 { kv = append(kv, k, string(v)) } diff --git a/config/configgrpc/configgrpc_test.go b/config/configgrpc/configgrpc_test.go index cbec3151274..4c38153f063 100644 --- a/config/configgrpc/configgrpc_test.go +++ b/config/configgrpc/configgrpc_test.go @@ -163,9 +163,9 @@ func TestAllGrpcClientSettings(t *testing.T) { { name: "test all with gzip compression", settings: ClientConfig{ - Headers: map[string]configopaque.String{ + Headers: configopaque.MapListFromMap(map[string]configopaque.String{ "test": "test", - }, + }), Endpoint: "localhost:1234", Compression: configcompression.TypeGzip, TLS: configtls.ClientConfig{ @@ -192,9 +192,9 @@ func TestAllGrpcClientSettings(t *testing.T) { { name: "test all with snappy compression", settings: ClientConfig{ - Headers: map[string]configopaque.String{ + Headers: configopaque.MapListFromMap(map[string]configopaque.String{ "test": "test", - }, + }), Endpoint: "localhost:1234", Compression: configcompression.TypeSnappy, TLS: configtls.ClientConfig{ @@ -221,9 +221,9 @@ func TestAllGrpcClientSettings(t *testing.T) { { name: "test all with zstd compression", settings: ClientConfig{ - Headers: map[string]configopaque.String{ + Headers: configopaque.MapListFromMap(map[string]configopaque.String{ "test": "test", - }, + }), Endpoint: "localhost:1234", Compression: configcompression.TypeZstd, TLS: configtls.ClientConfig{ @@ -285,9 +285,9 @@ func TestHeaders(t *testing.T) { TLS: configtls.ClientConfig{ Insecure: true, }, - Headers: map[string]configopaque.String{ + Headers: configopaque.MapListFromMap(map[string]configopaque.String{ "testheader": "testvalue", - }, + }), }) require.NoError(t, errResp) assert.NotNil(t, resp) @@ -434,9 +434,9 @@ func TestGrpcServerAuthSettings(t *testing.T) { func TestGrpcClientConfigInvalidBalancer(t *testing.T) { settings := ClientConfig{ - Headers: map[string]configopaque.String{ + Headers: configopaque.MapListFromMap(map[string]configopaque.String{ "test": "test", - }, + }), Endpoint: "localhost:1234", Compression: "gzip", TLS: configtls.ClientConfig{ diff --git a/config/configgrpc/go.mod b/config/configgrpc/go.mod index 46cc69213d4..35bfaaca2b3 100644 --- a/config/configgrpc/go.mod +++ b/config/configgrpc/go.mod @@ -55,6 +55,7 @@ require ( go.opentelemetry.io/collector/confmap v1.43.0 // indirect go.opentelemetry.io/collector/confmap/xconfmap v0.137.0 // indirect go.opentelemetry.io/collector/featuregate v1.43.0 // indirect + go.opentelemetry.io/collector/internal/maplist v0.137.0 // indirect go.opentelemetry.io/collector/internal/telemetry v0.137.0 // indirect go.opentelemetry.io/collector/pdata/pprofile v0.137.0 // indirect go.opentelemetry.io/contrib/bridges/otelzap v0.13.0 // indirect @@ -97,6 +98,8 @@ replace go.opentelemetry.io/collector/config/configmiddleware => ../configmiddle replace go.opentelemetry.io/collector/extension/extensionmiddleware => ../../extension/extensionmiddleware +replace go.opentelemetry.io/collector/internal/maplist => ../../internal/maplist + replace go.opentelemetry.io/collector/pdata => ../../pdata replace go.opentelemetry.io/collector/pdata/testdata => ../../pdata/testdata diff --git a/config/configgrpc/go.sum b/config/configgrpc/go.sum index eef5a18320d..4044a87e4b5 100644 --- a/config/configgrpc/go.sum +++ b/config/configgrpc/go.sum @@ -1,3 +1,7 @@ +github.com/alecthomas/assert/v2 v2.11.0 h1:2Q9r3ki8+JYXvGsDyBXwH3LcJ+WK5D0gc5E8vS6K3D0= +github.com/alecthomas/assert/v2 v2.11.0/go.mod h1:Bze95FyfUr7x34QZrjL+XP+0qgp/zg8yS+TtBj1WA3k= +github.com/alecthomas/repr v0.4.0 h1:GhI2A8MACjfegCPVq9f1FLvIBS+DrQ2KQBFZP1iFzXc= +github.com/alecthomas/repr v0.4.0/go.mod h1:Fr0507jx4eOXV7AlPV6AVZLYrLIuIeSOWtW57eE/O/4= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -33,6 +37,8 @@ github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/hashicorp/go-version v1.7.0 h1:5tqGy27NaOTB8yJKUZELlFAS/LTKJkrmONwQKeRZfjY= github.com/hashicorp/go-version v1.7.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM= +github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= diff --git a/config/confighttp/client.go b/config/confighttp/client.go index 41e5dd1b53d..b23bf7bc57d 100644 --- a/config/confighttp/client.go +++ b/config/confighttp/client.go @@ -56,7 +56,7 @@ type ClientConfig struct { // Additional headers attached to each HTTP request sent by the client. // Existing header values are overwritten if collision happens. // Header values are opaque since they may be sensitive. - Headers map[string]configopaque.String `mapstructure:"headers,omitempty"` + Headers configopaque.MapList `mapstructure:"headers,omitempty"` // Auth configuration for outgoing HTTP calls. Auth configoptional.Optional[configauth.Config] `mapstructure:"auth,omitempty"` @@ -130,7 +130,6 @@ func NewDefaultClientConfig() ClientConfig { defaultTransport := http.DefaultTransport.(*http.Transport) return ClientConfig{ - Headers: map[string]configopaque.String{}, MaxIdleConns: defaultTransport.MaxIdleConns, IdleConnTimeout: defaultTransport.IdleConnTimeout, ForceAttemptHTTP2: true, @@ -283,18 +282,18 @@ func (cc *ClientConfig) ToClient(ctx context.Context, host component.Host, setti // Custom RoundTripper that adds headers. type headerRoundTripper struct { transport http.RoundTripper - headers map[string]configopaque.String + headers configopaque.MapList } // RoundTrip is a custom RoundTripper that adds headers to the request. func (interceptor *headerRoundTripper) RoundTrip(req *http.Request) (*http.Response, error) { // Set Host header if provided - hostHeader, found := interceptor.headers["Host"] + hostHeader, found := interceptor.headers.Get("Host") if found && hostHeader != "" { // `Host` field should be set to override default `Host` header value which is Endpoint req.Host = string(hostHeader) } - for k, v := range interceptor.headers { + for k, v := range interceptor.headers.Pairs { req.Header.Set(k, string(v)) } diff --git a/config/confighttp/client_test.go b/config/confighttp/client_test.go index ac8cd75935b..20aa4155177 100644 --- a/config/confighttp/client_test.go +++ b/config/confighttp/client_test.go @@ -429,7 +429,7 @@ func TestHTTPClientSettingWithAuthConfig(t *testing.T) { settings: ClientConfig{ Endpoint: "localhost:1234", Auth: configoptional.Some(configauth.Config{AuthenticatorID: mockID}), - Headers: map[string]configopaque.String{"foo": "bar"}, + Headers: configopaque.MapListFromMap(map[string]configopaque.String{"foo": "bar"}), }, shouldErr: false, host: &mockHost{ @@ -530,7 +530,7 @@ func TestHttpClientHeaders(t *testing.T) { ReadBufferSize: 0, WriteBufferSize: 0, Timeout: 0, - Headers: tt.headers, + Headers: configopaque.MapListFromMap(tt.headers), } client, _ := setting.ToClient(context.Background(), componenttest.NewNopHost(), componenttest.NewNopTelemetrySettings()) req, err := http.NewRequest(http.MethodGet, setting.Endpoint, http.NoBody) @@ -566,7 +566,7 @@ func TestHttpClientHostHeader(t *testing.T) { ReadBufferSize: 0, WriteBufferSize: 0, Timeout: 0, - Headers: tt.headers, + Headers: configopaque.MapListFromMap(tt.headers), } client, _ := setting.ToClient(context.Background(), componenttest.NewNopHost(), componenttest.NewNopTelemetrySettings()) req, err := http.NewRequest(http.MethodGet, setting.Endpoint, http.NoBody) @@ -724,10 +724,10 @@ func TestClientUnmarshalYAMLComprehensiveConfig(t *testing.T) { assert.Equal(t, "example.com", clientConfig.TLS.ServerName) // Verify headers - expectedHeaders := map[string]configopaque.String{ + expectedHeaders := configopaque.MapListFromMap(map[string]configopaque.String{ "User-Agent": "OpenTelemetry-Collector/1.0", "X-Custom-Header": "custom-value", - } + }) assert.Equal(t, expectedHeaders, clientConfig.Headers) // Verify middlewares diff --git a/config/confighttp/go.mod b/config/confighttp/go.mod index 4032c66ff44..1494ff2e419 100644 --- a/config/confighttp/go.mod +++ b/config/confighttp/go.mod @@ -55,6 +55,7 @@ require ( go.opentelemetry.io/auto/sdk v1.1.0 // indirect go.opentelemetry.io/collector/confmap v1.43.0 go.opentelemetry.io/collector/confmap/xconfmap v0.137.0 + go.opentelemetry.io/collector/internal/maplist v0.137.0 // indirect go.opentelemetry.io/collector/internal/telemetry v0.137.0 // indirect go.opentelemetry.io/collector/pdata v1.43.0 // indirect go.opentelemetry.io/contrib/bridges/otelzap v0.13.0 // indirect @@ -104,6 +105,8 @@ replace go.opentelemetry.io/collector/client => ../../client replace go.opentelemetry.io/collector/extension/extensionauth/extensionauthtest => ../../extension/extensionauth/extensionauthtest +replace go.opentelemetry.io/collector/internal/maplist => ../../internal/maplist + replace go.opentelemetry.io/collector/internal/telemetry => ../../internal/telemetry replace go.opentelemetry.io/collector/pipeline => ../../pipeline diff --git a/config/confighttp/go.sum b/config/confighttp/go.sum index 60509be1297..43fbec77fc5 100644 --- a/config/confighttp/go.sum +++ b/config/confighttp/go.sum @@ -1,3 +1,7 @@ +github.com/alecthomas/assert/v2 v2.11.0 h1:2Q9r3ki8+JYXvGsDyBXwH3LcJ+WK5D0gc5E8vS6K3D0= +github.com/alecthomas/assert/v2 v2.11.0/go.mod h1:Bze95FyfUr7x34QZrjL+XP+0qgp/zg8yS+TtBj1WA3k= +github.com/alecthomas/repr v0.4.0 h1:GhI2A8MACjfegCPVq9f1FLvIBS+DrQ2KQBFZP1iFzXc= +github.com/alecthomas/repr v0.4.0/go.mod h1:Fr0507jx4eOXV7AlPV6AVZLYrLIuIeSOWtW57eE/O/4= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -35,6 +39,8 @@ github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/hashicorp/go-version v1.7.0 h1:5tqGy27NaOTB8yJKUZELlFAS/LTKJkrmONwQKeRZfjY= github.com/hashicorp/go-version v1.7.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM= +github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= diff --git a/config/confighttp/server.go b/config/confighttp/server.go index f9da9a53768..3dc16c855ce 100644 --- a/config/confighttp/server.go +++ b/config/confighttp/server.go @@ -52,7 +52,7 @@ type ServerConfig struct { // Additional headers attached to each HTTP response sent to the client. // Header values are opaque since they may be sensitive. - ResponseHeaders map[string]configopaque.String `mapstructure:"response_headers"` + ResponseHeaders configopaque.MapList `mapstructure:"response_headers,omitempty"` // CompressionAlgorithms configures the list of compression algorithms the server can accept. Default: ["", "gzip", "zstd", "zlib", "snappy", "deflate"] CompressionAlgorithms []string `mapstructure:"compression_algorithms,omitempty"` @@ -102,7 +102,6 @@ type ServerConfig struct { // We encourage to use this function to create an object of ServerConfig. func NewDefaultServerConfig() ServerConfig { return ServerConfig{ - ResponseHeaders: map[string]configopaque.String{}, WriteTimeout: 30 * time.Second, ReadHeaderTimeout: 1 * time.Minute, IdleTimeout: 1 * time.Minute, @@ -287,11 +286,11 @@ func (sc *ServerConfig) ToServer(ctx context.Context, host component.Host, setti return server, err } -func responseHeadersHandler(handler http.Handler, headers map[string]configopaque.String) http.Handler { +func responseHeadersHandler(handler http.Handler, headers configopaque.MapList) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { h := w.Header() - for k, v := range headers { + for k, v := range headers.Pairs { h.Set(k, string(v)) } diff --git a/config/confighttp/server_test.go b/config/confighttp/server_test.go index b254efc2168..db34bfe86cc 100644 --- a/config/confighttp/server_test.go +++ b/config/confighttp/server_test.go @@ -451,7 +451,7 @@ func TestHttpServerHeaders(t *testing.T) { t.Run(tt.name, func(t *testing.T) { sc := &ServerConfig{ Endpoint: "localhost:0", - ResponseHeaders: tt.headers, + ResponseHeaders: configopaque.MapListFromMap(tt.headers), } ln, err := sc.ToListener(context.Background()) @@ -950,7 +950,7 @@ func BenchmarkHttpRequest(b *testing.B) { func TestDefaultHTTPServerSettings(t *testing.T) { httpServerSettings := NewDefaultServerConfig() - assert.NotNil(t, httpServerSettings.ResponseHeaders) + assert.Nil(t, httpServerSettings.ResponseHeaders) assert.NotNil(t, httpServerSettings.CORS) assert.NotNil(t, httpServerSettings.TLS) assert.Equal(t, 1*time.Minute, httpServerSettings.IdleTimeout) @@ -1138,10 +1138,10 @@ func TestServerUnmarshalYAMLComprehensiveConfig(t *testing.T) { assert.Equal(t, 7200, serverConfig.CORS.Get().MaxAge) // Verify response headers - expectedResponseHeaders := map[string]configopaque.String{ + expectedResponseHeaders := configopaque.MapListFromMap(map[string]configopaque.String{ "Server": "OpenTelemetry-Collector", "X-Flavor": "apple", - } + }) assert.Equal(t, expectedResponseHeaders, serverConfig.ResponseHeaders) // Verify compression algorithms diff --git a/config/confighttp/xconfighttp/go.mod b/config/confighttp/xconfighttp/go.mod index f07eda2fdaf..aecbbdc9d8c 100644 --- a/config/confighttp/xconfighttp/go.mod +++ b/config/confighttp/xconfighttp/go.mod @@ -51,6 +51,7 @@ require ( go.opentelemetry.io/collector/extension/extensionauth v1.43.0 // indirect go.opentelemetry.io/collector/extension/extensionmiddleware v0.137.0 // indirect go.opentelemetry.io/collector/featuregate v1.43.0 // indirect + go.opentelemetry.io/collector/internal/maplist v0.137.0 // indirect go.opentelemetry.io/collector/internal/telemetry v0.137.0 // indirect go.opentelemetry.io/collector/pdata v1.43.0 // indirect go.opentelemetry.io/contrib/bridges/otelzap v0.13.0 // indirect @@ -114,3 +115,5 @@ replace go.opentelemetry.io/collector/extension/extensionmiddleware/extensionmid replace go.opentelemetry.io/collector/confmap => ../../../confmap replace go.opentelemetry.io/collector/confmap/xconfmap => ../../../confmap/xconfmap + +replace go.opentelemetry.io/collector/internal/maplist => ../../../internal/maplist diff --git a/config/confighttp/xconfighttp/go.sum b/config/confighttp/xconfighttp/go.sum index 60509be1297..43fbec77fc5 100644 --- a/config/confighttp/xconfighttp/go.sum +++ b/config/confighttp/xconfighttp/go.sum @@ -1,3 +1,7 @@ +github.com/alecthomas/assert/v2 v2.11.0 h1:2Q9r3ki8+JYXvGsDyBXwH3LcJ+WK5D0gc5E8vS6K3D0= +github.com/alecthomas/assert/v2 v2.11.0/go.mod h1:Bze95FyfUr7x34QZrjL+XP+0qgp/zg8yS+TtBj1WA3k= +github.com/alecthomas/repr v0.4.0 h1:GhI2A8MACjfegCPVq9f1FLvIBS+DrQ2KQBFZP1iFzXc= +github.com/alecthomas/repr v0.4.0/go.mod h1:Fr0507jx4eOXV7AlPV6AVZLYrLIuIeSOWtW57eE/O/4= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -35,6 +39,8 @@ github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/hashicorp/go-version v1.7.0 h1:5tqGy27NaOTB8yJKUZELlFAS/LTKJkrmONwQKeRZfjY= github.com/hashicorp/go-version v1.7.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM= +github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= diff --git a/config/configopaque/go.mod b/config/configopaque/go.mod index de31ae4feca..71811c84365 100644 --- a/config/configopaque/go.mod +++ b/config/configopaque/go.mod @@ -4,15 +4,34 @@ go 1.24.0 require ( github.com/stretchr/testify v1.11.1 + go.opentelemetry.io/collector/internal/maplist v0.137.0 go.uber.org/goleak v1.3.0 go.yaml.in/yaml/v3 v3.0.4 ) require ( github.com/davecgh/go-spew v1.1.1 // indirect - github.com/kr/pretty v0.3.1 // indirect + github.com/go-viper/mapstructure/v2 v2.4.0 // indirect + github.com/gobwas/glob v0.2.3 // indirect + github.com/hashicorp/go-version v1.7.0 // indirect + github.com/knadh/koanf/maps v0.1.2 // indirect + github.com/knadh/koanf/providers/confmap v1.0.0 // indirect + github.com/knadh/koanf/v2 v2.3.0 // indirect + github.com/mitchellh/copystructure v1.2.0 // indirect + github.com/mitchellh/reflectwalk v1.0.2 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect - github.com/rogpeppe/go-internal v1.10.0 // indirect - gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect + go.opentelemetry.io/collector/confmap v1.43.0 // indirect + go.opentelemetry.io/collector/confmap/xconfmap v0.137.0 // indirect + go.opentelemetry.io/collector/featuregate v1.43.0 // indirect + go.uber.org/multierr v1.11.0 // indirect + go.uber.org/zap v1.27.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) + +replace go.opentelemetry.io/collector/internal/maplist => ../../internal/maplist + +replace go.opentelemetry.io/collector/featuregate => ../../featuregate + +replace go.opentelemetry.io/collector/confmap => ../../confmap + +replace go.opentelemetry.io/collector/confmap/xconfmap => ../../confmap/xconfmap diff --git a/config/configopaque/go.sum b/config/configopaque/go.sum index e2d0f850a75..f3ecdca9810 100644 --- a/config/configopaque/go.sum +++ b/config/configopaque/go.sum @@ -1,23 +1,43 @@ -github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/alecthomas/assert/v2 v2.11.0 h1:2Q9r3ki8+JYXvGsDyBXwH3LcJ+WK5D0gc5E8vS6K3D0= +github.com/alecthomas/assert/v2 v2.11.0/go.mod h1:Bze95FyfUr7x34QZrjL+XP+0qgp/zg8yS+TtBj1WA3k= +github.com/alecthomas/repr v0.4.0 h1:GhI2A8MACjfegCPVq9f1FLvIBS+DrQ2KQBFZP1iFzXc= +github.com/alecthomas/repr v0.4.0/go.mod h1:Fr0507jx4eOXV7AlPV6AVZLYrLIuIeSOWtW57eE/O/4= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/go-viper/mapstructure/v2 v2.4.0 h1:EBsztssimR/CONLSZZ04E8qAkxNYq4Qp9LvH92wZUgs= +github.com/go-viper/mapstructure/v2 v2.4.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM= +github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y= +github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8= +github.com/hashicorp/go-version v1.7.0 h1:5tqGy27NaOTB8yJKUZELlFAS/LTKJkrmONwQKeRZfjY= +github.com/hashicorp/go-version v1.7.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM= +github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg= +github.com/knadh/koanf/maps v0.1.2 h1:RBfmAW5CnZT+PJ1CVc1QSJKf4Xu9kxfQgYVQSu8hpbo= +github.com/knadh/koanf/maps v0.1.2/go.mod h1:npD/QZY3V6ghQDdcQzl1W4ICNVTkohC8E73eI2xW4yI= +github.com/knadh/koanf/providers/confmap v1.0.0 h1:mHKLJTE7iXEys6deO5p6olAiZdG5zwp8Aebir+/EaRE= +github.com/knadh/koanf/providers/confmap v1.0.0/go.mod h1:txHYHiI2hAtF0/0sCmcuol4IDcuQbKTybiB1nOcUo1A= +github.com/knadh/koanf/v2 v2.3.0 h1:Qg076dDRFHvqnKG97ZEsi9TAg2/nFTa9hCdcSa1lvlM= +github.com/knadh/koanf/v2 v2.3.0/go.mod h1:gRb40VRAbd4iJMYYD5IxZ6hfuopFcXBpc9bbQpZwo28= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= +github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw= +github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s= +github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ= +github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog= github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= +go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= +go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= +go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= +go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc= go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/config/configopaque/opaque.go b/config/configopaque/opaque.go index b1712a212f7..50b6ed737d5 100644 --- a/config/configopaque/opaque.go +++ b/config/configopaque/opaque.go @@ -5,6 +5,8 @@ package configopaque // import "go.opentelemetry.io/collector/config/configopaqu import ( "fmt" + + "go.opentelemetry.io/collector/internal/maplist" ) // String alias that is marshaled and printed in an opaque way. @@ -34,3 +36,18 @@ func (s String) GoString() string { func (s String) MarshalBinary() (text []byte, err error) { return []byte(maskedString), nil } + +// OpaquePair is a string name/value pair, where the value is opaque. +type OpaquePair = maplist.Pair[String] + +// MapList is equivalent to []OpaquePair, +// but can additionally be unmarshalled from a map. +// +// Config validation enforces unicity of keys. +type MapList = maplist.MapList[String] + +// MapListFromMap converts a map[string]String to a MapList. +// The output pairs are sorted by name to allow comparisons in tests. +func MapListFromMap(m map[string]String) MapList { + return maplist.FromMap(m) +} diff --git a/config/configtls/go.mod b/config/configtls/go.mod index b78ca64e018..b446ac6a2a4 100644 --- a/config/configtls/go.mod +++ b/config/configtls/go.mod @@ -25,6 +25,7 @@ require ( github.com/pmezard/go-difflib v1.0.0 // indirect go.opentelemetry.io/collector/confmap v1.43.0 // indirect go.opentelemetry.io/collector/featuregate v1.43.0 // indirect + go.opentelemetry.io/collector/internal/maplist v0.137.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect go.yaml.in/yaml/v3 v3.0.4 // indirect @@ -40,3 +41,5 @@ replace go.opentelemetry.io/collector/featuregate => ../../featuregate replace go.opentelemetry.io/collector/confmap => ../../confmap replace go.opentelemetry.io/collector/confmap/xconfmap => ../../confmap/xconfmap + +replace go.opentelemetry.io/collector/internal/maplist => ../../internal/maplist diff --git a/config/configtls/go.sum b/config/configtls/go.sum index f2b55853cd2..799884364e7 100644 --- a/config/configtls/go.sum +++ b/config/configtls/go.sum @@ -1,3 +1,7 @@ +github.com/alecthomas/assert/v2 v2.11.0 h1:2Q9r3ki8+JYXvGsDyBXwH3LcJ+WK5D0gc5E8vS6K3D0= +github.com/alecthomas/assert/v2 v2.11.0/go.mod h1:Bze95FyfUr7x34QZrjL+XP+0qgp/zg8yS+TtBj1WA3k= +github.com/alecthomas/repr v0.4.0 h1:GhI2A8MACjfegCPVq9f1FLvIBS+DrQ2KQBFZP1iFzXc= +github.com/alecthomas/repr v0.4.0/go.mod h1:Fr0507jx4eOXV7AlPV6AVZLYrLIuIeSOWtW57eE/O/4= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/foxboron/go-tpm-keyfiles v0.0.0-20250903184740-5d135037bd4d h1:EdO/NMMuCZfxhdzTZLuKAciQSnI2DV+Ppg8+vAYrnqA= @@ -28,6 +32,8 @@ github.com/google/uuid v1.3.1 h1:KjJaJ9iWZ3jOFZIf1Lqf4laDRCasjl0BCmnEGxkdLb4= github.com/google/uuid v1.3.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/hashicorp/go-version v1.7.0 h1:5tqGy27NaOTB8yJKUZELlFAS/LTKJkrmONwQKeRZfjY= github.com/hashicorp/go-version v1.7.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM= +github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg= github.com/knadh/koanf/maps v0.1.2 h1:RBfmAW5CnZT+PJ1CVc1QSJKf4Xu9kxfQgYVQSu8hpbo= github.com/knadh/koanf/maps v0.1.2/go.mod h1:npD/QZY3V6ghQDdcQzl1W4ICNVTkohC8E73eI2xW4yI= github.com/knadh/koanf/providers/confmap v1.0.0 h1:mHKLJTE7iXEys6deO5p6olAiZdG5zwp8Aebir+/EaRE= diff --git a/confmap/internal/e2e/go.mod b/confmap/internal/e2e/go.mod index 58715ef54cb..36d27be0807 100644 --- a/confmap/internal/e2e/go.mod +++ b/confmap/internal/e2e/go.mod @@ -21,7 +21,9 @@ require ( github.com/mitchellh/copystructure v1.2.0 // indirect github.com/mitchellh/reflectwalk v1.0.2 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect + go.opentelemetry.io/collector/confmap/xconfmap v0.137.0 // indirect go.opentelemetry.io/collector/featuregate v1.43.0 // indirect + go.opentelemetry.io/collector/internal/maplist v0.137.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect go.yaml.in/yaml/v3 v3.0.4 // indirect @@ -37,3 +39,7 @@ replace go.opentelemetry.io/collector/confmap/provider/envprovider => ../../prov replace go.opentelemetry.io/collector/config/configopaque => ../../../config/configopaque replace go.opentelemetry.io/collector/featuregate => ../../../featuregate + +replace go.opentelemetry.io/collector/internal/maplist => ../../../internal/maplist + +replace go.opentelemetry.io/collector/confmap/xconfmap => ../../xconfmap diff --git a/confmap/internal/e2e/go.sum b/confmap/internal/e2e/go.sum index bf90e1eb80b..f3ecdca9810 100644 --- a/confmap/internal/e2e/go.sum +++ b/confmap/internal/e2e/go.sum @@ -1,3 +1,7 @@ +github.com/alecthomas/assert/v2 v2.11.0 h1:2Q9r3ki8+JYXvGsDyBXwH3LcJ+WK5D0gc5E8vS6K3D0= +github.com/alecthomas/assert/v2 v2.11.0/go.mod h1:Bze95FyfUr7x34QZrjL+XP+0qgp/zg8yS+TtBj1WA3k= +github.com/alecthomas/repr v0.4.0 h1:GhI2A8MACjfegCPVq9f1FLvIBS+DrQ2KQBFZP1iFzXc= +github.com/alecthomas/repr v0.4.0/go.mod h1:Fr0507jx4eOXV7AlPV6AVZLYrLIuIeSOWtW57eE/O/4= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/go-viper/mapstructure/v2 v2.4.0 h1:EBsztssimR/CONLSZZ04E8qAkxNYq4Qp9LvH92wZUgs= @@ -6,6 +10,8 @@ github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y= github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8= github.com/hashicorp/go-version v1.7.0 h1:5tqGy27NaOTB8yJKUZELlFAS/LTKJkrmONwQKeRZfjY= github.com/hashicorp/go-version v1.7.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM= +github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg= github.com/knadh/koanf/maps v0.1.2 h1:RBfmAW5CnZT+PJ1CVc1QSJKf4Xu9kxfQgYVQSu8hpbo= github.com/knadh/koanf/maps v0.1.2/go.mod h1:npD/QZY3V6ghQDdcQzl1W4ICNVTkohC8E73eI2xW4yI= github.com/knadh/koanf/providers/confmap v1.0.0 h1:mHKLJTE7iXEys6deO5p6olAiZdG5zwp8Aebir+/EaRE= diff --git a/exporter/otlpexporter/config_test.go b/exporter/otlpexporter/config_test.go index 2705bdd6a03..b2c75bf1bfc 100644 --- a/exporter/otlpexporter/config_test.go +++ b/exporter/otlpexporter/config_test.go @@ -64,11 +64,11 @@ func TestUnmarshalConfig(t *testing.T) { }), }, ClientConfig: configgrpc.ClientConfig{ - Headers: map[string]configopaque.String{ + Headers: configopaque.MapListFromMap(map[string]configopaque.String{ "can you have a . here?": "F0000000-0000-0000-0000-000000000000", "header1": "234", "another": "somevalue", - }, + }), Endpoint: "1.2.3.4:1234", Compression: "gzip", TLS: configtls.ClientConfig{ diff --git a/exporter/otlpexporter/factory_test.go b/exporter/otlpexporter/factory_test.go index eb612c05485..6d9a64e29a4 100644 --- a/exporter/otlpexporter/factory_test.go +++ b/exporter/otlpexporter/factory_test.go @@ -121,10 +121,10 @@ func TestCreateTraces(t *testing.T) { config: &Config{ ClientConfig: configgrpc.ClientConfig{ Endpoint: endpoint, - Headers: map[string]configopaque.String{ + Headers: configopaque.MapListFromMap(map[string]configopaque.String{ "hdr1": "val1", "hdr2": "val2", - }, + }), }, }, }, @@ -272,10 +272,10 @@ func TestCreateProfiles(t *testing.T) { config: &Config{ ClientConfig: configgrpc.ClientConfig{ Endpoint: endpoint, - Headers: map[string]configopaque.String{ + Headers: configopaque.MapListFromMap(map[string]configopaque.String{ "hdr1": "val1", "hdr2": "val2", - }, + }), }, }, }, diff --git a/exporter/otlpexporter/go.mod b/exporter/otlpexporter/go.mod index 86209bd3e29..508ab42fa57 100644 --- a/exporter/otlpexporter/go.mod +++ b/exporter/otlpexporter/go.mod @@ -70,6 +70,7 @@ require ( go.opentelemetry.io/collector/extension/extensionmiddleware v0.137.0 // indirect go.opentelemetry.io/collector/extension/xextension v0.137.0 // indirect go.opentelemetry.io/collector/featuregate v1.43.0 // indirect + go.opentelemetry.io/collector/internal/maplist v0.137.0 // indirect go.opentelemetry.io/collector/internal/telemetry v0.137.0 // indirect go.opentelemetry.io/collector/pdata/xpdata v0.137.0 // indirect go.opentelemetry.io/collector/pipeline v1.43.0 // indirect @@ -184,3 +185,5 @@ replace go.opentelemetry.io/collector/pdata/xpdata => ../../pdata/xpdata replace go.opentelemetry.io/collector/config/configoptional => ../../config/configoptional replace go.opentelemetry.io/collector/exporter/exporterhelper => ../exporterhelper + +replace go.opentelemetry.io/collector/internal/maplist => ../../internal/maplist diff --git a/exporter/otlpexporter/go.sum b/exporter/otlpexporter/go.sum index 71fc747244d..78dd95e8859 100644 --- a/exporter/otlpexporter/go.sum +++ b/exporter/otlpexporter/go.sum @@ -1,3 +1,7 @@ +github.com/alecthomas/assert/v2 v2.11.0 h1:2Q9r3ki8+JYXvGsDyBXwH3LcJ+WK5D0gc5E8vS6K3D0= +github.com/alecthomas/assert/v2 v2.11.0/go.mod h1:Bze95FyfUr7x34QZrjL+XP+0qgp/zg8yS+TtBj1WA3k= +github.com/alecthomas/repr v0.4.0 h1:GhI2A8MACjfegCPVq9f1FLvIBS+DrQ2KQBFZP1iFzXc= +github.com/alecthomas/repr v0.4.0/go.mod h1:Fr0507jx4eOXV7AlPV6AVZLYrLIuIeSOWtW57eE/O/4= github.com/cenkalti/backoff/v5 v5.0.3 h1:ZN+IMa753KfX5hd8vVaMixjnqRZ3y8CuJKRKj1xcsSM= github.com/cenkalti/backoff/v5 v5.0.3/go.mod h1:rkhZdG3JZukswDf7f0cwqPNk4K0sa+F97BxZthm/crw= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -35,6 +39,8 @@ github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/hashicorp/go-version v1.7.0 h1:5tqGy27NaOTB8yJKUZELlFAS/LTKJkrmONwQKeRZfjY= github.com/hashicorp/go-version v1.7.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM= +github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= diff --git a/exporter/otlpexporter/otlp.go b/exporter/otlpexporter/otlp.go index 62f1893e5ea..9834c1dc71a 100644 --- a/exporter/otlpexporter/otlp.go +++ b/exporter/otlpexporter/otlp.go @@ -71,7 +71,7 @@ func (e *baseExporter) start(ctx context.Context, host component.Host) (err erro e.logExporter = plogotlp.NewGRPCClient(e.clientConn) e.profileExporter = pprofileotlp.NewGRPCClient(e.clientConn) headers := map[string]string{} - for k, v := range e.config.ClientConfig.Headers { + for k, v := range e.config.ClientConfig.Headers.Pairs { headers[k] = string(v) } e.metadata = metadata.New(headers) diff --git a/exporter/otlpexporter/otlp_test.go b/exporter/otlpexporter/otlp_test.go index 4ab18eb7435..cd5e8a2868a 100644 --- a/exporter/otlpexporter/otlp_test.go +++ b/exporter/otlpexporter/otlp_test.go @@ -315,9 +315,9 @@ func TestSendTraces(t *testing.T) { TLS: configtls.ClientConfig{ Insecure: true, }, - Headers: map[string]configopaque.String{ + Headers: configopaque.MapListFromMap(map[string]configopaque.String{ "header": "header-value", - }, + }), } set := exportertest.NewNopSettings(factory.Type()) set.BuildInfo.Description = "Collector" @@ -487,9 +487,9 @@ func TestSendMetrics(t *testing.T) { TLS: configtls.ClientConfig{ Insecure: true, }, - Headers: map[string]configopaque.String{ + Headers: configopaque.MapListFromMap(map[string]configopaque.String{ "header": "header-value", - }, + }), } set := exportertest.NewNopSettings(factory.Type()) set.BuildInfo.Description = "Collector" @@ -888,9 +888,9 @@ func TestSendProfiles(t *testing.T) { TLS: configtls.ClientConfig{ Insecure: true, }, - Headers: map[string]configopaque.String{ + Headers: configopaque.MapListFromMap(map[string]configopaque.String{ "header": "header-value", - }, + }), } set := exportertest.NewNopSettings(factory.Type()) set.BuildInfo.Description = "Collector" diff --git a/exporter/otlphttpexporter/config_test.go b/exporter/otlphttpexporter/config_test.go index 9e9b9d25db4..2beafacc86a 100644 --- a/exporter/otlphttpexporter/config_test.go +++ b/exporter/otlphttpexporter/config_test.go @@ -66,11 +66,11 @@ func TestUnmarshalConfig(t *testing.T) { }, Encoding: EncodingProto, ClientConfig: confighttp.ClientConfig{ - Headers: map[string]configopaque.String{ + Headers: configopaque.MapListFromMap(map[string]configopaque.String{ "can you have a . here?": "F0000000-0000-0000-0000-000000000000", "header1": "234", "another": "somevalue", - }, + }), Endpoint: "https://1.2.3.4:1234", TLS: configtls.ClientConfig{ Config: configtls.Config{ diff --git a/exporter/otlphttpexporter/factory_test.go b/exporter/otlphttpexporter/factory_test.go index c97b4f61aae..2adb5e82dd1 100644 --- a/exporter/otlphttpexporter/factory_test.go +++ b/exporter/otlphttpexporter/factory_test.go @@ -59,7 +59,7 @@ func clientConfig(endpoint string, headers map[string]configopaque.String, tlsSe clientConfig.Endpoint = endpoint } if headers != nil { - clientConfig.Headers = headers + clientConfig.Headers = configopaque.MapListFromMap(headers) } return clientConfig } diff --git a/exporter/otlphttpexporter/go.mod b/exporter/otlphttpexporter/go.mod index 4b429b1b278..18929dffef4 100644 --- a/exporter/otlphttpexporter/go.mod +++ b/exporter/otlphttpexporter/go.mod @@ -70,6 +70,7 @@ require ( go.opentelemetry.io/collector/extension/extensionmiddleware v0.137.0 // indirect go.opentelemetry.io/collector/extension/xextension v0.137.0 // indirect go.opentelemetry.io/collector/featuregate v1.43.0 // indirect + go.opentelemetry.io/collector/internal/maplist v0.137.0 // indirect go.opentelemetry.io/collector/internal/telemetry v0.137.0 // indirect go.opentelemetry.io/collector/pdata/xpdata v0.137.0 // indirect go.opentelemetry.io/collector/pipeline v1.43.0 // indirect @@ -182,3 +183,5 @@ replace go.opentelemetry.io/collector/extension/extensionmiddleware/extensionmid replace go.opentelemetry.io/collector/pdata/xpdata => ../../pdata/xpdata replace go.opentelemetry.io/collector/exporter/exporterhelper => ../exporterhelper + +replace go.opentelemetry.io/collector/internal/maplist => ../../internal/maplist diff --git a/exporter/otlphttpexporter/go.sum b/exporter/otlphttpexporter/go.sum index 5d1b3eaae07..e195508c085 100644 --- a/exporter/otlphttpexporter/go.sum +++ b/exporter/otlphttpexporter/go.sum @@ -1,3 +1,7 @@ +github.com/alecthomas/assert/v2 v2.11.0 h1:2Q9r3ki8+JYXvGsDyBXwH3LcJ+WK5D0gc5E8vS6K3D0= +github.com/alecthomas/assert/v2 v2.11.0/go.mod h1:Bze95FyfUr7x34QZrjL+XP+0qgp/zg8yS+TtBj1WA3k= +github.com/alecthomas/repr v0.4.0 h1:GhI2A8MACjfegCPVq9f1FLvIBS+DrQ2KQBFZP1iFzXc= +github.com/alecthomas/repr v0.4.0/go.mod h1:Fr0507jx4eOXV7AlPV6AVZLYrLIuIeSOWtW57eE/O/4= github.com/cenkalti/backoff/v5 v5.0.3 h1:ZN+IMa753KfX5hd8vVaMixjnqRZ3y8CuJKRKj1xcsSM= github.com/cenkalti/backoff/v5 v5.0.3/go.mod h1:rkhZdG3JZukswDf7f0cwqPNk4K0sa+F97BxZthm/crw= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -37,6 +41,8 @@ github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/hashicorp/go-version v1.7.0 h1:5tqGy27NaOTB8yJKUZELlFAS/LTKJkrmONwQKeRZfjY= github.com/hashicorp/go-version v1.7.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM= +github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= diff --git a/exporter/otlphttpexporter/otlp_test.go b/exporter/otlphttpexporter/otlp_test.go index bc02f5819be..ecfe46b8868 100644 --- a/exporter/otlphttpexporter/otlp_test.go +++ b/exporter/otlphttpexporter/otlp_test.go @@ -325,7 +325,7 @@ func TestUserAgent(t *testing.T) { Encoding: EncodingProto, TracesEndpoint: srv.URL + "/v1/traces", ClientConfig: confighttp.ClientConfig{ - Headers: tt.headers, + Headers: configopaque.MapListFromMap(tt.headers), }, } exp, err := createTraces(context.Background(), set, cfg) @@ -359,7 +359,7 @@ func TestUserAgent(t *testing.T) { Encoding: EncodingProto, MetricsEndpoint: srv.URL + "/v1/metrics", ClientConfig: confighttp.ClientConfig{ - Headers: tt.headers, + Headers: configopaque.MapListFromMap(tt.headers), }, } exp, err := createMetrics(context.Background(), set, cfg) @@ -393,7 +393,7 @@ func TestUserAgent(t *testing.T) { Encoding: EncodingProto, LogsEndpoint: srv.URL + "/v1/logs", ClientConfig: confighttp.ClientConfig{ - Headers: tt.headers, + Headers: configopaque.MapListFromMap(tt.headers), }, } exp, err := createLogs(context.Background(), set, cfg) @@ -429,7 +429,7 @@ func TestUserAgent(t *testing.T) { Encoding: EncodingProto, ClientConfig: confighttp.ClientConfig{ Endpoint: srv.URL, - Headers: test.headers, + Headers: configopaque.MapListFromMap(test.headers), }, } exp, err := createProfiles(context.Background(), set, cfg) diff --git a/extension/zpagesextension/go.mod b/extension/zpagesextension/go.mod index 256362e6949..a95dd5c8289 100644 --- a/extension/zpagesextension/go.mod +++ b/extension/zpagesextension/go.mod @@ -57,6 +57,7 @@ require ( go.opentelemetry.io/collector/extension/extensionauth v1.43.0 // indirect go.opentelemetry.io/collector/extension/extensionmiddleware v0.137.0 // indirect go.opentelemetry.io/collector/featuregate v1.43.0 // indirect + go.opentelemetry.io/collector/internal/maplist v0.137.0 // indirect go.opentelemetry.io/collector/internal/telemetry v0.137.0 // indirect go.opentelemetry.io/collector/pdata v1.43.0 // indirect go.opentelemetry.io/collector/pipeline v1.43.0 // indirect @@ -132,3 +133,5 @@ replace go.opentelemetry.io/collector/config/configmiddleware => ../../config/co replace go.opentelemetry.io/collector/extension/extensionmiddleware/extensionmiddlewaretest => ../extensionmiddleware/extensionmiddlewaretest replace go.opentelemetry.io/collector/confmap/xconfmap => ../../confmap/xconfmap + +replace go.opentelemetry.io/collector/internal/maplist => ../../internal/maplist diff --git a/extension/zpagesextension/go.sum b/extension/zpagesextension/go.sum index a1e86240b15..91471ac7773 100644 --- a/extension/zpagesextension/go.sum +++ b/extension/zpagesextension/go.sum @@ -1,3 +1,7 @@ +github.com/alecthomas/assert/v2 v2.11.0 h1:2Q9r3ki8+JYXvGsDyBXwH3LcJ+WK5D0gc5E8vS6K3D0= +github.com/alecthomas/assert/v2 v2.11.0/go.mod h1:Bze95FyfUr7x34QZrjL+XP+0qgp/zg8yS+TtBj1WA3k= +github.com/alecthomas/repr v0.4.0 h1:GhI2A8MACjfegCPVq9f1FLvIBS+DrQ2KQBFZP1iFzXc= +github.com/alecthomas/repr v0.4.0/go.mod h1:Fr0507jx4eOXV7AlPV6AVZLYrLIuIeSOWtW57eE/O/4= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -35,6 +39,8 @@ github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/hashicorp/go-version v1.7.0 h1:5tqGy27NaOTB8yJKUZELlFAS/LTKJkrmONwQKeRZfjY= github.com/hashicorp/go-version v1.7.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM= +github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= diff --git a/internal/e2e/confighttp_test.go b/internal/e2e/confighttp_test.go index 12ecc0a75d5..b59ea6f326b 100644 --- a/internal/e2e/confighttp_test.go +++ b/internal/e2e/confighttp_test.go @@ -18,7 +18,6 @@ func TestConfmapMarshalConfigHTTP(t *testing.T) { conf := confmap.New() require.NoError(t, conf.Marshal(confighttp.NewDefaultClientConfig())) assert.Equal(t, map[string]any{ - "headers": map[string]any{}, "idle_conn_timeout": 90 * time.Second, "max_idle_conns": 100, "force_attempt_http2": true, @@ -35,7 +34,6 @@ func TestConfmapMarshalConfigHTTP(t *testing.T) { "idle_timeout": 60 * time.Second, "keep_alives_enabled": true, "read_header_timeout": 60 * time.Second, - "response_headers": map[string]any{}, "tls": nil, "write_timeout": 30 * time.Second, }, conf.ToStringMap()) diff --git a/internal/e2e/go.mod b/internal/e2e/go.mod index b2f98f81fb5..8a0f26f805d 100644 --- a/internal/e2e/go.mod +++ b/internal/e2e/go.mod @@ -118,6 +118,7 @@ require ( go.opentelemetry.io/collector/extension/xextension v0.137.0 // indirect go.opentelemetry.io/collector/featuregate v1.43.0 // indirect go.opentelemetry.io/collector/internal/fanoutconsumer v0.137.0 // indirect + go.opentelemetry.io/collector/internal/maplist v0.137.0 // indirect go.opentelemetry.io/collector/internal/telemetry v0.137.0 // indirect go.opentelemetry.io/collector/pdata/pprofile v0.137.0 // indirect go.opentelemetry.io/collector/pdata/xpdata v0.137.0 // indirect @@ -301,3 +302,5 @@ replace go.opentelemetry.io/collector/processor/batchprocessor => ../../processo replace go.opentelemetry.io/collector/confmap/provider/envprovider => ../../confmap/provider/envprovider replace go.opentelemetry.io/collector/exporter/exporterhelper => ../../exporter/exporterhelper + +replace go.opentelemetry.io/collector/internal/maplist => ../maplist diff --git a/internal/e2e/go.sum b/internal/e2e/go.sum index a61293a8b3c..e39e315f29e 100644 --- a/internal/e2e/go.sum +++ b/internal/e2e/go.sum @@ -1,3 +1,7 @@ +github.com/alecthomas/assert/v2 v2.11.0 h1:2Q9r3ki8+JYXvGsDyBXwH3LcJ+WK5D0gc5E8vS6K3D0= +github.com/alecthomas/assert/v2 v2.11.0/go.mod h1:Bze95FyfUr7x34QZrjL+XP+0qgp/zg8yS+TtBj1WA3k= +github.com/alecthomas/repr v0.4.0 h1:GhI2A8MACjfegCPVq9f1FLvIBS+DrQ2KQBFZP1iFzXc= +github.com/alecthomas/repr v0.4.0/go.mod h1:Fr0507jx4eOXV7AlPV6AVZLYrLIuIeSOWtW57eE/O/4= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/cenkalti/backoff/v5 v5.0.3 h1:ZN+IMa753KfX5hd8vVaMixjnqRZ3y8CuJKRKj1xcsSM= @@ -51,6 +55,8 @@ github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.2 h1:8Tjv8EJ+pM1xP8mK6egEbD1OgnV github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.2/go.mod h1:pkJQ2tZHJ0aFOVEEot6oZmaVEZcRme73eIFmhiVuRWs= github.com/hashicorp/go-version v1.7.0 h1:5tqGy27NaOTB8yJKUZELlFAS/LTKJkrmONwQKeRZfjY= github.com/hashicorp/go-version v1.7.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM= +github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= diff --git a/internal/maplist/Makefile b/internal/maplist/Makefile new file mode 100644 index 00000000000..ded7a36092d --- /dev/null +++ b/internal/maplist/Makefile @@ -0,0 +1 @@ +include ../../Makefile.Common diff --git a/internal/maplist/go.mod b/internal/maplist/go.mod new file mode 100644 index 00000000000..db0512caa03 --- /dev/null +++ b/internal/maplist/go.mod @@ -0,0 +1,36 @@ +module go.opentelemetry.io/collector/internal/maplist + +go 1.24.0 + +require ( + github.com/alecthomas/assert/v2 v2.11.0 + github.com/stretchr/testify v1.11.1 + go.opentelemetry.io/collector/confmap v1.43.0 + go.opentelemetry.io/collector/confmap/xconfmap v0.137.0 +) + +require ( + github.com/alecthomas/repr v0.4.0 // indirect + github.com/davecgh/go-spew v1.1.1 // indirect + github.com/go-viper/mapstructure/v2 v2.4.0 // indirect + github.com/gobwas/glob v0.2.3 // indirect + github.com/hashicorp/go-version v1.7.0 // indirect + github.com/hexops/gotextdiff v1.0.3 // indirect + github.com/knadh/koanf/maps v0.1.2 // indirect + github.com/knadh/koanf/providers/confmap v1.0.0 // indirect + github.com/knadh/koanf/v2 v2.3.0 // indirect + github.com/mitchellh/copystructure v1.2.0 // indirect + github.com/mitchellh/reflectwalk v1.0.2 // indirect + github.com/pmezard/go-difflib v1.0.0 // indirect + go.opentelemetry.io/collector/featuregate v1.43.0 // indirect + go.uber.org/multierr v1.11.0 // indirect + go.uber.org/zap v1.27.0 // indirect + go.yaml.in/yaml/v3 v3.0.4 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect +) + +replace go.opentelemetry.io/collector/featuregate => ../../featuregate + +replace go.opentelemetry.io/collector/confmap => ../../confmap + +replace go.opentelemetry.io/collector/confmap/xconfmap => ../../confmap/xconfmap diff --git a/internal/maplist/go.sum b/internal/maplist/go.sum new file mode 100644 index 00000000000..f3ecdca9810 --- /dev/null +++ b/internal/maplist/go.sum @@ -0,0 +1,47 @@ +github.com/alecthomas/assert/v2 v2.11.0 h1:2Q9r3ki8+JYXvGsDyBXwH3LcJ+WK5D0gc5E8vS6K3D0= +github.com/alecthomas/assert/v2 v2.11.0/go.mod h1:Bze95FyfUr7x34QZrjL+XP+0qgp/zg8yS+TtBj1WA3k= +github.com/alecthomas/repr v0.4.0 h1:GhI2A8MACjfegCPVq9f1FLvIBS+DrQ2KQBFZP1iFzXc= +github.com/alecthomas/repr v0.4.0/go.mod h1:Fr0507jx4eOXV7AlPV6AVZLYrLIuIeSOWtW57eE/O/4= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/go-viper/mapstructure/v2 v2.4.0 h1:EBsztssimR/CONLSZZ04E8qAkxNYq4Qp9LvH92wZUgs= +github.com/go-viper/mapstructure/v2 v2.4.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM= +github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y= +github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8= +github.com/hashicorp/go-version v1.7.0 h1:5tqGy27NaOTB8yJKUZELlFAS/LTKJkrmONwQKeRZfjY= +github.com/hashicorp/go-version v1.7.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM= +github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg= +github.com/knadh/koanf/maps v0.1.2 h1:RBfmAW5CnZT+PJ1CVc1QSJKf4Xu9kxfQgYVQSu8hpbo= +github.com/knadh/koanf/maps v0.1.2/go.mod h1:npD/QZY3V6ghQDdcQzl1W4ICNVTkohC8E73eI2xW4yI= +github.com/knadh/koanf/providers/confmap v1.0.0 h1:mHKLJTE7iXEys6deO5p6olAiZdG5zwp8Aebir+/EaRE= +github.com/knadh/koanf/providers/confmap v1.0.0/go.mod h1:txHYHiI2hAtF0/0sCmcuol4IDcuQbKTybiB1nOcUo1A= +github.com/knadh/koanf/v2 v2.3.0 h1:Qg076dDRFHvqnKG97ZEsi9TAg2/nFTa9hCdcSa1lvlM= +github.com/knadh/koanf/v2 v2.3.0/go.mod h1:gRb40VRAbd4iJMYYD5IxZ6hfuopFcXBpc9bbQpZwo28= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw= +github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s= +github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ= +github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= +github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog= +github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= +github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= +go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= +go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= +go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= +go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= +go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= +go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= +go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc= +go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/internal/maplist/maplist.go b/internal/maplist/maplist.go new file mode 100644 index 00000000000..28c230f41b6 --- /dev/null +++ b/internal/maplist/maplist.go @@ -0,0 +1,107 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +package maplist // import "go.opentelemetry.io/collector/internal/maplist" + +import ( + "cmp" + "fmt" + "iter" + "slices" + + "go.opentelemetry.io/collector/confmap" + "go.opentelemetry.io/collector/confmap/xconfmap" +) + +type Pair[T any] struct { + Name string `mapstructure:"name"` + Value T `mapstructure:"value"` +} + +// MapList[T] is equivalent to []Pair[T], +// but can additionally be unmarshalled from a map. +// +// Config validation enforces unicity of keys. +type MapList[T any] []Pair[T] + +var _ confmap.Unmarshaler = (*MapList[string])(nil) + +// Unmarshal is called by the Collector when unmarshaling from a map. +// When the input config is a slice, this will be skipped, +// and mapstructure's default unmarshal logic will be used. +func (ml *MapList[T]) Unmarshal(conf *confmap.Conf) error { + var m2 map[string]T + if err := conf.Unmarshal(&m2); err != nil { + return err + } + *ml = FromMap(m2) + return nil +} + +var _ xconfmap.Validator = MapList[string]{} + +func (ml MapList[T]) Validate() error { + counts := make(map[string]int, len(ml)) + for _, pair := range ml { + counts[pair.Name]++ + } + if len(counts) == len(ml) { + return nil + } + var duplicates []string + for name, cnt := range counts { + if cnt > 1 { + duplicates = append(duplicates, name) + } + } + slices.Sort(duplicates) + return fmt.Errorf("duplicate keys in map-style list: %v", duplicates) +} + +var _ iter.Seq2[string, string] = MapList[string]{}.Pairs + +func (ml MapList[T]) Pairs(yield func(name string, value T) bool) { + for _, pair := range ml { + if !yield(pair.Name, pair.Value) { + break + } + } +} + +// Get looks up the first pair with the given name. +// If one is found, returns its value and true. +// Otherwise, returns a zero value and false. +func (ml MapList[T]) Get(name string) (val T, ok bool) { + for _, pair := range ml { + if pair.Name == name { + return pair.Value, true + } + } + return val, false +} + +// ToMap converts a MapList[T] to a map[string]T. +// In the presence of duplicate keys, the last value will be used. +func (ml MapList[T]) ToMap() map[string]T { + m := make(map[string]T, len(ml)) + for _, pair := range ml { + m[pair.Name] = pair.Value + } + return m +} + +// FromMap converts a map[string]T to a MapList[T]. +// The output pairs are sorted by name to allow comparisons in tests. +func FromMap[T any](m map[string]T) MapList[T] { + ml := make(MapList[T], 0, len(m)) + for name, value := range m { + ml = append(ml, Pair[T]{ + Name: name, + Value: value, + }) + } + slices.SortFunc(ml, func(p1, p2 Pair[T]) int { + return cmp.Compare(p1.Name, p2.Name) + }) + return ml +} diff --git a/internal/maplist/maplist_test.go b/internal/maplist/maplist_test.go new file mode 100644 index 00000000000..02529114f22 --- /dev/null +++ b/internal/maplist/maplist_test.go @@ -0,0 +1,123 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +package maplist_test + +import ( + "testing" + + "github.com/alecthomas/assert/v2" + "github.com/stretchr/testify/require" + + "go.opentelemetry.io/collector/confmap" + "go.opentelemetry.io/collector/confmap/xconfmap" + "go.opentelemetry.io/collector/internal/maplist" +) + +const headersList = ` +headers: +- name: "foo" + value: "bar" +` + +const headersMap = ` +headers: + "foo": "bar" +` + +const headersBad = ` +headers: + "bad": 1 +` + +const headersDupe = ` +headers: +- name: "foo" + value: "bar" +- name: "foo" + value: "baz" +` + +type testConfig struct { + Headers maplist.MapList[string] `mapstructure:"headers"` +} + +func TestMapListDuality(t *testing.T) { + retrieved1, err := confmap.NewRetrievedFromYAML([]byte(headersList)) + require.NoError(t, err) + conf1, err := retrieved1.AsConf() + require.NoError(t, err) + var tc1 testConfig + require.NoError(t, conf1.Unmarshal(&tc1)) + assert.NoError(t, xconfmap.Validate(&tc1)) + + retrieved2, err := confmap.NewRetrievedFromYAML([]byte(headersMap)) + require.NoError(t, err) + conf2, err := retrieved2.AsConf() + require.NoError(t, err) + var tc2 testConfig + require.NoError(t, conf2.Unmarshal(&tc2)) + assert.NoError(t, xconfmap.Validate(&tc2)) + + assert.Equal(t, tc1, tc2) +} + +func TestMapListUnmarshalError(t *testing.T) { + retrieved, err := confmap.NewRetrievedFromYAML([]byte(headersBad)) + require.NoError(t, err) + conf, err := retrieved.AsConf() + require.NoError(t, err) + var tc testConfig + // Not sure if there is a way to change the error message to include the map case? + assert.EqualError(t, conf.Unmarshal(&tc), + "decoding failed due to the following error(s):\n\n"+ + "'headers' decoding failed due to the following error(s):\n\n"+ + "'[bad]' expected type 'string', got unconvertible type 'int'") +} + +func TestMapListValidate(t *testing.T) { + retrieved, err := confmap.NewRetrievedFromYAML([]byte(headersDupe)) + require.NoError(t, err) + conf, err := retrieved.AsConf() + require.NoError(t, err) + var tc testConfig + require.NoError(t, conf.Unmarshal(&tc)) + assert.EqualError(t, xconfmap.Validate(&tc), `headers: duplicate keys in map-style list: [foo]`) +} + +func TestMapListFromMap(t *testing.T) { + assert.Equal(t, maplist.MapList[int]{ + {"a", 1}, {"b", 2}, + }, maplist.FromMap(map[string]int{ + "a": 1, + "b": 2, + })) +} + +func TestMapListMethods(t *testing.T) { + ml := maplist.MapList[int]{{"a", 1}, {"b", 2}, {"c", 3}} + + type pair = struct { + k string + v int + } + var kvs []pair + for k, v := range ml.Pairs { + kvs = append(kvs, pair{k, v}) + if k == "b" { + break + } + } + assert.Equal(t, []pair{{"a", 1}, {"b", 2}}, kvs) + + v, ok := ml.Get("a") + assert.True(t, ok) + if ok { + assert.Equal(t, 1, v) + } + v, ok = ml.Get("d") + assert.False(t, ok) + assert.Zero(t, v) + + assert.Equal(t, map[string]int{"a": 1, "b": 2, "c": 3}, ml.ToMap()) +} diff --git a/otelcol/go.mod b/otelcol/go.mod index 54352db8f81..81779994b84 100644 --- a/otelcol/go.mod +++ b/otelcol/go.mod @@ -85,6 +85,7 @@ require ( go.opentelemetry.io/collector/consumer/xconsumer v0.137.0 // indirect go.opentelemetry.io/collector/extension/extensioncapabilities v0.137.0 // indirect go.opentelemetry.io/collector/internal/fanoutconsumer v0.137.0 // indirect + go.opentelemetry.io/collector/internal/maplist v0.137.0 // indirect go.opentelemetry.io/collector/internal/telemetry v0.137.0 // indirect go.opentelemetry.io/collector/pdata v1.43.0 // indirect go.opentelemetry.io/collector/pdata/pprofile v0.137.0 // indirect @@ -233,3 +234,5 @@ replace go.opentelemetry.io/collector/config/configoptional => ../config/configo replace go.opentelemetry.io/collector/pdata/xpdata => ../pdata/xpdata replace go.opentelemetry.io/collector/exporter/exporterhelper => ../exporter/exporterhelper + +replace go.opentelemetry.io/collector/internal/maplist => ../internal/maplist diff --git a/otelcol/go.sum b/otelcol/go.sum index b5d0743a5f1..a1f9e2f5a81 100644 --- a/otelcol/go.sum +++ b/otelcol/go.sum @@ -1,3 +1,7 @@ +github.com/alecthomas/assert/v2 v2.11.0 h1:2Q9r3ki8+JYXvGsDyBXwH3LcJ+WK5D0gc5E8vS6K3D0= +github.com/alecthomas/assert/v2 v2.11.0/go.mod h1:Bze95FyfUr7x34QZrjL+XP+0qgp/zg8yS+TtBj1WA3k= +github.com/alecthomas/repr v0.4.0 h1:GhI2A8MACjfegCPVq9f1FLvIBS+DrQ2KQBFZP1iFzXc= +github.com/alecthomas/repr v0.4.0/go.mod h1:Fr0507jx4eOXV7AlPV6AVZLYrLIuIeSOWtW57eE/O/4= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/cenkalti/backoff/v5 v5.0.3 h1:ZN+IMa753KfX5hd8vVaMixjnqRZ3y8CuJKRKj1xcsSM= @@ -47,6 +51,8 @@ github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.2 h1:8Tjv8EJ+pM1xP8mK6egEbD1OgnV github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.2/go.mod h1:pkJQ2tZHJ0aFOVEEot6oZmaVEZcRme73eIFmhiVuRWs= github.com/hashicorp/go-version v1.7.0 h1:5tqGy27NaOTB8yJKUZELlFAS/LTKJkrmONwQKeRZfjY= github.com/hashicorp/go-version v1.7.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM= +github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= diff --git a/otelcol/otelcoltest/go.mod b/otelcol/otelcoltest/go.mod index 257a4bf44e7..f9435dd6ac4 100644 --- a/otelcol/otelcoltest/go.mod +++ b/otelcol/otelcoltest/go.mod @@ -244,3 +244,5 @@ replace go.opentelemetry.io/collector/pdata/xpdata => ../../pdata/xpdata replace go.opentelemetry.io/collector/exporter/exporterhelper => ../../exporter/exporterhelper replace go.opentelemetry.io/collector/config/configoptional => ../../config/configoptional + +replace go.opentelemetry.io/collector/internal/maplist => ../../internal/maplist diff --git a/receiver/otlpreceiver/config_test.go b/receiver/otlpreceiver/config_test.go index 64dc7102d22..8a4613779dd 100644 --- a/receiver/otlpreceiver/config_test.go +++ b/receiver/otlpreceiver/config_test.go @@ -16,7 +16,6 @@ import ( "go.opentelemetry.io/collector/config/configgrpc" "go.opentelemetry.io/collector/config/confighttp" "go.opentelemetry.io/collector/config/confignet" - "go.opentelemetry.io/collector/config/configopaque" "go.opentelemetry.io/collector/config/configoptional" "go.opentelemetry.io/collector/config/configtls" "go.opentelemetry.io/collector/confmap" @@ -140,7 +139,6 @@ func TestUnmarshalConfig(t *testing.T) { AllowedOrigins: []string{"https://*.test.com", "https://test.com"}, MaxAge: 7200, }), - ResponseHeaders: map[string]configopaque.String{}, KeepAlivesEnabled: true, }, TracesURLPath: "/traces", @@ -171,7 +169,6 @@ func TestUnmarshalConfigUnix(t *testing.T) { HTTP: configoptional.Some(HTTPConfig{ ServerConfig: confighttp.ServerConfig{ Endpoint: "/tmp/http_otlp.sock", - ResponseHeaders: map[string]configopaque.String{}, KeepAlivesEnabled: true, }, TracesURLPath: defaultTracesURLPath, diff --git a/receiver/otlpreceiver/go.mod b/receiver/otlpreceiver/go.mod index 07b8742b803..90dc150f01b 100644 --- a/receiver/otlpreceiver/go.mod +++ b/receiver/otlpreceiver/go.mod @@ -13,7 +13,6 @@ require ( go.opentelemetry.io/collector/config/configgrpc v0.137.0 go.opentelemetry.io/collector/config/confighttp v0.137.0 go.opentelemetry.io/collector/config/confignet v1.43.0 - go.opentelemetry.io/collector/config/configopaque v1.43.0 go.opentelemetry.io/collector/config/configoptional v1.43.0 go.opentelemetry.io/collector/config/configtls v1.43.0 go.opentelemetry.io/collector/confmap v1.43.0 @@ -70,9 +69,11 @@ require ( go.opentelemetry.io/collector/client v1.43.0 // indirect go.opentelemetry.io/collector/config/configcompression v1.43.0 // indirect go.opentelemetry.io/collector/config/configmiddleware v1.43.0 // indirect + go.opentelemetry.io/collector/config/configopaque v1.43.0 // indirect go.opentelemetry.io/collector/extension/extensionauth v1.43.0 // indirect go.opentelemetry.io/collector/extension/extensionmiddleware v0.137.0 // indirect go.opentelemetry.io/collector/featuregate v1.43.0 // indirect + go.opentelemetry.io/collector/internal/maplist v0.137.0 // indirect go.opentelemetry.io/collector/pipeline v1.43.0 // indirect go.opentelemetry.io/contrib/bridges/otelzap v0.13.0 // indirect go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.63.0 // indirect @@ -166,3 +167,5 @@ replace go.opentelemetry.io/collector/extension/extensionmiddleware => ../../ext replace go.opentelemetry.io/collector/config/configmiddleware => ../../config/configmiddleware replace go.opentelemetry.io/collector/extension/extensionmiddleware/extensionmiddlewaretest => ../../extension/extensionmiddleware/extensionmiddlewaretest + +replace go.opentelemetry.io/collector/internal/maplist => ../../internal/maplist diff --git a/receiver/otlpreceiver/go.sum b/receiver/otlpreceiver/go.sum index 74a36e1c0a9..dfbdd9eb6bf 100644 --- a/receiver/otlpreceiver/go.sum +++ b/receiver/otlpreceiver/go.sum @@ -1,3 +1,7 @@ +github.com/alecthomas/assert/v2 v2.11.0 h1:2Q9r3ki8+JYXvGsDyBXwH3LcJ+WK5D0gc5E8vS6K3D0= +github.com/alecthomas/assert/v2 v2.11.0/go.mod h1:Bze95FyfUr7x34QZrjL+XP+0qgp/zg8yS+TtBj1WA3k= +github.com/alecthomas/repr v0.4.0 h1:GhI2A8MACjfegCPVq9f1FLvIBS+DrQ2KQBFZP1iFzXc= +github.com/alecthomas/repr v0.4.0/go.mod h1:Fr0507jx4eOXV7AlPV6AVZLYrLIuIeSOWtW57eE/O/4= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -35,6 +39,8 @@ github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/hashicorp/go-version v1.7.0 h1:5tqGy27NaOTB8yJKUZELlFAS/LTKJkrmONwQKeRZfjY= github.com/hashicorp/go-version v1.7.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM= +github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= diff --git a/service/go.mod b/service/go.mod index 0c6d7008fd7..01945c1813e 100644 --- a/service/go.mod +++ b/service/go.mod @@ -115,6 +115,7 @@ require ( go.opentelemetry.io/collector/config/configtls v1.43.0 // indirect go.opentelemetry.io/collector/extension/extensionauth v1.43.0 // indirect go.opentelemetry.io/collector/extension/extensionmiddleware v0.137.0 // indirect + go.opentelemetry.io/collector/internal/maplist v0.137.0 // indirect go.opentelemetry.io/contrib/bridges/otelzap v0.13.0 // indirect go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.63.0 // indirect go.opentelemetry.io/contrib/zpages v0.63.0 // indirect @@ -254,4 +255,6 @@ replace go.opentelemetry.io/collector/pdata/xpdata => ../pdata/xpdata replace go.opentelemetry.io/collector/exporter/exporterhelper => ../exporter/exporterhelper +replace go.opentelemetry.io/collector/internal/maplist => ../internal/maplist + replace go.opentelemetry.io/collector/config/configoptional => ../config/configoptional diff --git a/service/go.sum b/service/go.sum index 7c77b91906d..ff5cfb7e7ea 100644 --- a/service/go.sum +++ b/service/go.sum @@ -1,3 +1,7 @@ +github.com/alecthomas/assert/v2 v2.11.0 h1:2Q9r3ki8+JYXvGsDyBXwH3LcJ+WK5D0gc5E8vS6K3D0= +github.com/alecthomas/assert/v2 v2.11.0/go.mod h1:Bze95FyfUr7x34QZrjL+XP+0qgp/zg8yS+TtBj1WA3k= +github.com/alecthomas/repr v0.4.0 h1:GhI2A8MACjfegCPVq9f1FLvIBS+DrQ2KQBFZP1iFzXc= +github.com/alecthomas/repr v0.4.0/go.mod h1:Fr0507jx4eOXV7AlPV6AVZLYrLIuIeSOWtW57eE/O/4= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/cenkalti/backoff/v5 v5.0.3 h1:ZN+IMa753KfX5hd8vVaMixjnqRZ3y8CuJKRKj1xcsSM= @@ -51,6 +55,8 @@ github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.2 h1:8Tjv8EJ+pM1xP8mK6egEbD1OgnV github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.2/go.mod h1:pkJQ2tZHJ0aFOVEEot6oZmaVEZcRme73eIFmhiVuRWs= github.com/hashicorp/go-version v1.7.0 h1:5tqGy27NaOTB8yJKUZELlFAS/LTKJkrmONwQKeRZfjY= github.com/hashicorp/go-version v1.7.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM= +github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= diff --git a/service/hostcapabilities/go.mod b/service/hostcapabilities/go.mod index d64ae7fbc63..49d16cf9c59 100644 --- a/service/hostcapabilities/go.mod +++ b/service/hostcapabilities/go.mod @@ -104,3 +104,5 @@ replace go.opentelemetry.io/collector/exporter/exporterhelper => ../../exporter/ replace go.opentelemetry.io/collector/config/configoptional => ../../config/configoptional replace go.opentelemetry.io/collector/service/telemetry/telemetrytest => ../telemetry/telemetrytest + +replace go.opentelemetry.io/collector/internal/maplist => ../../internal/maplist diff --git a/service/telemetry/telemetrytest/go.mod b/service/telemetry/telemetrytest/go.mod index e90a0719a84..4778d2cb9c4 100644 --- a/service/telemetry/telemetrytest/go.mod +++ b/service/telemetry/telemetrytest/go.mod @@ -187,3 +187,5 @@ replace go.opentelemetry.io/collector/connector/connectortest => ../../../connec replace go.opentelemetry.io/collector/component/componenttest => ../../../component/componenttest replace go.opentelemetry.io/collector/component/componentstatus => ../../../component/componentstatus + +replace go.opentelemetry.io/collector/internal/maplist => ../../../internal/maplist diff --git a/versions.yaml b/versions.yaml index 56d1ee06da8..7e59c5169ef 100644 --- a/versions.yaml +++ b/versions.yaml @@ -34,6 +34,7 @@ module-sets: version: v0.137.0 modules: - go.opentelemetry.io/collector + - go.opentelemetry.io/collector/internal/maplist - go.opentelemetry.io/collector/internal/memorylimiter - go.opentelemetry.io/collector/internal/fanoutconsumer - go.opentelemetry.io/collector/internal/sharedcomponent