)]}'
{"neutron/agent/l3/dvr_local_router.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"6f73ac048fb481bc70ab88bfd3cf08e8fd1dd502","unresolved":false,"context_lines":[{"line_number":802,"context_line":"                                                     fip_ns_name, tbl_index):"},{"line_number":803,"context_line":"        ip_device \u003d ip_lib.IPDevice(\u0027\u0027, namespace\u003dfip_ns_name)"},{"line_number":804,"context_line":"        cmd \u003d (ip_device.route.add_route if operation \u003d\u003d \u0027replace\u0027 else"},{"line_number":805,"context_line":"               ip_device.route.delete_route)"},{"line_number":806,"context_line":"        try:"},{"line_number":807,"context_line":"            cmd(route[\u0027destination\u0027], via\u003droute[\u0027nexthop\u0027], table\u003dtbl_index)"},{"line_number":808,"context_line":"        except priv_ip_lib.NetworkNamespaceNotFound:"}],"source_content_type":"text/x-python","patch_set":1,"id":"1f621f24_4192414d","line":805,"updated":"2020-11-18 17:57:01.000000000","message":"Instead of instantiating the IPDevice, you can just call ip_lib.add_ip_route() or delete_ip_route() directly, as is done in _update_routing_table() in router_info.py","commit_id":"f5084345a7b9f6518813023db869baca576683d2"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"28e05bfabb3611f3b8328a39c558763e41b824d0","unresolved":false,"context_lines":[{"line_number":802,"context_line":"                                                     fip_ns_name, tbl_index):"},{"line_number":803,"context_line":"        ip_device \u003d ip_lib.IPDevice(\u0027\u0027, namespace\u003dfip_ns_name)"},{"line_number":804,"context_line":"        cmd \u003d (ip_device.route.add_route if operation \u003d\u003d \u0027replace\u0027 else"},{"line_number":805,"context_line":"               ip_device.route.delete_route)"},{"line_number":806,"context_line":"        try:"},{"line_number":807,"context_line":"            cmd(route[\u0027destination\u0027], via\u003droute[\u0027nexthop\u0027], table\u003dtbl_index)"},{"line_number":808,"context_line":"        except priv_ip_lib.NetworkNamespaceNotFound:"}],"source_content_type":"text/x-python","patch_set":1,"id":"fffc6b78_27664853","line":805,"in_reply_to":"1f621f24_4192414d","updated":"2020-11-19 08:54:08.000000000","message":"You are right!","commit_id":"f5084345a7b9f6518813023db869baca576683d2"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"2bd5b0ae0b596d0ea6e80ada58d6089364160bfa","unresolved":false,"context_lines":[{"line_number":809,"context_line":"            LOG.debug(\"The FIP namespace %(ns)s does not exist for \""},{"line_number":810,"context_line":"                      \"router %(id)s\","},{"line_number":811,"context_line":"                      {\u0027ns\u0027: fip_ns_name, \u0027id\u0027: self.router_id})"},{"line_number":812,"context_line":"        except OSError:"},{"line_number":813,"context_line":"            pass"},{"line_number":814,"context_line":""},{"line_number":815,"context_line":"    def _check_if_route_applicable_to_fip_namespace(self, route,"},{"line_number":816,"context_line":"                                                    agent_gateway_port):"}],"source_content_type":"text/x-python","patch_set":1,"id":"fffc6b78_4ce8d315","line":813,"range":{"start_line":812,"start_character":8,"end_line":813,"end_character":16},"updated":"2020-11-19 06:00:14.000000000","message":"What\u0027s the case for this?","commit_id":"f5084345a7b9f6518813023db869baca576683d2"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"28e05bfabb3611f3b8328a39c558763e41b824d0","unresolved":false,"context_lines":[{"line_number":809,"context_line":"            LOG.debug(\"The FIP namespace %(ns)s does not exist for \""},{"line_number":810,"context_line":"                      \"router %(id)s\","},{"line_number":811,"context_line":"                      {\u0027ns\u0027: fip_ns_name, \u0027id\u0027: self.router_id})"},{"line_number":812,"context_line":"        except OSError:"},{"line_number":813,"context_line":"            pass"},{"line_number":814,"context_line":""},{"line_number":815,"context_line":"    def _check_if_route_applicable_to_fip_namespace(self, route,"},{"line_number":816,"context_line":"                                                    agent_gateway_port):"}],"source_content_type":"text/x-python","patch_set":1,"id":"fffc6b78_27cbe81e","line":813,"range":{"start_line":812,"start_character":8,"end_line":813,"end_character":16},"in_reply_to":"fffc6b78_4ce8d315","updated":"2020-11-19 08:54:08.000000000","message":"We don\u0027t have the equivalent to \"check_exit_code\u003dFalse\". If this operation fails (maybe the route is not there, or the via IP is not accessible anymore, etc), the operation will fail with an exception.\n\nNow I realize, we need to include NetlinkError.","commit_id":"f5084345a7b9f6518813023db869baca576683d2"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"a76e5421c061e32066294d3990489c1142b506b1","unresolved":false,"context_lines":[{"line_number":810,"context_line":"            LOG.debug(\"The FIP namespace %(ns)s does not exist for \""},{"line_number":811,"context_line":"                      \"router %(id)s\","},{"line_number":812,"context_line":"                      {\u0027ns\u0027: fip_ns_name, \u0027id\u0027: self.router_id})"},{"line_number":813,"context_line":"        except (OSError, pyroute2_exc.NetlinkError):"},{"line_number":814,"context_line":"            pass"},{"line_number":815,"context_line":""},{"line_number":816,"context_line":"    def _check_if_route_applicable_to_fip_namespace(self, route,"}],"source_content_type":"text/x-python","patch_set":2,"id":"fffc6b78_5edcf217","line":813,"updated":"2020-11-19 17:02:05.000000000","message":"Just a comment - _update_routing_table() also catches RuntimeError, should you do that here?","commit_id":"49f2d920ae88619fa9baf105744b2aa4b193c359"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"365b95c681ed55046ed0dcdb773fbab8e6831968","unresolved":false,"context_lines":[{"line_number":810,"context_line":"            LOG.debug(\"The FIP namespace %(ns)s does not exist for \""},{"line_number":811,"context_line":"                      \"router %(id)s\","},{"line_number":812,"context_line":"                      {\u0027ns\u0027: fip_ns_name, \u0027id\u0027: self.router_id})"},{"line_number":813,"context_line":"        except (OSError, pyroute2_exc.NetlinkError):"},{"line_number":814,"context_line":"            pass"},{"line_number":815,"context_line":""},{"line_number":816,"context_line":"    def _check_if_route_applicable_to_fip_namespace(self, route,"}],"source_content_type":"text/x-python","patch_set":2,"id":"c3c484f1_913b7563","line":813,"in_reply_to":"26d12595_a518f547","updated":"2020-11-24 14:27:19.000000000","message":"So maybe it\u0027s _update_routing_table() that needs an update as it\u0027s basically the same code.","commit_id":"49f2d920ae88619fa9baf105744b2aa4b193c359"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"d3c5ec398c26b1ec64e5ff589b5a501c80ae7bdb","unresolved":false,"context_lines":[{"line_number":810,"context_line":"            LOG.debug(\"The FIP namespace %(ns)s does not exist for \""},{"line_number":811,"context_line":"                      \"router %(id)s\","},{"line_number":812,"context_line":"                      {\u0027ns\u0027: fip_ns_name, \u0027id\u0027: self.router_id})"},{"line_number":813,"context_line":"        except (OSError, pyroute2_exc.NetlinkError):"},{"line_number":814,"context_line":"            pass"},{"line_number":815,"context_line":""},{"line_number":816,"context_line":"    def _check_if_route_applicable_to_fip_namespace(self, route,"}],"source_content_type":"text/x-python","patch_set":2,"id":"26d12595_a518f547","line":813,"in_reply_to":"fffc6b78_5edcf217","updated":"2020-11-24 14:05:03.000000000","message":"\"RuntimeError\" is raised in a shell command execution but here we are executing a native command, using pyroute2. We can have OSError or pyroute2_exc.NetlinkError exceptions.","commit_id":"49f2d920ae88619fa9baf105744b2aa4b193c359"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"f2b84ca0d5b61f79ba521c796a29080f45587f7a","unresolved":true,"context_lines":[{"line_number":813,"context_line":"        except (OSError, pyroute2_exc.NetlinkError):"},{"line_number":814,"context_line":"            pass"},{"line_number":815,"context_line":""},{"line_number":816,"context_line":"        cmd \u003d [\u0027ip\u0027, \u0027route\u0027, operation, \u0027to\u0027, route[\u0027destination\u0027],"},{"line_number":817,"context_line":"               \u0027via\u0027, route[\u0027nexthop\u0027], \u0027table\u0027, tbl_index]"},{"line_number":818,"context_line":"        ip_wrapper \u003d ip_lib.IPWrapper(namespace\u003dfip_ns_name)"},{"line_number":819,"context_line":"        if ip_wrapper.netns.exists(fip_ns_name):"},{"line_number":820,"context_line":"            ip_wrapper.netns.execute(cmd, check_exit_code\u003dFalse)"},{"line_number":821,"context_line":"        else:"},{"line_number":822,"context_line":"            LOG.debug(\"The FIP namespace %(ns)s does not exist for \""},{"line_number":823,"context_line":"                      \"router %(id)s\","},{"line_number":824,"context_line":"                      {\u0027ns\u0027: fip_ns_name, \u0027id\u0027: self.router_id})"},{"line_number":825,"context_line":""},{"line_number":826,"context_line":"    def _check_if_route_applicable_to_fip_namespace(self, route,"},{"line_number":827,"context_line":"                                                    agent_gateway_port):"}],"source_content_type":"text/x-python","patch_set":4,"id":"9282fe9c_7a624cc4","line":824,"range":{"start_line":816,"start_character":8,"end_line":824,"end_character":64},"updated":"2020-11-30 22:21:54.000000000","message":"Doesn\u0027t this need to go away?","commit_id":"adc1a9fcd80d027b8957b4726a8fd76fa4f6cf7d"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"c993766ac13db2a60b62bfdf9b37010664b56abd","unresolved":true,"context_lines":[{"line_number":813,"context_line":"        except (OSError, pyroute2_exc.NetlinkError):"},{"line_number":814,"context_line":"            pass"},{"line_number":815,"context_line":""},{"line_number":816,"context_line":"        cmd \u003d [\u0027ip\u0027, \u0027route\u0027, operation, \u0027to\u0027, route[\u0027destination\u0027],"},{"line_number":817,"context_line":"               \u0027via\u0027, route[\u0027nexthop\u0027], \u0027table\u0027, tbl_index]"},{"line_number":818,"context_line":"        ip_wrapper \u003d ip_lib.IPWrapper(namespace\u003dfip_ns_name)"},{"line_number":819,"context_line":"        if ip_wrapper.netns.exists(fip_ns_name):"},{"line_number":820,"context_line":"            ip_wrapper.netns.execute(cmd, check_exit_code\u003dFalse)"},{"line_number":821,"context_line":"        else:"},{"line_number":822,"context_line":"            LOG.debug(\"The FIP namespace %(ns)s does not exist for \""},{"line_number":823,"context_line":"                      \"router %(id)s\","},{"line_number":824,"context_line":"                      {\u0027ns\u0027: fip_ns_name, \u0027id\u0027: self.router_id})"},{"line_number":825,"context_line":""},{"line_number":826,"context_line":"    def _check_if_route_applicable_to_fip_namespace(self, route,"},{"line_number":827,"context_line":"                                                    agent_gateway_port):"}],"source_content_type":"text/x-python","patch_set":4,"id":"6872e24e_9db3c558","line":824,"range":{"start_line":816,"start_character":8,"end_line":824,"end_character":64},"in_reply_to":"9282fe9c_7a624cc4","updated":"2020-12-01 10:31:36.000000000","message":"Yes but the upper code (that should replace this section) is not properly working. Actually I see how the route is added in the namespace, but somehow this prevents the router metadata proxy being deleted (!!??) [1]\n\nWhen I execute again the shell command (ip route replace...), the test passes. I need to check pyroute2 route method implementation.\n\n[1]https://ffc340d0f928f38da95a-e9994ba993eca60ae5b9f38cb0f15b15.ssl.cf1.rackcdn.com/763231/3/check/neutron-functional-with-uwsgi/d3529cf/testr_results.html","commit_id":"adc1a9fcd80d027b8957b4726a8fd76fa4f6cf7d"}],"neutron/agent/linux/ip_lib.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"1d85ed73414e790dd3d54d88146a00aaab2f8e55","unresolved":true,"context_lines":[{"line_number":83,"context_line":"                           constants.IP_VERSION_6: 1024}"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"IP_PROTOCOL_REVERSE_MAP \u003d {number: name for name, number in"},{"line_number":86,"context_line":"                           constants.IP_PROTOCOL_MAP.items()}"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"def remove_interface_suffix(interface):"}],"source_content_type":"text/x-python","patch_set":15,"id":"c7303d1f_bc0ead01","line":86,"updated":"2021-03-15 01:06:15.000000000","message":"This looks like IP_PROTOCOL_NUM_TO_NAME_MAP which is defined in lib constants as well, you can see the usage in the SG code to confirm.","commit_id":"52364d40026017f361dbf20864e0eda10fcb1be9"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"533fef0f3df48b88f4faf6bc328921678edace43","unresolved":true,"context_lines":[{"line_number":83,"context_line":"                           constants.IP_VERSION_6: 1024}"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"IP_PROTOCOL_REVERSE_MAP \u003d {number: name for name, number in"},{"line_number":86,"context_line":"                           constants.IP_PROTOCOL_MAP.items()}"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"def remove_interface_suffix(interface):"}],"source_content_type":"text/x-python","patch_set":15,"id":"065874db_9bd5330b","line":86,"in_reply_to":"c7303d1f_bc0ead01","updated":"2021-03-15 16:05:50.000000000","message":"It is, indeed. The problem is that the keys are strings, but I can handle it.","commit_id":"52364d40026017f361dbf20864e0eda10fcb1be9"}]}
