Comment 2 for bug 1602614

venkata anil (anil-venkata) wrote :

Existing approach -

steps that happen without neutron involvement during failover
1) keepalived assigns ip address to qr-xx and sends GARP

neutron involvement during failover
2) keepalived-state-change-monitor writes to unix domain socket about address assignment
3) l3 agent will spawn radvd and metadata proxy processes, and then call neutron server for update_routers_states
4) While server updating the router states, it calls port update with new master router agent
5) plugin's port update will notify l2 agent
6) l2 agent will again wireup and call
    a) port status update with BUILD as status
    b) then again port status update with ACTIVE as status
7) plugin side, l2pop driver will process each port status update.
   When status transitions from BUILD->ACTIVE, l2pop driver will notify agents to add unicast and multicast entries for this port and agent.
8) l2 agent's l2pop will create flood flows(i.e table 22) and unicast flows(i.e table 20) on br-tun
With this, complete wiring for the packets between agents is finished and now, and vms across nodes can use the new HA master router.

New approach (i.e - https://review.openstack.org/#/c/323314/)

During router interface add(and not during failover), port is bound and wired up on all HA agents. So l2pop will create multicast flows(and no unicast flows) to all HA agents.

steps that happen without neutron involvement during failover
1) keepalived assigns ip address to qr-xx and sends GARP.
When the nodes receive GARP, they will add unicast flow to master router in table 20 because of learning action in table 10.
Without neutron involvement during failover, all flows are established and vms can reach router.

2) neutron involvement during failover -
  no involvement for wiring up and creating flows. Without neutron involvement, vms can reach master HA router.