[libvirt] [PATCH v2 07/10] virsh: expose new active commit controls

Peter Krempa pkrempa at redhat.com
Fri Jun 6 14:27:42 UTC 2014


On 06/06/14 14:12, Eric Blake wrote:
> On 06/06/2014 05:57 AM, Peter Krempa wrote:
>> On 06/06/14 00:52, Eric Blake wrote:
>>> Add knobs to virsh to manage a 2-phase active commit of the top
>>> layer, similar to knobs already present on blockcopy.  While this
>>> code will fail until later patches actually implement the new
>>> knobs in the qemu driver, doing it now proves that the API is
>>> usable and also makes it easier for testing the qemu changes as
>>> they are made.
>>>
>>> * tools/virsh-domain.c (cmdBlockCommit): Add --active, --pivot,
>>> and --finish options, modeled after blockcopy.
>>> (blockJobImpl): Support --active flag.
>>> * tools/virsh.pod (blockcommit): Document new flags.
>>> (blockjob): Mention 2-phase commit interaction.
> 
>>> +    {.name = "finish",
>>> +     .type = VSH_OT_BOOL,
>>> +     .help = N_("with --active --wait, quit when commit is synced")
>>
>> Finish seems a bit too generic ... shouldn't we go with something like
>> --keep-overlay or other more specific flag?
> 
> blockcopy has the same flag, but yeah, I could go with keep-overlay.
> It's shorthand for doing a two-command sequence:
> 
> blockcommit --wait
> blockjob --abort
> 
> but with a nicer name for what the abort actually does in the second phase.

Well, the --keep-overlay (or keep-*) option is better in my opinion as
you can guess what it does according to the name, where I couldn't guess
that --finish does it.

> 
>>
>>> +    },
>>>      {.name = "async",
>>>       .type = VSH_OT_BOOL,
>>>       .help = N_("with --wait, don't wait for cancel to finish")
>>
>>> @@ -1709,7 +1744,22 @@ cmdBlockCommit(vshControl *ctl, const vshCmd *cmd)
>>>          /* printf [100 %] */
>>>          vshPrintJobProgress(_("Block Commit"), 0, 1);
>>>      }
>>> -    vshPrint(ctl, "\n%s", quit ? _("Commit aborted") : _("Commit complete"));
>>> +    if (!quit && pivot) {
>>> +        abort_flags |= VIR_DOMAIN_BLOCK_JOB_ABORT_PIVOT;
>>> +        if (virDomainBlockJobAbort(dom, path, abort_flags) < 0) {
>>> +            vshError(ctl, _("failed to pivot job for disk %s"), path);
>>> +            goto cleanup;
>>> +        }
>>> +    } else if (finish && !quit &&
>>> +               virDomainBlockJobAbort(dom, path, abort_flags) < 0) {
>>> +        vshError(ctl, _("failed to finish job for disk %s"), path);
>>> +        goto cleanup;
>>> +    }
>>> +    vshPrint(ctl, "\n%s",
>>> +             quit ? _("Commit aborted") :
>>> +             pivot ? _("Successfully pivoted") :
>>> +             !finish ? _("Now in synchronized phase") :
>>> +             _("Commit complete"));
>>
>> Uhhh, embedded ternaries? Please change it to hierarchical if's or
>> something.
> 
> Copied from blockcopy; I guess I can fix both instances.
> 
>>
>> We should discuss the --finish flag name a little bit more.
> 
> Is it better to have blockcopy and blockcommit look alike, or to make
> each command have a better description of what it is doing?

They aren't that much semantically similar from a high-level point of
view so it should be okay if we diverge there. On the other hand, those
options aren't used that wildly that it should matter that much.

I probably don't care that much so I'd force you to change it but it
would be better understandable if you do.
> 

ACK to this patch with or without --finish changed. (the change of the
ternary to something more readable is still required though).

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/20140606/bf3a8de6/attachment-0001.sig>


More information about the libvir-list mailing list