)]}'
{"neutron/services/qos/qos_plugin.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"ec5326843c724b96d0dc2ff086d0a02b9bc8e332","unresolved":true,"context_lines":[{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    @staticmethod"},{"line_number":106,"context_line":"    @resource_extend.extends([port_def.COLLECTION_NAME])"},{"line_number":107,"context_line":"    def _extend_port_resource_request(port_res, port_db):"},{"line_number":108,"context_line":"        \"\"\"Add resource request to a port.\"\"\""},{"line_number":109,"context_line":"        if isinstance(port_db, ports_object.Port):"},{"line_number":110,"context_line":"            qos_id \u003d port_db.qos_policy_id or port_db.qos_network_policy_id"}],"source_content_type":"text/x-python","patch_set":14,"id":"e2306bfa_03f7423d","line":107,"range":{"start_line":107,"start_character":4,"end_line":107,"end_character":57},"updated":"2021-01-21 16:43:42.000000000","message":"Now you have \"_extend_port_resource_request_bulk\", you wipe this method calling the bulk one with one single element. We\u0027ll need to maintain one single method.","commit_id":"0f5cabfcf22f651ac48ba9520db23c63131b89af"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"03e208d77e86e290f0f26da4fcdf7946df1ff23b","unresolved":true,"context_lines":[{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    @staticmethod"},{"line_number":106,"context_line":"    @resource_extend.extends([port_def.COLLECTION_NAME])"},{"line_number":107,"context_line":"    def _extend_port_resource_request(port_res, port_db):"},{"line_number":108,"context_line":"        \"\"\"Add resource request to a port.\"\"\""},{"line_number":109,"context_line":"        if isinstance(port_db, ports_object.Port):"},{"line_number":110,"context_line":"            qos_id \u003d port_db.qos_policy_id or port_db.qos_network_policy_id"}],"source_content_type":"text/x-python","patch_set":14,"id":"25e9fdc1_4f77a380","line":107,"range":{"start_line":107,"start_character":4,"end_line":107,"end_character":57},"in_reply_to":"e2306bfa_03f7423d","updated":"2021-01-22 05:41:52.000000000","message":"The logic is a bit different in bulk and non-bulk methods so I\u0027d like to keep both. Also this one is called with a port DB as the second arg, while bulk one has only ports_res list. IMO putting everything in one method will only complicate logic.","commit_id":"0f5cabfcf22f651ac48ba9520db23c63131b89af"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"ec5326843c724b96d0dc2ff086d0a02b9bc8e332","unresolved":true,"context_lines":[{"line_number":119,"context_line":"        if not qos_id:"},{"line_number":120,"context_line":"            return port_res"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"        if port_res.get(\u0027bulk\u0027):"},{"line_number":123,"context_line":"            port_res[\u0027resource_request\u0027] \u003d {"},{"line_number":124,"context_line":"                \u0027qos_id\u0027: qos_id,"},{"line_number":125,"context_line":"                \u0027network_id\u0027: port_db.network_id,"},{"line_number":126,"context_line":"                \u0027vnic_type\u0027: port_res[portbindings.VNIC_TYPE]}"},{"line_number":127,"context_line":"            return port_res"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"        min_bw_rules \u003d rule_object.QosMinimumBandwidthRule.get_objects("},{"line_number":130,"context_line":"            context.get_admin_context(), qos_policy_id\u003dqos_id)"}],"source_content_type":"text/x-python","patch_set":14,"id":"3bfe3d73_0dc108bf","line":127,"range":{"start_line":122,"start_character":8,"end_line":127,"end_character":27},"updated":"2021-01-21 16:43:42.000000000","message":"I don\u0027t understand this section. Why are we adding this info to the \"resource_request\" extended attribute? Nova is expecting [1] \"required\" and \"resources\".\n\n[1]https://github.com/openstack/nova/blob/34c5df7b2b8c7eebbfc8aa0bc3edba501dddcb61/nova/objects/request_spec.py#L1113-L1129","commit_id":"0f5cabfcf22f651ac48ba9520db23c63131b89af"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"0b213e79a73a1504e89d33283738e726906a84e1","unresolved":true,"context_lines":[{"line_number":119,"context_line":"        if not qos_id:"},{"line_number":120,"context_line":"            return port_res"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"        if port_res.get(\u0027bulk\u0027):"},{"line_number":123,"context_line":"            port_res[\u0027resource_request\u0027] \u003d {"},{"line_number":124,"context_line":"                \u0027qos_id\u0027: qos_id,"},{"line_number":125,"context_line":"                \u0027network_id\u0027: port_db.network_id,"},{"line_number":126,"context_line":"                \u0027vnic_type\u0027: port_res[portbindings.VNIC_TYPE]}"},{"line_number":127,"context_line":"            return port_res"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"        min_bw_rules \u003d rule_object.QosMinimumBandwidthRule.get_objects("},{"line_number":130,"context_line":"            context.get_admin_context(), qos_policy_id\u003dqos_id)"}],"source_content_type":"text/x-python","patch_set":14,"id":"d4c636d9_b6480a1b","line":127,"range":{"start_line":122,"start_character":8,"end_line":127,"end_character":27},"in_reply_to":"1db774f4_02bc0289","updated":"2021-01-22 16:16:26.000000000","message":"Right [1], now I see better the code. We are \"overloading\" the use case of this variable.\n\n[1]https://review.opendev.org/c/openstack/neutron/+/763777","commit_id":"0f5cabfcf22f651ac48ba9520db23c63131b89af"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"03e208d77e86e290f0f26da4fcdf7946df1ff23b","unresolved":true,"context_lines":[{"line_number":119,"context_line":"        if not qos_id:"},{"line_number":120,"context_line":"            return port_res"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"        if port_res.get(\u0027bulk\u0027):"},{"line_number":123,"context_line":"            port_res[\u0027resource_request\u0027] \u003d {"},{"line_number":124,"context_line":"                \u0027qos_id\u0027: qos_id,"},{"line_number":125,"context_line":"                \u0027network_id\u0027: port_db.network_id,"},{"line_number":126,"context_line":"                \u0027vnic_type\u0027: port_res[portbindings.VNIC_TYPE]}"},{"line_number":127,"context_line":"            return port_res"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"        min_bw_rules \u003d rule_object.QosMinimumBandwidthRule.get_objects("},{"line_number":130,"context_line":"            context.get_admin_context(), qos_policy_id\u003dqos_id)"}],"source_content_type":"text/x-python","patch_set":14,"id":"1db774f4_02bc0289","line":127,"range":{"start_line":122,"start_character":8,"end_line":127,"end_character":27},"in_reply_to":"3bfe3d73_0dc108bf","updated":"2021-01-22 05:41:52.000000000","message":"Right, but here \"if\" at #122 means we\u0027re in the middle of a bulk request and 124-126 is just a serving info for the bulk extender that we know will be called in the end. Bulk extender will pop all this info (190, 194, 195) and put \"required\" and \"resources\" as expected by nova.\n\nThis serving info is placed under \"resource_request\" because we need to make sure it won\u0027t be filtered according to \"fields\" parameter in _make_port_dict: https://github.com/openstack/neutron/blob/ba77ec3c1921780f5ac08be7d8ce784051a7db89/neutron/db/db_base_plugin_common.py#L260 - before bulk extender even get called: https://github.com/openstack/neutron/blob/ba77ec3c1921780f5ac08be7d8ce784051a7db89/neutron/db/db_base_plugin_v2.py#L1566","commit_id":"0f5cabfcf22f651ac48ba9520db23c63131b89af"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"5f9f13671a46559791c1ae552f08a0ecb1acdb8a","unresolved":true,"context_lines":[{"line_number":119,"context_line":"        if not qos_id:"},{"line_number":120,"context_line":"            return port_res"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"        if port_res.get(\u0027bulk\u0027):"},{"line_number":123,"context_line":"            port_res[\u0027resource_request\u0027] \u003d {"},{"line_number":124,"context_line":"                \u0027qos_id\u0027: qos_id,"},{"line_number":125,"context_line":"                \u0027network_id\u0027: port_db.network_id,"},{"line_number":126,"context_line":"                \u0027vnic_type\u0027: port_res[portbindings.VNIC_TYPE]}"},{"line_number":127,"context_line":"            return port_res"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"        min_bw_rules \u003d rule_object.QosMinimumBandwidthRule.get_objects("},{"line_number":130,"context_line":"            context.get_admin_context(), qos_policy_id\u003dqos_id)"}],"source_content_type":"text/x-python","patch_set":14,"id":"50f636ab_299daab0","line":127,"range":{"start_line":122,"start_character":8,"end_line":127,"end_character":27},"in_reply_to":"d4c636d9_b6480a1b","updated":"2021-01-25 14:17:47.000000000","message":"Yeah this part was something I read a few times before understanding what happens","commit_id":"0f5cabfcf22f651ac48ba9520db23c63131b89af"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"0b213e79a73a1504e89d33283738e726906a84e1","unresolved":true,"context_lines":[{"line_number":189,"context_line":"                continue"},{"line_number":190,"context_line":"            qos_id \u003d port_res[\u0027resource_request\u0027].pop(\u0027qos_id\u0027, None)"},{"line_number":191,"context_line":"            if not qos_id:"},{"line_number":192,"context_line":"                continue"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"            net_id \u003d port_res[\u0027resource_request\u0027].pop(\u0027network_id\u0027)"},{"line_number":195,"context_line":"            vnic_type \u003d port_res[\u0027resource_request\u0027].pop(\u0027vnic_type\u0027)"}],"source_content_type":"text/x-python","patch_set":14,"id":"9654e943_41505352","line":192,"range":{"start_line":192,"start_character":16,"end_line":192,"end_character":24},"updated":"2021-01-22 16:16:26.000000000","message":"If \"resource_request\" was populated in L123, you should also remove \"network_id\" and \"vnic_type\". You cannot return this dictionary in \"resource_request\" at this point, it should be \"None\".\n\nActually I would pop everything in port_res[\u0027resource_request\u0027].\n\n  resource_request \u003d port_res.pop(\u0027resource_request\u0027, None)\n  port_res[\u0027resource_request\u0027] \u003d None\n  ...","commit_id":"0f5cabfcf22f651ac48ba9520db23c63131b89af"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"e86d4dbad84a8b2cc31b8569a6dba59b292c6b83","unresolved":true,"context_lines":[{"line_number":189,"context_line":"                continue"},{"line_number":190,"context_line":"            qos_id \u003d port_res[\u0027resource_request\u0027].pop(\u0027qos_id\u0027, None)"},{"line_number":191,"context_line":"            if not qos_id:"},{"line_number":192,"context_line":"                continue"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"            net_id \u003d port_res[\u0027resource_request\u0027].pop(\u0027network_id\u0027)"},{"line_number":195,"context_line":"            vnic_type \u003d port_res[\u0027resource_request\u0027].pop(\u0027vnic_type\u0027)"}],"source_content_type":"text/x-python","patch_set":14,"id":"2bd13450_dc068c81","line":192,"range":{"start_line":192,"start_character":16,"end_line":192,"end_character":24},"in_reply_to":"9654e943_41505352","updated":"2021-01-25 08:14:19.000000000","message":"If qos_id is None we\u0027d return at #120, but I agree better cleanup everything here in case code around #120 changes","commit_id":"0f5cabfcf22f651ac48ba9520db23c63131b89af"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"ec5326843c724b96d0dc2ff086d0a02b9bc8e332","unresolved":true,"context_lines":[{"line_number":194,"context_line":"            net_id \u003d port_res[\u0027resource_request\u0027].pop(\u0027network_id\u0027)"},{"line_number":195,"context_line":"            vnic_type \u003d port_res[\u0027resource_request\u0027].pop(\u0027vnic_type\u0027)"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"            if qos_id not in min_bw_rules:"},{"line_number":198,"context_line":"                rules \u003d rule_object.QosMinimumBandwidthRule.get_objects("},{"line_number":199,"context_line":"                    context.get_admin_context(), qos_policy_id\u003dqos_id)"},{"line_number":200,"context_line":"                min_bw_rules[qos_id] \u003d rules"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"            resources \u003d QoSPlugin._get_resources(min_bw_rules[qos_id])"},{"line_number":203,"context_line":"            if not resources:"}],"source_content_type":"text/x-python","patch_set":14,"id":"1e73cc9e_e9daee5e","line":200,"range":{"start_line":197,"start_character":12,"end_line":200,"end_character":44},"updated":"2021-01-21 16:43:42.000000000","message":"+1","commit_id":"0f5cabfcf22f651ac48ba9520db23c63131b89af"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"ec5326843c724b96d0dc2ff086d0a02b9bc8e332","unresolved":true,"context_lines":[{"line_number":203,"context_line":"            if not resources:"},{"line_number":204,"context_line":"                continue"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"            if net_id not in net_segments:"},{"line_number":207,"context_line":"                segments \u003d network_object.NetworkSegment.get_objects("},{"line_number":208,"context_line":"                    context.get_admin_context(),"},{"line_number":209,"context_line":"                    network_id\u003dnet_id)"},{"line_number":210,"context_line":"                net_segments[net_id] \u003d segments"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"            traits \u003d QoSPlugin._get_traits(vnic_type, net_segments[net_id])"},{"line_number":213,"context_line":"            if not traits:"}],"source_content_type":"text/x-python","patch_set":14,"id":"62ab9f1d_03155fef","line":210,"range":{"start_line":206,"start_character":12,"end_line":210,"end_character":47},"updated":"2021-01-21 16:43:42.000000000","message":"+1","commit_id":"0f5cabfcf22f651ac48ba9520db23c63131b89af"}]}
