-
Notifications
You must be signed in to change notification settings - Fork 17.9k
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
x/build/maintner: reports inconsistent world state (e.g., issue state vs issue events) during short windows of time #28226
Comments
Change https://golang.org/cl/142362 mentions this issue: |
When working on other issues, I saw that GitHub introduced a "unified" timeline for events on an issue, the Timeline Api. I understand that it is still in beta (since 2016) and would be a major, but it might help fix this issue by providing a single source of truth on a GitHubIssue |
@orthros Thanks for pointing that out. The Timeline API can indeed be helpful for eliminating races between issue comments, events, and PR reviews (for #21086). Something to be mindful of is that it may not, on its own, be enough to solve the most important race: between the issue state (whether it's open or closed, which labels it has applied) and events. Unless we use the events to deduct the state, rather than querying state separately. (But that can be done independently of using the Timeline API.) Also, for information, the Timeline API is indeed in preview, and in my experience using it, it had some data gap edge cases where I had to fall back to querying reviews separately (e.g., see here). It may have been resolved by now, but it's worth being aware of. It seems there are 2 Timeline APIs in GitHub API v4 ( |
Problem
A program that fetches a
maintner
corpus and tries to use its data to make decisions may make a mistake, because the world view is inconsistent during short windows of time. Even though the windows are short, it's guaranteed to happen for any daemon that loops over doing corpus updates and making decisions immediately after.The most visible high-level example of this is #21312.
Cause
This happens because there are effectively two GitHub data sources that are not synchronized:
To give a concrete example of an inconsistent state that
maintner
can report, consider when an issue has just been unlabeled. The first mutation received and processed by acorpus.Update
call will be that the issue no longer has that label.The mutation reporting that there has been an unlabeled event on the same issue may come in a few seconds later. Until it does, it will appear that the issue does not have said label and it has never been unlabeled (e.g.,
!gi.HasLabel("Documentation") && !gi.HasEvent("unlabeled")
will be true). Which is not the reality (if one considers the reality to be one where the unlabeled event and its effect to happen simultaneously).Details
These are two distinct mutations received and processed by
corpus.Update
method:There is more relevant information in #21312 (comment).
/cc @bradfitz
The text was updated successfully, but these errors were encountered: