)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"3e0263a360e4e60dae09d1fb3fbc20636dae5bca","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"7605b400_4bd001a1","updated":"2022-05-11 04:38:54.000000000","message":"recheck","commit_id":"ee4671ea9059a6f3ebd2d5fff35153febaa34127"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"02d86ef59b9971c9012586475efd817f54afdf24","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"d7d43fd4_64c304db","updated":"2022-05-23 07:08:50.000000000","message":"recheck","commit_id":"9b2c3fcb87d626ad192ae467e3f82444ed80b5cf"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"9d15e72b01fec82a4a4949e728d430fa6e060df0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"9265207d_065062e0","updated":"2022-06-03 08:57:44.000000000","message":"recheck","commit_id":"7c117259b26caf1a1e109302e074e04123dfa13b"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"ea54948701d090a2d4501032e395119c2f0819af","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"cdb51425_0486d1bd","updated":"2022-06-01 16:24:28.000000000","message":"recheck","commit_id":"7c117259b26caf1a1e109302e074e04123dfa13b"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"4fb345dd87a4759619439dbfb3b42296913d43ce","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"eae32a43_d158b19f","updated":"2022-05-31 07:31:51.000000000","message":"recheck","commit_id":"7c117259b26caf1a1e109302e074e04123dfa13b"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"adc476b2a71bcc21a5e3bc0b8ed944006086124e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"f1845f7f_519d4357","updated":"2022-06-02 13:45:06.000000000","message":"recheck","commit_id":"7c117259b26caf1a1e109302e074e04123dfa13b"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"7b74144c6c1a4a4e48451d16b1d07e65dd6c0402","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"9a9806a7_0f5fd549","updated":"2022-06-03 04:18:40.000000000","message":"rechek","commit_id":"7c117259b26caf1a1e109302e074e04123dfa13b"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"cb6b3b50f87ae2106c062a27d0903f82a68876ec","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"712482fc_c312cc08","updated":"2022-06-07 12:25:32.000000000","message":"recheck","commit_id":"a491c346b7169f02d36366bb339b6dd6a4f69c42"},{"author":{"_account_id":27032,"name":"Maysa de Macedo Souza","email":"maysa.macedo95@gmail.com","username":"maysa"},"change_message_id":"71f14bd1fdd5fe0b98a1f8ad688b74cf9f3f94ee","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"2c566d98_d9113114","updated":"2022-06-21 13:27:54.000000000","message":"recheck","commit_id":"a63bf2397627a96331e3142d429f01f6683d5a7c"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"658adf5ffd2823f0749ebece0f828e6b75377053","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"3f12748d_35b0979b","updated":"2022-06-10 16:41:21.000000000","message":"recheck","commit_id":"a63bf2397627a96331e3142d429f01f6683d5a7c"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"1ea947c7451a9ed3461dd2b5c5e501c38f7d2ca3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"47dfd2ba_be20e78c","updated":"2022-06-22 07:47:01.000000000","message":"recheck","commit_id":"a63bf2397627a96331e3142d429f01f6683d5a7c"}],"kuryr_kubernetes/controller/service.py":[{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"e3b5b9cfb134fe22da1d1507e5258f27ef6ca25c","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_resources(self, context):"},{"line_number":177,"context_line":"        utils.cleanup_dead_ports()"},{"line_number":178,"context_line":"        utils.cleanup_dead_networks()"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"def start():"}],"source_content_type":"text/x-python","patch_set":1,"id":"aa854ca2_41a6171a","line":178,"range":{"start_line":175,"start_character":0,"end_line":178,"end_character":37},"updated":"2022-05-12 16:46:15.000000000","message":"It\u0027s a shame it\u0027s becoming a pattern for us. :D","commit_id":"ee4671ea9059a6f3ebd2d5fff35153febaa34127"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"0a0e27c09c21d2523fed2427a1436e699de72461","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_resources(self, context):"},{"line_number":177,"context_line":"        utils.cleanup_dead_ports()"},{"line_number":178,"context_line":"        utils.cleanup_dead_networks()"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"def start():"}],"source_content_type":"text/x-python","patch_set":1,"id":"35f63a27_06c1a450","line":178,"range":{"start_line":175,"start_character":0,"end_line":178,"end_character":37},"in_reply_to":"aa854ca2_41a6171a","updated":"2022-05-17 07:11:12.000000000","message":"¯\\_(ツ)_/¯","commit_id":"ee4671ea9059a6f3ebd2d5fff35153febaa34127"}],"kuryr_kubernetes/utils.py":[{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"e3b5b9cfb134fe22da1d1507e5258f27ef6ca25c","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():"},{"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"},{"line_number":740,"context_line":"        # ports if there are no tags enabled - without tags there is a chance,"},{"line_number":741,"context_line":"        # that ports are down, created by someone/something else and would"},{"line_number":742,"context_line":"        # be deleted."},{"line_number":743,"context_line":"        # Perhaps a be better idea to would be to have some mark in other"},{"line_number":744,"context_line":"        # field during port creation to identify \"our\" ports."},{"line_number":745,"context_line":"        return"},{"line_number":746,"context_line":""},{"line_number":747,"context_line":"    os_net \u003d clients.get_network_client()"},{"line_number":748,"context_line":"    k8s \u003d clients.get_kubernetes_client()"},{"line_number":749,"context_line":""},{"line_number":750,"context_line":"    try:"},{"line_number":751,"context_line":"        crds \u003d k8s.get(constants.K8S_API_CRD_KURYRNETWORKS)"},{"line_number":752,"context_line":"    except exceptions.K8sClientException as ex:"},{"line_number":753,"context_line":"        LOG.exception(\u0027Error fetching KuryrNetworks: %s\u0027, ex)"},{"line_number":754,"context_line":"        return"},{"line_number":755,"context_line":""},{"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":"            continue"},{"line_number":760,"context_line":""},{"line_number":761,"context_line":"        for port in os_net.ports(status\u003d\u0027DOWN\u0027, network_id\u003dnetwork_id,"},{"line_number":762,"context_line":"                                 device_owner\u003dkl_const.DEVICE_OWNER,"},{"line_number":763,"context_line":"                                 not_tags\u003dlist(tags)):"},{"line_number":764,"context_line":"            now \u003d timeutils.utcnow(True)"},{"line_number":765,"context_line":"            port_time \u003d timeutils.parse_isotime(port.updated_at)"},{"line_number":766,"context_line":"            # NOTE(gryf): if port hanging more than 10 minutes already in DOWN"},{"line_number":767,"context_line":"            # state, consider it as a dead one."},{"line_number":768,"context_line":"            if (now - port_time).seconds \u003e ZOMBIE_AGE:"},{"line_number":769,"context_line":"                try:"},{"line_number":770,"context_line":"                    os_net.delete_port(port)"},{"line_number":771,"context_line":"                except os_exc.SDKException as ex:"},{"line_number":772,"context_line":"                    LOG.warning(\u0027There was an issue with port \"%s\" \u0027"},{"line_number":773,"context_line":"                                \u0027removal: %s\u0027, port, ex)"},{"line_number":774,"context_line":""},{"line_number":775,"context_line":""},{"line_number":776,"context_line":"def cleanup_dead_networks():"}],"source_content_type":"text/x-python","patch_set":1,"id":"133560ad_d0e7814e","line":773,"range":{"start_line":736,"start_character":0,"end_line":773,"end_character":56},"updated":"2022-05-12 16:46:15.000000000","message":"If this is becoming a pattern, I wonder if these two functions couldn\u0027t be put into a separate file.","commit_id":"ee4671ea9059a6f3ebd2d5fff35153febaa34127"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"0a0e27c09c21d2523fed2427a1436e699de72461","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():"},{"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"},{"line_number":740,"context_line":"        # ports if there are no tags enabled - without tags there is a chance,"},{"line_number":741,"context_line":"        # that ports are down, created by someone/something else and would"},{"line_number":742,"context_line":"        # be deleted."},{"line_number":743,"context_line":"        # Perhaps a be better idea to would be to have some mark in other"},{"line_number":744,"context_line":"        # field during port creation to identify \"our\" ports."},{"line_number":745,"context_line":"        return"},{"line_number":746,"context_line":""},{"line_number":747,"context_line":"    os_net \u003d clients.get_network_client()"},{"line_number":748,"context_line":"    k8s \u003d clients.get_kubernetes_client()"},{"line_number":749,"context_line":""},{"line_number":750,"context_line":"    try:"},{"line_number":751,"context_line":"        crds \u003d k8s.get(constants.K8S_API_CRD_KURYRNETWORKS)"},{"line_number":752,"context_line":"    except exceptions.K8sClientException as ex:"},{"line_number":753,"context_line":"        LOG.exception(\u0027Error fetching KuryrNetworks: %s\u0027, ex)"},{"line_number":754,"context_line":"        return"},{"line_number":755,"context_line":""},{"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":"            continue"},{"line_number":760,"context_line":""},{"line_number":761,"context_line":"        for port in os_net.ports(status\u003d\u0027DOWN\u0027, network_id\u003dnetwork_id,"},{"line_number":762,"context_line":"                                 device_owner\u003dkl_const.DEVICE_OWNER,"},{"line_number":763,"context_line":"                                 not_tags\u003dlist(tags)):"},{"line_number":764,"context_line":"            now \u003d timeutils.utcnow(True)"},{"line_number":765,"context_line":"            port_time \u003d timeutils.parse_isotime(port.updated_at)"},{"line_number":766,"context_line":"            # NOTE(gryf): if port hanging more than 10 minutes already in DOWN"},{"line_number":767,"context_line":"            # state, consider it as a dead one."},{"line_number":768,"context_line":"            if (now - port_time).seconds \u003e ZOMBIE_AGE:"},{"line_number":769,"context_line":"                try:"},{"line_number":770,"context_line":"                    os_net.delete_port(port)"},{"line_number":771,"context_line":"                except os_exc.SDKException as ex:"},{"line_number":772,"context_line":"                    LOG.warning(\u0027There was an issue with port \"%s\" \u0027"},{"line_number":773,"context_line":"                                \u0027removal: %s\u0027, port, ex)"},{"line_number":774,"context_line":""},{"line_number":775,"context_line":""},{"line_number":776,"context_line":"def cleanup_dead_networks():"}],"source_content_type":"text/x-python","patch_set":1,"id":"bb6b03f7_1ce2fe63","line":773,"range":{"start_line":736,"start_character":0,"end_line":773,"end_character":56},"in_reply_to":"133560ad_d0e7814e","updated":"2022-05-17 07:11:12.000000000","message":"It\u0027s literally two functions. Maybe it\u0027s not worth to separate them.","commit_id":"ee4671ea9059a6f3ebd2d5fff35153febaa34127"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"fb018bef5a7a6ca1e34203286fbb9061ab736449","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():"},{"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"},{"line_number":740,"context_line":"        # ports if there are no tags enabled - without tags there is a chance,"},{"line_number":741,"context_line":"        # that ports are down, created by someone/something else and would"},{"line_number":742,"context_line":"        # be deleted."},{"line_number":743,"context_line":"        # Perhaps a be better idea to would be to have some mark in other"},{"line_number":744,"context_line":"        # field during port creation to identify \"our\" ports."},{"line_number":745,"context_line":"        return"},{"line_number":746,"context_line":""},{"line_number":747,"context_line":"    os_net \u003d clients.get_network_client()"},{"line_number":748,"context_line":"    k8s \u003d clients.get_kubernetes_client()"},{"line_number":749,"context_line":""},{"line_number":750,"context_line":"    try:"},{"line_number":751,"context_line":"        crds \u003d k8s.get(constants.K8S_API_CRD_KURYRNETWORKS)"},{"line_number":752,"context_line":"    except exceptions.K8sClientException as ex:"},{"line_number":753,"context_line":"        LOG.exception(\u0027Error fetching KuryrNetworks: %s\u0027, ex)"},{"line_number":754,"context_line":"        return"},{"line_number":755,"context_line":""},{"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":"            continue"},{"line_number":760,"context_line":""},{"line_number":761,"context_line":"        for port in os_net.ports(status\u003d\u0027DOWN\u0027, network_id\u003dnetwork_id,"},{"line_number":762,"context_line":"                                 device_owner\u003dkl_const.DEVICE_OWNER,"},{"line_number":763,"context_line":"                                 not_tags\u003dlist(tags)):"},{"line_number":764,"context_line":"            now \u003d timeutils.utcnow(True)"},{"line_number":765,"context_line":"            port_time \u003d timeutils.parse_isotime(port.updated_at)"},{"line_number":766,"context_line":"            # NOTE(gryf): if port hanging more than 10 minutes already in DOWN"},{"line_number":767,"context_line":"            # state, consider it as a dead one."},{"line_number":768,"context_line":"            if (now - port_time).seconds \u003e ZOMBIE_AGE:"},{"line_number":769,"context_line":"                try:"},{"line_number":770,"context_line":"                    os_net.delete_port(port)"},{"line_number":771,"context_line":"                except os_exc.SDKException as ex:"},{"line_number":772,"context_line":"                    LOG.warning(\u0027There was an issue with port \"%s\" \u0027"},{"line_number":773,"context_line":"                                \u0027removal: %s\u0027, port, ex)"},{"line_number":774,"context_line":""},{"line_number":775,"context_line":""},{"line_number":776,"context_line":"def cleanup_dead_networks():"}],"source_content_type":"text/x-python","patch_set":1,"id":"7ec5c30d_181bd0ff","line":773,"range":{"start_line":736,"start_character":0,"end_line":773,"end_character":56},"in_reply_to":"bb6b03f7_1ce2fe63","updated":"2022-06-07 12:30:55.000000000","message":"Ack","commit_id":"ee4671ea9059a6f3ebd2d5fff35153febaa34127"},{"author":{"_account_id":27032,"name":"Maysa de Macedo Souza","email":"maysa.macedo95@gmail.com","username":"maysa"},"change_message_id":"79af7e897716eba71d4fefdbcb5349a25b867f98","unresolved":true,"context_lines":[{"line_number":774,"context_line":""},{"line_number":775,"context_line":""},{"line_number":776,"context_line":"def cleanup_dead_networks():"},{"line_number":777,"context_line":"    \"\"\"Cleanup all the dead networks and subnets without a ports\"\"\""},{"line_number":778,"context_line":""},{"line_number":779,"context_line":"    os_net \u003d clients.get_network_client()"},{"line_number":780,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"65583085_0b91452c","line":777,"range":{"start_line":777,"start_character":57,"end_line":777,"end_character":58},"updated":"2022-05-16 12:46:28.000000000","message":"typo","commit_id":"ee4671ea9059a6f3ebd2d5fff35153febaa34127"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"0a0e27c09c21d2523fed2427a1436e699de72461","unresolved":false,"context_lines":[{"line_number":774,"context_line":""},{"line_number":775,"context_line":""},{"line_number":776,"context_line":"def cleanup_dead_networks():"},{"line_number":777,"context_line":"    \"\"\"Cleanup all the dead networks and subnets without a ports\"\"\""},{"line_number":778,"context_line":""},{"line_number":779,"context_line":"    os_net \u003d clients.get_network_client()"},{"line_number":780,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"1c731953_a54c444d","line":777,"range":{"start_line":777,"start_character":57,"end_line":777,"end_character":58},"in_reply_to":"65583085_0b91452c","updated":"2022-05-17 07:11:12.000000000","message":"Ack","commit_id":"ee4671ea9059a6f3ebd2d5fff35153febaa34127"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"e3b5b9cfb134fe22da1d1507e5258f27ef6ca25c","unresolved":true,"context_lines":[{"line_number":778,"context_line":""},{"line_number":779,"context_line":"    os_net \u003d clients.get_network_client()"},{"line_number":780,"context_line":""},{"line_number":781,"context_line":"    for net in os_net.networks(description\u003dCONF.kubernetes.cluster_id):"},{"line_number":782,"context_line":""},{"line_number":783,"context_line":"        if len(os_net.ports(network_id\u003dnet.id)) \u003e 0:"},{"line_number":784,"context_line":"            continue"},{"line_number":785,"context_line":""},{"line_number":786,"context_line":"        now \u003d timeutils.utcnow(True)"},{"line_number":787,"context_line":"        port_time \u003d timeutils.parse_isotime(net.updated_at)"}],"source_content_type":"text/x-python","patch_set":1,"id":"2e4bf70b_67389aef","line":784,"range":{"start_line":781,"start_character":0,"end_line":784,"end_character":20},"updated":"2022-05-12 16:46:15.000000000","message":"I don\u0027t think this is correct, it could potentially remove networks where all the pods got deleted (if configured without pools), but will not update the KuryrNetwork CRD, so Kuryr will expect network to still exist.\n\nI\u0027d rather think about listing all networks and comparing them with existing KuryrNetworks. If network ID is not on any KuryrNetwork and exists for longer than 10 minutes, then it\u0027s most likely some orphan.\n\n10 minutes is most likely reasonable, even if we delete it, if it wasn\u0027t saved onto a KuryrNetwork, then Kuryr will just recreate it.","commit_id":"ee4671ea9059a6f3ebd2d5fff35153febaa34127"},{"author":{"_account_id":27032,"name":"Maysa de Macedo Souza","email":"maysa.macedo95@gmail.com","username":"maysa"},"change_message_id":"79af7e897716eba71d4fefdbcb5349a25b867f98","unresolved":true,"context_lines":[{"line_number":778,"context_line":""},{"line_number":779,"context_line":"    os_net \u003d clients.get_network_client()"},{"line_number":780,"context_line":""},{"line_number":781,"context_line":"    for net in os_net.networks(description\u003dCONF.kubernetes.cluster_id):"},{"line_number":782,"context_line":""},{"line_number":783,"context_line":"        if len(os_net.ports(network_id\u003dnet.id)) \u003e 0:"},{"line_number":784,"context_line":"            continue"},{"line_number":785,"context_line":""},{"line_number":786,"context_line":"        now \u003d timeutils.utcnow(True)"},{"line_number":787,"context_line":"        port_time \u003d timeutils.parse_isotime(net.updated_at)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3ecadc1f_c4ca5a84","line":784,"range":{"start_line":781,"start_character":0,"end_line":784,"end_character":20},"in_reply_to":"2e4bf70b_67389aef","updated":"2022-05-16 12:46:28.000000000","message":"+1","commit_id":"ee4671ea9059a6f3ebd2d5fff35153febaa34127"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"0a0e27c09c21d2523fed2427a1436e699de72461","unresolved":true,"context_lines":[{"line_number":778,"context_line":""},{"line_number":779,"context_line":"    os_net \u003d clients.get_network_client()"},{"line_number":780,"context_line":""},{"line_number":781,"context_line":"    for net in os_net.networks(description\u003dCONF.kubernetes.cluster_id):"},{"line_number":782,"context_line":""},{"line_number":783,"context_line":"        if len(os_net.ports(network_id\u003dnet.id)) \u003e 0:"},{"line_number":784,"context_line":"            continue"},{"line_number":785,"context_line":""},{"line_number":786,"context_line":"        now \u003d timeutils.utcnow(True)"},{"line_number":787,"context_line":"        port_time \u003d timeutils.parse_isotime(net.updated_at)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3eadefb4_f451f8b4","line":784,"range":{"start_line":781,"start_character":0,"end_line":784,"end_character":20},"in_reply_to":"3ecadc1f_c4ca5a84","updated":"2022-05-17 07:11:12.000000000","message":"That\u0027s good idea.","commit_id":"ee4671ea9059a6f3ebd2d5fff35153febaa34127"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"e3b5b9cfb134fe22da1d1507e5258f27ef6ca25c","unresolved":true,"context_lines":[{"line_number":785,"context_line":""},{"line_number":786,"context_line":"        now \u003d timeutils.utcnow(True)"},{"line_number":787,"context_line":"        port_time \u003d timeutils.parse_isotime(net.updated_at)"},{"line_number":788,"context_line":"        # NOTE(gryf): if port hanging more than 10 minutes already in DOWN"},{"line_number":789,"context_line":"        # state, consider it as a dead one."},{"line_number":790,"context_line":"        if (now - port_time).seconds \u003e ZOMBIE_AGE:"},{"line_number":791,"context_line":"            try:"},{"line_number":792,"context_line":"                os_net.delete_network(net)"}],"source_content_type":"text/x-python","patch_set":1,"id":"651ddff6_6533b722","line":789,"range":{"start_line":788,"start_character":0,"end_line":789,"end_character":43},"updated":"2022-05-12 16:46:15.000000000","message":"That\u0027s not port.","commit_id":"ee4671ea9059a6f3ebd2d5fff35153febaa34127"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"0a0e27c09c21d2523fed2427a1436e699de72461","unresolved":false,"context_lines":[{"line_number":785,"context_line":""},{"line_number":786,"context_line":"        now \u003d timeutils.utcnow(True)"},{"line_number":787,"context_line":"        port_time \u003d timeutils.parse_isotime(net.updated_at)"},{"line_number":788,"context_line":"        # NOTE(gryf): if port hanging more than 10 minutes already in DOWN"},{"line_number":789,"context_line":"        # state, consider it as a dead one."},{"line_number":790,"context_line":"        if (now - port_time).seconds \u003e ZOMBIE_AGE:"},{"line_number":791,"context_line":"            try:"},{"line_number":792,"context_line":"                os_net.delete_network(net)"}],"source_content_type":"text/x-python","patch_set":1,"id":"38c640c2_0cbc9f5b","line":789,"range":{"start_line":788,"start_character":0,"end_line":789,"end_character":43},"in_reply_to":"651ddff6_6533b722","updated":"2022-05-17 07:11:12.000000000","message":"Ack","commit_id":"ee4671ea9059a6f3ebd2d5fff35153febaa34127"},{"author":{"_account_id":27032,"name":"Maysa de Macedo Souza","email":"maysa.macedo95@gmail.com","username":"maysa"},"change_message_id":"79af7e897716eba71d4fefdbcb5349a25b867f98","unresolved":true,"context_lines":[{"line_number":789,"context_line":"        # state, consider it as a dead one."},{"line_number":790,"context_line":"        if (now - port_time).seconds \u003e ZOMBIE_AGE:"},{"line_number":791,"context_line":"            try:"},{"line_number":792,"context_line":"                os_net.delete_network(net)"},{"line_number":793,"context_line":"            except os_exc.SDKException as ex:"},{"line_number":794,"context_line":"                LOG.warning(\u0027There was an issue with network \"%s\" \u0027"},{"line_number":795,"context_line":"                            \u0027removal: %s\u0027, net, ex)"}],"source_content_type":"text/x-python","patch_set":1,"id":"90a97c3d_23a9ea43","line":795,"range":{"start_line":792,"start_character":0,"end_line":795,"end_character":51},"updated":"2022-05-16 12:46:28.000000000","message":"Shouldn\u0027t we consider deleting subnets as well?\n\nWe have seen Networks containing multiple subnets while only one of those Subnets were used.","commit_id":"ee4671ea9059a6f3ebd2d5fff35153febaa34127"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"fb018bef5a7a6ca1e34203286fbb9061ab736449","unresolved":false,"context_lines":[{"line_number":789,"context_line":"        # state, consider it as a dead one."},{"line_number":790,"context_line":"        if (now - port_time).seconds \u003e ZOMBIE_AGE:"},{"line_number":791,"context_line":"            try:"},{"line_number":792,"context_line":"                os_net.delete_network(net)"},{"line_number":793,"context_line":"            except os_exc.SDKException as ex:"},{"line_number":794,"context_line":"                LOG.warning(\u0027There was an issue with network \"%s\" \u0027"},{"line_number":795,"context_line":"                            \u0027removal: %s\u0027, net, ex)"}],"source_content_type":"text/x-python","patch_set":1,"id":"95ee0645_6b04df15","line":795,"range":{"start_line":792,"start_character":0,"end_line":795,"end_character":51},"in_reply_to":"021f0c01_02d74ab0","updated":"2022-06-07 12:30:55.000000000","message":"Done","commit_id":"ee4671ea9059a6f3ebd2d5fff35153febaa34127"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"0a0e27c09c21d2523fed2427a1436e699de72461","unresolved":true,"context_lines":[{"line_number":789,"context_line":"        # state, consider it as a dead one."},{"line_number":790,"context_line":"        if (now - port_time).seconds \u003e ZOMBIE_AGE:"},{"line_number":791,"context_line":"            try:"},{"line_number":792,"context_line":"                os_net.delete_network(net)"},{"line_number":793,"context_line":"            except os_exc.SDKException as ex:"},{"line_number":794,"context_line":"                LOG.warning(\u0027There was an issue with network \"%s\" \u0027"},{"line_number":795,"context_line":"                            \u0027removal: %s\u0027, net, ex)"}],"source_content_type":"text/x-python","patch_set":1,"id":"021f0c01_02d74ab0","line":795,"range":{"start_line":792,"start_character":0,"end_line":795,"end_character":51},"in_reply_to":"90a97c3d_23a9ea43","updated":"2022-05-17 07:11:12.000000000","message":"Hm. That\u0027s a good point.","commit_id":"ee4671ea9059a6f3ebd2d5fff35153febaa34127"},{"author":{"_account_id":27032,"name":"Maysa de Macedo Souza","email":"maysa.macedo95@gmail.com","username":"maysa"},"change_message_id":"840d9222b1756c81fe6e36715f0272834a4cc848","unresolved":true,"context_lines":[{"line_number":790,"context_line":"    kuryr_net_ids \u003d [i[\u0027status\u0027][\u0027netId\u0027] for i in crds[\u0027items\u0027]"},{"line_number":791,"context_line":"                     if i.get(\u0027status\u0027, {}).get(\u0027netId\u0027)]"},{"line_number":792,"context_line":""},{"line_number":793,"context_line":"    for net in os_net.networks(description\u003dCONF.kubernetes.cluster_id):"},{"line_number":794,"context_line":""},{"line_number":795,"context_line":"        if net.id in kuryr_net_ids:"},{"line_number":796,"context_line":"            # Find out, if there are more subnets than expected, which suppose"}],"source_content_type":"text/x-python","patch_set":3,"id":"b970a1bd_1c6ef10b","line":793,"updated":"2022-05-23 14:50:47.000000000","message":"Shouldn\u0027t we filter the description with tags here?","commit_id":"9b2c3fcb87d626ad192ae467e3f82444ed80b5cf"},{"author":{"_account_id":27032,"name":"Maysa de Macedo Souza","email":"maysa.macedo95@gmail.com","username":"maysa"},"change_message_id":"c52fcb54f8fca3cccc98fc651489e02b4da4084f","unresolved":true,"context_lines":[{"line_number":823,"context_line":"                            \u0027removal: %s\u0027, net, ex)"},{"line_number":824,"context_line":""},{"line_number":825,"context_line":""},{"line_number":826,"context_line":"def cleanup_dead_subnets():"},{"line_number":827,"context_line":"    \"\"\"Cleanup all the dead sand subnets without ports\"\"\""},{"line_number":828,"context_line":""},{"line_number":829,"context_line":"    os_net \u003d clients.get_network_client()"}],"source_content_type":"text/x-python","patch_set":5,"id":"6286fe4c_fa232b0a","line":826,"range":{"start_line":826,"start_character":1,"end_line":826,"end_character":27},"updated":"2022-06-03 10:16:27.000000000","message":"why do we need this one if the previous function cleanup_dead_networks already handles the Subnet cleanup?","commit_id":"7c117259b26caf1a1e109302e074e04123dfa13b"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"f3f0f78827369d0e69ac664a3b167f23550526e9","unresolved":true,"context_lines":[{"line_number":823,"context_line":"                            \u0027removal: %s\u0027, net, ex)"},{"line_number":824,"context_line":""},{"line_number":825,"context_line":""},{"line_number":826,"context_line":"def cleanup_dead_subnets():"},{"line_number":827,"context_line":"    \"\"\"Cleanup all the dead sand subnets without ports\"\"\""},{"line_number":828,"context_line":""},{"line_number":829,"context_line":"    os_net \u003d clients.get_network_client()"}],"source_content_type":"text/x-python","patch_set":5,"id":"eb2baf57_8fcdf7ec","line":826,"range":{"start_line":826,"start_character":1,"end_line":826,"end_character":27},"in_reply_to":"6286fe4c_fa232b0a","updated":"2022-06-03 14:15:54.000000000","message":"Argh. That\u0027s probably my attempt for addressing removing subnets, before I\u0027ve realized that I already have that covered /o\\","commit_id":"7c117259b26caf1a1e109302e074e04123dfa13b"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"fb018bef5a7a6ca1e34203286fbb9061ab736449","unresolved":true,"context_lines":[{"line_number":800,"context_line":"            # to not have tags."},{"line_number":801,"context_line":"            for subnet in os_net.subnets(network_id\u003dnet.id,"},{"line_number":802,"context_line":"                                         not_tags\u003dlist(tags)):"},{"line_number":803,"context_line":"                try:"},{"line_number":804,"context_line":"                    os_net.delete_subnet(subnet)"},{"line_number":805,"context_line":"                except os_exc.SDKException as ex:"},{"line_number":806,"context_line":"                    LOG.warning(\u0027There was an issue with removing subnet \u0027"},{"line_number":807,"context_line":"                                \u0027\"%s\": %s\u0027, subnet, ex)"},{"line_number":808,"context_line":"            continue"},{"line_number":809,"context_line":""},{"line_number":810,"context_line":"        if len(os_net.ports(network_id\u003dnet.id)) \u003e 0:"}],"source_content_type":"text/x-python","patch_set":6,"id":"85cd5fae_fdcff568","line":807,"range":{"start_line":803,"start_character":0,"end_line":807,"end_character":55},"updated":"2022-06-07 12:30:55.000000000","message":"I think we can hit a race condition here. When subnet is still being created, but not yet tagged, we can accidentally remove it here while Kuryr will attempt to tag it and will get 404. I think we should have the same protection here as in line 817.","commit_id":"a491c346b7169f02d36366bb339b6dd6a4f69c42"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"730ed488200b539d0f7688f6ebb9f2036a4f41e9","unresolved":true,"context_lines":[{"line_number":800,"context_line":"            # to not have tags."},{"line_number":801,"context_line":"            for subnet in os_net.subnets(network_id\u003dnet.id,"},{"line_number":802,"context_line":"                                         not_tags\u003dlist(tags)):"},{"line_number":803,"context_line":"                try:"},{"line_number":804,"context_line":"                    os_net.delete_subnet(subnet)"},{"line_number":805,"context_line":"                except os_exc.SDKException as ex:"},{"line_number":806,"context_line":"                    LOG.warning(\u0027There was an issue with removing subnet \u0027"},{"line_number":807,"context_line":"                                \u0027\"%s\": %s\u0027, subnet, ex)"},{"line_number":808,"context_line":"            continue"},{"line_number":809,"context_line":""},{"line_number":810,"context_line":"        if len(os_net.ports(network_id\u003dnet.id)) \u003e 0:"}],"source_content_type":"text/x-python","patch_set":6,"id":"f2136ef9_54a2c2f3","line":807,"range":{"start_line":803,"start_character":0,"end_line":807,"end_character":55},"in_reply_to":"85cd5fae_fdcff568","updated":"2022-06-07 13:13:28.000000000","message":"Hm. probably counting subnets to see if there is only one could be a better approach. Also, checking creation time to see if it get stuck for around 10 minutes could be an option too.","commit_id":"a491c346b7169f02d36366bb339b6dd6a4f69c42"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"778b2c9c1935059912ddaecca098fc35dc051712","unresolved":true,"context_lines":[{"line_number":800,"context_line":"            # to not have tags."},{"line_number":801,"context_line":"            for subnet in os_net.subnets(network_id\u003dnet.id,"},{"line_number":802,"context_line":"                                         not_tags\u003dlist(tags)):"},{"line_number":803,"context_line":"                try:"},{"line_number":804,"context_line":"                    os_net.delete_subnet(subnet)"},{"line_number":805,"context_line":"                except os_exc.SDKException as ex:"},{"line_number":806,"context_line":"                    LOG.warning(\u0027There was an issue with removing subnet \u0027"},{"line_number":807,"context_line":"                                \u0027\"%s\": %s\u0027, subnet, ex)"},{"line_number":808,"context_line":"            continue"},{"line_number":809,"context_line":""},{"line_number":810,"context_line":"        if len(os_net.ports(network_id\u003dnet.id)) \u003e 0:"}],"source_content_type":"text/x-python","patch_set":6,"id":"5ae6e409_4cf8cfb9","line":807,"range":{"start_line":803,"start_character":0,"end_line":807,"end_character":55},"in_reply_to":"f2136ef9_54a2c2f3","updated":"2022-06-07 15:59:49.000000000","message":"Yeah, my initial idea was the creation time, just like with the networks.","commit_id":"a491c346b7169f02d36366bb339b6dd6a4f69c42"},{"author":{"_account_id":27032,"name":"Maysa de Macedo Souza","email":"maysa.macedo95@gmail.com","username":"maysa"},"change_message_id":"aecb1766f3d073c1249142e91b3d1d7dabdbda76","unresolved":true,"context_lines":[{"line_number":802,"context_line":"                                         not_tags\u003dlist(tags)):"},{"line_number":803,"context_line":"                now \u003d timeutils.utcnow(True)"},{"line_number":804,"context_line":"                subnet_time \u003d timeutils.parse_isotime(subnet.updated_at)"},{"line_number":805,"context_line":"                if (now - subnet_time).seconds \u003e ZOMBIE_AGE:"},{"line_number":806,"context_line":"                    try:"},{"line_number":807,"context_line":"                        os_net.delete_subnet(subnet)"},{"line_number":808,"context_line":"                    except os_exc.SDKException as ex:"}],"source_content_type":"text/x-python","patch_set":8,"id":"1fb90cd0_e6d14fbc","line":805,"updated":"2022-06-20 18:40:23.000000000","message":"It would be interesting to include logs informing that an unused subnet was found. Same would apply for Networks.","commit_id":"a63bf2397627a96331e3142d429f01f6683d5a7c"},{"author":{"_account_id":27032,"name":"Maysa de Macedo Souza","email":"maysa.macedo95@gmail.com","username":"maysa"},"change_message_id":"1f3f652d962407bf3f77299f9c590411e9e7482d","unresolved":true,"context_lines":[{"line_number":802,"context_line":"                                         not_tags\u003dlist(tags)):"},{"line_number":803,"context_line":"                now \u003d timeutils.utcnow(True)"},{"line_number":804,"context_line":"                subnet_time \u003d timeutils.parse_isotime(subnet.updated_at)"},{"line_number":805,"context_line":"                if (now - subnet_time).seconds \u003e ZOMBIE_AGE:"},{"line_number":806,"context_line":"                    try:"},{"line_number":807,"context_line":"                        os_net.delete_subnet(subnet)"},{"line_number":808,"context_line":"                    except os_exc.SDKException as ex:"}],"source_content_type":"text/x-python","patch_set":8,"id":"db38e7eb_6cd6e330","line":805,"in_reply_to":"1fb90cd0_e6d14fbc","updated":"2022-06-20 18:40:45.000000000","message":"it can be included in a follow up patch","commit_id":"a63bf2397627a96331e3142d429f01f6683d5a7c"}]}
