Comment 2 for bug 1628408

Revision history for this message
Hong Hui Xiao (xiaohhui) wrote :

The cause of this error log is because concurrent operation. The steps are

1) A router is created.
2) router interface is added, and neutron will schedule the router to a l3-agent. It is the df-l3-agent in dragonflow's case. See [1]
3) When the l3-agent is chosen, and it will sync router from neutron-server. At the same time, it will update the router interface's bind-host, see [2].
4) In the update_port, neutron will check the port existence at the very beginning, see [3]
5) But the fullstack test will delete router soon after it is created. So, let's assume that the router and its interfaces are deleted after [3] but before [4]. From the log, DELETE request can be observed before the error update_port_postcommit. So, the port will be deleted from nb db before code hit [4]
6) When code hit [4], it will report error as port can't be found.

[1] https://github.com/openstack/neutron/blob/a80b89b6fe1611a68d34684d9e80ad606f115366/neutron/api/rpc/agentnotifiers/l3_rpc_agent_api.py#L101

[2] https://github.com/openstack/neutron/blob/a80b89b6fe1611a68d34684d9e80ad606f115366/neutron/api/rpc/handlers/l3_rpc.py#L152-L155

[3] https://github.com/openstack/neutron/blob/a80b89b6fe1611a68d34684d9e80ad606f115366/neutron/plugins/ml2/plugin.py#L1390-L1392

[4] https://github.com/openstack/neutron/blob/a80b89b6fe1611a68d34684d9e80ad606f115366/neutron/plugins/ml2/plugin.py#L1484