-
Notifications
You must be signed in to change notification settings - Fork 4.8k
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
Stable Envoy API versions #6271
Comments
One concern that springs to mind is the issues we've had with moving |
@snowp package namespace changes would imply service endpoint changes. The management server would need to support both during a transition period. |
Not sure if this is relevant for this particular issue but CockroachDB recently switched away from SemVer - Why we're switching to calendar versioning. Along the same lines the SemVer specification is getting an upgrade - What’s next for SemVer. |
I'm not thrilled about this since I do think it will increase deprecation overhead/velocity quite a bit. I think I'm not fully understanding the problem that gRPC is facing. Can you potentially describe in more detail? |
@markdroth can you provide a summary for your team? |
API stability is an extremely important factor for anyone outside Envoy looking to adopt the xDS protocol. gRPC needs the ability to easily express to its users what version(s) of the protocol it works with. At this point, we cannot say "gRPC works with xDS v2", because features present in the initial release of v2 may have been removed and replaced -- or may be in the future -- in accordance with the breaking change policy. This means if gRPC uses the old fields, it won't work with new servers and vice-versa. In addition to those concerns, gRPC-Go has twice in the past two months (#6118, #5432) been broken by wire-compatible changes to the proto format that break the go generated API. This is not only disruptive to our development, but it also affects our users: they will need to vendor these protos at the right version. The problem with this is, if they are developing a project that has other dependencies on the xDS API, they may not be able to find a single version that satisfies all of their dependencies (some may require newer versions and some may require older versions). Multiple copies of the same proto definitions are not permitted, and will result in init-time panics. |
re: the Go issues, I think that is more straightforward. We can just not do the things that break Go such as add a oneof after the fact (and anything else). The other concern is much trickier. I understand it, but adhering to it will greatly reduce our velocity. Can we discuss this on the next community call and brainstorm possible outcomes? |
@mattklein123 In order to maintain backward compatibility for the Go generated API, the other condition also needs to be met. Removing a field will break the generated code API (in addition to breaking wire compatibility). I have no desire to reduce your velocity. New features can be added with a clear "experimental" tag to be exempted from these requirements. gRPC and other users requiring a stable API would not use those features until they are finalized. Discussing this further at the next community meeting sounds fine. |
I agree that discussing this in the community meeting would be the most
efficient way to move forward. Doug, can you and interested gRPC folks join
https://calendar.google.com/event?action=TEMPLATE&tmeid=NzI4c2E5YWJjbDRnMmp1amdsOW5uNTJsMjZfMjAxOTAzMjZUMTYwMDAwWiA4YnNmYzhtMmRmOG1hZDJqdGdmNmY4b25qNEBn&tmsrc=8bsfc8m2df8mad2jtgf6f8onj4%40group.calendar.google.com&scp=ALL
on
3/26?
…On Wed, Mar 13, 2019 at 5:17 PM Doug Fawley ***@***.***> wrote:
@mattklein123 <https://github.com/mattklein123> In order to maintain
backward compatibility for the Go generated API, the other condition also
needs to be met. Removing a field will break the generated code API (in
addition to breaking wire compatibility).
I have no desire to reduce your velocity. New features can be added with a
clear "experimental" tag to be exempted from these requirements. gRPC and
other users requiring a stable API would not use those features until they
are finalized.
Discussing this further at the next community meeting sounds fine.
—
You are receiving this because you were assigned.
Reply to this email directly, view it on GitHub
<#6271 (comment)>,
or mute the thread
<https://github.com/notifications/unsubscribe-auth/AKaLvxhDKFmbTIcMkTUR0nSoXuZJsUQ1ks5vWWrngaJpZM4brnnv>
.
|
@htuch, yes, I plan to attend, and I have invited a few others. Thanks for sharing the link. |
Resharing Doug's doc which was presented at the community call via my chromium account (so folks can read and comment) |
This issue has been automatically marked as stale because it has not had activity in the last 30 days. It will be closed in the next 7 days unless it is tagged "help wanted" or other activity occurs. Thank you for your contributions. |
We now have a design document to share: |
This issue has been automatically marked as stale because it has not had activity in the last 30 days. It will be closed in the next 7 days unless it is tagged "help wanted" or other activity occurs. Thank you for your contributions. |
It looks like we have general buy-in on the proposal, so the following calendar is what I think I can commit to: Before end of Q2:
Before end of Q3:
At the end of Q3, we will start the annual release calendar for new API major versions, and the APIs that were in Field will continue to be deprecated via annotation according to https://github.com/envoyproxy/envoy/blob/master//CONTRIBUTING.md#breaking-change-policy. However, we will not remove any further fields from the @mattklein123 @alyssawilk @dfawley @envoyproxy/api-shepherds @envoyproxy/maintainers (and anyone else who cares about API stability!) does this sound like a reasonable plan-of-record? |
@htuch +1 looks great to me. Thanks for driving. |
Functionally this removes the script which filed bugs to remove old config (per plan of record in #6271) adds a script which files bugs to remove old code (cleanup of runtime guarded features) updates our release process In practice, this just hot swaps what our deprecation script does and updates the docs. Risk Level: n/a (tooling + comment) Testing: manual testing. Will do one more manual test with actual bug filing just before submitting. Docs Changes: updated Release Notes: n/a Fixes #6472 Signed-off-by: Alyssa Wilk <alyssar@chromium.org>
See #8085 for the v3alpha and v3 release plans. The burndown is at https://github.com/envoyproxy/envoy/issues?q=is%3Aopen+is%3Aissue+label%3A%22v3+API%22+milestone%3A1.12.0 |
* [#not-implemented-warn:] was barely used and its purposes are better served by [#not-implemented-hide:]. * [#proto-status:] was there for an earlier style of versioning, where APIs were "frozen" or "draft", etc. Now we have semantic versioning and a regular API clock as per envoyproxy#6271. Part of envoyproxy#8371. Risk level: Low (docs only). Testing: Docs rebuild. Signed-off-by: Harvey Tuch <htuch@google.com>
* [#not-implemented-warn:] was barely used and its purposes are better served by [#not-implemented-hide:]. * [#proto-status:] was there for an earlier style of versioning, where APIs were "frozen" or "draft", etc. Now we have semantic versioning and a regular API clock as per #6271. Part of #8371. Risk level: Low (docs only). Testing: Docs rebuild. Signed-off-by: Harvey Tuch <htuch@google.com>
* [#not-implemented-warn:] was barely used and its purposes are better served by [#not-implemented-hide:]. * [#proto-status:] was there for an earlier style of versioning, where APIs were "frozen" or "draft", etc. Now we have semantic versioning and a regular API clock as per envoyproxy#6271. Part of envoyproxy#8371. Risk level: Low (docs only). Testing: Docs rebuild. Signed-off-by: Harvey Tuch <htuch@google.com>
* [#not-implemented-warn:] was barely used and its purposes are better served by [#not-implemented-hide:]. * [#proto-status:] was there for an earlier style of versioning, where APIs were "frozen" or "draft", etc. Now we have semantic versioning and a regular API clock as per envoyproxy#6271. Part of envoyproxy#8371. Risk level: Low (docs only). Testing: Docs rebuild. Signed-off-by: Harvey Tuch <htuch@google.com>
I'm going to consider this issue resolved via the introduction of v3, additional improvements, e.g. minor versioning, can be tracked via independent issues. |
We've had feedback from folks (in particular gRPC-LB) that the current Breaking Change Policy is insufficient for handling long-term compatibility at the wire and generated proto level.
Specifically:
oneof
and other wire compatible changes breaks Go code generation for protobuf. There are no safe mutations to existing proto fields.The proposal here is that we switch to semantic versioning by making use of package namespaces. Any API that is not marked as
alpha
, e.g.v2alpha
, becomes immutable modulo field addition. Deprecation would happen by moving tov3
,v4
, etc.What do folks think? CC @envoyproxy/maintainers @alyssawilk
The text was updated successfully, but these errors were encountered: