[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