)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"6d4ad57b43c1e24ac4ffa6fbbf335cd734c9572a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"0d76e162_5fc2659b","updated":"2023-11-07 10:34:05.000000000","message":"missing testing coverage but already tested locally","commit_id":"5ba0acea469740fb859787f0c87ee4383ca930de"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"f1e4fe3adda8ad99b2e6b3d0c7f293c7c72afe8a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"55477b37_1d7ac83e","updated":"2023-11-09 15:19:49.000000000","message":"Thanks Luis! Overall patch looks good, just a few nits and suggestions inline","commit_id":"90a3e305b6ff33f80278355625fd2713df9bf2e5"}],"ovn_bgp_agent/drivers/openstack/nb_ovn_bgp_driver.py":[{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"f1e4fe3adda8ad99b2e6b3d0c7f293c7c72afe8a","unresolved":true,"context_lines":[{"line_number":560,"context_line":"        ips_to_expose \u003d ips"},{"line_number":561,"context_line":"        if not CONF.expose_tenant_networks:"},{"line_number":562,"context_line":"            # This means CONF.expose_ipv6_gua_tenant_networks is enabled"},{"line_number":563,"context_line":"            gua_ips \u003d []"},{"line_number":564,"context_line":"            for ip in ips:"},{"line_number":565,"context_line":"                if driver_utils.is_ipv6_gua(ip):"},{"line_number":566,"context_line":"                    gua_ips.append(ip)"},{"line_number":567,"context_line":"            if not gua_ips:"},{"line_number":568,"context_line":"                return"},{"line_number":569,"context_line":"            ips_to_expose \u003d gua_ips"}],"source_content_type":"text/x-python","patch_set":8,"id":"70be9997_a1c9cfed","line":566,"range":{"start_line":563,"start_character":0,"end_line":566,"end_character":38},"updated":"2023-11-09 15:19:49.000000000","message":"Could be an one-liner:\n\ngua_ips \u003d [ip for ip in ips if driver_utils.is_ipv6_gua(ip)]","commit_id":"90a3e305b6ff33f80278355625fd2713df9bf2e5"},{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"bef7acdf9e77f89ddc08a03cba41433af2eb1009","unresolved":false,"context_lines":[{"line_number":560,"context_line":"        ips_to_expose \u003d ips"},{"line_number":561,"context_line":"        if not CONF.expose_tenant_networks:"},{"line_number":562,"context_line":"            # This means CONF.expose_ipv6_gua_tenant_networks is enabled"},{"line_number":563,"context_line":"            gua_ips \u003d []"},{"line_number":564,"context_line":"            for ip in ips:"},{"line_number":565,"context_line":"                if driver_utils.is_ipv6_gua(ip):"},{"line_number":566,"context_line":"                    gua_ips.append(ip)"},{"line_number":567,"context_line":"            if not gua_ips:"},{"line_number":568,"context_line":"                return"},{"line_number":569,"context_line":"            ips_to_expose \u003d gua_ips"}],"source_content_type":"text/x-python","patch_set":8,"id":"c9187251_0a9893db","line":566,"range":{"start_line":563,"start_character":0,"end_line":566,"end_character":38},"in_reply_to":"70be9997_a1c9cfed","updated":"2023-11-10 09:37:37.000000000","message":"ups, right! thanks!","commit_id":"90a3e305b6ff33f80278355625fd2713df9bf2e5"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"f1e4fe3adda8ad99b2e6b3d0c7f293c7c72afe8a","unresolved":true,"context_lines":[{"line_number":568,"context_line":"                return"},{"line_number":569,"context_line":"            ips_to_expose \u003d gua_ips"},{"line_number":570,"context_line":""},{"line_number":571,"context_line":"        LOG.debug(\"Adding BGP route for tenant IP %s on chassis %s\","},{"line_number":572,"context_line":"                  ips_to_expose, self.chassis)"},{"line_number":573,"context_line":"        bgp_utils.announce_ips(ips_to_expose)"},{"line_number":574,"context_line":"        for ip in ips_to_expose:"}],"source_content_type":"text/x-python","patch_set":8,"id":"ce233b74_be66744c","line":571,"range":{"start_line":571,"start_character":47,"end_line":571,"end_character":49},"updated":"2023-11-09 15:19:49.000000000","message":"nit: IP(s) as it could be plural ?","commit_id":"90a3e305b6ff33f80278355625fd2713df9bf2e5"},{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"bef7acdf9e77f89ddc08a03cba41433af2eb1009","unresolved":false,"context_lines":[{"line_number":568,"context_line":"                return"},{"line_number":569,"context_line":"            ips_to_expose \u003d gua_ips"},{"line_number":570,"context_line":""},{"line_number":571,"context_line":"        LOG.debug(\"Adding BGP route for tenant IP %s on chassis %s\","},{"line_number":572,"context_line":"                  ips_to_expose, self.chassis)"},{"line_number":573,"context_line":"        bgp_utils.announce_ips(ips_to_expose)"},{"line_number":574,"context_line":"        for ip in ips_to_expose:"}],"source_content_type":"text/x-python","patch_set":8,"id":"f4bd7e6d_4ba1b59c","line":571,"range":{"start_line":571,"start_character":47,"end_line":571,"end_character":49},"in_reply_to":"ce233b74_be66744c","updated":"2023-11-10 09:37:37.000000000","message":"Done","commit_id":"90a3e305b6ff33f80278355625fd2713df9bf2e5"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"f1e4fe3adda8ad99b2e6b3d0c7f293c7c72afe8a","unresolved":true,"context_lines":[{"line_number":585,"context_line":"        ips_to_withdraw \u003d ips"},{"line_number":586,"context_line":"        if not CONF.expose_tenant_networks:"},{"line_number":587,"context_line":"            # This means CONF.expose_ipv6_gua_tenant_networks is enabled"},{"line_number":588,"context_line":"            gua_ips \u003d []"},{"line_number":589,"context_line":"            for ip in ips:"},{"line_number":590,"context_line":"                if driver_utils.is_ipv6_gua(ip):"},{"line_number":591,"context_line":"                    gua_ips.append(ip)"},{"line_number":592,"context_line":"            if not gua_ips:"},{"line_number":593,"context_line":"                return"},{"line_number":594,"context_line":"            ips_to_withdraw \u003d gua_ips"}],"source_content_type":"text/x-python","patch_set":8,"id":"4120adf8_5b75714f","line":591,"range":{"start_line":588,"start_character":0,"end_line":591,"end_character":38},"updated":"2023-11-09 15:19:49.000000000","message":"same as L563","commit_id":"90a3e305b6ff33f80278355625fd2713df9bf2e5"},{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"bef7acdf9e77f89ddc08a03cba41433af2eb1009","unresolved":false,"context_lines":[{"line_number":585,"context_line":"        ips_to_withdraw \u003d ips"},{"line_number":586,"context_line":"        if not CONF.expose_tenant_networks:"},{"line_number":587,"context_line":"            # This means CONF.expose_ipv6_gua_tenant_networks is enabled"},{"line_number":588,"context_line":"            gua_ips \u003d []"},{"line_number":589,"context_line":"            for ip in ips:"},{"line_number":590,"context_line":"                if driver_utils.is_ipv6_gua(ip):"},{"line_number":591,"context_line":"                    gua_ips.append(ip)"},{"line_number":592,"context_line":"            if not gua_ips:"},{"line_number":593,"context_line":"                return"},{"line_number":594,"context_line":"            ips_to_withdraw \u003d gua_ips"}],"source_content_type":"text/x-python","patch_set":8,"id":"7c6739d0_bea65ffa","line":591,"range":{"start_line":588,"start_character":0,"end_line":591,"end_character":38},"in_reply_to":"4120adf8_5b75714f","updated":"2023-11-10 09:37:37.000000000","message":"Done","commit_id":"90a3e305b6ff33f80278355625fd2713df9bf2e5"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"f1e4fe3adda8ad99b2e6b3d0c7f293c7c72afe8a","unresolved":true,"context_lines":[{"line_number":741,"context_line":"            try:"},{"line_number":742,"context_line":"                del self.ovn_local_lrps[subnet_info[\u0027network\u0027]]"},{"line_number":743,"context_line":"            except KeyError:"},{"line_number":744,"context_line":"                LOG.debug(\"Router port for subnet %s already cleanup.\","},{"line_number":745,"context_line":"                          subnet_info[\u0027network\u0027])"},{"line_number":746,"context_line":"        return success"},{"line_number":747,"context_line":""},{"line_number":748,"context_line":"    def _address_scope_allowed(self, ip, address_scopes):"}],"source_content_type":"text/x-python","patch_set":8,"id":"49da5cda_75ed352b","line":745,"range":{"start_line":744,"start_character":0,"end_line":745,"end_character":49},"updated":"2023-11-09 15:19:49.000000000","message":"nit: Do we really care about this enough to log it ?\n\nI\u0027m not against it but doesn\u0027t sound like useful enough to be logged and may just clutter the log","commit_id":"90a3e305b6ff33f80278355625fd2713df9bf2e5"},{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"bef7acdf9e77f89ddc08a03cba41433af2eb1009","unresolved":false,"context_lines":[{"line_number":741,"context_line":"            try:"},{"line_number":742,"context_line":"                del self.ovn_local_lrps[subnet_info[\u0027network\u0027]]"},{"line_number":743,"context_line":"            except KeyError:"},{"line_number":744,"context_line":"                LOG.debug(\"Router port for subnet %s already cleanup.\","},{"line_number":745,"context_line":"                          subnet_info[\u0027network\u0027])"},{"line_number":746,"context_line":"        return success"},{"line_number":747,"context_line":""},{"line_number":748,"context_line":"    def _address_scope_allowed(self, ip, address_scopes):"}],"source_content_type":"text/x-python","patch_set":8,"id":"4384c95b_30c6f12c","line":745,"range":{"start_line":744,"start_character":0,"end_line":745,"end_character":49},"in_reply_to":"49da5cda_75ed352b","updated":"2023-11-10 09:37:37.000000000","message":"Done","commit_id":"90a3e305b6ff33f80278355625fd2713df9bf2e5"}],"ovn_bgp_agent/drivers/openstack/utils/ovn.py":[{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"f1e4fe3adda8ad99b2e6b3d0c7f293c7c72afe8a","unresolved":true,"context_lines":[{"line_number":456,"context_line":"        cmd \u003d self.db_find_rows(\u0027Logical_Switch_Port\u0027, (\u0027up\u0027, \u0027\u003d\u0027, True),"},{"line_number":457,"context_line":"                                (\u0027type\u0027, \u0027\u003d\u0027, constants.OVN_VM_VIF_PORT_TYPE))"},{"line_number":458,"context_line":"        for row in cmd.execute(check_error\u003dTrue):"},{"line_number":459,"context_line":"            if (row.external_ids.get(constants.OVN_LS_NAME_EXT_ID_KEY) \u003d\u003d"},{"line_number":460,"context_line":"                    network):"},{"line_number":461,"context_line":"                ports.append(row)"},{"line_number":462,"context_line":"        # port type \"virtual\""},{"line_number":463,"context_line":"        cmd \u003d self.db_find_rows("}],"source_content_type":"text/x-python","patch_set":8,"id":"cb0870eb_5827f5c4","line":460,"range":{"start_line":459,"start_character":0,"end_line":460,"end_character":29},"updated":"2023-11-09 15:19:49.000000000","message":"It seems possible to make this external_id check part of the db_find_rows() call, for example:\n\nhttps://github.com/openstack/neutron/blob/26f173423986ca6c110ee517bae8d5db844d6ad6/neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/ovn_client.py#L925-L928\n\nThere are more examples around the code.","commit_id":"90a3e305b6ff33f80278355625fd2713df9bf2e5"},{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"bef7acdf9e77f89ddc08a03cba41433af2eb1009","unresolved":false,"context_lines":[{"line_number":456,"context_line":"        cmd \u003d self.db_find_rows(\u0027Logical_Switch_Port\u0027, (\u0027up\u0027, \u0027\u003d\u0027, True),"},{"line_number":457,"context_line":"                                (\u0027type\u0027, \u0027\u003d\u0027, constants.OVN_VM_VIF_PORT_TYPE))"},{"line_number":458,"context_line":"        for row in cmd.execute(check_error\u003dTrue):"},{"line_number":459,"context_line":"            if (row.external_ids.get(constants.OVN_LS_NAME_EXT_ID_KEY) \u003d\u003d"},{"line_number":460,"context_line":"                    network):"},{"line_number":461,"context_line":"                ports.append(row)"},{"line_number":462,"context_line":"        # port type \"virtual\""},{"line_number":463,"context_line":"        cmd \u003d self.db_find_rows("}],"source_content_type":"text/x-python","patch_set":8,"id":"c5eb9fad_362f6d0c","line":460,"range":{"start_line":459,"start_character":0,"end_line":460,"end_character":29},"in_reply_to":"cb0870eb_5827f5c4","updated":"2023-11-10 09:37:37.000000000","message":"ohh, nice! did not know that, I was expecting that all the external_ids should match, not just the passed one. Great!","commit_id":"90a3e305b6ff33f80278355625fd2713df9bf2e5"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"f1e4fe3adda8ad99b2e6b3d0c7f293c7c72afe8a","unresolved":true,"context_lines":[{"line_number":464,"context_line":"            \u0027Logical_Switch_Port\u0027, (\u0027up\u0027, \u0027\u003d\u0027, True),"},{"line_number":465,"context_line":"            (\u0027type\u0027, \u0027\u003d\u0027, constants.OVN_VIRTUAL_VIF_PORT_TYPE))"},{"line_number":466,"context_line":"        for row in cmd.execute(check_error\u003dTrue):"},{"line_number":467,"context_line":"            if (row.external_ids.get(constants.OVN_LS_NAME_EXT_ID_KEY) \u003d\u003d"},{"line_number":468,"context_line":"                    network):"},{"line_number":469,"context_line":"                ports.append(row)"},{"line_number":470,"context_line":"        return ports"},{"line_number":471,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"c9e4a79f_f9ff81de","line":468,"range":{"start_line":467,"start_character":0,"end_line":468,"end_character":29},"updated":"2023-11-09 15:19:49.000000000","message":"ditto as above","commit_id":"90a3e305b6ff33f80278355625fd2713df9bf2e5"},{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"bef7acdf9e77f89ddc08a03cba41433af2eb1009","unresolved":false,"context_lines":[{"line_number":464,"context_line":"            \u0027Logical_Switch_Port\u0027, (\u0027up\u0027, \u0027\u003d\u0027, True),"},{"line_number":465,"context_line":"            (\u0027type\u0027, \u0027\u003d\u0027, constants.OVN_VIRTUAL_VIF_PORT_TYPE))"},{"line_number":466,"context_line":"        for row in cmd.execute(check_error\u003dTrue):"},{"line_number":467,"context_line":"            if (row.external_ids.get(constants.OVN_LS_NAME_EXT_ID_KEY) \u003d\u003d"},{"line_number":468,"context_line":"                    network):"},{"line_number":469,"context_line":"                ports.append(row)"},{"line_number":470,"context_line":"        return ports"},{"line_number":471,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"537e4310_74cbad63","line":468,"range":{"start_line":467,"start_character":0,"end_line":468,"end_character":29},"in_reply_to":"c9e4a79f_f9ff81de","updated":"2023-11-10 09:37:37.000000000","message":"Done","commit_id":"90a3e305b6ff33f80278355625fd2713df9bf2e5"}],"ovn_bgp_agent/drivers/openstack/watchers/nb_bgp_watcher.py":[{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"f1e4fe3adda8ad99b2e6b3d0c7f293c7c72afe8a","unresolved":true,"context_lines":[{"line_number":544,"context_line":"                return False"},{"line_number":545,"context_line":""},{"line_number":546,"context_line":"            current_network \u003d self._get_network(row)"},{"line_number":547,"context_line":"            if current_network not in self.agent.ovn_local_lrps.keys():"},{"line_number":548,"context_line":"                return False"},{"line_number":549,"context_line":""},{"line_number":550,"context_line":"            if hasattr(old, \u0027up\u0027):"}],"source_content_type":"text/x-python","patch_set":8,"id":"9d6502fc_637475c9","line":547,"range":{"start_line":547,"start_character":63,"end_line":547,"end_character":70},"updated":"2023-11-09 15:19:49.000000000","message":"nit: keys() can be removed, it will search in the keys implicitly","commit_id":"90a3e305b6ff33f80278355625fd2713df9bf2e5"},{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"bef7acdf9e77f89ddc08a03cba41433af2eb1009","unresolved":false,"context_lines":[{"line_number":544,"context_line":"                return False"},{"line_number":545,"context_line":""},{"line_number":546,"context_line":"            current_network \u003d self._get_network(row)"},{"line_number":547,"context_line":"            if current_network not in self.agent.ovn_local_lrps.keys():"},{"line_number":548,"context_line":"                return False"},{"line_number":549,"context_line":""},{"line_number":550,"context_line":"            if hasattr(old, \u0027up\u0027):"}],"source_content_type":"text/x-python","patch_set":8,"id":"3d5f4a86_cfc710ad","line":547,"range":{"start_line":547,"start_character":63,"end_line":547,"end_character":70},"in_reply_to":"9d6502fc_637475c9","updated":"2023-11-10 09:37:37.000000000","message":"Done","commit_id":"90a3e305b6ff33f80278355625fd2713df9bf2e5"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"f1e4fe3adda8ad99b2e6b3d0c7f293c7c72afe8a","unresolved":true,"context_lines":[{"line_number":590,"context_line":""},{"line_number":591,"context_line":"            current_network \u003d self._get_network(row)"},{"line_number":592,"context_line":"            # Assuming the current_network cannot be changed at once"},{"line_number":593,"context_line":"            if current_network not in self.agent.ovn_local_lrps.keys():"},{"line_number":594,"context_line":"                return False"},{"line_number":595,"context_line":""},{"line_number":596,"context_line":"            if event \u003d\u003d self.ROW_DELETE:"}],"source_content_type":"text/x-python","patch_set":8,"id":"f1b672e0_09e2514b","line":593,"range":{"start_line":593,"start_character":63,"end_line":593,"end_character":70},"updated":"2023-11-09 15:19:49.000000000","message":"ditto","commit_id":"90a3e305b6ff33f80278355625fd2713df9bf2e5"},{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"bef7acdf9e77f89ddc08a03cba41433af2eb1009","unresolved":false,"context_lines":[{"line_number":590,"context_line":""},{"line_number":591,"context_line":"            current_network \u003d self._get_network(row)"},{"line_number":592,"context_line":"            # Assuming the current_network cannot be changed at once"},{"line_number":593,"context_line":"            if current_network not in self.agent.ovn_local_lrps.keys():"},{"line_number":594,"context_line":"                return False"},{"line_number":595,"context_line":""},{"line_number":596,"context_line":"            if event \u003d\u003d self.ROW_DELETE:"}],"source_content_type":"text/x-python","patch_set":8,"id":"19b43844_4491a4e7","line":593,"range":{"start_line":593,"start_character":63,"end_line":593,"end_character":70},"in_reply_to":"f1b672e0_09e2514b","updated":"2023-11-10 09:37:37.000000000","message":"Done","commit_id":"90a3e305b6ff33f80278355625fd2713df9bf2e5"}]}
