[libvirt] [PATCH v3] blockjob: use stable disk string in job event
Peter Krempa
pkrempa at redhat.com
Thu Jun 19 08:32:27 UTC 2014
On 06/19/14 00:41, Eric Blake wrote:
> When the block job event was first added, it was for block pull,
> where the active layer of the disk remains the same name. It was
> also in a day where we only cared about local files, and so we
> always had a canonical absolute file name. But two things have
> changed since then: we now have network disks, where determining
> a single absolute string does not really make sense; and we have
> two-phase jobs (copy and active commit) where the name of the
> active layer changes between the first event (ready, on the old
> name) and second (complete, on the pivoted name).
>
> Adam Litke reported that having an unstable string between events
> makes life harder for clients. Furthermore, all of our API that
> operate on a particular disk of a domain accept multiple strings:
> not only the absolute name of the active layer, but also the
> destination device name (such as 'vda'). As this latter name is
> stable, even for network sources, it serves as a better string
> to supply in block job events.
>
> But backwards-compatibility demands that we should not change the
> name handed to users unless they explicitly request it. Therefore,
> this patch adds a new event, BLOCK_JOB_2 (alas, I couldn't think of
> any nicer name - but at least Migrate2 and Migrate3 are precedent
> for a number suffix). We must double up on emitting both old-style
> and new-style events according to what clients have registered for
> (see also how IOError and IOErrorReason emits double events, but
> there the difference was a larger struct rather than changed
> meaning of one of the struct members).
>
> Unfortunately, adding a new event isn't something that can easily
> be broken into pieces, so the commit is rather large.
>
> * include/libvirt/libvirt.h.in (virDomainEventID): Add a new id
> for VIR_DOMAIN_EVENT_ID_BLOCK_JOB_2.
> (virConnectDomainEventBlockJobCallback): Document new semantics.
> * src/conf/domain_event.c (_virDomainEventBlockJob): Rename field,
> to ensure we catch all clients.
> (virDomainEventBlockJobNew): Add parameter.
> (virDomainEventBlockJobDispose)
> (virDomainEventBlockJobNewFromObj)
> (virDomainEventBlockJobNewFromDom)
> (virDomainEventDispatchDefaultFunc): Adjust clients.
> (virDomainEventBlockJob2NewFromObj)
> (virDomainEventBlockJob2NewFromDom): New functions.
> * src/conf/domain_event.h: Add new prototypes.
> * src/libvirt_private.syms (domain_event.h): Export new functions.
> * src/qemu/qemu_driver.c (qemuDomainBlockJobImpl): Generate two
> different events.
> * src/qemu/qemu_process.c (qemuProcessHandleBlockJob): Likewise.
> * src/remote/remote_protocol.x
> (remote_domain_event_block_job_2_msg): New struct.
> (REMOTE_PROC_DOMAIN_EVENT_BLOCK_JOB_2): New RPC.
> * src/remote/remote_driver.c
> (remoteDomainBuildEventBlockJob2): New handler.
> (remoteEvents): Register new event.
> * daemon/remote.c (remoteRelayDomainEventBlockJob2): New handler.
> (domainEventCallbacks): Register new event.
> * tools/virsh-domain.c (vshEventCallbacks): Likewise.
> (vshEventBlockJobPrint): Adjust client.
> * src/remote_protocol-structs: Regenerate.
>
> Signed-off-by: Eric Blake <eblake at redhat.com>
> ---
>
> v3: don't do s/path/disk/ on code that is not shared; s/disk/dst/ on
> new code that is not shared; touch up libvirt.c docs, actually test
> with python bindings
>
> daemon/remote.c | 39 +++++++++++++++++++++++++++++++++++++++
> include/libvirt/libvirt.h.in | 19 ++++++++++++++++---
> src/conf/domain_event.c | 44 +++++++++++++++++++++++++++++++++++---------
> src/conf/domain_event.h | 11 +++++++++++
> src/libvirt_private.syms | 2 ++
> src/qemu/qemu_driver.c | 8 +++++++-
> src/qemu/qemu_process.c | 7 +++++++
> src/remote/remote_driver.c | 31 +++++++++++++++++++++++++++++++
> src/remote/remote_protocol.x | 16 +++++++++++++++-
> src/remote_protocol-structs | 8 ++++++++
> tools/virsh-domain.c | 7 +++++--
> 11 files changed, 176 insertions(+), 16 deletions(-)
>
I almost didn't notice this one as I tend to skip cover letters and this
looked just like one.
ACK,
Peter
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 901 bytes
Desc: OpenPGP digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20140619/4bdda28a/attachment-0001.sig>
More information about the libvir-list
mailing list