Activity log for bug #1535392

Date Who What changed Old value New value Message
2016-01-18 17:35:14 venkata anil bug added bug
2016-01-18 17:35:22 venkata anil neutron: assignee venkata anil (anil-venkata)
2016-01-18 17:44:19 OpenStack Infra neutron: status New In Progress
2016-01-18 18:06:39 Assaf Muller tags l2-pop
2016-01-26 18:41:56 venkata anil summary l2pop should use only binding info in db and not port status for db entries. Simplify l2pop driver code
2016-01-26 18:42:29 venkata anil description l2pop should use only binding info in db and not port status for db entries. Expected: 1) port creation - after binding, l2pop should send add_fdb_entries with new port info. 2) port deletion - after deleting port in db(and binding levels), l2pop should send remove_fdb_entries with deleted port info. 3) migration - a) after clearing the binding levels from old host, l2pop should send remove_fdb_entries with old host and port info. b) after binding to new host, l2pop should send add_fdb_entries with new host and port info. With a new change, l2pop should work for only create_port, update_port and delete_port notifications and ignore get_device_details, update_device_down and update_device_up notifications. context for bug is Kevin's comment in patchset 13 https://review.openstack.org/#/c/215467/ Simplify l2pop driver code. Currently l2pop driver in server does two tasks 1) notify port info to other remote agents. When remote agents get this notification, they add unicast address flow 2) identify when first/last port(on a network) is created on a agent and a) notify other remote agents to add flood flow to this agent. b) notify current host about all ports(in that network), so that the current host can create tunnels and flows to remote agents. Currently agent receives these notifications from server, and creates flows and ports. When multiple api and rpc workers enabled for neutron-server, current implementation has a problem. neutron-server can't perform second task(i.e identify when first/last port(on a network) is created on a agent) properly. For example, If we have below scenario - setup: we have server(with multiple api and rpc workers), compute1 and compute2 nodes. Two ports are created on compute2 node., in the following sequence, Server's worker1 creates port1(first port) in DB and before this worker's l2pop driver code executed, worker2 creates a port2(second port) in DB. In this scenario, worker1's l2pop driver checks for compute2's ports in DB, it gets 2 ports and ignores notifying to compute1 about creating FLOOD_FLOW to compute2. Because of this compute1 will never have FLOOD_FLOW to compute1. Similarly FLOOD FOW deletion notification is also not sent. And also compute2 won't get compute1's port info, hence compute1 can't create flood flows to compute 2. As this task(identifying first/last port on agent on a network) can't be done in server, this implementation has to go to l2 agent. L2 agents should able to identify when first/last port(on network) on other agent is created/deleted and accordingly create and delete flood flows(and remove tunnel ports also). Another issue is with 1st task above - l2pop driver unable to properly decide about port add/remove notifications when it gets called with different port status from nova and l2 agents through different workers during instance migrations. There were many suggestions to modify the port status in plugin(some suggested to change it to BUILD, some reviewers to DOWN, etc ..) during migration(see the comments in https://review.openstack.org/#/c/215467/ ), so that l2pop can properly decide about port's binding host based on status. Deciding about which status to set to port in plugin and using the same in l2pop driver is confusing, and reviewers giving different opinion(comments in https://review.openstack.org/#/c/215467/ ). Kevin suggested that l2pop shouldn't depend on port status for deciding about host. Instead it should use binding info in db, which reviewers of the patch( https://review.openstack.org/#/c/215467/) agreed.
2016-03-10 12:21:11 venkata anil description Simplify l2pop driver code. Currently l2pop driver in server does two tasks 1) notify port info to other remote agents. When remote agents get this notification, they add unicast address flow 2) identify when first/last port(on a network) is created on a agent and a) notify other remote agents to add flood flow to this agent. b) notify current host about all ports(in that network), so that the current host can create tunnels and flows to remote agents. Currently agent receives these notifications from server, and creates flows and ports. When multiple api and rpc workers enabled for neutron-server, current implementation has a problem. neutron-server can't perform second task(i.e identify when first/last port(on a network) is created on a agent) properly. For example, If we have below scenario - setup: we have server(with multiple api and rpc workers), compute1 and compute2 nodes. Two ports are created on compute2 node., in the following sequence, Server's worker1 creates port1(first port) in DB and before this worker's l2pop driver code executed, worker2 creates a port2(second port) in DB. In this scenario, worker1's l2pop driver checks for compute2's ports in DB, it gets 2 ports and ignores notifying to compute1 about creating FLOOD_FLOW to compute2. Because of this compute1 will never have FLOOD_FLOW to compute1. Similarly FLOOD FOW deletion notification is also not sent. And also compute2 won't get compute1's port info, hence compute1 can't create flood flows to compute 2. As this task(identifying first/last port on agent on a network) can't be done in server, this implementation has to go to l2 agent. L2 agents should able to identify when first/last port(on network) on other agent is created/deleted and accordingly create and delete flood flows(and remove tunnel ports also). Another issue is with 1st task above - l2pop driver unable to properly decide about port add/remove notifications when it gets called with different port status from nova and l2 agents through different workers during instance migrations. There were many suggestions to modify the port status in plugin(some suggested to change it to BUILD, some reviewers to DOWN, etc ..) during migration(see the comments in https://review.openstack.org/#/c/215467/ ), so that l2pop can properly decide about port's binding host based on status. Deciding about which status to set to port in plugin and using the same in l2pop driver is confusing, and reviewers giving different opinion(comments in https://review.openstack.org/#/c/215467/ ). Kevin suggested that l2pop shouldn't depend on port status for deciding about host. Instead it should use binding info in db, which reviewers of the patch( https://review.openstack.org/#/c/215467/) agreed. Simplify l2pop driver code. l2pop driver unable to properly decide about port add/remove notifications when it gets called with different port status from nova and l2 agents through different workers during instance migrations. There were many suggestions to modify the port status in plugin(some suggested to change it to BUILD, some reviewers to DOWN, etc ..) during migration(see the comments in https://review.openstack.org/#/c/215467/ ), so that l2pop can properly decide about port's binding host based on status. Deciding about which status to set to port in plugin and using the same in l2pop driver is confusing, and reviewers giving different opinion(comments in https://review.openstack.org/#/c/215467/ ). Kevin suggested that l2pop shouldn't depend on port status for deciding about host. Instead it should use binding info in db, which reviewers of the patch( https://review.openstack.org/#/c/215467/) agreed. note: There was a separate bug https://bugs.launchpad.net/neutron/+bug/1555600 reported for "agents fail to create flood flows with multiple workers"
2016-12-23 13:17:03 Armando Migliaccio neutron: status In Progress Incomplete
2016-12-23 13:17:03 Armando Migliaccio neutron: assignee venkata anil (anil-venkata)
2017-02-22 04:22:11 Launchpad Janitor neutron: status Incomplete Expired