[libvirt] [PATCH v3 REBASE 06/16] qemu: refactor fetching migration stats

Nikolay Shirokovskiy nshirokovskiy at virtuozzo.com
Wed Aug 30 07:53:43 UTC 2017



On 29.08.2017 16:45, Jiri Denemark wrote:
> On Thu, Aug 24, 2017 at 09:56:43 +0300, Nikolay Shirokovskiy wrote:
>> qemuMigrationFetchJobStatus is rather inconvinient. Some of its
>> callers don't need status to be updated, some don't need to update
>> elapsed time right away. So let's update status or elapsed time
>> in callers instead.
>>
>> In qemuMigrationConfirmPhase we should fetch stats with copy
>> flag set as stats variable refers to domain object not the stack.
>>
>> This patch drops updating job status on getting job stats by
>> client. This way we will not provide status 'completed' while
>> it is not yet updated by migration routine.
> ...
>> diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c
>> index cc42f7a..dec0a08 100644
>> --- a/src/qemu/qemu_migration.c
>> +++ b/src/qemu/qemu_migration.c
>> @@ -1376,24 +1376,28 @@ qemuMigrationUpdateJobType(qemuDomainJobInfoPtr jobInfo)
>>  
>>  
>>  int
>> -qemuMigrationFetchJobStatus(virQEMUDriverPtr driver,
>> -                            virDomainObjPtr vm,
>> -                            qemuDomainAsyncJob asyncJob,
>> -                            qemuDomainJobInfoPtr jobInfo)
>> +qemuMigrationFetchMigrationStats(virQEMUDriverPtr driver,
> 
> The name contains "Migration" twice. How about qemuMigrationFetchStats
> or qemuMigrationFetchJobStats?

Both are good. I like qemuMigrationFetchStats.

> 
>> +                                 virDomainObjPtr vm,
>> +                                 qemuDomainAsyncJob asyncJob,
>> +                                 qemuMonitorMigrationStatsPtr stats,
> 
> It looks like all callers are always passing something like
> &jobInfo->stats so keeping qemuDomainJobInfoPtr jobInfo argument could
> make the callers a bit simpler.

Ok.

> 
>> +                                 bool copy)
> 
> I'd just drop the "copy" parameter completely and let the function
> always fetch stats in a local variable and then copy its content into
> the "stats" argument. I.e., make it always work as if copy == true.

Ok.

> 
>>  {
>>      qemuDomainObjPrivatePtr priv = vm->privateData;
>> +    qemuMonitorMigrationStats statsCopy;
>>      int rv;
>>  
>>      if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0)
>>          return -1;
>>  
>> -    rv = qemuMonitorGetMigrationStats(priv->mon, &jobInfo->stats);
>> +    rv = qemuMonitorGetMigrationStats(priv->mon, copy ? &statsCopy : stats);
>>  
>>      if (qemuDomainObjExitMonitor(driver, vm) < 0 || rv < 0)
>>          return -1;
>>  
>> -    qemuMigrationUpdateJobType(jobInfo);
>> -    return qemuDomainJobInfoUpdateTime(jobInfo);
>> +    if (copy)
>> +        *stats = statsCopy;
>> +
>> +    return 0;
>>  }
>>  
>>  
> ...
>> @@ -1442,11 +1429,12 @@ qemuMigrationCheckJobStatus(virQEMUDriverPtr driver,
>>  
>>      bool events = virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_MIGRATION_EVENT);
>>  
>> -    if (events)
>> -        qemuMigrationUpdateJobType(jobInfo);
>> -    else if (qemuMigrationUpdateJobStatus(driver, vm, asyncJob) < 0)
>> +    if (!events && qemuMigrationFetchMigrationStats(driver, vm, asyncJob,
> 
> Break the line after &&, please.
> 
>> +                                                    &jobInfo->stats, true) < 0)
>>          return -1;
>>  
>> +    qemuMigrationUpdateJobType(jobInfo);
>> +
>>      switch (jobInfo->status) {
>>      case QEMU_DOMAIN_JOB_STATUS_NONE:
>>          virReportError(VIR_ERR_OPERATION_FAILED, _("%s: %s"),
> ...
> 
> Jirka
> 




More information about the libvir-list mailing list