[libvirt] [PATCH] conf: Don't use the current state in def->data.network.actual when migrate

lhuang lhuang at redhat.com
Thu Jan 8 01:51:31 UTC 2015


On 01/07/2015 08:16 PM, Jiri Denemark wrote:
> On Thu, Dec 25, 2014 at 11:38:00 +0800, Luyao Huang wrote:
>> https://bugzilla.redhat.com/show_bug.cgi?id=1177194
>>
>> When migrate a vm, we will generate a xml via qemuDomainDefFormatLive and
>> pass this xml to target libvirtd. Libvirt will use the current network
>> state in def->data.network.actual to generate the xml, this will make
>> migrate failed when we set a network type guest interface use a macvtap
>> network as a source in a vm then migrate vm to another host(which has the
>> different macvtap network settings: different interface name, bridge name...)
>>
>> Add a flag check in virDomainNetDefFormat, if we set a VIR_DOMAIN_XML_MIGRATABLE
>> flag when call virDomainNetDefFormat, we won't get the current vm interface
>> state.
>>
>> Signed-off-by: Luyao Huang <lhuang at redhat.com>
>> ---
>>   src/conf/domain_conf.c | 4 +++-
>>   1 file changed, 3 insertions(+), 1 deletion(-)
>>
>> diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
>> index aafc05e..fffd6cd 100644
>> --- a/src/conf/domain_conf.c
>> +++ b/src/conf/domain_conf.c
>> @@ -17436,7 +17436,9 @@ virDomainNetDefFormat(virBufferPtr buf,
>>       unsigned int actualType = virDomainNetGetActualType(def);
>>       bool publicActual
>>          = (def->type == VIR_DOMAIN_NET_TYPE_NETWORK && def->data.network.actual &&
>> -          !(flags & (VIR_DOMAIN_XML_INACTIVE | VIR_DOMAIN_XML_INTERNAL_ACTUAL_NET)));
>> +          !(flags & (VIR_DOMAIN_XML_INACTIVE |
>> +                     VIR_DOMAIN_XML_INTERNAL_ACTUAL_NET |
>> +                     VIR_DOMAIN_XML_MIGRATABLE)));
>>       const char *typeStr;
>>       virDomainHostdevDefPtr hostdef = NULL;
>>       char macstr[VIR_MAC_STRING_BUFLEN];
> ACK, however the initialization of publicActual looks ugly (not your
> fault) so a changed it a bit before pushing.

Thanks for your  review!
> Jirka
>
> @@ -17705,18 +17705,23 @@ virDomainNetDefFormat(virBufferPtr buf,
>                         virDomainNetDefPtr def,
>                         unsigned int flags)
>   {
> -    /* publicActual is true if we should report the current state in
> -     * def->data.network.actual *instead of* the config (*not* in
> -     * addition to)
> -     */
>       unsigned int actualType = virDomainNetGetActualType(def);
> -    bool publicActual
> -       = (def->type == VIR_DOMAIN_NET_TYPE_NETWORK && def->data.network.actual &&
> -          !(flags & (VIR_DOMAIN_XML_INACTIVE | VIR_DOMAIN_XML_INTERNAL_ACTUAL_NET)));
> +    bool publicActual = false;
>       const char *typeStr;
>       virDomainHostdevDefPtr hostdef = NULL;
>       char macstr[VIR_MAC_STRING_BUFLEN];
>   
> +    /* publicActual is true if we should report the current state in
> +     * def->data.network.actual *instead of* the config (*not* in
> +     * addition to)
> +     */
> +    if (def->type == VIR_DOMAIN_NET_TYPE_NETWORK &&
> +        def->data.network.actual &&
> +        !(flags & (VIR_DOMAIN_XML_INACTIVE |
> +                   VIR_DOMAIN_XML_INTERNAL_ACTUAL_NET |
> +                   VIR_DOMAIN_XML_MIGRATABLE)))
> +        publicActual = true;
> +
>       if (publicActual) {
>           if (!(typeStr = virDomainNetTypeToString(actualType))) {
>               virReportError(VIR_ERR_INTERNAL_ERROR,

yep, the codes looks beautiful now, thanks your help!




More information about the libvir-list mailing list