[libvirt] [RFC] BlockJob: Support sync/async virDomainBlockJobAbort
stefanha at gmail.com
Fri Dec 9 09:24:56 UTC 2011
On Thu, Dec 8, 2011 at 10:33 PM, Adam Litke <agl at us.ibm.com> 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 at us.ibm.com>
> Cc: Stefan Hajnoczi <stefanha at gmail.com>
> Cc: Eric Blake <eblake at redhat.com>
> 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 at linux.vnet.ibm.com>
More information about the libvir-list