[libvirt] [PATCH 1/4] virsh: Move job watch code to a separate function
Michal Privoznik
mprivozn at redhat.com
Thu Dec 22 10:32:54 UTC 2011
On 21.12.2011 18:58, Eric Blake wrote:
> On 12/20/2011 08:21 AM, Michal Privoznik wrote:
>> called do_watch_job. This can be later used in other
>> job oriented commands like dump, save, managedsave
>> to report progress and allow user to cancel via ^C.
>> ---
>> tools/virsh.c | 187 ++++++++++++++++++++++++++++++++++----------------------
>> 1 files changed, 113 insertions(+), 74 deletions(-)
>>
>> diff --git a/tools/virsh.c b/tools/virsh.c
>> index 583ec6d..5f9a9ff 100644
>> --- a/tools/virsh.c
>> +++ b/tools/virsh.c
>> @@ -394,6 +394,27 @@ static char *editWriteToTempFile (vshControl *ctl, const char *doc);
>> static int editFile (vshControl *ctl, const char *filename);
>> static char *editReadBackFile (vshControl *ctl, const char *filename);
>>
>> +/* Typedefs, function prototypes for job progress reporting.
>> + * There are used by some long lingering commands like
>> + * migrate, dump, save, managedsave.
>> + */
>> +typedef struct __vshCtrlData {
>
> Single underscore is sufficient; but then again this is just code motion
> of existing code.
>
>> + vshControl *ctl;
>> + const vshCmd *cmd;
>> + int writefd;
>> +} vshCtrlData;
>> +
>> +typedef void (*jobWatchTimeoutFunc) (vshControl *ctl, virDomainPtr dom);
>
> Should this also have a 'void *opaque' parameter, so future expansions
> can use it if needed?
>
>> +
>> +static bool
>> +do_watch_job(vshControl *ctl,
>
> I would have named this vshWatchJob (we don't have very many function
> names with underscores, preferring camelCase instead), but that's minor.
> I can live with either name.
>
>> + virDomainPtr dom,
>> + bool verbose,
>> + int pipe_fd,
>> + int timeout,
>> + jobWatchTimeoutFunc timeout_func,
>
> should this be accompanied with a 'void *opaque' to pass to timeout_func
> (you can pass NULL for now)?
>
>> + const char *label);
>> +
>> static void *_vshMalloc(vshControl *ctl, size_t sz, const char *filename, int line);
>> #define vshMalloc(_ctl, _sz) _vshMalloc(_ctl, _sz, __FILE__, __LINE__)
>>
>> @@ -5720,12 +5741,6 @@ static const vshCmdOptDef opts_migrate[] = {
>> {NULL, 0, 0, NULL}
>> };
>>
>> -typedef struct __vshCtrlData {
>> - vshControl *ctl;
>> - const vshCmd *cmd;
>> - int writefd;
>> -} vshCtrlData;
>> -
>> static void
>> doMigrate (void *opaque)
>> {
>> @@ -5858,75 +5873,44 @@ print_job_progress(const char *label, unsigned long long remaining,
>> fflush(stderr);
>> }
>>
>> +static void
>> +on_migration_timeout(vshControl *ctl,
>> + virDomainPtr dom)
>
> I would have named this vshMigrationTimeout.
>
>> +{
>> + vshDebug(ctl, VSH_ERR_DEBUG, "suspend the domain "
>> + "when migration timeouts\n");
>
> Here, I would use: "suspending the domain, since migration timed out"
>
>> @@ -5935,18 +5919,16 @@ cmdMigrate (vshControl *ctl, const vshCmd *cmd)
>> repoll:
>> ret = poll(&pollfd, 1, 500);
>> if (ret > 0) {
>> - if (saferead(p[0], &retchar, sizeof(retchar)) > 0) {
>> - if (retchar == '0') {
>> - functionReturn = true;
>> + if (pollfd.revents & POLLIN &&
>> + saferead(pipe_fd, &retchar, sizeof(retchar)) > 0 &&
>> + retchar == '0') {
>> if (verbose) {
>> /* print [100 %] */
>> - print_job_progress("Migration", 0, 1);
>
> Hmm - we weren't translating this string previously.
>
>> +
>> + if (virThreadCreate(&workerThread,
>> + true,
>> + doMigrate,
>> + &data) < 0)
>> + goto cleanup;
>> + functionReturn = do_watch_job(ctl, dom, verbose, p[0], timeout,
>> + on_migration_timeout, "Migration");
>
> The last parameter should be _("Migration").
>
> Overall, looks reasonable.
>
Fixed the nits and pushed. Thanks.
More information about the libvir-list
mailing list