)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"3eb9ab4cc992394d1e8a2b0900bd2b21d947b800","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"do not skip ports with unset or invalid ofport"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"- This cahnge removes the _check_ofport function"},{"line_number":10,"context_line":"  and its use form the ovs_lib.py file"},{"line_number":11,"context_line":"- By skipping ports without a unique ofport"},{"line_number":12,"context_line":"  in the get_vifs_by_ids and get_vifs_by_id"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"9fdfeff1_cff49dd3","line":9,"range":{"start_line":9,"start_character":7,"end_line":9,"end_character":13},"updated":"2019-03-01 19:51:31.000000000","message":"nit: change","commit_id":"9a32d92e9e6d10ac7de192aff049028c607ac6b0"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"3eb9ab4cc992394d1e8a2b0900bd2b21d947b800","unresolved":false,"context_lines":[{"line_number":7,"context_line":"do not skip ports with unset or invalid ofport"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"- This cahnge removes the _check_ofport function"},{"line_number":10,"context_line":"  and its use form the ovs_lib.py file"},{"line_number":11,"context_line":"- By skipping ports without a unique ofport"},{"line_number":12,"context_line":"  in the get_vifs_by_ids and get_vifs_by_id"},{"line_number":13,"context_line":"  functions the ovs l2 agent incorrectly treated"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"9fdfeff1_8ffe95ad","line":10,"range":{"start_line":10,"start_character":14,"end_line":10,"end_character":18},"updated":"2019-03-01 19:51:31.000000000","message":"nit: probably should be \"from\"","commit_id":"9a32d92e9e6d10ac7de192aff049028c607ac6b0"},{"author":{"_account_id":11952,"name":"Flavio Fernandes","email":"flavio@flaviof.com","username":"ffernand"},"change_message_id":"2a97d5b350a426727fc213395bdfb8f945ec03d7","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"do not skip ports with unset or invalid ofport"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"- This cahnge removes the _check_ofport function"},{"line_number":10,"context_line":"  and its use form the ovs_lib.py file"},{"line_number":11,"context_line":"- By skipping ports without a unique ofport"},{"line_number":12,"context_line":"  in the get_vifs_by_ids and get_vifs_by_id"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"3fa7e38b_fe2f3e3c","line":9,"range":{"start_line":9,"start_character":7,"end_line":9,"end_character":13},"updated":"2019-09-24 09:44:01.000000000","message":"nit: typo change","commit_id":"74ce882db190cf245d416997844515c32c6be9dd"}],"neutron/agent/common/ovs_lib.py":[{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"3eb9ab4cc992394d1e8a2b0900bd2b21d947b800","unresolved":false,"context_lines":[{"line_number":624,"context_line":"                continue"},{"line_number":625,"context_line":"            pinfo \u003d by_id[port_id]"},{"line_number":626,"context_line":"            if not self._check_ofport(port_id, pinfo):"},{"line_number":627,"context_line":"                continue"},{"line_number":628,"context_line":"            mac \u003d pinfo[\u0027external_ids\u0027].get(\u0027attached-mac\u0027)"},{"line_number":629,"context_line":"            result[port_id] \u003d VifPort(pinfo[\u0027name\u0027], pinfo[\u0027ofport\u0027],"},{"line_number":630,"context_line":"                                      port_id, mac, self)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fdfeff1_2fde893e","side":"PARENT","line":627,"updated":"2019-03-01 19:51:31.000000000","message":"so now unassigned and invalid ports will be added to results list?","commit_id":"376fa8aef49fa45c7038be4648aecd6899fb8d4e"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"5949da8c31fe7f501e7a28b10035f4b4c42a2fe8","unresolved":false,"context_lines":[{"line_number":624,"context_line":"                continue"},{"line_number":625,"context_line":"            pinfo \u003d by_id[port_id]"},{"line_number":626,"context_line":"            if not self._check_ofport(port_id, pinfo):"},{"line_number":627,"context_line":"                continue"},{"line_number":628,"context_line":"            mac \u003d pinfo[\u0027external_ids\u0027].get(\u0027attached-mac\u0027)"},{"line_number":629,"context_line":"            result[port_id] \u003d VifPort(pinfo[\u0027name\u0027], pinfo[\u0027ofport\u0027],"},{"line_number":630,"context_line":"                                      port_id, mac, self)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fdfeff1_318023f8","side":"PARENT","line":627,"in_reply_to":"9fdfeff1_2fde893e","updated":"2019-03-02 21:54:22.000000000","message":"yes to fix both bugs listed in the commit message we need to allowthe neutron agent to wire up ports that have been added to the ovsdb before the corresponding tap device is created by qemu/libvit.\n\nthe ofport will be updated to a value other then -1 once the tap is created and the the ovs moinor process will detect the update.","commit_id":"376fa8aef49fa45c7038be4648aecd6899fb8d4e"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"3c75e3d6fb9ae28f10c3b62e84637c5c8e12abea","unresolved":false,"context_lines":[{"line_number":612,"context_line":"            \u0027Port\u0027, columns\u003d[\u0027name\u0027, \u0027tag\u0027], if_exists\u003dTrue)"},{"line_number":613,"context_line":"        return {p[\u0027name\u0027]: p[\u0027tag\u0027] for p in results}"},{"line_number":614,"context_line":""},{"line_number":615,"context_line":"    def get_vifs_by_ids(self, port_ids):"},{"line_number":616,"context_line":"        interface_info \u003d self.get_ports_attributes("},{"line_number":617,"context_line":"            \"Interface\", columns\u003d[\"name\", \"external_ids\", \"ofport\"],"},{"line_number":618,"context_line":"            if_exists\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":5,"id":"5fc1f717_7050ee33","line":615,"range":{"start_line":615,"start_character":8,"end_line":615,"end_character":23},"updated":"2019-03-05 18:31:29.000000000","message":"for those reviewing \nthis function is called by treat_devices_added_or_updated\nwhich is called by process_network_ports.\n\ni am removing skipping port with a ofport of -1 or [] here\nso we can asign them to the the correct tenant vlan in\ntreat_devices_added_or_updated\n\nand move the check for the ofport to \nneutron/agent/securitygroups_rpc.py\n\ni will proably move this to the firwall drived instead based on feedback","commit_id":"c4183a691e201655371f9d164e56d8bf883bc334"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"7670ea17994cb0005865498e36aa4ea9cc54c346","unresolved":false,"context_lines":[{"line_number":612,"context_line":"            \u0027Port\u0027, columns\u003d[\u0027name\u0027, \u0027tag\u0027], if_exists\u003dTrue)"},{"line_number":613,"context_line":"        return {p[\u0027name\u0027]: p[\u0027tag\u0027] for p in results}"},{"line_number":614,"context_line":""},{"line_number":615,"context_line":"    def get_vifs_by_ids(self, port_ids):"},{"line_number":616,"context_line":"        interface_info \u003d self.get_ports_attributes("},{"line_number":617,"context_line":"            \"Interface\", columns\u003d[\"name\", \"external_ids\", \"ofport\"],"},{"line_number":618,"context_line":"            if_exists\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":5,"id":"5fc1f717_e1137765","line":615,"range":{"start_line":615,"start_character":8,"end_line":615,"end_character":23},"in_reply_to":"5fc1f717_7050ee33","updated":"2019-03-07 20:07:51.000000000","message":"Please, correct me if I\u0027m wrong.\n\nI think what you want is to process this port without ofport, and add the vlan mapping in [1]--\u003e[2]--\u003e[3]\n\nWhy do you need this info?\n\nIn order to do this, you need to change this check [4], because ofport can be [].\n\nAs commented by Brian, you need to skip the ext_manager.handle_port() call if [] or -1.\n\n[1] https://github.com/openstack/neutron/blob/master/neutron/plugins/ml2/drivers/openvswitch/agent/ovs_neutron_agent.py#L1652\n[2] https://github.com/openstack/neutron/blob/master/neutron/plugins/ml2/drivers/openvswitch/agent/ovs_neutron_agent.py#L1534\n[3] https://github.com/openstack/neutron/blob/master/neutron/plugins/ml2/drivers/openvswitch/agent/ovs_neutron_agent.py#L869\n[4] https://github.com/openstack/neutron/blob/master/neutron/plugins/ml2/drivers/openvswitch/agent/ovs_neutron_agent.py#L1528","commit_id":"c4183a691e201655371f9d164e56d8bf883bc334"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cc7c16adc1da3938efb8d6c76ab8c07fc542b0eb","unresolved":false,"context_lines":[{"line_number":612,"context_line":"            \u0027Port\u0027, columns\u003d[\u0027name\u0027, \u0027tag\u0027], if_exists\u003dTrue)"},{"line_number":613,"context_line":"        return {p[\u0027name\u0027]: p[\u0027tag\u0027] for p in results}"},{"line_number":614,"context_line":""},{"line_number":615,"context_line":"    def get_vifs_by_ids(self, port_ids):"},{"line_number":616,"context_line":"        interface_info \u003d self.get_ports_attributes("},{"line_number":617,"context_line":"            \"Interface\", columns\u003d[\"name\", \"external_ids\", \"ofport\"],"},{"line_number":618,"context_line":"            if_exists\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":5,"id":"5fc1f717_bdffc2ff","line":615,"range":{"start_line":615,"start_character":8,"end_line":615,"end_character":23},"in_reply_to":"5fc1f717_e1137765","updated":"2019-03-08 14:33:37.000000000","message":"i need to make this change because the curent call to \n\nget_vifs_by_ids \nhere https://github.com/openstack/neutron/blob/master/neutron/plugins/ml2/drivers/openvswitch/agent/ovs_neutron_agent.py#L1634\n\nhas port wit ofport [] or -1 remove because fo the _check_ofport function below and that means that\nhttps://github.com/openstack/neutron/blob/master/neutron/plugins/ml2/drivers/openvswitch/agent/ovs_neutron_agent.py#L1639-L1640\nreturn none and skips the code i need to execute that you point to \n\ne.g \n [1]--\u003e[2]--\u003e[3]\n\ni skipped the call to \next_manager.handle_port()\n\nin version 2 \nhttps://review.openstack.org/#/c/640258/2/neutron/plugins/ml2/drivers/openvswitch/agent/ovs_neutron_agent.py\n\ni remved that because in theory qos can be applied without the port having an ofport but i can re add.","commit_id":"c4183a691e201655371f9d164e56d8bf883bc334"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"9baa5739299a4aed34e5441f8108c568937f89fa","unresolved":false,"context_lines":[{"line_number":631,"context_line":"                         {\u0027port_id\u0027: port_id, \u0027br_name\u0027: self.br_name})"},{"line_number":632,"context_line":"                continue"},{"line_number":633,"context_line":"            pinfo \u003d by_id[port_id]"},{"line_number":634,"context_line":"            if not self._check_ofport(port_id, pinfo):"},{"line_number":635,"context_line":"                continue"},{"line_number":636,"context_line":"            mac \u003d pinfo[\u0027external_ids\u0027].get(\u0027attached-mac\u0027)"},{"line_number":637,"context_line":"            result[port_id] \u003d VifPort(pinfo[\u0027name\u0027], pinfo[\u0027ofport\u0027],"},{"line_number":638,"context_line":"                                      port_id, mac, self)"}],"source_content_type":"text/x-python","patch_set":8,"id":"7faddb67_1ad7db25","side":"PARENT","line":635,"range":{"start_line":634,"start_character":13,"end_line":635,"end_character":24},"updated":"2019-07-11 11:55:49.000000000","message":"OK, now I understand what you need here. But you should modify only this method, not \"get_vif_port_by_id\".\n\nBTW, you should also handle https://github.com/openstack/neutron/blob/3b2521a89496a9857ed3873e5a0172a41b2f8a9f/neutron/plugins/ml2/drivers/openvswitch/agent/ovs_dvr_neutron_agent.py#L401","commit_id":"a832a1d1b30c2eb4ab3d71fc793da766b83ec6de"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"38c02f218d730eca70525ee3b39377c6d7f15080","unresolved":false,"context_lines":[{"line_number":631,"context_line":"                         {\u0027port_id\u0027: port_id, \u0027br_name\u0027: self.br_name})"},{"line_number":632,"context_line":"                continue"},{"line_number":633,"context_line":"            pinfo \u003d by_id[port_id]"},{"line_number":634,"context_line":"            if not self._check_ofport(port_id, pinfo):"},{"line_number":635,"context_line":"                continue"},{"line_number":636,"context_line":"            mac \u003d pinfo[\u0027external_ids\u0027].get(\u0027attached-mac\u0027)"},{"line_number":637,"context_line":"            result[port_id] \u003d VifPort(pinfo[\u0027name\u0027], pinfo[\u0027ofport\u0027],"},{"line_number":638,"context_line":"                                      port_id, mac, self)"}],"source_content_type":"text/x-python","patch_set":8,"id":"7faddb67_d5f6f4f9","side":"PARENT","line":635,"range":{"start_line":634,"start_character":13,"end_line":635,"end_character":24},"in_reply_to":"7faddb67_1ad7db25","updated":"2019-07-11 12:53:25.000000000","message":"why _check_ofport is only used in\nthis class \n\nhttp://codesearch.openstack.org/?q\u003d_check_ofport\u0026i\u003dnope\u0026files\u003d\u0026repos\u003d\n\nget_vif_port_by_id sould not be called with None, [] or -1 anyway so im not sure what benifit we get form not modifying the get_vif_port_by_id below.\n\ni can do that but did you have a specific reason to keep it?","commit_id":"a832a1d1b30c2eb4ab3d71fc793da766b83ec6de"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"96789b9c67d8067f468ff9f246d4319aae5a3f6b","unresolved":false,"context_lines":[{"line_number":631,"context_line":"                         {\u0027port_id\u0027: port_id, \u0027br_name\u0027: self.br_name})"},{"line_number":632,"context_line":"                continue"},{"line_number":633,"context_line":"            pinfo \u003d by_id[port_id]"},{"line_number":634,"context_line":"            if not self._check_ofport(port_id, pinfo):"},{"line_number":635,"context_line":"                continue"},{"line_number":636,"context_line":"            mac \u003d pinfo[\u0027external_ids\u0027].get(\u0027attached-mac\u0027)"},{"line_number":637,"context_line":"            result[port_id] \u003d VifPort(pinfo[\u0027name\u0027], pinfo[\u0027ofport\u0027],"},{"line_number":638,"context_line":"                                      port_id, mac, self)"}],"source_content_type":"text/x-python","patch_set":8,"id":"7faddb67_77326860","side":"PARENT","line":635,"range":{"start_line":634,"start_character":13,"end_line":635,"end_character":24},"in_reply_to":"7faddb67_d5f6f4f9","updated":"2019-07-16 10:54:09.000000000","message":"If you then handle correctly those ports with ofport \"unsassigned\" or \"invalid\", I\u0027m ok with this patch.\n\nPlease, take care of https://github.com/openstack/neutron/blob/3b2521a89496a9857ed3873e5a0172a41b2f8a9f/neutron/plugins/ml2/drivers/openvswitch/agent/ovs_dvr_neutron_agent.py#L401","commit_id":"a832a1d1b30c2eb4ab3d71fc793da766b83ec6de"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"2ae6514824810f0afb5bec64ceda9f24e7243890","unresolved":false,"context_lines":[{"line_number":115,"context_line":"                    self.port_name, self.ofport,"},{"line_number":116,"context_line":"                    self.switch.br_name)"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    def __repr__(self):"},{"line_number":119,"context_line":"        return self.__str__()"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"class BaseOVS(object):"}],"source_content_type":"text/x-python","patch_set":23,"id":"9f560f44_516efdc8","line":119,"range":{"start_line":118,"start_character":0,"end_line":119,"end_character":29},"updated":"2020-08-04 12:56:05.000000000","message":"nit: in general this is proably not a good pattern to use as it can cause loops i think in some cases.\n\nstr() calls __str__ but if its not present it calls __repr__\nso you sure just rename __str__ to __repr__ above it should be suffienct\n\n\nthis does work in this case however so you dont actully need to change anything but repr calling str makes me nervous normally since srt calls repr.\n\ni think by using self.__str__() instead of str(self)\nthis cant actully from loops but using str(self) and repr(self) in the definition of __str__ and __repr__ can cause problems.","commit_id":"ec28418a56ce12c5ebe089d88752e9308400ce05"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"0bbc7039555e84e4b939eecd3d88e64ca35035c8","unresolved":false,"context_lines":[{"line_number":115,"context_line":"                    self.port_name, self.ofport,"},{"line_number":116,"context_line":"                    self.switch.br_name)"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    def __repr__(self):"},{"line_number":119,"context_line":"        return self.__str__()"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"class BaseOVS(object):"}],"source_content_type":"text/x-python","patch_set":23,"id":"9f560f44_a9d8cdee","line":119,"range":{"start_line":118,"start_character":0,"end_line":119,"end_character":29},"in_reply_to":"9f560f44_516efdc8","updated":"2020-08-04 17:46:56.000000000","message":"now I don\u0027t remember why I added this... I\u0027ll remove it","commit_id":"ec28418a56ce12c5ebe089d88752e9308400ce05"}],"neutron/agent/securitygroups_rpc.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"4d1dd92a6ce7cf40c3b1da8a5ecad060225f2685","unresolved":false,"context_lines":[{"line_number":151,"context_line":"            vif_by_id \u003d {}"},{"line_number":152,"context_line":"            if self.br_int:"},{"line_number":153,"context_line":"                vif_by_id \u003d self.br_int.get_vifs_by_ids("},{"line_number":154,"context_line":"                    [vif[\u0027device\u0027] for vif in devices])"},{"line_number":155,"context_line":"            for device in devices.values():"},{"line_number":156,"context_line":"                port \u003d vif_by_id.get(device[\u0027device\u0027])"},{"line_number":157,"context_line":"                if port and (not port.get(\u0027ofport\u0027) or"}],"source_content_type":"text/x-python","patch_set":3,"id":"9fdfeff1_a72ff53c","line":154,"range":{"start_line":154,"start_character":20,"end_line":154,"end_character":54},"updated":"2019-03-03 12:29:21.000000000","message":"this is not quite right.\n\nit should be \n[vif[\u0027device\u0027] for vif in devices.values()]\n\nim currently looping over the sting keys not that the values\nso vif[\u0027device\u0027] is subscipting the key which is invalid.\n\nill fix this in the next version and add a unit test for this.","commit_id":"66ce1235f6f6e06cd49c984f6bfeefd8fe412380"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"0c51cef579e7cca8b21f9f7cf10f2dac09fbd56d","unresolved":false,"context_lines":[{"line_number":150,"context_line":"                    security_groups, security_group_member_ips)"},{"line_number":151,"context_line":"            vif_by_id \u003d {}"},{"line_number":152,"context_line":"            if self.br_int:"},{"line_number":153,"context_line":"                vif_by_id \u003d self.br_int.get_vifs_by_ids("},{"line_number":154,"context_line":"                    [vif[\u0027device\u0027] for vif in devices.values()])"},{"line_number":155,"context_line":"            for device in devices.values():"},{"line_number":156,"context_line":"                port \u003d vif_by_id.get(device[\u0027device\u0027])"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_0c483d85","line":153,"range":{"start_line":153,"start_character":28,"end_line":153,"end_character":55},"updated":"2019-03-05 13:14:37.000000000","message":"oh this returns VifPort object not dictionaires i missed that ill fixt up the port.get(\u0027ofport\u0027) below and update the unit test to use the correct types\n\ni also need to redeploy this locally as i have not tested it end to end with the nova change since i started fixing the security group error messages.\n\nhopefully it will be the last revision.","commit_id":"b9c5fe069a2f78928363f24ff2acc5ab5a90f2c1"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"55cf8c81c7a81ebecb0b0a4ae63045914e9cb71b","unresolved":false,"context_lines":[{"line_number":155,"context_line":"            for device in devices.values():"},{"line_number":156,"context_line":"                port \u003d vif_by_id.get(device[\u0027device\u0027])"},{"line_number":157,"context_line":"                if port and (not port.ofport or port.ofport \u003d\u003d -1):"},{"line_number":158,"context_line":"                    continue"},{"line_number":159,"context_line":"                if update_filter:"},{"line_number":160,"context_line":"                    LOG.debug(\"Update port filter for %s\", device[\u0027device\u0027])"},{"line_number":161,"context_line":"                    self.firewall.update_port_filter(device)"}],"source_content_type":"text/x-python","patch_set":5,"id":"5fc1f717_6d8ed52f","line":158,"updated":"2019-03-05 17:33:39.000000000","message":"This code is generic, and shouldn\u0027t know about port details like the openflow port info imo.","commit_id":"c4183a691e201655371f9d164e56d8bf883bc334"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"3c75e3d6fb9ae28f10c3b62e84637c5c8e12abea","unresolved":false,"context_lines":[{"line_number":155,"context_line":"            for device in devices.values():"},{"line_number":156,"context_line":"                port \u003d vif_by_id.get(device[\u0027device\u0027])"},{"line_number":157,"context_line":"                if port and (not port.ofport or port.ofport \u003d\u003d -1):"},{"line_number":158,"context_line":"                    continue"},{"line_number":159,"context_line":"                if update_filter:"},{"line_number":160,"context_line":"                    LOG.debug(\"Update port filter for %s\", device[\u0027device\u0027])"},{"line_number":161,"context_line":"                    self.firewall.update_port_filter(device)"}],"source_content_type":"text/x-python","patch_set":5,"id":"5fc1f717_d311ac55","line":158,"in_reply_to":"5fc1f717_2d044d7b","updated":"2019-03-05 18:31:29.000000000","message":"so following on from my comment in ovs_lib.py\n\nhere we are skipping applying the security group filters if the netdev has not been added to the dataplane yet.\n.i.e the ofport is -1 and they will instead get install\nthe first time  process_network_ports runs in the ovs agent main loop after the ovs monitor detect that the ofport has changed and addes the interface to the set of updated interfaces.\n\nill lookin to moving this check into the firwall driver instead to keep this code generic","commit_id":"c4183a691e201655371f9d164e56d8bf883bc334"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cc7c16adc1da3938efb8d6c76ab8c07fc542b0eb","unresolved":false,"context_lines":[{"line_number":155,"context_line":"            for device in devices.values():"},{"line_number":156,"context_line":"                port \u003d vif_by_id.get(device[\u0027device\u0027])"},{"line_number":157,"context_line":"                if port and (not port.ofport or port.ofport \u003d\u003d -1):"},{"line_number":158,"context_line":"                    continue"},{"line_number":159,"context_line":"                if update_filter:"},{"line_number":160,"context_line":"                    LOG.debug(\"Update port filter for %s\", device[\u0027device\u0027])"},{"line_number":161,"context_line":"                    self.firewall.update_port_filter(device)"}],"source_content_type":"text/x-python","patch_set":5,"id":"5fc1f717_82b86376","line":158,"in_reply_to":"5fc1f717_5c54b2ca","updated":"2019-03-08 14:33:37.000000000","message":"yes i tried that first but i do not have  reuiqred port info at that point and this seamed cleaner. but i can revert to that way.","commit_id":"c4183a691e201655371f9d164e56d8bf883bc334"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"a93edb9c9d9e8fb4de32d1d2c86cb5d6f41886c3","unresolved":false,"context_lines":[{"line_number":155,"context_line":"            for device in devices.values():"},{"line_number":156,"context_line":"                port \u003d vif_by_id.get(device[\u0027device\u0027])"},{"line_number":157,"context_line":"                if port and (not port.ofport or port.ofport \u003d\u003d -1):"},{"line_number":158,"context_line":"                    continue"},{"line_number":159,"context_line":"                if update_filter:"},{"line_number":160,"context_line":"                    LOG.debug(\"Update port filter for %s\", device[\u0027device\u0027])"},{"line_number":161,"context_line":"                    self.firewall.update_port_filter(device)"}],"source_content_type":"text/x-python","patch_set":5,"id":"5fc1f717_2d044d7b","line":158,"in_reply_to":"5fc1f717_6d8ed52f","updated":"2019-03-05 17:45:06.000000000","message":"yes im not sure where else to put it. i could  add this in the firewall driver update_port_filter and prepare_port_filter\n\nwould that be perferable?","commit_id":"c4183a691e201655371f9d164e56d8bf883bc334"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"7670ea17994cb0005865498e36aa4ea9cc54c346","unresolved":false,"context_lines":[{"line_number":155,"context_line":"            for device in devices.values():"},{"line_number":156,"context_line":"                port \u003d vif_by_id.get(device[\u0027device\u0027])"},{"line_number":157,"context_line":"                if port and (not port.ofport or port.ofport \u003d\u003d -1):"},{"line_number":158,"context_line":"                    continue"},{"line_number":159,"context_line":"                if update_filter:"},{"line_number":160,"context_line":"                    LOG.debug(\"Update port filter for %s\", device[\u0027device\u0027])"},{"line_number":161,"context_line":"                    self.firewall.update_port_filter(device)"}],"source_content_type":"text/x-python","patch_set":5,"id":"5fc1f717_5c54b2ca","line":158,"in_reply_to":"5fc1f717_d311ac55","updated":"2019-03-07 20:07:51.000000000","message":"This function is called when a new/updated port is treated, in [1]--\u003e[2]--\u003e[3]\n\nInstead of this change, [1] should be called only with those ports with a valid ofport. Those ports without an ofport can\u0027t be filtered in the firewall.\n\n[1] https://github.com/openstack/neutron/blob/master/neutron/plugins/ml2/drivers/openvswitch/agent/ovs_neutron_agent.py#L1801\n[2] https://github.com/openstack/neutron/blob/master/neutron/agent/securitygroups_rpc.py#L250\n[3] https://github.com/openstack/neutron/blob/master/neutron/agent/securitygroups_rpc.py#L130","commit_id":"c4183a691e201655371f9d164e56d8bf883bc334"}],"neutron/plugins/ml2/drivers/openvswitch/agent/ovs_dvr_neutron_agent.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"e515b9e067462279de6f817027d6f75b3990025d","unresolved":false,"context_lines":[{"line_number":400,"context_line":"                  local_compute_ports)"},{"line_number":401,"context_line":"        vif_by_id \u003d self.int_br.get_vifs_by_ids("},{"line_number":402,"context_line":"            [local_port[\u0027id\u0027] for local_port in local_compute_ports if"},{"line_number":403,"context_line":"             local_port[\u0027id\u0027] not in (-1, [])])"},{"line_number":404,"context_line":"        for local_port in local_compute_ports:"},{"line_number":405,"context_line":"            vif \u003d vif_by_id.get(local_port[\u0027id\u0027])"},{"line_number":406,"context_line":"            if not vif:"}],"source_content_type":"text/x-python","patch_set":11,"id":"7faddb67_f4558f1f","line":403,"range":{"start_line":403,"start_character":38,"end_line":403,"end_character":44},"updated":"2019-08-23 13:08:50.000000000","message":"small nit: UNASSIGNED_OFPORT, INVALID_OFPORT","commit_id":"6d1235394783ecaa2b6eecfe9a0becc9763ecfc8"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"30958f7a2f6f2898b310280831973a395fa11ddb","unresolved":false,"context_lines":[{"line_number":401,"context_line":"                  local_compute_ports)"},{"line_number":402,"context_line":"        vif_by_id \u003d self.int_br.get_vifs_by_ids("},{"line_number":403,"context_line":"            [local_port[\u0027id\u0027] for local_port in local_compute_ports])"},{"line_number":404,"context_line":"        vif_by_id \u003d [vif for vif in vif_by_id if vif.ofport not in"},{"line_number":405,"context_line":"                     (ovs_lib.INVALID_OFPORT, ovs_lib.UNASSIGNED_OFPORT)]"},{"line_number":406,"context_line":"        for local_port in local_compute_ports:"},{"line_number":407,"context_line":"            vif \u003d vif_by_id.get(local_port[\u0027id\u0027])"},{"line_number":408,"context_line":"            if not vif:"}],"source_content_type":"text/x-python","patch_set":13,"id":"7faddb67_48def410","line":405,"range":{"start_line":404,"start_character":4,"end_line":405,"end_character":73},"updated":"2019-08-28 22:36:35.000000000","message":"ya so this wont work\n\nug 28 18:36:34.446568 ubuntu-bionic-rax-ord-0010497164 neutron-openvswitch-agent[11168]: ERROR neutron.plugins.ml2.drivers.openvswitch.agent.ovs_neutron_agent     vif_by_id \u003d [vif for vif in vif_by_id if vif.ofport not in\nAug 28 18:36:34.446568 ubuntu-bionic-rax-ord-0010497164 neutron-openvswitch-agent[11168]: ERROR neutron.plugins.ml2.drivers.openvswitch.agent.ovs_neutron_agent AttributeError: \u0027str\u0027 object has no attribute \u0027ofport\u0027\n\n\nvif_by_id is a dictonary  so \n\n\"for vif in vif_by_id\" is the  looping over the keys of the dict not the values.\n\nso vif is the id not the vif\n\nso this looks close but it need to by vif_by_id.values or \nbetter .items as we need to still build a filtered dict.\n\nill fix this and the unit test tomorow.","commit_id":"8db6012e980a076208e4724d10c64a3f7f8641ab"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"1ec08fe480f3bbc0e935f3973cd039a28a4c9b87","unresolved":false,"context_lines":[{"line_number":401,"context_line":"                  local_compute_ports)"},{"line_number":402,"context_line":"        vif_by_id \u003d self.int_br.get_vifs_by_ids("},{"line_number":403,"context_line":"            [local_port[\u0027id\u0027] for local_port in local_compute_ports])"},{"line_number":404,"context_line":"        vif_by_id \u003d [vif for vif in vif_by_id if vif.ofport not in"},{"line_number":405,"context_line":"                     (ovs_lib.INVALID_OFPORT, ovs_lib.UNASSIGNED_OFPORT)]"},{"line_number":406,"context_line":"        for local_port in local_compute_ports:"},{"line_number":407,"context_line":"            vif \u003d vif_by_id.get(local_port[\u0027id\u0027])"},{"line_number":408,"context_line":"            if not vif:"}],"source_content_type":"text/x-python","patch_set":13,"id":"7faddb67_54144ae9","line":405,"range":{"start_line":404,"start_character":4,"end_line":405,"end_character":73},"in_reply_to":"7faddb67_48def410","updated":"2019-08-29 09:59:26.000000000","message":"My bad, I didn\u0027t realize that get_vifs_by_ids returned a dict. But there is the problem you had before, so as you said, you need to loop over the keys and remove those ones with value.ofport not in (-1,[])","commit_id":"8db6012e980a076208e4724d10c64a3f7f8641ab"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"9739e20fb55e7fb7042c8c2d51b7c5f9bdae7d49","unresolved":false,"context_lines":[{"line_number":401,"context_line":"                  local_compute_ports)"},{"line_number":402,"context_line":"        vif_by_id \u003d self.int_br.get_vifs_by_ids("},{"line_number":403,"context_line":"            [local_port[\u0027id\u0027] for local_port in local_compute_ports])"},{"line_number":404,"context_line":"        vif_by_id \u003d {k: v for k, v in vif_by_id.items() if v.ofport not in"},{"line_number":405,"context_line":"                     (ovs_lib.INVALID_OFPORT, ovs_lib.UNASSIGNED_OFPORT)}"},{"line_number":406,"context_line":"        for local_port in local_compute_ports:"},{"line_number":407,"context_line":"            vif \u003d vif_by_id.get(local_port[\u0027id\u0027])"},{"line_number":408,"context_line":"            if not vif:"}],"source_content_type":"text/x-python","patch_set":14,"id":"7faddb67_2ee81ddd","line":405,"range":{"start_line":404,"start_character":7,"end_line":405,"end_character":73},"updated":"2019-09-03 13:08:36.000000000","message":"the error are probably still related to this.","commit_id":"3b54441ac85f94f2bcd021c11be8581dd55be8ec"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"430eddf8e204c7994e9c632057b2acbcfedcf81e","unresolved":false,"context_lines":[{"line_number":401,"context_line":"                  local_compute_ports)"},{"line_number":402,"context_line":"        vif_by_id \u003d self.int_br.get_vifs_by_ids("},{"line_number":403,"context_line":"            [local_port[\u0027id\u0027] for local_port in local_compute_ports])"},{"line_number":404,"context_line":"        vif_by_id \u003d {k: v for k, v in vif_by_id.items()"},{"line_number":405,"context_line":"                     if not v or v.ofport not in"},{"line_number":406,"context_line":"                     (ovs_lib.INVALID_OFPORT, ovs_lib.UNASSIGNED_OFPORT)}"},{"line_number":407,"context_line":"        for local_port in local_compute_ports:"},{"line_number":408,"context_line":"            vif \u003d vif_by_id.get(local_port[\u0027id\u0027])"},{"line_number":409,"context_line":"            if not vif:"}],"source_content_type":"text/x-python","patch_set":16,"id":"3fa7e38b_6de709e5","line":406,"range":{"start_line":404,"start_character":7,"end_line":406,"end_character":73},"updated":"2019-12-02 14:03:31.000000000","message":"as noted on the bug the tempest failure are real.\nthis  v.ofport is not a thing.","commit_id":"d8a4154f5289c6f6500dd1a6d57431517928a505"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"564042a43eb09cb762a1843354575f248a65ea6e","unresolved":false,"context_lines":[{"line_number":401,"context_line":"                  local_compute_ports)"},{"line_number":402,"context_line":"        vif_by_id \u003d self.int_br.get_vifs_by_ids("},{"line_number":403,"context_line":"            [local_port[\u0027id\u0027] for local_port in local_compute_ports])"},{"line_number":404,"context_line":"        vif_by_id \u003d {k: v for k, v in vif_by_id.items()"},{"line_number":405,"context_line":"                     if not v or v.ofport not in"},{"line_number":406,"context_line":"                     (ovs_lib.INVALID_OFPORT, ovs_lib.UNASSIGNED_OFPORT)}"},{"line_number":407,"context_line":"        for local_port in local_compute_ports:"},{"line_number":408,"context_line":"            vif \u003d vif_by_id.get(local_port[\u0027id\u0027])"},{"line_number":409,"context_line":"            if not vif:"}],"source_content_type":"text/x-python","patch_set":16,"id":"3fa7e38b_531c8b7a","line":406,"range":{"start_line":404,"start_character":7,"end_line":406,"end_character":73},"in_reply_to":"3fa7e38b_6de709e5","updated":"2019-12-02 14:38:49.000000000","message":"actully this should be a VifPort object \n\nhttps://github.com/openstack/neutron/blob/0fa7e74ebb386b178d36ae684ff04f03bdd6cb0d/neutron/agent/common/ovs_lib.py#L100-L113\n\nself.int_br.get_vifs_by_ids returns a dict of nenutron port uuids to vifPort objects\n\nhttps://github.com/openstack/neutron/blob/0fa7e74ebb386b178d36ae684ff04f03bdd6cb0d/neutron/agent/common/ovs_lib.py#L100-L113\n\ni guess we shoudl jsut wait for the test results and see what the error is bacuse maybe this was fixed already.","commit_id":"d8a4154f5289c6f6500dd1a6d57431517928a505"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"36a32f7d6023eca4444b6c547ed0b4cfe1631916","unresolved":false,"context_lines":[{"line_number":435,"context_line":"                     if not v or v.ofport not in"},{"line_number":436,"context_line":"                     (ovs_lib.INVALID_OFPORT, ovs_lib.UNASSIGNED_OFPORT)}"},{"line_number":437,"context_line":"        LOG.debug(\"RAH(remove): vif_by_id (after filtering) %s\", vif_by_id)"},{"line_number":438,"context_line":"        LOG.debug(\"RAH(remove): vif_by_id_old_way           %s\", vif_by_id_old_way)"},{"line_number":439,"context_line":"        set1 \u003d set(vif_by_id.items())"},{"line_number":440,"context_line":"        set2 \u003d set(vif_by_id_old_way.items())"},{"line_number":441,"context_line":"        LOG.debug(\"RAH(remove): vif_by_id - vif_by_id_old_way %s\", set1 - set2)"}],"source_content_type":"text/x-python","patch_set":20,"id":"9f560f44_8d3a8895","line":438,"updated":"2020-07-29 23:53:37.000000000","message":"pep8: E501 line too long (83 \u003e 79 characters)","commit_id":"c85e30440fd17d804bad168397908d173ddf6e1f"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"2ae6514824810f0afb5bec64ceda9f24e7243890","unresolved":false,"context_lines":[{"line_number":425,"context_line":"                  local_compute_ports)"},{"line_number":426,"context_line":"        vif_by_id \u003d self.int_br.get_vifs_by_ids("},{"line_number":427,"context_line":"            [local_port[\u0027id\u0027] for local_port in local_compute_ports])"},{"line_number":428,"context_line":""},{"line_number":429,"context_line":"        vif_by_id \u003d {k: v for k, v in vif_by_id.items()"},{"line_number":430,"context_line":"                     if not v or v.ofport not in"},{"line_number":431,"context_line":"                     (ovs_lib.INVALID_OFPORT, ovs_lib.UNASSIGNED_OFPORT)}"}],"source_content_type":"text/x-python","patch_set":23,"id":"9f560f44_91ded56a","line":428,"updated":"2020-08-04 12:56:05.000000000","message":"you might want to add a note to the effect that router interfaces are of ovs interface type internal so they will always have an ofport assgined once the interface is created so we can filter out ports that do not have ofports.\n\nthat is why its ok to do this filtering correct?","commit_id":"ec28418a56ce12c5ebe089d88752e9308400ce05"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"0bbc7039555e84e4b939eecd3d88e64ca35035c8","unresolved":false,"context_lines":[{"line_number":425,"context_line":"                  local_compute_ports)"},{"line_number":426,"context_line":"        vif_by_id \u003d self.int_br.get_vifs_by_ids("},{"line_number":427,"context_line":"            [local_port[\u0027id\u0027] for local_port in local_compute_ports])"},{"line_number":428,"context_line":""},{"line_number":429,"context_line":"        vif_by_id \u003d {k: v for k, v in vif_by_id.items()"},{"line_number":430,"context_line":"                     if not v or v.ofport not in"},{"line_number":431,"context_line":"                     (ovs_lib.INVALID_OFPORT, ovs_lib.UNASSIGNED_OFPORT)}"}],"source_content_type":"text/x-python","patch_set":23,"id":"9f560f44_0c8f4775","line":428,"in_reply_to":"9f560f44_91ded56a","updated":"2020-08-04 17:46:56.000000000","message":"Sure, this is the same behavior as before. But makes sense to document it.","commit_id":"ec28418a56ce12c5ebe089d88752e9308400ce05"}],"neutron/plugins/ml2/drivers/openvswitch/agent/ovs_neutron_agent.py":[{"author":{"_account_id":11952,"name":"Flavio Fernandes","email":"flavio@flaviof.com","username":"ffernand"},"change_message_id":"2a97d5b350a426727fc213395bdfb8f945ec03d7","unresolved":false,"context_lines":[{"line_number":1838,"context_line":"                self.ext_manager.delete_port(self.context, {\u0027port_id\u0027: device})"},{"line_number":1839,"context_line":"                skipped_devices.append(device)"},{"line_number":1840,"context_line":"                continue"},{"line_number":1841,"context_line":"            elif not port.ofport or port.ofport \u003d\u003d -1:"},{"line_number":1842,"context_line":"                devices_not_in_datapath.add(device)"},{"line_number":1843,"context_line":""},{"line_number":1844,"context_line":"            if \u0027port_id\u0027 in details:"}],"source_content_type":"text/x-python","patch_set":15,"id":"3fa7e38b_be5786ca","line":1841,"range":{"start_line":1841,"start_character":21,"end_line":1841,"end_character":53},"updated":"2019-09-24 09:44:01.000000000","message":"nit use consts: ovs_lib.INVALID_OFPORT, ovs_lib.UNASSIGNED_OFPORT here as well","commit_id":"74ce882db190cf245d416997844515c32c6be9dd"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"da6312da889366b609318991cc33fca9994efab4","unresolved":false,"context_lines":[{"line_number":1916,"context_line":"            device \u003d details[\u0027device\u0027]"},{"line_number":1917,"context_line":"            LOG.debug(\"Processing port: %s\", device)"},{"line_number":1918,"context_line":"            port \u003d vif_by_id.get(device)"},{"line_number":1919,"context_line":"            if not port:"},{"line_number":1920,"context_line":"                # The port disappeared and cannot be processed"},{"line_number":1921,"context_line":"                LOG.info(\"Port %s was not found on the integration bridge \""},{"line_number":1922,"context_line":"                         \"and will therefore not be processed\", device)"}],"source_content_type":"text/x-python","patch_set":27,"id":"9f560f44_ca807dfa","line":1919,"updated":"2020-08-24 12:31:19.000000000","message":"pep8: R1724: Unnecessary \"elif\" after \"continue\" (no-else-continue)","commit_id":"9f064fb82102e7e4068d8e7eedd56063cfcc13db"}],"neutron/tests/unit/agent/common/test_ovs_lib.py":[{"author":{"_account_id":11952,"name":"Flavio Fernandes","email":"flavio@flaviof.com","username":"ffernand"},"change_message_id":"2a97d5b350a426727fc213395bdfb8f945ec03d7","unresolved":false,"context_lines":[{"line_number":499,"context_line":"        by_id \u003d self.br.get_vifs_by_ids([\u0027pid1\u0027, \u0027pid2\u0027, \u0027pid3\u0027, \u0027pid4\u0027])"},{"line_number":500,"context_line":"        # pid3 isn\u0027t on bridge"},{"line_number":501,"context_line":"        self.assertIsNone(by_id[\u0027pid3\u0027])"},{"line_number":502,"context_line":"        self.assertEqual(-1, by_id[\u0027pid4\u0027].ofport)"},{"line_number":503,"context_line":"        self.assertEqual(\u0027pid1\u0027, by_id[\u0027pid1\u0027].vif_id)"},{"line_number":504,"context_line":"        self.assertEqual(\u0027qvo1\u0027, by_id[\u0027pid1\u0027].port_name)"},{"line_number":505,"context_line":"        self.assertEqual(1, by_id[\u0027pid1\u0027].ofport)"}],"source_content_type":"text/x-python","patch_set":15,"id":"3fa7e38b_fe065ece","line":502,"range":{"start_line":502,"start_character":25,"end_line":502,"end_character":27},"updated":"2019-09-24 09:44:01.000000000","message":"nit: use ovs_lib.INVALID_OFPORT, ovs_lib.UNASSIGNED_OFPORT","commit_id":"74ce882db190cf245d416997844515c32c6be9dd"}],"neutron/tests/unit/plugins/ml2/drivers/openvswitch/agent/test_ovs_neutron_agent.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"36a32f7d6023eca4444b6c547ed0b4cfe1631916","unresolved":false,"context_lines":[{"line_number":1026,"context_line":"                                  return_value\u003d{}),\\"},{"line_number":1027,"context_line":"                mock.patch.object(self.agent,"},{"line_number":1028,"context_line":"                                  \u0027treat_vif_port\u0027) as treat_vif_port:"},{"line_number":1029,"context_line":"            skip_devs, _, need_bound_devices, _ , _\u003d ("},{"line_number":1030,"context_line":"                self.agent.treat_devices_added_or_updated([], False, set()))"},{"line_number":1031,"context_line":"            # The function should return False for resync"},{"line_number":1032,"context_line":"            self.assertFalse(skip_devs)"}],"source_content_type":"text/x-python","patch_set":20,"id":"9f560f44_4dbb500d","line":1029,"updated":"2020-07-29 23:53:37.000000000","message":"pep8: E203 whitespace before \u0027,\u0027","commit_id":"c85e30440fd17d804bad168397908d173ddf6e1f"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"36a32f7d6023eca4444b6c547ed0b4cfe1631916","unresolved":false,"context_lines":[{"line_number":1026,"context_line":"                                  return_value\u003d{}),\\"},{"line_number":1027,"context_line":"                mock.patch.object(self.agent,"},{"line_number":1028,"context_line":"                                  \u0027treat_vif_port\u0027) as treat_vif_port:"},{"line_number":1029,"context_line":"            skip_devs, _, need_bound_devices, _ , _\u003d ("},{"line_number":1030,"context_line":"                self.agent.treat_devices_added_or_updated([], False, set()))"},{"line_number":1031,"context_line":"            # The function should return False for resync"},{"line_number":1032,"context_line":"            self.assertFalse(skip_devs)"}],"source_content_type":"text/x-python","patch_set":20,"id":"9f560f44_ad378cb0","line":1029,"updated":"2020-07-29 23:53:37.000000000","message":"pep8: E225 missing whitespace around operator","commit_id":"c85e30440fd17d804bad168397908d173ddf6e1f"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"e12290bd440caafccf385174e11172c668f882f9","unresolved":false,"context_lines":[{"line_number":3163,"context_line":"            # phys_br.assert_has_calls(expected_on_phys_br)"},{"line_number":3164,"context_line":"# \u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":3165,"context_line":"#             ] + self._expected_port_bound(self._port, lvid)"},{"line_number":3166,"context_line":"            for expected_call in expected_on_int_br:"},{"line_number":3167,"context_line":"                self.assertIn(expected_call, int_br.mock_calls)"},{"line_number":3168,"context_line":"            self.assertEqual([], tun_br.mock_calls)"},{"line_number":3169,"context_line":"            self.assertEqual(expected_on_phys_br, phys_br.mock_calls)"},{"line_number":3170,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"9f560f44_c4c0c37e","line":3167,"range":{"start_line":3166,"start_character":12,"end_line":3167,"end_character":63},"updated":"2020-07-31 06:23:54.000000000","message":"int_br.assert_has_calls(expected_on_int_br, any_order\u003dTrue)?","commit_id":"724f0acd2741fc34cb75f5a85170c35ac3cfd461"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"a58f1c3d7bf2930b8129b9815ab74f7c751c57db","unresolved":false,"context_lines":[{"line_number":3163,"context_line":"            # phys_br.assert_has_calls(expected_on_phys_br)"},{"line_number":3164,"context_line":"# \u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":3165,"context_line":"#             ] + self._expected_port_bound(self._port, lvid)"},{"line_number":3166,"context_line":"            for expected_call in expected_on_int_br:"},{"line_number":3167,"context_line":"                self.assertIn(expected_call, int_br.mock_calls)"},{"line_number":3168,"context_line":"            self.assertEqual([], tun_br.mock_calls)"},{"line_number":3169,"context_line":"            self.assertEqual(expected_on_phys_br, phys_br.mock_calls)"},{"line_number":3170,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"9f560f44_b654af22","line":3167,"range":{"start_line":3166,"start_character":12,"end_line":3167,"end_character":63},"in_reply_to":"9f560f44_c4c0c37e","updated":"2020-08-04 12:39:13.000000000","message":"Indeed, this should use assert_has_calls","commit_id":"724f0acd2741fc34cb75f5a85170c35ac3cfd461"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"e12290bd440caafccf385174e11172c668f882f9","unresolved":false,"context_lines":[{"line_number":3165,"context_line":"#             ] + self._expected_port_bound(self._port, lvid)"},{"line_number":3166,"context_line":"            for expected_call in expected_on_int_br:"},{"line_number":3167,"context_line":"                self.assertIn(expected_call, int_br.mock_calls)"},{"line_number":3168,"context_line":"            self.assertEqual([], tun_br.mock_calls)"},{"line_number":3169,"context_line":"            self.assertEqual(expected_on_phys_br, phys_br.mock_calls)"},{"line_number":3170,"context_line":""},{"line_number":3171,"context_line":"            int_br.reset_mock()"}],"source_content_type":"text/x-python","patch_set":22,"id":"9f560f44_0438fb9d","line":3168,"range":{"start_line":3168,"start_character":12,"end_line":3168,"end_character":51},"updated":"2020-07-31 06:23:54.000000000","message":"how it differs from assert_has_calls?","commit_id":"724f0acd2741fc34cb75f5a85170c35ac3cfd461"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"a58f1c3d7bf2930b8129b9815ab74f7c751c57db","unresolved":false,"context_lines":[{"line_number":3165,"context_line":"#             ] + self._expected_port_bound(self._port, lvid)"},{"line_number":3166,"context_line":"            for expected_call in expected_on_int_br:"},{"line_number":3167,"context_line":"                self.assertIn(expected_call, int_br.mock_calls)"},{"line_number":3168,"context_line":"            self.assertEqual([], tun_br.mock_calls)"},{"line_number":3169,"context_line":"            self.assertEqual(expected_on_phys_br, phys_br.mock_calls)"},{"line_number":3170,"context_line":""},{"line_number":3171,"context_line":"            int_br.reset_mock()"}],"source_content_type":"text/x-python","patch_set":22,"id":"9f560f44_9626cbcd","line":3168,"range":{"start_line":3168,"start_character":12,"end_line":3168,"end_character":51},"in_reply_to":"9f560f44_0438fb9d","updated":"2020-08-04 12:39:13.000000000","message":"I just copy/pasted from the previous PS, I\u0027ll change this.","commit_id":"724f0acd2741fc34cb75f5a85170c35ac3cfd461"}]}
