On Thu, Dec 8, 2011 at 10:33 PM, Adam Litke <agl@xxxxxxxxxx> wrote: > Qemu has changed the semantics of the "block_job_cancel" API. Originally, the > operation was synchronous (ie. upon command completion, the operation was > guaranteed to be completely stopped). With the new semantics, a > "block_job_cancel" merely requests that the operation be cancelled and an event > is triggered once the cancellation request has been honored. > > To adopt the new semantics while preserving compatibility I propose the > following updates to the virDomainBlockJob API: > > A new block job event type VIR_DOMAIN_BLOCK_JOB_CANCELLED will be recognized by > libvirt. Regardless of the flags used with virDomainBlockJobAbort, this event > will be raised whenever it is received from qemu. This event indicates that a > block job has been successfully cancelled. > > A new extension flag VIR_DOMAIN_BLOCK_JOB_ABORT_ASYNC will be added to the > virDomainBlockJobAbort API. When enabled, this function will operate > asynchronously (ie, it can return before the job has actually been cancelled). > When the API is used in this mode, it is the responsibility of the caller to > wait for a VIR_DOMAIN_BLOCK_JOB_CANCELLED event or poll via the > virDomainGetBlockJobInfo API to check the cancellation status. > > Without the VIR_DOMAIN_BLOCK_JOB_ABORT_ASYNC flag, libvirt will internally poll > using qemu's "query-block-jobs" API and will not return until the operation has > been completed. API users are advised that this operation is unbounded and > further interaction with the domain during this period may block. > > This patch implements the new event type, the API flag, and the polling. The > main outstanding issue is whether we should bound the amount of time we will > wait for cancellation and return an error. > > Comments on this proposal? > > Signed-off-by: Adam Litke <agl@xxxxxxxxxx> > Cc: Stefan Hajnoczi <stefanha@xxxxxxxxx> > Cc: Eric Blake <eblake@xxxxxxxxxx> > --- > include/libvirt/libvirt.h.in | 10 ++++++++++ > src/libvirt.c | 9 ++++++++- > src/qemu/qemu_driver.c | 24 +++++++++++++++++------- > src/qemu/qemu_monitor.c | 24 ++++++++++++++++++++++++ > src/qemu/qemu_monitor.h | 2 ++ > src/qemu/qemu_monitor_json.c | 36 +++++++++++++++++++++++++++++------- > 6 files changed, 90 insertions(+), 15 deletions(-) Reviewed-by: Stefan Hajnoczi <stefanha@xxxxxxxxxxxxxxxxxx> -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list