)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":27032,"name":"Maysa de Macedo Souza","email":"maysa.macedo95@gmail.com","username":"maysa"},"change_message_id":"8a7feaceabe17dd0e07bdda98a7c2cf970441aea","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"af8a611b_deda8f1d","updated":"2022-04-25 10:08:37.000000000","message":"Looks good! Just some extra restrictions regarding the Ports query:","commit_id":"5074fb09685b4a38aea17f26c43990083c27ac94"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"f7143eb1f5d23991027dfca1792108057f6c3dec","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"762896af_67655085","updated":"2022-04-26 06:53:24.000000000","message":"recheck","commit_id":"db1d663b9a7c0936d8563ea262e5b7b140aced2c"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"4a24e872c3d67127c9ec8d1999a4f5ef4a92481b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"86cbb82d_ed08a857","updated":"2022-04-29 17:17:25.000000000","message":"recheck","commit_id":"cc0717d2103ff57fce2d816b591b7eed8a12d2b0"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"a23068db32b87c688d29713b953108c10467b9b8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"f6828fa7_514c5a14","updated":"2022-05-04 15:45:01.000000000","message":"Minor logging remarks, otherwise this is good to go IMO.","commit_id":"cff3d38154be31300275be11c03ae1283a122a30"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"dc77237dbc96ebb4c6ca2078cfdbde3ee53f6629","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"5b0dfdd3_535dc4bf","updated":"2022-05-04 11:48:47.000000000","message":"recheck","commit_id":"cff3d38154be31300275be11c03ae1283a122a30"}],"kuryr_kubernetes/controller/service.py":[{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"f606c2d0fa3e245036564513d5bc5c9506bc6d7c","unresolved":true,"context_lines":[{"line_number":172,"context_line":"        for handler in self.handlers:"},{"line_number":173,"context_line":"            handler.reconcile()"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"    @periodic_task.periodic_task(spacing\u003d600, run_immediately\u003dFalse)"},{"line_number":176,"context_line":"    def cleanup_dead_ports(self, context):"},{"line_number":177,"context_line":"        utils.cleanup_dead_ports()"},{"line_number":178,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"8fc1f4f9_7ea8dded","line":175,"range":{"start_line":175,"start_character":41,"end_line":175,"end_character":44},"updated":"2022-04-19 11:06:38.000000000","message":"Ten minutes could be a bit to long to wait. Perhaps it should be shortened to maybe one minute or two?","commit_id":"5074fb09685b4a38aea17f26c43990083c27ac94"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"62832fdc1cc32ac18866fde2fab60a16811e616c","unresolved":false,"context_lines":[{"line_number":172,"context_line":"        for handler in self.handlers:"},{"line_number":173,"context_line":"            handler.reconcile()"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"    @periodic_task.periodic_task(spacing\u003d600, run_immediately\u003dFalse)"},{"line_number":176,"context_line":"    def cleanup_dead_ports(self, context):"},{"line_number":177,"context_line":"        utils.cleanup_dead_ports()"},{"line_number":178,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"6628d0ad_1cc68c7f","line":175,"range":{"start_line":175,"start_character":41,"end_line":175,"end_character":44},"in_reply_to":"8fc1f4f9_7ea8dded","updated":"2022-05-05 05:04:41.000000000","message":"Done","commit_id":"5074fb09685b4a38aea17f26c43990083c27ac94"},{"author":{"_account_id":27032,"name":"Maysa de Macedo Souza","email":"maysa.macedo95@gmail.com","username":"maysa"},"change_message_id":"af351c496b6b60ab8f23660eb58d8749342a8837","unresolved":true,"context_lines":[{"line_number":172,"context_line":"        for handler in self.handlers:"},{"line_number":173,"context_line":"            handler.reconcile()"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"    @periodic_task.periodic_task(spacing\u003d90, run_immediately\u003dFalse)"},{"line_number":176,"context_line":"    def cleanup_dead_ports(self, context):"},{"line_number":177,"context_line":"        utils.cleanup_dead_ports()"},{"line_number":178,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"034f5c4a_50fef240","line":175,"range":{"start_line":175,"start_character":41,"end_line":175,"end_character":43},"updated":"2022-04-25 18:14:48.000000000","message":"this might be too frequent, I think 10 mins is good.","commit_id":"db1d663b9a7c0936d8563ea262e5b7b140aced2c"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"999b029e741d167dacb982517471da33c47bc9bd","unresolved":true,"context_lines":[{"line_number":172,"context_line":"        for handler in self.handlers:"},{"line_number":173,"context_line":"            handler.reconcile()"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"    @periodic_task.periodic_task(spacing\u003d90, run_immediately\u003dFalse)"},{"line_number":176,"context_line":"    def cleanup_dead_ports(self, context):"},{"line_number":177,"context_line":"        utils.cleanup_dead_ports()"},{"line_number":178,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"364ce90f_b48bf932","line":175,"range":{"start_line":175,"start_character":41,"end_line":175,"end_character":43},"in_reply_to":"034f5c4a_50fef240","updated":"2022-04-26 06:52:08.000000000","message":"If we have 10 minutes to wait, while we have request burst for creating like 100 pods (which implies 100 neutron ports), which may create leftover ports due to the load, and keeping in mind cleaning may be interrupted by the neutron failures, than it may happen that cleaning up procedure is slower, than creating leftovers.\n\nAlso please note, that we need to wait to dead port have age older than 10 minutes before removing - which means, that with 10 minutes periodic task, we will need to wait up between 10 and 20 minutes before we send the delete request.","commit_id":"db1d663b9a7c0936d8563ea262e5b7b140aced2c"},{"author":{"_account_id":27032,"name":"Maysa de Macedo Souza","email":"maysa.macedo95@gmail.com","username":"maysa"},"change_message_id":"071af93e1ac9e9e961a4264e55e3a915ad56e2cd","unresolved":true,"context_lines":[{"line_number":172,"context_line":"        for handler in self.handlers:"},{"line_number":173,"context_line":"            handler.reconcile()"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"    @periodic_task.periodic_task(spacing\u003d90, run_immediately\u003dFalse)"},{"line_number":176,"context_line":"    def cleanup_dead_ports(self, context):"},{"line_number":177,"context_line":"        utils.cleanup_dead_ports()"},{"line_number":178,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"6473f089_7af2a65b","line":175,"range":{"start_line":175,"start_character":41,"end_line":175,"end_character":43},"in_reply_to":"364ce90f_b48bf932","updated":"2022-04-26 10:25:13.000000000","message":"Right, good point.","commit_id":"db1d663b9a7c0936d8563ea262e5b7b140aced2c"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"62832fdc1cc32ac18866fde2fab60a16811e616c","unresolved":false,"context_lines":[{"line_number":172,"context_line":"        for handler in self.handlers:"},{"line_number":173,"context_line":"            handler.reconcile()"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"    @periodic_task.periodic_task(spacing\u003d90, run_immediately\u003dFalse)"},{"line_number":176,"context_line":"    def cleanup_dead_ports(self, context):"},{"line_number":177,"context_line":"        utils.cleanup_dead_ports()"},{"line_number":178,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"95bf774c_780b906f","line":175,"range":{"start_line":175,"start_character":41,"end_line":175,"end_character":43},"in_reply_to":"6473f089_7af2a65b","updated":"2022-05-05 05:04:41.000000000","message":"Done","commit_id":"db1d663b9a7c0936d8563ea262e5b7b140aced2c"}],"kuryr_kubernetes/utils.py":[{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"f606c2d0fa3e245036564513d5bc5c9506bc6d7c","unresolved":true,"context_lines":[{"line_number":51,"context_line":"DEFAULT_JITTER \u003d 3"},{"line_number":52,"context_line":"MAX_BACKOFF \u003d 60"},{"line_number":53,"context_line":"MAX_ATTEMPTS \u003d 10"},{"line_number":54,"context_line":"ZOMBIE_AGE \u003d 900"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"subnet_caching_opts \u003d ["}],"source_content_type":"text/x-python","patch_set":1,"id":"65554e9b_eb86856c","line":54,"range":{"start_line":54,"start_character":13,"end_line":54,"end_character":16},"updated":"2022-04-19 11:06:38.000000000","message":"This translates to 15 minutes. I guess, that it should be enough time to create a port.","commit_id":"5074fb09685b4a38aea17f26c43990083c27ac94"},{"author":{"_account_id":27032,"name":"Maysa de Macedo Souza","email":"maysa.macedo95@gmail.com","username":"maysa"},"change_message_id":"8a7feaceabe17dd0e07bdda98a7c2cf970441aea","unresolved":true,"context_lines":[{"line_number":51,"context_line":"DEFAULT_JITTER \u003d 3"},{"line_number":52,"context_line":"MAX_BACKOFF \u003d 60"},{"line_number":53,"context_line":"MAX_ATTEMPTS \u003d 10"},{"line_number":54,"context_line":"ZOMBIE_AGE \u003d 900"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"subnet_caching_opts \u003d ["}],"source_content_type":"text/x-python","patch_set":1,"id":"d607bbfb_5a643d4c","line":54,"range":{"start_line":54,"start_character":13,"end_line":54,"end_character":16},"in_reply_to":"65554e9b_eb86856c","updated":"2022-04-25 10:08:37.000000000","message":"Maybe 10 minutes is better?","commit_id":"5074fb09685b4a38aea17f26c43990083c27ac94"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"4821d3630251c2586280dc1c4d3ae19cc070a6af","unresolved":false,"context_lines":[{"line_number":51,"context_line":"DEFAULT_JITTER \u003d 3"},{"line_number":52,"context_line":"MAX_BACKOFF \u003d 60"},{"line_number":53,"context_line":"MAX_ATTEMPTS \u003d 10"},{"line_number":54,"context_line":"ZOMBIE_AGE \u003d 900"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"subnet_caching_opts \u003d ["}],"source_content_type":"text/x-python","patch_set":1,"id":"454da2a7_7f8d2775","line":54,"range":{"start_line":54,"start_character":13,"end_line":54,"end_character":16},"in_reply_to":"d607bbfb_5a643d4c","updated":"2022-04-25 11:51:37.000000000","message":"Ack","commit_id":"5074fb09685b4a38aea17f26c43990083c27ac94"},{"author":{"_account_id":27032,"name":"Maysa de Macedo Souza","email":"maysa.macedo95@gmail.com","username":"maysa"},"change_message_id":"9898fde9e980a0cecf0ff927fda85cbeae70487c","unresolved":true,"context_lines":[{"line_number":732,"context_line":"                  kind, get_res_unique_name(obj))"},{"line_number":733,"context_line":""},{"line_number":734,"context_line":""},{"line_number":735,"context_line":"def cleanup_dead_ports(network\u003dNone, immidietly\u003dFalse):"},{"line_number":736,"context_line":"    tags \u003d set(CONF.neutron_defaults.resource_tags)"},{"line_number":737,"context_line":"    if not tags:"},{"line_number":738,"context_line":"        # NOTE(gryf): there is no reliable way for removing kuryr-related"}],"source_content_type":"text/x-python","patch_set":1,"id":"395cd844_3ca54ad1","line":735,"range":{"start_line":735,"start_character":23,"end_line":735,"end_character":30},"updated":"2022-04-25 10:13:07.000000000","message":"might be better to rename it to network_id","commit_id":"5074fb09685b4a38aea17f26c43990083c27ac94"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"4821d3630251c2586280dc1c4d3ae19cc070a6af","unresolved":false,"context_lines":[{"line_number":732,"context_line":"                  kind, get_res_unique_name(obj))"},{"line_number":733,"context_line":""},{"line_number":734,"context_line":""},{"line_number":735,"context_line":"def cleanup_dead_ports(network\u003dNone, immidietly\u003dFalse):"},{"line_number":736,"context_line":"    tags \u003d set(CONF.neutron_defaults.resource_tags)"},{"line_number":737,"context_line":"    if not tags:"},{"line_number":738,"context_line":"        # NOTE(gryf): there is no reliable way for removing kuryr-related"}],"source_content_type":"text/x-python","patch_set":1,"id":"7fd65379_499cfe25","line":735,"range":{"start_line":735,"start_character":23,"end_line":735,"end_character":30},"in_reply_to":"395cd844_3ca54ad1","updated":"2022-04-25 11:51:37.000000000","message":"Ack","commit_id":"5074fb09685b4a38aea17f26c43990083c27ac94"},{"author":{"_account_id":27032,"name":"Maysa de Macedo Souza","email":"maysa.macedo95@gmail.com","username":"maysa"},"change_message_id":"8a7feaceabe17dd0e07bdda98a7c2cf970441aea","unresolved":true,"context_lines":[{"line_number":744,"context_line":"        return"},{"line_number":745,"context_line":""},{"line_number":746,"context_line":"    os_net \u003d clients.get_network_client()"},{"line_number":747,"context_line":"    for port in os_net.ports(status\u003d\u0027DOWN\u0027, network_id\u003dnetwork):"},{"line_number":748,"context_line":""},{"line_number":749,"context_line":"        # ignore tagged ports"},{"line_number":750,"context_line":"        if tags.issubset(set(port.tags)):"}],"source_content_type":"text/x-python","patch_set":1,"id":"1ff50b40_f18c9d19","line":747,"updated":"2022-04-25 10:08:37.000000000","message":"Kuryr ports are first created with device-owner \"compute:kuryr\"[1], let\u0027s make sure to also include that here if no Network ID is passed.\n\n[1] https://github.com/openstack/kuryr-kubernetes/blob/42ae6a37ab4257c1dafad5bc48c456f7a58e34e9/kuryr_kubernetes/controller/drivers/nested_vlan_vif.py#L176","commit_id":"5074fb09685b4a38aea17f26c43990083c27ac94"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"4821d3630251c2586280dc1c4d3ae19cc070a6af","unresolved":false,"context_lines":[{"line_number":744,"context_line":"        return"},{"line_number":745,"context_line":""},{"line_number":746,"context_line":"    os_net \u003d clients.get_network_client()"},{"line_number":747,"context_line":"    for port in os_net.ports(status\u003d\u0027DOWN\u0027, network_id\u003dnetwork):"},{"line_number":748,"context_line":""},{"line_number":749,"context_line":"        # ignore tagged ports"},{"line_number":750,"context_line":"        if tags.issubset(set(port.tags)):"}],"source_content_type":"text/x-python","patch_set":1,"id":"4c966110_2fe1c0f2","line":747,"in_reply_to":"19f8cfe4_f0a3cedc","updated":"2022-04-25 11:51:37.000000000","message":"Ack","commit_id":"5074fb09685b4a38aea17f26c43990083c27ac94"},{"author":{"_account_id":27032,"name":"Maysa de Macedo Souza","email":"maysa.macedo95@gmail.com","username":"maysa"},"change_message_id":"f3e3ac74591913e843d1057b8150aa8220e321d6","unresolved":true,"context_lines":[{"line_number":744,"context_line":"        return"},{"line_number":745,"context_line":""},{"line_number":746,"context_line":"    os_net \u003d clients.get_network_client()"},{"line_number":747,"context_line":"    for port in os_net.ports(status\u003d\u0027DOWN\u0027, network_id\u003dnetwork):"},{"line_number":748,"context_line":""},{"line_number":749,"context_line":"        # ignore tagged ports"},{"line_number":750,"context_line":"        if tags.issubset(set(port.tags)):"}],"source_content_type":"text/x-python","patch_set":1,"id":"19f8cfe4_f0a3cedc","line":747,"in_reply_to":"1ff50b40_f18c9d19","updated":"2022-04-25 10:24:25.000000000","message":"actually even if with Network ID, it might be safer to use it.","commit_id":"5074fb09685b4a38aea17f26c43990083c27ac94"},{"author":{"_account_id":27032,"name":"Maysa de Macedo Souza","email":"maysa.macedo95@gmail.com","username":"maysa"},"change_message_id":"8a7feaceabe17dd0e07bdda98a7c2cf970441aea","unresolved":true,"context_lines":[{"line_number":747,"context_line":"    for port in os_net.ports(status\u003d\u0027DOWN\u0027, network_id\u003dnetwork):"},{"line_number":748,"context_line":""},{"line_number":749,"context_line":"        # ignore tagged ports"},{"line_number":750,"context_line":"        if tags.issubset(set(port.tags)):"},{"line_number":751,"context_line":"            continue"},{"line_number":752,"context_line":""},{"line_number":753,"context_line":"        if immidietly:"},{"line_number":754,"context_line":"            os_net.delete_port(port)"}],"source_content_type":"text/x-python","patch_set":1,"id":"fb2dc90f_474dc7d5","line":751,"range":{"start_line":750,"start_character":0,"end_line":751,"end_character":20},"updated":"2022-04-25 10:08:37.000000000","message":"Maybe not-tags query parameter can be used instead?","commit_id":"5074fb09685b4a38aea17f26c43990083c27ac94"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"4821d3630251c2586280dc1c4d3ae19cc070a6af","unresolved":false,"context_lines":[{"line_number":747,"context_line":"    for port in os_net.ports(status\u003d\u0027DOWN\u0027, network_id\u003dnetwork):"},{"line_number":748,"context_line":""},{"line_number":749,"context_line":"        # ignore tagged ports"},{"line_number":750,"context_line":"        if tags.issubset(set(port.tags)):"},{"line_number":751,"context_line":"            continue"},{"line_number":752,"context_line":""},{"line_number":753,"context_line":"        if immidietly:"},{"line_number":754,"context_line":"            os_net.delete_port(port)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9288706c_78768993","line":751,"range":{"start_line":750,"start_character":0,"end_line":751,"end_character":20},"in_reply_to":"fb2dc90f_474dc7d5","updated":"2022-04-25 11:51:37.000000000","message":"Ack","commit_id":"5074fb09685b4a38aea17f26c43990083c27ac94"},{"author":{"_account_id":27032,"name":"Maysa de Macedo Souza","email":"maysa.macedo95@gmail.com","username":"maysa"},"change_message_id":"8a7feaceabe17dd0e07bdda98a7c2cf970441aea","unresolved":true,"context_lines":[{"line_number":757,"context_line":"            port_time \u003d timeutils.parse_isotime(port.updated_at)"},{"line_number":758,"context_line":"            # NOTE(gryf): if port hanging more than 10 minutes already in DOWN"},{"line_number":759,"context_line":"            # state, consider it as a dead one."},{"line_number":760,"context_line":"            if (now - port_time).seconds \u003e ZOMBIE_AGE:"},{"line_number":761,"context_line":"                try:"},{"line_number":762,"context_line":"                    os_net.delete_port(port)"},{"line_number":763,"context_line":"                except os_exc.SDKException as ex:"}],"source_content_type":"text/x-python","patch_set":1,"id":"0dfa331f_25efb914","line":760,"updated":"2022-04-25 10:08:37.000000000","message":"Nice!","commit_id":"5074fb09685b4a38aea17f26c43990083c27ac94"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"4821d3630251c2586280dc1c4d3ae19cc070a6af","unresolved":false,"context_lines":[{"line_number":757,"context_line":"            port_time \u003d timeutils.parse_isotime(port.updated_at)"},{"line_number":758,"context_line":"            # NOTE(gryf): if port hanging more than 10 minutes already in DOWN"},{"line_number":759,"context_line":"            # state, consider it as a dead one."},{"line_number":760,"context_line":"            if (now - port_time).seconds \u003e ZOMBIE_AGE:"},{"line_number":761,"context_line":"                try:"},{"line_number":762,"context_line":"                    os_net.delete_port(port)"},{"line_number":763,"context_line":"                except os_exc.SDKException as ex:"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a5fb2c9_bc5d1314","line":760,"in_reply_to":"0dfa331f_25efb914","updated":"2022-04-25 11:51:37.000000000","message":"Done","commit_id":"5074fb09685b4a38aea17f26c43990083c27ac94"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"1f49a79e4a68c8fb4c5a12dfb3912ff6f57bcf6e","unresolved":true,"context_lines":[{"line_number":733,"context_line":"                  kind, get_res_unique_name(obj))"},{"line_number":734,"context_line":""},{"line_number":735,"context_line":""},{"line_number":736,"context_line":"def cleanup_dead_ports(network_id\u003dNone, immidietly\u003dFalse):"},{"line_number":737,"context_line":"    tags \u003d set(CONF.neutron_defaults.resource_tags)"},{"line_number":738,"context_line":"    if not tags:"},{"line_number":739,"context_line":"        # NOTE(gryf): there is no reliable way for removing kuryr-related"}],"source_content_type":"text/x-python","patch_set":2,"id":"62d06692_627b6aac","line":736,"range":{"start_line":736,"start_character":40,"end_line":736,"end_character":50},"updated":"2022-04-26 13:20:40.000000000","message":"immediately","commit_id":"db1d663b9a7c0936d8563ea262e5b7b140aced2c"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"62832fdc1cc32ac18866fde2fab60a16811e616c","unresolved":false,"context_lines":[{"line_number":733,"context_line":"                  kind, get_res_unique_name(obj))"},{"line_number":734,"context_line":""},{"line_number":735,"context_line":""},{"line_number":736,"context_line":"def cleanup_dead_ports(network_id\u003dNone, immidietly\u003dFalse):"},{"line_number":737,"context_line":"    tags \u003d set(CONF.neutron_defaults.resource_tags)"},{"line_number":738,"context_line":"    if not tags:"},{"line_number":739,"context_line":"        # NOTE(gryf): there is no reliable way for removing kuryr-related"}],"source_content_type":"text/x-python","patch_set":2,"id":"78552a5e_71175d78","line":736,"range":{"start_line":736,"start_character":40,"end_line":736,"end_character":50},"in_reply_to":"62d06692_627b6aac","updated":"2022-05-05 05:04:41.000000000","message":"Done","commit_id":"db1d663b9a7c0936d8563ea262e5b7b140aced2c"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"1f49a79e4a68c8fb4c5a12dfb3912ff6f57bcf6e","unresolved":true,"context_lines":[{"line_number":746,"context_line":""},{"line_number":747,"context_line":"    os_net \u003d clients.get_network_client()"},{"line_number":748,"context_line":""},{"line_number":749,"context_line":"    for port in os_net.ports(status\u003d\u0027DOWN\u0027, network_id\u003dnetwork_id,"},{"line_number":750,"context_line":"                             device_owner\u003dkl_const.DEVICE_OWNER,"},{"line_number":751,"context_line":"                             not_tags\u003dlist(tags)):"},{"line_number":752,"context_line":"        if immidietly:"},{"line_number":753,"context_line":"            os_net.delete_port(port)"},{"line_number":754,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":2,"id":"ffbb695e_81fdd08b","line":751,"range":{"start_line":749,"start_character":0,"end_line":751,"end_character":50},"updated":"2022-04-26 13:20:40.000000000","message":"Wait, if we\u0027re looking for ports without tags we can\u0027t just query without a network_id - we might list ports created by different Kuryr instances in the same tenant, which is supported. And deleting dead ports owned by a different Kuryr is probably fine, but I guess we still want to keep a scope here.\n\nWe either got to have a list of network ids taken from KuryrNetworks or query Neutron for networks with our tags. I obviously prefer querying K8s API. ;)\n\nNow thinking about it I noticed device_id field on ports that seems to allow putting anything in there. I wonder if we could put cluster ID there instead of using tags.","commit_id":"db1d663b9a7c0936d8563ea262e5b7b140aced2c"},{"author":{"_account_id":27032,"name":"Maysa de Macedo Souza","email":"maysa.macedo95@gmail.com","username":"maysa"},"change_message_id":"1ab972ec9800c0c3779e4433902f06adaee10c12","unresolved":true,"context_lines":[{"line_number":746,"context_line":""},{"line_number":747,"context_line":"    os_net \u003d clients.get_network_client()"},{"line_number":748,"context_line":""},{"line_number":749,"context_line":"    for port in os_net.ports(status\u003d\u0027DOWN\u0027, network_id\u003dnetwork_id,"},{"line_number":750,"context_line":"                             device_owner\u003dkl_const.DEVICE_OWNER,"},{"line_number":751,"context_line":"                             not_tags\u003dlist(tags)):"},{"line_number":752,"context_line":"        if immidietly:"},{"line_number":753,"context_line":"            os_net.delete_port(port)"},{"line_number":754,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":2,"id":"40ae3e55_f95614b0","line":751,"range":{"start_line":749,"start_character":0,"end_line":751,"end_character":50},"in_reply_to":"362af517_45d3be38","updated":"2022-04-29 08:16:24.000000000","message":"The KUryrNetwork CRs have the network ID defined.\nhttps://github.com/openstack/kuryr-kubernetes/blob/master/kubernetes_crds/kuryr_crds/kuryrnetwork.yaml#L47-L48","commit_id":"db1d663b9a7c0936d8563ea262e5b7b140aced2c"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"13c9a7bf01a30d5a0ea31b2adf0e48f8bcfde148","unresolved":true,"context_lines":[{"line_number":746,"context_line":""},{"line_number":747,"context_line":"    os_net \u003d clients.get_network_client()"},{"line_number":748,"context_line":""},{"line_number":749,"context_line":"    for port in os_net.ports(status\u003d\u0027DOWN\u0027, network_id\u003dnetwork_id,"},{"line_number":750,"context_line":"                             device_owner\u003dkl_const.DEVICE_OWNER,"},{"line_number":751,"context_line":"                             not_tags\u003dlist(tags)):"},{"line_number":752,"context_line":"        if immidietly:"},{"line_number":753,"context_line":"            os_net.delete_port(port)"},{"line_number":754,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":2,"id":"639958fc_c84214f5","line":751,"range":{"start_line":749,"start_character":0,"end_line":751,"end_character":50},"in_reply_to":"40ae3e55_f95614b0","updated":"2022-04-29 10:45:51.000000000","message":"Right, my bad.","commit_id":"db1d663b9a7c0936d8563ea262e5b7b140aced2c"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"62832fdc1cc32ac18866fde2fab60a16811e616c","unresolved":false,"context_lines":[{"line_number":746,"context_line":""},{"line_number":747,"context_line":"    os_net \u003d clients.get_network_client()"},{"line_number":748,"context_line":""},{"line_number":749,"context_line":"    for port in os_net.ports(status\u003d\u0027DOWN\u0027, network_id\u003dnetwork_id,"},{"line_number":750,"context_line":"                             device_owner\u003dkl_const.DEVICE_OWNER,"},{"line_number":751,"context_line":"                             not_tags\u003dlist(tags)):"},{"line_number":752,"context_line":"        if immidietly:"},{"line_number":753,"context_line":"            os_net.delete_port(port)"},{"line_number":754,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":2,"id":"341996d4_f625c556","line":751,"range":{"start_line":749,"start_character":0,"end_line":751,"end_character":50},"in_reply_to":"639958fc_c84214f5","updated":"2022-05-05 05:04:41.000000000","message":"Done","commit_id":"db1d663b9a7c0936d8563ea262e5b7b140aced2c"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"e3b32ff95a0f570fd6175038cf0212760a9f457d","unresolved":true,"context_lines":[{"line_number":746,"context_line":""},{"line_number":747,"context_line":"    os_net \u003d clients.get_network_client()"},{"line_number":748,"context_line":""},{"line_number":749,"context_line":"    for port in os_net.ports(status\u003d\u0027DOWN\u0027, network_id\u003dnetwork_id,"},{"line_number":750,"context_line":"                             device_owner\u003dkl_const.DEVICE_OWNER,"},{"line_number":751,"context_line":"                             not_tags\u003dlist(tags)):"},{"line_number":752,"context_line":"        if immidietly:"},{"line_number":753,"context_line":"            os_net.delete_port(port)"},{"line_number":754,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":2,"id":"362af517_45d3be38","line":751,"range":{"start_line":749,"start_character":0,"end_line":751,"end_character":50},"in_reply_to":"937c48ad_9c62d596","updated":"2022-04-28 13:17:29.000000000","message":"That would be great, if we could grab the network ids from crds. but there is no such information on kuryrnetwork crd :/ Now, I\u0027m torn between leaving such a hole for exploit this functionality and querying neutron every 1.5 minute for list of tagged networks.","commit_id":"db1d663b9a7c0936d8563ea262e5b7b140aced2c"},{"author":{"_account_id":27032,"name":"Maysa de Macedo Souza","email":"maysa.macedo95@gmail.com","username":"maysa"},"change_message_id":"6e338b867ca1acf449d32a6ca1a82b6829fe8ca5","unresolved":true,"context_lines":[{"line_number":746,"context_line":""},{"line_number":747,"context_line":"    os_net \u003d clients.get_network_client()"},{"line_number":748,"context_line":""},{"line_number":749,"context_line":"    for port in os_net.ports(status\u003d\u0027DOWN\u0027, network_id\u003dnetwork_id,"},{"line_number":750,"context_line":"                             device_owner\u003dkl_const.DEVICE_OWNER,"},{"line_number":751,"context_line":"                             not_tags\u003dlist(tags)):"},{"line_number":752,"context_line":"        if immidietly:"},{"line_number":753,"context_line":"            os_net.delete_port(port)"},{"line_number":754,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":2,"id":"937c48ad_9c62d596","line":751,"range":{"start_line":749,"start_character":0,"end_line":751,"end_character":50},"in_reply_to":"98f3979e_18d1608e","updated":"2022-04-27 11:19:56.000000000","message":"This is a very good point, Michal. We gotta get the network IDs\n\nIf we can query Ports by description, I think we could add the tags there later.","commit_id":"db1d663b9a7c0936d8563ea262e5b7b140aced2c"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"5af9a890feed6604a2a73d1c7001da2b6de647b1","unresolved":true,"context_lines":[{"line_number":746,"context_line":""},{"line_number":747,"context_line":"    os_net \u003d clients.get_network_client()"},{"line_number":748,"context_line":""},{"line_number":749,"context_line":"    for port in os_net.ports(status\u003d\u0027DOWN\u0027, network_id\u003dnetwork_id,"},{"line_number":750,"context_line":"                             device_owner\u003dkl_const.DEVICE_OWNER,"},{"line_number":751,"context_line":"                             not_tags\u003dlist(tags)):"},{"line_number":752,"context_line":"        if immidietly:"},{"line_number":753,"context_line":"            os_net.delete_port(port)"},{"line_number":754,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":2,"id":"98f3979e_18d1608e","line":751,"range":{"start_line":749,"start_character":0,"end_line":751,"end_character":50},"in_reply_to":"ca79acb8_d2332440","updated":"2022-04-27 10:48:58.000000000","message":"Oh crap, you\u0027re right.\n\n\u003e Now thinking about it I noticed device_id field on ports that seems to allow putting anything in there. I wonder if we could put cluster ID there instead of using tags.\n\nWell, that was my thinking regarding not using tags at all (we could get rid of the headache of dealing with additional sub-sequential call to neutron for putting tag for the resource) either using description field for marking \"our\" resources, or some other. And we already agreed to use uid of the ns in description for net and subnet, so that device_id could be another field, which we could use. And BTW, device_id is used to hold VM id (or server id if you will), so it might be a better idea to bind all the resources which particular namespace have (so: let\u0027s put there namespace id), and as for \"tags\", we might use description field. WDYT?","commit_id":"db1d663b9a7c0936d8563ea262e5b7b140aced2c"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"f5558e78e4fd41e4b0bd7613e7f47b17077ec353","unresolved":true,"context_lines":[{"line_number":746,"context_line":""},{"line_number":747,"context_line":"    os_net \u003d clients.get_network_client()"},{"line_number":748,"context_line":""},{"line_number":749,"context_line":"    for port in os_net.ports(status\u003d\u0027DOWN\u0027, network_id\u003dnetwork_id,"},{"line_number":750,"context_line":"                             device_owner\u003dkl_const.DEVICE_OWNER,"},{"line_number":751,"context_line":"                             not_tags\u003dlist(tags)):"},{"line_number":752,"context_line":"        if immidietly:"},{"line_number":753,"context_line":"            os_net.delete_port(port)"},{"line_number":754,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":2,"id":"ca79acb8_d2332440","line":751,"range":{"start_line":749,"start_character":0,"end_line":751,"end_character":50},"in_reply_to":"ffbb695e_81fdd08b","updated":"2022-04-26 13:23:52.000000000","message":"Ah, even worse, if we have 2 envs `clusterID\u003dfoo` and `clusterID\u003dbar`, `not_tags\u003d\"clusterID\u003dbar\"` will list us all the ports having `clusterID\u003dfoo`. This isn\u0027t great.","commit_id":"db1d663b9a7c0936d8563ea262e5b7b140aced2c"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"1f49a79e4a68c8fb4c5a12dfb3912ff6f57bcf6e","unresolved":true,"context_lines":[{"line_number":754,"context_line":"        else:"},{"line_number":755,"context_line":"            now \u003d timeutils.utcnow(True)"},{"line_number":756,"context_line":"            port_time \u003d timeutils.parse_isotime(port.updated_at)"},{"line_number":757,"context_line":"            # NOTE(gryf): if port hanging more than 10 minutes already in DOWN"},{"line_number":758,"context_line":"            # state, consider it as a dead one."},{"line_number":759,"context_line":"            if (now - port_time).seconds \u003e ZOMBIE_AGE:"},{"line_number":760,"context_line":"                try:"},{"line_number":761,"context_line":"                    os_net.delete_port(port)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3bf20d06_235d7cb5","line":758,"range":{"start_line":757,"start_character":0,"end_line":758,"end_character":47},"updated":"2022-04-26 13:20:40.000000000","message":"I really like this idea.","commit_id":"db1d663b9a7c0936d8563ea262e5b7b140aced2c"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"a23068db32b87c688d29713b953108c10467b9b8","unresolved":false,"context_lines":[{"line_number":754,"context_line":"        else:"},{"line_number":755,"context_line":"            now \u003d timeutils.utcnow(True)"},{"line_number":756,"context_line":"            port_time \u003d timeutils.parse_isotime(port.updated_at)"},{"line_number":757,"context_line":"            # NOTE(gryf): if port hanging more than 10 minutes already in DOWN"},{"line_number":758,"context_line":"            # state, consider it as a dead one."},{"line_number":759,"context_line":"            if (now - port_time).seconds \u003e ZOMBIE_AGE:"},{"line_number":760,"context_line":"                try:"},{"line_number":761,"context_line":"                    os_net.delete_port(port)"}],"source_content_type":"text/x-python","patch_set":2,"id":"cd46a475_676c3e71","line":758,"range":{"start_line":757,"start_character":0,"end_line":758,"end_character":47},"in_reply_to":"3bf20d06_235d7cb5","updated":"2022-05-04 15:45:01.000000000","message":"Done","commit_id":"db1d663b9a7c0936d8563ea262e5b7b140aced2c"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"30dbe02d23b442acd53cdac340d14174aa9d42b5","unresolved":true,"context_lines":[{"line_number":52,"context_line":"DEFAULT_JITTER \u003d 3"},{"line_number":53,"context_line":"MAX_BACKOFF \u003d 60"},{"line_number":54,"context_line":"MAX_ATTEMPTS \u003d 10"},{"line_number":55,"context_line":"ZOMBIE_AGE \u003d 600"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"subnet_caching_opts \u003d ["}],"source_content_type":"text/x-python","patch_set":4,"id":"57d1aff1_e362986c","line":55,"range":{"start_line":55,"start_character":0,"end_line":55,"end_character":11},"updated":"2022-05-03 08:15:45.000000000","message":"IMO, A configuration option is better than a constant value.","commit_id":"cff3d38154be31300275be11c03ae1283a122a30"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"c7115889d0076accd0387407c66adc2049d848c8","unresolved":false,"context_lines":[{"line_number":52,"context_line":"DEFAULT_JITTER \u003d 3"},{"line_number":53,"context_line":"MAX_BACKOFF \u003d 60"},{"line_number":54,"context_line":"MAX_ATTEMPTS \u003d 10"},{"line_number":55,"context_line":"ZOMBIE_AGE \u003d 600"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"subnet_caching_opts \u003d ["}],"source_content_type":"text/x-python","patch_set":4,"id":"0f904558_8e202fe7","line":55,"range":{"start_line":55,"start_character":0,"end_line":55,"end_character":11},"in_reply_to":"1880e5b3_948b1d8d","updated":"2022-05-05 05:03:08.000000000","message":"Done","commit_id":"cff3d38154be31300275be11c03ae1283a122a30"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"a23068db32b87c688d29713b953108c10467b9b8","unresolved":true,"context_lines":[{"line_number":52,"context_line":"DEFAULT_JITTER \u003d 3"},{"line_number":53,"context_line":"MAX_BACKOFF \u003d 60"},{"line_number":54,"context_line":"MAX_ATTEMPTS \u003d 10"},{"line_number":55,"context_line":"ZOMBIE_AGE \u003d 600"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"subnet_caching_opts \u003d ["}],"source_content_type":"text/x-python","patch_set":4,"id":"1880e5b3_948b1d8d","line":55,"range":{"start_line":55,"start_character":0,"end_line":55,"end_character":11},"in_reply_to":"57d1aff1_e362986c","updated":"2022-05-04 15:45:01.000000000","message":"I concur, we have way too much timeout options in the config that could only scare users. 10 minutes is a totally reasonable value, if Neutron won\u0027t move a port/subport to ACTIVE in 10 minutes, then we have a problem with Neutron.","commit_id":"cff3d38154be31300275be11c03ae1283a122a30"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"a23068db32b87c688d29713b953108c10467b9b8","unresolved":true,"context_lines":[{"line_number":756,"context_line":"    for item in crds[\u0027items\u0027]:"},{"line_number":757,"context_line":"        network_id \u003d item.get(\u0027status\u0027, {}).get(\u0027netId\u0027)"},{"line_number":758,"context_line":"        if not network_id:"},{"line_number":759,"context_line":"            LOG.warning(\"KuryrNetworkCRD doesn\u0027t have network id: %s\", item)"},{"line_number":760,"context_line":"            continue"},{"line_number":761,"context_line":""},{"line_number":762,"context_line":"        for port in os_net.ports(status\u003d\u0027DOWN\u0027, network_id\u003dnetwork_id,"}],"source_content_type":"text/x-python","patch_set":4,"id":"b47e8a5b_42c17df7","line":759,"range":{"start_line":759,"start_character":25,"end_line":759,"end_character":40},"updated":"2022-05-04 15:45:01.000000000","message":"KuryrNetwork should be sufficient.","commit_id":"cff3d38154be31300275be11c03ae1283a122a30"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"a23068db32b87c688d29713b953108c10467b9b8","unresolved":true,"context_lines":[{"line_number":756,"context_line":"    for item in crds[\u0027items\u0027]:"},{"line_number":757,"context_line":"        network_id \u003d item.get(\u0027status\u0027, {}).get(\u0027netId\u0027)"},{"line_number":758,"context_line":"        if not network_id:"},{"line_number":759,"context_line":"            LOG.warning(\"KuryrNetworkCRD doesn\u0027t have network id: %s\", item)"},{"line_number":760,"context_line":"            continue"},{"line_number":761,"context_line":""},{"line_number":762,"context_line":"        for port in os_net.ports(status\u003d\u0027DOWN\u0027, network_id\u003dnetwork_id,"}],"source_content_type":"text/x-python","patch_set":4,"id":"fc146b34_7055410f","line":759,"range":{"start_line":759,"start_character":16,"end_line":759,"end_character":23},"updated":"2022-05-04 15:45:01.000000000","message":"No need to scare users here here, KuryrNetwork can be in a process of having a network created for it and that\u0027s perfectly normal. IMO debug is enough, or even just skipping logging.","commit_id":"cff3d38154be31300275be11c03ae1283a122a30"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"c7115889d0076accd0387407c66adc2049d848c8","unresolved":false,"context_lines":[{"line_number":756,"context_line":"    for item in crds[\u0027items\u0027]:"},{"line_number":757,"context_line":"        network_id \u003d item.get(\u0027status\u0027, {}).get(\u0027netId\u0027)"},{"line_number":758,"context_line":"        if not network_id:"},{"line_number":759,"context_line":"            LOG.warning(\"KuryrNetworkCRD doesn\u0027t have network id: %s\", item)"},{"line_number":760,"context_line":"            continue"},{"line_number":761,"context_line":""},{"line_number":762,"context_line":"        for port in os_net.ports(status\u003d\u0027DOWN\u0027, network_id\u003dnetwork_id,"}],"source_content_type":"text/x-python","patch_set":4,"id":"f5ef9655_3b6bd7ea","line":759,"range":{"start_line":759,"start_character":25,"end_line":759,"end_character":40},"in_reply_to":"b47e8a5b_42c17df7","updated":"2022-05-05 05:03:08.000000000","message":"Ack","commit_id":"cff3d38154be31300275be11c03ae1283a122a30"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"c7115889d0076accd0387407c66adc2049d848c8","unresolved":false,"context_lines":[{"line_number":756,"context_line":"    for item in crds[\u0027items\u0027]:"},{"line_number":757,"context_line":"        network_id \u003d item.get(\u0027status\u0027, {}).get(\u0027netId\u0027)"},{"line_number":758,"context_line":"        if not network_id:"},{"line_number":759,"context_line":"            LOG.warning(\"KuryrNetworkCRD doesn\u0027t have network id: %s\", item)"},{"line_number":760,"context_line":"            continue"},{"line_number":761,"context_line":""},{"line_number":762,"context_line":"        for port in os_net.ports(status\u003d\u0027DOWN\u0027, network_id\u003dnetwork_id,"}],"source_content_type":"text/x-python","patch_set":4,"id":"ab957994_7f4bd23f","line":759,"range":{"start_line":759,"start_character":16,"end_line":759,"end_character":23},"in_reply_to":"fc146b34_7055410f","updated":"2022-05-05 05:03:08.000000000","message":"Ack","commit_id":"cff3d38154be31300275be11c03ae1283a122a30"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"a23068db32b87c688d29713b953108c10467b9b8","unresolved":true,"context_lines":[{"line_number":770,"context_line":"                try:"},{"line_number":771,"context_line":"                    os_net.delete_port(port)"},{"line_number":772,"context_line":"                except os_exc.SDKException as ex:"},{"line_number":773,"context_line":"                    LOG.debug(\u0027There was an issue with port \"%s\" removal: %s\u0027,"},{"line_number":774,"context_line":"                              port, ex)"}],"source_content_type":"text/x-python","patch_set":4,"id":"d9932e98_9f11afb5","line":774,"range":{"start_line":773,"start_character":0,"end_line":774,"end_character":39},"updated":"2022-05-04 15:45:01.000000000","message":"This could be a warning though.","commit_id":"cff3d38154be31300275be11c03ae1283a122a30"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"c7115889d0076accd0387407c66adc2049d848c8","unresolved":false,"context_lines":[{"line_number":770,"context_line":"                try:"},{"line_number":771,"context_line":"                    os_net.delete_port(port)"},{"line_number":772,"context_line":"                except os_exc.SDKException as ex:"},{"line_number":773,"context_line":"                    LOG.debug(\u0027There was an issue with port \"%s\" removal: %s\u0027,"},{"line_number":774,"context_line":"                              port, ex)"}],"source_content_type":"text/x-python","patch_set":4,"id":"a53e4eb8_9952b323","line":774,"range":{"start_line":773,"start_character":0,"end_line":774,"end_character":39},"in_reply_to":"d9932e98_9f11afb5","updated":"2022-05-05 05:03:08.000000000","message":"Ack","commit_id":"cff3d38154be31300275be11c03ae1283a122a30"}]}
