Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[configauth] Return type of NewDefaultAuthentication should not be pointer #12223

Closed
mx-psi opened this issue Jan 31, 2025 · 2 comments · Fixed by #12271
Closed

[configauth] Return type of NewDefaultAuthentication should not be pointer #12223

mx-psi opened this issue Jan 31, 2025 · 2 comments · Fixed by #12271
Assignees

Comments

@mx-psi
Copy link
Member

mx-psi commented Jan 31, 2025

NewDefaultAuthentication returns a pointer to a struct instead of a struct. This is unusual. I believe the reason for this is that the only place where we use this is the confighttp package, but other places may use this differently, so I think we should be consistent with the rest and use a 'bare' return type

From the 2025-01-27 Collector stability meeting.

@jade-guiton-dd jade-guiton-dd self-assigned this Feb 4, 2025
@jade-guiton-dd jade-guiton-dd moved this from Todo to In Progress in Collector: v1 Feb 4, 2025
@jade-guiton-dd
Copy link
Contributor

jade-guiton-dd commented Feb 4, 2025

Across Github, it looks like this function is only used in configgrpc.NewDefaultClientConfig (link) and configgrpc.NewDefaultServerConfig (link). I haven't found any use of the latter, and the former has one use in the Elastic OTel components repo. It looks like the gRPC receivers/exporters in Core instead define the default ClientConfig/ServerConfig manually, leaving the Auth *configauth.Authentication field nil.

This is actually good, because only the nil case is a no-op (link): the default Authentication created by this function looks for an authentication extension with a blank name (link), which will always fail and crash the Collector. This seems worse than useless, so I would recommend deprecating and deleting the NewDefaultAuthentication function entirely, and setting nil in the configgrpc functions, where "no authentication" is presumably the intended semantics.

@mx-psi
Copy link
Member Author

mx-psi commented Feb 4, 2025

@jade-guiton-dd Thanks for taking a look, I agree that this is not useful, so we can deprecate it. Feel free to file a PR !

@jade-guiton-dd jade-guiton-dd moved this from In Progress to Waiting for reviews in Collector: v1 Feb 5, 2025
github-merge-queue bot pushed a commit that referenced this issue Feb 5, 2025

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
#### Context

The `configauth.NewDefaultAuthentication` returns a zero-initialized
`Authentication` value
([link](https://github.com/open-telemetry/opentelemetry-collector/blob/477e4d3959932234e71f4e68c9d4e2290015a1df/config/configauth/configauth.go#L25)),
which is used in `configgrpc.NewDefaultClientConfig`
([link](https://github.com/open-telemetry/opentelemetry-collector/blob/477e4d3959932234e71f4e68c9d4e2290015a1df/config/configgrpc/configgrpc.go#L109))
and `configgrpc.NewDefaultServerConfig`
([link](https://github.com/open-telemetry/opentelemetry-collector/blob/477e4d3959932234e71f4e68c9d4e2290015a1df/config/configgrpc/configgrpc.go#L196)).
However, this default value is problematic, as it will cause the
Collector to crash on startup with the error `Error: cannot start
pipelines: failed to resolve authenticator "": authenticator not found`.

There is no way for the `Authentication` struct to represent "no
authentication" (which is presumably the intended default). The
`configgrpc` code uses a `nil` `*Authentication` pointer to represent
that case
([link](https://github.com/open-telemetry/opentelemetry-collector/blob/477e4d3959932234e71f4e68c9d4e2290015a1df/config/configgrpc/configgrpc.go#L310)).

Regarding the use of these APIs:
- Across Github, it looks like `configauth.NewDefaultAuthentication` is
not used outside of `configgrpc`.
- I haven't found any use of `configgrpc.NewDefaultServerConfig` on
Github, and `configgrpc.NewDefaultClientConfig` has [one use in the
Elastic OTel components
repo](https://github.com/elastic/opentelemetry-collector-components/blob/3cfc4ac3a58e5ac9823bf2ccc966e2f306cff5c9/processor/ratelimitprocessor/config.go#L164),
although I suspect the `Auth` field may get overriden anyway, so the
crash may never actually occur.
- It looks like the gRPC receivers/exporters in Core build their default
`ClientConfig`/`ServerConfig` manually instead of using those functions,
leaving the `Auth` field `nil`, which is why the crash does not occur
there either.

#### Description

This PR:
- Removes `configauth.NewDefaultAuthentication` since there doesn't seem
to be a useful "default" value for this struct. Because it doesn't seem
to be used outside this repo, I decided to skip the deprecation step.
- Replaces its use in
`configgrpc.NewDefaultClient/NewDefaultServerConfig` by `nil`. I think
this would be considered a bug fix rather than a breaking change, since
the current value causes an error if not overriden.

#### Link to tracking issue
Resolves #12223 (the original issue was about making the function
signature more consistent, but removing the function entirely makes it
no longer an issue I would say)

#### Testing
I experimentally confirmed that the above crash occurs with default
config if we change the OTLP receiver's `createDefaultConfig` to use
`configgrpc.NewDefaultServerConfig`, and that the above fix to said
function prevents the crash.
@github-project-automation github-project-automation bot moved this from Waiting for reviews to Done in Collector: v1 Feb 5, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
Archived in project
Development

Successfully merging a pull request may close this issue.

2 participants