)]}'
{"neutron/db/l3_db.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"c4566bd915a0487b6067d73c00f04584660b5fc8","unresolved":true,"context_lines":[{"line_number":1550,"context_line":""},{"line_number":1551,"context_line":"    @db_api.retry_if_session_inactive()"},{"line_number":1552,"context_line":"    def delete_disassociated_floatingips(self, context, network_id):"},{"line_number":1553,"context_line":"        if not l3_obj.FloatingIP.exists_disassociated_for_net("},{"line_number":1554,"context_line":"                context, network_id):"},{"line_number":1555,"context_line":"            return"},{"line_number":1556,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"5d80da3f_8902219b","line":1553,"range":{"start_line":1553,"start_character":33,"end_line":1553,"end_character":61},"updated":"2021-04-09 13:34:36.000000000","message":"I don\u0027t understand this check. Query in L1557 will return an empty list with the same DB query. This will duplicate the number of queries.","commit_id":"46514fb5035584e3411f79ea4eb692c98eb20908"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"615f3ab1b9e715d706d4dd42c81a7edc80361a2f","unresolved":true,"context_lines":[{"line_number":1550,"context_line":""},{"line_number":1551,"context_line":"    @db_api.retry_if_session_inactive()"},{"line_number":1552,"context_line":"    def delete_disassociated_floatingips(self, context, network_id):"},{"line_number":1553,"context_line":"        if not l3_obj.FloatingIP.exists_disassociated_for_net("},{"line_number":1554,"context_line":"                context, network_id):"},{"line_number":1555,"context_line":"            return"},{"line_number":1556,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"ef779a18_5e9a07a2","line":1553,"range":{"start_line":1553,"start_character":33,"end_line":1553,"end_character":61},"in_reply_to":"52e4f12b_fcb38d15","updated":"2021-04-12 15:02:08.000000000","message":"Understood. So, I\u0027ll reformulate my comment: why don\u0027t we reduce the scope of the L1557 query?\n\nYou can implement, inside the FloatingIP OVO class, a method to retrieve only the FIP ID filtering by \"floating_network_id, \"router_id\", \"fixed_port_id\". This is a direct query, without joined ones, that will return \n\n  query \u003d context.session.query(l3.FloatingIP.id)\n  query \u003d query.filter(and_(\n    l3.FloatingIP.floating_network_id \u003d\u003d floating_network_id,\n    l3.FloatingIP.router_id \u003d\u003d router_id,\n    l3.FloatingIP.fixed_port_id \u003d\u003d fixed_port_id)\n  return query.all()  \u003c-- list of IDs only, this query is trivial.\n\nThat will speed up both cases, when we have associated FIPs and not.","commit_id":"46514fb5035584e3411f79ea4eb692c98eb20908"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"907c99f4f1e99cc8e44f6bee86b230b4a3013619","unresolved":true,"context_lines":[{"line_number":1550,"context_line":""},{"line_number":1551,"context_line":"    @db_api.retry_if_session_inactive()"},{"line_number":1552,"context_line":"    def delete_disassociated_floatingips(self, context, network_id):"},{"line_number":1553,"context_line":"        if not l3_obj.FloatingIP.exists_disassociated_for_net("},{"line_number":1554,"context_line":"                context, network_id):"},{"line_number":1555,"context_line":"            return"},{"line_number":1556,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"52e4f12b_fcb38d15","line":1553,"range":{"start_line":1553,"start_character":33,"end_line":1553,"end_character":61},"in_reply_to":"5d80da3f_8902219b","updated":"2021-04-10 05:45:16.000000000","message":"query on 1557:\n\n\"SELECT floatingips.project_id AS floatingips_project_id, floatingips.id AS floatingips_id, floatingips.floating_ip_address AS floatingips_floating_ip_address, floatingips.floating_network_id AS floatingips_floating_network_id, floatingips.floating_port_id AS floatingips_floating_port_id, floatingips.fixed_port_id AS floatingips_fixed_port_id, floatingips.fixed_ip_address AS floatingips_fixed_ip_address, floatingips.router_id AS floatingips_router_id, floatingips.last_known_router_id AS floatingips_last_known_router_id, floatingips.`status` AS floatingips_status, floatingips.standard_attr_id AS floatingips_standard_attr_id, standardattributes_1.id AS standardattributes_1_id, standardattributes_1.resource_type AS standardattributes_1_resource_type, standardattributes_1.description AS standardattributes_1_description, standardattributes_1.revision_number AS standardattributes_1_revision_number, standardattributes_1.created_at AS standardattributes_1_created_at, standardattributes_1.updated_at AS standardattributes_1_updated_at, ports_1.project_id AS ports_1_project_id, ports_1.id AS ports_1_id, ports_1.name AS ports_1_name, ports_1.network_id AS ports_1_network_id, ports_1.mac_address AS ports_1_mac_address, ports_1.admin_state_up AS ports_1_admin_state_up, ports_1.`status` AS ports_1_status, ports_1.device_id AS ports_1_device_id, ports_1.device_owner AS ports_1_device_owner, ports_1.ip_allocation AS ports_1_ip_allocation, ports_1.standard_attr_id AS ports_1_standard_attr_id, securitygroupportbindings_1.port_id AS securitygroupportbindings_1_port_id, securitygroupportbindings_1.security_group_id AS securitygroupportbindings_1_security_group_id, portdnses_1.port_id AS portdnses_1_port_id, portdnses_1.current_dns_name AS portdnses_1_current_dns_name, portdnses_1.current_dns_domain AS portdnses_1_current_dns_domain, portdnses_1.previous_dns_name AS portdnses_1_previous_dns_name, portdnses_1.previous_dns_domain AS portdnses_1_previous_dns_domain, portdnses_1.dns_name AS portdnses_1_dns_name, portdnses_1.dns_domain AS portdnses_1_dns_domain, qos_network_policy_bindings_1.policy_id AS qos_network_policy_bindings_1_policy_id, qos_network_policy_bindings_1.network_id AS qos_network_policy_bindings_1_network_id, qos_port_policy_bindings_1.policy_id AS qos_port_policy_bindings_1_policy_id, qos_port_policy_bindings_1.port_id AS qos_port_policy_bindings_1_port_id, ml2_port_bindings_1.port_id AS ml2_port_bindings_1_port_id, ml2_port_bindings_1.host AS ml2_port_bindings_1_host, ml2_port_bindings_1.vnic_type AS ml2_port_bindings_1_vnic_type, ml2_port_bindings_1.profile AS ml2_port_bindings_1_profile, ml2_port_bindings_1.vif_type AS ml2_port_bindings_1_vif_type, ml2_port_bindings_1.vif_details AS ml2_port_bindings_1_vif_details, ml2_port_bindings_1.`status` AS ml2_port_bindings_1_status, portsecuritybindings_1.port_id AS portsecuritybindings_1_port_id, portsecuritybindings_1.port_security_enabled AS portsecuritybindings_1_port_security_enabled, standardattributes_2.id AS standardattributes_2_id, standardattributes_2.resource_type AS standardattributes_2_resource_type, standardattributes_2.description AS standardattributes_2_description, standardattributes_2.revision_number AS standardattributes_2_revision_number, standardattributes_2.created_at AS standardattributes_2_created_at, standardattributes_2.updated_at AS standardattributes_2_updated_at, trunks_1.project_id AS trunks_1_project_id, trunks_1.id AS trunks_1_id, trunks_1.admin_state_up AS trunks_1_admin_state_up, trunks_1.name AS trunks_1_name, trunks_1.port_id AS trunks_1_port_id, trunks_1.`status` AS trunks_1_status, trunks_1.standard_attr_id AS trunks_1_standard_attr_id, subports_1.port_id AS subports_1_port_id, subports_1.trunk_id AS subports_1_trunk_id, subports_1.segmentation_type AS subports_1_segmentation_type, subports_1.segmentation_id AS subports_1_segmentation_id, portnumaaffinitypolicies_1.port_id AS portnumaaffinitypolicies_1_port_id, portnumaaffinitypolicies_1.numa_affinity_policy AS portnumaaffinitypolicies_1_numa_affinity_policy, portdataplanestatuses_1.port_id AS portdataplanestatuses_1_port_id, portdataplanestatuses_1.data_plane_status AS portdataplanestatuses_1_data_plane_status, portuplinkstatuspropagation_1.port_id AS portuplinkstatuspropagation_1_port_id, portuplinkstatuspropagation_1.propagate_uplink_status AS portuplinkstatuspropagation_1_propagate_uplink_status, portdeviceprofiles_1.port_id AS portdeviceprofiles_1_port_id, portdeviceprofiles_1.device_profile AS portdeviceprofiles_1_device_profile, standardattributes_3.id AS standardattributes_3_id, standardattributes_3.resource_type AS standardattributes_3_resource_type, standardattributes_3.description AS standardattributes_3_description, standardattributes_3.revision_number AS standardattributes_3_revision_number, standardattributes_3.created_at AS standardattributes_3_created_at, standardattributes_3.updated_at AS standardattributes_3_updated_at, floatingipdnses_1.floatingip_id AS floatingipdnses_1_floatingip_id, floatingipdnses_1.dns_name AS floatingipdnses_1_dns_name, floatingipdnses_1.dns_domain AS floatingipdnses_1_dns_domain, floatingipdnses_1.published_dns_name AS floatingipdnses_1_published_dns_name, floatingipdnses_1.published_dns_domain AS floatingipdnses_1_published_dns_domain, qos_fip_policy_bindings_1.policy_id AS qos_fip_policy_bindings_1_policy_id, qos_fip_policy_bindings_1.fip_id AS qos_fip_policy_bindings_1_fip_id \nFROM floatingips LEFT OUTER JOIN ports AS ports_1 ON ports_1.id \u003d floatingips.fixed_port_id LEFT OUTER JOIN standardattributes AS standardattributes_1 ON standardattributes_1.id \u003d ports_1.standard_attr_id LEFT OUTER JOIN securitygroupportbindings AS securitygroupportbindings_1 ON ports_1.id \u003d securitygroupportbindings_1.port_id LEFT OUTER JOIN portdnses AS portdnses_1 ON ports_1.id \u003d portdnses_1.port_id LEFT OUTER JOIN qos_network_policy_bindings AS qos_network_policy_bindings_1 ON qos_network_policy_bindings_1.network_id \u003d ports_1.network_id LEFT OUTER JOIN qos_port_policy_bindings AS qos_port_policy_bindings_1 ON ports_1.id \u003d qos_port_policy_bindings_1.port_id LEFT OUTER JOIN ml2_port_bindings AS ml2_port_bindings_1 ON ports_1.id \u003d ml2_port_bindings_1.port_id LEFT OUTER JOIN portsecuritybindings AS portsecuritybindings_1 ON ports_1.id \u003d portsecuritybindings_1.port_id LEFT OUTER JOIN trunks AS trunks_1 ON ports_1.id \u003d trunks_1.port_id LEFT OUTER JOIN standardattributes AS standardattributes_2 ON standardattributes_2.id \u003d trunks_1.standard_attr_id LEFT OUTER JOIN subports AS subports_1 ON ports_1.id \u003d subports_1.port_id LEFT OUTER JOIN portnumaaffinitypolicies AS portnumaaffinitypolicies_1 ON ports_1.id \u003d portnumaaffinitypolicies_1.port_id LEFT OUTER JOIN portdataplanestatuses AS portdataplanestatuses_1 ON ports_1.id \u003d portdataplanestatuses_1.port_id LEFT OUTER JOIN portuplinkstatuspropagation AS portuplinkstatuspropagation_1 ON ports_1.id \u003d portuplinkstatuspropagation_1.port_id LEFT OUTER JOIN portdeviceprofiles AS portdeviceprofiles_1 ON ports_1.id \u003d portdeviceprofiles_1.port_id LEFT OUTER JOIN standardattributes AS standardattributes_3 ON standardattributes_3.id \u003d floatingips.standard_attr_id LEFT OUTER JOIN floatingipdnses AS floatingipdnses_1 ON floatingips.id \u003d floatingipdnses_1.floatingip_id LEFT OUTER JOIN qos_fip_policy_bindings AS qos_fip_policy_bindings_1 ON floatingips.id \u003d qos_fip_policy_bindings_1.fip_id \nWHERE floatingips.project_id \u003d %(project_id_1)s AND floatingips.floating_network_id IN (%(floating_network_id_1)s) AND floatingips.router_id IS NULL AND floatingips.fixed_port_id IS NULL\"\n\nQuery on 1553:\n\n\"SELECT floatingips.id AS floatingips_id \\nFROM floatingips \\nWHERE floatingips.floating_network_id \u003d %(floating_network_id_1)s AND floatingips.router_id IS NULL AND floatingips.fixed_port_id IS NULL \\n LIMIT %(param_1)s\"\n\nMost nets are non-external and won\u0027t have floating IPs, so avoiding big query gives 5-10% improvement.","commit_id":"46514fb5035584e3411f79ea4eb692c98eb20908"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"ce5ffe18fbacf0a767adb44235ad88a94ea0de4d","unresolved":true,"context_lines":[{"line_number":1550,"context_line":""},{"line_number":1551,"context_line":"    @db_api.retry_if_session_inactive()"},{"line_number":1552,"context_line":"    def delete_disassociated_floatingips(self, context, network_id):"},{"line_number":1553,"context_line":"        if not l3_obj.FloatingIP.exists_disassociated_for_net("},{"line_number":1554,"context_line":"                context, network_id):"},{"line_number":1555,"context_line":"            return"},{"line_number":1556,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"100f4e47_e07bffe7","line":1553,"range":{"start_line":1553,"start_character":33,"end_line":1553,"end_character":61},"in_reply_to":"ef779a18_5e9a07a2","updated":"2021-04-12 15:46:16.000000000","message":"Right, didn\u0027t realize we only need id below, thanks","commit_id":"46514fb5035584e3411f79ea4eb692c98eb20908"}],"neutron/objects/router.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"c4566bd915a0487b6067d73c00f04584660b5fc8","unresolved":true,"context_lines":[{"line_number":359,"context_line":"    @classmethod"},{"line_number":360,"context_line":"    def exists_disassociated_for_net(cls, context, network_id):"},{"line_number":361,"context_line":"        query \u003d context.session.query(cls.db_model.id)"},{"line_number":362,"context_line":"        query - query.filter_by("},{"line_number":363,"context_line":"            floating_network_id\u003dnetwork_id,"},{"line_number":364,"context_line":"            router_id\u003dNone,"},{"line_number":365,"context_line":"            fixed_port_id\u003dNone)"}],"source_content_type":"text/x-python","patch_set":1,"id":"a4fbdc79_2f7f2050","line":362,"range":{"start_line":362,"start_character":14,"end_line":362,"end_character":15},"updated":"2021-04-09 13:34:36.000000000","message":"\u003d, not -","commit_id":"46514fb5035584e3411f79ea4eb692c98eb20908"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"907c99f4f1e99cc8e44f6bee86b230b4a3013619","unresolved":false,"context_lines":[{"line_number":359,"context_line":"    @classmethod"},{"line_number":360,"context_line":"    def exists_disassociated_for_net(cls, context, network_id):"},{"line_number":361,"context_line":"        query \u003d context.session.query(cls.db_model.id)"},{"line_number":362,"context_line":"        query - query.filter_by("},{"line_number":363,"context_line":"            floating_network_id\u003dnetwork_id,"},{"line_number":364,"context_line":"            router_id\u003dNone,"},{"line_number":365,"context_line":"            fixed_port_id\u003dNone)"}],"source_content_type":"text/x-python","patch_set":1,"id":"5453705f_591456bc","line":362,"range":{"start_line":362,"start_character":14,"end_line":362,"end_character":15},"in_reply_to":"a4fbdc79_2f7f2050","updated":"2021-04-10 05:45:16.000000000","message":"Done","commit_id":"46514fb5035584e3411f79ea4eb692c98eb20908"}]}
