)]}'
{"doc/source/admin/config-qos.rst":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"2838824404ff95a2e16f711b7f4e9844f30f5ad4","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":5,"id":"5c4455ad_9c7244fc","side":"PARENT","updated":"2021-08-11 10:37:00.000000000","message":"You should also update this file.","commit_id":"2356f0eb874b01d4bab696e49e0286de51554f35"},{"author":{"_account_id":33652,"name":"Przemyslaw Szczerbik","email":"przemyslaw.szczerbik@gmail.com","username":"pszczerbik"},"change_message_id":"93c3cb038f527595c613239f84f6ae0ea16408c3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"6090f1be_8a739fb3","side":"PARENT","in_reply_to":"5c4455ad_9c7244fc","updated":"2021-08-13 14:39:12.000000000","message":"My intention was to update this file when I enable support for QoS min pps rule in OVS. I\u0027ll add as much information as I can for now, and the rest will be added in subsequent patches.","commit_id":"2356f0eb874b01d4bab696e49e0286de51554f35"}],"lower-constraints.txt":[{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"864df32d65889588bbd42e859bda05cdd6ab620b","unresolved":true,"context_lines":[{"line_number":50,"context_line":"munch\u003d\u003d2.1.0"},{"line_number":51,"context_line":"netaddr\u003d\u003d0.7.18"},{"line_number":52,"context_line":"netifaces\u003d\u003d0.10.4"},{"line_number":53,"context_line":"neutron-lib\u003d\u003d2.14.0"},{"line_number":54,"context_line":"openstacksdk\u003d\u003d0.31.2"},{"line_number":55,"context_line":"os-client-config\u003d\u003d1.28.0"},{"line_number":56,"context_line":"os-ken\u003d\u003d2.0.0"}],"source_content_type":"text/plain","patch_set":10,"id":"0932b1ac_1e717a69","line":53,"range":{"start_line":53,"start_character":13,"end_line":53,"end_character":19},"updated":"2021-08-30 16:22:06.000000000","message":"this can be 2.15.0 now","commit_id":"5807ddd7672e493abac399ebd7ebb321b72261a8"},{"author":{"_account_id":33652,"name":"Przemyslaw Szczerbik","email":"przemyslaw.szczerbik@gmail.com","username":"pszczerbik"},"change_message_id":"e74c6d595311c5da0943ff3571afe7ca996a1dbb","unresolved":false,"context_lines":[{"line_number":50,"context_line":"munch\u003d\u003d2.1.0"},{"line_number":51,"context_line":"netaddr\u003d\u003d0.7.18"},{"line_number":52,"context_line":"netifaces\u003d\u003d0.10.4"},{"line_number":53,"context_line":"neutron-lib\u003d\u003d2.14.0"},{"line_number":54,"context_line":"openstacksdk\u003d\u003d0.31.2"},{"line_number":55,"context_line":"os-client-config\u003d\u003d1.28.0"},{"line_number":56,"context_line":"os-ken\u003d\u003d2.0.0"}],"source_content_type":"text/plain","patch_set":10,"id":"b8715d60_86b7606f","line":53,"range":{"start_line":53,"start_character":13,"end_line":53,"end_character":19},"in_reply_to":"0932b1ac_1e717a69","updated":"2021-08-31 09:58:21.000000000","message":"Done","commit_id":"5807ddd7672e493abac399ebd7ebb321b72261a8"}],"neutron/api/v2/resource_helper.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"eaf4fb6599def38458464694259639c2dbe1fbc4","unresolved":true,"context_lines":[{"line_number":79,"context_line":"    for collection_name in resource_map:"},{"line_number":80,"context_line":"        resource_name \u003d plural_mappings[collection_name]"},{"line_number":81,"context_line":"        params \u003d resource_map.get(collection_name, {})"},{"line_number":82,"context_line":"        # If SUB_RESOURCE_ATTRIBUTE_MAP was passed in as a resource_map, we"},{"line_number":83,"context_line":"        # need special handling for it. SUB_RESOURCE_ATTRIBUTE_MAP must have"},{"line_number":84,"context_line":"        # a \u0027parent\u0027 and \u0027parameters\u0027 keys. \u0027parameters\u0027 key is going to"},{"line_number":85,"context_line":"        # contain sub-resources that are being extended."}],"source_content_type":"text/x-python","patch_set":8,"id":"b8e89e3d_a5611c78","line":82,"range":{"start_line":82,"start_character":8,"end_line":82,"end_character":75},"updated":"2021-08-20 14:34:50.000000000","message":"+1","commit_id":"fa330aa01990a6739b09312260a26f9a9e9bf672"}],"neutron/conf/policies/qos.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"2838824404ff95a2e16f711b7f4e9844f30f5ad4","unresolved":true,"context_lines":[{"line_number":359,"context_line":"                         \u0027minimum_packet_rate_rules/{rule_id}\u0027),"},{"line_number":360,"context_line":"            },"},{"line_number":361,"context_line":"        ],"},{"line_number":362,"context_line":"        deprecated_rule\u003dpolicy.DeprecatedRule("},{"line_number":363,"context_line":"            name\u003d\u0027get_policy_minimum_packet_rate_rule\u0027,"},{"line_number":364,"context_line":"            check_str\u003dbase.RULE_ANY,"},{"line_number":365,"context_line":"            deprecated_reason\u003dDEPRECATED_REASON,"},{"line_number":366,"context_line":"            deprecated_since\u003dversionutils.deprecated.XENA)"},{"line_number":367,"context_line":"    ),"},{"line_number":368,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":369,"context_line":"        name\u003d\u0027create_policy_minimum_packet_rate_rule\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"5c64b761_648e56e0","line":366,"range":{"start_line":362,"start_character":0,"end_line":366,"end_character":58},"updated":"2021-08-11 10:37:00.000000000","message":"We didn\u0027t have this rule before. This deprecation message is not correct and should be removed.","commit_id":"b8d6ea39591ee6adacdb6f5af46e1c400612de32"},{"author":{"_account_id":33652,"name":"Przemyslaw Szczerbik","email":"przemyslaw.szczerbik@gmail.com","username":"pszczerbik"},"change_message_id":"93c3cb038f527595c613239f84f6ae0ea16408c3","unresolved":false,"context_lines":[{"line_number":359,"context_line":"                         \u0027minimum_packet_rate_rules/{rule_id}\u0027),"},{"line_number":360,"context_line":"            },"},{"line_number":361,"context_line":"        ],"},{"line_number":362,"context_line":"        deprecated_rule\u003dpolicy.DeprecatedRule("},{"line_number":363,"context_line":"            name\u003d\u0027get_policy_minimum_packet_rate_rule\u0027,"},{"line_number":364,"context_line":"            check_str\u003dbase.RULE_ANY,"},{"line_number":365,"context_line":"            deprecated_reason\u003dDEPRECATED_REASON,"},{"line_number":366,"context_line":"            deprecated_since\u003dversionutils.deprecated.XENA)"},{"line_number":367,"context_line":"    ),"},{"line_number":368,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":369,"context_line":"        name\u003d\u0027create_policy_minimum_packet_rate_rule\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"adc2938f_862741ef","line":366,"range":{"start_line":362,"start_character":0,"end_line":366,"end_character":58},"in_reply_to":"5c64b761_648e56e0","updated":"2021-08-13 14:39:12.000000000","message":"It\u0027s true that we didn\u0027t have this rule before, but the intention is to use new-style API (QoS rule alias). It was decided that QoS rule alias is going to be added later, in a separate patch. I suppose it\u0027s more appropriate to mark this API as deprecated when alias is added.","commit_id":"b8d6ea39591ee6adacdb6f5af46e1c400612de32"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"2838824404ff95a2e16f711b7f4e9844f30f5ad4","unresolved":true,"context_lines":[{"line_number":376,"context_line":"                \u0027path\u0027: \u0027/qos/policies/{policy_id}/minimum_packet_rate_rules\u0027,"},{"line_number":377,"context_line":"            },"},{"line_number":378,"context_line":"        ],"},{"line_number":379,"context_line":"        deprecated_rule\u003dpolicy.DeprecatedRule("},{"line_number":380,"context_line":"            name\u003d\u0027create_policy_minimum_packet_rate_rule\u0027,"},{"line_number":381,"context_line":"            check_str\u003dbase.RULE_ADMIN_ONLY,"},{"line_number":382,"context_line":"            deprecated_reason\u003dDEPRECATED_REASON,"}],"source_content_type":"text/x-python","patch_set":5,"id":"b6c49883_ea8c7e6c","line":379,"range":{"start_line":379,"start_character":31,"end_line":379,"end_character":45},"updated":"2021-08-11 10:37:00.000000000","message":"ditto","commit_id":"b8d6ea39591ee6adacdb6f5af46e1c400612de32"},{"author":{"_account_id":33652,"name":"Przemyslaw Szczerbik","email":"przemyslaw.szczerbik@gmail.com","username":"pszczerbik"},"change_message_id":"93c3cb038f527595c613239f84f6ae0ea16408c3","unresolved":false,"context_lines":[{"line_number":376,"context_line":"                \u0027path\u0027: \u0027/qos/policies/{policy_id}/minimum_packet_rate_rules\u0027,"},{"line_number":377,"context_line":"            },"},{"line_number":378,"context_line":"        ],"},{"line_number":379,"context_line":"        deprecated_rule\u003dpolicy.DeprecatedRule("},{"line_number":380,"context_line":"            name\u003d\u0027create_policy_minimum_packet_rate_rule\u0027,"},{"line_number":381,"context_line":"            check_str\u003dbase.RULE_ADMIN_ONLY,"},{"line_number":382,"context_line":"            deprecated_reason\u003dDEPRECATED_REASON,"}],"source_content_type":"text/x-python","patch_set":5,"id":"28afda89_db6bf8bd","line":379,"range":{"start_line":379,"start_character":31,"end_line":379,"end_character":45},"in_reply_to":"b6c49883_ea8c7e6c","updated":"2021-08-13 14:39:12.000000000","message":"Done","commit_id":"b8d6ea39591ee6adacdb6f5af46e1c400612de32"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"2838824404ff95a2e16f711b7f4e9844f30f5ad4","unresolved":true,"context_lines":[{"line_number":394,"context_line":"                         \u0027minimum_packet_rate_rules/{rule_id}\u0027),"},{"line_number":395,"context_line":"            },"},{"line_number":396,"context_line":"        ],"},{"line_number":397,"context_line":"        deprecated_rule\u003dpolicy.DeprecatedRule("},{"line_number":398,"context_line":"            name\u003d\u0027update_policy_minimum_packet_rate_rule\u0027,"},{"line_number":399,"context_line":"            check_str\u003dbase.RULE_ADMIN_ONLY,"},{"line_number":400,"context_line":"            deprecated_reason\u003dDEPRECATED_REASON,"}],"source_content_type":"text/x-python","patch_set":5,"id":"39eae54c_d904e76a","line":397,"range":{"start_line":397,"start_character":31,"end_line":397,"end_character":45},"updated":"2021-08-11 10:37:00.000000000","message":"ditto","commit_id":"b8d6ea39591ee6adacdb6f5af46e1c400612de32"},{"author":{"_account_id":33652,"name":"Przemyslaw Szczerbik","email":"przemyslaw.szczerbik@gmail.com","username":"pszczerbik"},"change_message_id":"93c3cb038f527595c613239f84f6ae0ea16408c3","unresolved":false,"context_lines":[{"line_number":394,"context_line":"                         \u0027minimum_packet_rate_rules/{rule_id}\u0027),"},{"line_number":395,"context_line":"            },"},{"line_number":396,"context_line":"        ],"},{"line_number":397,"context_line":"        deprecated_rule\u003dpolicy.DeprecatedRule("},{"line_number":398,"context_line":"            name\u003d\u0027update_policy_minimum_packet_rate_rule\u0027,"},{"line_number":399,"context_line":"            check_str\u003dbase.RULE_ADMIN_ONLY,"},{"line_number":400,"context_line":"            deprecated_reason\u003dDEPRECATED_REASON,"}],"source_content_type":"text/x-python","patch_set":5,"id":"a9975192_d7960821","line":397,"range":{"start_line":397,"start_character":31,"end_line":397,"end_character":45},"in_reply_to":"39eae54c_d904e76a","updated":"2021-08-13 14:39:12.000000000","message":"Done","commit_id":"b8d6ea39591ee6adacdb6f5af46e1c400612de32"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"2838824404ff95a2e16f711b7f4e9844f30f5ad4","unresolved":true,"context_lines":[{"line_number":412,"context_line":"                         \u0027minimum_packet_rate_rules/{rule_id}\u0027),"},{"line_number":413,"context_line":"            },"},{"line_number":414,"context_line":"        ],"},{"line_number":415,"context_line":"        deprecated_rule\u003dpolicy.DeprecatedRule("},{"line_number":416,"context_line":"            name\u003d\u0027delete_policy_minimum_packet_rate_rule\u0027,"},{"line_number":417,"context_line":"            check_str\u003dbase.RULE_ADMIN_ONLY,"},{"line_number":418,"context_line":"            deprecated_reason\u003dDEPRECATED_REASON,"}],"source_content_type":"text/x-python","patch_set":5,"id":"a39c2e36_9b48d266","line":415,"range":{"start_line":415,"start_character":31,"end_line":415,"end_character":45},"updated":"2021-08-11 10:37:00.000000000","message":"ditto","commit_id":"b8d6ea39591ee6adacdb6f5af46e1c400612de32"},{"author":{"_account_id":33652,"name":"Przemyslaw Szczerbik","email":"przemyslaw.szczerbik@gmail.com","username":"pszczerbik"},"change_message_id":"93c3cb038f527595c613239f84f6ae0ea16408c3","unresolved":false,"context_lines":[{"line_number":412,"context_line":"                         \u0027minimum_packet_rate_rules/{rule_id}\u0027),"},{"line_number":413,"context_line":"            },"},{"line_number":414,"context_line":"        ],"},{"line_number":415,"context_line":"        deprecated_rule\u003dpolicy.DeprecatedRule("},{"line_number":416,"context_line":"            name\u003d\u0027delete_policy_minimum_packet_rate_rule\u0027,"},{"line_number":417,"context_line":"            check_str\u003dbase.RULE_ADMIN_ONLY,"},{"line_number":418,"context_line":"            deprecated_reason\u003dDEPRECATED_REASON,"}],"source_content_type":"text/x-python","patch_set":5,"id":"0ff6a9cf_dfcadd88","line":415,"range":{"start_line":415,"start_character":31,"end_line":415,"end_character":45},"in_reply_to":"a39c2e36_9b48d266","updated":"2021-08-13 14:39:12.000000000","message":"Done","commit_id":"b8d6ea39591ee6adacdb6f5af46e1c400612de32"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"864df32d65889588bbd42e859bda05cdd6ab620b","unresolved":true,"context_lines":[{"line_number":344,"context_line":"            deprecated_since\u003dversionutils.deprecated.WALLABY)"},{"line_number":345,"context_line":"    ),"},{"line_number":346,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":347,"context_line":"        name\u003d\u0027get_policy_minimum_packet_rate_rule\u0027,"},{"line_number":348,"context_line":"        check_str\u003dbase.SYSTEM_OR_PROJECT_READER,"},{"line_number":349,"context_line":"        scope_types\u003d[\u0027system\u0027, \u0027project\u0027],"},{"line_number":350,"context_line":"        description\u003d\u0027Get a QoS minimum packet rate rule\u0027,"},{"line_number":351,"context_line":"        operations\u003d["},{"line_number":352,"context_line":"            {"},{"line_number":353,"context_line":"                \u0027method\u0027: \u0027GET\u0027,"},{"line_number":354,"context_line":"                \u0027path\u0027: \u0027/qos/policies/{policy_id}/minimum_packet_rate_rules\u0027,"},{"line_number":355,"context_line":"            },"},{"line_number":356,"context_line":"            {"},{"line_number":357,"context_line":"                \u0027method\u0027: \u0027GET\u0027,"},{"line_number":358,"context_line":"                \u0027path\u0027: (\u0027/qos/policies/{policy_id}/\u0027"},{"line_number":359,"context_line":"                         \u0027minimum_packet_rate_rules/{rule_id}\u0027),"},{"line_number":360,"context_line":"            },"},{"line_number":361,"context_line":"        ],"},{"line_number":362,"context_line":"    ),"},{"line_number":363,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":364,"context_line":"        name\u003d\u0027create_policy_minimum_packet_rate_rule\u0027,"},{"line_number":365,"context_line":"        check_str\u003dbase.SYSTEM_ADMIN,"},{"line_number":366,"context_line":"        scope_types\u003d[\u0027system\u0027],"},{"line_number":367,"context_line":"        description\u003d\u0027Create a QoS minimum packet rate rule\u0027,"},{"line_number":368,"context_line":"        operations\u003d["},{"line_number":369,"context_line":"            {"},{"line_number":370,"context_line":"                \u0027method\u0027: \u0027POST\u0027,"},{"line_number":371,"context_line":"                \u0027path\u0027: \u0027/qos/policies/{policy_id}/minimum_packet_rate_rules\u0027,"},{"line_number":372,"context_line":"            },"},{"line_number":373,"context_line":"        ],"},{"line_number":374,"context_line":"    ),"},{"line_number":375,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":376,"context_line":"        name\u003d\u0027update_policy_minimum_packet_rate_rule\u0027,"},{"line_number":377,"context_line":"        check_str\u003dbase.SYSTEM_ADMIN,"},{"line_number":378,"context_line":"        scope_types\u003d[\u0027system\u0027],"},{"line_number":379,"context_line":"        description\u003d\u0027Update a QoS minimum packet rate rule\u0027,"},{"line_number":380,"context_line":"        operations\u003d["},{"line_number":381,"context_line":"            {"},{"line_number":382,"context_line":"                \u0027method\u0027: \u0027PUT\u0027,"},{"line_number":383,"context_line":"                \u0027path\u0027: (\u0027/qos/policies/{policy_id}/\u0027"},{"line_number":384,"context_line":"                         \u0027minimum_packet_rate_rules/{rule_id}\u0027),"},{"line_number":385,"context_line":"            },"},{"line_number":386,"context_line":"        ],"},{"line_number":387,"context_line":"    ),"},{"line_number":388,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":389,"context_line":"        name\u003d\u0027delete_policy_minimum_packet_rate_rule\u0027,"},{"line_number":390,"context_line":"        check_str\u003dbase.SYSTEM_ADMIN,"},{"line_number":391,"context_line":"        scope_types\u003d[\u0027system\u0027],"},{"line_number":392,"context_line":"        description\u003d\u0027Delete a QoS minimum packet rate rule\u0027,"},{"line_number":393,"context_line":"        operations\u003d["},{"line_number":394,"context_line":"            {"},{"line_number":395,"context_line":"                \u0027method\u0027: \u0027DELETE\u0027,"},{"line_number":396,"context_line":"                \u0027path\u0027: (\u0027/qos/policies/{policy_id}/\u0027"},{"line_number":397,"context_line":"                         \u0027minimum_packet_rate_rules/{rule_id}\u0027),"},{"line_number":398,"context_line":"            },"},{"line_number":399,"context_line":"        ],"},{"line_number":400,"context_line":"    ),"},{"line_number":401,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":402,"context_line":"        name\u003d\u0027get_alias_bandwidth_limit_rule\u0027,"},{"line_number":403,"context_line":"        check_str\u003d\u0027rule:get_policy_bandwidth_limit_rule\u0027,"},{"line_number":404,"context_line":"        description\u003d\u0027Get a QoS bandwidth limit rule through alias\u0027,"}],"source_content_type":"text/x-python","patch_set":10,"id":"0f4cb7db_eb3b84eb","line":401,"range":{"start_line":347,"start_character":1,"end_line":401,"end_character":33},"updated":"2021-08-30 16:22:06.000000000","message":"+1","commit_id":"5807ddd7672e493abac399ebd7ebb321b72261a8"}],"neutron/constants.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"2838824404ff95a2e16f711b7f4e9844f30f5ad4","unresolved":true,"context_lines":[{"line_number":20,"context_line":"# Zuul and check pipeline fails because it\u0027s missing necessary dependencies"},{"line_number":21,"context_line":"# from n-lib. Any comments related to this part of implementation shall be"},{"line_number":22,"context_line":"# raised in n-lib review."},{"line_number":23,"context_line":"ANY_DIRECTION \u003d \u0027any\u0027"},{"line_number":24,"context_line":"VALID_DIRECTIONS_AND_ANY \u003d (ANY_DIRECTION, *n_consts.VALID_DIRECTIONS)"}],"source_content_type":"text/x-python","patch_set":5,"id":"e5027da8_e1f66a42","line":23,"range":{"start_line":23,"start_character":0,"end_line":23,"end_character":13},"updated":"2021-08-11 10:37:00.000000000","message":"This is in neutron-lib 2.13.0. You should bump n-lib constraint (in lower-constraints.txt and requirements.txt).","commit_id":"b8d6ea39591ee6adacdb6f5af46e1c400612de32"},{"author":{"_account_id":33652,"name":"Przemyslaw Szczerbik","email":"przemyslaw.szczerbik@gmail.com","username":"pszczerbik"},"change_message_id":"93c3cb038f527595c613239f84f6ae0ea16408c3","unresolved":true,"context_lines":[{"line_number":20,"context_line":"# Zuul and check pipeline fails because it\u0027s missing necessary dependencies"},{"line_number":21,"context_line":"# from n-lib. Any comments related to this part of implementation shall be"},{"line_number":22,"context_line":"# raised in n-lib review."},{"line_number":23,"context_line":"ANY_DIRECTION \u003d \u0027any\u0027"},{"line_number":24,"context_line":"VALID_DIRECTIONS_AND_ANY \u003d (ANY_DIRECTION, *n_consts.VALID_DIRECTIONS)"}],"source_content_type":"text/x-python","patch_set":5,"id":"764ad2b2_af350117","line":23,"range":{"start_line":23,"start_character":0,"end_line":23,"end_character":13},"in_reply_to":"e5027da8_e1f66a42","updated":"2021-08-13 14:39:12.000000000","message":"My commit chain has multiple dependencies on n-lib changes. Since there\u0027ll be a new release of n-lib next week, it would be easier to wait for it and remove all unnecessary changes from the whole chain at once.","commit_id":"b8d6ea39591ee6adacdb6f5af46e1c400612de32"}],"neutron/db/migration/alembic_migrations/versions/xena/expand/c181bb1d89e4_qos_minimum_packet_rate_rules.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"2838824404ff95a2e16f711b7f4e9844f30f5ad4","unresolved":true,"context_lines":[{"line_number":41,"context_line":"        sa.Column(\u0027qos_policy_id\u0027, sa.String(db_const.UUID_FIELD_SIZE),"},{"line_number":42,"context_line":"                  sa.ForeignKey(\u0027qos_policies.id\u0027, ondelete\u003d\u0027CASCADE\u0027),"},{"line_number":43,"context_line":"                  nullable\u003dFalse, index\u003dTrue),"},{"line_number":44,"context_line":"        sa.Column(\u0027min_kpps\u0027, sa.Integer()),"},{"line_number":45,"context_line":"        sa.Column(\u0027direction\u0027,"},{"line_number":46,"context_line":"                  sa.Enum(*constants.VALID_DIRECTIONS_AND_ANY,"},{"line_number":47,"context_line":"                          name\u003d\"qos_minimum_packet_rate_rules_directions\"),"}],"source_content_type":"text/x-python","patch_set":5,"id":"f48ce676_caf2dfef","line":44,"range":{"start_line":44,"start_character":40,"end_line":44,"end_character":44},"updated":"2021-08-11 10:37:00.000000000","message":"This parameter should be \"nullable\u003dFalse\"","commit_id":"b8d6ea39591ee6adacdb6f5af46e1c400612de32"},{"author":{"_account_id":33652,"name":"Przemyslaw Szczerbik","email":"przemyslaw.szczerbik@gmail.com","username":"pszczerbik"},"change_message_id":"93c3cb038f527595c613239f84f6ae0ea16408c3","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        sa.Column(\u0027qos_policy_id\u0027, sa.String(db_const.UUID_FIELD_SIZE),"},{"line_number":42,"context_line":"                  sa.ForeignKey(\u0027qos_policies.id\u0027, ondelete\u003d\u0027CASCADE\u0027),"},{"line_number":43,"context_line":"                  nullable\u003dFalse, index\u003dTrue),"},{"line_number":44,"context_line":"        sa.Column(\u0027min_kpps\u0027, sa.Integer()),"},{"line_number":45,"context_line":"        sa.Column(\u0027direction\u0027,"},{"line_number":46,"context_line":"                  sa.Enum(*constants.VALID_DIRECTIONS_AND_ANY,"},{"line_number":47,"context_line":"                          name\u003d\"qos_minimum_packet_rate_rules_directions\"),"}],"source_content_type":"text/x-python","patch_set":5,"id":"39389ab9_1c69e95f","line":44,"range":{"start_line":44,"start_character":40,"end_line":44,"end_character":44},"in_reply_to":"f48ce676_caf2dfef","updated":"2021-08-13 14:39:12.000000000","message":"Done","commit_id":"b8d6ea39591ee6adacdb6f5af46e1c400612de32"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"2838824404ff95a2e16f711b7f4e9844f30f5ad4","unresolved":true,"context_lines":[{"line_number":46,"context_line":"                  sa.Enum(*constants.VALID_DIRECTIONS_AND_ANY,"},{"line_number":47,"context_line":"                          name\u003d\"qos_minimum_packet_rate_rules_directions\"),"},{"line_number":48,"context_line":"                  nullable\u003dFalse,"},{"line_number":49,"context_line":"                  server_default\u003dNone),"},{"line_number":50,"context_line":"        sa.UniqueConstraint(\u0027qos_policy_id\u0027, \u0027direction\u0027,"},{"line_number":51,"context_line":"            name\u003d\u0027qos_minimum_packet_rate_rules0qos_policy_id0direction\u0027)"},{"line_number":52,"context_line":"    )"}],"source_content_type":"text/x-python","patch_set":5,"id":"32dd781a_bfa5d17e","line":49,"range":{"start_line":49,"start_character":33,"end_line":49,"end_character":37},"updated":"2021-08-11 10:37:00.000000000","message":"This cannot be None. Valid directions are \"ingress\", \"egress\" and \"any\".\n\nWe usually set \"server_default\u003dconstants.EGRESS_DIRECTION\".","commit_id":"b8d6ea39591ee6adacdb6f5af46e1c400612de32"},{"author":{"_account_id":33652,"name":"Przemyslaw Szczerbik","email":"przemyslaw.szczerbik@gmail.com","username":"pszczerbik"},"change_message_id":"93c3cb038f527595c613239f84f6ae0ea16408c3","unresolved":false,"context_lines":[{"line_number":46,"context_line":"                  sa.Enum(*constants.VALID_DIRECTIONS_AND_ANY,"},{"line_number":47,"context_line":"                          name\u003d\"qos_minimum_packet_rate_rules_directions\"),"},{"line_number":48,"context_line":"                  nullable\u003dFalse,"},{"line_number":49,"context_line":"                  server_default\u003dNone),"},{"line_number":50,"context_line":"        sa.UniqueConstraint(\u0027qos_policy_id\u0027, \u0027direction\u0027,"},{"line_number":51,"context_line":"            name\u003d\u0027qos_minimum_packet_rate_rules0qos_policy_id0direction\u0027)"},{"line_number":52,"context_line":"    )"}],"source_content_type":"text/x-python","patch_set":5,"id":"e2848629_3d02d5a0","line":49,"range":{"start_line":49,"start_character":33,"end_line":49,"end_character":37},"in_reply_to":"32dd781a_bfa5d17e","updated":"2021-08-13 14:39:12.000000000","message":"Done","commit_id":"b8d6ea39591ee6adacdb6f5af46e1c400612de32"}],"neutron/db/qos/models.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"2838824404ff95a2e16f711b7f4e9844f30f5ad4","unresolved":true,"context_lines":[{"line_number":226,"context_line":"    qos_policy_id \u003d sa.Column(sa.String(db_const.UUID_FIELD_SIZE),"},{"line_number":227,"context_line":"                              sa.ForeignKey(\u0027qos_policies.id\u0027,"},{"line_number":228,"context_line":"                                            ondelete\u003d\u0027CASCADE\u0027),"},{"line_number":229,"context_line":"                              nullable\u003dFalse,"},{"line_number":230,"context_line":"                              index\u003dTrue)"},{"line_number":231,"context_line":"    min_kpps \u003d sa.Column(sa.Integer)"},{"line_number":232,"context_line":"    direction \u003d sa.Column("}],"source_content_type":"text/x-python","patch_set":5,"id":"4c543606_60a32f48","line":229,"range":{"start_line":229,"start_character":30,"end_line":229,"end_character":45},"updated":"2021-08-11 10:37:00.000000000","message":"Not needed, all indexes are by default not nullable.","commit_id":"b8d6ea39591ee6adacdb6f5af46e1c400612de32"},{"author":{"_account_id":33652,"name":"Przemyslaw Szczerbik","email":"przemyslaw.szczerbik@gmail.com","username":"pszczerbik"},"change_message_id":"93c3cb038f527595c613239f84f6ae0ea16408c3","unresolved":false,"context_lines":[{"line_number":226,"context_line":"    qos_policy_id \u003d sa.Column(sa.String(db_const.UUID_FIELD_SIZE),"},{"line_number":227,"context_line":"                              sa.ForeignKey(\u0027qos_policies.id\u0027,"},{"line_number":228,"context_line":"                                            ondelete\u003d\u0027CASCADE\u0027),"},{"line_number":229,"context_line":"                              nullable\u003dFalse,"},{"line_number":230,"context_line":"                              index\u003dTrue)"},{"line_number":231,"context_line":"    min_kpps \u003d sa.Column(sa.Integer)"},{"line_number":232,"context_line":"    direction \u003d sa.Column("}],"source_content_type":"text/x-python","patch_set":5,"id":"1fe55f04_29da173f","line":229,"range":{"start_line":229,"start_character":30,"end_line":229,"end_character":45},"in_reply_to":"4c543606_60a32f48","updated":"2021-08-13 14:39:12.000000000","message":"Done","commit_id":"b8d6ea39591ee6adacdb6f5af46e1c400612de32"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"2838824404ff95a2e16f711b7f4e9844f30f5ad4","unresolved":true,"context_lines":[{"line_number":228,"context_line":"                                            ondelete\u003d\u0027CASCADE\u0027),"},{"line_number":229,"context_line":"                              nullable\u003dFalse,"},{"line_number":230,"context_line":"                              index\u003dTrue)"},{"line_number":231,"context_line":"    min_kpps \u003d sa.Column(sa.Integer)"},{"line_number":232,"context_line":"    direction \u003d sa.Column("},{"line_number":233,"context_line":"        sa.Enum(*neutron_constants.VALID_DIRECTIONS_AND_ANY,"},{"line_number":234,"context_line":"                name\u003d\u0027qos_minimum_packet_rate_rules_directions\u0027),"}],"source_content_type":"text/x-python","patch_set":5,"id":"8b768da9_b94a93f6","line":231,"range":{"start_line":231,"start_character":4,"end_line":231,"end_character":36},"updated":"2021-08-11 10:37:00.000000000","message":"nullable\u003dFalse","commit_id":"b8d6ea39591ee6adacdb6f5af46e1c400612de32"},{"author":{"_account_id":33652,"name":"Przemyslaw Szczerbik","email":"przemyslaw.szczerbik@gmail.com","username":"pszczerbik"},"change_message_id":"93c3cb038f527595c613239f84f6ae0ea16408c3","unresolved":false,"context_lines":[{"line_number":228,"context_line":"                                            ondelete\u003d\u0027CASCADE\u0027),"},{"line_number":229,"context_line":"                              nullable\u003dFalse,"},{"line_number":230,"context_line":"                              index\u003dTrue)"},{"line_number":231,"context_line":"    min_kpps \u003d sa.Column(sa.Integer)"},{"line_number":232,"context_line":"    direction \u003d sa.Column("},{"line_number":233,"context_line":"        sa.Enum(*neutron_constants.VALID_DIRECTIONS_AND_ANY,"},{"line_number":234,"context_line":"                name\u003d\u0027qos_minimum_packet_rate_rules_directions\u0027),"}],"source_content_type":"text/x-python","patch_set":5,"id":"a3ed989c_1150d059","line":231,"range":{"start_line":231,"start_character":4,"end_line":231,"end_character":36},"in_reply_to":"8b768da9_b94a93f6","updated":"2021-08-13 14:39:12.000000000","message":"Done","commit_id":"b8d6ea39591ee6adacdb6f5af46e1c400612de32"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"2838824404ff95a2e16f711b7f4e9844f30f5ad4","unresolved":true,"context_lines":[{"line_number":233,"context_line":"        sa.Enum(*neutron_constants.VALID_DIRECTIONS_AND_ANY,"},{"line_number":234,"context_line":"                name\u003d\u0027qos_minimum_packet_rate_rules_directions\u0027),"},{"line_number":235,"context_line":"        nullable\u003dFalse,"},{"line_number":236,"context_line":"        server_default\u003dNone)"},{"line_number":237,"context_line":"    revises_on_change \u003d (\u0027qos_policy\u0027, )"},{"line_number":238,"context_line":"    qos_policy \u003d sa.orm.relationship(QosPolicy, load_on_pending\u003dTrue)"},{"line_number":239,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"aa7e1821_1df118ad","line":236,"range":{"start_line":236,"start_character":8,"end_line":236,"end_character":27},"updated":"2021-08-11 10:37:00.000000000","message":"1) As commented, this should be a value of \"VALID_DIRECTIONS_AND_ANY\". By default \"egress\".\n2) You should add \"default\u003dconstants.EGRESS_DIRECTION\". This is the python model, not the DB model.","commit_id":"b8d6ea39591ee6adacdb6f5af46e1c400612de32"},{"author":{"_account_id":33652,"name":"Przemyslaw Szczerbik","email":"przemyslaw.szczerbik@gmail.com","username":"pszczerbik"},"change_message_id":"93c3cb038f527595c613239f84f6ae0ea16408c3","unresolved":true,"context_lines":[{"line_number":233,"context_line":"        sa.Enum(*neutron_constants.VALID_DIRECTIONS_AND_ANY,"},{"line_number":234,"context_line":"                name\u003d\u0027qos_minimum_packet_rate_rules_directions\u0027),"},{"line_number":235,"context_line":"        nullable\u003dFalse,"},{"line_number":236,"context_line":"        server_default\u003dNone)"},{"line_number":237,"context_line":"    revises_on_change \u003d (\u0027qos_policy\u0027, )"},{"line_number":238,"context_line":"    qos_policy \u003d sa.orm.relationship(QosPolicy, load_on_pending\u003dTrue)"},{"line_number":239,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"c3ce1d6d_251d7433","line":236,"range":{"start_line":236,"start_character":8,"end_line":236,"end_character":27},"in_reply_to":"aa7e1821_1df118ad","updated":"2021-08-13 14:39:12.000000000","message":"What about api-def? Do we need to add a default value there too?","commit_id":"b8d6ea39591ee6adacdb6f5af46e1c400612de32"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"eaf4fb6599def38458464694259639c2dbe1fbc4","unresolved":true,"context_lines":[{"line_number":233,"context_line":"        sa.Enum(*neutron_constants.VALID_DIRECTIONS_AND_ANY,"},{"line_number":234,"context_line":"                name\u003d\u0027qos_minimum_packet_rate_rules_directions\u0027),"},{"line_number":235,"context_line":"        nullable\u003dFalse,"},{"line_number":236,"context_line":"        server_default\u003dNone)"},{"line_number":237,"context_line":"    revises_on_change \u003d (\u0027qos_policy\u0027, )"},{"line_number":238,"context_line":"    qos_policy \u003d sa.orm.relationship(QosPolicy, load_on_pending\u003dTrue)"},{"line_number":239,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"888e4c48_94d36be1","line":236,"range":{"start_line":236,"start_character":8,"end_line":236,"end_character":27},"in_reply_to":"c3ce1d6d_251d7433","updated":"2021-08-20 14:34:50.000000000","message":"You are right, the API should be changed. I\u0027ll push a patch ASAP.\n\nhttps://review.opendev.org/c/openstack/neutron-lib/+/805395","commit_id":"b8d6ea39591ee6adacdb6f5af46e1c400612de32"}],"neutron/extensions/qos_pps_minimum_rule.py":[{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"d5d0c2fd6c6cb3bdac8e7ff25bf001404895489b","unresolved":true,"context_lines":[{"line_number":54,"context_line":"        # for new API extensions. At the very least, let\u0027s prevent invalid"},{"line_number":55,"context_line":"        # POST /qos/minimum_packet_rate_rules/{rule_id}/ request that would"},{"line_number":56,"context_line":"        # fail with internal server error. To do that, we need to create a"},{"line_number":57,"context_line":"        # separate controller."},{"line_number":58,"context_line":"        qos_policy_api_params \u003d apidef.SUB_RESOURCE_ATTRIBUTE_MAP["},{"line_number":59,"context_line":"            apidef.COLLECTION_NAME][\u0027parameters\u0027]"},{"line_number":60,"context_line":"        qos_alias_api_params \u003d copy.deepcopy(qos_policy_api_params)"}],"source_content_type":"text/x-python","patch_set":2,"id":"73bb18e1_633b1107","line":57,"updated":"2021-08-03 09:57:45.000000000","message":"hmm, in that case let\u0027s maybe modify it a bit and do in the same way as we have for other rules with 2 different APIs styles","commit_id":"200c03aec2305ee1410c5aee11efaefb3f3b3d30"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"487e257751b7686326865ca4aa5ef0bc6cc37ff6","unresolved":true,"context_lines":[{"line_number":54,"context_line":"        # for new API extensions. At the very least, let\u0027s prevent invalid"},{"line_number":55,"context_line":"        # POST /qos/minimum_packet_rate_rules/{rule_id}/ request that would"},{"line_number":56,"context_line":"        # fail with internal server error. To do that, we need to create a"},{"line_number":57,"context_line":"        # separate controller."},{"line_number":58,"context_line":"        qos_policy_api_params \u003d apidef.SUB_RESOURCE_ATTRIBUTE_MAP["},{"line_number":59,"context_line":"            apidef.COLLECTION_NAME][\u0027parameters\u0027]"},{"line_number":60,"context_line":"        qos_alias_api_params \u003d copy.deepcopy(qos_policy_api_params)"}],"source_content_type":"text/x-python","patch_set":2,"id":"cc8acd42_69c9db3a","line":57,"in_reply_to":"30508608_63162d17","updated":"2021-08-03 12:15:56.000000000","message":"Nothing against it. When the design settles we can update the spec to reflect reality.","commit_id":"200c03aec2305ee1410c5aee11efaefb3f3b3d30"},{"author":{"_account_id":33652,"name":"Przemyslaw Szczerbik","email":"przemyslaw.szczerbik@gmail.com","username":"pszczerbik"},"change_message_id":"277c9981b62280fd3260960cebc3d47fd1664f56","unresolved":true,"context_lines":[{"line_number":54,"context_line":"        # for new API extensions. At the very least, let\u0027s prevent invalid"},{"line_number":55,"context_line":"        # POST /qos/minimum_packet_rate_rules/{rule_id}/ request that would"},{"line_number":56,"context_line":"        # fail with internal server error. To do that, we need to create a"},{"line_number":57,"context_line":"        # separate controller."},{"line_number":58,"context_line":"        qos_policy_api_params \u003d apidef.SUB_RESOURCE_ATTRIBUTE_MAP["},{"line_number":59,"context_line":"            apidef.COLLECTION_NAME][\u0027parameters\u0027]"},{"line_number":60,"context_line":"        qos_alias_api_params \u003d copy.deepcopy(qos_policy_api_params)"}],"source_content_type":"text/x-python","patch_set":2,"id":"30508608_63162d17","line":57,"in_reply_to":"73bb18e1_633b1107","updated":"2021-08-03 10:07:37.000000000","message":"Agreed. In this patch I\u0027ll leave API with policy_id, and later on we can add an alias for it.\n@Gibi, do you have anything against this approach?","commit_id":"200c03aec2305ee1410c5aee11efaefb3f3b3d30"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"2838824404ff95a2e16f711b7f4e9844f30f5ad4","unresolved":true,"context_lines":[{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    @classmethod"},{"line_number":29,"context_line":"    def get_resources(cls):"},{"line_number":30,"context_line":"        plugin \u003d directory.get_plugin(constants.QOS)"},{"line_number":31,"context_line":"        parent \u003d apidef.SUB_RESOURCE_ATTRIBUTE_MAP["},{"line_number":32,"context_line":"            apidef.COLLECTION_NAME][\u0027parent\u0027]"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"        params \u003d apidef.SUB_RESOURCE_ATTRIBUTE_MAP["},{"line_number":35,"context_line":"            apidef.COLLECTION_NAME][\u0027parameters\u0027]"},{"line_number":36,"context_line":"        controller \u003d base.create_resource("},{"line_number":37,"context_line":"            apidef.COLLECTION_NAME,"},{"line_number":38,"context_line":"            apidef.RESOURCE_NAME,"},{"line_number":39,"context_line":"            plugin,"},{"line_number":40,"context_line":"            params,"},{"line_number":41,"context_line":"            parent\u003dparent,"},{"line_number":42,"context_line":"            allow_pagination\u003dTrue,"},{"line_number":43,"context_line":"            allow_sorting\u003dTrue)"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"        return ["},{"line_number":46,"context_line":"            extensions.ResourceExtension("},{"line_number":47,"context_line":"                apidef.COLLECTION_NAME,"},{"line_number":48,"context_line":"                controller,"},{"line_number":49,"context_line":"                parent,"},{"line_number":50,"context_line":"                attr_map\u003dparams),"},{"line_number":51,"context_line":"        ]"}],"source_content_type":"text/x-python","patch_set":5,"id":"e5f7f650_43e84a15","line":51,"range":{"start_line":30,"start_character":0,"end_line":51,"end_character":9},"updated":"2021-08-11 10:37:00.000000000","message":"This could be done calling to api.v2.resource_helper.build_resource_info().\n\nIf we have a method for it, better use it.","commit_id":"b8d6ea39591ee6adacdb6f5af46e1c400612de32"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"eaf4fb6599def38458464694259639c2dbe1fbc4","unresolved":true,"context_lines":[{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    @classmethod"},{"line_number":29,"context_line":"    def get_resources(cls):"},{"line_number":30,"context_line":"        plugin \u003d directory.get_plugin(constants.QOS)"},{"line_number":31,"context_line":"        parent \u003d apidef.SUB_RESOURCE_ATTRIBUTE_MAP["},{"line_number":32,"context_line":"            apidef.COLLECTION_NAME][\u0027parent\u0027]"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"        params \u003d apidef.SUB_RESOURCE_ATTRIBUTE_MAP["},{"line_number":35,"context_line":"            apidef.COLLECTION_NAME][\u0027parameters\u0027]"},{"line_number":36,"context_line":"        controller \u003d base.create_resource("},{"line_number":37,"context_line":"            apidef.COLLECTION_NAME,"},{"line_number":38,"context_line":"            apidef.RESOURCE_NAME,"},{"line_number":39,"context_line":"            plugin,"},{"line_number":40,"context_line":"            params,"},{"line_number":41,"context_line":"            parent\u003dparent,"},{"line_number":42,"context_line":"            allow_pagination\u003dTrue,"},{"line_number":43,"context_line":"            allow_sorting\u003dTrue)"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"        return ["},{"line_number":46,"context_line":"            extensions.ResourceExtension("},{"line_number":47,"context_line":"                apidef.COLLECTION_NAME,"},{"line_number":48,"context_line":"                controller,"},{"line_number":49,"context_line":"                parent,"},{"line_number":50,"context_line":"                attr_map\u003dparams),"},{"line_number":51,"context_line":"        ]"}],"source_content_type":"text/x-python","patch_set":5,"id":"f629cfad_44d0fded","line":51,"range":{"start_line":30,"start_character":0,"end_line":51,"end_character":9},"in_reply_to":"df0f5dc4_6e36c42f","updated":"2021-08-20 14:34:50.000000000","message":"+1","commit_id":"b8d6ea39591ee6adacdb6f5af46e1c400612de32"},{"author":{"_account_id":33652,"name":"Przemyslaw Szczerbik","email":"przemyslaw.szczerbik@gmail.com","username":"pszczerbik"},"change_message_id":"93c3cb038f527595c613239f84f6ae0ea16408c3","unresolved":true,"context_lines":[{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    @classmethod"},{"line_number":29,"context_line":"    def get_resources(cls):"},{"line_number":30,"context_line":"        plugin \u003d directory.get_plugin(constants.QOS)"},{"line_number":31,"context_line":"        parent \u003d apidef.SUB_RESOURCE_ATTRIBUTE_MAP["},{"line_number":32,"context_line":"            apidef.COLLECTION_NAME][\u0027parent\u0027]"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"        params \u003d apidef.SUB_RESOURCE_ATTRIBUTE_MAP["},{"line_number":35,"context_line":"            apidef.COLLECTION_NAME][\u0027parameters\u0027]"},{"line_number":36,"context_line":"        controller \u003d base.create_resource("},{"line_number":37,"context_line":"            apidef.COLLECTION_NAME,"},{"line_number":38,"context_line":"            apidef.RESOURCE_NAME,"},{"line_number":39,"context_line":"            plugin,"},{"line_number":40,"context_line":"            params,"},{"line_number":41,"context_line":"            parent\u003dparent,"},{"line_number":42,"context_line":"            allow_pagination\u003dTrue,"},{"line_number":43,"context_line":"            allow_sorting\u003dTrue)"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"        return ["},{"line_number":46,"context_line":"            extensions.ResourceExtension("},{"line_number":47,"context_line":"                apidef.COLLECTION_NAME,"},{"line_number":48,"context_line":"                controller,"},{"line_number":49,"context_line":"                parent,"},{"line_number":50,"context_line":"                attr_map\u003dparams),"},{"line_number":51,"context_line":"        ]"}],"source_content_type":"text/x-python","patch_set":5,"id":"df0f5dc4_6e36c42f","line":51,"range":{"start_line":30,"start_character":0,"end_line":51,"end_character":9},"in_reply_to":"e5f7f650_43e84a15","updated":"2021-08-13 14:39:12.000000000","message":"Done, but I had to slightly modify implementation of build_resource_info() function. It didn\u0027t work with sub-resources out-of-the-box.","commit_id":"b8d6ea39591ee6adacdb6f5af46e1c400612de32"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"864df32d65889588bbd42e859bda05cdd6ab620b","unresolved":true,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from neutron.api.v2 import resource_helper"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"# TODO(przszc): Delete this when"},{"line_number":24,"context_line":"# https://review.opendev.org/c/openstack/neutron-lib/+/805395 is released"},{"line_number":25,"context_line":"(apidef.SUB_RESOURCE_ATTRIBUTE_MAP[apidef.COLLECTION_NAME][\u0027parameters\u0027]"},{"line_number":26,"context_line":"    [qos_constants.DIRECTION][\u0027default\u0027]) \u003d nl_const.EGRESS_DIRECTION"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"class Qos_pps_minimum_rule(api_extensions.APIExtensionDescriptor):"}],"source_content_type":"text/x-python","patch_set":10,"id":"b18a7e22_a3016c25","line":26,"range":{"start_line":23,"start_character":0,"end_line":26,"end_character":69},"updated":"2021-08-30 16:22:06.000000000","message":"It is included in 2.15.0 and released","commit_id":"5807ddd7672e493abac399ebd7ebb321b72261a8"},{"author":{"_account_id":33652,"name":"Przemyslaw Szczerbik","email":"przemyslaw.szczerbik@gmail.com","username":"pszczerbik"},"change_message_id":"e74c6d595311c5da0943ff3571afe7ca996a1dbb","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from neutron.api.v2 import resource_helper"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"# TODO(przszc): Delete this when"},{"line_number":24,"context_line":"# https://review.opendev.org/c/openstack/neutron-lib/+/805395 is released"},{"line_number":25,"context_line":"(apidef.SUB_RESOURCE_ATTRIBUTE_MAP[apidef.COLLECTION_NAME][\u0027parameters\u0027]"},{"line_number":26,"context_line":"    [qos_constants.DIRECTION][\u0027default\u0027]) \u003d nl_const.EGRESS_DIRECTION"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"class Qos_pps_minimum_rule(api_extensions.APIExtensionDescriptor):"}],"source_content_type":"text/x-python","patch_set":10,"id":"5113282b_7c2c23fd","line":26,"range":{"start_line":23,"start_character":0,"end_line":26,"end_character":69},"in_reply_to":"b18a7e22_a3016c25","updated":"2021-08-31 09:58:21.000000000","message":"Done","commit_id":"5807ddd7672e493abac399ebd7ebb321b72261a8"}],"neutron/objects/qos/qos_policy_validator.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ce1ca57469b146ab2e694b421507eccc15f240c1","unresolved":true,"context_lines":[{"line_number":90,"context_line":"                # TODO(przszc): Clarify what HTTP error should be returned in"},{"line_number":91,"context_line":"                # this case. QoS min pps spec says request should be rejected"},{"line_number":92,"context_line":"                # with 400 error, but in the case of QoS min bandwidth rule"},{"line_number":93,"context_line":"                # we\u0027re returning 409 conflict."},{"line_number":94,"context_line":"                raise qos_exc.QoSRuleParameterConflict("},{"line_number":95,"context_line":"                    rule_value\u003drule_data[\"direction\"],"},{"line_number":96,"context_line":"                    policy_id\u003dpolicy[\"id\"],"}],"source_content_type":"text/x-python","patch_set":2,"id":"fe00b9e1_eea14cc3","line":93,"updated":"2021-08-02 12:32:51.000000000","message":"I would go for the symmetry and use 409 if bandwidth qos use that code. We can always amend the spec to be in sync","commit_id":"200c03aec2305ee1410c5aee11efaefb3f3b3d30"},{"author":{"_account_id":33652,"name":"Przemyslaw Szczerbik","email":"przemyslaw.szczerbik@gmail.com","username":"pszczerbik"},"change_message_id":"647961bbea184c4604767f1f5878e45731917478","unresolved":false,"context_lines":[{"line_number":90,"context_line":"                # TODO(przszc): Clarify what HTTP error should be returned in"},{"line_number":91,"context_line":"                # this case. QoS min pps spec says request should be rejected"},{"line_number":92,"context_line":"                # with 400 error, but in the case of QoS min bandwidth rule"},{"line_number":93,"context_line":"                # we\u0027re returning 409 conflict."},{"line_number":94,"context_line":"                raise qos_exc.QoSRuleParameterConflict("},{"line_number":95,"context_line":"                    rule_value\u003drule_data[\"direction\"],"},{"line_number":96,"context_line":"                    policy_id\u003dpolicy[\"id\"],"}],"source_content_type":"text/x-python","patch_set":2,"id":"ad395e67_2bb06760","line":93,"in_reply_to":"fe00b9e1_eea14cc3","updated":"2021-08-03 13:17:00.000000000","message":"Done","commit_id":"200c03aec2305ee1410c5aee11efaefb3f3b3d30"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"2838824404ff95a2e16f711b7f4e9844f30f5ad4","unresolved":true,"context_lines":[{"line_number":94,"context_line":"                      rule.direction in n_consts.VALID_DIRECTIONS) or"},{"line_number":95,"context_line":"                     (rule_obj.direction in n_consts.VALID_DIRECTIONS and"},{"line_number":96,"context_line":"                      rule.direction \u003d\u003d constants.ANY_DIRECTION)):"},{"line_number":97,"context_line":"                raise qos_exc.QoSRuleParameterConflict("},{"line_number":98,"context_line":"                    rule_value\u003drule_obj.direction,"},{"line_number":99,"context_line":"                    policy_id\u003dpolicy[\"id\"],"},{"line_number":100,"context_line":"                    existing_rule\u003drule.rule_type,"}],"source_content_type":"text/x-python","patch_set":5,"id":"77feabf0_5440815a","line":97,"range":{"start_line":97,"start_character":30,"end_line":97,"end_character":54},"updated":"2021-08-11 10:37:00.000000000","message":"just an opinion: I don\u0027t know if this message will be explicit enough to inform about this specific conflict we can have with this qos rule type.","commit_id":"b8d6ea39591ee6adacdb6f5af46e1c400612de32"},{"author":{"_account_id":33652,"name":"Przemyslaw Szczerbik","email":"przemyslaw.szczerbik@gmail.com","username":"pszczerbik"},"change_message_id":"93c3cb038f527595c613239f84f6ae0ea16408c3","unresolved":true,"context_lines":[{"line_number":94,"context_line":"                      rule.direction in n_consts.VALID_DIRECTIONS) or"},{"line_number":95,"context_line":"                     (rule_obj.direction in n_consts.VALID_DIRECTIONS and"},{"line_number":96,"context_line":"                      rule.direction \u003d\u003d constants.ANY_DIRECTION)):"},{"line_number":97,"context_line":"                raise qos_exc.QoSRuleParameterConflict("},{"line_number":98,"context_line":"                    rule_value\u003drule_obj.direction,"},{"line_number":99,"context_line":"                    policy_id\u003dpolicy[\"id\"],"},{"line_number":100,"context_line":"                    existing_rule\u003drule.rule_type,"}],"source_content_type":"text/x-python","patch_set":5,"id":"410b163a_1b9d2338","line":97,"range":{"start_line":97,"start_character":30,"end_line":97,"end_character":54},"in_reply_to":"77feabf0_5440815a","updated":"2021-08-13 14:39:12.000000000","message":"Let\u0027s see what others think about this. Personally, I think it\u0027s good enough. At the very least, QoSRuleParameterConflict\u0027s message was rephrased and no longer refers to bandwidth.\n\nhttps://review.opendev.org/c/openstack/neutron-lib/+/804210","commit_id":"b8d6ea39591ee6adacdb6f5af46e1c400612de32"}],"neutron/objects/qos/rule.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"2838824404ff95a2e16f711b7f4e9844f30f5ad4","unresolved":true,"context_lines":[{"line_number":196,"context_line":"    db_model \u003d qos_db_model.QosMinimumPacketRateRule"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"    fields \u003d {"},{"line_number":199,"context_line":"        \u0027min_kpps\u0027: obj_fields.IntegerField(nullable\u003dTrue),"},{"line_number":200,"context_line":"        \u0027direction\u0027: neutron_common_types.FlowDirectionAndAnyEnumField(),"},{"line_number":201,"context_line":"    }"},{"line_number":202,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"587fae51_5630c2a7","line":199,"range":{"start_line":199,"start_character":44,"end_line":199,"end_character":52},"updated":"2021-08-11 10:37:00.000000000","message":"This is not nullable","commit_id":"b8d6ea39591ee6adacdb6f5af46e1c400612de32"},{"author":{"_account_id":33652,"name":"Przemyslaw Szczerbik","email":"przemyslaw.szczerbik@gmail.com","username":"pszczerbik"},"change_message_id":"93c3cb038f527595c613239f84f6ae0ea16408c3","unresolved":false,"context_lines":[{"line_number":196,"context_line":"    db_model \u003d qos_db_model.QosMinimumPacketRateRule"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"    fields \u003d {"},{"line_number":199,"context_line":"        \u0027min_kpps\u0027: obj_fields.IntegerField(nullable\u003dTrue),"},{"line_number":200,"context_line":"        \u0027direction\u0027: neutron_common_types.FlowDirectionAndAnyEnumField(),"},{"line_number":201,"context_line":"    }"},{"line_number":202,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"0fcabe10_34dafd21","line":199,"range":{"start_line":199,"start_character":44,"end_line":199,"end_character":52},"in_reply_to":"587fae51_5630c2a7","updated":"2021-08-13 14:39:12.000000000","message":"Done","commit_id":"b8d6ea39591ee6adacdb6f5af46e1c400612de32"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"864df32d65889588bbd42e859bda05cdd6ab620b","unresolved":true,"context_lines":[{"line_number":126,"context_line":"        if _target_version \u003c (1, 3):"},{"line_number":127,"context_line":"            raise exception.IncompatibleObjectVersion("},{"line_number":128,"context_line":"                objver\u003dtarget_version, objtype\u003dself.__class__.__name__)"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"@base.NeutronObjectRegistry.register"},{"line_number":132,"context_line":"class QosBandwidthLimitRule(QosRule):"}],"source_content_type":"text/x-python","patch_set":10,"id":"5d5b3c5c_78343518","line":129,"updated":"2021-08-30 16:22:06.000000000","message":"Question: Don\u0027t we need to add some compatibility check here?","commit_id":"5807ddd7672e493abac399ebd7ebb321b72261a8"},{"author":{"_account_id":33652,"name":"Przemyslaw Szczerbik","email":"przemyslaw.szczerbik@gmail.com","username":"pszczerbik"},"change_message_id":"e74c6d595311c5da0943ff3571afe7ca996a1dbb","unresolved":true,"context_lines":[{"line_number":126,"context_line":"        if _target_version \u003c (1, 3):"},{"line_number":127,"context_line":"            raise exception.IncompatibleObjectVersion("},{"line_number":128,"context_line":"                objver\u003dtarget_version, objtype\u003dself.__class__.__name__)"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"@base.NeutronObjectRegistry.register"},{"line_number":132,"context_line":"class QosBandwidthLimitRule(QosRule):"}],"source_content_type":"text/x-python","patch_set":10,"id":"e3826695_66234c13","line":129,"in_reply_to":"5d5b3c5c_78343518","updated":"2021-08-31 09:58:21.000000000","message":"I don\u0027t think it\u0027s necessary and it wasn\u0027t added for QosPacketRateLimitRule either.\nWe have compatibility check in QosPolicy OVO.","commit_id":"5807ddd7672e493abac399ebd7ebb321b72261a8"}]}
