The follwoing trace can be seen on Kilo code during router failover:
28608 ERROR neutron.db.l3_agentschedulers_db [req-a4af4755-6bf4-4082-bf0f-f5ad12e341ac ] Exception encountered during router rescheduling.
28608 TRACE neutron.db.l3_agentschedulers_db Traceback (most recent call last):
28608 TRACE neutron.db.l3_agentschedulers_db File "/usr/lib/python2.7/dist-packages/neutron/db/l3_agentschedulers_db.py", line 121, in reschedule_routers_from_down_agents
28608 TRACE neutron.db.l3_agentschedulers_db self.reschedule_router(context, binding.router_id)
28608 TRACE neutron.db.l3_agentschedulers_db File "/usr/lib/python2.7/dist-packages/neutron/db/l3_agentschedulers_db.py", line 263, in reschedule_router
28608 TRACE neutron.db.l3_agentschedulers_db self._unbind_router(context, router_id, agent['id'])
28608 TRACE neutron.db.l3_agentschedulers_db File "/usr/lib/python2.7/dist-packages/neutron/db/l3_dvrscheduler_db.py", line 357, in _unbind_router
28608 TRACE neutron.db.l3_agentschedulers_db self.unbind_snat_servicenode(context, router_id)
28608 TRACE neutron.db.l3_agentschedulers_db File "/usr/lib/python2.7/dist-packages/neutron/db/l3_dvrscheduler_db.py", line 317, in unbind_snat_servicenode
28608 TRACE neutron.db.l3_agentschedulers_db binding = self.unbind_snat(context, router_id)
28608 TRACE neutron.db.l3_agentschedulers_db File "/usr/lib/python2.7/dist-packages/neutron/db/l3_dvrscheduler_db.py", line 265, in unbind_snat
28608 TRACE neutron.db.l3_agentschedulers_db binding = query.one()
28608 TRACE neutron.db.l3_agentschedulers_db File "/usr/lib/python2.7/dist-packages/sqlalchemy/orm/query.py", line 2378, in one
28608 TRACE neutron.db.l3_agentschedulers_db "Multiple rows were found for one()")
28608 TRACE neutron.db.l3_agentschedulers_db MultipleResultsFound: Multiple rows were found for one()
User impact: In case such condition is hit (multiple bindings for snat router) rescheduling will always fail, potentially preventing routers to failover.
patch is here: https:/ /review. openstack. org/#/c/ 221692/