-
Notifications
You must be signed in to change notification settings - Fork 1.5k
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
[pdata] Find replacement for now deprecated gogo/protobuf #7095
Comments
Yes, Collector uses Gogoproto instead of Google's implementation for performance reasons. Here are a few replacement options that I can think of:
Unfortunately I do not see great options here, all have some downsides. We will need to decide how much effort we are willing to invest into this. There is probably also an option to find some other alternate Protobuf library but I have not explored this. |
As far as replacements, there are other projects that seem to provide similar capabilities to what Gogo had: At minimum, they seem to be maintained at the moment, and hopefully are more narrow in scope than gogo. |
What is Jaeger using nowadays? Any experience you can share with us? |
Jaeger hasn't changed from gogo/proto |
I've not tried using It's probably worth another go at it now that it's been over a year. |
@codeboten I saw that PR, but can you share some findings / conclusions? It was closed without any explanation, so not clear if you ran into a dead end with something. |
The scope of the work then was to add support in the collector for From what I recall the performance numbers were not encouraging at first. Additionally I ran into issues w/ lack of support for |
**Description:** Reorganize `VERSIONING.md`, specify compatibility guarantees that have already been discussed and answer questions on #8002. Three new guarantees in the document had already been discussed elsewhere: - String representation: #7625 (comment) - Go version compatibility: Mentioned [on README.md](https://github.com/open-telemetry/opentelemetry-collector?tab=readme-ov-file#compatibility) - Dependency updates: Discussed in private, most recently in relation to whether #7095 should block `pdata`'s 1.0 (consensus seems to be that it should not). Regarding the questions mentioned on #8002: > Does adding new validation rules mean a breaking change? Generally, yes except when the configuration was already invalid (i.e. the Collector did not work properly with it). > Should we offer a "NewDefault...." for each config and say that the behavior of the config is stable only if initialized with NewDefault? I did not add anything for this one. I think we should discuss it, but: - I don't think there is a sensible output for `NewDefault...` for all configurations (e.g. for `confignet.TCPAddr`, what would the default be?) - It seems to me that we should handle configuration validity through `Validate`, and not through `NewDefault...`. `NewDefault` may help but ultimately we need to verify through `Validate`. > Is adding new fields means breaking change? Let's assume someone "squash" the message into another message, then adding a field with same mapstruct value will be a breaking change, what do we do with that? What are the rules we follow. This was already in this document, where we had decided that adding new fields was okay. I think it would be too stringent to bar us from adding new fields. **Link to tracking Issue:** Fixes #8002 --------- Co-authored-by: Yang Song <[email protected]>
This may be time to revisit this issue. I was dealing with grpc upgrade to v1.66.0 in Jaeger where gRPC introduced |
https://go.dev/blog/protobuf-opaque looks very promising as a path towards removing gogo/protobuf |
Yes, let's see if performance is on par. Also, yay for lazy decoding. |
I don't know the full background of using gogo/protobuf, I suspect it was similar to Jaeger's use of gogoproto for serialization efficiency (in particular, the ability to embed structs by value, as in
[]KeyValue
instead of[]*KeyValue
, which significantly reduces memory allocations).Well, the bad news, which was long coming, is that GoGo is officially deprecated since Oct'22. Continue to depend on it going forward presents security and compatibility risks.
This ticket is to kick off a discussion for a viable path forward, since I don't have a solution in mind right now.
Some past related tickets:
The text was updated successfully, but these errors were encountered: