)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"36aa7c2a2fba73a70daebd8639a78310d11804b9","unresolved":false,"context_lines":[{"line_number":15,"context_line":"ports which are ports deployed on a different node than the one that the"},{"line_number":16,"context_line":"VM is running and is able to reply to such requests on behalf of the VM."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"With this patch, when a port with the VNIC type \"direct\" and no"},{"line_number":19,"context_line":"\"switchdev\" capability is created, ovn driver will then create a"},{"line_number":20,"context_line":"logical port with the type \"external\" for it and add it to a default"},{"line_number":21,"context_line":"HA Chassis Group. The port will then get bound to the \"master\" (higher"},{"line_number":22,"context_line":"priority) chassis of that group."},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"Please note that, as a first step, this patch is creating only one HA"},{"line_number":25,"context_line":"Chassis Group which *all* external ports will belong to. That means that"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"3fa7e38b_c08c383c","line":22,"range":{"start_line":18,"start_character":0,"end_line":22,"end_character":32},"updated":"2020-02-19 15:52:08.000000000","message":"So as a user of neutron I don\u0027t have to change anything in how I talk to neutron, right? The external port is created in the background for each non-switchdev (i.e. non-ovs) direct port. And I just start getting DHCP offers on my direct ports. Do we respect the port\u0027s subnet\u0027s enable_dhcp option? Do I also start getting metadata service?\n\nShall we have a release note for functional changes like these?","commit_id":"4ace57134b6bbc8c20ee7b1e7a769933f7065d3f"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"36aa7c2a2fba73a70daebd8639a78310d11804b9","unresolved":false,"context_lines":[{"line_number":21,"context_line":"HA Chassis Group. The port will then get bound to the \"master\" (higher"},{"line_number":22,"context_line":"priority) chassis of that group."},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"Please note that, as a first step, this patch is creating only one HA"},{"line_number":25,"context_line":"Chassis Group which *all* external ports will belong to. That means that"},{"line_number":26,"context_line":"all external ports will be *scheduled onto the same node* (but it\u0027s"},{"line_number":27,"context_line":"HA nevertheless). In the future we should enhance this behavior."},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"Change-Id: Ic6c4bb6c584682169f3ebd73105a847b05dddc76"},{"line_number":30,"context_line":"Closes-Bug: #1841154"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"3fa7e38b_9a230fbc","line":27,"range":{"start_line":24,"start_character":0,"end_line":27,"end_character":17},"updated":"2020-02-19 15:52:08.000000000","message":"Shall we document this somewhere? If I were a deployer, I think I\u0027d want to know this.","commit_id":"4ace57134b6bbc8c20ee7b1e7a769933f7065d3f"}],"neutron/plugins/ml2/drivers/ovn/mech_driver/mech_driver.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"6e2d9afbad0ff041acab5ff0addedfcf8b949863","unresolved":false,"context_lines":[{"line_number":671,"context_line":"                      {\u0027port_id\u0027: port[\u0027id\u0027], \u0027vnic_type\u0027: vnic_type})"},{"line_number":672,"context_line":"            return"},{"line_number":673,"context_line":""},{"line_number":674,"context_line":"        capabilities \u003d ovn_utils.get_port_capabilities(port)"},{"line_number":675,"context_line":"        if (vnic_type \u003d\u003d portbindings.VNIC_DIRECT and"},{"line_number":676,"context_line":"           ovn_const.PORT_CAP_SWITCHDEV not in capabilities):"},{"line_number":677,"context_line":"            LOG.debug(\"Refusing to bind port due to unsupported vnic_type: %s \""}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_e0ea099f","line":674,"updated":"2020-01-24 13:33:09.000000000","message":"nit, just a comment: this method should be in objects.port, as an auxiliary function.","commit_id":"fe24e82fb1456a103e4264ab283ea090278be6e1"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"271261c0c5b2450b8bc4aa2ff32d291bc4e8f132","unresolved":false,"context_lines":[{"line_number":671,"context_line":"                      {\u0027port_id\u0027: port[\u0027id\u0027], \u0027vnic_type\u0027: vnic_type})"},{"line_number":672,"context_line":"            return"},{"line_number":673,"context_line":""},{"line_number":674,"context_line":"        capabilities \u003d ovn_utils.get_port_capabilities(port)"},{"line_number":675,"context_line":"        if (vnic_type \u003d\u003d portbindings.VNIC_DIRECT and"},{"line_number":676,"context_line":"           ovn_const.PORT_CAP_SWITCHDEV not in capabilities):"},{"line_number":677,"context_line":"            LOG.debug(\"Refusing to bind port due to unsupported vnic_type: %s \""}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_f6b3af33","line":674,"in_reply_to":"3fa7e38b_e0ea099f","updated":"2020-01-24 14:25:14.000000000","message":"++ that would be a good refactor for the get_port_capabilities function.","commit_id":"fe24e82fb1456a103e4264ab283ea090278be6e1"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"f00e21c68cca24fa2e133b0bd91744f8b110ee8a","unresolved":false,"context_lines":[{"line_number":673,"context_line":""},{"line_number":674,"context_line":"        capabilities \u003d ovn_utils.get_port_capabilities(port)"},{"line_number":675,"context_line":"        if (vnic_type \u003d\u003d portbindings.VNIC_DIRECT and"},{"line_number":676,"context_line":"           ovn_const.PORT_CAP_SWITCHDEV not in capabilities):"},{"line_number":677,"context_line":"            LOG.debug(\"Refusing to bind port due to unsupported vnic_type: %s \""},{"line_number":678,"context_line":"                      \"with no switchdev capability\", portbindings.VNIC_DIRECT)"},{"line_number":679,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_803a6332","line":676,"updated":"2020-01-21 20:30:27.000000000","message":"nit: should be indented 8","commit_id":"fe24e82fb1456a103e4264ab283ea090278be6e1"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"271261c0c5b2450b8bc4aa2ff32d291bc4e8f132","unresolved":false,"context_lines":[{"line_number":673,"context_line":""},{"line_number":674,"context_line":"        capabilities \u003d ovn_utils.get_port_capabilities(port)"},{"line_number":675,"context_line":"        if (vnic_type \u003d\u003d portbindings.VNIC_DIRECT and"},{"line_number":676,"context_line":"           ovn_const.PORT_CAP_SWITCHDEV not in capabilities):"},{"line_number":677,"context_line":"            LOG.debug(\"Refusing to bind port due to unsupported vnic_type: %s \""},{"line_number":678,"context_line":"                      \"with no switchdev capability\", portbindings.VNIC_DIRECT)"},{"line_number":679,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_96327bbf","line":676,"in_reply_to":"3fa7e38b_803a6332","updated":"2020-01-24 14:25:14.000000000","message":"Will do","commit_id":"fe24e82fb1456a103e4264ab283ea090278be6e1"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"6e2d9afbad0ff041acab5ff0addedfcf8b949863","unresolved":false,"context_lines":[{"line_number":673,"context_line":""},{"line_number":674,"context_line":"        capabilities \u003d ovn_utils.get_port_capabilities(port)"},{"line_number":675,"context_line":"        if (vnic_type \u003d\u003d portbindings.VNIC_DIRECT and"},{"line_number":676,"context_line":"           ovn_const.PORT_CAP_SWITCHDEV not in capabilities):"},{"line_number":677,"context_line":"            LOG.debug(\"Refusing to bind port due to unsupported vnic_type: %s \""},{"line_number":678,"context_line":"                      \"with no switchdev capability\", portbindings.VNIC_DIRECT)"},{"line_number":679,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_e06d2930","line":676,"in_reply_to":"3fa7e38b_803a6332","updated":"2020-01-24 13:33:09.000000000","message":"nit, just a comment: this constant (and those defined in [1]) should go to neutron-lib. os-vif could also refer to those constants.\n\n[1] https://www.spinics.net/lists/netdev/msg392209.html","commit_id":"fe24e82fb1456a103e4264ab283ea090278be6e1"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"271261c0c5b2450b8bc4aa2ff32d291bc4e8f132","unresolved":false,"context_lines":[{"line_number":673,"context_line":""},{"line_number":674,"context_line":"        capabilities \u003d ovn_utils.get_port_capabilities(port)"},{"line_number":675,"context_line":"        if (vnic_type \u003d\u003d portbindings.VNIC_DIRECT and"},{"line_number":676,"context_line":"           ovn_const.PORT_CAP_SWITCHDEV not in capabilities):"},{"line_number":677,"context_line":"            LOG.debug(\"Refusing to bind port due to unsupported vnic_type: %s \""},{"line_number":678,"context_line":"                      \"with no switchdev capability\", portbindings.VNIC_DIRECT)"},{"line_number":679,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_5638839c","line":676,"in_reply_to":"3fa7e38b_e06d2930","updated":"2020-01-24 14:25:14.000000000","message":"Good point, yeah... We need to take a look at the constants.py in general for OVN and start porting some to the neutron-lib.","commit_id":"fe24e82fb1456a103e4264ab283ea090278be6e1"}],"neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/maintenance.py":[{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"e2e48b76bb08dedcaa0781fff097996cec306934","unresolved":false,"context_lines":[{"line_number":498,"context_line":"                        ovn_const.HA_CHASSIS_GROUP_DEFAULT_NAME,"},{"line_number":499,"context_line":"                        high_prio_ch.chassis_name, priority\u003dpriority))"},{"line_number":500,"context_line":"                gw_ch.remove(high_prio_ch.chassis_name)"},{"line_number":501,"context_line":"                priority -\u003d 1"},{"line_number":502,"context_line":""},{"line_number":503,"context_line":"            for ch in gw_ch:"},{"line_number":504,"context_line":"                txn.add(self._nb_idl.ha_chassis_group_add_chassis("}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_91a229fb","line":501,"range":{"start_line":501,"start_character":16,"end_line":501,"end_character":24},"updated":"2020-01-31 15:02:30.000000000","message":"I know that its almost impossible (nobody ever seen 32767 chassis in one deployment), but in theory this could be lower than 0.","commit_id":"4ace57134b6bbc8c20ee7b1e7a769933f7065d3f"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"e2e48b76bb08dedcaa0781fff097996cec306934","unresolved":false,"context_lines":[{"line_number":503,"context_line":"            for ch in gw_ch:"},{"line_number":504,"context_line":"                txn.add(self._nb_idl.ha_chassis_group_add_chassis("},{"line_number":505,"context_line":"                        ovn_const.HA_CHASSIS_GROUP_DEFAULT_NAME,"},{"line_number":506,"context_line":"                        ch, priority\u003dpriority))"},{"line_number":507,"context_line":"                priority -\u003d 1"},{"line_number":508,"context_line":""},{"line_number":509,"context_line":"        raise periodics.NeverAgain()"}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_11ae39e4","line":506,"range":{"start_line":506,"start_character":37,"end_line":506,"end_character":45},"updated":"2020-01-31 15:02:30.000000000","message":"nitty nitty nit: max(priority, 0)","commit_id":"4ace57134b6bbc8c20ee7b1e7a769933f7065d3f"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"ff698ab1854ef64803db4add9d87eb03d4d5235d","unresolved":false,"context_lines":[{"line_number":503,"context_line":"            for ch in gw_ch:"},{"line_number":504,"context_line":"                txn.add(self._nb_idl.ha_chassis_group_add_chassis("},{"line_number":505,"context_line":"                        ovn_const.HA_CHASSIS_GROUP_DEFAULT_NAME,"},{"line_number":506,"context_line":"                        ch, priority\u003dpriority))"},{"line_number":507,"context_line":"                priority -\u003d 1"},{"line_number":508,"context_line":""},{"line_number":509,"context_line":"        raise periodics.NeverAgain()"}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_cb37e9da","line":506,"range":{"start_line":506,"start_character":37,"end_line":506,"end_character":45},"in_reply_to":"3fa7e38b_11ae39e4","updated":"2020-02-12 13:49:09.000000000","message":"++","commit_id":"4ace57134b6bbc8c20ee7b1e7a769933f7065d3f"}],"neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/ovn_client.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"6e2d9afbad0ff041acab5ff0addedfcf8b949863","unresolved":false,"context_lines":[{"line_number":96,"context_line":"        # \"virtual\" port type was added in the version 2.12 of OVN"},{"line_number":97,"context_line":"        return self._sb_idl.is_col_present(\u0027Port_Binding\u0027, \u0027virtual_parent\u0027)"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    def is_external_ports_supported(self):"},{"line_number":100,"context_line":"        return self._nb_idl.is_table_present(\u0027HA_Chassis_Group\u0027)"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    def _get_allowed_addresses_from_port(self, port):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_9b85c60c","line":99,"updated":"2020-01-24 13:33:09.000000000","message":"The value of this query should be stored in a internal variable. If I\u0027m not wrong, this won\u0027t change during the client execution. We can execute this query just once.","commit_id":"fe24e82fb1456a103e4264ab283ea090278be6e1"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"271261c0c5b2450b8bc4aa2ff32d291bc4e8f132","unresolved":false,"context_lines":[{"line_number":96,"context_line":"        # \"virtual\" port type was added in the version 2.12 of OVN"},{"line_number":97,"context_line":"        return self._sb_idl.is_col_present(\u0027Port_Binding\u0027, \u0027virtual_parent\u0027)"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    def is_external_ports_supported(self):"},{"line_number":100,"context_line":"        return self._nb_idl.is_table_present(\u0027HA_Chassis_Group\u0027)"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    def _get_allowed_addresses_from_port(self, port):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_56196373","line":99,"in_reply_to":"3fa7e38b_9b85c60c","updated":"2020-01-24 14:25:14.000000000","message":"This is really querying the DB. The IDL (self._nb_idl) already has an in-memory copy of these information in a dictionary [0] ({\u003ctable-name\u003e: \u003cschema\u003e}) so this should be a very fast search (O(1)).\n\n[0] https://github.com/openstack/neutron/blob/e15d1003f845a347b80fd2410b18a1ffd49baa39/neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/impl_idl_ovn.py#L77-L84","commit_id":"fe24e82fb1456a103e4264ab283ea090278be6e1"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"6e2d9afbad0ff041acab5ff0addedfcf8b949863","unresolved":false,"context_lines":[{"line_number":97,"context_line":"        return self._sb_idl.is_col_present(\u0027Port_Binding\u0027, \u0027virtual_parent\u0027)"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    def is_external_ports_supported(self):"},{"line_number":100,"context_line":"        return self._nb_idl.is_table_present(\u0027HA_Chassis_Group\u0027)"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    def _get_allowed_addresses_from_port(self, port):"},{"line_number":103,"context_line":"        if not port.get(psec.PORTSECURITY):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_9b9626a0","line":100,"updated":"2020-01-24 13:33:09.000000000","message":"Is that enough to know that external ports are allowed? Because I think you can have this NB table but not the code to implement the logic in the controllers [1]\n\n[1] https://lists.linuxfoundation.org/pipermail/ovs-dev/2019-March/356968.html","commit_id":"fe24e82fb1456a103e4264ab283ea090278be6e1"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"271261c0c5b2450b8bc4aa2ff32d291bc4e8f132","unresolved":false,"context_lines":[{"line_number":97,"context_line":"        return self._sb_idl.is_col_present(\u0027Port_Binding\u0027, \u0027virtual_parent\u0027)"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    def is_external_ports_supported(self):"},{"line_number":100,"context_line":"        return self._nb_idl.is_table_present(\u0027HA_Chassis_Group\u0027)"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    def _get_allowed_addresses_from_port(self, port):"},{"line_number":103,"context_line":"        if not port.get(psec.PORTSECURITY):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_b69bf7c5","line":100,"in_reply_to":"3fa7e38b_9b9626a0","updated":"2020-01-24 14:25:14.000000000","message":"That\u0027s a very good point, I took another look at the patch that introduced the support for external ports and it does not add this table (it existed previously as u pointed out).\n\nHowever, we could look at the the \"ha_chassis_group\" column of the Logical_Switch_Port table [0] in order to determine if it\u0027s supported or not.\n\nGreat catch, I will change the code.\n\n[0] https://github.com/ovn-org/ovn/commit/b31c76000bef314b68e776d318d1ce4cf152450b#diff-9878c4b324a3aff23893a548d48354fdR105","commit_id":"fe24e82fb1456a103e4264ab283ea090278be6e1"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"6e2d9afbad0ff041acab5ff0addedfcf8b949863","unresolved":false,"context_lines":[{"line_number":543,"context_line":""},{"line_number":544,"context_line":"            if self.is_external_ports_supported():"},{"line_number":545,"context_line":"                if port_info.type \u003d\u003d ovn_const.LSP_TYPE_EXTERNAL:"},{"line_number":546,"context_line":"                    columns_dict[\u0027ha_chassis_group\u0027] \u003d ("},{"line_number":547,"context_line":"                        self._get_default_ha_chassis_group())"},{"line_number":548,"context_line":"                else:"},{"line_number":549,"context_line":"                    # Clear the ha_chassis_group field"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_bb84425e","line":546,"updated":"2020-01-24 13:33:09.000000000","message":"But this information should be set in the port register when it\u0027s created, shouldn\u0027t it?","commit_id":"fe24e82fb1456a103e4264ab283ea090278be6e1"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"271261c0c5b2450b8bc4aa2ff32d291bc4e8f132","unresolved":false,"context_lines":[{"line_number":543,"context_line":""},{"line_number":544,"context_line":"            if self.is_external_ports_supported():"},{"line_number":545,"context_line":"                if port_info.type \u003d\u003d ovn_const.LSP_TYPE_EXTERNAL:"},{"line_number":546,"context_line":"                    columns_dict[\u0027ha_chassis_group\u0027] \u003d ("},{"line_number":547,"context_line":"                        self._get_default_ha_chassis_group())"},{"line_number":548,"context_line":"                else:"},{"line_number":549,"context_line":"                    # Clear the ha_chassis_group field"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_f6ac0fec","line":546,"in_reply_to":"3fa7e38b_bb84425e","updated":"2020-01-24 14:25:14.000000000","message":"Yes, but people can update the type of the port, no ?\n\nI think the API does not prevent it.","commit_id":"fe24e82fb1456a103e4264ab283ea090278be6e1"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"6e2d9afbad0ff041acab5ff0addedfcf8b949863","unresolved":false,"context_lines":[{"line_number":1338,"context_line":"        # TODO(lucasagomes): Simplify the logic here, the CMS option has"},{"line_number":1339,"context_line":"        # been introduced long ago and by now all gateway chassis should"},{"line_number":1340,"context_line":"        # include it. This will match the logic in the is_gateway_chassis()"},{"line_number":1341,"context_line":"        # (utils.py)"},{"line_number":1342,"context_line":"        cms \u003d cms or self._sb_idl.get_gateway_chassis_from_cms_options()"},{"line_number":1343,"context_line":"        chassis_physnets \u003d (chassis_physnets or"},{"line_number":1344,"context_line":"                            self._sb_idl.get_chassis_and_physnets())"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_db881e6d","line":1341,"updated":"2020-01-24 13:33:09.000000000","message":"Is this TODO related to this patch?","commit_id":"fe24e82fb1456a103e4264ab283ea090278be6e1"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"271261c0c5b2450b8bc4aa2ff32d291bc4e8f132","unresolved":false,"context_lines":[{"line_number":1338,"context_line":"        # TODO(lucasagomes): Simplify the logic here, the CMS option has"},{"line_number":1339,"context_line":"        # been introduced long ago and by now all gateway chassis should"},{"line_number":1340,"context_line":"        # include it. This will match the logic in the is_gateway_chassis()"},{"line_number":1341,"context_line":"        # (utils.py)"},{"line_number":1342,"context_line":"        cms \u003d cms or self._sb_idl.get_gateway_chassis_from_cms_options()"},{"line_number":1343,"context_line":"        chassis_physnets \u003d (chassis_physnets or"},{"line_number":1344,"context_line":"                            self._sb_idl.get_chassis_and_physnets())"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_b684575e","line":1341,"in_reply_to":"3fa7e38b_db881e6d","updated":"2020-01-24 14:25:14.000000000","message":"I would argue that yes.\n\nCause this is_gateway_chassis() was part of this patch before (as well as the constant for the \"switchdev\") but for some reason we\u0027ve included it in the utils.py and constants.py when we were porting the code from networking-ovn to neutron.\n\nSee the patch in networking-ovn: https://review.opendev.org/#/c/678261/15/networking_ovn/common/utils.py","commit_id":"fe24e82fb1456a103e4264ab283ea090278be6e1"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"e2e48b76bb08dedcaa0781fff097996cec306934","unresolved":false,"context_lines":[{"line_number":1331,"context_line":"        2) if no chassis is available from 1) then,"},{"line_number":1332,"context_line":"           select chassis with proper bridge mappings"},{"line_number":1333,"context_line":"        \"\"\""},{"line_number":1334,"context_line":"        # TODO(lucasagomes): Simplify the logic here, the CMS option has"},{"line_number":1335,"context_line":"        # been introduced long ago and by now all gateway chassis should"},{"line_number":1336,"context_line":"        # include it. This will match the logic in the is_gateway_chassis()"},{"line_number":1337,"context_line":"        # (utils.py)"},{"line_number":1338,"context_line":"        cms \u003d cms or self._sb_idl.get_gateway_chassis_from_cms_options()"},{"line_number":1339,"context_line":"        chassis_physnets \u003d (chassis_physnets or"},{"line_number":1340,"context_line":"                            self._sb_idl.get_chassis_and_physnets())"}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_31d57549","line":1337,"range":{"start_line":1334,"start_character":0,"end_line":1337,"end_character":20},"updated":"2020-01-31 15:02:30.000000000","message":"++","commit_id":"4ace57134b6bbc8c20ee7b1e7a769933f7065d3f"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"2551b9da0f0c55dfccb74251d07269ce793bebfc","unresolved":false,"context_lines":[{"line_number":260,"context_line":"            capabilities \u003d utils.get_port_capabilities(port)"},{"line_number":261,"context_line":"            vnic_type \u003d port.get(portbindings.VNIC_TYPE,"},{"line_number":262,"context_line":"                                 portbindings.VNIC_NORMAL)"},{"line_number":263,"context_line":"            if (self.is_external_ports_supported() and"},{"line_number":264,"context_line":"                    vnic_type \u003d\u003d portbindings.VNIC_DIRECT and"},{"line_number":265,"context_line":"                    ovn_const.PORT_CAP_SWITCHDEV not in capabilities):"},{"line_number":266,"context_line":"                port_type \u003d ovn_const.LSP_TYPE_EXTERNAL"},{"line_number":267,"context_line":""},{"line_number":268,"context_line":"            # The \"unknown\" address should only be set for the normal LSP"}],"source_content_type":"text/x-python","patch_set":6,"id":"1fa4df85_ad6a01ea","line":265,"range":{"start_line":263,"start_character":0,"end_line":265,"end_character":70},"updated":"2020-03-03 11:10:05.000000000","message":"Would it make sense to issue a warning if OVN doesn\u0027t support external ports but vnic type is VNIC_DIRECT? Like:\n\n if (vnic_type \u003d\u003d portbindings.VNIC_DIRECT and\n                    ovn_const.PORT_CAP_SWITCHDEV not in capabilities):\n     if self.is_external_ports_supported():\n         port_type \u003d ovn_const.LSP_TYPE_EXTERNAL\n     else:\n         LOG.warning(\"You need OVN version X to be able to run SR-IOV ports with OVN native DHCP\")","commit_id":"47f1389d6916462edf8fae36a5cd8bb372fbde3a"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"e53168f6857d6a1d8e6e06e385b60289f7f94f3f","unresolved":false,"context_lines":[{"line_number":260,"context_line":"            capabilities \u003d utils.get_port_capabilities(port)"},{"line_number":261,"context_line":"            vnic_type \u003d port.get(portbindings.VNIC_TYPE,"},{"line_number":262,"context_line":"                                 portbindings.VNIC_NORMAL)"},{"line_number":263,"context_line":"            if (self.is_external_ports_supported() and"},{"line_number":264,"context_line":"                    vnic_type \u003d\u003d portbindings.VNIC_DIRECT and"},{"line_number":265,"context_line":"                    ovn_const.PORT_CAP_SWITCHDEV not in capabilities):"},{"line_number":266,"context_line":"                port_type \u003d ovn_const.LSP_TYPE_EXTERNAL"},{"line_number":267,"context_line":""},{"line_number":268,"context_line":"            # The \"unknown\" address should only be set for the normal LSP"}],"source_content_type":"text/x-python","patch_set":6,"id":"1fa4df85_88c4d392","line":265,"range":{"start_line":263,"start_character":0,"end_line":265,"end_character":70},"in_reply_to":"1fa4df85_ad6a01ea","updated":"2020-03-03 11:25:24.000000000","message":"Can be added yes. I would only avoiding logging a specific version because people can backport the feature to whatever version.\n\nMay I suggest something like: \"The version of OVN used does not support the \"external ports\" feature used for SR-IOV ports with OVN native DHCP\"\n\n?","commit_id":"47f1389d6916462edf8fae36a5cd8bb372fbde3a"}],"neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/ovsdb_monitor.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"6e2d9afbad0ff041acab5ff0addedfcf8b949863","unresolved":false,"context_lines":[{"line_number":111,"context_line":""},{"line_number":112,"context_line":"            self.driver._nb_ovn.ha_chassis_group_add_chassis("},{"line_number":113,"context_line":"                ovn_const.HA_CHASSIS_GROUP_DEFAULT_NAME, row.name,"},{"line_number":114,"context_line":"                priority\u003dmin_priority - 1).execute(check_error\u003dTrue)"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"        elif event \u003d\u003d self.ROW_DELETE:"},{"line_number":117,"context_line":"            self.driver._nb_ovn.ha_chassis_group_del_chassis("}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_dbe7be0f","line":114,"range":{"start_line":114,"start_character":37,"end_line":114,"end_character":41},"updated":"2020-01-24 13:33:09.000000000","message":"why minus one?","commit_id":"fe24e82fb1456a103e4264ab283ea090278be6e1"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"271261c0c5b2450b8bc4aa2ff32d291bc4e8f132","unresolved":false,"context_lines":[{"line_number":111,"context_line":""},{"line_number":112,"context_line":"            self.driver._nb_ovn.ha_chassis_group_add_chassis("},{"line_number":113,"context_line":"                ovn_const.HA_CHASSIS_GROUP_DEFAULT_NAME, row.name,"},{"line_number":114,"context_line":"                priority\u003dmin_priority - 1).execute(check_error\u003dTrue)"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"        elif event \u003d\u003d self.ROW_DELETE:"},{"line_number":117,"context_line":"            self.driver._nb_ovn.ha_chassis_group_del_chassis("}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_b6d2175a","line":114,"range":{"start_line":114,"start_character":37,"end_line":114,"end_character":41},"in_reply_to":"3fa7e38b_dbe7be0f","updated":"2020-01-24 14:25:14.000000000","message":"Because otherwise we would need to update the priority of the other chassis.\n\nThe way the HA Chassis Group work is by electing the chassis with the highest priority. So say we have 3 chassis in the group already with the following priorities: 100, 99, 98.\n\nThis code finds the lowest one, which is 98 in our example, and then add the new chassis as 97.","commit_id":"fe24e82fb1456a103e4264ab283ea090278be6e1"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"19e898dc5eb36fcf2c2cf54de457030e44fa1f18","unresolved":false,"context_lines":[{"line_number":73,"context_line":"        super(ChassisEvent, self).__init__(events, table, None)"},{"line_number":74,"context_line":"        self.event_name \u003d \u0027ChassisEvent\u0027"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    def handle_ha_chassis_group_changes(self, event, row, old):"},{"line_number":77,"context_line":"        \"\"\"Handle HA Chassis Group changes."},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"        This method handles the inclusion and removal of Chassis to/from"}],"source_content_type":"text/x-python","patch_set":13,"id":"1fa4df85_dc436c12","line":76,"updated":"2020-03-03 12:35:24.000000000","message":"It looks like we don\u0027t test adding/removing/updating chassis anywhere, do we?","commit_id":"ddc0675b564dcdb7d4a34097dbe91b3ee681d58e"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"40c011c513b6855f0e2740d37cdf1eb1173a4de1","unresolved":false,"context_lines":[{"line_number":73,"context_line":"        super(ChassisEvent, self).__init__(events, table, None)"},{"line_number":74,"context_line":"        self.event_name \u003d \u0027ChassisEvent\u0027"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    def handle_ha_chassis_group_changes(self, event, row, old):"},{"line_number":77,"context_line":"        \"\"\"Handle HA Chassis Group changes."},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"        This method handles the inclusion and removal of Chassis to/from"}],"source_content_type":"text/x-python","patch_set":13,"id":"1fa4df85_fc63c840","line":76,"in_reply_to":"1fa4df85_dc436c12","updated":"2020-03-03 13:09:45.000000000","message":"Ops, good point yeah I don\u0027t think we have tests for this... I will add some","commit_id":"ddc0675b564dcdb7d4a34097dbe91b3ee681d58e"}],"neutron/tests/functional/plugins/ml2/drivers/ovn/mech_driver/test_mech_driver.py":[{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"19e898dc5eb36fcf2c2cf54de457030e44fa1f18","unresolved":false,"context_lines":[{"line_number":449,"context_line":"            ovn_const.HA_CHASSIS_GROUP_DEFAULT_NAME).execute(check_error\u003dTrue)"},{"line_number":450,"context_line":""},{"line_number":451,"context_line":"    def _find_port_row_by_name(self, name):"},{"line_number":452,"context_line":"        for row in self.nb_api._tables[\u0027Logical_Switch_Port\u0027].rows.values():"},{"line_number":453,"context_line":"            if name \u003d\u003d row.name:"},{"line_number":454,"context_line":"                return row"},{"line_number":455,"context_line":""},{"line_number":456,"context_line":"    def test_external_port_create(self):"},{"line_number":457,"context_line":"        port_data \u003d {"}],"source_content_type":"text/x-python","patch_set":6,"id":"1fa4df85_28059f14","line":454,"range":{"start_line":452,"start_character":8,"end_line":454,"end_character":26},"updated":"2020-03-03 12:35:24.000000000","message":"Can you do:\n\n self.nb_api.db_find_row(\u0027Logical_Switch_Port\u0027, (\u0027name\u0027, \u0027\u003d\u0027, name))\n\n?","commit_id":"47f1389d6916462edf8fae36a5cd8bb372fbde3a"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"2afdeed267b99d510f5cf85b47bb9c9136c97afc","unresolved":false,"context_lines":[{"line_number":449,"context_line":"            ovn_const.HA_CHASSIS_GROUP_DEFAULT_NAME).execute(check_error\u003dTrue)"},{"line_number":450,"context_line":""},{"line_number":451,"context_line":"    def _find_port_row_by_name(self, name):"},{"line_number":452,"context_line":"        for row in self.nb_api._tables[\u0027Logical_Switch_Port\u0027].rows.values():"},{"line_number":453,"context_line":"            if name \u003d\u003d row.name:"},{"line_number":454,"context_line":"                return row"},{"line_number":455,"context_line":""},{"line_number":456,"context_line":"    def test_external_port_create(self):"},{"line_number":457,"context_line":"        port_data \u003d {"}],"source_content_type":"text/x-python","patch_set":6,"id":"1fa4df85_9c497432","line":454,"range":{"start_line":452,"start_character":8,"end_line":454,"end_character":26},"in_reply_to":"1fa4df85_28059f14","updated":"2020-03-03 12:35:48.000000000","message":"Ignore this, I was on wrong PS :-/","commit_id":"47f1389d6916462edf8fae36a5cd8bb372fbde3a"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"19e898dc5eb36fcf2c2cf54de457030e44fa1f18","unresolved":false,"context_lines":[{"line_number":449,"context_line":"            ovn_const.HA_CHASSIS_GROUP_DEFAULT_NAME).execute(check_error\u003dTrue)"},{"line_number":450,"context_line":""},{"line_number":451,"context_line":"    def _find_port_row_by_name(self, name):"},{"line_number":452,"context_line":"        for row in self.nb_api._tables[\u0027Logical_Switch_Port\u0027].rows.values():"},{"line_number":453,"context_line":"            if name \u003d\u003d row.name:"},{"line_number":454,"context_line":"                return row"},{"line_number":455,"context_line":""},{"line_number":456,"context_line":"    def test_external_port_create(self):"},{"line_number":457,"context_line":"        port_data \u003d {"}],"source_content_type":"text/x-python","patch_set":13,"id":"1fa4df85_9cdbb47a","line":454,"range":{"start_line":452,"start_character":0,"end_line":454,"end_character":26},"updated":"2020-03-03 12:35:24.000000000","message":"Can you do:\n\n self.nb_api.db_find_row(\u0027Logical_Switch_Port\u0027, (\u0027name\u0027, \u0027\u003d\u0027, name))\n\n?","commit_id":"ddc0675b564dcdb7d4a34097dbe91b3ee681d58e"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"40c011c513b6855f0e2740d37cdf1eb1173a4de1","unresolved":false,"context_lines":[{"line_number":449,"context_line":"            ovn_const.HA_CHASSIS_GROUP_DEFAULT_NAME).execute(check_error\u003dTrue)"},{"line_number":450,"context_line":""},{"line_number":451,"context_line":"    def _find_port_row_by_name(self, name):"},{"line_number":452,"context_line":"        for row in self.nb_api._tables[\u0027Logical_Switch_Port\u0027].rows.values():"},{"line_number":453,"context_line":"            if name \u003d\u003d row.name:"},{"line_number":454,"context_line":"                return row"},{"line_number":455,"context_line":""},{"line_number":456,"context_line":"    def test_external_port_create(self):"},{"line_number":457,"context_line":"        port_data \u003d {"}],"source_content_type":"text/x-python","patch_set":13,"id":"1fa4df85_bc80f0c0","line":454,"range":{"start_line":452,"start_character":0,"end_line":454,"end_character":26},"in_reply_to":"1fa4df85_9cdbb47a","updated":"2020-03-03 13:09:45.000000000","message":"Sure, will change it.","commit_id":"ddc0675b564dcdb7d4a34097dbe91b3ee681d58e"}]}
