[libvirt] [PATCH 27/34] conf: ABI: Split up and improve vcpu info ABI checking
John Ferlan
jferlan at redhat.com
Mon Nov 23 22:41:05 UTC 2015
On 11/20/2015 10:22 AM, Peter Krempa wrote:
> Extract the checking code into a separate function and prepare the
> infrastructure for checking the new structure type.
> ---
> src/conf/domain_conf.c | 41 ++++++++++++++++++++++++++++++-----------
> 1 file changed, 30 insertions(+), 11 deletions(-)
>
> diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
> index 631e1db..66fc6d3 100644
> --- a/src/conf/domain_conf.c
> +++ b/src/conf/domain_conf.c
> @@ -17835,6 +17835,35 @@ virDomainMemoryDefCheckABIStability(virDomainMemoryDefPtr src,
> }
>
>
> +static bool
> +virDomainDefVcpuCheckAbiStability(virDomainDefPtr src,
> + virDomainDefPtr dst)
I see use of "Vcpu" here...
> +{
> + size_t i;
> +
> + if (src->maxvcpus != dst->maxvcpus) {
Should these be accessors? Like they were in the moved code?
> + virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
> + _("Target domain vCPU max %zu does not match source %zu"),
> + dst->maxvcpus, src->maxvcpus);
> + return false;
> + }
> +
> + for (i = 0; i < src->maxvcpus; i++) {
Allowing for this to be an accessor/local too.
> + virDomainVCpuInfoPtr svcpu = &src->vcpus[i];
> + virDomainVCpuInfoPtr dvcpu = &dst->vcpus[i];
> +
> + if (svcpu->online != dvcpu->online) {
> + virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
> + _("State of vCPU '%zu' differs between source and "
> + "destination definitions"), i);
> + return false;
> + }
This changes the original code/design just slightly from a counted value
online to having the same order between source/dest. If the current
algorithm of using the first 'current' vcpus doesn't change, then I
foresee perhaps an interesting issue/question.
Say we start with 2 current (0,1) and 4 total (0,1,2,3). If we allow
someone to start/hotplug #3, then a migration occurs. Would the "target"
start "0,1,2" or "0,1,3"?
If I think about the current algorithm, it's get the # of vCPU's
"current" (virDomainDefGetVCpus) and then set online in order 0, 1, 2
(virDomainDefSetVCpus).
That causes a failure for this algorithm, but should it? Again only an
issue if you're ultimate goal is to allow the user to choose which
vCPU's to place online or offline. I haven't looked that far forward yet.
Conditional ACK depending on response.
John
> + }
> +
> + return true;
> +}
> +
> +
> /* This compares two configurations and looks for any differences
> * which will affect the guest ABI. This is primarily to allow
> * validation of custom XML config passed in during migration
> @@ -17908,18 +17937,8 @@ virDomainDefCheckABIStability(virDomainDefPtr src,
> goto error;
> }
>
> - if (virDomainDefGetVCpus(src) != virDomainDefGetVCpus(dst)) {
> - virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
> - _("Target domain vCPU count %d does not match source %d"),
> - virDomainDefGetVCpus(dst), virDomainDefGetVCpus(src));
> + if (!virDomainDefVcpuCheckAbiStability(src, dst))
> goto error;
> - }
> - if (virDomainDefGetVCpusMax(src) != virDomainDefGetVCpusMax(dst)) {
> - virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
> - _("Target domain vCPU max %d does not match source %d"),
> - virDomainDefGetVCpusMax(dst), virDomainDefGetVCpusMax(src));
> - goto error;
> - }
>
> if (src->iothreads != dst->iothreads) {
> virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
>
More information about the libvir-list
mailing list