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
1069: PR ends up in bad state if interrupted just after push #1183
Conversation
|
bots/pr/src/main/java/org/openjdk/skara/bots/pr/IntegrateCommand.java
Outdated
Show resolved
Hide resolved
Webrevs
|
It looks OK to me. I added a couple inline questions.
bots/pr/src/main/java/org/openjdk/skara/bots/pr/IntegrateCommand.java
Outdated
Show resolved
Hide resolved
@@ -196,20 +229,9 @@ public void handle(PullRequestBot bot, PullRequest pr, CensusInstance censusInst | |||
// Rebase and push it! | |||
if (!localHash.equals(PullRequestUtils.targetHash(pr, localRepo))) { | |||
var amendedHash = checkablePr.amendManualReviewers(localHash, censusInstance.namespace(), original); | |||
addPrePushComment(pr, amendedHash, rebaseMessage.toString()); | |||
localRepo.push(amendedHash, pr.repository().url(), pr.targetRef()); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If the push fails and the bot dies, will it still be retried after this fix?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes, that's the idea at least, but I should write a test for it. If the push fails, the next time around, the prepush comment is found, but the hash is not found in the target, so the IntegrationCommand will continue as if nothing has happened.
@erikj79 This change now passes all automated pre-integration checks. After integration, the commit message for the final commit will be:
You can use pull request commands such as /summary, /contributor and /issue to adjust it as needed. At the time when this comment was updated there had been no new commits pushed to the
|
Adding new patch addressing review comments. Reverted the allComments change. Added testing of interruption between posting the prepush comment and doing the push. The big change here is I discovered the SponsorCommand had a lot of duplicate code that needed to be updated in the same way. The Skara codebase seem to shun inheritance to share logic, so I tried to just move some things to static methods on IntegrateCommand and have SponsorCommand call them when suitable. There are more duplicates that could be given the same treatment, but I tried to limit the changes here to what was relevant for this fix. I'm thinking a super class could help a lot here in a future change. I also duplicated the main test I wrote from IntegrateTests to SponsorTests to verify the same behaviors since we have two almost identical code paths for the same thing. |
/integrate |
This change adds a new transaction step when integrating a PR, to better handle if the bot gets interrupted mid integration. Currently, if the change is pushed and the bot is interrupted before closing, changing labels or adding the final "commit pushed" comment, the PR can end up in a limbo state.
The new step is another comment "Going to push commit as ..." which gets added right before the git push command is run. Using this comment, it's now possible to automatically recover if the bot gets interrupted. The integration command checks for any such comments and if found, checks if the commit hash is present in the target. If it is, the PR was already pushed, and the command will just close it out as normal.
I also decided to move the output of any rebase command to this prepush comment, so we don't risk losing it.
Progress
Issue
Reviewers
Reviewing
Using
git
Checkout this PR locally:
$ git fetch https://git.openjdk.java.net/skara pull/1183/head:pull/1183
$ git checkout pull/1183
Update a local copy of the PR:
$ git checkout pull/1183
$ git pull https://git.openjdk.java.net/skara pull/1183/head
Using Skara CLI tools
Checkout this PR locally:
$ git pr checkout 1183
View PR using the GUI difftool:
$ git pr show -t 1183
Using diff file
Download this PR as a diff file:
https://git.openjdk.java.net/skara/pull/1183.diff