-
Notifications
You must be signed in to change notification settings - Fork 647
Log a message if the background worker resets HEAD #3591
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
Conversation
@Turbo87 I think something may be broken with the tarpaulin test coverage on the new 1.52.0 stable.
|
that's why I prefer to pin the Rust version in CI 😉
hmm, I've noticed before that tarpaulin sometimes swallows the compiler error messages and makes it look as if tarpaulin itself had an issue. I'm wondering if we could/should adjust the CI pipeline to run the regular |
|
||
if head != original_head { | ||
println!("Resetting index from {} to {}", original_head, head); | ||
} |
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.
maybe I'm misunderstanding the logic here, but do we even need to call self.repository.reset()
if head == original_head
?
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.
I avoided doing an early return here mainly to avoid any unexpected behavior changes to edge cases. It is possible that a previously failed job has staged changes in the index, but failed before the staged changes were committed. In that case, the local and remote HEAD
commits would match, but the staged changes would become mingled with new changes from the next job.
I now actually wonder if a reset is always sufficient. I believe a reset will leave any untracked files alone. So it might be possible that the last job created the local file but failed before the new file was staged. In both cases I think these scenarios are extremely unlikely - we're much more likely to fail when accessing the network than for local file I/O - but maybe we should consider the equivalent of a git clean -fdx
as well.
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 we're not sure about these edge cases, would it make sense to unconditionally log the operation?
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.
We could probably do the equivalent of git status
and log a message if either the index or working directory isn't clean. Then we could log that as well if there is stale state hanging around. But for this message, I think it makes sense to only log it if the hashes are different.
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.
okay, sounds good to me
Background workers obtain a lock on the registry index so a reset should only occur if the last job modified the index but failed to push its commits, or the index was mutated externally (ex: to delete crates).
@bors r+ |
📌 Commit d012525 has been approved by |
☀️ Test successful - checks-actions |
The first commit refactors some background job logic for the index repository.
The second commit logs a message if the background worker sees a different upstream
HEAD
than the currently expected commit. Background workers obtain a lock on the registry index so a reset should only occur if the last job modified the index but failed to push its commit, or the index was mutated externally (ex: to delete crates).r? @Turbo87