)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"34802db809b69db5a2a68e654b08d55117e18088","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Harden the L3 HA code against failures"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"There are some failure cases where we could call-into"},{"line_number":10,"context_line":"the L3 HA code when it\u0027s data is not completely initialized,"},{"line_number":11,"context_line":"which can lead to nested exceptions.  Verify that ha_port"},{"line_number":12,"context_line":"and keepalived_manager elements are valid during deletion"},{"line_number":13,"context_line":"since there is no need to do additional work if they are not."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"3f4b6375_947ffbdd","line":10,"range":{"start_line":10,"start_character":20,"end_line":10,"end_character":24},"updated":"2017-11-03 19:13:00.000000000","message":"its","commit_id":"49bc7327309375ef56eeb8cf4ae48e7f06dea8b6"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"85eda7eb41a2d3c1e75cd4e6e78133446873f359","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Harden the L3 HA code against failures"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"There are some failure cases where we could call-into"},{"line_number":10,"context_line":"the L3 HA code when it\u0027s data is not completely initialized,"},{"line_number":11,"context_line":"which can lead to nested exceptions.  Verify that ha_port"},{"line_number":12,"context_line":"and keepalived_manager elements are valid during deletion"},{"line_number":13,"context_line":"since there is no need to do additional work if they are not."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"3f4b6375_0a9be672","line":10,"range":{"start_line":10,"start_character":20,"end_line":10,"end_character":23},"updated":"2017-11-03 20:41:00.000000000","message":"its?","commit_id":"a8a5d641745737e163bb35437f7ceeaccee0a6d9"}],"neutron/agent/l3/agent.py":[{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"856c370a944629b7344e6c4bb5f4c96710165a53","unresolved":false,"context_lines":[{"line_number":358,"context_line":"                                  router_id)"},{"line_number":359,"context_line":"            return"},{"line_number":360,"context_line":""},{"line_number":361,"context_line":"        self.router_info[router_id] \u003d ri"},{"line_number":362,"context_line":""},{"line_number":363,"context_line":"    def _safe_router_removed(self, router_id):"},{"line_number":364,"context_line":"        \"\"\"Try to delete a router and return True if successful.\"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"3f4b6375_61961ff3","line":361,"updated":"2017-11-02 19:49:33.000000000","message":"I would love to explore this idea. If we tackle it, we won\u0027t have a space for someone fetching a router info that is not ready.","commit_id":"c97a8079ea7f24fd3d648a29ec8e1397f3d35722"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"aabb3e4fe91c23dc3883d2483dbe155f44070b04","unresolved":false,"context_lines":[{"line_number":358,"context_line":"                                  router_id)"},{"line_number":359,"context_line":"            return"},{"line_number":360,"context_line":""},{"line_number":361,"context_line":"        self.router_info[router_id] \u003d ri"},{"line_number":362,"context_line":""},{"line_number":363,"context_line":"    def _safe_router_removed(self, router_id):"},{"line_number":364,"context_line":"        \"\"\"Try to delete a router and return True if successful.\"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"3f4b6375_8d3c9be1","line":361,"in_reply_to":"3f4b6375_12f7b08d","updated":"2017-11-03 14:36:15.000000000","message":"The problem seems to be (from looking at the logs) is that an update can arrive right afterwards, and if we don\u0027t initialize this early, that update causes the agent to tear things down because it didn\u0027t find the router.  I\u0027m working on a separate change that tries to be smarter and set the router\u0027s state on the agent, i\u0027ll send out as a WIP to see if it does better on the functional tests.\n\nUntil then, the other code in this review should be enough to catch things so we don\u0027t go into an infinite loop for this router.","commit_id":"c97a8079ea7f24fd3d648a29ec8e1397f3d35722"},{"author":{"_account_id":10267,"name":"venkata anil","email":"anilvenkata@redhat.com","username":"anil"},"change_message_id":"70bd3f89a3706bf947adfa1a8b5bf4e1c5485867","unresolved":false,"context_lines":[{"line_number":358,"context_line":"                                  router_id)"},{"line_number":359,"context_line":"            return"},{"line_number":360,"context_line":""},{"line_number":361,"context_line":"        self.router_info[router_id] \u003d ri"},{"line_number":362,"context_line":""},{"line_number":363,"context_line":"    def _safe_router_removed(self, router_id):"},{"line_number":364,"context_line":"        \"\"\"Try to delete a router and return True if successful.\"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"3f4b6375_12f7b08d","line":361,"in_reply_to":"3f4b6375_61961ff3","updated":"2017-11-03 04:54:24.000000000","message":"I was hesitant  to do this change earlier as I thought inside initialize() self.router_info[router_id] used.\n\nBut we can give more rechecks and see if this doesn\u0027t break anything.","commit_id":"c97a8079ea7f24fd3d648a29ec8e1397f3d35722"}],"neutron/agent/l3/ha_router.py":[{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"2a238508e1fe57b49dd059c3225935f0446e004f","unresolved":false,"context_lines":[{"line_number":163,"context_line":"    def enable_keepalived(self):"},{"line_number":164,"context_line":"        self.keepalived_manager.spawn()"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"    def disable_keepalived(self):"},{"line_number":167,"context_line":"        if not self.keepalived_manager:"},{"line_number":168,"context_line":"            return"},{"line_number":169,"context_line":"        self.keepalived_manager.disable()"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f4b6375_5995413f","line":166,"updated":"2017-11-03 16:53:07.000000000","message":"won\u0027t we have a case where disable is called just before self.keepalived_manager is initialized, and then the keepalived is never cleaned up?","commit_id":"49bc7327309375ef56eeb8cf4ae48e7f06dea8b6"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"f2543a026732800d0cdcc8b09087653894582062","unresolved":false,"context_lines":[{"line_number":163,"context_line":"    def enable_keepalived(self):"},{"line_number":164,"context_line":"        self.keepalived_manager.spawn()"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"    def disable_keepalived(self):"},{"line_number":167,"context_line":"        if not self.keepalived_manager:"},{"line_number":168,"context_line":"            return"},{"line_number":169,"context_line":"        self.keepalived_manager.disable()"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f4b6375_6784d3d3","line":166,"in_reply_to":"3f4b6375_5995413f","updated":"2017-11-03 20:09:54.000000000","message":"I think the periodic task would eventually try and delete the router again.","commit_id":"49bc7327309375ef56eeb8cf4ae48e7f06dea8b6"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"7517604a98fb57ab3ead079bb4f7e62a2e112eff","unresolved":false,"context_lines":[{"line_number":165,"context_line":""},{"line_number":166,"context_line":"    def disable_keepalived(self):"},{"line_number":167,"context_line":"        if not self.keepalived_manager:"},{"line_number":168,"context_line":"            return"},{"line_number":169,"context_line":"        self.keepalived_manager.disable()"},{"line_number":170,"context_line":"        conf_dir \u003d self.keepalived_manager.get_conf_dir()"},{"line_number":171,"context_line":"        shutil.rmtree(conf_dir)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f4b6375_226edbff","line":168,"updated":"2017-11-03 08:35:23.000000000","message":"shouldn\u0027t You maybe log (e.g. DEBUG) something in such case?","commit_id":"49bc7327309375ef56eeb8cf4ae48e7f06dea8b6"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"2cfad60905aaa13aaf3a482618c72f35f7c02ce2","unresolved":false,"context_lines":[{"line_number":165,"context_line":""},{"line_number":166,"context_line":"    def disable_keepalived(self):"},{"line_number":167,"context_line":"        if not self.keepalived_manager:"},{"line_number":168,"context_line":"            return"},{"line_number":169,"context_line":"        self.keepalived_manager.disable()"},{"line_number":170,"context_line":"        conf_dir \u003d self.keepalived_manager.get_conf_dir()"},{"line_number":171,"context_line":"        shutil.rmtree(conf_dir)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f4b6375_6a713aa8","line":168,"in_reply_to":"3f4b6375_226edbff","updated":"2017-11-03 20:22:00.000000000","message":"I\u0027ll add them since it might help track down future issues, but reserve the right to remove if we start filling up the logs with them.","commit_id":"49bc7327309375ef56eeb8cf4ae48e7f06dea8b6"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"2a238508e1fe57b49dd059c3225935f0446e004f","unresolved":false,"context_lines":[{"line_number":194,"context_line":"                            namespace\u003dself.ha_namespace,"},{"line_number":195,"context_line":"                            preserve_ips\u003d[self._get_primary_vip()])"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"    def ha_network_removed(self):"},{"line_number":198,"context_line":"        if not self.ha_port:"},{"line_number":199,"context_line":"            return"},{"line_number":200,"context_line":"        self.driver.unplug(self.get_ha_device_name(),"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f4b6375_39cde584","line":197,"updated":"2017-11-03 16:53:07.000000000","message":"if this is called while initialize() is being processed, does it mean that we won\u0027t unplug the device ever?","commit_id":"49bc7327309375ef56eeb8cf4ae48e7f06dea8b6"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"f2543a026732800d0cdcc8b09087653894582062","unresolved":false,"context_lines":[{"line_number":194,"context_line":"                            namespace\u003dself.ha_namespace,"},{"line_number":195,"context_line":"                            preserve_ips\u003d[self._get_primary_vip()])"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"    def ha_network_removed(self):"},{"line_number":198,"context_line":"        if not self.ha_port:"},{"line_number":199,"context_line":"            return"},{"line_number":200,"context_line":"        self.driver.unplug(self.get_ha_device_name(),"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f4b6375_2725bb09","line":197,"in_reply_to":"3f4b6375_39cde584","updated":"2017-11-03 20:09:54.000000000","message":"Ditto.","commit_id":"49bc7327309375ef56eeb8cf4ae48e7f06dea8b6"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"7517604a98fb57ab3ead079bb4f7e62a2e112eff","unresolved":false,"context_lines":[{"line_number":196,"context_line":""},{"line_number":197,"context_line":"    def ha_network_removed(self):"},{"line_number":198,"context_line":"        if not self.ha_port:"},{"line_number":199,"context_line":"            return"},{"line_number":200,"context_line":"        self.driver.unplug(self.get_ha_device_name(),"},{"line_number":201,"context_line":"                           namespace\u003dself.ha_namespace,"},{"line_number":202,"context_line":"                           prefix\u003dHA_DEV_PREFIX)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f4b6375_02775fd6","line":199,"updated":"2017-11-03 08:35:23.000000000","message":"shouldn\u0027t You maybe log (e.g. DEBUG) something in such case?","commit_id":"49bc7327309375ef56eeb8cf4ae48e7f06dea8b6"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"7517604a98fb57ab3ead079bb4f7e62a2e112eff","unresolved":false,"context_lines":[{"line_number":367,"context_line":"            self.router_id, IP_MONITOR_PROCESS_SERVICE, pm)"},{"line_number":368,"context_line":""},{"line_number":369,"context_line":"    def destroy_state_change_monitor(self, process_monitor):"},{"line_number":370,"context_line":"        if not self.ha_port:"},{"line_number":371,"context_line":"            return"},{"line_number":372,"context_line":"        pm \u003d self._get_state_change_monitor_process_manager()"},{"line_number":373,"context_line":"        process_monitor.unregister("}],"source_content_type":"text/x-python","patch_set":2,"id":"3f4b6375_e27323e6","line":370,"updated":"2017-11-03 08:35:23.000000000","message":"shouldn\u0027t You maybe log (e.g. DEBUG) something in such case?","commit_id":"49bc7327309375ef56eeb8cf4ae48e7f06dea8b6"}]}
