)]}'
{"neutron/agent/l3/agent.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"11748a84030b6a4d920e99cecf968a5ae1526591","unresolved":false,"context_lines":[{"line_number":575,"context_line":"                            ns_manager.keep_ext_net(ext_net_id)"},{"line_number":576,"context_line":"                        elif is_snat_agent:"},{"line_number":577,"context_line":"                            ns_manager.ensure_snat_cleanup(r[\u0027id\u0027])"},{"line_number":578,"context_line":"                    # For HA routers report about master state to server"},{"line_number":579,"context_line":"                    if r.get(\u0027ha\u0027):"},{"line_number":580,"context_line":"                        self.check_ha_state_for_router("},{"line_number":581,"context_line":"                            r[\u0027id\u0027], r.get(l3_constants.HA_ROUTER_STATE_KEY))"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a57fde8_a06f1191","line":578,"range":{"start_line":578,"start_character":37,"end_line":578,"end_character":72},"updated":"2017-01-12 16:25:45.000000000","message":"s/check DB state matches actual state\n\nside-effect of changing the code to check more than just master state.","commit_id":"d4093abf69e8d12f7b7db84941317376e93300fd"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"52619ee03a1059f391a7de487a8327cd5f4d53ee","unresolved":false,"context_lines":[{"line_number":575,"context_line":"                            ns_manager.keep_ext_net(ext_net_id)"},{"line_number":576,"context_line":"                        elif is_snat_agent:"},{"line_number":577,"context_line":"                            ns_manager.ensure_snat_cleanup(r[\u0027id\u0027])"},{"line_number":578,"context_line":"                    # For HA routers report about master state to server"},{"line_number":579,"context_line":"                    if r.get(\u0027ha\u0027):"},{"line_number":580,"context_line":"                        self.check_ha_state_for_router("},{"line_number":581,"context_line":"                            r[\u0027id\u0027], r.get(l3_constants.HA_ROUTER_STATE_KEY))"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a3c09a3_3c49938c","line":578,"range":{"start_line":578,"start_character":37,"end_line":578,"end_character":72},"in_reply_to":"9a57fde8_a06f1191","updated":"2017-01-13 06:40:15.000000000","message":"Done","commit_id":"d4093abf69e8d12f7b7db84941317376e93300fd"}],"neutron/agent/l3/ha.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"07ea5ddca21eb5b50dd7c038c023fecbc5765a5c","unresolved":false,"context_lines":[{"line_number":83,"context_line":"        except KeyError:"},{"line_number":84,"context_line":"            LOG.info(_LI(\u0027Router %s is not managed by this agent. It was \u0027"},{"line_number":85,"context_line":"                         \u0027possibly deleted concurrently.\u0027), router_id)"},{"line_number":86,"context_line":"            return"},{"line_number":87,"context_line":"        if ri.ha_state \u003d\u003d \u0027master\u0027:"},{"line_number":88,"context_line":"            LOG.debug(\"Updating server with state %(state)s for router \""},{"line_number":89,"context_line":"                      \"%(router_id)\", {\u0027router_id\u0027: router_id,"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a6eadb0_4fadd999","line":86,"updated":"2016-12-16 13:46:21.000000000","message":"I saw L113-118 and almost thought about making a common function to get the router_info since the log messages are the same, but I think it will add more lined of code to do that :(\n\nAlso, is there a test for this code?  Both positive and negative?","commit_id":"787f7a68b5e1b2a9df1b4422d936608dd69a74ca"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"7b7c5fda7c7092a7801fa841a18c7b880d66c789","unresolved":false,"context_lines":[{"line_number":83,"context_line":"        except KeyError:"},{"line_number":84,"context_line":"            LOG.info(_LI(\u0027Router %s is not managed by this agent. It was \u0027"},{"line_number":85,"context_line":"                         \u0027possibly deleted concurrently.\u0027), router_id)"},{"line_number":86,"context_line":"            return"},{"line_number":87,"context_line":"        if ri.ha_state \u003d\u003d \u0027master\u0027:"},{"line_number":88,"context_line":"            LOG.debug(\"Updating server with state %(state)s for router \""},{"line_number":89,"context_line":"                      \"%(router_id)\", {\u0027router_id\u0027: router_id,"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a6eadb0_d2a7cea4","line":86,"in_reply_to":"1a6eadb0_4fadd999","updated":"2016-12-16 14:02:44.000000000","message":"I want to make sure that we are fine with this approach at first :) so test coverage is missing for now.","commit_id":"787f7a68b5e1b2a9df1b4422d936608dd69a74ca"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"07ea5ddca21eb5b50dd7c038c023fecbc5765a5c","unresolved":false,"context_lines":[{"line_number":86,"context_line":"            return"},{"line_number":87,"context_line":"        if ri.ha_state \u003d\u003d \u0027master\u0027:"},{"line_number":88,"context_line":"            LOG.debug(\"Updating server with state %(state)s for router \""},{"line_number":89,"context_line":"                      \"%(router_id)\", {\u0027router_id\u0027: router_id,"},{"line_number":90,"context_line":"                                       \u0027state\u0027: ri.state})"},{"line_number":91,"context_line":"            self.state_change_notifier.queue_event((router_id, ri.ha_state))"},{"line_number":92,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"1a6eadb0_2fdc1d45","line":89,"range":{"start_line":89,"start_character":23,"end_line":89,"end_character":35},"updated":"2016-12-16 13:46:21.000000000","message":"%(router_id)s (missing s).  I\u0027m hoping the test catches it?","commit_id":"787f7a68b5e1b2a9df1b4422d936608dd69a74ca"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"7b7c5fda7c7092a7801fa841a18c7b880d66c789","unresolved":false,"context_lines":[{"line_number":86,"context_line":"            return"},{"line_number":87,"context_line":"        if ri.ha_state \u003d\u003d \u0027master\u0027:"},{"line_number":88,"context_line":"            LOG.debug(\"Updating server with state %(state)s for router \""},{"line_number":89,"context_line":"                      \"%(router_id)\", {\u0027router_id\u0027: router_id,"},{"line_number":90,"context_line":"                                       \u0027state\u0027: ri.state})"},{"line_number":91,"context_line":"            self.state_change_notifier.queue_event((router_id, ri.ha_state))"},{"line_number":92,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"1a6eadb0_32348248","line":89,"range":{"start_line":89,"start_character":23,"end_line":89,"end_character":35},"in_reply_to":"1a6eadb0_2fdc1d45","updated":"2016-12-16 14:02:44.000000000","message":"oops, pep8 was success","commit_id":"787f7a68b5e1b2a9df1b4422d936608dd69a74ca"},{"author":{"_account_id":19611,"name":"Brian Stajkowski","email":"brian.stajkowski@rackspace.com","username":"ski"},"change_message_id":"f6dd5f0c2c143285ca3e432d8176344c488c5ff6","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        if ri and ri.ha_state \u003d\u003d \u0027master\u0027:"},{"line_number":91,"context_line":"            LOG.debug(\"Updating server with state %(state)s for router \""},{"line_number":92,"context_line":"                      \"%(router_id)\", {\u0027router_id\u0027: router_id,"},{"line_number":93,"context_line":"                                       \u0027state\u0027: ri.state})"},{"line_number":94,"context_line":"            self.state_change_notifier.queue_event((router_id, ri.ha_state))"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    def _start_keepalived_notifications_server(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba5201f7_a0224a50","line":93,"updated":"2017-01-04 18:03:15.000000000","message":"Getting traceback:\n\n2017-01-04 10:00:42.533 TRACE oslo_service.periodic_task Traceback (most recent call last):\n2017-01-04 10:00:42.533 TRACE oslo_service.periodic_task   File \"/usr/local/lib/python2.7/dist-packages/oslo_service/periodic_task.py\", line 220, in run_periodic_tasks\n2017-01-04 10:00:42.533 TRACE oslo_service.periodic_task     task(self, context)\n2017-01-04 10:00:42.533 TRACE oslo_service.periodic_task   File \"/opt/stack/neutron/neutron/agent/l3/agent.py\", line 547, in periodic_sync_routers_task\n2017-01-04 10:00:42.533 TRACE oslo_service.periodic_task     self.fetch_and_sync_all_routers(context, ns_manager)\n2017-01-04 10:00:42.533 TRACE oslo_service.periodic_task   File \"/usr/local/lib/python2.7/dist-packages/osprofiler/profiler.py\", line 154, in wrapper\n2017-01-04 10:00:42.533 TRACE oslo_service.periodic_task     return f(*args, **kwargs)\n2017-01-04 10:00:42.533 TRACE oslo_service.periodic_task   File \"/opt/stack/neutron/neutron/agent/l3/agent.py\", line 580, in fetch_and_sync_all_routers\n2017-01-04 10:00:42.533 TRACE oslo_service.periodic_task     self.check_ha_state_for_router(r[\u0027id\u0027])\n2017-01-04 10:00:42.533 TRACE oslo_service.periodic_task   File \"/opt/stack/neutron/neutron/agent/l3/ha.py\", line 93, in check_ha_state_for_router\n2017-01-04 10:00:42.533 TRACE oslo_service.periodic_task     \u0027state\u0027: ri.state})\n2017-01-04 10:00:42.533 TRACE oslo_service.periodic_task AttributeError: \u0027DvrEdgeHaRouter\u0027 object has no attribute \u0027state\u0027\n\n\ndid you mean ha_state?","commit_id":"778cf9103dd7f9443f687620243389eb365dc850"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"9a935d3092dbce3407e07bcfbbd38ab74c5e92a5","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        if ri and ri.ha_state \u003d\u003d \u0027master\u0027:"},{"line_number":91,"context_line":"            LOG.debug(\"Updating server with state %(state)s for router \""},{"line_number":92,"context_line":"                      \"%(router_id)\", {\u0027router_id\u0027: router_id,"},{"line_number":93,"context_line":"                                       \u0027state\u0027: ri.state})"},{"line_number":94,"context_line":"            self.state_change_notifier.queue_event((router_id, ri.ha_state))"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    def _start_keepalived_notifications_server(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba5201f7_1223eb56","line":93,"in_reply_to":"ba5201f7_a0224a50","updated":"2017-01-09 08:58:37.000000000","message":"oops, thanks!","commit_id":"778cf9103dd7f9443f687620243389eb365dc850"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"a1c3d60329689dc92d754269378ac154d6a49f25","unresolved":false,"context_lines":[{"line_number":83,"context_line":"        except KeyError:"},{"line_number":84,"context_line":"            LOG.info(_LI(\u0027Router %s is not managed by this agent. It was \u0027"},{"line_number":85,"context_line":"                         \u0027possibly deleted concurrently.\u0027), router_id)"},{"line_number":86,"context_line":"            return"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    def check_ha_state_for_router(self, router_id):"},{"line_number":89,"context_line":"        ri \u003d self._get_router_info(router_id)"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba5201f7_b4c47d40","line":86,"updated":"2017-01-10 17:24:05.000000000","message":"Unneeded return statement","commit_id":"1e4c0ff3cec9213f76fe6967834746fdcf892aae"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"fe9b3ce781e5b5af6cf970aac337be436575b67f","unresolved":false,"context_lines":[{"line_number":83,"context_line":"        except KeyError:"},{"line_number":84,"context_line":"            LOG.info(_LI(\u0027Router %s is not managed by this agent. It was \u0027"},{"line_number":85,"context_line":"                         \u0027possibly deleted concurrently.\u0027), router_id)"},{"line_number":86,"context_line":"            return"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    def check_ha_state_for_router(self, router_id):"},{"line_number":89,"context_line":"        ri \u003d self._get_router_info(router_id)"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba5201f7_ce72387c","line":86,"in_reply_to":"ba5201f7_b4c47d40","updated":"2017-01-11 07:09:31.000000000","message":"Done","commit_id":"1e4c0ff3cec9213f76fe6967834746fdcf892aae"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"a1c3d60329689dc92d754269378ac154d6a49f25","unresolved":false,"context_lines":[{"line_number":89,"context_line":"        ri \u003d self._get_router_info(router_id)"},{"line_number":90,"context_line":"        if ri and ri.ha_state \u003d\u003d \u0027master\u0027:"},{"line_number":91,"context_line":"            LOG.debug(\"Updating server with state %(state)s for router \""},{"line_number":92,"context_line":"                      \"%(router_id)\", {\u0027router_id\u0027: router_id,"},{"line_number":93,"context_line":"                                       \u0027state\u0027: ri.ha_state})"},{"line_number":94,"context_line":"            self.state_change_notifier.queue_event((router_id, ri.ha_state))"},{"line_number":95,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"ba5201f7_d4710146","line":92,"range":{"start_line":92,"start_character":23,"end_line":92,"end_character":35},"updated":"2017-01-10 17:24:05.000000000","message":"%(router_id)s","commit_id":"1e4c0ff3cec9213f76fe6967834746fdcf892aae"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"fe9b3ce781e5b5af6cf970aac337be436575b67f","unresolved":false,"context_lines":[{"line_number":89,"context_line":"        ri \u003d self._get_router_info(router_id)"},{"line_number":90,"context_line":"        if ri and ri.ha_state \u003d\u003d \u0027master\u0027:"},{"line_number":91,"context_line":"            LOG.debug(\"Updating server with state %(state)s for router \""},{"line_number":92,"context_line":"                      \"%(router_id)\", {\u0027router_id\u0027: router_id,"},{"line_number":93,"context_line":"                                       \u0027state\u0027: ri.ha_state})"},{"line_number":94,"context_line":"            self.state_change_notifier.queue_event((router_id, ri.ha_state))"},{"line_number":95,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"ba5201f7_ee6d3c9a","line":92,"range":{"start_line":92,"start_character":23,"end_line":92,"end_character":35},"in_reply_to":"ba5201f7_d4710146","updated":"2017-01-11 07:09:31.000000000","message":"Done","commit_id":"1e4c0ff3cec9213f76fe6967834746fdcf892aae"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"f0a8133f209c10d30f862df63d4ca60fafb34484","unresolved":false,"context_lines":[{"line_number":90,"context_line":"            LOG.debug(\"Updating server with state %(state)s for router \""},{"line_number":91,"context_line":"                      \"%(router_id)s\", {\u0027router_id\u0027: router_id,"},{"line_number":92,"context_line":"                                        \u0027state\u0027: ri.ha_state})"},{"line_number":93,"context_line":"            self.state_change_notifier.queue_event((router_id, ri.ha_state))"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    def _start_keepalived_notifications_server(self):"},{"line_number":96,"context_line":"        state_change_server \u003d ("}],"source_content_type":"text/x-python","patch_set":4,"id":"ba5201f7_8c0acd88","line":93,"updated":"2017-01-11 21:13:51.000000000","message":"So on every full-sync, the l3-agent will now send state back to the server, increasing the number of messages for rabbit. Is there no way to only send the update when the state is different?","commit_id":"2f8f562c7782589c8bb43647918dbf75a44c1235"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"0050d16c122683e11d30c1bdcf9cb8808b208f12","unresolved":false,"context_lines":[{"line_number":90,"context_line":"            LOG.debug(\"Updating server with state %(state)s for router \""},{"line_number":91,"context_line":"                      \"%(router_id)s\", {\u0027router_id\u0027: router_id,"},{"line_number":92,"context_line":"                                        \u0027state\u0027: ri.ha_state})"},{"line_number":93,"context_line":"            self.state_change_notifier.queue_event((router_id, ri.ha_state))"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    def _start_keepalived_notifications_server(self):"},{"line_number":96,"context_line":"        state_change_server \u003d ("}],"source_content_type":"text/x-python","patch_set":4,"id":"9a57fde8_153f5426","line":93,"in_reply_to":"ba5201f7_8c0acd88","updated":"2017-01-12 10:24:09.000000000","message":"Done","commit_id":"2f8f562c7782589c8bb43647918dbf75a44c1235"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"f0a8133f209c10d30f862df63d4ca60fafb34484","unresolved":false,"context_lines":[{"line_number":113,"context_line":"                  \u0027state\u0027: state})"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"        ri \u003d self._get_router_info(router_id)"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"        if ri is None:"},{"line_number":118,"context_line":"            return"},{"line_number":119,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"ba5201f7_c63846d6","line":116,"updated":"2017-01-11 21:13:51.000000000","message":"super nit: extra blank line","commit_id":"2f8f562c7782589c8bb43647918dbf75a44c1235"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"0050d16c122683e11d30c1bdcf9cb8808b208f12","unresolved":false,"context_lines":[{"line_number":113,"context_line":"                  \u0027state\u0027: state})"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"        ri \u003d self._get_router_info(router_id)"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"        if ri is None:"},{"line_number":118,"context_line":"            return"},{"line_number":119,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9a57fde8_353c582f","line":116,"in_reply_to":"ba5201f7_c63846d6","updated":"2017-01-12 10:24:09.000000000","message":"Done","commit_id":"2f8f562c7782589c8bb43647918dbf75a44c1235"}],"neutron/db/l3_hamode_db.py":[{"author":{"_account_id":10267,"name":"venkata anil","email":"anilvenkata@redhat.com","username":"anil"},"change_message_id":"8953c7925f2b5b6341d1c49b7c2bc36b74757241","unresolved":false,"context_lines":[{"line_number":620,"context_line":"        \"\"\""},{"line_number":621,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":622,"context_line":"            bindings \u003d self.get_ha_router_port_bindings(context, [router_id])"},{"line_number":623,"context_line":"            self._check_all_standby(context, router_id, bindings)"},{"line_number":624,"context_line":"            dead_agents \u003d ["},{"line_number":625,"context_line":"                binding.agent for binding in bindings"},{"line_number":626,"context_line":"                if binding.state \u003d\u003d n_const.HA_ROUTER_STATE_ACTIVE and"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a6eadb0_3aafc395","line":623,"updated":"2016-12-19 08:20:51.000000000","message":"When can this call be triggered?","commit_id":"787f7a68b5e1b2a9df1b4422d936608dd69a74ca"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"b6803cafcd6ce935df3e8d86387083bf87779f8d","unresolved":false,"context_lines":[{"line_number":620,"context_line":"        \"\"\""},{"line_number":621,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":622,"context_line":"            bindings \u003d self.get_ha_router_port_bindings(context, [router_id])"},{"line_number":623,"context_line":"            self._check_all_standby(context, router_id, bindings)"},{"line_number":624,"context_line":"            dead_agents \u003d ["},{"line_number":625,"context_line":"                binding.agent for binding in bindings"},{"line_number":626,"context_line":"                if binding.state \u003d\u003d n_const.HA_ROUTER_STATE_ACTIVE and"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a6eadb0_eebf1aa8","line":623,"in_reply_to":"1a6eadb0_3aafc395","updated":"2016-12-20 07:47:47.000000000","message":"When list of agents hosting routers was called.","commit_id":"787f7a68b5e1b2a9df1b4422d936608dd69a74ca"},{"author":{"_account_id":19611,"name":"Brian Stajkowski","email":"brian.stajkowski@rackspace.com","username":"ski"},"change_message_id":"8e5a6fbe34aa4994dbec42015e79594ee518cebc","unresolved":false,"context_lines":[{"line_number":628,"context_line":"                dead_agents \u003d [binding.agent for binding in active"},{"line_number":629,"context_line":"                               if not (binding.agent.is_active and"},{"line_number":630,"context_line":"                                       binding.agent.admin_state_up)]"},{"line_number":631,"context_line":"                for dead_agent in dead_agents:"},{"line_number":632,"context_line":"                    self.update_routers_states("},{"line_number":633,"context_line":"                        context,"},{"line_number":634,"context_line":"                        {router_id: n_const.HA_ROUTER_STATE_STANDBY},"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba5201f7_80eaa6aa","line":631,"updated":"2017-01-04 18:08:03.000000000","message":"So if the agent dies or can\u0027t do a full sync, the ha_state is put into standby.  I guess this is a good assumption if we are ok with it, but the missed condition is if the agent dies but vrrp does not.","commit_id":"778cf9103dd7f9443f687620243389eb365dc850"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"9a935d3092dbce3407e07bcfbbd38ab74c5e92a5","unresolved":false,"context_lines":[{"line_number":628,"context_line":"                dead_agents \u003d [binding.agent for binding in active"},{"line_number":629,"context_line":"                               if not (binding.agent.is_active and"},{"line_number":630,"context_line":"                                       binding.agent.admin_state_up)]"},{"line_number":631,"context_line":"                for dead_agent in dead_agents:"},{"line_number":632,"context_line":"                    self.update_routers_states("},{"line_number":633,"context_line":"                        context,"},{"line_number":634,"context_line":"                        {router_id: n_const.HA_ROUTER_STATE_STANDBY},"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba5201f7_b2ccdf35","line":631,"in_reply_to":"ba5201f7_80eaa6aa","updated":"2017-01-09 08:58:37.000000000","message":"This was added to fix bug 1461148.","commit_id":"778cf9103dd7f9443f687620243389eb365dc850"}]}
