)]}'
{"api-ref/source/v2/samples/qos/packet_rate_limit_rule-create-request.json":[{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"2ea2488e018468998de9dd2905d5d87a57b9133c","unresolved":true,"context_lines":[{"line_number":1,"context_line":"{"},{"line_number":2,"context_line":"    \"minimum_bandwidth_rule\": {"},{"line_number":3,"context_line":"        \"max_kpps\": \"10000\","},{"line_number":4,"context_line":"        \"max_burst_kpps\": \"10000\""},{"line_number":5,"context_line":"    }"}],"source_content_type":"application/json","patch_set":4,"id":"3dbf95cb_360ffcfa","line":2,"range":{"start_line":2,"start_character":5,"end_line":2,"end_character":22},"updated":"2021-05-21 14:04:17.000000000","message":"rate_limit?","commit_id":"7a92e1b2c659ae691e3f1b33935fd7669cd90e0b"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"8e7a61f91bedd3376d3fd328e0b0b73f5e824ce5","unresolved":false,"context_lines":[{"line_number":1,"context_line":"{"},{"line_number":2,"context_line":"    \"minimum_bandwidth_rule\": {"},{"line_number":3,"context_line":"        \"max_kpps\": \"10000\","},{"line_number":4,"context_line":"        \"max_burst_kpps\": \"10000\""},{"line_number":5,"context_line":"    }"}],"source_content_type":"application/json","patch_set":4,"id":"57078482_0c83d22a","line":2,"range":{"start_line":2,"start_character":5,"end_line":2,"end_character":22},"in_reply_to":"3dbf95cb_360ffcfa","updated":"2021-05-24 02:56:25.000000000","message":"Done","commit_id":"7a92e1b2c659ae691e3f1b33935fd7669cd90e0b"}],"api-ref/source/v2/samples/qos/packet_rate_limit_rule-create-response.json":[{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"2ea2488e018468998de9dd2905d5d87a57b9133c","unresolved":true,"context_lines":[{"line_number":1,"context_line":"{"},{"line_number":2,"context_line":"    \"minimum_bandwidth_rule\": {"},{"line_number":3,"context_line":"        \"id\": \"1eddf7af-0b4c-42c5-8ae1-390b32f1de08\","},{"line_number":4,"context_line":"        \"max_kpps\": 10000,"},{"line_number":5,"context_line":"        \"max_burst_kpps\": 10000,"}],"source_content_type":"application/json","patch_set":4,"id":"7bda1ddb_f4001765","line":2,"range":{"start_line":2,"start_character":5,"end_line":2,"end_character":22},"updated":"2021-05-21 14:04:17.000000000","message":"ditto and in other files","commit_id":"7a92e1b2c659ae691e3f1b33935fd7669cd90e0b"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"8e7a61f91bedd3376d3fd328e0b0b73f5e824ce5","unresolved":false,"context_lines":[{"line_number":1,"context_line":"{"},{"line_number":2,"context_line":"    \"minimum_bandwidth_rule\": {"},{"line_number":3,"context_line":"        \"id\": \"1eddf7af-0b4c-42c5-8ae1-390b32f1de08\","},{"line_number":4,"context_line":"        \"max_kpps\": 10000,"},{"line_number":5,"context_line":"        \"max_burst_kpps\": 10000,"}],"source_content_type":"application/json","patch_set":4,"id":"aa1d5667_9c7525f2","line":2,"range":{"start_line":2,"start_character":5,"end_line":2,"end_character":22},"in_reply_to":"7bda1ddb_f4001765","updated":"2021-05-24 02:56:25.000000000","message":"Done","commit_id":"7a92e1b2c659ae691e3f1b33935fd7669cd90e0b"}],"neutron_lib/api/definitions/qos_pps_rule.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"87973270dedb982d047597613864e6220049a2ff","unresolved":true,"context_lines":[{"line_number":31,"context_line":"UPDATED_TIMESTAMP \u003d \u00272021-05-12T10:00:00-00:00\u0027"},{"line_number":32,"context_line":"RESOURCE_ATTRIBUTE_MAP \u003d {}"},{"line_number":33,"context_line":"PACKET_RATE_LIMIT_RULES \u003d \u0027packet_rate_limit_rules\u0027"},{"line_number":34,"context_line":"SUB_RES_ATTR_MAP \u003d copy.deepcopy("},{"line_number":35,"context_line":"    qos_apidef.SUB_RESOURCE_ATTRIBUTE_MAP)"},{"line_number":36,"context_line":"SUB_RES_ATTR_MAP.update({"},{"line_number":37,"context_line":"    PACKET_RATE_LIMIT_RULES: {"},{"line_number":38,"context_line":"        \u0027parent\u0027: qos_apidef._PARENT,"}],"source_content_type":"text/x-python","patch_set":3,"id":"27fb5e2e_5fd59c87","line":35,"range":{"start_line":34,"start_character":0,"end_line":35,"end_character":42},"updated":"2021-05-12 11:28:19.000000000","message":"I don\u0027t think we need to create a copy but modify the original one:\n\nSUB_RESOURCE_ATTRIBUTE_MAP \u003d qos_apidef.SUB_RESOURCE_ATTRIBUTE_MAP\nSUB_RESOURCE_ATTRIBUTE_MAP[PACKET_RATE_LIMIT_RULES] \u003d {...}","commit_id":"12707e8c8134f977b4ce2ac02bc0881b8d9ae974"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"1f85f81cf1303eff50e3249bf4c9c3645b35d13d","unresolved":true,"context_lines":[{"line_number":31,"context_line":"UPDATED_TIMESTAMP \u003d \u00272021-05-12T10:00:00-00:00\u0027"},{"line_number":32,"context_line":"RESOURCE_ATTRIBUTE_MAP \u003d {}"},{"line_number":33,"context_line":"PACKET_RATE_LIMIT_RULES \u003d \u0027packet_rate_limit_rules\u0027"},{"line_number":34,"context_line":"SUB_RES_ATTR_MAP \u003d copy.deepcopy("},{"line_number":35,"context_line":"    qos_apidef.SUB_RESOURCE_ATTRIBUTE_MAP)"},{"line_number":36,"context_line":"SUB_RES_ATTR_MAP.update({"},{"line_number":37,"context_line":"    PACKET_RATE_LIMIT_RULES: {"},{"line_number":38,"context_line":"        \u0027parent\u0027: qos_apidef._PARENT,"}],"source_content_type":"text/x-python","patch_set":3,"id":"e504121f_ec7ae123","line":35,"range":{"start_line":34,"start_character":0,"end_line":35,"end_character":42},"in_reply_to":"27fb5e2e_5fd59c87","updated":"2021-05-12 19:56:48.000000000","message":"+1","commit_id":"12707e8c8134f977b4ce2ac02bc0881b8d9ae974"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"2693c11f15909bba760e6dc267bf38c62c4eeb9f","unresolved":true,"context_lines":[{"line_number":31,"context_line":"UPDATED_TIMESTAMP \u003d \u00272021-05-12T10:00:00-00:00\u0027"},{"line_number":32,"context_line":"RESOURCE_ATTRIBUTE_MAP \u003d {}"},{"line_number":33,"context_line":"PACKET_RATE_LIMIT_RULES \u003d \u0027packet_rate_limit_rules\u0027"},{"line_number":34,"context_line":"SUB_RES_ATTR_MAP \u003d copy.deepcopy("},{"line_number":35,"context_line":"    qos_apidef.SUB_RESOURCE_ATTRIBUTE_MAP)"},{"line_number":36,"context_line":"SUB_RES_ATTR_MAP.update({"},{"line_number":37,"context_line":"    PACKET_RATE_LIMIT_RULES: {"},{"line_number":38,"context_line":"        \u0027parent\u0027: qos_apidef._PARENT,"}],"source_content_type":"text/x-python","patch_set":3,"id":"f55a8f59_e3b73b9b","line":35,"range":{"start_line":34,"start_character":0,"end_line":35,"end_character":42},"in_reply_to":"e504121f_ec7ae123","updated":"2021-05-13 01:09:49.000000000","message":"That can not work, a \"\u003d\" in python means quote, not copy. So here you add new attribute to the MAP, the qos SUB_RESOURCE_ATTRIBUTE_MAP will also get changed. And the unit test qos extension cases exactly shows that behavior:\n\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\nFailed 2 tests - output below:\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\nneutron_lib.tests.unit.api.definitions.test_qos.QoSDefinitionTestCase.test_subresource_map\n------------------------------------------------------------------------------------------\n\nCaptured traceback:\n~~~~~~~~~~~~~~~~~~~\n    Traceback (most recent call last):\n\n      File \"/home/yulong/github/neutron-lib/neutron_lib/tests/unit/api/definitions/base.py\", line 155, in test_subresource_map\n    self.assertIn(\n\n      File \"/home/yulong/github/neutron-lib/.tox/py38/lib/python3.8/site-packages/testtools/testcase.py\", line 421, in assertIn\n    self.assertThat(haystack, Contains(needle), message)\n\n      File \"/home/yulong/github/neutron-lib/.tox/py38/lib/python3.8/site-packages/testtools/testcase.py\", line 502, in assertThat\n    raise mismatch_error\n\n    testtools.matchers._impl.MismatchError: \u0027packet_rate_limit_rules\u0027 not in (\u0027bandwidth_limit_rules\u0027, \u0027dscp_marking_rules\u0027, \u0027minimum_bandwidth_rules\u0027, \u0027networks\u0027, \u0027ports\u0027, \u0027routers\u0027, \u0027subnets\u0027, \u0027subnetpools\u0027, \u0027security_groups\u0027): Sub-resource is unknown, check for typos.\n\n\nneutron_lib.tests.unit.api.definitions.test_qos_pps_rule.QoSPPSRuleDefinitionTestCase.test_subresource_map\n----------------------------------------------------------------------------------------------------------\n\nCaptured traceback:\n~~~~~~~~~~~~~~~~~~~\n    Traceback (most recent call last):\n\n      File \"/home/yulong/github/neutron-lib/neutron_lib/tests/unit/api/definitions/base.py\", line 166, in test_subresource_map\n    self.assertEqual(\n\n      File \"/home/yulong/github/neutron-lib/.tox/py38/lib/python3.8/site-packages/testtools/testcase.py\", line 415, in assertEqual\n    self.assertThat(observed, matcher, message)\n\n      File \"/home/yulong/github/neutron-lib/.tox/py38/lib/python3.8/site-packages/testtools/testcase.py\", line 502, in assertThat\n    raise mismatch_error\n\n    testtools.matchers._impl.MismatchError: [\u0027parameters\u0027] !\u003d [\u0027packet_rate_limit_rules\u0027]: When extending sub-resources only use the parameters keyword","commit_id":"12707e8c8134f977b4ce2ac02bc0881b8d9ae974"}],"neutron_lib/services/qos/constants.py":[{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"d248938a76e8ff3aa733896ab976888aa20e680a","unresolved":true,"context_lines":[{"line_number":16,"context_line":"RULE_TYPE_BANDWIDTH_LIMIT \u003d \u0027bandwidth_limit\u0027"},{"line_number":17,"context_line":"RULE_TYPE_DSCP_MARKING \u003d \u0027dscp_marking\u0027"},{"line_number":18,"context_line":"RULE_TYPE_MINIMUM_BANDWIDTH \u003d \u0027minimum_bandwidth\u0027"},{"line_number":19,"context_line":"RULE_TYPE_PACKET_RATE_LIMIT \u003d \u0027packet_rate_limit\u0027"},{"line_number":20,"context_line":"VALID_RULE_TYPES \u003d [RULE_TYPE_BANDWIDTH_LIMIT,"},{"line_number":21,"context_line":"                    RULE_TYPE_DSCP_MARKING,"},{"line_number":22,"context_line":"                    RULE_TYPE_MINIMUM_BANDWIDTH,"},{"line_number":23,"context_line":"                    RULE_TYPE_PACKET_RATE_LIMIT,"},{"line_number":24,"context_line":"                    ]"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"# Names of rules\u0027 attributes"}],"source_content_type":"text/x-python","patch_set":1,"id":"2627fcef_8a441cb7","line":23,"range":{"start_line":19,"start_character":0,"end_line":23,"end_character":48},"updated":"2021-05-12 10:17:10.000000000","message":"These work will be restored once neutron added the DB model/object `QosPacketRateLimitRule`.","commit_id":"d082e464a48a637639a78f72e8ffd13912cd7c12"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"afa5611c657cc3e0140e7770a3f5a23d44a0b3cd","unresolved":true,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"# Names of pps rules\u0027 attributes"},{"line_number":34,"context_line":"MAX_KPPS \u003d \"max_kpps\""},{"line_number":35,"context_line":"MAX_BURST_KPPS \u003d \"max_burst_kpps\""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"QOS_POLICY_ID \u003d \u0027qos_policy_id\u0027"},{"line_number":38,"context_line":"QOS_NETWORK_POLICY_ID \u003d \u0027qos_network_policy_id\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"d530ae1f_22733e71","line":35,"range":{"start_line":35,"start_character":28,"end_line":35,"end_character":32},"updated":"2021-05-12 07:15:03.000000000","message":"(do not change!!) we made an initial mistake with \"max_burst_kbps\" that should be \"max_burst_kbs\". Same here, this is KPS, not KPPS. But for consistency I would leave it.","commit_id":"d082e464a48a637639a78f72e8ffd13912cd7c12"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"dc7ee14da1ff684cbc1c942a7dfdc603d0b98171","unresolved":true,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"# Names of pps rules\u0027 attributes"},{"line_number":34,"context_line":"MAX_KPPS \u003d \"max_kpps\""},{"line_number":35,"context_line":"MAX_BURST_KPPS \u003d \"max_burst_kpps\""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"QOS_POLICY_ID \u003d \u0027qos_policy_id\u0027"},{"line_number":38,"context_line":"QOS_NETWORK_POLICY_ID \u003d \u0027qos_network_policy_id\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"643abfee_c0ff582a","line":35,"range":{"start_line":35,"start_character":28,"end_line":35,"end_character":32},"in_reply_to":"d530ae1f_22733e71","updated":"2021-05-12 08:56:07.000000000","message":"Alright, I got it. Let\u0027s see others\u0027 thoughts.","commit_id":"d082e464a48a637639a78f72e8ffd13912cd7c12"}],"releasenotes/notes/add_qos_pps_rule_api_def-dae7c6e67904781b.yaml":[{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"2ea2488e018468998de9dd2905d5d87a57b9133c","unresolved":true,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Adding new API extension for QoS service plugin to allow"},{"line_number":5,"context_line":"    CURD actions for packet rate limit (packet per second) rule."}],"source_content_type":"text/x-yaml","patch_set":4,"id":"c5bf4ac8_04376a78","line":5,"range":{"start_line":5,"start_character":4,"end_line":5,"end_character":8},"updated":"2021-05-21 14:04:17.000000000","message":"CRUD?","commit_id":"7a92e1b2c659ae691e3f1b33935fd7669cd90e0b"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"3368869167a150c598b585951e3ed4854811c315","unresolved":true,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Adding new API extension for QoS service plugin to allow"},{"line_number":5,"context_line":"    CURD actions for packet rate limit (packet per second) rule."}],"source_content_type":"text/x-yaml","patch_set":4,"id":"58ee28a3_89fc3113","line":5,"range":{"start_line":5,"start_character":4,"end_line":5,"end_character":8},"in_reply_to":"81525eb4_f23b7d58","updated":"2021-05-26 13:27:30.000000000","message":"+1","commit_id":"7a92e1b2c659ae691e3f1b33935fd7669cd90e0b"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"94249f40414eabe6506c66b08622d8e94c81a76e","unresolved":true,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Adding new API extension for QoS service plugin to allow"},{"line_number":5,"context_line":"    CURD actions for packet rate limit (packet per second) rule."}],"source_content_type":"text/x-yaml","patch_set":4,"id":"81525eb4_f23b7d58","line":5,"range":{"start_line":5,"start_character":4,"end_line":5,"end_character":8},"in_reply_to":"86109c95_6b80e181","updated":"2021-05-24 08:29:24.000000000","message":"CRUD is a commonly used abbrev (https://en.wikipedia.org/wiki/Create,_read,_update_and_delete)","commit_id":"7a92e1b2c659ae691e3f1b33935fd7669cd90e0b"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"8e7a61f91bedd3376d3fd328e0b0b73f5e824ce5","unresolved":true,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Adding new API extension for QoS service plugin to allow"},{"line_number":5,"context_line":"    CURD actions for packet rate limit (packet per second) rule."}],"source_content_type":"text/x-yaml","patch_set":4,"id":"86109c95_6b80e181","line":5,"range":{"start_line":5,"start_character":4,"end_line":5,"end_character":8},"in_reply_to":"c5bf4ac8_04376a78","updated":"2021-05-24 02:56:25.000000000","message":"I\u0027m not sure if there is a fixed order of this abbreviation for \u0027Create, Update, Retrieve and Delete\u0027. The style of \u0027CURD\u0027 is just my personal habit. Maybe for English native speaker, the \"CRUD\" may have a smooth pronunciation. But IMO, it should not be read as a word. This combination \u0027CURD\u0027 or \u0027CRUD\u0027 can only be read by letters one by one to avoid unnecessary ambiguity or misunderstand especially for non native English speakers.","commit_id":"7a92e1b2c659ae691e3f1b33935fd7669cd90e0b"}]}
