)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"44eae3753b9d1cd8cd840c27097cf30490e9fee8","unresolved":false,"context_lines":[{"line_number":20,"context_line":"Router namespace when there is no HA and recreating the HA"},{"line_number":21,"context_line":"Namespace when HA router is bound to the agent."},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"[1] https://review.openstack.org/#/c/522362/7"},{"line_number":24,"context_line":"Closes-Bug: #1816698"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"This leads to sometimes having two Active HA routers and two \u0027ha-interface\u0027 in the snat namespace for DVR routers."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"9fdfeff1_77a4db4b","line":23,"updated":"2019-02-25 19:20:04.000000000","message":"Can drop the trailing \u00277\u0027 as it has merged.","commit_id":"9cd536458835e57817507dc9a3ea03fa7c210a43"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"b808041381592521749ebac96e46f94f4620f9f5","unresolved":false,"context_lines":[{"line_number":20,"context_line":"Router namespace when there is no HA and recreating the HA"},{"line_number":21,"context_line":"Namespace when HA router is bound to the agent."},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"[1] https://review.openstack.org/#/c/522362/7"},{"line_number":24,"context_line":"Closes-Bug: #1816698"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"This leads to sometimes having two Active HA routers and two \u0027ha-interface\u0027 in the snat namespace for DVR routers."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"9fdfeff1_329ae113","line":23,"in_reply_to":"9fdfeff1_77a4db4b","updated":"2019-02-25 20:08:41.000000000","message":"Sure will fix it.","commit_id":"9cd536458835e57817507dc9a3ea03fa7c210a43"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"44eae3753b9d1cd8cd840c27097cf30490e9fee8","unresolved":false,"context_lines":[{"line_number":23,"context_line":"[1] https://review.openstack.org/#/c/522362/7"},{"line_number":24,"context_line":"Closes-Bug: #1816698"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"This leads to sometimes having two Active HA routers and two \u0027ha-interface\u0027 in the snat namespace for DVR routers."},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"Change-Id: Ie625abcb73f8185bb2bee06dcd26a01d8af0b0d1"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"9fdfeff1_d76827f5","line":26,"updated":"2019-02-25 19:20:04.000000000","message":"Seems like this should go above, and is a long line.","commit_id":"9cd536458835e57817507dc9a3ea03fa7c210a43"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"b808041381592521749ebac96e46f94f4620f9f5","unresolved":false,"context_lines":[{"line_number":23,"context_line":"[1] https://review.openstack.org/#/c/522362/7"},{"line_number":24,"context_line":"Closes-Bug: #1816698"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"This leads to sometimes having two Active HA routers and two \u0027ha-interface\u0027 in the snat namespace for DVR routers."},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"Change-Id: Ie625abcb73f8185bb2bee06dcd26a01d8af0b0d1"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"9fdfeff1_92886dc6","line":26,"in_reply_to":"9fdfeff1_d76827f5","updated":"2019-02-25 20:08:41.000000000","message":"Sure I will remove it.","commit_id":"9cd536458835e57817507dc9a3ea03fa7c210a43"}],"neutron/agent/l3/agent.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"44eae3753b9d1cd8cd840c27097cf30490e9fee8","unresolved":false,"context_lines":[{"line_number":412,"context_line":"            elif (self.conf.agent_mode \u003d\u003d lib_const.L3_AGENT_MODE_DVR_SNAT and"},{"line_number":413,"context_line":"                    not router.get(lib_const.HA_INTERFACE_KEY)):"},{"line_number":414,"context_line":"                LOG.debug(\"No HA interface so deploy regular DVR edge router\")"},{"line_number":415,"context_line":"                return dvr_router.DvrEdgeRouter(*args, **kwargs)"},{"line_number":416,"context_line":""},{"line_number":417,"context_line":"        if router.get(\u0027distributed\u0027):"},{"line_number":418,"context_line":"            if self.conf.agent_mode \u003d\u003d lib_const.L3_AGENT_MODE_DVR_SNAT:"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_77fb7bbd","line":415,"updated":"2019-02-25 19:20:04.000000000","message":"Won\u0027t this happen on L419 without this code here?  Distributed router, no HA interface, DVR_SNAT mode.","commit_id":"9cd536458835e57817507dc9a3ea03fa7c210a43"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"b808041381592521749ebac96e46f94f4620f9f5","unresolved":false,"context_lines":[{"line_number":412,"context_line":"            elif (self.conf.agent_mode \u003d\u003d lib_const.L3_AGENT_MODE_DVR_SNAT and"},{"line_number":413,"context_line":"                    not router.get(lib_const.HA_INTERFACE_KEY)):"},{"line_number":414,"context_line":"                LOG.debug(\"No HA interface so deploy regular DVR edge router\")"},{"line_number":415,"context_line":"                return dvr_router.DvrEdgeRouter(*args, **kwargs)"},{"line_number":416,"context_line":""},{"line_number":417,"context_line":"        if router.get(\u0027distributed\u0027):"},{"line_number":418,"context_line":"            if self.conf.agent_mode \u003d\u003d lib_const.L3_AGENT_MODE_DVR_SNAT:"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_926ced36","line":415,"in_reply_to":"9fdfeff1_77fb7bbd","updated":"2019-02-25 20:08:41.000000000","message":"I don\u0027t think it was happening at L419. But let me recheck","commit_id":"9cd536458835e57817507dc9a3ea03fa7c210a43"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"44eae3753b9d1cd8cd840c27097cf30490e9fee8","unresolved":false,"context_lines":[{"line_number":572,"context_line":"                router.get(\u0027distributed\u0027) and router.get(\u0027ha\u0027) and"},{"line_number":573,"context_line":"                self.conf.agent_mode \u003d\u003d lib_const.L3_AGENT_MODE_DVR_SNAT and"},{"line_number":574,"context_line":"                not router.get(lib_const.HA_INTERFACE_KEY)):"},{"line_number":575,"context_line":"            self._process_remove_recreate_ha_router(router)"},{"line_number":576,"context_line":"        else:"},{"line_number":577,"context_line":"            self._process_updated_router(router)"},{"line_number":578,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_1706af87","line":575,"updated":"2019-02-25 19:20:04.000000000","message":"Most of this seems to be duplicated in _process_updated_router() ?","commit_id":"9cd536458835e57817507dc9a3ea03fa7c210a43"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"b808041381592521749ebac96e46f94f4620f9f5","unresolved":false,"context_lines":[{"line_number":572,"context_line":"                router.get(\u0027distributed\u0027) and router.get(\u0027ha\u0027) and"},{"line_number":573,"context_line":"                self.conf.agent_mode \u003d\u003d lib_const.L3_AGENT_MODE_DVR_SNAT and"},{"line_number":574,"context_line":"                not router.get(lib_const.HA_INTERFACE_KEY)):"},{"line_number":575,"context_line":"            self._process_remove_recreate_ha_router(router)"},{"line_number":576,"context_line":"        else:"},{"line_number":577,"context_line":"            self._process_updated_router(router)"},{"line_number":578,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_b2d7b1bf","line":575,"in_reply_to":"9fdfeff1_1706af87","updated":"2019-02-25 20:08:41.000000000","message":"Do you want me to create a separate function here?","commit_id":"9cd536458835e57817507dc9a3ea03fa7c210a43"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"4f203f8a3e447624e9509e713f46d64fa5029a99","unresolved":false,"context_lines":[{"line_number":572,"context_line":"                router.get(\u0027distributed\u0027) and router.get(\u0027ha\u0027) and"},{"line_number":573,"context_line":"                self.conf.agent_mode \u003d\u003d lib_const.L3_AGENT_MODE_DVR_SNAT and"},{"line_number":574,"context_line":"                not router.get(lib_const.HA_INTERFACE_KEY)):"},{"line_number":575,"context_line":"            self._process_remove_recreate_ha_router(router)"},{"line_number":576,"context_line":"        else:"},{"line_number":577,"context_line":"            self._process_updated_router(router)"},{"line_number":578,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_f23bf9e6","line":575,"in_reply_to":"9fdfeff1_b2d7b1bf","updated":"2019-02-25 20:16:57.000000000","message":"Well, it _process_updated_router() can handle it this code will go away, and you might not need the separate function with just one caller.","commit_id":"9cd536458835e57817507dc9a3ea03fa7c210a43"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"44eae3753b9d1cd8cd840c27097cf30490e9fee8","unresolved":false,"context_lines":[{"line_number":580,"context_line":"        # Remove the HA Router first if the HA interface does not"},{"line_number":581,"context_line":"        # exist and then recreate a regular DVR router"},{"line_number":582,"context_line":"        # based on the dvr service port requirements"},{"line_number":583,"context_line":"        if router.get(\u0027distributed\u0027) and router.get(\u0027ha\u0027):"},{"line_number":584,"context_line":"            self._safe_router_removed(router[\u0027id\u0027])"},{"line_number":585,"context_line":"        self._process_added_router(router)"},{"line_number":586,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_f783ebc9","line":583,"updated":"2019-02-25 19:20:04.000000000","message":"The caller checked both of these already.","commit_id":"9cd536458835e57817507dc9a3ea03fa7c210a43"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"b808041381592521749ebac96e46f94f4620f9f5","unresolved":false,"context_lines":[{"line_number":580,"context_line":"        # Remove the HA Router first if the HA interface does not"},{"line_number":581,"context_line":"        # exist and then recreate a regular DVR router"},{"line_number":582,"context_line":"        # based on the dvr service port requirements"},{"line_number":583,"context_line":"        if router.get(\u0027distributed\u0027) and router.get(\u0027ha\u0027):"},{"line_number":584,"context_line":"            self._safe_router_removed(router[\u0027id\u0027])"},{"line_number":585,"context_line":"        self._process_added_router(router)"},{"line_number":586,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_32cc2134","line":583,"in_reply_to":"9fdfeff1_f783ebc9","updated":"2019-02-25 20:08:41.000000000","message":"You are right.","commit_id":"9cd536458835e57817507dc9a3ea03fa7c210a43"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"44eae3753b9d1cd8cd840c27097cf30490e9fee8","unresolved":false,"context_lines":[{"line_number":601,"context_line":"                current_router_ha_interface is not None and"},{"line_number":602,"context_line":"                old_router_ha_interface is None and"},{"line_number":603,"context_line":"                self.conf.agent_mode \u003d\u003d lib_const.L3_AGENT_MODE_DVR_SNAT):"},{"line_number":604,"context_line":"            self._process_remove_recreate_ha_router(router)"},{"line_number":605,"context_line":"        else:"},{"line_number":606,"context_line":"            is_dvr_only_agent \u003d (self.conf.agent_mode in"},{"line_number":607,"context_line":"                             [lib_const.L3_AGENT_MODE_DVR,"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_d7cca735","line":604,"updated":"2019-02-25 19:20:04.000000000","message":"Could just \u0027return\u0027 here and not change indentation of below.","commit_id":"9cd536458835e57817507dc9a3ea03fa7c210a43"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"b808041381592521749ebac96e46f94f4620f9f5","unresolved":false,"context_lines":[{"line_number":601,"context_line":"                current_router_ha_interface is not None and"},{"line_number":602,"context_line":"                old_router_ha_interface is None and"},{"line_number":603,"context_line":"                self.conf.agent_mode \u003d\u003d lib_const.L3_AGENT_MODE_DVR_SNAT):"},{"line_number":604,"context_line":"            self._process_remove_recreate_ha_router(router)"},{"line_number":605,"context_line":"        else:"},{"line_number":606,"context_line":"            is_dvr_only_agent \u003d (self.conf.agent_mode in"},{"line_number":607,"context_line":"                             [lib_const.L3_AGENT_MODE_DVR,"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_524be5af","line":604,"in_reply_to":"9fdfeff1_d7cca735","updated":"2019-02-25 20:08:41.000000000","message":"Yes. will fix it.","commit_id":"9cd536458835e57817507dc9a3ea03fa7c210a43"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"608aa312d18d47ab184c09f3aa2a7362c9b2f547","unresolved":false,"context_lines":[{"line_number":588,"context_line":"        old_router_ha_interface \u003d ri.router.get(lib_const.HA_INTERFACE_KEY)"},{"line_number":589,"context_line":"        current_router_ha_interface \u003d router.get(lib_const.HA_INTERFACE_KEY)"},{"line_number":590,"context_line":""},{"line_number":591,"context_line":"        if (router.get(\u0027distributed\u0027) and router.get(\u0027ha\u0027) and"},{"line_number":592,"context_line":"                current_router_ha_interface is not None and"},{"line_number":593,"context_line":"                old_router_ha_interface is None and"},{"line_number":594,"context_line":"                self.conf.agent_mode \u003d\u003d lib_const.L3_AGENT_MODE_DVR_SNAT):"},{"line_number":595,"context_line":"            self._process_remove_recreate_ha_router(router)"},{"line_number":596,"context_line":"        elif (router.get(\u0027distributed\u0027) and router.get(\u0027ha\u0027) and"},{"line_number":597,"context_line":"                old_router_ha_interface is not None and"},{"line_number":598,"context_line":"                current_router_ha_interface is None and"},{"line_number":599,"context_line":"                self.conf.agent_mode \u003d\u003d lib_const.L3_AGENT_MODE_DVR_SNAT):"},{"line_number":600,"context_line":"            self._process_remove_recreate_ha_router(router)"},{"line_number":601,"context_line":"        else:"},{"line_number":602,"context_line":"            is_dvr_only_agent \u003d (self.conf.agent_mode in"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_ef8a1dba","line":599,"range":{"start_line":591,"start_character":8,"end_line":599,"end_character":74},"updated":"2019-02-26 16:30:56.000000000","message":"Would something similar to this read better?\n\nif ((router.get(\u0027distributed\u0027) and router.get(\u0027ha\u0027) and\n                self.conf.agent_mode \u003d\u003d lib_const.L3_AGENT_MODE_DVR_SNAT) and\n                (current_router_ha_interface is None !\u003d\n                old_router_ha_interface is None)):\n\nThis way we get rid of the elif block. Just some food for thought....","commit_id":"5fed0f47ad59b3427644a9db5579b1dbe759beac"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"55de87427d66645e6397cba8f173bf2209c11350","unresolved":false,"context_lines":[{"line_number":588,"context_line":"        old_router_ha_interface \u003d ri.router.get(lib_const.HA_INTERFACE_KEY)"},{"line_number":589,"context_line":"        current_router_ha_interface \u003d router.get(lib_const.HA_INTERFACE_KEY)"},{"line_number":590,"context_line":""},{"line_number":591,"context_line":"        if (router.get(\u0027distributed\u0027) and router.get(\u0027ha\u0027) and"},{"line_number":592,"context_line":"                current_router_ha_interface is not None and"},{"line_number":593,"context_line":"                old_router_ha_interface is None and"},{"line_number":594,"context_line":"                self.conf.agent_mode \u003d\u003d lib_const.L3_AGENT_MODE_DVR_SNAT):"},{"line_number":595,"context_line":"            self._process_remove_recreate_ha_router(router)"},{"line_number":596,"context_line":"        elif (router.get(\u0027distributed\u0027) and router.get(\u0027ha\u0027) and"},{"line_number":597,"context_line":"                old_router_ha_interface is not None and"},{"line_number":598,"context_line":"                current_router_ha_interface is None and"},{"line_number":599,"context_line":"                self.conf.agent_mode \u003d\u003d lib_const.L3_AGENT_MODE_DVR_SNAT):"},{"line_number":600,"context_line":"            self._process_remove_recreate_ha_router(router)"},{"line_number":601,"context_line":"        else:"},{"line_number":602,"context_line":"            is_dvr_only_agent \u003d (self.conf.agent_mode in"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_1dfb127b","line":599,"range":{"start_line":591,"start_character":8,"end_line":599,"end_character":74},"in_reply_to":"9fdfeff1_1ab3189c","updated":"2019-02-26 22:28:20.000000000","message":"I was just pointing out that maybe there is a logical XOR test that can be done instead of if....elif, no need to assign values to variables. We\u0027re essentially testing whether old_router_ha_interface is None and vice-versa, logically speaking you can handle it by only calling _process_remove_recreate_ha_router() if the router attributes match and if one and only one of [old_router_ha_interface, current_router_ha_interface] is None.\n\nThat\u0027s all psuedo-code not proper python, feel free to disregard. This is getting complex, it\u0027s a nit anyway :)","commit_id":"5fed0f47ad59b3427644a9db5579b1dbe759beac"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"2e69c9d4bcacb7ee0b72531e7785179aa1cf4dd7","unresolved":false,"context_lines":[{"line_number":588,"context_line":"        old_router_ha_interface \u003d ri.router.get(lib_const.HA_INTERFACE_KEY)"},{"line_number":589,"context_line":"        current_router_ha_interface \u003d router.get(lib_const.HA_INTERFACE_KEY)"},{"line_number":590,"context_line":""},{"line_number":591,"context_line":"        if (router.get(\u0027distributed\u0027) and router.get(\u0027ha\u0027) and"},{"line_number":592,"context_line":"                current_router_ha_interface is not None and"},{"line_number":593,"context_line":"                old_router_ha_interface is None and"},{"line_number":594,"context_line":"                self.conf.agent_mode \u003d\u003d lib_const.L3_AGENT_MODE_DVR_SNAT):"},{"line_number":595,"context_line":"            self._process_remove_recreate_ha_router(router)"},{"line_number":596,"context_line":"        elif (router.get(\u0027distributed\u0027) and router.get(\u0027ha\u0027) and"},{"line_number":597,"context_line":"                old_router_ha_interface is not None and"},{"line_number":598,"context_line":"                current_router_ha_interface is None and"},{"line_number":599,"context_line":"                self.conf.agent_mode \u003d\u003d lib_const.L3_AGENT_MODE_DVR_SNAT):"},{"line_number":600,"context_line":"            self._process_remove_recreate_ha_router(router)"},{"line_number":601,"context_line":"        else:"},{"line_number":602,"context_line":"            is_dvr_only_agent \u003d (self.conf.agent_mode in"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_38794481","line":599,"range":{"start_line":591,"start_character":8,"end_line":599,"end_character":74},"in_reply_to":"9fdfeff1_1dfb127b","updated":"2019-02-26 22:59:40.000000000","message":"Yes, you are right. But for readability purpose let us leave it as such.","commit_id":"5fed0f47ad59b3427644a9db5579b1dbe759beac"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"d81d2b55eb6b0f63968404c4118adf1f9ba37122","unresolved":false,"context_lines":[{"line_number":588,"context_line":"        old_router_ha_interface \u003d ri.router.get(lib_const.HA_INTERFACE_KEY)"},{"line_number":589,"context_line":"        current_router_ha_interface \u003d router.get(lib_const.HA_INTERFACE_KEY)"},{"line_number":590,"context_line":""},{"line_number":591,"context_line":"        if (router.get(\u0027distributed\u0027) and router.get(\u0027ha\u0027) and"},{"line_number":592,"context_line":"                current_router_ha_interface is not None and"},{"line_number":593,"context_line":"                old_router_ha_interface is None and"},{"line_number":594,"context_line":"                self.conf.agent_mode \u003d\u003d lib_const.L3_AGENT_MODE_DVR_SNAT):"},{"line_number":595,"context_line":"            self._process_remove_recreate_ha_router(router)"},{"line_number":596,"context_line":"        elif (router.get(\u0027distributed\u0027) and router.get(\u0027ha\u0027) and"},{"line_number":597,"context_line":"                old_router_ha_interface is not None and"},{"line_number":598,"context_line":"                current_router_ha_interface is None and"},{"line_number":599,"context_line":"                self.conf.agent_mode \u003d\u003d lib_const.L3_AGENT_MODE_DVR_SNAT):"},{"line_number":600,"context_line":"            self._process_remove_recreate_ha_router(router)"},{"line_number":601,"context_line":"        else:"},{"line_number":602,"context_line":"            is_dvr_only_agent \u003d (self.conf.agent_mode in"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_e496bf94","line":599,"range":{"start_line":591,"start_character":8,"end_line":599,"end_character":74},"in_reply_to":"9fdfeff1_24528713","updated":"2019-02-26 19:23:03.000000000","message":"Sure, just a nit. My thinking was just that even though there are 2 cases we\u0027re testing for here, it seems like the logic actually does boil down to this:\n\n(distributed AND ha AND agent_mode \u003d\u003d DVR_SNAT) AND (old_router_ha_interface is None XOR current_router_ha_interface is None)","commit_id":"5fed0f47ad59b3427644a9db5579b1dbe759beac"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"9c60ff43499dba8161ba8ba0a8b78019cb86be44","unresolved":false,"context_lines":[{"line_number":588,"context_line":"        old_router_ha_interface \u003d ri.router.get(lib_const.HA_INTERFACE_KEY)"},{"line_number":589,"context_line":"        current_router_ha_interface \u003d router.get(lib_const.HA_INTERFACE_KEY)"},{"line_number":590,"context_line":""},{"line_number":591,"context_line":"        if (router.get(\u0027distributed\u0027) and router.get(\u0027ha\u0027) and"},{"line_number":592,"context_line":"                current_router_ha_interface is not None and"},{"line_number":593,"context_line":"                old_router_ha_interface is None and"},{"line_number":594,"context_line":"                self.conf.agent_mode \u003d\u003d lib_const.L3_AGENT_MODE_DVR_SNAT):"},{"line_number":595,"context_line":"            self._process_remove_recreate_ha_router(router)"},{"line_number":596,"context_line":"        elif (router.get(\u0027distributed\u0027) and router.get(\u0027ha\u0027) and"},{"line_number":597,"context_line":"                old_router_ha_interface is not None and"},{"line_number":598,"context_line":"                current_router_ha_interface is None and"},{"line_number":599,"context_line":"                self.conf.agent_mode \u003d\u003d lib_const.L3_AGENT_MODE_DVR_SNAT):"},{"line_number":600,"context_line":"            self._process_remove_recreate_ha_router(router)"},{"line_number":601,"context_line":"        else:"},{"line_number":602,"context_line":"            is_dvr_only_agent \u003d (self.conf.agent_mode in"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_1ab3189c","line":599,"range":{"start_line":591,"start_character":8,"end_line":599,"end_character":74},"in_reply_to":"9fdfeff1_e496bf94","updated":"2019-02-26 22:08:58.000000000","message":"Do we need to XOR with \u0027old_router_ha_interface is None\u0027. Why do we need to initialize it to None.\n\nCan\u0027t we just do \u0027old_router_ha_interface XOR current_router_ha_interface).","commit_id":"5fed0f47ad59b3427644a9db5579b1dbe759beac"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"f6f124a7a07187f2fc7ad8d6060f97863eab80b2","unresolved":false,"context_lines":[{"line_number":588,"context_line":"        old_router_ha_interface \u003d ri.router.get(lib_const.HA_INTERFACE_KEY)"},{"line_number":589,"context_line":"        current_router_ha_interface \u003d router.get(lib_const.HA_INTERFACE_KEY)"},{"line_number":590,"context_line":""},{"line_number":591,"context_line":"        if (router.get(\u0027distributed\u0027) and router.get(\u0027ha\u0027) and"},{"line_number":592,"context_line":"                current_router_ha_interface is not None and"},{"line_number":593,"context_line":"                old_router_ha_interface is None and"},{"line_number":594,"context_line":"                self.conf.agent_mode \u003d\u003d lib_const.L3_AGENT_MODE_DVR_SNAT):"},{"line_number":595,"context_line":"            self._process_remove_recreate_ha_router(router)"},{"line_number":596,"context_line":"        elif (router.get(\u0027distributed\u0027) and router.get(\u0027ha\u0027) and"},{"line_number":597,"context_line":"                old_router_ha_interface is not None and"},{"line_number":598,"context_line":"                current_router_ha_interface is None and"},{"line_number":599,"context_line":"                self.conf.agent_mode \u003d\u003d lib_const.L3_AGENT_MODE_DVR_SNAT):"},{"line_number":600,"context_line":"            self._process_remove_recreate_ha_router(router)"},{"line_number":601,"context_line":"        else:"},{"line_number":602,"context_line":"            is_dvr_only_agent \u003d (self.conf.agent_mode in"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_24528713","line":599,"range":{"start_line":591,"start_character":8,"end_line":599,"end_character":74},"in_reply_to":"9fdfeff1_ef8a1dba","updated":"2019-02-26 19:14:36.000000000","message":"I don\u0027t think it would work.\nThere are two cases were we need to validate.","commit_id":"5fed0f47ad59b3427644a9db5579b1dbe759beac"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"f975f5a21dd9c467299901be3bcb49022caabd30","unresolved":false,"context_lines":[{"line_number":584,"context_line":"        self.l3_ext_manager.add_router(self.context, router)"},{"line_number":585,"context_line":""},{"line_number":586,"context_line":"    def _process_updated_router(self, router):"},{"line_number":587,"context_line":"        ri \u003d self.router_info[router[\u0027id\u0027]]"},{"line_number":588,"context_line":"        old_router_ha_interface \u003d ri.router.get(lib_const.HA_INTERFACE_KEY)"},{"line_number":589,"context_line":"        current_router_ha_interface \u003d router.get(lib_const.HA_INTERFACE_KEY)"},{"line_number":590,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"9fdfeff1_45f69391","line":587,"updated":"2019-02-27 14:56:05.000000000","message":"I have an update I was going to send to eliminate some of the duplication below and simplify some things.","commit_id":"dc35c9ca457b8bace1df9f4e16517b3ec9462313"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"8e4123e146cc8914f64124955c42677229fc0b13","unresolved":false,"context_lines":[{"line_number":584,"context_line":"        self.l3_ext_manager.add_router(self.context, router)"},{"line_number":585,"context_line":""},{"line_number":586,"context_line":"    def _process_updated_router(self, router):"},{"line_number":587,"context_line":"        ri \u003d self.router_info[router[\u0027id\u0027]]"},{"line_number":588,"context_line":"        old_router_ha_interface \u003d ri.router.get(lib_const.HA_INTERFACE_KEY)"},{"line_number":589,"context_line":"        current_router_ha_interface \u003d router.get(lib_const.HA_INTERFACE_KEY)"},{"line_number":590,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"9fdfeff1_8bc1e550","line":587,"in_reply_to":"9fdfeff1_45f69391","updated":"2019-02-27 18:36:47.000000000","message":"Thanks for the update on this.","commit_id":"dc35c9ca457b8bace1df9f4e16517b3ec9462313"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"311e7d7b280ba236d3f2aa10df4d2ebebf6fe80c","unresolved":false,"context_lines":[{"line_number":592,"context_line":""},{"line_number":593,"context_line":"        is_dvr_ha_router \u003d router.get(\u0027distributed\u0027) and router.get(\u0027ha\u0027)"},{"line_number":594,"context_line":""},{"line_number":595,"context_line":"        if is_dvr_snat_agent and is_dvr_ha_router and ha_interface_change:"},{"line_number":596,"context_line":"            # Remove the HA Router first if the HA interface has changed"},{"line_number":597,"context_line":"            # and then recreate a regular DVR router based on the DVR"},{"line_number":598,"context_line":"            # service port requirements"}],"source_content_type":"text/x-python","patch_set":7,"id":"9fdfeff1_cc17beee","line":595,"range":{"start_line":595,"start_character":11,"end_line":595,"end_character":74},"updated":"2019-03-03 06:57:28.000000000","message":"IMO, adding a log for this special block looks necessary, \u0027info\u0027 can be just a notification for production environment.","commit_id":"1d5c5de01a6fcb551b75dc6245e9c08a8875d181"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"bd2b39c21c2563e43157bd1294fb8bbd82748339","unresolved":false,"context_lines":[{"line_number":592,"context_line":""},{"line_number":593,"context_line":"        is_dvr_ha_router \u003d router.get(\u0027distributed\u0027) and router.get(\u0027ha\u0027)"},{"line_number":594,"context_line":""},{"line_number":595,"context_line":"        if is_dvr_snat_agent and is_dvr_ha_router and ha_interface_change:"},{"line_number":596,"context_line":"            # Remove the HA Router first if the HA interface has changed"},{"line_number":597,"context_line":"            # and then recreate a regular DVR router based on the DVR"},{"line_number":598,"context_line":"            # service port requirements"}],"source_content_type":"text/x-python","patch_set":7,"id":"9fdfeff1_941be61a","line":595,"range":{"start_line":595,"start_character":11,"end_line":595,"end_character":74},"in_reply_to":"9fdfeff1_cc17beee","updated":"2019-03-04 18:47:44.000000000","message":"Sure will add a LOG.","commit_id":"1d5c5de01a6fcb551b75dc6245e9c08a8875d181"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"cdec525cc182ac1d54073ed1a8b9530c46983d54","unresolved":false,"context_lines":[{"line_number":596,"context_line":"            # Remove the HA Router first if the HA interface has changed"},{"line_number":597,"context_line":"            # and then recreate a regular DVR router based on the DVR"},{"line_number":598,"context_line":"            # service port requirements"},{"line_number":599,"context_line":"            self._safe_router_removed(router[\u0027id\u0027])"},{"line_number":600,"context_line":"            self._process_added_router(router)"},{"line_number":601,"context_line":"        else:"},{"line_number":602,"context_line":"            is_ha_router \u003d getattr(ri, \u0027ha_state\u0027, False)"}],"source_content_type":"text/x-python","patch_set":7,"id":"9fdfeff1_358e012e","line":599,"range":{"start_line":599,"start_character":17,"end_line":599,"end_character":37},"updated":"2019-02-28 12:46:11.000000000","message":"Let me ask you: if you delete the router, what is going to happen with the ongoing traffic?","commit_id":"1d5c5de01a6fcb551b75dc6245e9c08a8875d181"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"18d23892d3761256a90ddc7a3ed3499c8d75adb7","unresolved":false,"context_lines":[{"line_number":596,"context_line":"            # Remove the HA Router first if the HA interface has changed"},{"line_number":597,"context_line":"            # and then recreate a regular DVR router based on the DVR"},{"line_number":598,"context_line":"            # service port requirements"},{"line_number":599,"context_line":"            self._safe_router_removed(router[\u0027id\u0027])"},{"line_number":600,"context_line":"            self._process_added_router(router)"},{"line_number":601,"context_line":"        else:"},{"line_number":602,"context_line":"            is_ha_router \u003d getattr(ri, \u0027ha_state\u0027, False)"}],"source_content_type":"text/x-python","patch_set":7,"id":"9fdfeff1_025138d9","line":599,"range":{"start_line":599,"start_character":17,"end_line":599,"end_character":37},"in_reply_to":"9fdfeff1_358e012e","updated":"2019-02-28 19:19:56.000000000","message":"Fortunately if we delete the router, there are other HA \u0027ACTIVE\u0027 routers in the Network node that would still be operational.\nThe only traffic that would be hit while we remove the routers is any DNS lookup traffic for the DHCP ports that are in the standby node.\nBut if we have DHCP HA, then there should not be any problem, since the router is going to come back.","commit_id":"1d5c5de01a6fcb551b75dc6245e9c08a8875d181"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"311e7d7b280ba236d3f2aa10df4d2ebebf6fe80c","unresolved":false,"context_lines":[{"line_number":597,"context_line":"            # and then recreate a regular DVR router based on the DVR"},{"line_number":598,"context_line":"            # service port requirements"},{"line_number":599,"context_line":"            self._safe_router_removed(router[\u0027id\u0027])"},{"line_number":600,"context_line":"            self._process_added_router(router)"},{"line_number":601,"context_line":"        else:"},{"line_number":602,"context_line":"            is_ha_router \u003d getattr(ri, \u0027ha_state\u0027, False)"},{"line_number":603,"context_line":"            # For HA routers check that DB state matches actual state"}],"source_content_type":"text/x-python","patch_set":7,"id":"9fdfeff1_cca81e7a","line":600,"updated":"2019-03-03 06:57:28.000000000","message":"This is now interesting, we remove it first, and add it back. : )\n\nIf exception raised in _safe_router_removed, we will still call _process_added_router. Is this what we expect? How about:\n\nif self._safe_router_removed(router[\u0027id\u0027]):\n    self._process_added_router(router)","commit_id":"1d5c5de01a6fcb551b75dc6245e9c08a8875d181"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"bd2b39c21c2563e43157bd1294fb8bbd82748339","unresolved":false,"context_lines":[{"line_number":597,"context_line":"            # and then recreate a regular DVR router based on the DVR"},{"line_number":598,"context_line":"            # service port requirements"},{"line_number":599,"context_line":"            self._safe_router_removed(router[\u0027id\u0027])"},{"line_number":600,"context_line":"            self._process_added_router(router)"},{"line_number":601,"context_line":"        else:"},{"line_number":602,"context_line":"            is_ha_router \u003d getattr(ri, \u0027ha_state\u0027, False)"},{"line_number":603,"context_line":"            # For HA routers check that DB state matches actual state"}],"source_content_type":"text/x-python","patch_set":7,"id":"9fdfeff1_b424ea61","line":600,"in_reply_to":"9fdfeff1_cca81e7a","updated":"2019-03-04 18:47:44.000000000","message":"I think your suggestion makes sense.","commit_id":"1d5c5de01a6fcb551b75dc6245e9c08a8875d181"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"f79cf33c5d1686c92f60f0c3eaa1071b1d948148","unresolved":false,"context_lines":[{"line_number":588,"context_line":"                              lib_const.L3_AGENT_MODE_DVR_NO_EXTERNAL])"},{"line_number":589,"context_line":"        old_router_ha_interface \u003d ri.router.get(lib_const.HA_INTERFACE_KEY)"},{"line_number":590,"context_line":"        current_router_ha_interface \u003d router.get(lib_const.HA_INTERFACE_KEY)"},{"line_number":591,"context_line":"        ha_interface_change \u003d ((old_router_ha_interface is None and"},{"line_number":592,"context_line":"                                current_router_ha_interface is not None) or"},{"line_number":593,"context_line":"                               (old_router_ha_interface is not None and"},{"line_number":594,"context_line":"                                current_router_ha_interface is None))"},{"line_number":595,"context_line":"        is_dvr_ha_router \u003d router.get(\u0027distributed\u0027) and router.get(\u0027ha\u0027)"},{"line_number":596,"context_line":""},{"line_number":597,"context_line":"        if is_dvr_snat_agent and is_dvr_ha_router and ha_interface_change:"}],"source_content_type":"text/x-python","patch_set":9,"id":"5fc1f717_2eb89a28","line":594,"range":{"start_line":591,"start_character":30,"end_line":594,"end_character":69},"updated":"2019-03-07 08:14:48.000000000","message":"can\u0027t it just be:\n\n    ha_interface_change \u003d (old_router_ha_interface !\u003d current_router_ha_interface))\n\n?","commit_id":"a9a563f77d0b8b9191bab1e4501a7445adbd9e9b"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"55869d610da107038e5e93a522974074146c7116","unresolved":false,"context_lines":[{"line_number":588,"context_line":"                              lib_const.L3_AGENT_MODE_DVR_NO_EXTERNAL])"},{"line_number":589,"context_line":"        old_router_ha_interface \u003d ri.router.get(lib_const.HA_INTERFACE_KEY)"},{"line_number":590,"context_line":"        current_router_ha_interface \u003d router.get(lib_const.HA_INTERFACE_KEY)"},{"line_number":591,"context_line":"        ha_interface_change \u003d ((old_router_ha_interface is None and"},{"line_number":592,"context_line":"                                current_router_ha_interface is not None) or"},{"line_number":593,"context_line":"                               (old_router_ha_interface is not None and"},{"line_number":594,"context_line":"                                current_router_ha_interface is None))"},{"line_number":595,"context_line":"        is_dvr_ha_router \u003d router.get(\u0027distributed\u0027) and router.get(\u0027ha\u0027)"},{"line_number":596,"context_line":""},{"line_number":597,"context_line":"        if is_dvr_snat_agent and is_dvr_ha_router and ha_interface_change:"}],"source_content_type":"text/x-python","patch_set":9,"id":"5fc1f717_cbc8da56","line":594,"range":{"start_line":591,"start_character":30,"end_line":594,"end_character":69},"in_reply_to":"5fc1f717_2eb89a28","updated":"2019-03-07 18:10:12.000000000","message":"I tested this case, and it is not working as expected.","commit_id":"a9a563f77d0b8b9191bab1e4501a7445adbd9e9b"}],"neutron/tests/functional/agent/l3/test_dvr_router.py":[{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"f79cf33c5d1686c92f60f0c3eaa1071b1d948148","unresolved":false,"context_lines":[{"line_number":1469,"context_line":"        self.manage_router(restarted_agent, router1.router)"},{"line_number":1470,"context_line":"        self.assertTrue(fip_cidr_centralized_mock.called)"},{"line_number":1471,"context_line":""},{"line_number":1472,"context_line":"    def test_dvr_ha_router_unbound_from_agents(self, enable_gw\u003dTrue):"},{"line_number":1473,"context_line":"        self._setup_dvr_ha_agents()"},{"line_number":1474,"context_line":"        self._setup_dvr_ha_bridges()"},{"line_number":1475,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"5fc1f717_2e917a9a","line":1472,"range":{"start_line":1472,"start_character":53,"end_line":1472,"end_character":67},"updated":"2019-03-07 08:14:48.000000000","message":"why You need this parameter? where are You calling this method with different value of it?","commit_id":"a9a563f77d0b8b9191bab1e4501a7445adbd9e9b"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"55869d610da107038e5e93a522974074146c7116","unresolved":false,"context_lines":[{"line_number":1469,"context_line":"        self.manage_router(restarted_agent, router1.router)"},{"line_number":1470,"context_line":"        self.assertTrue(fip_cidr_centralized_mock.called)"},{"line_number":1471,"context_line":""},{"line_number":1472,"context_line":"    def test_dvr_ha_router_unbound_from_agents(self, enable_gw\u003dTrue):"},{"line_number":1473,"context_line":"        self._setup_dvr_ha_agents()"},{"line_number":1474,"context_line":"        self._setup_dvr_ha_bridges()"},{"line_number":1475,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"5fc1f717_4b0b8a8d","line":1472,"range":{"start_line":1472,"start_character":53,"end_line":1472,"end_character":67},"in_reply_to":"5fc1f717_2e917a9a","updated":"2019-03-07 18:10:12.000000000","message":"You are right. I am not calling this function from outside, but since I leveraged it from a test case I might have left it there.\nI will fix it.","commit_id":"a9a563f77d0b8b9191bab1e4501a7445adbd9e9b"}],"neutron/tests/unit/agent/l3/test_agent.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"44eae3753b9d1cd8cd840c27097cf30490e9fee8","unresolved":false,"context_lines":[{"line_number":2612,"context_line":"                router)"},{"line_number":2613,"context_line":"            safe_router_removed.assert_called_once_with(router[\u0027id\u0027])"},{"line_number":2614,"context_line":""},{"line_number":2615,"context_line":"    def test_process_dvr_routers_ha_on_update_when_router_unbinded(self):"},{"line_number":2616,"context_line":"        agent \u003d l3_agent.L3NATAgent(HOSTNAME, self.conf)"},{"line_number":2617,"context_line":"        agent.conf.agent_mode \u003d \u0027dvr_snat\u0027"},{"line_number":2618,"context_line":"        router \u003d mock.Mock()"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_77ddbbdb","line":2615,"range":{"start_line":2615,"start_character":58,"end_line":2615,"end_character":66},"updated":"2019-02-25 19:20:04.000000000","message":"nit: s/unbound","commit_id":"9cd536458835e57817507dc9a3ea03fa7c210a43"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"b808041381592521749ebac96e46f94f4620f9f5","unresolved":false,"context_lines":[{"line_number":2612,"context_line":"                router)"},{"line_number":2613,"context_line":"            safe_router_removed.assert_called_once_with(router[\u0027id\u0027])"},{"line_number":2614,"context_line":""},{"line_number":2615,"context_line":"    def test_process_dvr_routers_ha_on_update_when_router_unbinded(self):"},{"line_number":2616,"context_line":"        agent \u003d l3_agent.L3NATAgent(HOSTNAME, self.conf)"},{"line_number":2617,"context_line":"        agent.conf.agent_mode \u003d \u0027dvr_snat\u0027"},{"line_number":2618,"context_line":"        router \u003d mock.Mock()"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_f2ea1972","line":2615,"range":{"start_line":2615,"start_character":58,"end_line":2615,"end_character":66},"in_reply_to":"9fdfeff1_77ddbbdb","updated":"2019-02-25 20:08:41.000000000","message":"Will fix it.","commit_id":"9cd536458835e57817507dc9a3ea03fa7c210a43"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"44eae3753b9d1cd8cd840c27097cf30490e9fee8","unresolved":false,"context_lines":[{"line_number":2624,"context_line":"        updated_router \u003d {\u0027id\u0027: \u00271234\u0027,"},{"line_number":2625,"context_line":"                  \u0027distributed\u0027: True, \u0027ha\u0027: True,"},{"line_number":2626,"context_line":"                  \u0027external_gateway_info\u0027: {}, \u0027routes\u0027: [],"},{"line_number":2627,"context_line":"                  \u0027admin_state_up\u0027: True}"},{"line_number":2628,"context_line":""},{"line_number":2629,"context_line":"        self.plugin_api.get_routers.return_value \u003d [updated_router]"},{"line_number":2630,"context_line":"        update \u003d resource_processing_queue.ResourceUpdate("}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_77f61b60","line":2627,"updated":"2019-02-25 19:20:04.000000000","message":"should indent these to same as \u0027id\u0027, there might be a pep8 change for this eventually.","commit_id":"9cd536458835e57817507dc9a3ea03fa7c210a43"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"b808041381592521749ebac96e46f94f4620f9f5","unresolved":false,"context_lines":[{"line_number":2624,"context_line":"        updated_router \u003d {\u0027id\u0027: \u00271234\u0027,"},{"line_number":2625,"context_line":"                  \u0027distributed\u0027: True, \u0027ha\u0027: True,"},{"line_number":2626,"context_line":"                  \u0027external_gateway_info\u0027: {}, \u0027routes\u0027: [],"},{"line_number":2627,"context_line":"                  \u0027admin_state_up\u0027: True}"},{"line_number":2628,"context_line":""},{"line_number":2629,"context_line":"        self.plugin_api.get_routers.return_value \u003d [updated_router]"},{"line_number":2630,"context_line":"        update \u003d resource_processing_queue.ResourceUpdate("}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_d2e595a5","line":2627,"in_reply_to":"9fdfeff1_77f61b60","updated":"2019-02-25 20:08:41.000000000","message":"I did not get your point here.","commit_id":"9cd536458835e57817507dc9a3ea03fa7c210a43"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"4f203f8a3e447624e9509e713f46d64fa5029a99","unresolved":false,"context_lines":[{"line_number":2624,"context_line":"        updated_router \u003d {\u0027id\u0027: \u00271234\u0027,"},{"line_number":2625,"context_line":"                  \u0027distributed\u0027: True, \u0027ha\u0027: True,"},{"line_number":2626,"context_line":"                  \u0027external_gateway_info\u0027: {}, \u0027routes\u0027: [],"},{"line_number":2627,"context_line":"                  \u0027admin_state_up\u0027: True}"},{"line_number":2628,"context_line":""},{"line_number":2629,"context_line":"        self.plugin_api.get_routers.return_value \u003d [updated_router]"},{"line_number":2630,"context_line":"        update \u003d resource_processing_queue.ResourceUpdate("}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_925f0d40","line":2627,"in_reply_to":"9fdfeff1_d2e595a5","updated":"2019-02-25 20:16:57.000000000","message":"should be like:\n\n           {\u0027id\u0027: 1234,\n            \u0027distributed\u0027: True,\n            \u0027....\u0027}","commit_id":"9cd536458835e57817507dc9a3ea03fa7c210a43"}]}
