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
librbd: image refresh code paths converted to async state machines #6859
Conversation
e9378db
to
8b35816
Compare
8b35816
to
1a1eada
Compare
I like the approach. The ascii-art diagrams and send/handle naming conventions help a lot. lgtm in general, though I didn't go over all the new state machines in detail. I'm curious to see the integration. |
1a1eada
to
efb0ba8
Compare
8f5d671
to
b38fd31
Compare
Guessing there are still some bugs to work out once the lab is back next week. unit tests pass, but opening an image hangs, i.e.:
|
b38fd31
to
5b3208e
Compare
5b3208e
to
b796d3b
Compare
037a753
to
e256414
Compare
running it through tests now, but needs a rebase |
Signed-off-by: Jason Dillaman <dillaman@redhat.com>
Signed-off-by: Jason Dillaman <dillaman@redhat.com>
Signed-off-by: Jason Dillaman <dillaman@redhat.com>
Signed-off-by: Jason Dillaman <dillaman@redhat.com>
It should only run when the object map is enabled for the image. Signed-off-by: Jason Dillaman <dillaman@redhat.com>
Signed-off-by: Jason Dillaman <dillaman@redhat.com>
Signed-off-by: Jason Dillaman <dillaman@redhat.com>
New async versions of get_id, get_immutable_metadata, get_mutable_metadata, get_flags, get_stripe_unit_count, snapshot_list, and old_snapshot_list. These are needed by the new librbd async ImageCtx op state machines. Signed-off-by: Jason Dillaman <dillaman@redhat.com>
Signed-off-by: Jason Dillaman <dillaman@redhat.com>
Signed-off-by: Jason Dillaman <dillaman@redhat.com>
Signed-off-by: Jason Dillaman <dillaman@redhat.com>
Creating async versions to support an async image refresh Signed-off-by: Jason Dillaman <dillaman@redhat.com>
Signed-off-by: Jason Dillaman <dillaman@redhat.com>
Signed-off-by: Jason Dillaman <dillaman@redhat.com>
Signed-off-by: Jason Dillaman <dillaman@redhat.com>
Signed-off-by: Jason Dillaman <dillaman@redhat.com>
Signed-off-by: Jason Dillaman <dillaman@redhat.com>
Use new ExclusiveLock state machine to handle all the proper transitions between lock states. Signed-off-by: Jason Dillaman <dillaman@redhat.com>
Signed-off-by: Jason Dillaman <dillaman@redhat.com>
This class handles more than just refreshing the image from disk. Signed-off-by: Jason Dillaman <dillaman@redhat.com>
Signed-off-by: Jason Dillaman <dillaman@redhat.com>
Signed-off-by: Jason Dillaman <dillaman@redhat.com>
Signed-off-by: Jason Dillaman <dillaman@redhat.com>
Signed-off-by: Jason Dillaman <dillaman@redhat.com>
Signed-off-by: Jason Dillaman <dillaman@redhat.com>
Signed-off-by: Jason Dillaman <dillaman@redhat.com>
This avoids blocking the AIO path with the previous synchronous refresh path. Signed-off-by: Jason Dillaman <dillaman@redhat.com>
Signed-off-by: Jason Dillaman <dillaman@redhat.com>
Signed-off-by: Jason Dillaman <dillaman@redhat.com>
Signed-off-by: Jason Dillaman <dillaman@redhat.com>
The AIO path already ensures asynchronous image refreshes, but the watch/notify path for maintenance ops was still using the sync refresh path. Signed-off-by: Jason Dillaman <dillaman@redhat.com>
An image refresh will no longer trigger an automatic object map reload, therefore explicitly reload the object map after rollback. Signed-off-by: Jason Dillaman <dillaman@redhat.com>
e256414
to
d2d4bb4
Compare
@jdurgin rebased |
RGW failure in loic-bot |
|
librbd: image refresh code paths converted to async state machines Reviewed-by: Josh Durgin <jdurgin@redhat.com>
The goal is to eliminate all possible deadlock potential between mixing synchronous and asynchronous workloads.