<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<div class="moz-cite-prefix">To complete the circle, here is my
response to a *different* patch trying to fix this same problem. I
did a bit more investigating during my reply, so there is better /
more complete information:</div>
<div class="moz-cite-prefix"><br>
</div>
<div class="moz-cite-prefix">
<a class="moz-txt-link-freetext" href="https://www.redhat.com/archives/libvir-list/2020-June/msg00681.html">https://www.redhat.com/archives/libvir-list/2020-June/msg00681.html</a></div>
<div class="moz-cite-prefix"><br>
</div>
<div class="moz-cite-prefix">On 6/15/20 11:10 PM, Wei Gong wrote:<br>
</div>
<blockquote type="cite"
cite="mid:CALtkBTHUg=P4_3xW2vqQ7_WyXAgHSPuk6fdQM0gtHN3ciWY5Eg@mail.gmail.com">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<div dir="ltr"> environment:libvirt-4.3.0 qemu-kvm-ev-2.10.0
kernel-3.10.0-1062 centos7 openvswitch-2.3.1
<div> </div>
<div> vm network xml :<br>
</div>
<div><interface type='bridge'><br>
<mac address='52:54:00:46:45:95'/><br>
<source bridge='ovsbr-mgt'/><br>
<vlan><br>
<tag id='0'/><br>
</vlan><br>
<virtualport type='openvswitch'><br>
<parameters
interfaceid='596c6ab7-4557-4935-af97-62a35d933f8d'/><br>
</virtualport><br>
<target dev='vnet0'/><br>
<model type='virtio'/><br>
<link state='up'/><br>
<alias name='net0'/><br>
<address type='pci' domain='0x0000' bus='0x00'
slot='0x04' function='0x0'/><br>
</interface><br>
</div>
<div><br>
</div>
<div>qemuProcessStart in qemu_process.c failed to start. </div>
<div><span
id="gmail-docs-internal-guid-9024127b-7fff-84e9-d86b-f7e2655bfd03"><span style="font-size:10pt;font-family:Montserrat,sans-serif;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap">The first is qemu process stop(At this time, the kernel will recycle tap device,</span></span></div>
<div><span><span style="font-size:10pt;font-family:Montserrat,sans-serif;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap">and the </span></span>tap
device is applied by other virtual machines<span style="background-color:transparent;color:rgb(0,0,0);font-family:Montserrat,sans-serif;font-size:10pt;white-space:pre-wrap">).</span><span style="font-size:10pt;font-family:Montserrat,sans-serif;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap">Then, ovs removevport.</span></div>
<div>It is possible to processing concurrently qemuProcessStart
and qemuProcessStop.</div>
<div>qemuProcessStop(ovs removevport) may remove ports of other
virtual machines </div>
<div>while using openvswitch virtualport.</div>
<div><br>
</div>
<div>for example:</div>
<div>Failure to start the vm1, the tap device vnet0 will be
recovered first(at this time vm2 starts and</div>
<div>uses vnet0 device,and ovs add vnet0 port), then the
removevport vnet0(
remove vnet0</div>
<div>belonging to vm2 at this time ). During this time interval,</div>
<div>vm2 will apply for the same tap device vnet0 and add port
vnet0.</div>
<div> At this time, removing the port from vm1 will cause the
port of vm2 to be lost. </div>
<div>vm2 will not be able to access the network through this
vnet0.</div>
<div><br>
</div>
<div>reproduce:</div>
<div>Batch start or migrate 10 virtual machines to the same
node, one of the virtual machines start failed.</div>
<div>This failure may be that the storage cannot connect or
other failures(when we reproduced internally,</div>
<div> one of the virtual machines was connected to an invalid
storage, and it was artificially failed).<br>
</div>
<div><br>
</div>
<div>this problem will cause:</div>
<div>After batch migration, the network of a virtual machine
cannot be accessed, </div>
<div>and the virtual machine service is interrupted<br>
</div>
<div><br>
</div>
<div>libvirt handles ovs logs:</div>
<div>Jun 10 19:11:32 zbs-sh-elf-11 ovs-vsctl:
ovs|00001|vsctl|INFO|Called as ovs-vsctl --timeout=5 --
--if-exists del-port vnet4 -- add-port ovsbr-mgt vnet4 tag=0
-- set Interface vnet4
"external-ids:attached-mac=\"52:54:00:92:7e:7f\"" -- set
Interface vnet4
"external-ids:iface-id=\"afb3a67a-5e5d-4ca6-b625-ebce6a9c8d03\""
-- set Interface vnet4
"external-ids:vm-id=\"7b9e4d5a-e8e9-4527-9b89-dd1f74d02526\""
-- set Interface vnet4 external-ids:iface-status=active<br>
Jun 10 19:11:32 zbs-sh-elf-11 kernel: device vnet4 entered
promiscuous mode<br>
Jun 10 19:11:32 zbs-sh-elf-11 kernel: device vnet4 left
promiscuous mode<br>
Jun 10 19:11:32 zbs-sh-elf-11 ovs-vsctl:
ovs|00001|vsctl|INFO|Called as ovs-vsctl --timeout=5 --
--if-exists del-port vnet4 -- add-port ovsbr-mgt vnet4 tag=0
-- set Interface vnet4
"external-ids:attached-mac=\"52:54:00:b7:f4:07\"" -- set
Interface vnet4
"external-ids:iface-id=\"c837d02d-4a4e-4f9c-9bee-7e5efce01a8e\""
-- set Interface vnet4
"external-ids:vm-id=\"83035f1e-faed-43d6-951e-08c90c9006a9\""
-- set Interface vnet4 external-ids:iface-status=active<br>
Jun 10 19:11:32 zbs-sh-elf-11 kernel: device vnet4 entered
promiscuous mode<br>
Jun 10 19:11:32 zbs-sh-elf-11 ovs-vsctl:
ovs|00001|vsctl|INFO|Called as ovs-vsctl --timeout=5 --
--if-exists del-port vnet4<br>
</div>
<div><br>
</div>
<div><br>
</div>
<div><span style="color:rgb(0,0,0);font-family:"Microsoft
YaHei
UI",Tahoma;font-size:14px;font-variant-numeric:normal;font-variant-east-asian:normal;line-height:normal">Thanks</span> <br>
</div>
</div>
<br>
<div class="gmail_quote">
<div dir="ltr" class="gmail_attr">Laine Stump <<a
href="mailto:laine@redhat.com" moz-do-not-send="true">laine@redhat.com</a>>
于2020年6月16日周二 上午10:01写道:<br>
</div>
<blockquote class="gmail_quote" style="margin:0px 0px 0px
0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">On
6/15/20 2:04 PM, Daniel Henrique Barboza wrote:<br>
><br>
><br>
> On 6/12/20 3:18 AM, <a href="mailto:gongwei@smartx.com"
target="_blank" moz-do-not-send="true">gongwei@smartx.com</a>
wrote:<br>
>> From: gongwei <<a href="mailto:gongwei@smartx.com"
target="_blank" moz-do-not-send="true">gongwei@smartx.com</a>><br>
>><br>
>> start to failed will not remove the openvswitch port,<br>
>> the port recycling in this case lets openvswitch
handle it by itself<br>
>><br>
>> Signed-off-by: gongwei <<a
href="mailto:gongwei@smartx.com" target="_blank"
moz-do-not-send="true">gongwei@smartx.com</a>><br>
>> ---<br>
><br>
> Can you please elaborate on the commit message? By the
commit title and<br>
> the code, I'm assuming that you're saying that we
shouldn't remove the<br>
> openvswitch port if the QEMU process failed to start, for
any other<br>
> reason aside from SHUTOFF_FAILED.<br>
<br>
<br>
More importantly, what "port recycling" will take effect
dependent on <br>
how the qemu process is stopped (which I would think wouldn't
make any <br>
different to OVS), and why is it necessary for libvirt to not
do it.<br>
<br>
<br>
Up until now, what I have known is that ports will not be
removed from <br>
an OVS switch unless they are explicitly removed with
ovs-vsctl, and <br>
this attachment will persist across reboots of the host
system. As a <br>
matter of fact I've had cases during development where libvirt
didn't <br>
remove the OVS port for a tap device when a guest was
terminated, and <br>
then many *days* (and several reboots) later the same tap
device name <br>
was used for a different guest that was using a Linux host
bridge, and <br>
the tap device failed to attach to the Linux host bridge
because it had <br>
already been auto-attached back to the OVS switch as soon as
it was created.<br>
<br>
<br>
Can you desccribe how to reproduce the situation where libvirt
removes <br>
the OVS port when it shouldn't, and what is the bad outcome of
that <br>
happening?<br>
<br>
<br>
<br>
><br>
> The code itself looks ok.<br>
><br>
><br>
><br>
>> src/qemu/qemu_process.c | 3 ++-<br>
>> 1 file changed, 2 insertions(+), 1 deletion(-)<br>
>><br>
>> diff --git a/src/qemu/qemu_process.c
b/src/qemu/qemu_process.c<br>
>> index d36088ba98..439bd5b396 100644<br>
>> --- a/src/qemu/qemu_process.c<br>
>> +++ b/src/qemu/qemu_process.c<br>
>> @@ -7482,7 +7482,8 @@ void
qemuProcessStop(virQEMUDriverPtr driver,<br>
>> if (vport) {<br>
>> if (vport->virtPortType == <br>
>> VIR_NETDEV_VPORT_PROFILE_MIDONET) {<br>
>> ignore_value(virNetDevMidonetUnbindPort(vport));<br>
>> - } else if (vport->virtPortType == <br>
>> VIR_NETDEV_VPORT_PROFILE_OPENVSWITCH) {<br>
>> + } else if (vport->virtPortType == <br>
>> VIR_NETDEV_VPORT_PROFILE_OPENVSWITCH &&<br>
>> + reason !=
VIR_DOMAIN_SHUTOFF_FAILED) {<br>
>>
ignore_value(virNetDevOpenvswitchRemovePort(<br>
>> virDomainNetGetActualBridgeName(net),<br>
>> net->ifname));<br>
>><br>
><br>
<br>
</blockquote>
</div>
<br clear="all">
<div><br>
</div>
-- <br>
<div dir="ltr" class="gmail_signature">
<div dir="ltr">
<p style="font-size:12.8px"><span
style="font-family:tahoma,sans-serif;font-size:small">龚伟</span><br>
</p>
<p style="font-size:12.8px"><img
src="https://docs.google.com/a/smartx.com/uc?id=0B6v_9z-4gTszRGFCWVFMSGlsMVE&export=download"
moz-do-not-send="true"><br>
</p>
<p style="font-size:12.8px"><span style="font-size:12.8px">手机:18883262137</span></p>
</div>
</div>
</blockquote>
<p><br>
</p>
</body>
</html>