)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"8f8ccc4520f9d2ac829dbfe3afbf720c0f43ead4","unresolved":true,"context_lines":[{"line_number":30,"context_line":"  in a tunnelled network (not supported)."},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"[1]https://man7.org/linux/man-pages/man8/tc-htb.8.html"},{"line_number":33,"context_line":"[2]https://github.com/ovn-org/ovn/blob/1bec9e3ddd8500793b52e11c3dc1f41ef1f48591/ovn-nb.xml#L1155-L1168"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"Closes-Bug: #2015376"},{"line_number":36,"context_line":"Change-Id: I4581d31ba04c0d2f3f45ee6d07bcaba82fb038d4"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"5b53da95_674e449f","line":33,"updated":"2024-12-18 23:17:37.000000000","message":"you could also mention the OVN patch here that changed the behavior - which triggered this change here too AFAIU\n\nhttps://github.com/ovn-org/ovn/commit/87514ac04271e87c3ad011599378d22ab6bed43c","commit_id":"dcdb439f31ca8ec0377177f4464d852e62f8727b"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"a6a132d67b1a7a8d7b348ba497b33d5e501ae696","unresolved":false,"context_lines":[{"line_number":30,"context_line":"  in a tunnelled network (not supported)."},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"[1]https://man7.org/linux/man-pages/man8/tc-htb.8.html"},{"line_number":33,"context_line":"[2]https://github.com/ovn-org/ovn/blob/1bec9e3ddd8500793b52e11c3dc1f41ef1f48591/ovn-nb.xml#L1155-L1168"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"Closes-Bug: #2015376"},{"line_number":36,"context_line":"Change-Id: I4581d31ba04c0d2f3f45ee6d07bcaba82fb038d4"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"9db9d754_4690ca55","line":33,"in_reply_to":"5b53da95_674e449f","updated":"2024-12-20 09:30:54.000000000","message":"Done","commit_id":"dcdb439f31ca8ec0377177f4464d852e62f8727b"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"8f8ccc4520f9d2ac829dbfe3afbf720c0f43ead4","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":10,"id":"e7e34190_da6ba097","line":37,"updated":"2024-12-18 23:17:37.000000000","message":"Should we add a release note explaining that qos is fixed for newer OVNs?","commit_id":"dcdb439f31ca8ec0377177f4464d852e62f8727b"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"a6a132d67b1a7a8d7b348ba497b33d5e501ae696","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"26fde27e_0b99df3e","line":37,"in_reply_to":"e7e34190_da6ba097","updated":"2024-12-20 09:30:54.000000000","message":"Done","commit_id":"dcdb439f31ca8ec0377177f4464d852e62f8727b"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"d03af31c32e7bec38036b3a652901b1718bde3a2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"4ed87155_452ea5a3","updated":"2024-11-14 12:29:23.000000000","message":"recheck\njob: neutron-tempest-plugin-ovn\ntest: issue with os-ken image builder reported","commit_id":"de8282f914f316dc26304b3c8afacaec1811697b"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"1f724ba293cf34688bccf3e09ae2d8355f8f7dbd","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"a97392db_8b4f1ce5","updated":"2024-11-19 13:16:12.000000000","message":"recheck neutron-tempest-plugin-openvswitch, unrelated error","commit_id":"f7fd629a9f61f3fa4a6b077a35ff672db091fcfb"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"6719381aa38941b5bd89f06de456b18371485f65","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"cee9a652_0dffba98","updated":"2024-11-19 11:21:50.000000000","message":"recheck new os-ken release fixing the CI","commit_id":"f7fd629a9f61f3fa4a6b077a35ff672db091fcfb"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"fef934e49e99ba889edbd932b4989318f19ca085","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"0a146daf_1b57afcb","updated":"2024-11-20 00:01:43.000000000","message":"recheck os-ken released","commit_id":"f7fd629a9f61f3fa4a6b077a35ff672db091fcfb"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"75d838f491322e9551d4408ab987f2ea15615f80","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"17403172_a2fedfba","updated":"2024-12-06 13:23:22.000000000","message":"looks ok, thanks","commit_id":"613da3161f1197b7f4b81c34884d6c46c6496d4f"},{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"41757069f410f697acb30b637a2876ae8e7bfc29","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"a4d90aac_944b60a1","updated":"2024-12-12 23:52:24.000000000","message":"Just nits / suggestions for general improvements not necessary in this patch. The seemingly NoOp transaction could be removed in the functional test_qos.py, but I don\u0027t think behavior should change.","commit_id":"1bb586162865f13aaf5e5c92d56ec2e5ddde0b35"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"4cb0b573d70760030d4321c5d231522766ddbf76","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"706cf836_4709faf1","updated":"2024-12-12 07:53:56.000000000","message":"ping fellow reviewers","commit_id":"1bb586162865f13aaf5e5c92d56ec2e5ddde0b35"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"f884e40444c4bc650adbd912fc563b7c998ce9f9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"c914b7f8_e9e7a3f7","updated":"2024-12-09 14:45:08.000000000","message":"recheck neutron-fullstack","commit_id":"1bb586162865f13aaf5e5c92d56ec2e5ddde0b35"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"64804ffa6937d5b8a984ccb04a7cd505472e9232","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"2920988c_9e4d5a72","updated":"2024-12-09 20:24:42.000000000","message":"recheck neutron-functional","commit_id":"1bb586162865f13aaf5e5c92d56ec2e5ddde0b35"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"27a82076dbc6838289365cf0fe94816a7008491a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"0b4b8aa9_510971e9","in_reply_to":"a4d90aac_944b60a1","updated":"2024-12-13 12:48:20.000000000","message":"Thanks for the detailed review! I\u0027ll push a follow-up patch to update UpdateLSwitchPortQosOptionsCommand","commit_id":"1bb586162865f13aaf5e5c92d56ec2e5ddde0b35"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"d86d1d0422119eda941cf6bf3e555b49da746c66","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"c735deee_6c09bc04","updated":"2024-12-18 23:19:05.000000000","message":"Not +Wing to let you consider if release note is worth it. If you think it\u0027s ok, feel free to merge, I don\u0027t think anything else blocks this patch. Other minor comments can be handled elsewhere.","commit_id":"dcdb439f31ca8ec0377177f4464d852e62f8727b"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"afb13173e89e35c0289a3df5949fd49a691a52ba","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"c76085b0_7821046e","updated":"2024-12-17 12:17:59.000000000","message":"hi folks, any review is welcome, thanks!","commit_id":"dcdb439f31ca8ec0377177f4464d852e62f8727b"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"8bb31c95e9fee96c56ff3ad7f3fd16c939d99d08","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"fe3931d4_232a1c31","updated":"2024-12-14 23:21:42.000000000","message":"recheck fullstack","commit_id":"dcdb439f31ca8ec0377177f4464d852e62f8727b"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"af9392a02908213bbd452af73cff377beb513c18","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"4be6acf0_8c0c8aca","updated":"2024-12-17 10:26:18.000000000","message":"recheck neutron-tempest-plugin-openvswitch","commit_id":"dcdb439f31ca8ec0377177f4464d852e62f8727b"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"8179fc415f61e2fd65a31608c8105324b5fab93a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"7330dda2_c94e80e4","updated":"2024-12-17 08:49:50.000000000","message":"recheck neutron-tempest-plugin-openvswitch","commit_id":"dcdb439f31ca8ec0377177f4464d852e62f8727b"},{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"c9ee4b52ef0829cc72cf8360d68968f8d32f0a2c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"5b9f13da_8f4f46fc","updated":"2024-12-13 14:54:37.000000000","message":"recheck ubuntu image download failure","commit_id":"dcdb439f31ca8ec0377177f4464d852e62f8727b"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"ff19dd1a8863883304ae0b14b90ef76bf9c5bb29","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"c55d0156_e3e826c3","updated":"2024-12-20 17:37:49.000000000","message":"Actually there seems to be a bug in code, see tempest results\n\n```\nDec 20 10:25:39.115580 np0039422983 devstack@neutron-api.service[65783]: ERROR neutron.plugins.ml2.managers Traceback (most recent call last):\nDec 20 10:25:39.115580 np0039422983 devstack@neutron-api.service[65783]: ERROR neutron.plugins.ml2.managers   File \"/opt/stack/neutron/neutron/plugins/ml2/managers.py\", line 497, in _call_on_drivers\nDec 20 10:25:39.115580 np0039422983 devstack@neutron-api.service[65783]: ERROR neutron.plugins.ml2.managers     getattr(driver.obj, method_name)(context)\nDec 20 10:25:39.115580 np0039422983 devstack@neutron-api.service[65783]: ERROR neutron.plugins.ml2.managers   File \"/opt/stack/neutron/neutron/plugins/ml2/drivers/ovn/mech_driver/mech_driver.py\", line 870, in create_port_postcommit\nDec 20 10:25:39.115580 np0039422983 devstack@neutron-api.service[65783]: ERROR neutron.plugins.ml2.managers     self._ovn_client.create_port(context.plugin_context, port)\nDec 20 10:25:39.115580 np0039422983 devstack@neutron-api.service[65783]: ERROR neutron.plugins.ml2.managers   File \"/opt/stack/neutron/neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/ovn_client.py\", line 646, in create_port\nDec 20 10:25:39.115580 np0039422983 devstack@neutron-api.service[65783]: ERROR neutron.plugins.ml2.managers     self._qos_driver.create_port(txn, port, port_cmd)\nDec 20 10:25:39.115580 np0039422983 devstack@neutron-api.service[65783]: ERROR neutron.plugins.ml2.managers   File \"/opt/stack/neutron/neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/extensions/qos.py\", line 341, in create_port\nDec 20 10:25:39.115580 np0039422983 devstack@neutron-api.service[65783]: ERROR neutron.plugins.ml2.managers     self.update_port(txn, port, None, reset\u003dTrue, lsp\u003dlsp)\nDec 20 10:25:39.115580 np0039422983 devstack@neutron-api.service[65783]: ERROR neutron.plugins.ml2.managers   File \"/opt/stack/neutron/neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/extensions/qos.py\", line 371, in update_port\nDec 20 10:25:39.115580 np0039422983 devstack@neutron-api.service[65783]: ERROR neutron.plugins.ml2.managers     self._update_port_qos_rules(txn, port[\u0027id\u0027], port[\u0027network_id\u0027],\nDec 20 10:25:39.115580 np0039422983 devstack@neutron-api.service[65783]: ERROR neutron.plugins.ml2.managers   File \"/opt/stack/neutron/neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/extensions/qos.py\", line 334, in _update_port_qos_rules\nDec 20 10:25:39.115580 np0039422983 devstack@neutron-api.service[65783]: ERROR neutron.plugins.ml2.managers     self._delete_port_qos_rules(txn, port_id, network_id, network_type,\nDec 20 10:25:39.116441 np0039422983 devstack@neutron-api.service[65783]: ERROR neutron.plugins.ml2.managers   File \"/opt/stack/neutron/neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/extensions/qos.py\", line 293, in _delete_port_qos_rules\nDec 20 10:25:39.116441 np0039422983 devstack@neutron-api.service[65783]: ERROR neutron.plugins.ml2.managers     txn.add(self.nb_idl.qos_del(**ovn_rule_qos))\nDec 20 10:25:39.116441 np0039422983 devstack@neutron-api.service[65783]: ERROR neutron.plugins.ml2.managers             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nDec 20 10:25:39.116441 np0039422983 devstack@neutron-api.service[65783]: ERROR neutron.plugins.ml2.managers TypeError: ovsdbapp.schema.ovn_northbound.impl_idl.OvnNbApiIdlImpl.qos_del() argument after ** must be a mapping, not NoneType\n```","commit_id":"db78c2ffeeb949cbc7cc92eb3bfffb34931f426b"},{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"9fea247df4b3e8e057d3e70ca2527bf2913c9a77","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"6b7bb7e7_75c9d832","updated":"2025-01-06 19:01:11.000000000","message":"recheck\n\ntempest timeout","commit_id":"526f238fa47c8e66b4b3dd300b1630e3fc848619"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"bfc551417d075501520a8a5b81c968eb41892b14","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"bfe083ac_2aeb593c","updated":"2024-12-30 14:57:25.000000000","message":"recheck\nerror: https://review.opendev.org/c/openstack/neutron/+/938319","commit_id":"526f238fa47c8e66b4b3dd300b1630e3fc848619"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"d1687e5647f3b518657ad67153da91850e2941f2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"09179c03_aa6519c1","updated":"2024-12-23 20:11:34.000000000","message":"recheck neutron-ovn-rally-task","commit_id":"526f238fa47c8e66b4b3dd300b1630e3fc848619"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"c56e416372a1c65718ecd1f5967108b83cf7cf60","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"1f34c160_e4a1575b","updated":"2024-12-23 18:01:44.000000000","message":"recheck neutron-ovn-rally-task","commit_id":"526f238fa47c8e66b4b3dd300b1630e3fc848619"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"7b140cb58bd04b23cb88e53a3a8774ad155f0306","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"de1a680f_9cea5a86","updated":"2025-01-02 07:12:09.000000000","message":"recheck neutron-tempest-plugin-ovn","commit_id":"526f238fa47c8e66b4b3dd300b1630e3fc848619"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"3991af3af25a1c5eb45fad5a9764e6380012ac34","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"a04a5a79_9f224b69","updated":"2024-12-30 07:06:44.000000000","message":"recheck neutron-tempest-plugin-ovn-ubuntu-jammy","commit_id":"526f238fa47c8e66b4b3dd300b1630e3fc848619"}],"neutron/agent/ovn/agent/ovsdb.py":[{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"8f8ccc4520f9d2ac829dbfe3afbf720c0f43ead4","unresolved":true,"context_lines":[{"line_number":178,"context_line":"                constants.SI_BASE)"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"    # The \"qos_min_rate\" is stored in bits/s"},{"line_number":181,"context_line":"    min_kbps \u003d ("},{"line_number":182,"context_line":"            int(lsp.options.get(ovn_const.LSP_OPTIONS_QOS_MIN_RATE, 0)) //"},{"line_number":183,"context_line":"            constants.SI_BASE)"},{"line_number":184,"context_line":"    return max_kbps, min_kbps"}],"source_content_type":"text/x-python","patch_set":10,"id":"b6c4d9da_8a6f8d17","line":181,"updated":"2024-12-18 23:17:37.000000000","message":"nit: you could have a `to_bit_s` helper used for both","commit_id":"dcdb439f31ca8ec0377177f4464d852e62f8727b"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"a6a132d67b1a7a8d7b348ba497b33d5e501ae696","unresolved":false,"context_lines":[{"line_number":178,"context_line":"                constants.SI_BASE)"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"    # The \"qos_min_rate\" is stored in bits/s"},{"line_number":181,"context_line":"    min_kbps \u003d ("},{"line_number":182,"context_line":"            int(lsp.options.get(ovn_const.LSP_OPTIONS_QOS_MIN_RATE, 0)) //"},{"line_number":183,"context_line":"            constants.SI_BASE)"},{"line_number":184,"context_line":"    return max_kbps, min_kbps"}],"source_content_type":"text/x-python","patch_set":10,"id":"aec21d36_c0e03eba","line":181,"in_reply_to":"b6c4d9da_8a6f8d17","updated":"2024-12-20 09:30:54.000000000","message":"Done","commit_id":"dcdb439f31ca8ec0377177f4464d852e62f8727b"}],"neutron/common/utils.py":[{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"52b91b1561f00a7c5cca56a5c2150e6d76780575","unresolved":true,"context_lines":[{"line_number":845,"context_line":"    return value * 8"},{"line_number":846,"context_line":""},{"line_number":847,"context_line":""},{"line_number":848,"context_line":"def bits_to_kilobits(value, base):"},{"line_number":849,"context_line":"    # NOTE(slaweq): round up that even 1 bit will give 1 kbit as a result, but"},{"line_number":850,"context_line":"    # zero will return zero too."},{"line_number":851,"context_line":"    return math.ceil(value / base)"}],"source_content_type":"text/x-python","patch_set":12,"id":"cbf5f264_2b49ec18","line":848,"updated":"2024-12-20 18:37:28.000000000","message":"What\u0027s the expected type of value and base here? we could benefit from adding some mypy hints here, since the caller in this patch passes a string and we don\u0027t seem to notice it (only in functional test suite).","commit_id":"db78c2ffeeb949cbc7cc92eb3bfffb34931f426b"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"61ac705a5bbb41e2c6e4eb10da98875dadd0c214","unresolved":false,"context_lines":[{"line_number":845,"context_line":"    return value * 8"},{"line_number":846,"context_line":""},{"line_number":847,"context_line":""},{"line_number":848,"context_line":"def bits_to_kilobits(value, base):"},{"line_number":849,"context_line":"    # NOTE(slaweq): round up that even 1 bit will give 1 kbit as a result, but"},{"line_number":850,"context_line":"    # zero will return zero too."},{"line_number":851,"context_line":"    return math.ceil(value / base)"}],"source_content_type":"text/x-python","patch_set":12,"id":"e861a1f8_78761ebd","line":848,"in_reply_to":"a79f23fb_9623d9c0","updated":"2024-12-23 18:43:32.000000000","message":"From PEP484\n\n```\n    Rather than requiring that users write import numbers and then use numbers.Float etc., this PEP proposes a straightforward shortcut that is almost as effective: when an argument is annotated as having type float, an argument of type int is acceptable; similar, for an argument annotated as having type complex, arguments of type float or int are acceptable.\n\n```","commit_id":"db78c2ffeeb949cbc7cc92eb3bfffb34931f426b"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"306ba23a7f9d53473fe858537d819c2764d09418","unresolved":false,"context_lines":[{"line_number":845,"context_line":"    return value * 8"},{"line_number":846,"context_line":""},{"line_number":847,"context_line":""},{"line_number":848,"context_line":"def bits_to_kilobits(value, base):"},{"line_number":849,"context_line":"    # NOTE(slaweq): round up that even 1 bit will give 1 kbit as a result, but"},{"line_number":850,"context_line":"    # zero will return zero too."},{"line_number":851,"context_line":"    return math.ceil(value / base)"}],"source_content_type":"text/x-python","patch_set":12,"id":"a79f23fb_9623d9c0","line":848,"in_reply_to":"cbf5f264_2b49ec18","updated":"2024-12-23 08:44:50.000000000","message":"Done","commit_id":"db78c2ffeeb949cbc7cc92eb3bfffb34931f426b"}],"neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/commands.py":[{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"75d838f491322e9551d4408ab987f2ea15615f80","unresolved":true,"context_lines":[{"line_number":259,"context_line":"            raise RuntimeError(_(\u0027Logical Switch Port %s does not exist\u0027) %"},{"line_number":260,"context_line":"                               port_id)"},{"line_number":261,"context_line":""},{"line_number":262,"context_line":"        # TODO(ralonsoh): add a check to only modify the QoS related keys:"},{"line_number":263,"context_line":"        # qos_max_rate, qos_burst and qos_min_rate."},{"line_number":264,"context_line":"        for key, value in self.qos.items():"},{"line_number":265,"context_line":"            if value is None:"},{"line_number":266,"context_line":"                port.delkey(\u0027options\u0027, key)"}],"source_content_type":"text/x-python","patch_set":8,"id":"d23c005e_3e0039dd","line":263,"range":{"start_line":262,"start_character":8,"end_line":263,"end_character":51},"updated":"2024-12-06 13:23:22.000000000","message":"+1","commit_id":"613da3161f1197b7f4b81c34884d6c46c6496d4f"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"417501cd8fb8683146de0157e649e0c9fcba8232","unresolved":false,"context_lines":[{"line_number":259,"context_line":"            raise RuntimeError(_(\u0027Logical Switch Port %s does not exist\u0027) %"},{"line_number":260,"context_line":"                               port_id)"},{"line_number":261,"context_line":""},{"line_number":262,"context_line":"        # TODO(ralonsoh): add a check to only modify the QoS related keys:"},{"line_number":263,"context_line":"        # qos_max_rate, qos_burst and qos_min_rate."},{"line_number":264,"context_line":"        for key, value in self.qos.items():"},{"line_number":265,"context_line":"            if value is None:"},{"line_number":266,"context_line":"                port.delkey(\u0027options\u0027, key)"}],"source_content_type":"text/x-python","patch_set":8,"id":"fc291e96_224293da","line":263,"range":{"start_line":262,"start_character":8,"end_line":263,"end_character":51},"in_reply_to":"d23c005e_3e0039dd","updated":"2024-12-09 14:59:40.000000000","message":"Done","commit_id":"613da3161f1197b7f4b81c34884d6c46c6496d4f"}],"neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/extensions/qos.py":[{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"41757069f410f697acb30b637a2876ae8e7bfc29","unresolved":true,"context_lines":[{"line_number":127,"context_line":""},{"line_number":128,"context_line":"        return match"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"    def _ovn_rule_qos(self, rules_direction, rules, port_id, network_id,"},{"line_number":131,"context_line":"                      fip_id\u003dNone, ip_address\u003dNone, resident_port\u003dNone,"},{"line_number":132,"context_line":"                      router_id\u003dNone, delete\u003dFalse):"},{"line_number":133,"context_line":"        \"\"\"Generate an OVN QoS register based on several Neutron QoS rules"}],"source_content_type":"text/x-python","patch_set":9,"id":"79e8449c_034edeb6","line":130,"updated":"2024-12-12 23:52:24.000000000","message":"nit: changing this name and the name of the variable below makes it a lot harder to quickly read what has actually changed in these sections for little benefit.","commit_id":"1bb586162865f13aaf5e5c92d56ec2e5ddde0b35"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"27a82076dbc6838289365cf0fe94816a7008491a","unresolved":false,"context_lines":[{"line_number":127,"context_line":""},{"line_number":128,"context_line":"        return match"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"    def _ovn_rule_qos(self, rules_direction, rules, port_id, network_id,"},{"line_number":131,"context_line":"                      fip_id\u003dNone, ip_address\u003dNone, resident_port\u003dNone,"},{"line_number":132,"context_line":"                      router_id\u003dNone, delete\u003dFalse):"},{"line_number":133,"context_line":"        \"\"\"Generate an OVN QoS register based on several Neutron QoS rules"}],"source_content_type":"text/x-python","patch_set":9,"id":"e8122cd6_0dce5da9","line":130,"in_reply_to":"79e8449c_034edeb6","updated":"2024-12-13 12:48:20.000000000","message":"Let me take the older value back.","commit_id":"1bb586162865f13aaf5e5c92d56ec2e5ddde0b35"},{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"41757069f410f697acb30b637a2876ae8e7bfc29","unresolved":true,"context_lines":[{"line_number":312,"context_line":"                self._update_lsp_qos_options(txn, lsp, port_id, ovn_rule_lsp)"},{"line_number":313,"context_line":"                # In this particular case, the QoS rules should be defined in"},{"line_number":314,"context_line":"                # LSP.options. Only DSCP rule will create a QoS entry."},{"line_number":315,"context_line":"                rules.pop(qos_consts.RULE_TYPE_BANDWIDTH_LIMIT, None)"},{"line_number":316,"context_line":"                rules.pop(qos_consts.RULE_TYPE_MINIMUM_BANDWIDTH, None)"},{"line_number":317,"context_line":""},{"line_number":318,"context_line":"            # \"delete\u003dnot rule\": that means, when we don\u0027t have rules, we"},{"line_number":319,"context_line":"            # generate an \"ovn_rule_qos\" to be used as input in a \"qos_del\""}],"source_content_type":"text/x-python","patch_set":9,"id":"86332bb8_44d91c1d","line":316,"range":{"start_line":315,"start_character":0,"end_line":316,"end_character":71},"updated":"2024-12-12 23:52:24.000000000","message":"super nit:\nSince we don\u0027t care about the return value, `del rules[qos_constants.XXX]` is simpler and the tiniest possible bit faster.","commit_id":"1bb586162865f13aaf5e5c92d56ec2e5ddde0b35"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"27a82076dbc6838289365cf0fe94816a7008491a","unresolved":false,"context_lines":[{"line_number":312,"context_line":"                self._update_lsp_qos_options(txn, lsp, port_id, ovn_rule_lsp)"},{"line_number":313,"context_line":"                # In this particular case, the QoS rules should be defined in"},{"line_number":314,"context_line":"                # LSP.options. Only DSCP rule will create a QoS entry."},{"line_number":315,"context_line":"                rules.pop(qos_consts.RULE_TYPE_BANDWIDTH_LIMIT, None)"},{"line_number":316,"context_line":"                rules.pop(qos_consts.RULE_TYPE_MINIMUM_BANDWIDTH, None)"},{"line_number":317,"context_line":""},{"line_number":318,"context_line":"            # \"delete\u003dnot rule\": that means, when we don\u0027t have rules, we"},{"line_number":319,"context_line":"            # generate an \"ovn_rule_qos\" to be used as input in a \"qos_del\""}],"source_content_type":"text/x-python","patch_set":9,"id":"b622df50_0711de10","line":316,"range":{"start_line":315,"start_character":0,"end_line":316,"end_character":71},"in_reply_to":"86332bb8_44d91c1d","updated":"2024-12-13 12:48:20.000000000","message":"It is possible that there are no max-bw or min-bw rules in this QoS, only DSCP. I need to use pop (with default\u003dNone) to avoid a KeyError exception.","commit_id":"1bb586162865f13aaf5e5c92d56ec2e5ddde0b35"},{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"41757069f410f697acb30b637a2876ae8e7bfc29","unresolved":false,"context_lines":[{"line_number":367,"context_line":"                return  # No QoS policy change"},{"line_number":368,"context_line":""},{"line_number":369,"context_line":"        net_name \u003d utils.ovn_name(port[\u0027network_id\u0027])"},{"line_number":370,"context_line":"        ls \u003d self.nb_idl.ls_get(net_name).execute(check_errors\u003dTrue)"},{"line_number":371,"context_line":"        network_type \u003d ls.external_ids[ovn_const.OVN_NETTYPE_EXT_ID_KEY]"},{"line_number":372,"context_line":"        self._update_port_qos_rules(txn, port[\u0027id\u0027], port[\u0027network_id\u0027],"},{"line_number":373,"context_line":"                                    network_type, qos_policy_id, qos_rules,"}],"source_content_type":"text/x-python","patch_set":9,"id":"69ccf613_8e475cc6","line":370,"range":{"start_line":370,"start_character":0,"end_line":370,"end_character":68},"updated":"2024-12-12 23:52:24.000000000","message":"Nothing to do here, but just informational (tl;dr Neutron should use a lot more custom Commands for ovsdb stuff):\n\nThis isn\u0027t about this patch in particular, but just a little rant against the neutron style of passing a txn around to a bunch of helper functions.\n\nAny time you see a txn being passed in, and then see another call to a do another transaction to get info via `Command.execute()` or similar, it\u0027s a good bet that all of that code should probably be in a custom Command object. When `Command.run_idl()` is executed in the `Connection` thread, all of the values are guaranteed to make sense together, whereas doing it this way means that the LS you are getting the name of here could theoretically disappear from the internal tables dictionary before the txn that is passed around is executed.\n\nIt\u0027s much better to let the ovsdb-server itself tell your whole transaction that the LS isn\u0027t there than for it to just disappear from your code and throw an exception in a random place.","commit_id":"1bb586162865f13aaf5e5c92d56ec2e5ddde0b35"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"112f4bf4bf6dcd767ecbe07687ecf0bd8daaddc5","unresolved":false,"context_lines":[{"line_number":367,"context_line":"                return  # No QoS policy change"},{"line_number":368,"context_line":""},{"line_number":369,"context_line":"        net_name \u003d utils.ovn_name(port[\u0027network_id\u0027])"},{"line_number":370,"context_line":"        ls \u003d self.nb_idl.ls_get(net_name).execute(check_errors\u003dTrue)"},{"line_number":371,"context_line":"        network_type \u003d ls.external_ids[ovn_const.OVN_NETTYPE_EXT_ID_KEY]"},{"line_number":372,"context_line":"        self._update_port_qos_rules(txn, port[\u0027id\u0027], port[\u0027network_id\u0027],"},{"line_number":373,"context_line":"                                    network_type, qos_policy_id, qos_rules,"}],"source_content_type":"text/x-python","patch_set":9,"id":"e46c816d_9c203f68","line":370,"range":{"start_line":370,"start_character":0,"end_line":370,"end_character":68},"in_reply_to":"69ccf613_8e475cc6","updated":"2024-12-13 13:42:40.000000000","message":"Another optimization to be done in a follow-up patch.","commit_id":"1bb586162865f13aaf5e5c92d56ec2e5ddde0b35"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"8f8ccc4520f9d2ac829dbfe3afbf720c0f43ead4","unresolved":true,"context_lines":[{"line_number":129,"context_line":""},{"line_number":130,"context_line":"    def _ovn_qos_rule(self, rules_direction, rules, port_id, network_id,"},{"line_number":131,"context_line":"                      fip_id\u003dNone, ip_address\u003dNone, resident_port\u003dNone,"},{"line_number":132,"context_line":"                      router_id\u003dNone, delete\u003dFalse):"},{"line_number":133,"context_line":"        \"\"\"Generate an OVN QoS register based on several Neutron QoS rules"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"        A OVN QoS register can contain \"bandwidth\" and \"action\" parameters."}],"source_content_type":"text/x-python","patch_set":10,"id":"415ad8c4_0e435417","line":132,"updated":"2024-12-18 23:17:37.000000000","message":"(No action required; Observation) `delete` argument seems redundant - the function could just `not rules` itself. We never pass anything but `not rules` here anyway.","commit_id":"dcdb439f31ca8ec0377177f4464d852e62f8727b"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"a6a132d67b1a7a8d7b348ba497b33d5e501ae696","unresolved":false,"context_lines":[{"line_number":129,"context_line":""},{"line_number":130,"context_line":"    def _ovn_qos_rule(self, rules_direction, rules, port_id, network_id,"},{"line_number":131,"context_line":"                      fip_id\u003dNone, ip_address\u003dNone, resident_port\u003dNone,"},{"line_number":132,"context_line":"                      router_id\u003dNone, delete\u003dFalse):"},{"line_number":133,"context_line":"        \"\"\"Generate an OVN QoS register based on several Neutron QoS rules"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"        A OVN QoS register can contain \"bandwidth\" and \"action\" parameters."}],"source_content_type":"text/x-python","patch_set":10,"id":"b020638f_dff12f77","line":132,"in_reply_to":"415ad8c4_0e435417","updated":"2024-12-20 09:30:54.000000000","message":"Let me push a follow-up patch for this.","commit_id":"dcdb439f31ca8ec0377177f4464d852e62f8727b"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"0401380f8d4aa66ffe8ba3ac928eb6a91f2ad5a6","unresolved":false,"context_lines":[{"line_number":129,"context_line":""},{"line_number":130,"context_line":"    def _ovn_qos_rule(self, rules_direction, rules, port_id, network_id,"},{"line_number":131,"context_line":"                      fip_id\u003dNone, ip_address\u003dNone, resident_port\u003dNone,"},{"line_number":132,"context_line":"                      router_id\u003dNone, delete\u003dFalse):"},{"line_number":133,"context_line":"        \"\"\"Generate an OVN QoS register based on several Neutron QoS rules"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"        A OVN QoS register can contain \"bandwidth\" and \"action\" parameters."}],"source_content_type":"text/x-python","patch_set":10,"id":"ffc694a6_3f8f92b4","line":132,"in_reply_to":"b020638f_dff12f77","updated":"2024-12-20 12:07:36.000000000","message":"--\u003e https://review.opendev.org/c/openstack/neutron/+/938120","commit_id":"dcdb439f31ca8ec0377177f4464d852e62f8727b"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"8f8ccc4520f9d2ac829dbfe3afbf720c0f43ead4","unresolved":true,"context_lines":[{"line_number":284,"context_line":"        return port[\u0027qos_network_policy_id\u0027], \u0027network\u0027"},{"line_number":285,"context_line":""},{"line_number":286,"context_line":"    def _delete_port_qos_rules(self, txn, port_id, network_id, network_type,"},{"line_number":287,"context_line":"                               lsp\u003dNone, port_deleted\u003dFalse):"},{"line_number":288,"context_line":"        # Generate generic deletion rules for both directions. In case of"},{"line_number":289,"context_line":"        # creating deletion rules, the rule content is irrelevant."},{"line_number":290,"context_line":"        for ovn_rule_qos in (self._ovn_qos_rule(direction, {}, port_id,"}],"source_content_type":"text/x-python","patch_set":10,"id":"bd52afed_0a64d9dd","line":287,"updated":"2024-12-18 23:17:37.000000000","message":"what is port_deleted now used for? Is there a reason why we were omitting the qos options update before (I assume because the LSP is expected to be removed elsewhere and this may result in something like NotFound exception maybe?) Or is it not needed because `_update_lsp_qos_options` already checks that LSP exists? (If so, maybe remove the redundant arguments?)","commit_id":"dcdb439f31ca8ec0377177f4464d852e62f8727b"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"a6a132d67b1a7a8d7b348ba497b33d5e501ae696","unresolved":false,"context_lines":[{"line_number":284,"context_line":"        return port[\u0027qos_network_policy_id\u0027], \u0027network\u0027"},{"line_number":285,"context_line":""},{"line_number":286,"context_line":"    def _delete_port_qos_rules(self, txn, port_id, network_id, network_type,"},{"line_number":287,"context_line":"                               lsp\u003dNone, port_deleted\u003dFalse):"},{"line_number":288,"context_line":"        # Generate generic deletion rules for both directions. In case of"},{"line_number":289,"context_line":"        # creating deletion rules, the rule content is irrelevant."},{"line_number":290,"context_line":"        for ovn_rule_qos in (self._ovn_qos_rule(direction, {}, port_id,"}],"source_content_type":"text/x-python","patch_set":10,"id":"97f7cf10_497c90a3","line":287,"in_reply_to":"bd52afed_0a64d9dd","updated":"2024-12-20 09:30:54.000000000","message":"Right, I need to remove this argument now.\n\nThat\u0027s correct: ``_update_lsp_qos_options`` calls ``update_lswitch_qos_options checks``, that by default has if_exists\u003dTrue. If the LSP does not exist, we silently exit the LSP QoS update command.","commit_id":"dcdb439f31ca8ec0377177f4464d852e62f8727b"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"8f8ccc4520f9d2ac829dbfe3afbf720c0f43ead4","unresolved":true,"context_lines":[{"line_number":315,"context_line":"                rules.pop(qos_consts.RULE_TYPE_BANDWIDTH_LIMIT, None)"},{"line_number":316,"context_line":"                rules.pop(qos_consts.RULE_TYPE_MINIMUM_BANDWIDTH, None)"},{"line_number":317,"context_line":""},{"line_number":318,"context_line":"            # \"delete\u003dnot rule\": that means, when we don\u0027t have rules, we"},{"line_number":319,"context_line":"            # generate an \"ovn_rule_qos\" to be used as input in a \"qos_del\""},{"line_number":320,"context_line":"            # method."},{"line_number":321,"context_line":"            ovn_rule_qos \u003d self._ovn_qos_rule(direction, rules, port_id,"}],"source_content_type":"text/x-python","patch_set":10,"id":"0299b7dd_752f7b15","line":318,"updated":"2024-12-18 23:17:37.000000000","message":"(No action required) `delete\u003dnot rules` I guess?","commit_id":"dcdb439f31ca8ec0377177f4464d852e62f8727b"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"a6a132d67b1a7a8d7b348ba497b33d5e501ae696","unresolved":false,"context_lines":[{"line_number":315,"context_line":"                rules.pop(qos_consts.RULE_TYPE_BANDWIDTH_LIMIT, None)"},{"line_number":316,"context_line":"                rules.pop(qos_consts.RULE_TYPE_MINIMUM_BANDWIDTH, None)"},{"line_number":317,"context_line":""},{"line_number":318,"context_line":"            # \"delete\u003dnot rule\": that means, when we don\u0027t have rules, we"},{"line_number":319,"context_line":"            # generate an \"ovn_rule_qos\" to be used as input in a \"qos_del\""},{"line_number":320,"context_line":"            # method."},{"line_number":321,"context_line":"            ovn_rule_qos \u003d self._ovn_qos_rule(direction, rules, port_id,"}],"source_content_type":"text/x-python","patch_set":10,"id":"cebf35ba_4f1f913b","line":318,"in_reply_to":"0299b7dd_752f7b15","updated":"2024-12-20 09:30:54.000000000","message":"Done","commit_id":"dcdb439f31ca8ec0377177f4464d852e62f8727b"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"8f8ccc4520f9d2ac829dbfe3afbf720c0f43ead4","unresolved":true,"context_lines":[{"line_number":455,"context_line":""},{"line_number":456,"context_line":"        qos_rules \u003d self._qos_rules(admin_context, qos_policy_id)"},{"line_number":457,"context_line":"        for direction, rules in qos_rules.items():"},{"line_number":458,"context_line":"            # \"delete\u003dnot rule\": that means, when we don\u0027t have rules, we"},{"line_number":459,"context_line":"            # generate an \"ovn_rule_qos\" to be used as input in a \"qos_del\""},{"line_number":460,"context_line":"            # method."},{"line_number":461,"context_line":"            ovn_rule_qos \u003d self._ovn_qos_rule("}],"source_content_type":"text/x-python","patch_set":10,"id":"222e2279_dec13c9a","line":458,"updated":"2024-12-18 23:17:37.000000000","message":"(No action required) ditto","commit_id":"dcdb439f31ca8ec0377177f4464d852e62f8727b"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"a6a132d67b1a7a8d7b348ba497b33d5e501ae696","unresolved":false,"context_lines":[{"line_number":455,"context_line":""},{"line_number":456,"context_line":"        qos_rules \u003d self._qos_rules(admin_context, qos_policy_id)"},{"line_number":457,"context_line":"        for direction, rules in qos_rules.items():"},{"line_number":458,"context_line":"            # \"delete\u003dnot rule\": that means, when we don\u0027t have rules, we"},{"line_number":459,"context_line":"            # generate an \"ovn_rule_qos\" to be used as input in a \"qos_del\""},{"line_number":460,"context_line":"            # method."},{"line_number":461,"context_line":"            ovn_rule_qos \u003d self._ovn_qos_rule("}],"source_content_type":"text/x-python","patch_set":10,"id":"38144880_0f1d26e9","line":458,"in_reply_to":"222e2279_dec13c9a","updated":"2024-12-20 09:30:54.000000000","message":"Done","commit_id":"dcdb439f31ca8ec0377177f4464d852e62f8727b"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"8f8ccc4520f9d2ac829dbfe3afbf720c0f43ead4","unresolved":true,"context_lines":[{"line_number":497,"context_line":"        admin_context \u003d n_context.get_admin_context()"},{"line_number":498,"context_line":"        qos_rules \u003d self._qos_rules(admin_context, qos_policy_id)"},{"line_number":499,"context_line":"        for direction, rules in qos_rules.items():"},{"line_number":500,"context_line":"            # \"delete\u003dnot rule\": that means, when we don\u0027t have rules, we"},{"line_number":501,"context_line":"            # generate an \"ovn_rule_qos\" to be used as input in a \"qos_del\""},{"line_number":502,"context_line":"            # method."},{"line_number":503,"context_line":"            ovn_rule_qos \u003d self._ovn_qos_rule("}],"source_content_type":"text/x-python","patch_set":10,"id":"728772d3_40aed8e7","line":500,"updated":"2024-12-18 23:17:37.000000000","message":"(N-a-r) ditto","commit_id":"dcdb439f31ca8ec0377177f4464d852e62f8727b"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"a6a132d67b1a7a8d7b348ba497b33d5e501ae696","unresolved":false,"context_lines":[{"line_number":497,"context_line":"        admin_context \u003d n_context.get_admin_context()"},{"line_number":498,"context_line":"        qos_rules \u003d self._qos_rules(admin_context, qos_policy_id)"},{"line_number":499,"context_line":"        for direction, rules in qos_rules.items():"},{"line_number":500,"context_line":"            # \"delete\u003dnot rule\": that means, when we don\u0027t have rules, we"},{"line_number":501,"context_line":"            # generate an \"ovn_rule_qos\" to be used as input in a \"qos_del\""},{"line_number":502,"context_line":"            # method."},{"line_number":503,"context_line":"            ovn_rule_qos \u003d self._ovn_qos_rule("}],"source_content_type":"text/x-python","patch_set":10,"id":"a4a9a8dd_400a4be5","line":500,"in_reply_to":"728772d3_40aed8e7","updated":"2024-12-20 09:30:54.000000000","message":"I think I copy/pasted that... At least I\u0027m making the correct call (see L505)","commit_id":"dcdb439f31ca8ec0377177f4464d852e62f8727b"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"b736d5cf55bb0ff4c5a1cab6aed974fef94ac512","unresolved":true,"context_lines":[{"line_number":288,"context_line":"        # Generate generic deletion rules for both directions. In case of"},{"line_number":289,"context_line":"        # creating deletion rules, the rule content is irrelevant."},{"line_number":290,"context_line":"        for ovn_rule_qos in (self._ovn_qos_rule(direction, {}, port_id,"},{"line_number":291,"context_line":"                                                network_id)"},{"line_number":292,"context_line":"                             for direction in constants.VALID_DIRECTIONS):"},{"line_number":293,"context_line":"            txn.add(self.nb_idl.qos_del(**ovn_rule_qos))"},{"line_number":294,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"7ec7fa93_30a6e302","line":291,"updated":"2024-12-20 17:40:47.000000000","message":"you should still have delete\u003dTrue here, otherwise it will return None and fail to unpack it in line 297","commit_id":"db78c2ffeeb949cbc7cc92eb3bfffb34931f426b"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"306ba23a7f9d53473fe858537d819c2764d09418","unresolved":false,"context_lines":[{"line_number":288,"context_line":"        # Generate generic deletion rules for both directions. In case of"},{"line_number":289,"context_line":"        # creating deletion rules, the rule content is irrelevant."},{"line_number":290,"context_line":"        for ovn_rule_qos in (self._ovn_qos_rule(direction, {}, port_id,"},{"line_number":291,"context_line":"                                                network_id)"},{"line_number":292,"context_line":"                             for direction in constants.VALID_DIRECTIONS):"},{"line_number":293,"context_line":"            txn.add(self.nb_idl.qos_del(**ovn_rule_qos))"},{"line_number":294,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"14860a98_b1493ed4","line":291,"in_reply_to":"7ec7fa93_30a6e302","updated":"2024-12-23 08:44:50.000000000","message":"Yes, that was a mistake","commit_id":"db78c2ffeeb949cbc7cc92eb3bfffb34931f426b"}],"neutron/tests/functional/agent/ovn/agent/test_ovsdb.py":[{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"41757069f410f697acb30b637a2876ae8e7bfc29","unresolved":true,"context_lines":[{"line_number":34,"context_line":"            options \u003d {qos_param: str(qos_value * constants.SI_BASE)}"},{"line_number":35,"context_line":"        else:"},{"line_number":36,"context_line":"            options \u003d {qos_param: None}"},{"line_number":37,"context_line":"        lsp \u003d self.nb_api.lsp_get(lsp_name).execute(check_error\u003dTrue)"},{"line_number":38,"context_line":"        self.nb_api.update_lswitch_qos_options(lsp, **options).execute("},{"line_number":39,"context_line":"            check_error\u003dTrue)"},{"line_number":40,"context_line":"        lsp \u003d self.nb_api.lsp_get(lsp_name).execute(check_error\u003dTrue)"},{"line_number":41,"context_line":"        if qos_value is not None:"},{"line_number":42,"context_line":"            self.assertEqual(qos_value,"}],"source_content_type":"text/x-python","patch_set":9,"id":"d7141e3e_ebee917f","line":39,"range":{"start_line":37,"start_character":0,"end_line":39,"end_character":29},"updated":"2024-12-12 23:52:24.000000000","message":"Maybe not for this patch, but the fact this kind of thing has happened throughout the patch means that it\u0027d probably be a lot better to have `UpdateLSwitchPortQosOptionsCommand` just call `api.lookup()` on whatever is passed to it, which should handle a name or uuid lookup, or an existing Command and also prevent the lsp from being deleted from our db between the two calls.\n\nIt feels a bit weird to have to look it up by name, then call update.","commit_id":"1bb586162865f13aaf5e5c92d56ec2e5ddde0b35"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"7746a6ba638c8c73a1dc13552141a974882d692f","unresolved":false,"context_lines":[{"line_number":34,"context_line":"            options \u003d {qos_param: str(qos_value * constants.SI_BASE)}"},{"line_number":35,"context_line":"        else:"},{"line_number":36,"context_line":"            options \u003d {qos_param: None}"},{"line_number":37,"context_line":"        lsp \u003d self.nb_api.lsp_get(lsp_name).execute(check_error\u003dTrue)"},{"line_number":38,"context_line":"        self.nb_api.update_lswitch_qos_options(lsp, **options).execute("},{"line_number":39,"context_line":"            check_error\u003dTrue)"},{"line_number":40,"context_line":"        lsp \u003d self.nb_api.lsp_get(lsp_name).execute(check_error\u003dTrue)"},{"line_number":41,"context_line":"        if qos_value is not None:"},{"line_number":42,"context_line":"            self.assertEqual(qos_value,"}],"source_content_type":"text/x-python","patch_set":9,"id":"f6afefca_eade1ad8","line":39,"range":{"start_line":37,"start_character":0,"end_line":39,"end_character":29},"in_reply_to":"d017dcb5_3e856ba0","updated":"2024-12-13 13:01:03.000000000","message":"--\u003e https://review.opendev.org/c/openstack/neutron/+/937682","commit_id":"1bb586162865f13aaf5e5c92d56ec2e5ddde0b35"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"27a82076dbc6838289365cf0fe94816a7008491a","unresolved":false,"context_lines":[{"line_number":34,"context_line":"            options \u003d {qos_param: str(qos_value * constants.SI_BASE)}"},{"line_number":35,"context_line":"        else:"},{"line_number":36,"context_line":"            options \u003d {qos_param: None}"},{"line_number":37,"context_line":"        lsp \u003d self.nb_api.lsp_get(lsp_name).execute(check_error\u003dTrue)"},{"line_number":38,"context_line":"        self.nb_api.update_lswitch_qos_options(lsp, **options).execute("},{"line_number":39,"context_line":"            check_error\u003dTrue)"},{"line_number":40,"context_line":"        lsp \u003d self.nb_api.lsp_get(lsp_name).execute(check_error\u003dTrue)"},{"line_number":41,"context_line":"        if qos_value is not None:"},{"line_number":42,"context_line":"            self.assertEqual(qos_value,"}],"source_content_type":"text/x-python","patch_set":9,"id":"d017dcb5_3e856ba0","line":39,"range":{"start_line":37,"start_character":0,"end_line":39,"end_character":29},"in_reply_to":"d7141e3e_ebee917f","updated":"2024-12-13 12:48:20.000000000","message":"Actually UpdateLSwitchPortQosOptionsCommand does api.lookup. But this class is expecting a LSP row instead of a port name. I can change that in a follow up patch.","commit_id":"1bb586162865f13aaf5e5c92d56ec2e5ddde0b35"},{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"41757069f410f697acb30b637a2876ae8e7bfc29","unresolved":true,"context_lines":[{"line_number":37,"context_line":"        lsp \u003d self.nb_api.lsp_get(lsp_name).execute(check_error\u003dTrue)"},{"line_number":38,"context_line":"        self.nb_api.update_lswitch_qos_options(lsp, **options).execute("},{"line_number":39,"context_line":"            check_error\u003dTrue)"},{"line_number":40,"context_line":"        lsp \u003d self.nb_api.lsp_get(lsp_name).execute(check_error\u003dTrue)"},{"line_number":41,"context_line":"        if qos_value is not None:"},{"line_number":42,"context_line":"            self.assertEqual(qos_value,"},{"line_number":43,"context_line":"                             int(lsp.options[qos_param]) // constants.SI_BASE)"}],"source_content_type":"text/x-python","patch_set":9,"id":"7afa61cc_80bf1e2f","line":40,"range":{"start_line":40,"start_character":0,"end_line":40,"end_character":69},"updated":"2024-12-12 23:52:24.000000000","message":"nit: I don\u0027t think this second lookup should be required as either a Row or RowView should show the changes from the update. Mostly just curious if this was intentional and actually required.","commit_id":"1bb586162865f13aaf5e5c92d56ec2e5ddde0b35"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"27a82076dbc6838289365cf0fe94816a7008491a","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        lsp \u003d self.nb_api.lsp_get(lsp_name).execute(check_error\u003dTrue)"},{"line_number":38,"context_line":"        self.nb_api.update_lswitch_qos_options(lsp, **options).execute("},{"line_number":39,"context_line":"            check_error\u003dTrue)"},{"line_number":40,"context_line":"        lsp \u003d self.nb_api.lsp_get(lsp_name).execute(check_error\u003dTrue)"},{"line_number":41,"context_line":"        if qos_value is not None:"},{"line_number":42,"context_line":"            self.assertEqual(qos_value,"},{"line_number":43,"context_line":"                             int(lsp.options[qos_param]) // constants.SI_BASE)"}],"source_content_type":"text/x-python","patch_set":9,"id":"d6ce84cb_ccef1e99","line":40,"range":{"start_line":40,"start_character":0,"end_line":40,"end_character":69},"in_reply_to":"7afa61cc_80bf1e2f","updated":"2024-12-13 12:48:20.000000000","message":"Right, this second call is not needed. Removed.","commit_id":"1bb586162865f13aaf5e5c92d56ec2e5ddde0b35"}],"neutron/tests/functional/plugins/ml2/drivers/ovn/mech_driver/ovsdb/extensions/test_qos.py":[{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"41757069f410f697acb30b637a2876ae8e7bfc29","unresolved":true,"context_lines":[{"line_number":74,"context_line":"        if network_type in (constants.TYPE_VLAN, constants.TYPE_FLAT):"},{"line_number":75,"context_line":"            # Remove the egress max-rate and min-rate rules."},{"line_number":76,"context_line":"            try:"},{"line_number":77,"context_line":"                qos_rules[constants.EGRESS_DIRECTION].pop("},{"line_number":78,"context_line":"                    qos_constants.RULE_TYPE_BANDWIDTH_LIMIT, None)"},{"line_number":79,"context_line":"                qos_rules[constants.EGRESS_DIRECTION].pop("},{"line_number":80,"context_line":"                    qos_constants.RULE_TYPE_MINIMUM_BANDWIDTH, None)"},{"line_number":81,"context_line":"            except KeyError:"},{"line_number":82,"context_line":"                pass"},{"line_number":83,"context_line":"        egress_ovn_rule \u003d self.qos_driver._ovn_rule_qos("}],"source_content_type":"text/x-python","patch_set":9,"id":"db54a397_a806cbab","line":80,"range":{"start_line":77,"start_character":0,"end_line":80,"end_character":68},"updated":"2024-12-12 23:52:24.000000000","message":"nit: `pop()` vs `del`","commit_id":"1bb586162865f13aaf5e5c92d56ec2e5ddde0b35"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"27a82076dbc6838289365cf0fe94816a7008491a","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        if network_type in (constants.TYPE_VLAN, constants.TYPE_FLAT):"},{"line_number":75,"context_line":"            # Remove the egress max-rate and min-rate rules."},{"line_number":76,"context_line":"            try:"},{"line_number":77,"context_line":"                qos_rules[constants.EGRESS_DIRECTION].pop("},{"line_number":78,"context_line":"                    qos_constants.RULE_TYPE_BANDWIDTH_LIMIT, None)"},{"line_number":79,"context_line":"                qos_rules[constants.EGRESS_DIRECTION].pop("},{"line_number":80,"context_line":"                    qos_constants.RULE_TYPE_MINIMUM_BANDWIDTH, None)"},{"line_number":81,"context_line":"            except KeyError:"},{"line_number":82,"context_line":"                pass"},{"line_number":83,"context_line":"        egress_ovn_rule \u003d self.qos_driver._ovn_rule_qos("}],"source_content_type":"text/x-python","patch_set":9,"id":"733ede6e_4f9ff6f3","line":80,"range":{"start_line":77,"start_character":0,"end_line":80,"end_character":68},"in_reply_to":"db54a397_a806cbab","updated":"2024-12-13 12:48:20.000000000","message":"Same comment as before, min-bw or max-bw cannot be in the rules; this could be only a DSCP qos rule.","commit_id":"1bb586162865f13aaf5e5c92d56ec2e5ddde0b35"},{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"41757069f410f697acb30b637a2876ae8e7bfc29","unresolved":true,"context_lines":[{"line_number":118,"context_line":"        # QoS parameters in the LSP.options dictionary."},{"line_number":119,"context_line":"        egress_rules \u003d rules.get(constants.EGRESS_DIRECTION, {})"},{"line_number":120,"context_line":"        qos_rule_lsp \u003d self.qos_driver._ovn_rule_lsp(egress_rules)"},{"line_number":121,"context_line":"        with self.nb_api.transaction(check_error\u003dTrue):"},{"line_number":122,"context_line":"            lsp \u003d self.qos_driver.nb_idl.lsp_get(port_id).execute("},{"line_number":123,"context_line":"                check_error\u003dTrue)"},{"line_number":124,"context_line":"            for param in (\u0027qos_max_rate\u0027, \u0027qos_burst\u0027, \u0027qos_min_rate\u0027):"}],"source_content_type":"text/x-python","patch_set":9,"id":"c72bae67_fbd08a2e","line":121,"updated":"2024-12-12 23:52:24.000000000","message":"Unless I\u0027m misreading, I don\u0027t think this transaction does anything.","commit_id":"1bb586162865f13aaf5e5c92d56ec2e5ddde0b35"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"27a82076dbc6838289365cf0fe94816a7008491a","unresolved":false,"context_lines":[{"line_number":118,"context_line":"        # QoS parameters in the LSP.options dictionary."},{"line_number":119,"context_line":"        egress_rules \u003d rules.get(constants.EGRESS_DIRECTION, {})"},{"line_number":120,"context_line":"        qos_rule_lsp \u003d self.qos_driver._ovn_rule_lsp(egress_rules)"},{"line_number":121,"context_line":"        with self.nb_api.transaction(check_error\u003dTrue):"},{"line_number":122,"context_line":"            lsp \u003d self.qos_driver.nb_idl.lsp_get(port_id).execute("},{"line_number":123,"context_line":"                check_error\u003dTrue)"},{"line_number":124,"context_line":"            for param in (\u0027qos_max_rate\u0027, \u0027qos_burst\u0027, \u0027qos_min_rate\u0027):"}],"source_content_type":"text/x-python","patch_set":9,"id":"a2a17fb6_06c52f80","line":121,"in_reply_to":"c72bae67_fbd08a2e","updated":"2024-12-13 12:48:20.000000000","message":"Right, I think this is a leftover of a previous implementation. Removed.","commit_id":"1bb586162865f13aaf5e5c92d56ec2e5ddde0b35"}],"test-requirements.txt":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"932b2f35674ae6a295f6882c357488f80b867a40","unresolved":true,"context_lines":[{"line_number":9,"context_line":"WebTest\u003e\u003d2.0.27 # MIT"},{"line_number":10,"context_line":"oslotest\u003e\u003d3.2.0 # Apache-2.0"},{"line_number":11,"context_line":"stestr\u003e\u003d1.0.0 # Apache-2.0"},{"line_number":12,"context_line":"ddt\u003e\u003d1.0.1 # MIT"},{"line_number":13,"context_line":"# Needed to run DB commands in virtualenvs"},{"line_number":14,"context_line":"PyMySQL\u003e\u003d0.7.6 # MIT License"},{"line_number":15,"context_line":"doc8\u003e\u003d0.6.0 # Apache-2.0"}],"source_content_type":"text/plain","patch_set":8,"id":"b950bc40_00e5361b","line":12,"updated":"2024-12-06 21:26:46.000000000","message":"Duplicate entry, I\u0027ll just fix to keep this moving","commit_id":"613da3161f1197b7f4b81c34884d6c46c6496d4f"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"a380a15a88ec5cf29c2187306f2d20801740aaa0","unresolved":false,"context_lines":[{"line_number":9,"context_line":"WebTest\u003e\u003d2.0.27 # MIT"},{"line_number":10,"context_line":"oslotest\u003e\u003d3.2.0 # Apache-2.0"},{"line_number":11,"context_line":"stestr\u003e\u003d1.0.0 # Apache-2.0"},{"line_number":12,"context_line":"ddt\u003e\u003d1.0.1 # MIT"},{"line_number":13,"context_line":"# Needed to run DB commands in virtualenvs"},{"line_number":14,"context_line":"PyMySQL\u003e\u003d0.7.6 # MIT License"},{"line_number":15,"context_line":"doc8\u003e\u003d0.6.0 # Apache-2.0"}],"source_content_type":"text/plain","patch_set":8,"id":"a6109408_3b26b3e1","line":12,"in_reply_to":"b950bc40_00e5361b","updated":"2024-12-06 21:27:40.000000000","message":"Done","commit_id":"613da3161f1197b7f4b81c34884d6c46c6496d4f"}]}
