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

P5: Require a gRFC for large scale changes to gRPC core #233

Closed
wants to merge 7 commits into from

Conversation

ctiller
Copy link
Member

@ctiller ctiller commented Apr 29, 2021

No description provided.

Copy link
Contributor

@chwarr chwarr left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Noticed a few typos.

P5-core-large-scale-changes.md Outdated Show resolved Hide resolved
P5-core-large-scale-changes.md Outdated Show resolved Hide resolved
ctiller and others added 2 commits April 30, 2021 08:20
Co-authored-by: Christopher Warrington <chwarr@microsoft.com>
Co-authored-by: Christopher Warrington <chwarr@microsoft.com>
@ctiller
Copy link
Member Author

ctiller commented Apr 30, 2021

Noticed a few typos.

Thanks for the edits!

@ctiller
Copy link
Member Author

ctiller commented May 6, 2021

@markdroth per our conversation I've modified this to include a lighter weight update process.

@ctiller ctiller requested a review from a11r May 6, 2021 18:16
Copy link
Member

@markdroth markdroth left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry for the delay in reviewing! Please let me know what you think.

P5-core-large-scale-changes.md Outdated Show resolved Hide resolved
P5-core-large-scale-changes.md Outdated Show resolved Hide resolved

Such changes include:
* Changes to extensibility points, or the types used by extensibility points.
* Changes that require downstream consumers of gRPC Core to modify their code.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Isn't this one already covered by P3? If not, can you give an example of what would be included in this?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think I was thinking about internal extensibility... I'll clean this one up.

* Changes that require downstream consumers of gRPC Core to modify their code.
* Changes with a significant performance impact.
* Changes to vocabulary types - types that are used broadly within the library.
* Changes that constrain future development.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you give an example of this?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One that's happened before: L6 introduced the restriction that a C++11 compiler was required to compile Core, L59 required a standard library be dynamically linkable. Neither formally required a gRFC (no API changes), but we did so anyway because it felt right - this tries to formalize that.

New changes that might fall into that: taking a large dependency, refactoring in a way that prevents a known use case... things that would require a large scale change to undo.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Changed text.

A large scale change is one that has a wide-ranging impact on the implementation of gRPC Core.

Such changes include:
* Changes to extensibility points, or the types used by extensibility points.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this bullet in particular needs to be more nuanced. I do absolutely agree that a gRFC is appropriate for large structural changes to these kinds of APIs, but I think we also have a lot of changes to these APIs that are smaller in scope, where requiring a gRFC doesn't seem like a positive cost/benefit trade-off.

In particular, the resolver and LB policy APIs have been seeing a fair amount of small changes over time, some as part of the xDS work and others just as we evolve the client channel architecture, which we've currently been free to do since they are not yet public APIs. It's been very convenient to make these kinds of changes happen slowly over time, and I think that would be a much heavier-weight approach if every small change required a gRFC.

To make this more concerete, here are some examples of actual changes we've made to these APIs over the years, grouped based on whether or not I think the change should require a gRFC moving forward:

First, the changes that I think should require a gRFC:

Here are a few that I think are borderline; the scope or impact of the changes probably justifies a gRFC, but the fact that there don't happen to be any external LB policy implementations today mean that the changes didn't affect anyone:

And here are the ones that I think are small enough that they should not require a gRFC:

(I think there are more in that last category, but I didn't take the time to go back further into the history.)

Given the above, I propose something like the following for these extension points:

  • If the change is a major structural change or fundamental API redesign, it requires a gRFC.
  • If the change affects almost all implementations of an API that is used externally, it requires a gRFC.
  • If the change adds, removes, or modifies a significant part of the API surface (i.e., more than just an individual parameter), it requires a gRFC.
  • Any smaller change not in the above categories does not require a gRFC.

WDYT?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not opposed, but wanted to throw out an alternative:

This gRFC includes a light-weight update procedure for prior gRFC's that fall into it's domain.
Suppose we retroactively document the interfaces we're worried about here and publish them as gRFC's and then going forward we use the update process (and tune the timing to something that makes sense).

* Changes with a significant performance impact.
* Changes to vocabulary types - types that are used broadly within the library.
* Changes that constrain future development.
* Changes that modify system architecture.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same question here, an example would help.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Added some text.

* Changes that constrain future development.
* Changes that modify system architecture.

Since implementation experience can affect how a large scale change may proceed, it's additionally proposed that LSC gRFC's may be updated by later PR's against the approved change.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It might be a good idea to split this part into a separate P-series gRFC. In practice, we've actually been just sending PRs to update existing gRFCs when we need to, without any real review period at all. If we want to formalize this, then this process should apply to more than just C-core changes.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah agree.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I was trying to not re-trigger the review period :)

@ctiller
Copy link
Member Author

ctiller commented Jun 15, 2021

What are next steps here?

@ctiller
Copy link
Member Author

ctiller commented Jul 14, 2021

@a11r this has now been idle for 2 months - what are the next steps here?

@ctiller ctiller closed this Aug 17, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants