)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"45cf185ef76e50a878f7f0652623ead5036f9feb","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"3cf79ff2_8550e3d7","updated":"2023-05-11 12:01:31.000000000","message":"Looks good. The remaining comments about wording and styling can be fixed in a follow up.","commit_id":"c0d101aa81cff200e1db2a0746598b72e26748e4"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"815cc6cbe063607d671b582929695f1513a4e83c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"84118f32_6846eeb7","updated":"2023-05-09 23:23:51.000000000","message":"recheck post failure all tests passed https://zuul.opendev.org/t/openstack/build/db22622d611a4a5a8d60b56a2f799d19/log/job-output.txt#1641","commit_id":"c0d101aa81cff200e1db2a0746598b72e26748e4"}],"os_vif/tests/functional/internal/command/ip/test_impl_pyroute2.py":[{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"6a5fccfe76c439f87a7517cf35653e73e923c6bb","unresolved":true,"context_lines":[{"line_number":45,"context_line":"        for _ in range(10):"},{"line_number":46,"context_line":"            if self.exist_device(device):"},{"line_number":47,"context_line":"                return"},{"line_number":48,"context_line":"            time.sleep(0.1)"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    def del_device(self, device):"},{"line_number":51,"context_line":"        if self.exist_device(device):"}],"source_content_type":"text/x-python","patch_set":6,"id":"2837b505_32a51014","line":48,"updated":"2023-05-10 14:49:42.000000000","message":"I think waiting a second would have been OK as-well :-)","commit_id":"c0d101aa81cff200e1db2a0746598b72e26748e4"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"a68f91c5de5e031d2c4cfe63f189eee2277afcd6","unresolved":true,"context_lines":[{"line_number":45,"context_line":"        for _ in range(10):"},{"line_number":46,"context_line":"            if self.exist_device(device):"},{"line_number":47,"context_line":"                return"},{"line_number":48,"context_line":"            time.sleep(0.1)"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    def del_device(self, device):"},{"line_number":51,"context_line":"        if self.exist_device(device):"}],"source_content_type":"text/x-python","patch_set":6,"id":"c3091771_c6449893","line":48,"in_reply_to":"2837b505_32a51014","updated":"2023-05-10 15:49:41.000000000","message":"ya i was seeign on test be flaky locally and this seams to fix it.\n\nspecifical setting the mac adress.\n\na second would have been fine i just didnt want to slow down test too much\nin the event it was going too fail.","commit_id":"c0d101aa81cff200e1db2a0746598b72e26748e4"}],"releasenotes/notes/default-qos-policy-for-ovs-26f8806046a59c82.yaml":[{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"6a5fccfe76c439f87a7517cf35653e73e923c6bb","unresolved":true,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"upgrade:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    A new config option has been added to the OpenvSwitch plugin"},{"line_number":5,"context_line":"    ``[os_vif_ovs]default_qos_type``. This option controls"},{"line_number":6,"context_line":"    the Default tc qdisc applied to a kernel interface attached to OpenvSwitch"},{"line_number":7,"context_line":"    on Linux hosts. As of this release, the default tc qdisc is ``linux-noop``"}],"source_content_type":"text/x-yaml","patch_set":6,"id":"0963d56c_90eb9605","line":4,"range":{"start_line":4,"start_character":46,"end_line":4,"end_character":57},"updated":"2023-05-10 14:49:42.000000000","message":"Open vSwitch","commit_id":"c0d101aa81cff200e1db2a0746598b72e26748e4"},{"author":{"_account_id":34271,"name":"Miro Tomaska","display_name":"Miro Tomaska","email":"mtomaska@redhat.com","username":"mtomaska"},"change_message_id":"204327d8e62eae07f4b7f30ba5ad9af4445fb4ac","unresolved":true,"context_lines":[{"line_number":7,"context_line":"    on Linux hosts. As of this release, the default tc qdisc is ``linux-noop``"},{"line_number":8,"context_line":"    other supported values are ``linux-htb``, ``linux-hfsc``,"},{"line_number":9,"context_line":"    ``linux-sfq``, ``linux-codel`` and  ``linux-fq_codel``."},{"line_number":10,"context_line":"    before this release the default qdisc was undefined. older kernels did not"},{"line_number":11,"context_line":"    apply  /proc/sys/net/core/default_qdisc to tap devices. newer kernels such"},{"line_number":12,"context_line":"    as the one found in rhel 9 do. This can significantly impact performance."},{"line_number":13,"context_line":"    See bug https://bugs.launchpad.net/os-vif/+bug/2017868 for more details."}],"source_content_type":"text/x-yaml","patch_set":6,"id":"f0588496_50e04b6a","line":10,"range":{"start_line":10,"start_character":57,"end_line":10,"end_character":58},"updated":"2023-05-11 02:10:24.000000000","message":"Upper case O","commit_id":"c0d101aa81cff200e1db2a0746598b72e26748e4"}],"vif_plug_ovs/ovs.py":[{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"9a173cd5be406dd31cfa2fbd4a1893fe43272a68","unresolved":true,"context_lines":[{"line_number":116,"context_line":"                   is specified."},{"line_number":117,"context_line":"                   Note: this will only be set when a port is first created"},{"line_number":118,"context_line":"                   on the ovs bridge to ensure that the qos type can be"},{"line_number":119,"context_line":"                   managed via neutron for bandwith limiting and other usecases."},{"line_number":120,"context_line":"                   \"\"\"),"},{"line_number":121,"context_line":"    )"},{"line_number":122,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"999d37fb_382a0e12","line":119,"range":{"start_line":119,"start_character":43,"end_line":119,"end_character":51},"updated":"2023-05-03 11:50:30.000000000","message":"s//bandwidth","commit_id":"5cad1883e98cb7ff949e9f80e03fd8e5fdc918ee"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"607bd5f72af5d859fb7d092529e915fdee24a5aa","unresolved":false,"context_lines":[{"line_number":116,"context_line":"                   is specified."},{"line_number":117,"context_line":"                   Note: this will only be set when a port is first created"},{"line_number":118,"context_line":"                   on the ovs bridge to ensure that the qos type can be"},{"line_number":119,"context_line":"                   managed via neutron for bandwith limiting and other usecases."},{"line_number":120,"context_line":"                   \"\"\"),"},{"line_number":121,"context_line":"    )"},{"line_number":122,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"68af0aa7_1836b0d8","line":119,"range":{"start_line":119,"start_character":43,"end_line":119,"end_character":51},"in_reply_to":"999d37fb_382a0e12","updated":"2023-05-09 18:55:42.000000000","message":"Done","commit_id":"5cad1883e98cb7ff949e9f80e03fd8e5fdc918ee"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"9a173cd5be406dd31cfa2fbd4a1893fe43272a68","unresolved":true,"context_lines":[{"line_number":417,"context_line":""},{"line_number":418,"context_line":"        linux_net.delete_bridge(linux_bridge_name, v1_name)"},{"line_number":419,"context_line":""},{"line_number":420,"context_line":"        qos_type \u003d None"},{"line_number":421,"context_line":"        if self.supports_tc_qdisc(vif):"},{"line_number":422,"context_line":"            qos_type \u003d self.config.default_qos_type"},{"line_number":423,"context_line":"        self.ovsdb.delete_ovs_vif_port("}],"source_content_type":"text/x-python","patch_set":1,"id":"be6145ad_25d96aac","line":420,"updated":"2023-05-03 11:50:30.000000000","message":"`qos_type \u003d if self.supports_tc_qdisc(vif): self.config.default_qos_type else None`\n\nPerhaps a helper would be interesting here:\n\n```\ndef tc_qdisc_from_vif(vif):\n  return ... or None\n```\n\nSo this can be passed to the function:\n\n```\n        self.ovsdb.delete_ovs_vif_port(\n            vif.network.bridge, v2_name, qos_type\u003dtc_qdisc_from_vif(vif)\n        )\n```","commit_id":"5cad1883e98cb7ff949e9f80e03fd8e5fdc918ee"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"a6a1679c16a2d78be9569c2a2fc525e1aa448013","unresolved":true,"context_lines":[{"line_number":417,"context_line":""},{"line_number":418,"context_line":"        linux_net.delete_bridge(linux_bridge_name, v1_name)"},{"line_number":419,"context_line":""},{"line_number":420,"context_line":"        qos_type \u003d None"},{"line_number":421,"context_line":"        if self.supports_tc_qdisc(vif):"},{"line_number":422,"context_line":"            qos_type \u003d self.config.default_qos_type"},{"line_number":423,"context_line":"        self.ovsdb.delete_ovs_vif_port("}],"source_content_type":"text/x-python","patch_set":1,"id":"9641f6d2_6958bc15","line":420,"in_reply_to":"be6145ad_25d96aac","updated":"2023-05-03 20:48:49.000000000","message":"ya i can do that.\n\ni need to add more test but i think the current version is now functional\nill factor out the helper in the next version.","commit_id":"5cad1883e98cb7ff949e9f80e03fd8e5fdc918ee"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"40108cf8d541f4fae8b3fc0e0b60e35c187d353e","unresolved":true,"context_lines":[{"line_number":179,"context_line":"            return False"},{"line_number":180,"context_line":"        if sys.platform \u003d\u003d constants.PLATFORM_WIN32:"},{"line_number":181,"context_line":"            return False"},{"line_number":182,"context_line":"        "},{"line_number":183,"context_line":"        return True"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"    def _create_vif_port(self, vif, vif_name, instance_info, **kwargs):"}],"source_content_type":"text/x-python","patch_set":2,"id":"52b2bcbf_ca68ca02","line":182,"updated":"2023-05-03 20:51:03.000000000","message":"... i need to get around to enabling pre-commit in this repo","commit_id":"cbe8a14a201d6c618439e08d91053e136bbd7140"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"607bd5f72af5d859fb7d092529e915fdee24a5aa","unresolved":false,"context_lines":[{"line_number":179,"context_line":"            return False"},{"line_number":180,"context_line":"        if sys.platform \u003d\u003d constants.PLATFORM_WIN32:"},{"line_number":181,"context_line":"            return False"},{"line_number":182,"context_line":"        "},{"line_number":183,"context_line":"        return True"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"    def _create_vif_port(self, vif, vif_name, instance_info, **kwargs):"}],"source_content_type":"text/x-python","patch_set":2,"id":"256605eb_fec1e248","line":182,"in_reply_to":"52b2bcbf_ca68ca02","updated":"2023-05-09 18:55:42.000000000","message":"Ack","commit_id":"cbe8a14a201d6c618439e08d91053e136bbd7140"},{"author":{"_account_id":34271,"name":"Miro Tomaska","display_name":"Miro Tomaska","email":"mtomaska@redhat.com","username":"mtomaska"},"change_message_id":"204327d8e62eae07f4b7f30ba5ad9af4445fb4ac","unresolved":true,"context_lines":[{"line_number":111,"context_line":"                   default\u003d\u0027linux-noop\u0027,"},{"line_number":112,"context_line":"                   help\u003d\"\"\""},{"line_number":113,"context_line":"                   The default qos type to apply to ovs ports."},{"line_number":114,"context_line":"                   linux-noop is the default. ovs will not modify"},{"line_number":115,"context_line":"                   the qdisc on the port if linux-noop is specified."},{"line_number":116,"context_line":"                   This allows operators to manage QOS out of band"},{"line_number":117,"context_line":"                   of OVS. For more information see the ovs man pages"}],"source_content_type":"text/x-python","patch_set":6,"id":"3807b770_a305bab0","line":114,"range":{"start_line":114,"start_character":46,"end_line":114,"end_character":50},"updated":"2023-05-11 02:10:24.000000000","message":"OVS","commit_id":"c0d101aa81cff200e1db2a0746598b72e26748e4"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"6a5fccfe76c439f87a7517cf35653e73e923c6bb","unresolved":true,"context_lines":[{"line_number":179,"context_line":"        return self.config.network_device_mtu"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"    def supports_tc_qdisc(self, vif) -\u003e bool:"},{"line_number":182,"context_line":"        if self._get_vif_datapath_type(vif) !\u003d constants.OVS_DATAPATH_SYSTEM:"},{"line_number":183,"context_line":"            return False"},{"line_number":184,"context_line":"        if sys.platform \u003d\u003d constants.PLATFORM_WIN32:"},{"line_number":185,"context_line":"            return False"}],"source_content_type":"text/x-python","patch_set":6,"id":"f578dacf_00aa0991","line":182,"updated":"2023-05-10 14:49:42.000000000","message":"I would have added condition when we support it\n\n```\nif self._get_vif_datapath_type(vif) \u003d\u003d constants.OVS_DATAPATH_SYSTEM:\n  return True\nreturn False\n```","commit_id":"c0d101aa81cff200e1db2a0746598b72e26748e4"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"a68f91c5de5e031d2c4cfe63f189eee2277afcd6","unresolved":true,"context_lines":[{"line_number":179,"context_line":"        return self.config.network_device_mtu"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"    def supports_tc_qdisc(self, vif) -\u003e bool:"},{"line_number":182,"context_line":"        if self._get_vif_datapath_type(vif) !\u003d constants.OVS_DATAPATH_SYSTEM:"},{"line_number":183,"context_line":"            return False"},{"line_number":184,"context_line":"        if sys.platform \u003d\u003d constants.PLATFORM_WIN32:"},{"line_number":185,"context_line":"            return False"}],"source_content_type":"text/x-python","patch_set":6,"id":"24ff7166_98912ae0","line":182,"in_reply_to":"f578dacf_00aa0991","updated":"2023-05-10 15:49:41.000000000","message":"i did it this way because i could not recall if system worked on windows.\ni could have done the windows check first and then the datapath check to avoid the negation however. if i need to respin i can make that change.","commit_id":"c0d101aa81cff200e1db2a0746598b72e26748e4"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"6a5fccfe76c439f87a7517cf35653e73e923c6bb","unresolved":true,"context_lines":[{"line_number":203,"context_line":"        if self.config.isolate_vif:"},{"line_number":204,"context_line":"            kwargs[\u0027tag\u0027] \u003d constants.DEAD_VLAN"},{"line_number":205,"context_line":"        qos_type \u003d self._get_qos_type(vif)"},{"line_number":206,"context_line":"        if qos_type is not None:"},{"line_number":207,"context_line":"            # NOTE(sean-k-mooney): If the port is not already created"},{"line_number":208,"context_line":"            # on the bridge we need to set the default qos type to"},{"line_number":209,"context_line":"            # ensure that the port is created with the correct qos"}],"source_content_type":"text/x-python","patch_set":6,"id":"8039ed11_8009cc84","line":206,"updated":"2023-05-10 14:49:42.000000000","message":"Ok so basically we want doing this only for new ports.","commit_id":"c0d101aa81cff200e1db2a0746598b72e26748e4"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"a68f91c5de5e031d2c4cfe63f189eee2277afcd6","unresolved":true,"context_lines":[{"line_number":203,"context_line":"        if self.config.isolate_vif:"},{"line_number":204,"context_line":"            kwargs[\u0027tag\u0027] \u003d constants.DEAD_VLAN"},{"line_number":205,"context_line":"        qos_type \u003d self._get_qos_type(vif)"},{"line_number":206,"context_line":"        if qos_type is not None:"},{"line_number":207,"context_line":"            # NOTE(sean-k-mooney): If the port is not already created"},{"line_number":208,"context_line":"            # on the bridge we need to set the default qos type to"},{"line_number":209,"context_line":"            # ensure that the port is created with the correct qos"}],"source_content_type":"text/x-python","patch_set":6,"id":"154caa7c_be858c57","line":206,"in_reply_to":"8039ed11_8009cc84","updated":"2023-05-10 15:49:41.000000000","message":"ya so if we restart the nova-compute agent (which will call plug vifs on every port)\nwe dont want to overwite the qos policy on a port since it may have been updated by neutron.\n\nso to avoid that we will only ever set it if the port does not exist\n\nso yes \"basically we want doing this only for new ports.\"","commit_id":"c0d101aa81cff200e1db2a0746598b72e26748e4"}],"vif_plug_ovs/ovsdb/impl_idl.py":[{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"6a5fccfe76c439f87a7517cf35653e73e923c6bb","unresolved":true,"context_lines":[{"line_number":48,"context_line":"    This class provides an OVSDB IDL (Open vSwitch Database Interface"},{"line_number":49,"context_line":"    Definition Language) interface to the OVS back-end."},{"line_number":50,"context_line":"    \"\"\""},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    def __init__(self, conn):"},{"line_number":53,"context_line":"        vlog.use_python_logger()"},{"line_number":54,"context_line":"        super(NeutronOvsdbIdl, self).__init__(conn)"}],"source_content_type":"text/x-python","patch_set":6,"id":"302e1bb9_eaf5cb93","line":51,"updated":"2023-05-10 14:49:42.000000000","message":"nit: not needed","commit_id":"c0d101aa81cff200e1db2a0746598b72e26748e4"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"a68f91c5de5e031d2c4cfe63f189eee2277afcd6","unresolved":true,"context_lines":[{"line_number":48,"context_line":"    This class provides an OVSDB IDL (Open vSwitch Database Interface"},{"line_number":49,"context_line":"    Definition Language) interface to the OVS back-end."},{"line_number":50,"context_line":"    \"\"\""},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    def __init__(self, conn):"},{"line_number":53,"context_line":"        vlog.use_python_logger()"},{"line_number":54,"context_line":"        super(NeutronOvsdbIdl, self).__init__(conn)"}],"source_content_type":"text/x-python","patch_set":6,"id":"87e5cd50_87dfb8a2","line":51,"in_reply_to":"302e1bb9_eaf5cb93","updated":"2023-05-10 15:49:41.000000000","message":"you are correct i ran autopep8 on this file which is why it was updated.\n\nthere is a specific additional pep regarding to documentaiton style that recommends always have a blank line after doc string. we do not enforece currently but im planning to add pre commit supprot to os-vif and autopep8 like we have on nova in a follow up pr.","commit_id":"c0d101aa81cff200e1db2a0746598b72e26748e4"}],"vif_plug_ovs/ovsdb/ovsdb_lib.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"3a1a27f4552697ccce068e0b7b54f332dd118dd7","unresolved":true,"context_lines":[{"line_number":201,"context_line":"            )"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"    def port_exists(self, port_name, bridge):"},{"line_number":204,"context_line":"        return port_name in self.list_ports(bridge)"},{"line_number":205,"context_line":"    "},{"line_number":206,"context_line":"    def qos_exists(self, qos_id):"},{"line_number":207,"context_line":"        return len("}],"source_content_type":"text/x-python","patch_set":1,"id":"179e9c26_e0a7d4ac","line":204,"range":{"start_line":204,"start_character":28,"end_line":204,"end_character":43},"updated":"2023-05-01 00:01:11.000000000","message":"self.ovsdb.list_ports(bridge)","commit_id":"5cad1883e98cb7ff949e9f80e03fd8e5fdc918ee"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"3a1a27f4552697ccce068e0b7b54f332dd118dd7","unresolved":true,"context_lines":[{"line_number":206,"context_line":"    def qos_exists(self, qos_id):"},{"line_number":207,"context_line":"        return len("},{"line_number":208,"context_line":"            self.ovsdb.db_list("},{"line_number":209,"context_line":"                \u0027Qos\u0027, records\u003d[qos_id], if_exists\u003dTrue"},{"line_number":210,"context_line":"            ).execute()"},{"line_number":211,"context_line":"        ) \u003e 0"},{"line_number":212,"context_line":"    "}],"source_content_type":"text/x-python","patch_set":1,"id":"e2e39081_d342997b","line":209,"range":{"start_line":209,"start_character":17,"end_line":209,"end_character":20},"updated":"2023-05-01 00:01:11.000000000","message":"QoS","commit_id":"5cad1883e98cb7ff949e9f80e03fd8e5fdc918ee"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"a6a1679c16a2d78be9569c2a2fc525e1aa448013","unresolved":true,"context_lines":[{"line_number":206,"context_line":"    def qos_exists(self, qos_id):"},{"line_number":207,"context_line":"        return len("},{"line_number":208,"context_line":"            self.ovsdb.db_list("},{"line_number":209,"context_line":"                \u0027Qos\u0027, records\u003d[qos_id], if_exists\u003dTrue"},{"line_number":210,"context_line":"            ).execute()"},{"line_number":211,"context_line":"        ) \u003e 0"},{"line_number":212,"context_line":"    "}],"source_content_type":"text/x-python","patch_set":1,"id":"530aafe6_78265d06","line":209,"range":{"start_line":209,"start_character":17,"end_line":209,"end_character":20},"in_reply_to":"7926db79_8ef94565","updated":"2023-05-03 20:48:49.000000000","message":"ya i can do that","commit_id":"5cad1883e98cb7ff949e9f80e03fd8e5fdc918ee"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"9a173cd5be406dd31cfa2fbd4a1893fe43272a68","unresolved":true,"context_lines":[{"line_number":206,"context_line":"    def qos_exists(self, qos_id):"},{"line_number":207,"context_line":"        return len("},{"line_number":208,"context_line":"            self.ovsdb.db_list("},{"line_number":209,"context_line":"                \u0027Qos\u0027, records\u003d[qos_id], if_exists\u003dTrue"},{"line_number":210,"context_line":"            ).execute()"},{"line_number":211,"context_line":"        ) \u003e 0"},{"line_number":212,"context_line":"    "}],"source_content_type":"text/x-python","patch_set":1,"id":"7926db79_8ef94565","line":209,"range":{"start_line":209,"start_character":17,"end_line":209,"end_character":20},"in_reply_to":"e2e39081_d342997b","updated":"2023-05-03 11:50:30.000000000","message":"Perhaps declaring a constant in the header?\n\n```\nOVS_QOS \u003d \u0027QoS\u0027\n```","commit_id":"5cad1883e98cb7ff949e9f80e03fd8e5fdc918ee"}]}
