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