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

Initial committer guidelines and requirements for merging #10780

Merged
merged 24 commits into from
Sep 3, 2024

Conversation

emkornfield
Copy link
Contributor

Based on mailing list discussion add focused language to contributing.md on committing PRs.

@github-actions github-actions bot added the docs label Jul 25, 2024
@emkornfield emkornfield marked this pull request as draft July 25, 2024 06:32
There are several exceptions to this process:

* Large changes or functional changes to a specification must go through the an [Iceberg improvement proposal](#apache-iceberg-improvement-proposals) before any code can be merged.
* Changes to files under the `format` directory and `open-api/rest-catalog*` are considered specification changes. Unless already covered under an Iceberg improvement proposal, specification changes require their own vote (e.g. bug fixes or specification clarifications). The vote follows the ASF [code modification][apache-vote] model with three positive PMC votes required and no lazy consensus modifier. Grammar, spelling and minor formatting fixes are exempted from this rule.
Copy link
Contributor

Choose a reason for hiding this comment

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

We also have aws/src/main/resources/s3-signer-open-api.yaml; would changes to that file fall under the "specification changes" category?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

I don't know. Seems AWS specific based on the directory structure? @jackye1995 ?

Copy link
Contributor

Choose a reason for hiding this comment

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

yes, but that is not contributed by AWS. It was added to support remote signing feature in Tabular. I think it is more like a vendor integration feature, I would not consider that a part of the official REST spec. Thoughts? @nastra @danielcweeks

Copy link
Contributor

@Fokko Fokko left a comment

Choose a reason for hiding this comment

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

This makes sense to me, thanks for this writeup @emkornfield

emkornfield and others added 2 commits July 25, 2024 00:58
Co-authored-by: Fokko Driesprong <fokko@apache.org>
Co-authored-by: Fokko Driesprong <fokko@apache.org>
Co-authored-by: Eduard Tudenhoefner <etudenhoefner@gmail.com>
@jbonofre
Copy link
Member

It looks good to me. Thanks !

By the way, it would be also possible to update .asf.yml for "force" at least one review. I proposed to use labels (using modules/paths), assign reviewers per labels, force at least one approved review per PR.

We could update .asf.yml this way:

  ...
  protected_branches:
    main:
      required_linear_history: true
      required_status_checks:
        strict: true
      required_pull_request_reviews:
        required_approving_review_count: 1
        dismiss_stale_reviews: true
      required_conversation_resolution: true
  ...

Don't get me wrong: I don't propose to update .asf.yml in this PR. It's just a proposal I can bring to the team if it makes sense to you.

@emkornfield
Copy link
Contributor Author

It looks good to me. Thanks !

By the way, it would be also possible to update .asf.yml for "force" at least one review. I proposed to use labels (using modules/paths), assign reviewers per labels, force at least one approved review per PR.

We could update .asf.yml this way:

  ...
  protected_branches:
    main:
      required_linear_history: true
      required_status_checks:
        strict: true
      required_pull_request_reviews:
        required_approving_review_count: 1
        dismiss_stale_reviews: true
      required_conversation_resolution: true
  ...

Don't get me wrong: I don't propose to update .asf.yml in this PR. It's just a proposal I can bring to the team if it makes sense to you.

I'm OK either way. A mechanism doesn't hurt here, but I think in terms of merging I think it is sufficient to operate on a model of trust (I think merging accidentally is pretty hard to do and pretty easy to reverse).

@emkornfield emkornfield changed the title DRAFT: Strawman proposal for PR merging DOC: Strawman proposal for PR merging Jul 25, 2024
@emkornfield emkornfield marked this pull request as ready for review July 25, 2024 23:09
Most pull requests can be merged once a committer is satisfied with the code in the PR. For larger changes or additions to public
APIs committers will wait at least 24 hours before merging to ensure there is no additional feedback from members of the community. As in
all ASF governed projects committers are expected to act in the best interest of the project. If a committer feels there might be a conflict
of interest with a pull request they review, they are encouraged to ask for another committer to look at the pull request.
Copy link
Contributor

Choose a reason for hiding this comment

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

Could we define what "a conflict of interest" means, or at least give any examples?

Copy link
Contributor

@jackye1995 jackye1995 Jul 25, 2024

Choose a reason for hiding this comment

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

Does this mean cases like a committer working mainly on pyiceberg go to merge something directly in iceberg-spark? Just to given an arbitrary example.

Copy link
Contributor Author

@emkornfield emkornfield Jul 26, 2024

Choose a reason for hiding this comment

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

I left this intentionally vague. In general committers are expected to use their best judgement. If there are explicit examples that have happened in the community where it was believe something should not been committed we can include those. Otherwise, I think this is place that can be refined if the PMC thinks some changes are being merged prematurely.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

This goes to the ethos of community over code and trust in committers.

@stevenzwu
Copy link
Contributor

By the way, it would be also possible to update .asf.yml for "force" at least one review. I proposed to use labels (using modules/paths), assign reviewers per labels, force at least one approved review per PR.

I thought that is already the case. Here is the screenshot from PR #10777 that I submitted. Without any approval, merge button is disabled

image

There are several exceptions to this process:

* Large changes and functional changes to a specification must go through the [Iceberg improvement proposal](#apache-iceberg-improvement-proposals) before any code can be merged.
* Changes to files under the `format` directory and `open-api/rest-catalog*` are considered specification changes. Unless already covered under an Iceberg improvement proposal, specification changes require their own vote (e.g. bug fixes or specification clarifications). The vote follows the ASF [code modification](https://www.apache.org/foundation/voting.html#votes-on-code-modification) model and no lazy consensus modifier. Grammar, spelling and minor formatting fixes are exempted from this rule.
Copy link
Contributor

Choose a reason for hiding this comment

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

We may want to allow for draft specifications, so we can publish changes as we develop the reference implementation.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Yes, I agree, I think we probably need more guidance under the Improvement proposals section and this point should be discussed as part of the refinement there?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

I guess it doesn't hurt to add something now, I added some language on what I think is reasonable.

Copy link
Contributor

Choose a reason for hiding this comment

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

How does draft specification work? Could you describe more details?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

i put down what I was thinking. Not sure if matches with what @rdblue means?

There are several exceptions to this process:

* Large changes and functional changes to a specification must go through the [Iceberg improvement proposal](#apache-iceberg-improvement-proposals) before any code can be merged.
* Changes to files under the `format` directory and `open-api/rest-catalog*` are considered specification changes. Unless already covered under an Iceberg improvement proposal, specification changes require their own vote (e.g. bug fixes or specification clarifications). The vote follows the ASF [code modification](https://www.apache.org/foundation/voting.html#votes-on-code-modification) model and no lazy consensus modifier. Grammar, spelling and minor formatting fixes are exempted from this rule.
Copy link
Collaborator

Choose a reason for hiding this comment

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

Confirming my understanding here:

Functional spec changes go through improvement-process , which in the end require a code modification vote (3 +1 votes without lazy consensus modifier)

Any spec clarification still requires a code modification vote (3 +1 votes without lazy consensus modifier). A current example we are working is #10793.

Grammar, spelling, and minor formatting still go through normal code review process.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

This is my understanding (I was trying to codify rules that have come across the mailing list recently).

* clarify committer should not be author.  Remove content in favor of links. 
* Separate and define large changes should be discussed on the mailing list.

Requesting changes on a PR indicates a reviewer believes the PR has merit but still needs issues addressed before merging. If a reviewer believes the change should not be merged at all and there is nothing the author could do to address the reviewers concerns, the reviewer should explicitly state this on the PR. In the rare event that a PR author and reviewers cannot come to a consensus on a PR, the disagreement should be raised to the developer mailing list for further discussion. In this context, a reviewer is anyone leaving comments on the PR including contributors, committers and PMC members.

There are several exceptions to a single committer being able to merge a PR:
Copy link
Contributor

Choose a reason for hiding this comment

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

Is there a way to reframe this differently? It sounds like the below and single committer merging a PR are not mutually exclusive, because after the below happens, it is quite possible that a single committer reviews and merges, right?

Copy link
Contributor

Choose a reason for hiding this comment

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

Something about seeking feedback from the community?

Copy link
Contributor

@wmoustafa wmoustafa Aug 20, 2024

Choose a reason for hiding this comment

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

My intention was more on the structure. Basically, I think the intended message here is there are changes that can be merged through the regular PR process solely, and other changes require following more formal process, like dev list discussion, IIP, vote etc. I think something like this could make it clearer:

There are two types of changes: those that can be merged through the regular PR process, and those that require a more formal procedure in addition to the PR process, such as a developer mailing list discussion, an Iceberg Improvement Proposal (IIP), or a vote.
Then we can describe (1) the regular process and (2) the more formal process required before the regular process.

It is essentially the same content but with a clearer message about the relationship between the processes (e.g., the latter is a pre-requisite of the former in some cases).

Copy link
Contributor Author

@emkornfield emkornfield Aug 26, 2024

Choose a reason for hiding this comment

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

I added a parenthetical "(exceptions that require additional input from the community are detailed below)" in the first paragraph. which I think address this concern. @wmoustafa please let me know if that captures the intent of your suggestion.

Copy link
Contributor

Choose a reason for hiding this comment

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

Thanks @emkornfield. LGTM.

Copy link
Contributor

@wmoustafa wmoustafa left a comment

Choose a reason for hiding this comment

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

Thanks @emkornfield for driving this discussion and PR.


Requesting changes on a PR indicates a reviewer believes the PR has merit but still needs issues addressed before merging. If a reviewer believes the change should not be merged at all and there is nothing the author could do to address the reviewers concerns, the reviewer should explicitly state this on the PR. In the rare event that a PR author and reviewers cannot come to a consensus on a PR, the disagreement should be raised to the developer mailing list for further discussion. In this context, a reviewer is anyone leaving comments on the PR including contributors, committers and PMC members.

There are several exceptions to a single committer being able to merge a PR:
Copy link
Contributor

Choose a reason for hiding this comment

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

Thanks @emkornfield. LGTM.

@emkornfield emkornfield changed the title DOC: Strawman proposal for PR merging Initial committer guidelines and requirements for merging Aug 28, 2024

There are several exceptions to a single committer being able to merge a PR:

* Behavioral and functional changes to a specification must go through the [Iceberg improvement proposal](#apache-iceberg-improvement-proposals) before any code can be merged.
Copy link
Contributor

Choose a reason for hiding this comment

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

Do we really require all changes to the spec to go through an improvement proposal? That doesn't seem right.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

I think "Behavioral and function changes" should be going through a more formal process. Not sure exactly what the standards are here?

@aokolnychyi aokolnychyi merged commit a446164 into apache:main Sep 3, 2024
2 checks passed
@aokolnychyi
Copy link
Contributor

Thanks @emkornfield and everyone who reviewed! Merged per the dev list vote.

jenbaldwin pushed a commit to Teradata/iceberg that referenced this pull request Sep 17, 2024
* main: (208 commits)
  Docs: Fix Flink 1.20 support versions (apache#11065)
  Flink: Fix compile warning (apache#11072)
  Docs: Initial committer guidelines and requirements for merging (apache#10780)
  Core: Refactor ZOrderByteUtils (apache#10624)
  API: implement types timestamp_ns and timestamptz_ns (apache#9008)
  Build: Bump com.google.errorprone:error_prone_annotations (apache#11055)
  Build: Bump mkdocs-material from 9.5.33 to 9.5.34 (apache#11062)
  Flink: Backport PR apache#10526 to v1.18 and v1.20 (apache#11018)
  Kafka Connect: Disable publish tasks in runtime project (apache#11032)
  Flink: add unit tests for range distribution on bucket partition column (apache#11033)
  Spark 3.5: Use FileGenerationUtil in PlanningBenchmark (apache#11027)
  Core: Add benchmark for appending files (apache#11029)
  Build: Ignore benchmark output folders across all modules (apache#11030)
  Spec: Add RemovePartitionSpecsUpdate REST update type (apache#10846)
  Docs: bump latest version to 1.6.1 (apache#11036)
  OpenAPI, Build: Apply spotless to testFixtures source code (apache#11024)
  Core: Generate realistic bounds in benchmarks (apache#11022)
  Add REST Compatibility Kit (apache#10908)
  Flink: backport PR apache#10832 of inferring parallelism in FLIP-27 source (apache#11009)
  Docs: Add Druid docs url to sidebar (apache#10997)
  ...
zachdisc pushed a commit to zachdisc/iceberg that referenced this pull request Dec 23, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.