)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"de1606d9f0dae1b83cdd6cc675327f152f860966","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"d8f6a59d_2d2710d3","updated":"2021-10-21 13:52:09.000000000","message":"recheck","commit_id":"9615f90e5010a3e3ad20089e0fcf174179b79a64"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"f9e97607b6608de0f984d9e1ffa825ecaec68eb0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"6cbaea6a_c842d742","updated":"2021-11-02 08:23:45.000000000","message":"Seems like functional tests failures can be related to that patch now. I will investigate it before rechecking","commit_id":"064cc0bd3eac4c047c762eb2c44da43c53d0e5b8"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"f3b726ce9a2136e36de4dc14cbbab9f41ec0de37","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"4745c996_ab2c549b","updated":"2021-11-09 08:47:04.000000000","message":"recheck","commit_id":"41159bd9a4178a5f8a4fdc90b034c48fa9880cac"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"c40ff5a8f50d63478f4bd32908897ebb18312606","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"916ca25d_50a0f01c","updated":"2021-11-10 08:57:03.000000000","message":"recheck","commit_id":"41159bd9a4178a5f8a4fdc90b034c48fa9880cac"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"0f665379c3a394a2bf4c493daacf7571686d623f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"a28c5603_3646ae18","updated":"2021-11-10 14:39:10.000000000","message":"recheck","commit_id":"41159bd9a4178a5f8a4fdc90b034c48fa9880cac"}],"neutron/agent/l3/agent.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"a9b3696bafc9c759375ff884cee806c2ac7cbb63","unresolved":true,"context_lines":[{"line_number":648,"context_line":"        try:"},{"line_number":649,"context_line":"            ri.process()"},{"line_number":650,"context_line":"        except Exception as err:"},{"line_number":651,"context_line":"            LOG.warning(\"Processing router %s failed. Error: %s\","},{"line_number":652,"context_line":"                        router[\u0027id\u0027], err)"},{"line_number":653,"context_line":"            del self.router_info[router[\u0027id\u0027]]"},{"line_number":654,"context_line":"            raise err"}],"source_content_type":"text/x-python","patch_set":1,"id":"10438f14_2a9018d4","line":651,"range":{"start_line":651,"start_character":12,"end_line":651,"end_character":23},"updated":"2021-10-21 15:43:12.000000000","message":"Is this a high enough warning level?  Should it be LOG.exception?","commit_id":"9615f90e5010a3e3ad20089e0fcf174179b79a64"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"6248043118c0aed7b34f2eaa4696649b1cda146e","unresolved":true,"context_lines":[{"line_number":648,"context_line":"        try:"},{"line_number":649,"context_line":"            ri.process()"},{"line_number":650,"context_line":"        except Exception as err:"},{"line_number":651,"context_line":"            LOG.warning(\"Processing router %s failed. Error: %s\","},{"line_number":652,"context_line":"                        router[\u0027id\u0027], err)"},{"line_number":653,"context_line":"            del self.router_info[router[\u0027id\u0027]]"},{"line_number":654,"context_line":"            raise err"}],"source_content_type":"text/x-python","patch_set":1,"id":"bb522563_0a725036","line":651,"range":{"start_line":651,"start_character":12,"end_line":651,"end_character":23},"in_reply_to":"10438f14_2a9018d4","updated":"2021-10-21 15:51:11.000000000","message":"Wondering if better reuse logic #496-506 for additional cleanup","commit_id":"9615f90e5010a3e3ad20089e0fcf174179b79a64"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"ce7fcad04a1f1c9e9203142ee4ee4bb8c4dd90f6","unresolved":false,"context_lines":[{"line_number":648,"context_line":"        try:"},{"line_number":649,"context_line":"            ri.process()"},{"line_number":650,"context_line":"        except Exception as err:"},{"line_number":651,"context_line":"            LOG.warning(\"Processing router %s failed. Error: %s\","},{"line_number":652,"context_line":"                        router[\u0027id\u0027], err)"},{"line_number":653,"context_line":"            del self.router_info[router[\u0027id\u0027]]"},{"line_number":654,"context_line":"            raise err"}],"source_content_type":"text/x-python","patch_set":1,"id":"f41a792f_d6dfda77","line":651,"range":{"start_line":651,"start_character":12,"end_line":651,"end_character":23},"in_reply_to":"8f353c33_bd6b451b","updated":"2021-10-26 07:12:30.000000000","message":"I think #496-506 ensures router is not partially processed, IOW not left in undefined state after error. Why shouldn\u0027t it be done here same way?","commit_id":"9615f90e5010a3e3ad20089e0fcf174179b79a64"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"f9289ad8f4081238abaacb3c30bedef462cd1725","unresolved":false,"context_lines":[{"line_number":648,"context_line":"        try:"},{"line_number":649,"context_line":"            ri.process()"},{"line_number":650,"context_line":"        except Exception as err:"},{"line_number":651,"context_line":"            LOG.warning(\"Processing router %s failed. Error: %s\","},{"line_number":652,"context_line":"                        router[\u0027id\u0027], err)"},{"line_number":653,"context_line":"            del self.router_info[router[\u0027id\u0027]]"},{"line_number":654,"context_line":"            raise err"}],"source_content_type":"text/x-python","patch_set":1,"id":"8f353c33_bd6b451b","line":651,"range":{"start_line":651,"start_character":12,"end_line":651,"end_character":23},"in_reply_to":"bb522563_0a725036","updated":"2021-10-25 20:30:57.000000000","message":"@Brian - I changed it to exception()\n@Oleg - I changed to use excutils.save_and_reraise_exception but I don\u0027t want to do things like ri.delete() as this may cause more problems IMO because it would delete namespaces, update fip statuses, etc. I\u0027m not sure if that is really needed here as router will be processed in next iteration anyway. Wdyt?","commit_id":"9615f90e5010a3e3ad20089e0fcf174179b79a64"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"6b8335c9e11dc0a52fb14d4a9017e68040c93b36","unresolved":false,"context_lines":[{"line_number":648,"context_line":"        try:"},{"line_number":649,"context_line":"            ri.process()"},{"line_number":650,"context_line":"        except Exception as err:"},{"line_number":651,"context_line":"            LOG.warning(\"Processing router %s failed. Error: %s\","},{"line_number":652,"context_line":"                        router[\u0027id\u0027], err)"},{"line_number":653,"context_line":"            del self.router_info[router[\u0027id\u0027]]"},{"line_number":654,"context_line":"            raise err"}],"source_content_type":"text/x-python","patch_set":1,"id":"b8e90d96_8c67c251","line":651,"range":{"start_line":651,"start_character":12,"end_line":651,"end_character":23},"in_reply_to":"f41a792f_d6dfda77","updated":"2021-10-27 14:18:40.000000000","message":"Done","commit_id":"9615f90e5010a3e3ad20089e0fcf174179b79a64"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"7bb9a5e7a6e31f7ad36830204cc20d43639a2a3d","unresolved":true,"context_lines":[{"line_number":502,"context_line":"        self._resize_process_pool()"},{"line_number":503,"context_line":""},{"line_number":504,"context_line":"    def _cleanup_failed_router(self, router_id, ri\u003dNone):"},{"line_number":505,"context_line":"        del self.router_info[router_id]"},{"line_number":506,"context_line":"        self.namespaces_manager.ensure_router_cleanup(router_id)"},{"line_number":507,"context_line":"        try:"},{"line_number":508,"context_line":"            if ri:"}],"source_content_type":"text/x-python","patch_set":5,"id":"5057258f_2ee1b48d","line":505,"updated":"2021-11-03 23:38:50.000000000","message":"I see the change you did from PS4 to 5 and just had a question.\n\nIn this call, self.router_info[router_id] contains ri as it was assigned in both the callers.  So, technically speaking, the caller doesn\u0027t need to pass it, they just need to ask for it to be deleted from what I can tell.\n\nPedantic (I know), but I\u0027m just trying to figure out how calling ri.delete() was causing problems.","commit_id":"2db8a45bc9533aa7e4111278423d441763c5034a"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"e69ba1f768ec84da41ce25d2da5613128cc6823b","unresolved":false,"context_lines":[{"line_number":502,"context_line":"        self._resize_process_pool()"},{"line_number":503,"context_line":""},{"line_number":504,"context_line":"    def _cleanup_failed_router(self, router_id, ri\u003dNone):"},{"line_number":505,"context_line":"        del self.router_info[router_id]"},{"line_number":506,"context_line":"        self.namespaces_manager.ensure_router_cleanup(router_id)"},{"line_number":507,"context_line":"        try:"},{"line_number":508,"context_line":"            if ri:"}],"source_content_type":"text/x-python","patch_set":5,"id":"e683d22b_84bb898e","line":505,"in_reply_to":"5057258f_2ee1b48d","updated":"2021-11-07 15:42:36.000000000","message":"I\u0027m not sure exactly how this could cause problems really but it does cause failures in the tests which were added by patch https://review.opendev.org/c/openstack/neutron/+/385617\nIIUC this correct, that patch fixed some race condition and now by calling ri.delete() we may hit same race condition again. So that\u0027s why I would like to avoid calling it when it\u0027s not needed.\n\nBut I changed this to have simple bool flag to tell method if ri.delete() should be called or not","commit_id":"2db8a45bc9533aa7e4111278423d441763c5034a"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"7bb9a5e7a6e31f7ad36830204cc20d43639a2a3d","unresolved":true,"context_lines":[{"line_number":661,"context_line":"                # retried on next call and that may lead to some race"},{"line_number":662,"context_line":"                # conditions e.g. with configuration of the DVR router\u0027s"},{"line_number":663,"context_line":"                # FIP gateway"},{"line_number":664,"context_line":"                self._cleanup_failed_router(router[\u0027id\u0027])"},{"line_number":665,"context_line":""},{"line_number":666,"context_line":"        registry.publish(resources.ROUTER, events.AFTER_CREATE, self,"},{"line_number":667,"context_line":"                         payload\u003devents.DBEventPayload("}],"source_content_type":"text/x-python","patch_set":5,"id":"e6d71481_381d8422","line":664,"updated":"2021-11-03 23:38:50.000000000","message":"Should there be a return here?  i.e. if we didn\u0027t add the router should we be publishing we did?","commit_id":"2db8a45bc9533aa7e4111278423d441763c5034a"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"e69ba1f768ec84da41ce25d2da5613128cc6823b","unresolved":true,"context_lines":[{"line_number":661,"context_line":"                # retried on next call and that may lead to some race"},{"line_number":662,"context_line":"                # conditions e.g. with configuration of the DVR router\u0027s"},{"line_number":663,"context_line":"                # FIP gateway"},{"line_number":664,"context_line":"                self._cleanup_failed_router(router[\u0027id\u0027])"},{"line_number":665,"context_line":""},{"line_number":666,"context_line":"        registry.publish(resources.ROUTER, events.AFTER_CREATE, self,"},{"line_number":667,"context_line":"                         payload\u003devents.DBEventPayload("}],"source_content_type":"text/x-python","patch_set":5,"id":"3473cbb5_59d7691e","line":664,"updated":"2021-11-07 15:42:36.000000000","message":"Why? save_and_reraise_exception should raise original exception after cleanup so we will not get further in that method, right?","commit_id":"2db8a45bc9533aa7e4111278423d441763c5034a"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"830e32f66f5f49486aeb97ccd03d1b976af3dfe5","unresolved":true,"context_lines":[{"line_number":497,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":498,"context_line":"                LOG.exception(\u0027Error while initializing router %s\u0027,"},{"line_number":499,"context_line":"                              router_id)"},{"line_number":500,"context_line":"                self._cleanup_failed_router(router_id, True)"},{"line_number":501,"context_line":""},{"line_number":502,"context_line":"        self._resize_process_pool()"},{"line_number":503,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"d542e71b_b87d8331","line":500,"range":{"start_line":500,"start_character":55,"end_line":500,"end_character":59},"updated":"2021-11-08 07:58:15.000000000","message":"nit: delete_router_info\u003dTrue for readability","commit_id":"8ce361b988d584a5492d0d91286017d43691b651"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"6f8a746035480ce184837aa91628d9a75dc7416b","unresolved":false,"context_lines":[{"line_number":497,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":498,"context_line":"                LOG.exception(\u0027Error while initializing router %s\u0027,"},{"line_number":499,"context_line":"                              router_id)"},{"line_number":500,"context_line":"                self._cleanup_failed_router(router_id, True)"},{"line_number":501,"context_line":""},{"line_number":502,"context_line":"        self._resize_process_pool()"},{"line_number":503,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"d95d60fd_6b17f838","line":500,"range":{"start_line":500,"start_character":55,"end_line":500,"end_character":59},"in_reply_to":"d542e71b_b87d8331","updated":"2021-11-08 15:42:22.000000000","message":"Done","commit_id":"8ce361b988d584a5492d0d91286017d43691b651"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"830e32f66f5f49486aeb97ccd03d1b976af3dfe5","unresolved":true,"context_lines":[{"line_number":655,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":656,"context_line":"                LOG.exception(\u0027Error while processing router %s\u0027,"},{"line_number":657,"context_line":"                              router[\u0027id\u0027])"},{"line_number":658,"context_line":"                # NOTE(slaweq): ri object is not passed to the"},{"line_number":659,"context_line":"                # _cleanup_failed_router to avoid cleaning router info as"},{"line_number":660,"context_line":"                # in case of error during processing of the router will be"},{"line_number":661,"context_line":"                # retried on next call and that may lead to some race"},{"line_number":662,"context_line":"                # conditions e.g. with configuration of the DVR router\u0027s"}],"source_content_type":"text/x-python","patch_set":6,"id":"e1a7e1c9_e09db5e1","line":659,"range":{"start_line":658,"start_character":32,"end_line":659,"end_character":58},"updated":"2021-11-08 07:58:15.000000000","message":"the func does not accept ri objects according to signature, should the be reworded for delete_router_info parameter?","commit_id":"8ce361b988d584a5492d0d91286017d43691b651"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"6f8a746035480ce184837aa91628d9a75dc7416b","unresolved":false,"context_lines":[{"line_number":655,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":656,"context_line":"                LOG.exception(\u0027Error while processing router %s\u0027,"},{"line_number":657,"context_line":"                              router[\u0027id\u0027])"},{"line_number":658,"context_line":"                # NOTE(slaweq): ri object is not passed to the"},{"line_number":659,"context_line":"                # _cleanup_failed_router to avoid cleaning router info as"},{"line_number":660,"context_line":"                # in case of error during processing of the router will be"},{"line_number":661,"context_line":"                # retried on next call and that may lead to some race"},{"line_number":662,"context_line":"                # conditions e.g. with configuration of the DVR router\u0027s"}],"source_content_type":"text/x-python","patch_set":6,"id":"e27986f3_6d068632","line":659,"range":{"start_line":658,"start_character":32,"end_line":659,"end_character":58},"in_reply_to":"e1a7e1c9_e09db5e1","updated":"2021-11-08 15:42:22.000000000","message":"Done","commit_id":"8ce361b988d584a5492d0d91286017d43691b651"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"830e32f66f5f49486aeb97ccd03d1b976af3dfe5","unresolved":true,"context_lines":[{"line_number":661,"context_line":"                # retried on next call and that may lead to some race"},{"line_number":662,"context_line":"                # conditions e.g. with configuration of the DVR router\u0027s"},{"line_number":663,"context_line":"                # FIP gateway"},{"line_number":664,"context_line":"                self._cleanup_failed_router(router[\u0027id\u0027], False)"},{"line_number":665,"context_line":""},{"line_number":666,"context_line":"        registry.publish(resources.ROUTER, events.AFTER_CREATE, self,"},{"line_number":667,"context_line":"                         payload\u003devents.DBEventPayload("}],"source_content_type":"text/x-python","patch_set":6,"id":"243a9ca0_9de8fb2a","line":664,"range":{"start_line":664,"start_character":58,"end_line":664,"end_character":63},"updated":"2021-11-08 07:58:15.000000000","message":"ditto","commit_id":"8ce361b988d584a5492d0d91286017d43691b651"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"6f8a746035480ce184837aa91628d9a75dc7416b","unresolved":false,"context_lines":[{"line_number":661,"context_line":"                # retried on next call and that may lead to some race"},{"line_number":662,"context_line":"                # conditions e.g. with configuration of the DVR router\u0027s"},{"line_number":663,"context_line":"                # FIP gateway"},{"line_number":664,"context_line":"                self._cleanup_failed_router(router[\u0027id\u0027], False)"},{"line_number":665,"context_line":""},{"line_number":666,"context_line":"        registry.publish(resources.ROUTER, events.AFTER_CREATE, self,"},{"line_number":667,"context_line":"                         payload\u003devents.DBEventPayload("}],"source_content_type":"text/x-python","patch_set":6,"id":"1fc54bb0_7fe58a0f","line":664,"range":{"start_line":664,"start_character":58,"end_line":664,"end_character":63},"in_reply_to":"243a9ca0_9de8fb2a","updated":"2021-11-08 15:42:22.000000000","message":"Done","commit_id":"8ce361b988d584a5492d0d91286017d43691b651"}]}
