-
Notifications
You must be signed in to change notification settings - Fork 18
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
Add IOop::Barrier
#1494
Add IOop::Barrier
#1494
Conversation
56c05b8
to
44d6a40
Compare
9042a37
to
30b2a97
Compare
It looks like this just adds the IOop, but the operation won't be submitted until a future PR, and doesn't change replay behavior currently, right? Seems fine to me, as long as that CI failure was a flake and not something real |
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.
oh i need to fill this text field to make octocat happy
44d6a40
to
7adccc7
Compare
7adccc7
to
a2f5901
Compare
Yup, this is just adding the |
upstairs/src/client.rs
Outdated
assert!(read_data.data.is_empty()); | ||
assert!(extent_info.is_none()); | ||
|
||
if jobs_completed_ok == 2 { |
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.
For the barrier, do we want jobs_completed_ok == 3
?
And, we are not acking this to anyone, but do you plan to use ackable later to indicate that future action can move forward?
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'm ambivalent! Like you said, we're not actually acking this to anyone; I also don't plan to use presence in ackable_work
as an indication for anything here (unlike how it's used in live-repair).
This means the only thing that happens when the job is acked is that it moves from GuestWork::active
to GuestWork::completed
. Setting the ack to happen at jobs_completed_ok == 3
seems reasonable to me.
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 are not using ackable
for anything, then I would vote for not setting it at all.
Otherwise I'll come back here and see it set and wonder what was consuming that and be confused when I found nothing.
I do care about the dtrace probe though, that one we might actually want to know when this operation has finised on all three downstairs. I don't think I would ever care to know that the barrier had finished on 2/3 downstairs.
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 do need to use ackable
, because the job is stored in GuestWork
so we need to "ack" it to remove it from that map (even though nothing else happens in the ack).
I changed the threshold to 3 in ed52bf5
ed52bf5
to
0c2f2df
Compare
Ignore the failure in |
(staged on top of #1493)
The
Barrier
op does no work, but serves as a full dependency barrier (like a flush) so that the Downstairs can reset its list of completed jobs. Note that it does not updatelast_flush
or retire jobs in the Upstairs, because it doesn't actually persist data to disk.This is a building block for removing automatic flushes (see RFD 518).