yahoo-eng-team team mailing list archive
-
yahoo-eng-team team
-
Mailing list archive
-
Message #88262
[Bug 1942329] Re: MAC address of direct-physical port is not updated during migration
I tried to fix this by updating the mac_address field for the port when
the port is being bound to the target host of a move operation. But
Neutron rejects the update as the mac_address cannot be changed on an
already bound port and this port is currently bound to the source host
of the migration. Nova does an atomic re-bind during migration, by
changing the binding:host_id of the port from the source host to the
destination. So there is no time window to update the MAC.
The only way forward I see that neutron needs to allow MAC update on a
bound port in the same request where the binding:host_id is changed.
Currently neutron reject the update with:
Feb 14 17:13:23 node0 nova-compute[3131239]: ERROR oslo_messaging.rpc.server neutronclient.common.exceptions.Conflict: Unable to complete operation on port 168a0263-5ae5-44f3-9be9-32fcf6d30f05, port is already bound, port type: hostdev_physical, old_mac b4:96:91:34:f4:36, new_mac b4:96:91:34:ed:d6.
** Also affects: neutron
Importance: Undecided
Status: New
--
You received this bug notification because you are a member of Yahoo!
Engineering Team, which is subscribed to neutron.
https://bugs.launchpad.net/bugs/1942329
Title:
MAC address of direct-physical port is not updated during migration
Status in neutron:
New
Status in OpenStack Compute (nova):
Triaged
Bug description:
Description
===========
Nova update the MAC of the direct-physical port based on the MAC of the PF selected during the initial boot of the VM. But Nova does not update the MAC when the VM is migrated to another compute and therefore using another PF.
Steps to reproduce
==================
Needs a multi node devstack with available SRIOV PFs.
stack@master0:~$ openstack hypervisor list
+----+---------------------+-----------------+-----------+-------+
| ID | Hypervisor Hostname | Hypervisor Type | Host IP | State |
+----+---------------------+-----------------+-----------+-------+
| 1 | master0 | QEMU | 10.1.0.21 | up |
| 2 | node0 | QEMU | 10.1.0.22 | up |
+----+---------------------+-----------------+-----------+-------+
stack@master0:~$ mysql -D nova_cell1 -e "select status, address, parent_addr, dev_type, compute_node_id, product_id, instance_uuid from pci_devices;"
+-----------+--------------+--------------+----------+-----------------+------------+---------------+
| status | address | parent_addr | dev_type | compute_node_id | product_id | instance_uuid |
+-----------+--------------+--------------+----------+-----------------+------------+---------------+
| available | 0000:81:00.0 | NULL | type-PF | 1 | 154d | NULL |
| available | 0000:81:00.1 | NULL | type-PF | 1 | 154d | NULL |
| available | 0000:81:10.0 | 0000:81:00.0 | type-VF | 1 | 10ed | NULL |
| available | 0000:81:10.2 | 0000:81:00.0 | type-VF | 1 | 10ed | NULL |
| available | 0000:81:10.4 | 0000:81:00.0 | type-VF | 1 | 10ed | NULL |
| available | 0000:81:10.6 | 0000:81:00.0 | type-VF | 1 | 10ed | NULL |
| available | 0000:81:00.0 | NULL | type-PF | 2 | 154d | NULL |
| available | 0000:81:00.1 | NULL | type-PF | 2 | 154d | NULL |
| available | 0000:81:10.0 | 0000:81:00.0 | type-VF | 2 | 10ed | NULL |
| available | 0000:81:10.2 | 0000:81:00.0 | type-VF | 2 | 10ed | NULL |
| available | 0000:81:10.4 | 0000:81:00.0 | type-VF | 2 | 10ed | NULL |
| available | 0000:81:10.6 | 0000:81:00.0 | type-VF | 2 | 10ed | NULL |
+-----------+--------------+--------------+----------+-----------------+------------+---------------+
These are the PF MAC's
stack@master0:~$ ip a | grep b4:96:91:34
link/ether b4:96:91:34:f4:34 brd ff:ff:ff:ff:ff:ff
link/ether b4:96:91:34:f4:36 brd ff:ff:ff:ff:ff:ff
stack@node0:~/nova$ ip a | grep b4:96:91:34
link/ether b4:96:91:34:ed:d4 brd ff:ff:ff:ff:ff:ff
link/ether b4:96:91:34:ed:d6 brd ff:ff:ff:ff:ff:ff
1) create a port with vnic_type=directy-physical
stack@master0:~$ openstack port show port-direct-physical
+-------------------------+---------------------------------------------------------------------------+
| Field | Value |
+-------------------------+---------------------------------------------------------------------------+
| admin_state_up | UP |
| allowed_address_pairs | |
| binding_host_id | |
| binding_profile | physical_network='physnet0' |
| binding_vif_details | |
| binding_vif_type | unbound |
| binding_vnic_type | direct-physical |
| created_at | 2021-08-19T12:02:06Z |
| data_plane_status | None |
| description | |
| device_id | |
| device_owner | |
| device_profile | None |
| dns_assignment | None |
| dns_domain | None |
| dns_name | None |
| extra_dhcp_opts | |
| fixed_ips | ip_address='10.0.4.227', subnet_id='a3960124-77c3-4127-8a91-9ae99ed552ea' |
| id | 864ee6f2-2e72-47b6-9917-6b8e931afc3e |
| ip_allocation | None |
| mac_address | fa:16:3e:71:fe:26 |
| name | port-direct-physical |
| network_id | 96d669e1-0c1e-474e-aad6-57cd9e026980 |
| numa_affinity_policy | None |
| port_security_enabled | True |
| project_id | 493cf4fe555d4ea0b50bdd46a8edf5c2 |
| propagate_uplink_status | None |
| qos_network_policy_id | None |
| qos_policy_id | None |
| resource_request | None |
| revision_number | 10 |
| security_group_ids | 16150c45-2217-4e73-8e4d-ca946cbc21cc |
| status | DOWN |
| tags | |
| trunk_details | None |
| updated_at | 2021-09-01T13:12:42Z |
+-------------------------+---------------------------------------------------------------------------+
2) boot a VM with that port
stack@master0:~$ openstack --os-compute-api-version 2.80 server create
--image cirros-0.5.2-x86_64-disk --flavor c1 --nic port-id=port-
direct-physical vm1 --wait
+-------------------------------------+-----------------------------------------------------------------------------------------------------------------------+
| Field | Value |
+-------------------------------------+-----------------------------------------------------------------------------------------------------------------------+
| OS-DCF:diskConfig | MANUAL |
| OS-EXT-AZ:availability_zone | nova |
| OS-EXT-SRV-ATTR:host | node0 |
| OS-EXT-SRV-ATTR:hostname | vm1 |
| OS-EXT-SRV-ATTR:hypervisor_hostname | node0 |
| OS-EXT-SRV-ATTR:instance_name | instance-000000ff |
| OS-EXT-SRV-ATTR:kernel_id | |
| OS-EXT-SRV-ATTR:launch_index | 0 |
| OS-EXT-SRV-ATTR:ramdisk_id | |
| OS-EXT-SRV-ATTR:reservation_id | r-ou2kcw3c |
| OS-EXT-SRV-ATTR:root_device_name | /dev/vda |
| OS-EXT-SRV-ATTR:user_data | None |
| OS-EXT-STS:power_state | Running |
| OS-EXT-STS:task_state | None |
| OS-EXT-STS:vm_state | active |
| OS-SRV-USG:launched_at | 2021-09-01T13:23:26.000000 |
| OS-SRV-USG:terminated_at | None |
| accessIPv4 | |
| accessIPv6 | |
| addresses | net0=10.0.4.227 |
| adminPass | B5Zje4m3vbq6 |
| config_drive | |
| created | 2021-09-01T13:23:23Z |
| description | None |
| flavor | disk='1', ephemeral='0', extra_specs.hw_rng:allowed='True', original_name='cirros256', ram='256', swap='0', vcpus='1' |
| hostId | 512757d0f0cb65d56c6cabcc54b317bbc1c73dbbe8eb603d9452bc59 |
| host_status | UP |
| id | 4707526d-6980-4af7-9476-d85e3f6aec4f |
| image | cirros-0.5.2-x86_64-disk (1193639c-3c6a-4d3c-9c66-ce1ab741a9d3) |
| key_name | None |
| locked | False |
| locked_reason | None |
| name | vm1 |
| progress | 0 |
| project_id | 493cf4fe555d4ea0b50bdd46a8edf5c2 |
| properties | |
| security_groups | name='default' |
| server_groups | [] |
| status | ACTIVE |
| tags | |
| trusted_image_certificates | None |
| updated | 2021-09-01T13:23:26Z |
| user_id | e08f3a84c1484d6ebdde1faf24fd0373 |
| volumes_attached | |
+-------------------------------------+-----------------------------------------------------------------------------------------------------------------------+
3) Observer the the VM is booted on node0 and check that the MAC of
the port is updated to the mac of one of the PF on node0
stack@master0:~$ openstack port show port-direct-physical | grep mac
| mac_address | b4:96:91:34:ed:d6 |
4) Cold migrate the VM
stack@master0:~$ openstack server migrate vm1
stack@master0:~$ openstack server migration confirm vm1
5) Observe that the VM is now running on master0 but MAC of the port
is not changed
stack@master0:~$ openstack server show vm1 | grep hypervisor
| OS-EXT-SRV-ATTR:hypervisor_hostname | master0 |
stack@master0:~$ openstack port show port-direct-physical | grep mac
| mac_address | b4:96:91:34:ed:d6 |
Expected behavior
=================
The MAC of the neutron port is updated according the the MAC of the PF
on master0
Environment
===========
multinode devstack on recent master (nova on 033af94179)
To manage notifications about this bug go to:
https://bugs.launchpad.net/neutron/+bug/1942329/+subscriptions
References