[ 
https://issues.apache.org/jira/browse/IGNITE-25489?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Aleksandr Chesnokov updated IGNITE-25489:
-----------------------------------------
    Description: 
To maintain RU compatibility, we have to review new PRs carefully and control 
wire changes.

Reviewers should see wire format changes in PRs to {{master}} before merge. For 
now, we have only a check that assigns the compatibility label if we have any 
change in a Java class that contains the Order annotation. The problem is that 
such a check is noisy and not accurate. For instance, it also triggers for new 
comments or code style changes, and the check does not trigger when a messageId 
changes in CoreMessagesProvider.

 

Let's generate JSON representations of messages with RU-related info: the 
fields, their types and order, enum values and message IDs that reviewers need 
to compare. Generate the same representations for IDTOs and message IDs. CI 
will generate the representations for the PR and master and will publish the 
diff of the JSON files in the GitHub Job Summary to signal to a reviewer that 
they should take a second look at the changes from an RU perspective.
h3. What is in place
 * IGNITE-29103 generates descriptions of messages and enums. [PR 
#13675|https://github.com/apache/ignite/pull/13675]
 * IGNITE-29143 tracks the JSON in Git and checks that it is up to date. [PR 
#13693|https://github.com/apache/ignite/pull/13693]
 * IGNITE-29146 adds IDTO descriptions. [PR 
#13730|https://github.com/apache/ignite/pull/13730]
 * IGNITE-29144 records the mapping from message IDs to classes in 
{{{}ids.json{}}}. [PR #13763|https://github.com/apache/ignite/pull/13763]

h3. Deliver in this order
 # *IGNITE-29261 generates and compares JSON in CI.* Remove the generated files 
from Git. CI compares the target branch snapshot with GitHub's test merge of 
the PR. It saves the full diff as an artifact. The comparison works on target 
branches that have the required generators. [PR 
#13802|https://github.com/apache/ignite/pull/13802]
 # *IGNITE-29145 reports the result on the PR.* After IGNITE-29261 merges, a 
trusted {{workflow_run}} workflow reads the comparison and completeness 
results. It updates the bot comment and the label for the current PR head.

h3. Done when

On a PR to {{{}master{}}}, including a fork PR, CI shows the diff in Job 
Summary. The {{check-wire}} job warns when the format changes. A build or 
comparison error fails the check. When the comparison and JSON completeness 
check pass and there is a diff, the bot adds the {{{}compatibility label{}}}. 
It posts or updates one comment linking to Job Summary.

Reviewers use the diff to decide what needs a closer look. They still need 
compatibility tests and manual review, especially for changes to hand-written 
serialization.
h3. Later work
 * IGNITE-29289 tests whether a hint can reach committers before CI approval on 
a fork PR.
 * IGNITE-29230 explores rules for explaining compatibility changes from 
generated descriptions.
 * IGNITE-29161 evaluates whether a code hash can help reviewers spot changes 
to serialization code.

[Ignite dev-list 
discussion|https://lists.apache.org/thread.html/hq3d8opxscww09pobvqfvwgc1d0v9cls]

  was:
To maintain RU compatibility we have to review new PRs carefully and control 
wire changes.

Reviewers should see wire format changes in PRs to {{master}} before merge. For 
now we have only check that assigns label compatibility if we have any change 
in java class that contains Order annotation. The problem is that such check is 
noisy and not accurate. For instance, it also triggers for new comments or 
codestyle changes and the check does not trigger on changing messageId in 
CoreMessagesProvider

 

Let's generate JSON representation of messages with RU-related info: the 
fields, their types and order, enum values and message IDs that reviewers need 
to compare. Same representations for idto and message ids. CI will generate the 
representations for PR and master and will publish the diff of json files in 
GitHub Job Summary to signal a reviewer to look the changes twice from point of 
RU.
h3. What is in place
 * IGNITE-29103 generates descriptions of messages and enums. [PR 
#13675|https://github.com/apache/ignite/pull/13675]
 * IGNITE-29143 tracks the JSON in Git and checks that it is up to date. [PR 
#13693|https://github.com/apache/ignite/pull/13693]
 * IGNITE-29146 adds IDTO descriptions. [PR 
#13730|https://github.com/apache/ignite/pull/13730]
 * IGNITE-29144 records the mapping from message IDs to classes in 
{{{}ids.json{}}}. [PR #13763|https://github.com/apache/ignite/pull/13763]

h3. Deliver in this order
 # *IGNITE-29261 generates and compares JSON in CI.* Remove the generated files 
from Git. CI compares the target branch snapshot with GitHub's test merge of 
the PR. It saves the full diff as an artifact. The comparison works on target 
branches that have the required generators. [PR 
#13802|https://github.com/apache/ignite/pull/13802]
 # *IGNITE-29145 reports the result on the PR.* After IGNITE-29261 merges, a 
trusted {{workflow_run}} workflow reads the comparison and completeness 
results. It updates the bot comment and the label for the current PR head.

h3. Done when

On a PR to {{{}master{}}}, including a fork PR, CI shows the diff in Job 
Summary. The {{check-wire}} job warns when the format changes. A build or 
comparison error fails the check. When the comparison and JSON completeness 
check pass and there is a diff, the bot adds {{{}compatibility label{}}}. It 
posts or updates one comment linking to Job Summary.

Reviewers use the diff to decide what needs a closer look. They still need 
compatibility tests and manual review, especially for changes to hand-written 
serialization.
h3. Later work
 * IGNITE-29289 tests whether a hint can reach committers before CI approval on 
a fork PR.
 * IGNITE-29230 explores rules for explaining compatibility changes from 
generated descriptions.
 * IGNITE-29161 evaluates whether a code hash can help reviewers spot changes 
to serialization code.

[Ignite dev-list 
discussion|https://lists.apache.org/thread.html/hq3d8opxscww09pobvqfvwgc1d0v9cls]


> [Umbrella] Track wire format changes for rolling upgrade compatibility
> ----------------------------------------------------------------------
>
>                 Key: IGNITE-25489
>                 URL: https://issues.apache.org/jira/browse/IGNITE-25489
>             Project: Ignite
>          Issue Type: Improvement
>            Reporter: Maksim Timonin
>            Assignee: Aleksandr Chesnokov
>            Priority: Major
>              Labels: IEP-132, ise
>          Time Spent: 1h 20m
>  Remaining Estimate: 0h
>
> To maintain RU compatibility, we have to review new PRs carefully and control 
> wire changes.
> Reviewers should see wire format changes in PRs to {{master}} before merge. 
> For now, we have only a check that assigns the compatibility label if we have 
> any change in a Java class that contains the Order annotation. The problem is 
> that such a check is noisy and not accurate. For instance, it also triggers 
> for new comments or code style changes, and the check does not trigger when a 
> messageId changes in CoreMessagesProvider.
>  
> Let's generate JSON representations of messages with RU-related info: the 
> fields, their types and order, enum values and message IDs that reviewers 
> need to compare. Generate the same representations for IDTOs and message IDs. 
> CI will generate the representations for the PR and master and will publish 
> the diff of the JSON files in the GitHub Job Summary to signal to a reviewer 
> that they should take a second look at the changes from an RU perspective.
> h3. What is in place
>  * IGNITE-29103 generates descriptions of messages and enums. [PR 
> #13675|https://github.com/apache/ignite/pull/13675]
>  * IGNITE-29143 tracks the JSON in Git and checks that it is up to date. [PR 
> #13693|https://github.com/apache/ignite/pull/13693]
>  * IGNITE-29146 adds IDTO descriptions. [PR 
> #13730|https://github.com/apache/ignite/pull/13730]
>  * IGNITE-29144 records the mapping from message IDs to classes in 
> {{{}ids.json{}}}. [PR #13763|https://github.com/apache/ignite/pull/13763]
> h3. Deliver in this order
>  # *IGNITE-29261 generates and compares JSON in CI.* Remove the generated 
> files from Git. CI compares the target branch snapshot with GitHub's test 
> merge of the PR. It saves the full diff as an artifact. The comparison works 
> on target branches that have the required generators. [PR 
> #13802|https://github.com/apache/ignite/pull/13802]
>  # *IGNITE-29145 reports the result on the PR.* After IGNITE-29261 merges, a 
> trusted {{workflow_run}} workflow reads the comparison and completeness 
> results. It updates the bot comment and the label for the current PR head.
> h3. Done when
> On a PR to {{{}master{}}}, including a fork PR, CI shows the diff in Job 
> Summary. The {{check-wire}} job warns when the format changes. A build or 
> comparison error fails the check. When the comparison and JSON completeness 
> check pass and there is a diff, the bot adds the {{{}compatibility label{}}}. 
> It posts or updates one comment linking to Job Summary.
> Reviewers use the diff to decide what needs a closer look. They still need 
> compatibility tests and manual review, especially for changes to hand-written 
> serialization.
> h3. Later work
>  * IGNITE-29289 tests whether a hint can reach committers before CI approval 
> on a fork PR.
>  * IGNITE-29230 explores rules for explaining compatibility changes from 
> generated descriptions.
>  * IGNITE-29161 evaluates whether a code hash can help reviewers spot changes 
> to serialization code.
> [Ignite dev-list 
> discussion|https://lists.apache.org/thread.html/hq3d8opxscww09pobvqfvwgc1d0v9cls]



--
This message was sent by Atlassian Jira
(v10.3.26#10030026)

Reply via email to