[libvirt] [PATCH 09/11] qemu: blockPull: Refactor the rest of qemuDomainBlockJobImpl

Peter Krempa pkrempa at redhat.com
Thu Apr 9 14:09:19 UTC 2015


On Wed, Apr 08, 2015 at 13:10:12 -0400, John Ferlan wrote:
> 
> 
> On 04/01/2015 01:20 PM, Peter Krempa wrote:
> > Since it now handles only block pull code paths we can refactor it and
> > remove tons of cruft.
> > ---
> >  src/qemu/qemu_driver.c       | 86 ++++++++++++++++++++------------------------
> >  src/qemu/qemu_monitor.c      | 30 ++++++++--------
> >  src/qemu/qemu_monitor.h      | 17 ++++-----
> >  src/qemu/qemu_monitor_json.c | 59 +++++++-----------------------
> >  src/qemu/qemu_monitor_json.h | 13 ++++---
> >  5 files changed, 78 insertions(+), 127 deletions(-)
> > 
> > diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
> > index 7b7775d..2dd8ed4 100644
> > --- a/src/qemu/qemu_driver.c
> > +++ b/src/qemu/qemu_driver.c

...

> > @@ -16276,15 +16267,15 @@ qemuDomainBlockJobImpl(virDomainObjPtr vm,
> >          basePath = qemuMonitorDiskNameLookup(priv->mon, device, disk->src,
> >                                               baseSource);
> >      if (!baseSource || basePath)
> > -        ret = qemuMonitorBlockJob(priv->mon, device, basePath, backingPath,
> > -                                  speed, mode, async);
> > +        ret = qemuMonitorBlockStream(priv->mon, device, basePath, backingPath,
> > +                                     speed, modern);
> 
> These don't use your new qemuDomainGetMonitor(vm) - not that it really
> matters, but since you created it...

It was meant for functions that don't need the 'priv' variable otherwise
so that it can be avoided. Here 'priv' is needed for checking a
capability so I did not bother changing it.

> 
> >      if (qemuDomainObjExitMonitor(driver, vm) < 0)
> >          ret = -1;
> > -    if (ret < 0) {
> > +
> > +    if (ret < 0)
> >          goto endjob;
> > -    } else if (mode == BLOCK_JOB_PULL) {
> > -        disk->blockjob = true;
> > -    }
> > +
> > +    disk->blockjob = true;
> > 
> >   endjob:
> >      qemuDomainObjEndJob(driver, vm);

...

> > diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c
> > index 01a4f9a..d02567d 100644
> > --- a/src/qemu/qemu_monitor_json.c
> > +++ b/src/qemu/qemu_monitor_json.c
> > @@ -4286,57 +4286,24 @@ qemuMonitorJSONBlockJobError(virJSONValuePtr reply,
> > 
> >  /* speed is in bytes/sec */
> >  int
> > -qemuMonitorJSONBlockJob(qemuMonitorPtr mon,
> > -                        const char *device,
> > -                        const char *base,
> > -                        const char *backingName,
> > -                        unsigned long long speed,
> > -                        qemuMonitorBlockJobCmd mode,
> > -                        bool modern)
> > +qemuMonitorJSONBlockStream(qemuMonitorPtr mon,
> > +                           const char *device,
> > +                           const char *base,
> > +                           const char *backingName,
> > +                           unsigned long long speed,
> > +                           bool modern)
> >  {
> >      int ret = -1;
> >      virJSONValuePtr cmd = NULL;
> >      virJSONValuePtr reply = NULL;
> > -    const char *cmd_name = NULL;
> > -
> > -    if (base && (mode != BLOCK_JOB_PULL || !modern)) {
> > -        virReportError(VIR_ERR_INTERNAL_ERROR,
> > -                       _("only modern block pull supports base: %s"), base);
> > -        return -1;
> > -    }
> 
> Just checking...
> 
> This change is essentially the same as in qemuDomainBlockPullCommon
> where if (!modern) {} was added right?

Yes. This one would be redundant.

> 
> > -
> > -    if (backingName && mode != BLOCK_JOB_PULL) {
> > -        virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
> > -                       _("backing name is supported only for block pull"));
> > -        return -1;
> > -    }
> 
> And this won't be necessary.... since we no longer have multiple
> (ab)users of the same API

Exactly.

> 
> > -
> > -    if (backingName && !base) {
> > -        virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
> > -                       _("backing name requires a base image"));
> > -        return -1;
> > -    }
> 
> Is there a check for this somewhere that I missed?

The caller ensures that this does not happen. We could leave this one
possibly in if you want.

> 
> > +    const char *cmd_name = modern ? "block-stream" : "block_stream";
> > 
> > -    if (speed && mode == BLOCK_JOB_PULL && !modern) {
> > -        virReportError(VIR_ERR_INTERNAL_ERROR,
> > -                       _("only modern block pull supports speed: %llu"),
> > -                       speed);
> > -        return -1;
> > -    }
> 
> And this is the second half of the check in qemuDomainBlockPullCommon
> 
> ACK - in general - Just want to make sure the "if (backingName && !base)
> wasn't erroneously removed.
> 
> John

Peter
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: Digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20150409/8e8ae162/attachment-0001.sig>


More information about the libvir-list mailing list