)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"91b3fb3c3ec4354627f4920638f5ae14aeefaf4e","unresolved":false,"context_lines":[{"line_number":10,"context_line":"IP QoS extension."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"The OVN client, using the existing QoS extension, will retrieve"},{"line_number":13,"context_line":"the QoS rules attached to each floating IP, the router were the"},{"line_number":14,"context_line":"floating IP lives and the router gateway port. The QoS rules"},{"line_number":15,"context_line":"will be applied on the router gateway port."},{"line_number":16,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"ff570b3c_d6f715f5","line":13,"range":{"start_line":13,"start_character":55,"end_line":13,"end_character":59},"updated":"2020-05-12 07:58:11.000000000","message":"where","commit_id":"deceddb60eea73af6221fa1ebdec79b2c76b0dba"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"10aba8947bb71b6f5b83f6f8d535f1d7e1c4f92a","unresolved":false,"context_lines":[{"line_number":10,"context_line":"IP QoS extension."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"The OVN client, using the existing QoS extension, will retrieve"},{"line_number":13,"context_line":"the QoS rules attached to each floating IP, the router were the"},{"line_number":14,"context_line":"floating IP lives and the router gateway port. The QoS rules"},{"line_number":15,"context_line":"will be applied on the router gateway port."},{"line_number":16,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"ff570b3c_0503e6b9","line":13,"range":{"start_line":13,"start_character":55,"end_line":13,"end_character":59},"in_reply_to":"ff570b3c_d6f715f5","updated":"2020-05-14 14:08:10.000000000","message":"Done","commit_id":"deceddb60eea73af6221fa1ebdec79b2c76b0dba"}],"neutron/common/ovn/extensions.py":[{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"8d15ba9b6dc5aee0874e0c26dfb32292168b2692","unresolved":false,"context_lines":[{"line_number":46,"context_line":"    \u0027provider\u0027,"},{"line_number":47,"context_line":"    \u0027port-resource-request\u0027,"},{"line_number":48,"context_line":"    \u0027qos\u0027,"},{"line_number":49,"context_line":"    \u0027qos-bw-minimum-ingress\u0027,"},{"line_number":50,"context_line":"    \u0027qos-bw-limit-direction\u0027,"},{"line_number":51,"context_line":"    \u0027qos-default\u0027,"},{"line_number":52,"context_line":"    \u0027qos-rules-alias\u0027"}],"source_content_type":"text/x-python","patch_set":9,"id":"ff570b3c_271a967c","line":49,"range":{"start_line":49,"start_character":4,"end_line":49,"end_character":29},"updated":"2020-05-12 14:38:55.000000000","message":"Do we support this one out of the box?","commit_id":"deceddb60eea73af6221fa1ebdec79b2c76b0dba"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"10aba8947bb71b6f5b83f6f8d535f1d7e1c4f92a","unresolved":false,"context_lines":[{"line_number":46,"context_line":"    \u0027provider\u0027,"},{"line_number":47,"context_line":"    \u0027port-resource-request\u0027,"},{"line_number":48,"context_line":"    \u0027qos\u0027,"},{"line_number":49,"context_line":"    \u0027qos-bw-minimum-ingress\u0027,"},{"line_number":50,"context_line":"    \u0027qos-bw-limit-direction\u0027,"},{"line_number":51,"context_line":"    \u0027qos-default\u0027,"},{"line_number":52,"context_line":"    \u0027qos-rules-alias\u0027"}],"source_content_type":"text/x-python","patch_set":9,"id":"ff570b3c_1b88581d","line":49,"range":{"start_line":49,"start_character":4,"end_line":49,"end_character":29},"in_reply_to":"ff570b3c_271a967c","updated":"2020-05-14 14:08:10.000000000","message":"Good point. We can support the extension, but we can\u0027t implement it now in the backend. I\u0027ll remove it because it makes no sense.","commit_id":"deceddb60eea73af6221fa1ebdec79b2c76b0dba"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"319988bac27aa42e0469d1988c71ccb8658cff88","unresolved":false,"context_lines":[{"line_number":23,"context_line":"    \u0027ext-gw-mode\u0027,"},{"line_number":24,"context_line":"    \u0027fip-port-details\u0027,"},{"line_number":25,"context_line":"    \u0027pagination\u0027,"},{"line_number":26,"context_line":"    \u0027qos-fip\u0027,"},{"line_number":27,"context_line":"    \u0027sorting\u0027,"},{"line_number":28,"context_line":"    \u0027project-id\u0027,"},{"line_number":29,"context_line":"    \u0027dns-integration\u0027,"}],"source_content_type":"text/x-python","patch_set":13,"id":"bf51134e_d6f48af3","line":26,"updated":"2020-06-26 15:59:23.000000000","message":"there is no n-lib API definition for this one or a constant in Neutron","commit_id":"5aaa5e0a65cbae020c01d86aedb0505ec2225ed9"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"aa54313323fe75469f46c95fe92b367770cca61a","unresolved":false,"context_lines":[{"line_number":49,"context_line":"    \u0027qos-bw-limit-direction\u0027,"},{"line_number":50,"context_line":"    \u0027qos-default\u0027,"},{"line_number":51,"context_line":"    \u0027qos-rules-alias\u0027"},{"line_number":52,"context_line":"    \u0027qos-rule-type-details\u0027,"},{"line_number":53,"context_line":"    \u0027quotas\u0027,"},{"line_number":54,"context_line":"    \u0027rbac-address-scope\u0027,"},{"line_number":55,"context_line":"    \u0027rbac-policies\u0027,"}],"source_content_type":"text/x-python","patch_set":13,"id":"bf51134e_c1420dab","line":52,"updated":"2020-06-25 12:57:52.000000000","message":"nit: We should start using the ALIAS constants (from neutron-lib) for the extensions names here","commit_id":"5aaa5e0a65cbae020c01d86aedb0505ec2225ed9"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"319988bac27aa42e0469d1988c71ccb8658cff88","unresolved":false,"context_lines":[{"line_number":49,"context_line":"    \u0027qos-bw-limit-direction\u0027,"},{"line_number":50,"context_line":"    \u0027qos-default\u0027,"},{"line_number":51,"context_line":"    \u0027qos-rules-alias\u0027"},{"line_number":52,"context_line":"    \u0027qos-rule-type-details\u0027,"},{"line_number":53,"context_line":"    \u0027quotas\u0027,"},{"line_number":54,"context_line":"    \u0027rbac-address-scope\u0027,"},{"line_number":55,"context_line":"    \u0027rbac-policies\u0027,"}],"source_content_type":"text/x-python","patch_set":13,"id":"bf51134e_7662ded9","line":52,"in_reply_to":"bf51134e_c1420dab","updated":"2020-06-26 15:59:23.000000000","message":"yes, that\u0027s a must here","commit_id":"5aaa5e0a65cbae020c01d86aedb0505ec2225ed9"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"0c90135fbf4e2ca94f6ce2b68b7142e26847bf59","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    \u0027ext-gw-mode\u0027,"},{"line_number":36,"context_line":"    \u0027fip-port-details\u0027,"},{"line_number":37,"context_line":"    \u0027pagination\u0027,"},{"line_number":38,"context_line":"    \u0027qos-fip\u0027,"},{"line_number":39,"context_line":"    \u0027sorting\u0027,"},{"line_number":40,"context_line":"    \u0027project-id\u0027,"},{"line_number":41,"context_line":"    \u0027dns-integration\u0027,"}],"source_content_type":"text/x-python","patch_set":24,"id":"9f560f44_a9d4dfbe","line":38,"range":{"start_line":38,"start_character":4,"end_line":38,"end_character":14},"updated":"2020-08-12 12:14:29.000000000","message":"no alias for this ?","commit_id":"064a5567590d6d982a82d57fc4572b2633fbd613"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"e76b1f5eb75026bd2b9b0867782e7674c573840b","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    \u0027ext-gw-mode\u0027,"},{"line_number":36,"context_line":"    \u0027fip-port-details\u0027,"},{"line_number":37,"context_line":"    \u0027pagination\u0027,"},{"line_number":38,"context_line":"    \u0027qos-fip\u0027,"},{"line_number":39,"context_line":"    \u0027sorting\u0027,"},{"line_number":40,"context_line":"    \u0027project-id\u0027,"},{"line_number":41,"context_line":"    \u0027dns-integration\u0027,"}],"source_content_type":"text/x-python","patch_set":24,"id":"9f560f44_e40f7a2b","line":38,"range":{"start_line":38,"start_character":4,"end_line":38,"end_character":14},"in_reply_to":"9f560f44_a9d4dfbe","updated":"2020-08-24 10:00:15.000000000","message":"no, that was never defined","commit_id":"064a5567590d6d982a82d57fc4572b2633fbd613"}],"neutron/common/ovn/utils.py":[{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"8d15ba9b6dc5aee0874e0c26dfb32292168b2692","unresolved":false,"context_lines":[{"line_number":64,"context_line":"    return constants.LRP_PREFIX + \u0027%s\u0027 % id"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"def ovn_cr_lrouter_port_name(_id):"},{"line_number":68,"context_line":"    # The name of the OVN chassisredirect lrouter port entry will be"},{"line_number":69,"context_line":"    # cr-lrp-\u003cUUID\u003e"},{"line_number":70,"context_line":"    return \u0027cr-lrp-%s\u0027 % _id"}],"source_content_type":"text/x-python","patch_set":9,"id":"ff570b3c_a70d0640","line":67,"range":{"start_line":67,"start_character":4,"end_line":67,"end_character":28},"updated":"2020-05-12 14:38:55.000000000","message":"heh, finally it happened :D","commit_id":"deceddb60eea73af6221fa1ebdec79b2c76b0dba"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"10aba8947bb71b6f5b83f6f8d535f1d7e1c4f92a","unresolved":false,"context_lines":[{"line_number":64,"context_line":"    return constants.LRP_PREFIX + \u0027%s\u0027 % id"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"def ovn_cr_lrouter_port_name(_id):"},{"line_number":68,"context_line":"    # The name of the OVN chassisredirect lrouter port entry will be"},{"line_number":69,"context_line":"    # cr-lrp-\u003cUUID\u003e"},{"line_number":70,"context_line":"    return \u0027cr-lrp-%s\u0027 % _id"}],"source_content_type":"text/x-python","patch_set":9,"id":"ff570b3c_fb8f6420","line":67,"range":{"start_line":67,"start_character":4,"end_line":67,"end_character":28},"in_reply_to":"ff570b3c_a70d0640","updated":"2020-05-14 14:08:10.000000000","message":":)","commit_id":"deceddb60eea73af6221fa1ebdec79b2c76b0dba"}],"neutron/db/l3_db.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8069d6b7c38bc387c0f8d77bd21e0350040d4549","unresolved":false,"context_lines":[{"line_number":36,"context_line":"from neutron_lib.plugins import utils as plugin_utils"},{"line_number":37,"context_line":"from neutron_lib import rpc as n_rpc"},{"line_number":38,"context_line":"from neutron_lib.services import base as base_services"},{"line_number":39,"context_line":"from oslo_config import cfg"},{"line_number":40,"context_line":"from oslo_log import log as logging"},{"line_number":41,"context_line":"from oslo_utils import uuidutils"},{"line_number":42,"context_line":"from sqlalchemy import orm"}],"source_content_type":"text/x-python","patch_set":4,"id":"1f493fa4_7d79bc2d","line":39,"updated":"2020-05-05 19:57:56.000000000","message":"pep8: F401 \u0027oslo_config.cfg\u0027 imported but unused","commit_id":"20d0745978b02088589cf8e723d44676f11bb2cf"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8069d6b7c38bc387c0f8d77bd21e0350040d4549","unresolved":false,"context_lines":[{"line_number":48,"context_line":"from neutron.common import utils"},{"line_number":49,"context_line":"from neutron.db import _utils as db_utils"},{"line_number":50,"context_line":"from neutron.db.models import l3 as l3_models"},{"line_number":51,"context_line":"from neutron.db import l3_fip_qos"},{"line_number":52,"context_line":"from neutron.db import models_v2"},{"line_number":53,"context_line":"from neutron.db import standardattrdescription_db as st_attr"},{"line_number":54,"context_line":"from neutron.extensions import l3"}],"source_content_type":"text/x-python","patch_set":4,"id":"1f493fa4_dd76103f","line":51,"updated":"2020-05-05 19:57:56.000000000","message":"pep8: F401 \u0027neutron.db.l3_fip_qos\u0027 imported but unused","commit_id":"20d0745978b02088589cf8e723d44676f11bb2cf"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8069d6b7c38bc387c0f8d77bd21e0350040d4549","unresolved":false,"context_lines":[{"line_number":48,"context_line":"from neutron.common import utils"},{"line_number":49,"context_line":"from neutron.db import _utils as db_utils"},{"line_number":50,"context_line":"from neutron.db.models import l3 as l3_models"},{"line_number":51,"context_line":"from neutron.db import l3_fip_qos"},{"line_number":52,"context_line":"from neutron.db import models_v2"},{"line_number":53,"context_line":"from neutron.db import standardattrdescription_db as st_attr"},{"line_number":54,"context_line":"from neutron.extensions import l3"}],"source_content_type":"text/x-python","patch_set":4,"id":"1f493fa4_bd73444d","line":51,"updated":"2020-05-05 19:57:56.000000000","message":"pep8: H306  imports not in alphabetical order (neutron.db.models.l3, neutron.db.l3_fip_qos)","commit_id":"20d0745978b02088589cf8e723d44676f11bb2cf"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8069d6b7c38bc387c0f8d77bd21e0350040d4549","unresolved":false,"context_lines":[{"line_number":57,"context_line":"from neutron.objects import port_forwarding"},{"line_number":58,"context_line":"from neutron.objects import ports as port_obj"},{"line_number":59,"context_line":"from neutron.objects import router as l3_obj"},{"line_number":60,"context_line":"from neutron.services.qos.drivers.ovn import driver as qos_service_driver"},{"line_number":61,"context_line":"from neutron import worker as neutron_worker"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"LOG \u003d logging.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":4,"id":"1f493fa4_1d8eb826","line":60,"updated":"2020-05-05 19:57:56.000000000","message":"pep8: F401 \u0027neutron.services.qos.drivers.ovn.driver as qos_service_driver\u0027 imported but unused","commit_id":"20d0745978b02088589cf8e723d44676f11bb2cf"}],"neutron/extensions/qos_fip.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8069d6b7c38bc387c0f8d77bd21e0350040d4549","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        return \"2017-07-20T00:00:00-00:00\""},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    def get_required_extensions(self):"},{"line_number":51,"context_line":"        #return [\"router\", \"qos\"]"},{"line_number":52,"context_line":"        return [\"router\", \"qos\"]"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    def get_extended_resources(self, version):"}],"source_content_type":"text/x-python","patch_set":4,"id":"1f493fa4_5d984069","line":51,"updated":"2020-05-05 19:57:56.000000000","message":"pep8: E265 block comment should start with \u0027# \u0027","commit_id":"20d0745978b02088589cf8e723d44676f11bb2cf"}],"neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/api.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"c6cd9646d00dd0f6913b5e5402c5d05400509faa","unresolved":false,"context_lines":[{"line_number":531,"context_line":"        :returns: The NAT rule row or None"},{"line_number":532,"context_line":"        \"\"\""},{"line_number":533,"context_line":""},{"line_number":534,"context_line":"    ############################################################################"},{"line_number":535,"context_line":"    # RAH"},{"line_number":536,"context_line":"    @abc.abstractmethod"},{"line_number":537,"context_line":"    def get_floatingip_qos_rules(self, fip_id):"}],"source_content_type":"text/x-python","patch_set":1,"id":"1f493fa4_dafd57b2","line":534,"updated":"2020-04-23 22:06:01.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"461c6eaa1520679649b4357df7d6b907ac6f8ea4"}],"neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/commands.py":[{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"91b3fb3c3ec4354627f4920638f5ae14aeefaf4e","unresolved":false,"context_lines":[{"line_number":1159,"context_line":"        setattr(lsp, \u0027options\u0027, options)"},{"line_number":1160,"context_line":""},{"line_number":1161,"context_line":""},{"line_number":1162,"context_line":"class QoSFipDelCommand(command.BaseCommand):"},{"line_number":1163,"context_line":"    def __init__(self, api, lswitch, floatingip_id, if_exists):"},{"line_number":1164,"context_line":"        super(QoSFipDelCommand, self).__init__(api)"},{"line_number":1165,"context_line":"        self.lswitch \u003d lswitch"}],"source_content_type":"text/x-python","patch_set":9,"id":"ff570b3c_d318c782","line":1162,"range":{"start_line":1162,"start_character":0,"end_line":1162,"end_character":44},"updated":"2020-05-12 07:58:11.000000000","message":"I\u0027m ok with this, we\u0027re however trying to add the new commands into ovsdbapp instead. This has the inconvenience that you need to add a depends-on and eventually wait for a new release of it... so truth is that sometimes we do this for convenience as well :(\n\nPerhaps you want to add the command to ovsdbapp as well and probably remove it from here later?\n\nThe added benefit from this is that some other consumers from ovsdbapp (e.g oVirt) can take advantage of it too :)","commit_id":"deceddb60eea73af6221fa1ebdec79b2c76b0dba"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"10aba8947bb71b6f5b83f6f8d535f1d7e1c4f92a","unresolved":false,"context_lines":[{"line_number":1159,"context_line":"        setattr(lsp, \u0027options\u0027, options)"},{"line_number":1160,"context_line":""},{"line_number":1161,"context_line":""},{"line_number":1162,"context_line":"class QoSFipDelCommand(command.BaseCommand):"},{"line_number":1163,"context_line":"    def __init__(self, api, lswitch, floatingip_id, if_exists):"},{"line_number":1164,"context_line":"        super(QoSFipDelCommand, self).__init__(api)"},{"line_number":1165,"context_line":"        self.lswitch \u003d lswitch"}],"source_content_type":"text/x-python","patch_set":9,"id":"ff570b3c_c521ee4f","line":1162,"range":{"start_line":1162,"start_character":0,"end_line":1162,"end_character":44},"in_reply_to":"ff570b3c_adda07e6","updated":"2020-05-14 14:08:10.000000000","message":"For sure, I\u0027ll propose a patch to ovsdbapp.\n\nActually I started with this implementation... and then I forgot to move it!\n\nDone: https://review.opendev.org/#/c/727847/","commit_id":"deceddb60eea73af6221fa1ebdec79b2c76b0dba"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"8d15ba9b6dc5aee0874e0c26dfb32292168b2692","unresolved":false,"context_lines":[{"line_number":1159,"context_line":"        setattr(lsp, \u0027options\u0027, options)"},{"line_number":1160,"context_line":""},{"line_number":1161,"context_line":""},{"line_number":1162,"context_line":"class QoSFipDelCommand(command.BaseCommand):"},{"line_number":1163,"context_line":"    def __init__(self, api, lswitch, floatingip_id, if_exists):"},{"line_number":1164,"context_line":"        super(QoSFipDelCommand, self).__init__(api)"},{"line_number":1165,"context_line":"        self.lswitch \u003d lswitch"}],"source_content_type":"text/x-python","patch_set":9,"id":"ff570b3c_adda07e6","line":1162,"range":{"start_line":1162,"start_character":0,"end_line":1162,"end_character":44},"in_reply_to":"ff570b3c_d318c782","updated":"2020-05-12 14:38:55.000000000","message":"I believe we discussed it earlier with Rodolfo to add this command here and also in ovsdbapp. So ++ the idea.\n\nProbably this was the intention, but it is missing the TODO note :)","commit_id":"deceddb60eea73af6221fa1ebdec79b2c76b0dba"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"8d15ba9b6dc5aee0874e0c26dfb32292168b2692","unresolved":false,"context_lines":[{"line_number":1160,"context_line":""},{"line_number":1161,"context_line":""},{"line_number":1162,"context_line":"class QoSFipDelCommand(command.BaseCommand):"},{"line_number":1163,"context_line":"    def __init__(self, api, lswitch, floatingip_id, if_exists):"},{"line_number":1164,"context_line":"        super(QoSFipDelCommand, self).__init__(api)"},{"line_number":1165,"context_line":"        self.lswitch \u003d lswitch"},{"line_number":1166,"context_line":"        self.floatingip_id \u003d floatingip_id"}],"source_content_type":"text/x-python","patch_set":9,"id":"ff570b3c_38aab7d3","line":1163,"range":{"start_line":1163,"start_character":37,"end_line":1163,"end_character":50},"updated":"2020-05-12 14:38:55.000000000","message":"fip_id?","commit_id":"deceddb60eea73af6221fa1ebdec79b2c76b0dba"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"10aba8947bb71b6f5b83f6f8d535f1d7e1c4f92a","unresolved":false,"context_lines":[{"line_number":1160,"context_line":""},{"line_number":1161,"context_line":""},{"line_number":1162,"context_line":"class QoSFipDelCommand(command.BaseCommand):"},{"line_number":1163,"context_line":"    def __init__(self, api, lswitch, floatingip_id, if_exists):"},{"line_number":1164,"context_line":"        super(QoSFipDelCommand, self).__init__(api)"},{"line_number":1165,"context_line":"        self.lswitch \u003d lswitch"},{"line_number":1166,"context_line":"        self.floatingip_id \u003d floatingip_id"}],"source_content_type":"text/x-python","patch_set":9,"id":"ff570b3c_e516b2f1","line":1163,"range":{"start_line":1163,"start_character":37,"end_line":1163,"end_character":50},"in_reply_to":"ff570b3c_38aab7d3","updated":"2020-05-14 14:08:10.000000000","message":"yes, better to use a shorter var name.","commit_id":"deceddb60eea73af6221fa1ebdec79b2c76b0dba"}],"neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/extensions/qos.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"c6cd9646d00dd0f6913b5e5402c5d05400509faa","unresolved":false,"context_lines":[{"line_number":253,"context_line":"        return updated_port_ids"},{"line_number":254,"context_line":""},{"line_number":255,"context_line":""},{"line_number":256,"context_line":"    def create_floatingip(self, txn, floatingip):"},{"line_number":257,"context_line":"        self.update_floatingip(txn, floatingip)"},{"line_number":258,"context_line":""},{"line_number":259,"context_line":"    def update_floatingip(self, txn, floatingip, original_floatingip\u003dNone,"}],"source_content_type":"text/x-python","patch_set":1,"id":"1f493fa4_3a2efb42","line":256,"updated":"2020-04-23 22:06:01.000000000","message":"pep8: E303 too many blank lines (2)","commit_id":"461c6eaa1520679649b4357df7d6b907ac6f8ea4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"c6cd9646d00dd0f6913b5e5402c5d05400509faa","unresolved":false,"context_lines":[{"line_number":282,"context_line":""},{"line_number":283,"context_line":""},{"line_number":284,"context_line":""},{"line_number":285,"context_line":"        if qos_policy_id \u003d\u003d original_qos_policy_id:"},{"line_number":286,"context_line":"            return"},{"line_number":287,"context_line":""},{"line_number":288,"context_line":"        if original_qos_policy_id:"}],"source_content_type":"text/x-python","patch_set":1,"id":"1f493fa4_1a317fa3","line":285,"updated":"2020-04-23 22:06:01.000000000","message":"pep8: E303 too many blank lines (7)","commit_id":"461c6eaa1520679649b4357df7d6b907ac6f8ea4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"c6cd9646d00dd0f6913b5e5402c5d05400509faa","unresolved":false,"context_lines":[{"line_number":292,"context_line":""},{"line_number":293,"context_line":""},{"line_number":294,"context_line":""},{"line_number":295,"context_line":"        if router_id and qos_policy_id:"},{"line_number":296,"context_line":""},{"line_number":297,"context_line":""},{"line_number":298,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"1f493fa4_7a288333","line":295,"updated":"2020-04-23 22:06:01.000000000","message":"pep8: E303 too many blank lines (4)","commit_id":"461c6eaa1520679649b4357df7d6b907ac6f8ea4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"c6cd9646d00dd0f6913b5e5402c5d05400509faa","unresolved":false,"context_lines":[{"line_number":298,"context_line":""},{"line_number":299,"context_line":""},{"line_number":300,"context_line":""},{"line_number":301,"context_line":"        if (floatingip.get(\u0027router_id\u0027) and"},{"line_number":302,"context_line":"                floatingip.get(\u0027qos_policy_id\u0027)):"},{"line_number":303,"context_line":"            ovn_qos \u003d self._plugin_l3._ovn_client._qos_driver.get_fip_qos_rules("},{"line_number":304,"context_line":"                fip[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":1,"id":"1f493fa4_5a2b072f","line":301,"updated":"2020-04-23 22:06:01.000000000","message":"pep8: E112 expected an indented block","commit_id":"461c6eaa1520679649b4357df7d6b907ac6f8ea4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"c6cd9646d00dd0f6913b5e5402c5d05400509faa","unresolved":false,"context_lines":[{"line_number":298,"context_line":""},{"line_number":299,"context_line":""},{"line_number":300,"context_line":""},{"line_number":301,"context_line":"        if (floatingip.get(\u0027router_id\u0027) and"},{"line_number":302,"context_line":"                floatingip.get(\u0027qos_policy_id\u0027)):"},{"line_number":303,"context_line":"            ovn_qos \u003d self._plugin_l3._ovn_client._qos_driver.get_fip_qos_rules("},{"line_number":304,"context_line":"                fip[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":1,"id":"1f493fa4_ba216b50","line":301,"updated":"2020-04-23 22:06:01.000000000","message":"pep8: E303 too many blank lines (5)","commit_id":"461c6eaa1520679649b4357df7d6b907ac6f8ea4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"c6cd9646d00dd0f6913b5e5402c5d05400509faa","unresolved":false,"context_lines":[{"line_number":298,"context_line":""},{"line_number":299,"context_line":""},{"line_number":300,"context_line":""},{"line_number":301,"context_line":"        if (floatingip.get(\u0027router_id\u0027) and"},{"line_number":302,"context_line":"                floatingip.get(\u0027qos_policy_id\u0027)):"},{"line_number":303,"context_line":"            ovn_qos \u003d self._plugin_l3._ovn_client._qos_driver.get_fip_qos_rules("},{"line_number":304,"context_line":"                fip[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":1,"id":"1f493fa4_9a1c6f14","line":301,"updated":"2020-04-23 22:06:01.000000000","message":"pep8: E901 IndentationError: expected an indented block","commit_id":"461c6eaa1520679649b4357df7d6b907ac6f8ea4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"c6cd9646d00dd0f6913b5e5402c5d05400509faa","unresolved":false,"context_lines":[{"line_number":300,"context_line":""},{"line_number":301,"context_line":"        if (floatingip.get(\u0027router_id\u0027) and"},{"line_number":302,"context_line":"                floatingip.get(\u0027qos_policy_id\u0027)):"},{"line_number":303,"context_line":"            ovn_qos \u003d self._plugin_l3._ovn_client._qos_driver.get_fip_qos_rules("},{"line_number":304,"context_line":"                fip[\u0027id\u0027])"},{"line_number":305,"context_line":"            self._l3plugin._ovn_client._delete_floatingip_qos(ovn_qos)"},{"line_number":306,"context_line":"            self._l3plugin._ovn_client._create_or_update_floatingip_qos("}],"source_content_type":"text/x-python","patch_set":1,"id":"1f493fa4_fa1bf317","line":303,"updated":"2020-04-23 22:06:01.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"461c6eaa1520679649b4357df7d6b907ac6f8ea4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"c6cd9646d00dd0f6913b5e5402c5d05400509faa","unresolved":false,"context_lines":[{"line_number":337,"context_line":"    #     synthetic_fields \u003d [\u0027dns\u0027]"},{"line_number":338,"context_line":""},{"line_number":339,"context_line":""},{"line_number":340,"context_line":"    def update_policy(self, context, policy):"},{"line_number":341,"context_line":"        updated_port_ids \u003d set([])"},{"line_number":342,"context_line":"        bound_networks \u003d policy.get_bound_networks()"},{"line_number":343,"context_line":"        bound_ports \u003d policy.get_bound_ports()"}],"source_content_type":"text/x-python","patch_set":1,"id":"1f493fa4_da16f7f1","line":340,"updated":"2020-04-23 22:06:01.000000000","message":"pep8: E303 too many blank lines (2)","commit_id":"461c6eaa1520679649b4357df7d6b907ac6f8ea4"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"8d15ba9b6dc5aee0874e0c26dfb32292168b2692","unresolved":false,"context_lines":[{"line_number":49,"context_line":"    @property"},{"line_number":50,"context_line":"    def _plugin_l3(self):"},{"line_number":51,"context_line":"        if self._plugin_l3_property is None:"},{"line_number":52,"context_line":"            self._plugin_l3_property \u003d directory.get_plugin(plugins_const.L3)"},{"line_number":53,"context_line":"        return self._plugin_l3_property"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":9,"id":"ff570b3c_b8e36733","line":52,"range":{"start_line":52,"start_character":60,"end_line":52,"end_character":76},"updated":"2020-05-12 14:38:55.000000000","message":"Are we sure that it will load ovn-router?\n\nI remember we had/have similar issue in OVN mechanism driver.","commit_id":"deceddb60eea73af6221fa1ebdec79b2c76b0dba"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"10aba8947bb71b6f5b83f6f8d535f1d7e1c4f92a","unresolved":false,"context_lines":[{"line_number":49,"context_line":"    @property"},{"line_number":50,"context_line":"    def _plugin_l3(self):"},{"line_number":51,"context_line":"        if self._plugin_l3_property is None:"},{"line_number":52,"context_line":"            self._plugin_l3_property \u003d directory.get_plugin(plugins_const.L3)"},{"line_number":53,"context_line":"        return self._plugin_l3_property"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":9,"id":"ff570b3c_db1700a3","line":52,"range":{"start_line":52,"start_character":60,"end_line":52,"end_character":76},"in_reply_to":"ff570b3c_b8e36733","updated":"2020-05-14 14:08:10.000000000","message":"Why not? This will get the L3 plugin. With OVN is only L3RouterPlugin.\n\nWhat problems did you have? Just to be aware!","commit_id":"deceddb60eea73af6221fa1ebdec79b2c76b0dba"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"8d15ba9b6dc5aee0874e0c26dfb32292168b2692","unresolved":false,"context_lines":[{"line_number":267,"context_line":"        router_id \u003d floatingip.get(\u0027router_id\u0027)"},{"line_number":268,"context_line":"        qos_policy_id \u003d floatingip.get(\u0027qos_policy_id\u0027)"},{"line_number":269,"context_line":""},{"line_number":270,"context_line":"        original_router_id \u003d None"},{"line_number":271,"context_line":"        original_qos_policy_id \u003d None"},{"line_number":272,"context_line":"        if original_floatingip:"},{"line_number":273,"context_line":"            original_router_id \u003d original_floatingip.get(\u0027router_id\u0027)"},{"line_number":274,"context_line":"            original_qos_policy_id \u003d original_floatingip.get(\u0027qos_policy_id\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"ff570b3c_580fabe0","line":271,"range":{"start_line":270,"start_character":0,"end_line":271,"end_character":37},"updated":"2020-05-12 14:38:55.000000000","message":"Not needed.","commit_id":"deceddb60eea73af6221fa1ebdec79b2c76b0dba"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"10aba8947bb71b6f5b83f6f8d535f1d7e1c4f92a","unresolved":false,"context_lines":[{"line_number":267,"context_line":"        router_id \u003d floatingip.get(\u0027router_id\u0027)"},{"line_number":268,"context_line":"        qos_policy_id \u003d floatingip.get(\u0027qos_policy_id\u0027)"},{"line_number":269,"context_line":""},{"line_number":270,"context_line":"        original_router_id \u003d None"},{"line_number":271,"context_line":"        original_qos_policy_id \u003d None"},{"line_number":272,"context_line":"        if original_floatingip:"},{"line_number":273,"context_line":"            original_router_id \u003d original_floatingip.get(\u0027router_id\u0027)"},{"line_number":274,"context_line":"            original_qos_policy_id \u003d original_floatingip.get(\u0027qos_policy_id\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"ff570b3c_3b843cd4","line":271,"range":{"start_line":270,"start_character":0,"end_line":271,"end_character":37},"in_reply_to":"ff570b3c_580fabe0","updated":"2020-05-14 14:08:10.000000000","message":"I\u0027ll use both in L276-277. If original_floatingip\u003dNone, those variables won\u0027t be instantiated.","commit_id":"deceddb60eea73af6221fa1ebdec79b2c76b0dba"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"8d15ba9b6dc5aee0874e0c26dfb32292168b2692","unresolved":false,"context_lines":[{"line_number":295,"context_line":"            for direction, rules in qos_rules.items():"},{"line_number":296,"context_line":"                ovn_rule \u003d self._ovn_qos_rule("},{"line_number":297,"context_line":"                    direction, rules, gw_port_id,"},{"line_number":298,"context_line":"                    floatingip[\u0027floating_network_id\u0027], fip_id\u003dfloatingip[\u0027id\u0027],"},{"line_number":299,"context_line":"                    ip_address\u003dfloatingip[\u0027floating_ip_address\u0027])"},{"line_number":300,"context_line":"                if ovn_rule:"},{"line_number":301,"context_line":"                    txn.add(self._driver._nb_idl.qos_add(**ovn_rule))"},{"line_number":302,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"ff570b3c_38891723","line":299,"range":{"start_line":298,"start_character":55,"end_line":299,"end_character":65},"updated":"2020-05-12 14:38:55.000000000","message":"Maybe we can pass one argument - fip?","commit_id":"deceddb60eea73af6221fa1ebdec79b2c76b0dba"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"10aba8947bb71b6f5b83f6f8d535f1d7e1c4f92a","unresolved":false,"context_lines":[{"line_number":295,"context_line":"            for direction, rules in qos_rules.items():"},{"line_number":296,"context_line":"                ovn_rule \u003d self._ovn_qos_rule("},{"line_number":297,"context_line":"                    direction, rules, gw_port_id,"},{"line_number":298,"context_line":"                    floatingip[\u0027floating_network_id\u0027], fip_id\u003dfloatingip[\u0027id\u0027],"},{"line_number":299,"context_line":"                    ip_address\u003dfloatingip[\u0027floating_ip_address\u0027])"},{"line_number":300,"context_line":"                if ovn_rule:"},{"line_number":301,"context_line":"                    txn.add(self._driver._nb_idl.qos_add(**ovn_rule))"},{"line_number":302,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"ff570b3c_7b8994c8","line":299,"range":{"start_line":298,"start_character":55,"end_line":299,"end_character":65},"in_reply_to":"ff570b3c_38891723","updated":"2020-05-14 14:08:10.000000000","message":"Hmmm, I prefer to be explicit here. Also I don\u0027t want \"_ovn_qos_rule\" to know what floatingip is (it\u0027s not \"_ovn_qos_rule\" business to know how floatingip is built, IMO).","commit_id":"deceddb60eea73af6221fa1ebdec79b2c76b0dba"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"2bf6c52a292500ecf967824be62c9f9b5e4c340b","unresolved":false,"context_lines":[{"line_number":100,"context_line":"            src_or_dst \u003d \u0027dst\u0027"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        match \u003d \u0027%s \u003d\u003d \"%s\"\u0027 % (in_or_out, port_id)"},{"line_number":103,"context_line":"        if fip_id:"},{"line_number":104,"context_line":"            match +\u003d (\u0027 \u0026\u0026 ip4.%s \u003d\u003d %s \u0026\u0026 is_chassis_resident(\"%s\")\u0027 %"},{"line_number":105,"context_line":"                      (src_or_dst, ip_address,"},{"line_number":106,"context_line":"                       utils.ovn_cr_lrouter_port_name(port_id)))"}],"source_content_type":"text/x-python","patch_set":23,"id":"9f560f44_9ab2b7e5","line":103,"updated":"2020-07-30 08:23:09.000000000","message":"this is strange for me. Variable fip_id is not used anywhere except this \"if\" condition in this method. Why it\u0027s like that?","commit_id":"9da9bd334f00369b7771fc97faba75448ee22ec5"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"49e343b01393b2d1dc7d73695274502a6ad01ad9","unresolved":false,"context_lines":[{"line_number":100,"context_line":"            src_or_dst \u003d \u0027dst\u0027"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        match \u003d \u0027%s \u003d\u003d \"%s\"\u0027 % (in_or_out, port_id)"},{"line_number":103,"context_line":"        if fip_id:"},{"line_number":104,"context_line":"            match +\u003d (\u0027 \u0026\u0026 ip4.%s \u003d\u003d %s \u0026\u0026 is_chassis_resident(\"%s\")\u0027 %"},{"line_number":105,"context_line":"                      (src_or_dst, ip_address,"},{"line_number":106,"context_line":"                       utils.ovn_cr_lrouter_port_name(port_id)))"}],"source_content_type":"text/x-python","patch_set":23,"id":"9f560f44_8777edd4","line":103,"in_reply_to":"9f560f44_9ab2b7e5","updated":"2020-07-31 09:18:54.000000000","message":"Ahh good question. This is not needed at all, with the \"ip_address\" parameter is enough.","commit_id":"9da9bd334f00369b7771fc97faba75448ee22ec5"}],"neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/impl_idl_ovn.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"c6cd9646d00dd0f6913b5e5402c5d05400509faa","unresolved":false,"context_lines":[{"line_number":656,"context_line":"               nat[\u0027external_ip\u0027] \u003d\u003d external_ip):"},{"line_number":657,"context_line":"                return nat"},{"line_number":658,"context_line":""},{"line_number":659,"context_line":"    ############################################################################"},{"line_number":660,"context_line":"    #RAH"},{"line_number":661,"context_line":""},{"line_number":662,"context_line":"    def get_floatingip_qos_rules(self, fip_id):"}],"source_content_type":"text/x-python","patch_set":1,"id":"1f493fa4_da68b788","line":659,"updated":"2020-04-23 22:06:01.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"461c6eaa1520679649b4357df7d6b907ac6f8ea4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"c6cd9646d00dd0f6913b5e5402c5d05400509faa","unresolved":false,"context_lines":[{"line_number":657,"context_line":"                return nat"},{"line_number":658,"context_line":""},{"line_number":659,"context_line":"    ############################################################################"},{"line_number":660,"context_line":"    #RAH"},{"line_number":661,"context_line":""},{"line_number":662,"context_line":"    def get_floatingip_qos_rules(self, fip_id):"},{"line_number":663,"context_line":"        fip \u003d self.db_find(\u0027QoS\u0027, (\u0027external_ids\u0027, \u0027\u003d\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"1f493fa4_3a055bc3","line":660,"updated":"2020-04-23 22:06:01.000000000","message":"pep8: E265 block comment should start with \u0027# \u0027","commit_id":"461c6eaa1520679649b4357df7d6b907ac6f8ea4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"c6cd9646d00dd0f6913b5e5402c5d05400509faa","unresolved":false,"context_lines":[{"line_number":665,"context_line":"        return fip.execute(check_error\u003dTrue) or []"},{"line_number":666,"context_line":""},{"line_number":667,"context_line":""},{"line_number":668,"context_line":"    # NOTE: implement API definition."},{"line_number":669,"context_line":"    def delete_floatingip_qos_rules(self, fip_id):"},{"line_number":670,"context_line":"        return cmd.DelACLCommand(self, lswitch, lport, if_exists)"},{"line_number":671,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"1f493fa4_1a085fd7","line":668,"updated":"2020-04-23 22:06:01.000000000","message":"pep8: E303 too many blank lines (2)","commit_id":"461c6eaa1520679649b4357df7d6b907ac6f8ea4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"c6cd9646d00dd0f6913b5e5402c5d05400509faa","unresolved":false,"context_lines":[{"line_number":666,"context_line":""},{"line_number":667,"context_line":""},{"line_number":668,"context_line":"    # NOTE: implement API definition."},{"line_number":669,"context_line":"    def delete_floatingip_qos_rules(self, fip_id):"},{"line_number":670,"context_line":"        return cmd.DelACLCommand(self, lswitch, lport, if_exists)"},{"line_number":671,"context_line":""},{"line_number":672,"context_line":"    ############################################################################"}],"source_content_type":"text/x-python","patch_set":1,"id":"1f493fa4_7a0fe3e0","line":669,"updated":"2020-04-23 22:06:01.000000000","message":"pep8: E301 expected 1 blank line, found 0","commit_id":"461c6eaa1520679649b4357df7d6b907ac6f8ea4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"c6cd9646d00dd0f6913b5e5402c5d05400509faa","unresolved":false,"context_lines":[{"line_number":667,"context_line":""},{"line_number":668,"context_line":"    # NOTE: implement API definition."},{"line_number":669,"context_line":"    def delete_floatingip_qos_rules(self, fip_id):"},{"line_number":670,"context_line":"        return cmd.DelACLCommand(self, lswitch, lport, if_exists)"},{"line_number":671,"context_line":""},{"line_number":672,"context_line":"    ############################################################################"},{"line_number":673,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"1f493fa4_9af3cfe7","line":670,"updated":"2020-04-23 22:06:01.000000000","message":"pep8: F821 undefined name \u0027if_exists\u0027","commit_id":"461c6eaa1520679649b4357df7d6b907ac6f8ea4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"c6cd9646d00dd0f6913b5e5402c5d05400509faa","unresolved":false,"context_lines":[{"line_number":667,"context_line":""},{"line_number":668,"context_line":"    # NOTE: implement API definition."},{"line_number":669,"context_line":"    def delete_floatingip_qos_rules(self, fip_id):"},{"line_number":670,"context_line":"        return cmd.DelACLCommand(self, lswitch, lport, if_exists)"},{"line_number":671,"context_line":""},{"line_number":672,"context_line":"    ############################################################################"},{"line_number":673,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"1f493fa4_baf84bc4","line":670,"updated":"2020-04-23 22:06:01.000000000","message":"pep8: F821 undefined name \u0027lport\u0027","commit_id":"461c6eaa1520679649b4357df7d6b907ac6f8ea4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"c6cd9646d00dd0f6913b5e5402c5d05400509faa","unresolved":false,"context_lines":[{"line_number":667,"context_line":""},{"line_number":668,"context_line":"    # NOTE: implement API definition."},{"line_number":669,"context_line":"    def delete_floatingip_qos_rules(self, fip_id):"},{"line_number":670,"context_line":"        return cmd.DelACLCommand(self, lswitch, lport, if_exists)"},{"line_number":671,"context_line":""},{"line_number":672,"context_line":"    ############################################################################"},{"line_number":673,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"1f493fa4_5a12e70a","line":670,"updated":"2020-04-23 22:06:01.000000000","message":"pep8: F821 undefined name \u0027lswitch\u0027","commit_id":"461c6eaa1520679649b4357df7d6b907ac6f8ea4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"c6cd9646d00dd0f6913b5e5402c5d05400509faa","unresolved":false,"context_lines":[{"line_number":669,"context_line":"    def delete_floatingip_qos_rules(self, fip_id):"},{"line_number":670,"context_line":"        return cmd.DelACLCommand(self, lswitch, lport, if_exists)"},{"line_number":671,"context_line":""},{"line_number":672,"context_line":"    ############################################################################"},{"line_number":673,"context_line":""},{"line_number":674,"context_line":"    def get_address_set(self, addrset_id, ip_version\u003d\u0027ip4\u0027):"},{"line_number":675,"context_line":"        addr_name \u003d utils.ovn_addrset_name(addrset_id, ip_version)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1f493fa4_fa02d3b3","line":672,"updated":"2020-04-23 22:06:01.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"461c6eaa1520679649b4357df7d6b907ac6f8ea4"}],"neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/ovn_client.py":[{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"91b3fb3c3ec4354627f4920638f5ae14aeefaf4e","unresolved":false,"context_lines":[{"line_number":1043,"context_line":"            self._l3_plugin.update_floatingip_status("},{"line_number":1044,"context_line":"                context, floatingip[\u0027id\u0027], fip_status)"},{"line_number":1045,"context_line":""},{"line_number":1046,"context_line":"    # TODO(lucasagomes): The ``fip_object`` parameter was added to"},{"line_number":1047,"context_line":"    # keep things backward compatible since old FIPs might not have"},{"line_number":1048,"context_line":"    # the OVN_FIP_EXT_ID_KEY in their external_ids field. Remove it"},{"line_number":1049,"context_line":"    # in the Rocky release."},{"line_number":1050,"context_line":"    def delete_floatingip(self, context, fip_id, fip_object\u003dNone):"},{"line_number":1051,"context_line":"        router_id \u003d None"},{"line_number":1052,"context_line":"        ovn_fip \u003d self._nb_idl.get_floatingip(fip_id)"}],"source_content_type":"text/x-python","patch_set":9,"id":"ff570b3c_363bf1d1","side":"PARENT","line":1049,"range":{"start_line":1046,"start_character":0,"end_line":1049,"end_character":27},"updated":"2020-05-12 07:58:11.000000000","message":"You removed this comment but still using the fip_object in L1064. Do we want to keep this comment or remove the usage of fip_object relying solely on the external id?","commit_id":"8cfe41fa6bea0901e4b2d41cc47d745195e9953b"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"10aba8947bb71b6f5b83f6f8d535f1d7e1c4f92a","unresolved":false,"context_lines":[{"line_number":1043,"context_line":"            self._l3_plugin.update_floatingip_status("},{"line_number":1044,"context_line":"                context, floatingip[\u0027id\u0027], fip_status)"},{"line_number":1045,"context_line":""},{"line_number":1046,"context_line":"    # TODO(lucasagomes): The ``fip_object`` parameter was added to"},{"line_number":1047,"context_line":"    # keep things backward compatible since old FIPs might not have"},{"line_number":1048,"context_line":"    # the OVN_FIP_EXT_ID_KEY in their external_ids field. Remove it"},{"line_number":1049,"context_line":"    # in the Rocky release."},{"line_number":1050,"context_line":"    def delete_floatingip(self, context, fip_id, fip_object\u003dNone):"},{"line_number":1051,"context_line":"        router_id \u003d None"},{"line_number":1052,"context_line":"        ovn_fip \u003d self._nb_idl.get_floatingip(fip_id)"}],"source_content_type":"text/x-python","patch_set":9,"id":"ff570b3c_befe7a34","side":"PARENT","line":1049,"range":{"start_line":1046,"start_character":0,"end_line":1049,"end_character":27},"in_reply_to":"ff570b3c_363bf1d1","updated":"2020-05-14 14:08:10.000000000","message":"We need to continue using the object. When deleting an object, we lose the register information. To delete the QoS rules associated to a FIP, we need:\n- The FIP ID (we have it)\n- The FIP floating network ID (to find the logical swith)\n\nThe network ID will be lost once we execute [1]\n\n[1]https://github.com/openstack/neutron/blob/master/neutron/services/ovn_l3/plugin.py#L230","commit_id":"8cfe41fa6bea0901e4b2d41cc47d745195e9953b"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"8d15ba9b6dc5aee0874e0c26dfb32292168b2692","unresolved":false,"context_lines":[{"line_number":990,"context_line":"        try:"},{"line_number":991,"context_line":"            with self._nb_idl.transaction(check_error\u003dTrue) as txn:"},{"line_number":992,"context_line":"                self._create_or_update_floatingip(floatingip, txn\u003dtxn)"},{"line_number":993,"context_line":"                self._qos_driver.create_floatingip(txn, floatingip)"},{"line_number":994,"context_line":"        except Exception as e:"},{"line_number":995,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":996,"context_line":"                LOG.error(\u0027Unable to create floating ip in gateway \u0027"}],"source_content_type":"text/x-python","patch_set":9,"id":"ff570b3c_182b73eb","line":993,"range":{"start_line":993,"start_character":16,"end_line":993,"end_character":67},"updated":"2020-05-12 14:38:55.000000000","message":"We can exit here if floatingip doesn\u0027t have qos_policy applied.","commit_id":"deceddb60eea73af6221fa1ebdec79b2c76b0dba"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"10aba8947bb71b6f5b83f6f8d535f1d7e1c4f92a","unresolved":false,"context_lines":[{"line_number":990,"context_line":"        try:"},{"line_number":991,"context_line":"            with self._nb_idl.transaction(check_error\u003dTrue) as txn:"},{"line_number":992,"context_line":"                self._create_or_update_floatingip(floatingip, txn\u003dtxn)"},{"line_number":993,"context_line":"                self._qos_driver.create_floatingip(txn, floatingip)"},{"line_number":994,"context_line":"        except Exception as e:"},{"line_number":995,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":996,"context_line":"                LOG.error(\u0027Unable to create floating ip in gateway \u0027"}],"source_content_type":"text/x-python","patch_set":9,"id":"ff570b3c_3e854a09","line":993,"range":{"start_line":993,"start_character":16,"end_line":993,"end_character":67},"in_reply_to":"ff570b3c_182b73eb","updated":"2020-05-14 14:08:10.000000000","message":"Well, I implemented the QoS methods to handle this. You should call them always. The method will decide if a QoS should be applied or not.\n\nI prefer to put this logic inside the method. Doing this, we don\u0027t need to take here any decision or implement any logic. IMO, this is cleaner.","commit_id":"deceddb60eea73af6221fa1ebdec79b2c76b0dba"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"8d15ba9b6dc5aee0874e0c26dfb32292168b2692","unresolved":false,"context_lines":[{"line_number":1033,"context_line":"                self._create_or_update_floatingip(floatingip, txn\u003dtxn)"},{"line_number":1034,"context_line":"                fip_status \u003d const.FLOATINGIP_STATUS_ACTIVE"},{"line_number":1035,"context_line":""},{"line_number":1036,"context_line":"            self._qos_driver.update_floatingip("},{"line_number":1037,"context_line":"                txn, floatingip, original_floatingip\u003doriginal_fip)"},{"line_number":1038,"context_line":""},{"line_number":1039,"context_line":"        if check_rev_cmd.result \u003d\u003d ovn_const.TXN_COMMITTED:"},{"line_number":1040,"context_line":"            db_rev.bump_revision("}],"source_content_type":"text/x-python","patch_set":9,"id":"ff570b3c_98278313","line":1037,"range":{"start_line":1036,"start_character":13,"end_line":1037,"end_character":66},"updated":"2020-05-12 14:38:55.000000000","message":"We can skip this, right? \n\nif floatingip.get(\u0027qos_policy\u0027) !\u003d original_floatingip.get(\u0027qos_policy\u0027)","commit_id":"deceddb60eea73af6221fa1ebdec79b2c76b0dba"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"10aba8947bb71b6f5b83f6f8d535f1d7e1c4f92a","unresolved":false,"context_lines":[{"line_number":1033,"context_line":"                self._create_or_update_floatingip(floatingip, txn\u003dtxn)"},{"line_number":1034,"context_line":"                fip_status \u003d const.FLOATINGIP_STATUS_ACTIVE"},{"line_number":1035,"context_line":""},{"line_number":1036,"context_line":"            self._qos_driver.update_floatingip("},{"line_number":1037,"context_line":"                txn, floatingip, original_floatingip\u003doriginal_fip)"},{"line_number":1038,"context_line":""},{"line_number":1039,"context_line":"        if check_rev_cmd.result \u003d\u003d ovn_const.TXN_COMMITTED:"},{"line_number":1040,"context_line":"            db_rev.bump_revision("}],"source_content_type":"text/x-python","patch_set":9,"id":"ff570b3c_9ea8d677","line":1037,"range":{"start_line":1036,"start_character":13,"end_line":1037,"end_character":66},"in_reply_to":"ff570b3c_98278313","updated":"2020-05-14 14:08:10.000000000","message":"As commented previously, this logic is inside the method \"update_floatingip\". I prefer to handle it in the QoS extension to:\n- Centralize all the logic in the QoS extension method\n- Have cleaner code in the OVC client.","commit_id":"deceddb60eea73af6221fa1ebdec79b2c76b0dba"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"8d15ba9b6dc5aee0874e0c26dfb32292168b2692","unresolved":false,"context_lines":[{"line_number":1061,"context_line":"            try:"},{"line_number":1062,"context_line":"                with self._nb_idl.transaction(check_error\u003dTrue) as txn:"},{"line_number":1063,"context_line":"                    self._delete_floatingip(ovn_fip, lrouter, txn\u003dtxn)"},{"line_number":1064,"context_line":"                    self._qos_driver.delete_floatingip(txn, fip_object)"},{"line_number":1065,"context_line":"            except Exception as e:"},{"line_number":1066,"context_line":"                with excutils.save_and_reraise_exception():"},{"line_number":1067,"context_line":"                    LOG.error(\u0027Unable to delete floating ip in gateway \u0027"}],"source_content_type":"text/x-python","patch_set":9,"id":"ff570b3c_78242f0e","line":1064,"range":{"start_line":1064,"start_character":20,"end_line":1064,"end_character":71},"updated":"2020-05-12 14:38:55.000000000","message":"Same. If FIP doesn\u0027t have qos attached we can skip.","commit_id":"deceddb60eea73af6221fa1ebdec79b2c76b0dba"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"10aba8947bb71b6f5b83f6f8d535f1d7e1c4f92a","unresolved":false,"context_lines":[{"line_number":1061,"context_line":"            try:"},{"line_number":1062,"context_line":"                with self._nb_idl.transaction(check_error\u003dTrue) as txn:"},{"line_number":1063,"context_line":"                    self._delete_floatingip(ovn_fip, lrouter, txn\u003dtxn)"},{"line_number":1064,"context_line":"                    self._qos_driver.delete_floatingip(txn, fip_object)"},{"line_number":1065,"context_line":"            except Exception as e:"},{"line_number":1066,"context_line":"                with excutils.save_and_reraise_exception():"},{"line_number":1067,"context_line":"                    LOG.error(\u0027Unable to delete floating ip in gateway \u0027"}],"source_content_type":"text/x-python","patch_set":9,"id":"ff570b3c_5e20feb0","line":1064,"range":{"start_line":1064,"start_character":20,"end_line":1064,"end_character":71},"in_reply_to":"ff570b3c_78242f0e","updated":"2020-05-14 14:08:10.000000000","message":"same comment","commit_id":"deceddb60eea73af6221fa1ebdec79b2c76b0dba"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"aa54313323fe75469f46c95fe92b367770cca61a","unresolved":false,"context_lines":[{"line_number":891,"context_line":"                n_context.get_admin_context(), floatingip[\u0027id\u0027],"},{"line_number":892,"context_line":"                const.FLOATINGIP_STATUS_ACTIVE)"},{"line_number":893,"context_line":""},{"line_number":894,"context_line":"    def update_floatingip(self, context, floatingip, original_fip\u003dNone):"},{"line_number":895,"context_line":"        fip_status \u003d None"},{"line_number":896,"context_line":"        router_id \u003d None"},{"line_number":897,"context_line":"        ovn_fip \u003d self._nb_idl.get_floatingip(floatingip[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":13,"id":"bf51134e_e1aab116","line":894,"range":{"start_line":894,"start_character":53,"end_line":894,"end_character":70},"updated":"2020-06-25 12:57:52.000000000","message":"Is there a reason why we need to use the original object from the context ?\n\nAsking cause this isn\u0027t safe for consistency, if we have multiple updates being done to the same object at the same time there\u0027s no guaranteed order in which things will be committed to the OVN database, see: https://bugs.launchpad.net/networking-ovn/+bug/1605089.\n\nI would prefer if we could avoid this and instead of comparing the new and old object from the neutron database we instead compared the new and the current information from the OVN database (L897, ovn_fip) to create the delta for the udpate.\n\nIs that possible for this patch ?","commit_id":"5aaa5e0a65cbae020c01d86aedb0505ec2225ed9"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"319988bac27aa42e0469d1988c71ccb8658cff88","unresolved":false,"context_lines":[{"line_number":891,"context_line":"                n_context.get_admin_context(), floatingip[\u0027id\u0027],"},{"line_number":892,"context_line":"                const.FLOATINGIP_STATUS_ACTIVE)"},{"line_number":893,"context_line":""},{"line_number":894,"context_line":"    def update_floatingip(self, context, floatingip, original_fip\u003dNone):"},{"line_number":895,"context_line":"        fip_status \u003d None"},{"line_number":896,"context_line":"        router_id \u003d None"},{"line_number":897,"context_line":"        ovn_fip \u003d self._nb_idl.get_floatingip(floatingip[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":13,"id":"bf51134e_60ab2674","line":894,"range":{"start_line":894,"start_character":53,"end_line":894,"end_character":70},"in_reply_to":"bf51134e_e1aab116","updated":"2020-06-26 15:59:23.000000000","message":"OK, I get your point: to use the NB DB to sync any possible concurrency.\n\nCurrently I\u0027m reading from original_fip, if provided:\n- router_id: stored in ext_ids[OVN_ROUTER_NAME_EXT_ID_KEY] (neutron-\u003crouter_id\u003e)\n- fixed_ip_address: logical_ip\n- floating_ip_address: external_ip\n- qos_policy_id: I\u0027ll need to implement in ovsdbapp a method to get the qos based on a dict of parameters (similar to QoSDelExtIdCommand but returning those matches).\n- floating_network_id: same for old and new FIP, can\u0027t change.\n- id: same in both","commit_id":"5aaa5e0a65cbae020c01d86aedb0505ec2225ed9"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"319988bac27aa42e0469d1988c71ccb8658cff88","unresolved":false,"context_lines":[{"line_number":896,"context_line":"        router_id \u003d None"},{"line_number":897,"context_line":"        ovn_fip \u003d self._nb_idl.get_floatingip(floatingip[\u0027id\u0027])"},{"line_number":898,"context_line":""},{"line_number":899,"context_line":"        if not ovn_fip and original_fip:"},{"line_number":900,"context_line":"            router_id \u003d original_fip.get(\u0027router_id\u0027)"},{"line_number":901,"context_line":"            ovn_fip \u003d self._nb_idl.get_floatingip_by_ips("},{"line_number":902,"context_line":"                router_id, original_fip[\u0027fixed_ip_address\u0027],"},{"line_number":903,"context_line":"                original_fip[\u0027floating_ip_address\u0027])"},{"line_number":904,"context_line":""},{"line_number":905,"context_line":"        check_rev_cmd \u003d self._nb_idl.check_revision_number("},{"line_number":906,"context_line":"            floatingip[\u0027id\u0027], floatingip, ovn_const.TYPE_FLOATINGIPS)"}],"source_content_type":"text/x-python","patch_set":13,"id":"bf51134e_c00f9285","line":903,"range":{"start_line":899,"start_character":0,"end_line":903,"end_character":52},"updated":"2020-06-26 15:59:23.000000000","message":"BTW, if fip_object is removed from the signature, that means this code should be deleted (just to confirm, we should always have something returned in L897)","commit_id":"5aaa5e0a65cbae020c01d86aedb0505ec2225ed9"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"aa54313323fe75469f46c95fe92b367770cca61a","unresolved":false,"context_lines":[{"line_number":945,"context_line":"            try:"},{"line_number":946,"context_line":"                with self._nb_idl.transaction(check_error\u003dTrue) as txn:"},{"line_number":947,"context_line":"                    self._delete_floatingip(ovn_fip, lrouter, txn\u003dtxn)"},{"line_number":948,"context_line":"                    self._qos_driver.delete_floatingip(txn, fip_object)"},{"line_number":949,"context_line":"            except Exception as e:"},{"line_number":950,"context_line":"                with excutils.save_and_reraise_exception():"},{"line_number":951,"context_line":"                    LOG.error(\u0027Unable to delete floating ip in gateway \u0027"}],"source_content_type":"text/x-python","patch_set":13,"id":"bf51134e_2166692b","line":948,"range":{"start_line":948,"start_character":60,"end_line":948,"end_character":70},"updated":"2020-06-25 12:57:52.000000000","message":"ditto about using the original object from the neutron context","commit_id":"5aaa5e0a65cbae020c01d86aedb0505ec2225ed9"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"319988bac27aa42e0469d1988c71ccb8658cff88","unresolved":false,"context_lines":[{"line_number":945,"context_line":"            try:"},{"line_number":946,"context_line":"                with self._nb_idl.transaction(check_error\u003dTrue) as txn:"},{"line_number":947,"context_line":"                    self._delete_floatingip(ovn_fip, lrouter, txn\u003dtxn)"},{"line_number":948,"context_line":"                    self._qos_driver.delete_floatingip(txn, fip_object)"},{"line_number":949,"context_line":"            except Exception as e:"},{"line_number":950,"context_line":"                with excutils.save_and_reraise_exception():"},{"line_number":951,"context_line":"                    LOG.error(\u0027Unable to delete floating ip in gateway \u0027"}],"source_content_type":"text/x-python","patch_set":13,"id":"bf51134e_6047a6bd","line":948,"range":{"start_line":948,"start_character":60,"end_line":948,"end_character":70},"in_reply_to":"bf51134e_2166692b","updated":"2020-06-26 15:59:23.000000000","message":"same as before, I need to implement this new method in ovsdbapp","commit_id":"5aaa5e0a65cbae020c01d86aedb0505ec2225ed9"}],"neutron/services/ovn_l3/plugin.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8069d6b7c38bc387c0f8d77bd21e0350040d4549","unresolved":false,"context_lines":[{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    @staticmethod"},{"line_number":89,"context_line":"    def disable_qos_fip_extension_by_extension_drivers(aliases):"},{"line_number":90,"context_line":"        if (qos_api.ALIAS not in cfg.CONF.ml2.extension_drivers and"},{"line_number":91,"context_line":"                qos_fip_api.FIP_QOS_ALIAS in aliases):"},{"line_number":92,"context_line":"            aliases.remove(qos_fip_api.FIP_QOS_ALIAS)"},{"line_number":93,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"1f493fa4_fd92ec4a","line":90,"updated":"2020-05-05 19:57:56.000000000","message":"pep8: F821 undefined name \u0027cfg\u0027","commit_id":"20d0745978b02088589cf8e723d44676f11bb2cf"}],"neutron/tests/functional/plugins/ml2/drivers/ovn/mech_driver/ovsdb/extensions/test_qos.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"1299f97e2b1190cdd69c64183d8e665ea1654b43","unresolved":false,"context_lines":[{"line_number":19,"context_line":"from neutron_lib.services.qos import constants as qos_constants"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from neutron.db import l3_db"},{"line_number":22,"context_line":"from neutron.common.ovn import utils as ovn_utils"},{"line_number":23,"context_line":"from neutron.plugins.ml2.drivers.ovn.mech_driver.ovsdb.extensions \\"},{"line_number":24,"context_line":"    import qos as qos_extension"},{"line_number":25,"context_line":"from neutron.tests.functional import base"}],"source_content_type":"text/x-python","patch_set":7,"id":"ff570b3c_c3cf7c55","line":22,"updated":"2020-05-08 23:06:33.000000000","message":"pep8: H306  imports not in alphabetical order (neutron.db.l3_db, neutron.common.ovn.utils)","commit_id":"5bb72bb4e55171a8b6332a116f20e46ca4b6982f"}],"neutron/tests/unit/plugins/ml2/drivers/ovn/mech_driver/ovsdb/extensions/test_qos.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"1d128c76fea115d981297e04f6289724c651f383","unresolved":false,"context_lines":[{"line_number":220,"context_line":"        self._test__ovn_qos_rule_egress(fip_id\u003d\u0027fipid\u0027, ip_address\u003d\u00271.2.3.4\u0027)"},{"line_number":221,"context_line":""},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"    def test__port_effective_qos_policy_id(self):"},{"line_number":224,"context_line":"        port \u003d {\u0027qos_policy_id\u0027: \u0027qos1\u0027}"},{"line_number":225,"context_line":"        self.assertEqual((\u0027qos1\u0027, \u0027port\u0027),"},{"line_number":226,"context_line":"                         self.qos_driver._port_effective_qos_policy_id(port))"}],"source_content_type":"text/x-python","patch_set":5,"id":"1f493fa4_2b3997a2","line":223,"updated":"2020-05-06 22:28:28.000000000","message":"pep8: E303 too many blank lines (2)","commit_id":"85beb48b14b6f8bfd677d3dacc1a207d8576e919"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"1d128c76fea115d981297e04f6289724c651f383","unresolved":false,"context_lines":[{"line_number":404,"context_line":"        # when retrieving the port and the network list."},{"line_number":405,"context_line":"        self.mock_rules.assert_has_calls(calls, any_order\u003dTrue)"},{"line_number":406,"context_line":""},{"line_number":407,"context_line":"        #RAH: update this method with FIP"},{"line_number":408,"context_line":""},{"line_number":409,"context_line":"    def test_update_floatingip(self):"},{"line_number":410,"context_line":"        port \u003d self.ports[0]"}],"source_content_type":"text/x-python","patch_set":5,"id":"1f493fa4_8b40ab09","line":407,"updated":"2020-05-06 22:28:28.000000000","message":"pep8: E265 block comment should start with \u0027# \u0027","commit_id":"85beb48b14b6f8bfd677d3dacc1a207d8576e919"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"1d128c76fea115d981297e04f6289724c651f383","unresolved":false,"context_lines":[{"line_number":407,"context_line":"        #RAH: update this method with FIP"},{"line_number":408,"context_line":""},{"line_number":409,"context_line":"    def test_update_floatingip(self):"},{"line_number":410,"context_line":"        port \u003d self.ports[0]"},{"line_number":411,"context_line":"        original_port \u003d self.ports[1]"},{"line_number":412,"context_line":""},{"line_number":413,"context_line":"        # Update FIP, no QoS nor port/router"}],"source_content_type":"text/x-python","patch_set":5,"id":"1f493fa4_6b439f14","line":410,"updated":"2020-05-06 22:28:28.000000000","message":"pep8: F841 local variable \u0027port\u0027 is assigned to but never used","commit_id":"85beb48b14b6f8bfd677d3dacc1a207d8576e919"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"1d128c76fea115d981297e04f6289724c651f383","unresolved":false,"context_lines":[{"line_number":408,"context_line":""},{"line_number":409,"context_line":"    def test_update_floatingip(self):"},{"line_number":410,"context_line":"        port \u003d self.ports[0]"},{"line_number":411,"context_line":"        original_port \u003d self.ports[1]"},{"line_number":412,"context_line":""},{"line_number":413,"context_line":"        # Update FIP, no QoS nor port/router"},{"line_number":414,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"1f493fa4_cb491333","line":411,"updated":"2020-05-06 22:28:28.000000000","message":"pep8: F841 local variable \u0027original_port\u0027 is assigned to but never used","commit_id":"85beb48b14b6f8bfd677d3dacc1a207d8576e919"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"1d128c76fea115d981297e04f6289724c651f383","unresolved":false,"context_lines":[{"line_number":415,"context_line":"        # Attach a port and a router"},{"line_number":416,"context_line":""},{"line_number":417,"context_line":""},{"line_number":418,"context_line":"        # Remove QoS"},{"line_number":419,"context_line":""},{"line_number":420,"context_line":""},{"line_number":421,"context_line":"        # Add again another QoS policy"}],"source_content_type":"text/x-python","patch_set":5,"id":"1f493fa4_ab44871a","line":418,"updated":"2020-05-06 22:28:28.000000000","message":"pep8: E303 too many blank lines (2)","commit_id":"85beb48b14b6f8bfd677d3dacc1a207d8576e919"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"1d128c76fea115d981297e04f6289724c651f383","unresolved":false,"context_lines":[{"line_number":418,"context_line":"        # Remove QoS"},{"line_number":419,"context_line":""},{"line_number":420,"context_line":""},{"line_number":421,"context_line":"        # Add again another QoS policy"},{"line_number":422,"context_line":""},{"line_number":423,"context_line":""},{"line_number":424,"context_line":"        # Detach the port and the router"}],"source_content_type":"text/x-python","patch_set":5,"id":"1f493fa4_0b549bc9","line":421,"updated":"2020-05-06 22:28:28.000000000","message":"pep8: E303 too many blank lines (2)","commit_id":"85beb48b14b6f8bfd677d3dacc1a207d8576e919"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"1d128c76fea115d981297e04f6289724c651f383","unresolved":false,"context_lines":[{"line_number":421,"context_line":"        # Add again another QoS policy"},{"line_number":422,"context_line":""},{"line_number":423,"context_line":""},{"line_number":424,"context_line":"        # Detach the port and the router"},{"line_number":425,"context_line":""},{"line_number":426,"context_line":""},{"line_number":427,"context_line":"        # Force reset (delete any QoS)"}],"source_content_type":"text/x-python","patch_set":5,"id":"1f493fa4_eb4e8f36","line":424,"updated":"2020-05-06 22:28:28.000000000","message":"pep8: E303 too many blank lines (2)","commit_id":"85beb48b14b6f8bfd677d3dacc1a207d8576e919"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"1d128c76fea115d981297e04f6289724c651f383","unresolved":false,"context_lines":[{"line_number":424,"context_line":"        # Detach the port and the router"},{"line_number":425,"context_line":""},{"line_number":426,"context_line":""},{"line_number":427,"context_line":"        # Force reset (delete any QoS)"}],"source_content_type":"text/x-python","patch_set":5,"id":"1f493fa4_4b5fc3e4","line":427,"updated":"2020-05-06 22:28:28.000000000","message":"pep8: E303 too many blank lines (2)","commit_id":"85beb48b14b6f8bfd677d3dacc1a207d8576e919"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"3293ce77782575e78bfa1fad145f6920dd580bd4","unresolved":false,"context_lines":[{"line_number":26,"context_line":"from neutron.common.ovn import constants as ovn_const"},{"line_number":27,"context_line":"from neutron.core_extensions import qos as core_qos"},{"line_number":28,"context_line":"from neutron.extensions import qos as qos_extension"},{"line_number":29,"context_line":"from neutron.extensions import qos_fip as qos_fip_extension"},{"line_number":30,"context_line":"from neutron.objects import network as network_obj"},{"line_number":31,"context_line":"from neutron.objects import ports as port_obj"},{"line_number":32,"context_line":"from neutron.objects.qos import policy as policy_obj"}],"source_content_type":"text/x-python","patch_set":6,"id":"1f493fa4_80d073f9","line":29,"updated":"2020-05-07 21:05:05.000000000","message":"pep8: F401 \u0027neutron.extensions.qos_fip as qos_fip_extension\u0027 imported but unused","commit_id":"c6ec33ce2f13e09446e7c99a56ec21a066aaa706"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"3293ce77782575e78bfa1fad145f6920dd580bd4","unresolved":false,"context_lines":[{"line_number":32,"context_line":"from neutron.objects.qos import policy as policy_obj"},{"line_number":33,"context_line":"from neutron.objects.qos import rule as rule_obj"},{"line_number":34,"context_line":"from neutron.objects import router as router_obj"},{"line_number":35,"context_line":"from neutron.plugins.ml2.drivers.ovn.mech_driver.ovsdb.extensions \\"},{"line_number":36,"context_line":"    import qos as qos_extension"},{"line_number":37,"context_line":"from neutron.tests.unit.plugins.ml2 import test_plugin"},{"line_number":38,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"1f493fa4_60cba749","line":35,"updated":"2020-05-07 21:05:05.000000000","message":"pep8: F811 redefinition of unused \u0027qos_extension\u0027 from line 28","commit_id":"c6ec33ce2f13e09446e7c99a56ec21a066aaa706"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"3293ce77782575e78bfa1fad145f6920dd580bd4","unresolved":false,"context_lines":[{"line_number":239,"context_line":"        self._test__ovn_qos_rule_egress(fip_id\u003d\u0027fipid\u0027, ip_address\u003d\u00271.2.3.4\u0027)"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"    def test__port_effective_qos_policy_id(self):"},{"line_number":243,"context_line":"        port \u003d {\u0027qos_policy_id\u0027: \u0027qos1\u0027}"},{"line_number":244,"context_line":"        self.assertEqual((\u0027qos1\u0027, \u0027port\u0027),"},{"line_number":245,"context_line":"                         self.qos_driver._port_effective_qos_policy_id(port))"}],"source_content_type":"text/x-python","patch_set":6,"id":"1f493fa4_c0da7b15","line":242,"updated":"2020-05-07 21:05:05.000000000","message":"pep8: E303 too many blank lines (2)","commit_id":"c6ec33ce2f13e09446e7c99a56ec21a066aaa706"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"3293ce77782575e78bfa1fad145f6920dd580bd4","unresolved":false,"context_lines":[{"line_number":424,"context_line":"        self.mock_rules.assert_has_calls(calls, any_order\u003dTrue)"},{"line_number":425,"context_line":""},{"line_number":426,"context_line":"        ###############################################################"},{"line_number":427,"context_line":"        #RAH: update this method with FIP"},{"line_number":428,"context_line":""},{"line_number":429,"context_line":"    def test_update_floatingip(self):"},{"line_number":430,"context_line":"        nb_idl \u003d self.qos_driver._driver._nb_idl"}],"source_content_type":"text/x-python","patch_set":6,"id":"1f493fa4_a0d5afe7","line":427,"updated":"2020-05-07 21:05:05.000000000","message":"pep8: E265 block comment should start with \u0027# \u0027","commit_id":"c6ec33ce2f13e09446e7c99a56ec21a066aaa706"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"1299f97e2b1190cdd69c64183d8e665ea1654b43","unresolved":false,"context_lines":[{"line_number":237,"context_line":"        self._test__ovn_qos_rule_egress(fip_id\u003d\u0027fipid\u0027, ip_address\u003d\u00271.2.3.4\u0027)"},{"line_number":238,"context_line":""},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"    def test__port_effective_qos_policy_id(self):"},{"line_number":241,"context_line":"        port \u003d {\u0027qos_policy_id\u0027: \u0027qos1\u0027}"},{"line_number":242,"context_line":"        self.assertEqual((\u0027qos1\u0027, \u0027port\u0027),"},{"line_number":243,"context_line":"                         self.qos_driver._port_effective_qos_policy_id(port))"}],"source_content_type":"text/x-python","patch_set":7,"id":"ff570b3c_a3cc0862","line":240,"updated":"2020-05-08 23:06:33.000000000","message":"pep8: E303 too many blank lines (2)","commit_id":"5bb72bb4e55171a8b6332a116f20e46ca4b6982f"}]}
