)]}'
{"neutron/agent/common/ovs_lib.py":[{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"861b37ebf5773ba7f3ba955e0279bbc9088d6c5f","unresolved":false,"context_lines":[{"line_number":374,"context_line":"        # NOTE(xiaohhui): If del_port is inside the transaction, there will"},{"line_number":375,"context_line":"        # only be one command for replace_port. This will cause the new port"},{"line_number":376,"context_line":"        # not be found by system, which will lead to Bug #1519926."},{"line_number":377,"context_line":"        self.ovsdb.del_port(port_name).execute()"},{"line_number":378,"context_line":"        with self.ovsdb.transaction() as txn:"},{"line_number":379,"context_line":"            self._replace_port(txn, port_name, *interface_attr_tuples)"},{"line_number":380,"context_line":"            txn.add(self.ovsdb.db_set("}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_1645cf9b","line":377,"range":{"start_line":377,"start_character":8,"end_line":377,"end_character":48},"updated":"2020-01-31 14:44:56.000000000","message":"Can we wrap it withing same txn as others?","commit_id":"8927aca2afa4dfa883c9f3a92d281e934a42af3e"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"e920e34aea51c9c78fa94c3da9c6e25cd265fa2e","unresolved":false,"context_lines":[{"line_number":374,"context_line":"        # NOTE(xiaohhui): If del_port is inside the transaction, there will"},{"line_number":375,"context_line":"        # only be one command for replace_port. This will cause the new port"},{"line_number":376,"context_line":"        # not be found by system, which will lead to Bug #1519926."},{"line_number":377,"context_line":"        self.ovsdb.del_port(port_name).execute()"},{"line_number":378,"context_line":"        with self.ovsdb.transaction() as txn:"},{"line_number":379,"context_line":"            self._replace_port(txn, port_name, *interface_attr_tuples)"},{"line_number":380,"context_line":"            txn.add(self.ovsdb.db_set("}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_75a732bd","line":377,"range":{"start_line":377,"start_character":8,"end_line":377,"end_character":48},"in_reply_to":"3fa7e38b_1645cf9b","updated":"2020-02-04 13:16:44.000000000","message":"According to the comment above, not","commit_id":"8927aca2afa4dfa883c9f3a92d281e934a42af3e"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"f438639660a7864f2a70de55d245ecb1fb722238","unresolved":false,"context_lines":[{"line_number":329,"context_line":"                                          *interface_attr_tuples))"},{"line_number":330,"context_line":"        return self.get_port_ofport(port_name)"},{"line_number":331,"context_line":""},{"line_number":332,"context_line":"    def replace_port(self, port_name, *interface_attr_tuples):"},{"line_number":333,"context_line":"        \"\"\"Replace existing port or create it, and configure port interface.\"\"\""},{"line_number":334,"context_line":""},{"line_number":335,"context_line":"        # NOTE(xiaohhui): If del_port is inside the transaction, there will"}],"source_content_type":"text/x-python","patch_set":8,"id":"3fa7e38b_fe53413a","side":"PARENT","line":332,"updated":"2020-02-17 16:46:58.000000000","message":"IMO, you can reduce the change in this function by adding a kwarg at the end of the definition.\n\ndef replace_port(self, port_name, *interface_attr_tuples,\n                 active\u003dTrue):\n\n\nThen if active\u003dFalse, you can append at the end of the transaction the set operation for \"other_config\".","commit_id":"d5b33ffc775ffff500271c0f15f055ae3132a8d0"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"c0c0ae35f1d8262ca598153ba500e1ba7951b0c7","unresolved":false,"context_lines":[{"line_number":329,"context_line":"                                          *interface_attr_tuples))"},{"line_number":330,"context_line":"        return self.get_port_ofport(port_name)"},{"line_number":331,"context_line":""},{"line_number":332,"context_line":"    def replace_port(self, port_name, *interface_attr_tuples):"},{"line_number":333,"context_line":"        \"\"\"Replace existing port or create it, and configure port interface.\"\"\""},{"line_number":334,"context_line":""},{"line_number":335,"context_line":"        # NOTE(xiaohhui): If del_port is inside the transaction, there will"}],"source_content_type":"text/x-python","patch_set":8,"id":"1fa4df85_0c57775a","side":"PARENT","line":332,"in_reply_to":"1fa4df85_48605602","updated":"2020-03-04 21:10:20.000000000","message":"Done","commit_id":"d5b33ffc775ffff500271c0f15f055ae3132a8d0"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"6dbf087fe786da49da31ebf0b1457a933a7e809f","unresolved":false,"context_lines":[{"line_number":329,"context_line":"                                          *interface_attr_tuples))"},{"line_number":330,"context_line":"        return self.get_port_ofport(port_name)"},{"line_number":331,"context_line":""},{"line_number":332,"context_line":"    def replace_port(self, port_name, *interface_attr_tuples):"},{"line_number":333,"context_line":"        \"\"\"Replace existing port or create it, and configure port interface.\"\"\""},{"line_number":334,"context_line":""},{"line_number":335,"context_line":"        # NOTE(xiaohhui): If del_port is inside the transaction, there will"}],"source_content_type":"text/x-python","patch_set":8,"id":"1fa4df85_48605602","side":"PARENT","line":332,"in_reply_to":"3fa7e38b_fe53413a","updated":"2020-02-27 17:15:05.000000000","message":"I would agree with this","commit_id":"d5b33ffc775ffff500271c0f15f055ae3132a8d0"}],"neutron/agent/l3/ha_router.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"f438639660a7864f2a70de55d245ecb1fb722238","unresolved":false,"context_lines":[{"line_number":454,"context_line":"        enable \u003d self.ha_state \u003d\u003d \u0027master\u0027"},{"line_number":455,"context_line":"        self._configure_ipv6_params_on_gw(ex_gw_port, self.ns_name,"},{"line_number":456,"context_line":"                                          interface_name, enable)"},{"line_number":457,"context_line":"        self.driver.set_device_internal_status("},{"line_number":458,"context_line":"            interface_name, active\u003dTrue, namespace\u003dself.ns_name)"},{"line_number":459,"context_line":""},{"line_number":460,"context_line":"    def external_gateway_updated(self, ex_gw_port, interface_name):"}],"source_content_type":"text/x-python","patch_set":8,"id":"3fa7e38b_1938b79c","line":457,"updated":"2020-02-17 16:46:58.000000000","message":"I would add just an small comment here saying that this operation can be done after \"_disable_ipv6_addressing_on_interface\" is done.","commit_id":"d10fcd9f77ee40544a71bc253e53ed73d0022322"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"c0c0ae35f1d8262ca598153ba500e1ba7951b0c7","unresolved":false,"context_lines":[{"line_number":454,"context_line":"        enable \u003d self.ha_state \u003d\u003d \u0027master\u0027"},{"line_number":455,"context_line":"        self._configure_ipv6_params_on_gw(ex_gw_port, self.ns_name,"},{"line_number":456,"context_line":"                                          interface_name, enable)"},{"line_number":457,"context_line":"        self.driver.set_device_internal_status("},{"line_number":458,"context_line":"            interface_name, active\u003dTrue, namespace\u003dself.ns_name)"},{"line_number":459,"context_line":""},{"line_number":460,"context_line":"    def external_gateway_updated(self, ex_gw_port, interface_name):"}],"source_content_type":"text/x-python","patch_set":8,"id":"1fa4df85_cc2b9f92","line":457,"in_reply_to":"3fa7e38b_1938b79c","updated":"2020-03-04 21:10:20.000000000","message":"Done","commit_id":"d10fcd9f77ee40544a71bc253e53ed73d0022322"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"f7557c811e008a20c34ccfc2b92a8202b599901a","unresolved":false,"context_lines":[{"line_number":444,"context_line":""},{"line_number":445,"context_line":"    def external_gateway_added(self, ex_gw_port, interface_name):"},{"line_number":446,"context_line":"        self._plug_external_gateway("},{"line_number":447,"context_line":"            ex_gw_port, interface_name, self.ns_name, False)"},{"line_number":448,"context_line":"        self._add_gateway_vip(ex_gw_port, interface_name)"},{"line_number":449,"context_line":"        self._disable_ipv6_addressing_on_interface(interface_name)"},{"line_number":450,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"1fa4df85_6b273ab8","line":447,"range":{"start_line":447,"start_character":54,"end_line":447,"end_character":59},"updated":"2020-03-17 15:58:12.000000000","message":"Should this be False if self.ha_state \u003d\u003d \u0027master\u0027?","commit_id":"0666d99cd4d1a7b4ec5e2209934d12b5fe39652a"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"f7557c811e008a20c34ccfc2b92a8202b599901a","unresolved":false,"context_lines":[{"line_number":444,"context_line":""},{"line_number":445,"context_line":"    def external_gateway_added(self, ex_gw_port, interface_name):"},{"line_number":446,"context_line":"        self._plug_external_gateway("},{"line_number":447,"context_line":"            ex_gw_port, interface_name, self.ns_name, False)"},{"line_number":448,"context_line":"        self._add_gateway_vip(ex_gw_port, interface_name)"},{"line_number":449,"context_line":"        self._disable_ipv6_addressing_on_interface(interface_name)"},{"line_number":450,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"1fa4df85_70308708","line":447,"range":{"start_line":447,"start_character":54,"end_line":447,"end_character":59},"updated":"2020-03-17 15:58:12.000000000","message":"nit: device_active\u003dFalse for readability","commit_id":"0666d99cd4d1a7b4ec5e2209934d12b5fe39652a"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"bb24955c962cbda9679c8348bfe3638ca0b395e7","unresolved":false,"context_lines":[{"line_number":444,"context_line":""},{"line_number":445,"context_line":"    def external_gateway_added(self, ex_gw_port, interface_name):"},{"line_number":446,"context_line":"        self._plug_external_gateway("},{"line_number":447,"context_line":"            ex_gw_port, interface_name, self.ns_name, False)"},{"line_number":448,"context_line":"        self._add_gateway_vip(ex_gw_port, interface_name)"},{"line_number":449,"context_line":"        self._disable_ipv6_addressing_on_interface(interface_name)"},{"line_number":450,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"1fa4df85_2e986619","line":447,"range":{"start_line":447,"start_character":54,"end_line":447,"end_character":59},"in_reply_to":"1fa4df85_6b273ab8","updated":"2020-03-18 09:07:29.000000000","message":"Yes, it should be False here to make sure that any MLDv2 packets will not be send from this interface if not needed. It will be set to be active in L464 in this method.","commit_id":"0666d99cd4d1a7b4ec5e2209934d12b5fe39652a"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"bb24955c962cbda9679c8348bfe3638ca0b395e7","unresolved":false,"context_lines":[{"line_number":444,"context_line":""},{"line_number":445,"context_line":"    def external_gateway_added(self, ex_gw_port, interface_name):"},{"line_number":446,"context_line":"        self._plug_external_gateway("},{"line_number":447,"context_line":"            ex_gw_port, interface_name, self.ns_name, False)"},{"line_number":448,"context_line":"        self._add_gateway_vip(ex_gw_port, interface_name)"},{"line_number":449,"context_line":"        self._disable_ipv6_addressing_on_interface(interface_name)"},{"line_number":450,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"1fa4df85_2e2e26fa","line":447,"range":{"start_line":447,"start_character":54,"end_line":447,"end_character":59},"in_reply_to":"1fa4df85_70308708","updated":"2020-03-18 09:07:29.000000000","message":"Done","commit_id":"0666d99cd4d1a7b4ec5e2209934d12b5fe39652a"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"f7557c811e008a20c34ccfc2b92a8202b599901a","unresolved":false,"context_lines":[{"line_number":448,"context_line":"        self._add_gateway_vip(ex_gw_port, interface_name)"},{"line_number":449,"context_line":"        self._disable_ipv6_addressing_on_interface(interface_name)"},{"line_number":450,"context_line":""},{"line_number":451,"context_line":"        # Enable RA and IPv6 forwarding only for master instances. This will"},{"line_number":452,"context_line":"        # prevent backup routers from sending packets to the upstream switch"},{"line_number":453,"context_line":"        # and disrupt connections."},{"line_number":454,"context_line":"        enable \u003d self.ha_state \u003d\u003d \u0027master\u0027"},{"line_number":455,"context_line":"        self._configure_ipv6_params_on_gw(ex_gw_port, self.ns_name,"},{"line_number":456,"context_line":"                                          interface_name, enable)"}],"source_content_type":"text/x-python","patch_set":10,"id":"1fa4df85_6bfe5a06","line":453,"range":{"start_line":451,"start_character":8,"end_line":453,"end_character":34},"updated":"2020-03-17 15:58:12.000000000","message":"so this doesn\u0027t work for all cases? Probably the comment should be updated/replaced then..","commit_id":"0666d99cd4d1a7b4ec5e2209934d12b5fe39652a"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"bb24955c962cbda9679c8348bfe3638ca0b395e7","unresolved":false,"context_lines":[{"line_number":448,"context_line":"        self._add_gateway_vip(ex_gw_port, interface_name)"},{"line_number":449,"context_line":"        self._disable_ipv6_addressing_on_interface(interface_name)"},{"line_number":450,"context_line":""},{"line_number":451,"context_line":"        # Enable RA and IPv6 forwarding only for master instances. This will"},{"line_number":452,"context_line":"        # prevent backup routers from sending packets to the upstream switch"},{"line_number":453,"context_line":"        # and disrupt connections."},{"line_number":454,"context_line":"        enable \u003d self.ha_state \u003d\u003d \u0027master\u0027"},{"line_number":455,"context_line":"        self._configure_ipv6_params_on_gw(ex_gw_port, self.ns_name,"},{"line_number":456,"context_line":"                                          interface_name, enable)"}],"source_content_type":"text/x-python","patch_set":10,"id":"1fa4df85_cee99280","line":453,"range":{"start_line":451,"start_character":8,"end_line":453,"end_character":34},"in_reply_to":"1fa4df85_6bfe5a06","updated":"2020-03-18 09:07:29.000000000","message":"in fact it is still correct as my patch will only prevent sending e.g. MLDv2 packets from backup routers only during creation of gw interface. But after that it\u0027s set to be \"active\" (L464) so it could still send packets to the upstream switches.","commit_id":"0666d99cd4d1a7b4ec5e2209934d12b5fe39652a"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"fbbc51130a4fffbe8aefab6acebd8aebef576df3","unresolved":false,"context_lines":[{"line_number":461,"context_line":"        # sending MLDv2 packets to unsubsribe from multicast group and that can"},{"line_number":462,"context_line":"        # lead to the break of dataplane traffic, see bug"},{"line_number":463,"context_line":"        # https://bugs.launchpad.net/neutron/+bug/1859832 for details"},{"line_number":464,"context_line":"        self.driver.set_device_internal_status("},{"line_number":465,"context_line":"            interface_name, active\u003dTrue, namespace\u003dself.ns_name)"},{"line_number":466,"context_line":""},{"line_number":467,"context_line":"    def external_gateway_updated(self, ex_gw_port, interface_name):"},{"line_number":468,"context_line":"        self._plug_external_gateway("}],"source_content_type":"text/x-python","patch_set":11,"id":"df33271e_b66f1e91","line":465,"range":{"start_line":464,"start_character":0,"end_line":465,"end_character":64},"updated":"2020-03-20 21:31:57.000000000","message":"What if ovs-agent has finished the port processing, and then L3 agent just set the port to \"INTERNAL_STATUS_ACTIVE \u003d \"active\"\".\nI don\u0027t think the port will be processed again. So it will be 4095 forever? Is that a race condition?","commit_id":"eab7686e0090595382bea945bb71b06240d51878"}],"neutron/agent/linux/interface.py":[{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"be83be21ff20893d75bc23a8a21a6ce03f957623","unresolved":false,"context_lines":[{"line_number":410,"context_line":"        else:"},{"line_number":411,"context_line":"            LOG.warning(\"No MTU configured for port %s\", port_id)"},{"line_number":412,"context_line":""},{"line_number":413,"context_line":"        ns_dev.link.set_up()"},{"line_number":414,"context_line":"        if self.conf.ovs_use_veth:"},{"line_number":415,"context_line":"            root_dev.link.set_up()"},{"line_number":416,"context_line":""},{"line_number":417,"context_line":"    def unplug(self, device_name, bridge\u003dNone, namespace\u003dNone, prefix\u003dNone):"},{"line_number":418,"context_line":"        \"\"\"Unplug the interface.\"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_e7b931eb","line":415,"range":{"start_line":413,"start_character":8,"end_line":415,"end_character":34},"updated":"2020-01-16 15:38:36.000000000","message":"As I said in the L3 meeting, this is the root cause of the bug.\nThis \"ip set link up\" will immediately generate the IPv6 packets (based on some kernel config) which will finally go to physical switch. You may use these commands to simulate the case:\n(1) ovs-vsctl add-port br-ex fake-qg-dev -- set interface fake-qg-dev type\u003dinternal\n(2) ip link set up fake-qg-dev\n(3) tcpdump -ni \u003cext-net-physical-NIC\u003e -e\n[1] is my test result.\n\nSo as we know that ovs-agent have 2 seconds sleep between two rpc_loops. The other_config block flag should have a small chance take effect. So IMHO, the current approach may not work.\n\n[1] http://paste.openstack.org/show/788479/","commit_id":"1c8cee78706e5a08a9cfa9dd9996b856aecce782"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"0a86f022c16f471f517b1b5971e38e3c41316dd6","unresolved":false,"context_lines":[{"line_number":410,"context_line":"        else:"},{"line_number":411,"context_line":"            LOG.warning(\"No MTU configured for port %s\", port_id)"},{"line_number":412,"context_line":""},{"line_number":413,"context_line":"        ns_dev.link.set_up()"},{"line_number":414,"context_line":"        if self.conf.ovs_use_veth:"},{"line_number":415,"context_line":"            root_dev.link.set_up()"},{"line_number":416,"context_line":""},{"line_number":417,"context_line":"    def unplug(self, device_name, bridge\u003dNone, namespace\u003dNone, prefix\u003dNone):"},{"line_number":418,"context_line":"        \"\"\"Unplug the interface.\"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_89492f30","line":415,"range":{"start_line":413,"start_character":8,"end_line":415,"end_character":34},"in_reply_to":"3fa7e38b_0db027fd","updated":"2020-01-21 21:40:49.000000000","message":"So I was playing with it a bit more and I see at least 2 problems with that:\n\n1. There are some corner cases when keepalived is not working fine when qg- interface is down, I didn\u0027t found out exactly why it\u0027s not working as it should and keeps all nodes to be in backup state yet. That is of course problem which can be probably solved but I just didn\u0027t had enough time for it,\n\n2. This one is more important. I think that changing it like You are proposing has got some additional side effects which can introduce even regressions. For example now, even when neutron-l3-agent would be down, dataplane can still works as long as keepalived is working fine on the node. There will be no proper state in neutron db in such case but dataplane will work fine. After this change it may be different as we would need not only keepalived but also neutron-l3-agent to make dataplane up the node.\n\n3. Also second problem similar to 2) is that in this new case it may require more time to switch node to be new master as when neutron-l3-agent will be busy it may take long time to switch interface up.\n\nSo I think that I will continue work with this solution as I propose now. At least if You don\u0027t have any other ideas about how to solve this problem.","commit_id":"1c8cee78706e5a08a9cfa9dd9996b856aecce782"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"f48786c6c9cdeadebf88f57b0d7fec26631eeac4","unresolved":false,"context_lines":[{"line_number":410,"context_line":"        else:"},{"line_number":411,"context_line":"            LOG.warning(\"No MTU configured for port %s\", port_id)"},{"line_number":412,"context_line":""},{"line_number":413,"context_line":"        ns_dev.link.set_up()"},{"line_number":414,"context_line":"        if self.conf.ovs_use_veth:"},{"line_number":415,"context_line":"            root_dev.link.set_up()"},{"line_number":416,"context_line":""},{"line_number":417,"context_line":"    def unplug(self, device_name, bridge\u003dNone, namespace\u003dNone, prefix\u003dNone):"},{"line_number":418,"context_line":"        \"\"\"Unplug the interface.\"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_0db027fd","line":415,"range":{"start_line":413,"start_character":8,"end_line":415,"end_character":34},"in_reply_to":"3fa7e38b_42e113fd","updated":"2020-01-17 01:08:13.000000000","message":"\u003e I was testing approach with setting this interface to be down\n \u003e initially.\n \u003e This didn\u0027t work because keepalived which is later managing IPs and\n \u003e which host is master didn\u0027t bring such interface up. And that was\n \u003e the issue there.\n \u003e \n\nYes, it will be handled based on the HA router state, aka in HA router state change callback set the qg-device link up.\n\n \u003e 2 seconds sleep between rpc_loop iterations isn\u0027t any problem\n \u003e because L3 agent creates this port with tag 4095 always and traffic\n \u003e from/to port with such tag is basically dropped in br-int always.\n \u003e After L3 agent switches \"ready_to_bind\" flag to \"yes\", in about 2\n \u003e seconds ovs agent should change port\u0027s tag from 4095 to local vlan\n \u003e id choosen for specific network and all should be configured\n \u003e properly.\n\nSeems we are going to mix the HA related things to ovs-agent since we already mixed DVR in it. Actually my thougths is if we could fix the issue in L3 scope only. If yes, we should.","commit_id":"1c8cee78706e5a08a9cfa9dd9996b856aecce782"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"d075ea879bc255b1d2d8f178906da8582620c321","unresolved":false,"context_lines":[{"line_number":410,"context_line":"        else:"},{"line_number":411,"context_line":"            LOG.warning(\"No MTU configured for port %s\", port_id)"},{"line_number":412,"context_line":""},{"line_number":413,"context_line":"        ns_dev.link.set_up()"},{"line_number":414,"context_line":"        if self.conf.ovs_use_veth:"},{"line_number":415,"context_line":"            root_dev.link.set_up()"},{"line_number":416,"context_line":""},{"line_number":417,"context_line":"    def unplug(self, device_name, bridge\u003dNone, namespace\u003dNone, prefix\u003dNone):"},{"line_number":418,"context_line":"        \"\"\"Unplug the interface.\"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_ab2b3b30","line":415,"range":{"start_line":413,"start_character":8,"end_line":415,"end_character":34},"in_reply_to":"3fa7e38b_89492f30","updated":"2020-01-31 09:11:39.000000000","message":"\u003e So I was playing with it a bit more and I see at least 2 problems\n \u003e with that:\n \u003e \n \u003e 1. There are some corner cases when keepalived is not working fine\n \u003e when qg- interface is down, I didn\u0027t found out exactly why it\u0027s not\n \u003e working as it should and keeps all nodes to be in backup state yet.\n \u003e That is of course problem which can be probably solved but I just\n \u003e didn\u0027t had enough time for it,\n \u003e \n\nMay I have the steps of the test?\n\n \u003e 2. This one is more important. I think that changing it like You\n \u003e are proposing has got some additional side effects which can\n \u003e introduce even regressions. For example now, even when\n \u003e neutron-l3-agent would be down, dataplane can still works as long\n \u003e as keepalived is working fine on the node. There will be no proper\n \u003e state in neutron db in such case but dataplane will work fine.\n \u003e After this change it may be different as we would need not only\n \u003e keepalived but also neutron-l3-agent to make dataplane up the node.\n \u003e \n\nHow could such situation happen? If host is down/up, there will have no keepalived process. But if you mean keepalived is spawned then l3-agent is crushed, I think this should be another issue, or we are over-thinking of the problem here. For instance, for current approach what if ovs-agent is dead after set the port to 4095? The qg-device will not work as well.\n\n \u003e 3. Also second problem similar to 2) is that in this new case it\n \u003e may require more time to switch node to be new master as when\n \u003e neutron-l3-agent will be busy it may take long time to switch\n \u003e interface up.\n \u003e \n\nIt is one step of ha state change action list, personally, a simple \"ip link set up\" should not be time-consuming. And state change processing is separated from the main thread of l3-agent. So it should be fine.\n\n \u003e So I think that I will continue work with this solution as I\n \u003e propose now. At least if You don\u0027t have any other ideas about how\n \u003e to solve this problem.\n\nWe have a local fix of this, I guess maybe I should submit it as potential alternatives.","commit_id":"1c8cee78706e5a08a9cfa9dd9996b856aecce782"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"76ac0d0de32a8d784c595c67932e3fa7e76b9763","unresolved":false,"context_lines":[{"line_number":410,"context_line":"        else:"},{"line_number":411,"context_line":"            LOG.warning(\"No MTU configured for port %s\", port_id)"},{"line_number":412,"context_line":""},{"line_number":413,"context_line":"        ns_dev.link.set_up()"},{"line_number":414,"context_line":"        if self.conf.ovs_use_veth:"},{"line_number":415,"context_line":"            root_dev.link.set_up()"},{"line_number":416,"context_line":""},{"line_number":417,"context_line":"    def unplug(self, device_name, bridge\u003dNone, namespace\u003dNone, prefix\u003dNone):"},{"line_number":418,"context_line":"        \"\"\"Unplug the interface.\"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_6b43036d","line":415,"range":{"start_line":413,"start_character":8,"end_line":415,"end_character":34},"in_reply_to":"3fa7e38b_ab2b3b30","updated":"2020-01-31 10:20:22.000000000","message":"\u003e \u003e So I was playing with it a bit more and I see at least 2 problems\n \u003e \u003e with that:\n \u003e \u003e\n \u003e \u003e 1. There are some corner cases when keepalived is not working\n \u003e fine\n \u003e \u003e when qg- interface is down, I didn\u0027t found out exactly why it\u0027s\n \u003e not\n \u003e \u003e working as it should and keeps all nodes to be in backup state\n \u003e yet.\n \u003e \u003e That is of course problem which can be probably solved but I just\n \u003e \u003e didn\u0027t had enough time for it,\n \u003e \u003e\n \u003e \n \u003e May I have the steps of the test?\n\nI don\u0027t remember exact steps for this but in some cases keepalived didn\u0027t want to switch node to be active when interface was down.\nToday I played again with it. It seems to be working but I see a lot of errors from keepalived in logs, like:\n\nJan 30 09:50:59 devstack-ubuntu-allinone Keepalived_vrrp[2642]: VRRP_Instance(VR_78) Transition to MASTER STATE\nJan 30 09:51:01 devstack-ubuntu-allinone Keepalived_vrrp[2642]: VRRP_Instance(VR_78) Entering MASTER STATE\nJan 30 09:51:01 devstack-ubuntu-allinone Keepalived_vrrp[2642]: VRRP_Instance(VR_78) setting protocol VIPs.\nJan 30 09:51:01 devstack-ubuntu-allinone Keepalived_vrrp[2642]: VRRP_Instance(VR_78) setting protocol E-VIPs.\nJan 30 09:51:01 devstack-ubuntu-allinone Keepalived_vrrp[2642]: VRRP_Instance(VR_78) setting protocol Virtual Routes\nJan 30 09:51:01 devstack-ubuntu-allinone Keepalived_vrrp[2642]: Netlink: error: Network is unreachable, type\u003d(24), seq\u003d1580374179, pid\u003d0\nJan 30 09:51:01 devstack-ubuntu-allinone Keepalived_vrrp[2642]: Sending gratuitous ARP on ha-f6677022-c8 for 169.254.0.78\nJan 30 09:51:01 devstack-ubuntu-allinone Keepalived_vrrp[2642]: VRRP_Instance(VR_78) Sending/queueing gratuitous ARPs on ha-f6677022-c8 for 169.254.0.78\nJan 30 09:51:01 devstack-ubuntu-allinone Keepalived_vrrp[2642]: Sending gratuitous ARP on qg-f65edb15-f0 for 10.10.0.134\nJan 30 09:51:01 devstack-ubuntu-allinone Keepalived_vrrp[2642]: Error sending gratuitous ARP on qg-f65edb15-f0 for 10.10.0.134\nJan 30 09:51:01 devstack-ubuntu-allinone Keepalived_vrrp[2642]: VRRP_Instance(VR_78) Sending/queueing gratuitous ARPs on qg-f65edb15-f0 for 10.10.0.134\nJan 30 09:51:01 devstack-ubuntu-allinone Keepalived_vrrp[2642]: Sending unsolicited Neighbour Advert on qg-f65edb15-f0 for 2001:db8::2e0\nJan 30 09:51:01 devstack-ubuntu-allinone Keepalived_vrrp[2642]: VRRP: Error sending ndisc unsolicited neighbour advert on qg-f65edb15-f0 for 2001:db8::2e0\nJan 30 09:51:01 devstack-ubuntu-allinone Keepalived_vrrp[2642]: VRRP_Instance(VR_78) Sending/queueing Unsolicited Neighbour Adverts on qg-f65edb15-f0 for 2001:db8::2e0\nJan 30 09:51:01 devstack-ubuntu-allinone Keepalived_vrrp[2642]: Sending unsolicited Neighbour Advert on qg-f65edb15-f0 for fe80::f816:3eff:fe33:628b\nJan 30 09:51:01 devstack-ubuntu-allinone Keepalived_vrrp[2642]: VRRP: Error sending ndisc unsolicited neighbour advert on qg-f65edb15-f0 for fe80::f816:3eff:fe33:628b\nJan 30 09:51:01 devstack-ubuntu-allinone Keepalived_vrrp[2642]: VRRP_Instance(VR_78) Sending/queueing Unsolicited Neighbour Adverts on qg-f65edb15-f0 for fe80::f816:3eff:fe33:628b\nJan 30 09:51:01 devstack-ubuntu-allinone Keepalived_vrrp[2642]: Sending gratuitous ARP on ha-f6677022-c8 for 169.254.0.78\nJan 30 09:51:01 devstack-ubuntu-allinone Keepalived_vrrp[2642]: Sending gratuitous ARP on qg-f65edb15-f0 for 10.10.0.134\nJan 30 09:51:01 devstack-ubuntu-allinone Keepalived_vrrp[2642]: Error sending gratuitous ARP on qg-f65edb15-f0 for 10.10.0.134\nJan 30 09:51:01 devstack-ubuntu-allinone Keepalived_vrrp[2642]: Sending unsolicited Neighbour Advert on qg-f65edb15-f0 for 2001:db8::2e0\nJan 30 09:51:01 devstack-ubuntu-allinone Keepalived_vrrp[2642]: VRRP: Error sending ndisc unsolicited neighbour advert on qg-f65edb15-f0 for 2001:db8::2e0\nJan 30 09:51:01 devstack-ubuntu-allinone Keepalived_vrrp[2642]: Sending unsolicited Neighbour Advert on qg-f65edb15-f0 for fe80::f816:3eff:fe33:628b\nJan 30 09:51:01 devstack-ubuntu-allinone Keepalived_vrrp[2642]: VRRP: Error sending ndisc unsolicited neighbour advert on qg-f65edb15-f0 for fe80::f816:3eff:fe33:628b\nJan 30 09:51:01 devstack-ubuntu-allinone Keepalived_vrrp[2642]: Sending gratuitous ARP on ha-f6677022-c8 for 169.254.0.78\nJan 30 09:51:01 devstack-ubuntu-allinone Keepalived_vrrp[2642]: Sending gratuitous ARP on qg-f65edb15-f0 for 10.10.0.134\nJan 30 09:51:01 devstack-ubuntu-allinone Keepalived_vrrp[2642]: Error sending gratuitous ARP on qg-f65edb15-f0 for 10.10.0.134\nJan 30 09:51:01 devstack-ubuntu-allinone Keepalived_vrrp[2642]: Sending unsolicited Neighbour Advert on qg-f65edb15-f0 for 2001:db8::2e0\nJan 30 09:51:01 devstack-ubuntu-allinone Keepalived_vrrp[2642]: VRRP: Error sending ndisc unsolicited neighbour advert on qg-f65edb15-f0 for 2001:db8::2e0\nJan 30 09:51:01 devstack-ubuntu-allinone Keepalived_vrrp[2642]: Sending unsolicited Neighbour Advert on qg-f65edb15-f0 for fe80::f816:3eff:fe33:628b\nJan 30 09:51:01 devstack-ubuntu-allinone Keepalived_vrrp[2642]: VRRP: Error sending ndisc unsolicited neighbour advert on qg-f65edb15-f0 for fe80::f816:3eff:fe33:628b\nJan 30 09:51:01 devstack-ubuntu-allinone Keepalived_vrrp[2642]: Sending gratuitous ARP on ha-f6677022-c8 for 169.254.0.78\nJan 30 09:51:01 devstack-ubuntu-allinone Keepalived_vrrp[2642]: Sending gratuitous ARP on qg-f65edb15-f0 for 10.10.0.134\nJan 30 09:51:01 devstack-ubuntu-allinone Keepalived_vrrp[2642]: Error sending gratuitous ARP on qg-f65edb15-f0 for 10.10.0.134\nJan 30 09:51:01 devstack-ubuntu-allinone Keepalived_vrrp[2642]: Sending unsolicited Neighbour Advert on qg-f65edb15-f0 for 2001:db8::2e0\nJan 30 09:51:01 devstack-ubuntu-allinone Keepalived_vrrp[2642]: VRRP: Error sending ndisc unsolicited neighbour advert on qg-f65edb15-f0 for 2001:db8::2e0\nJan 30 09:51:01 devstack-ubuntu-allinone Keepalived_vrrp[2642]: Sending unsolicited Neighbour Advert on qg-f65edb15-f0 for fe80::f816:3eff:fe33:628b\nJan 30 09:51:01 devstack-ubuntu-allinone Keepalived_vrrp[2642]: VRRP: Error sending ndisc unsolicited neighbour advert on qg-f65edb15-f0 for fe80::f816:3eff:fe33:628b\nJan 30 09:51:01 devstack-ubuntu-allinone Keepalived_vrrp[2642]: Sending gratuitous ARP on ha-f6677022-c8 for 169.254.0.78\nJan 30 09:51:01 devstack-ubuntu-allinone Keepalived_vrrp[2642]: Sending gratuitous ARP on qg-f65edb15-f0 for 10.10.0.134\nJan 30 09:51:01 devstack-ubuntu-allinone Keepalived_vrrp[2642]: Error sending gratuitous ARP on qg-f65edb15-f0 for 10.10.0.134\nJan 30 09:51:01 devstack-ubuntu-allinone Keepalived_vrrp[2642]: Sending unsolicited Neighbour Advert on qg-f65edb15-f0 for 2001:db8::2e0\nJan 30 09:51:01 devstack-ubuntu-allinone Keepalived_vrrp[2642]: VRRP: Error sending ndisc unsolicited neighbour advert on qg-f65edb15-f0 for 2001:db8::2e0\nJan 30 09:51:01 devstack-ubuntu-allinone Keepalived_vrrp[2642]: Sending unsolicited Neighbour Advert on qg-f65edb15-f0 for fe80::f816:3eff:fe33:628b\nJan 30 09:51:01 devstack-ubuntu-allinone Keepalived_vrrp[2642]: VRRP: Error sending ndisc unsolicited neighbour advert on qg-f65edb15-f0 for fe80::f816:3eff:fe33:628b\n\nI\u0027m not sure if that can have any side effects in dataplane but for sure it doesn\u0027t looks good in logs :/\n\n \u003e \n \u003e \u003e 2. This one is more important. I think that changing it like You\n \u003e \u003e are proposing has got some additional side effects which can\n \u003e \u003e introduce even regressions. For example now, even when\n \u003e \u003e neutron-l3-agent would be down, dataplane can still works as long\n \u003e \u003e as keepalived is working fine on the node. There will be no\n \u003e proper\n \u003e \u003e state in neutron db in such case but dataplane will work fine.\n \u003e \u003e After this change it may be different as we would need not only\n \u003e \u003e keepalived but also neutron-l3-agent to make dataplane up the\n \u003e node.\n \u003e \u003e\n \u003e \n \u003e How could such situation happen? If host is down/up, there will\n \u003e have no keepalived process. But if you mean keepalived is spawned\n \u003e then l3-agent is crushed, I think this should be another issue, or\n \u003e we are over-thinking of the problem here. For instance, for current\n \u003e approach what if ovs-agent is dead after set the port to 4095? The\n \u003e qg-device will not work as well.\n \u003e \n \u003e \u003e 3. Also second problem similar to 2) is that in this new case it\n \u003e \u003e may require more time to switch node to be new master as when\n \u003e \u003e neutron-l3-agent will be busy it may take long time to switch\n \u003e \u003e interface up.\n \u003e \u003e\n \u003e \n \u003e It is one step of ha state change action list, personally, a simple\n \u003e \"ip link set up\" should not be time-consuming. And state change\n \u003e processing is separated from the main thread of l3-agent. So it\n \u003e should be fine.\n \u003e \n \u003e \u003e So I think that I will continue work with this solution as I\n \u003e \u003e propose now. At least if You don\u0027t have any other ideas about how\n \u003e \u003e to solve this problem.\n \u003e \n \u003e We have a local fix of this, I guess maybe I should submit it as\n \u003e potential alternatives.\n\nIf You have working solution to that, feel free to send patch to review :)","commit_id":"1c8cee78706e5a08a9cfa9dd9996b856aecce782"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"d6d7e0992389d41b28878b5ca60df59b451f470e","unresolved":false,"context_lines":[{"line_number":410,"context_line":"        else:"},{"line_number":411,"context_line":"            LOG.warning(\"No MTU configured for port %s\", port_id)"},{"line_number":412,"context_line":""},{"line_number":413,"context_line":"        ns_dev.link.set_up()"},{"line_number":414,"context_line":"        if self.conf.ovs_use_veth:"},{"line_number":415,"context_line":"            root_dev.link.set_up()"},{"line_number":416,"context_line":""},{"line_number":417,"context_line":"    def unplug(self, device_name, bridge\u003dNone, namespace\u003dNone, prefix\u003dNone):"},{"line_number":418,"context_line":"        \"\"\"Unplug the interface.\"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_42e113fd","line":415,"range":{"start_line":413,"start_character":8,"end_line":415,"end_character":34},"in_reply_to":"3fa7e38b_e7b931eb","updated":"2020-01-16 16:01:45.000000000","message":"I was testing approach with setting this interface to be down initially. \nThis didn\u0027t work because keepalived which is later managing IPs and which host is master didn\u0027t bring such interface up. And that was the issue there.\n\n2 seconds sleep between rpc_loop iterations isn\u0027t any problem because L3 agent creates this port with tag 4095 always and traffic from/to port with such tag is basically dropped in br-int always.\nAfter L3 agent switches \"ready_to_bind\" flag to \"yes\", in about 2 seconds ovs agent should change port\u0027s tag from 4095 to local vlan id choosen for specific network and all should be configured properly.","commit_id":"1c8cee78706e5a08a9cfa9dd9996b856aecce782"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"6b6e794287208a4bb861b85bbc1aae7ba0613ba5","unresolved":false,"context_lines":[{"line_number":445,"context_line":""},{"line_number":446,"context_line":"    def set_device_as_ready_to_bind(self, device_name, ready, namespace\u003dNone,"},{"line_number":447,"context_line":"                                    bridge\u003dNone):"},{"line_number":448,"context_line":"        \"\"\"Mark interface to be enabled\"\"\""},{"line_number":449,"context_line":"        ovs \u003d ovs_lib.OVSBridge(bridge)"},{"line_number":450,"context_line":"        ready_to_bind \u003d ("},{"line_number":451,"context_line":"            ovs_lib.READY_TO_BIND if ready else ovs_lib.NOT_READY_TO_BIND)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_d6e6294a","line":448,"range":{"start_line":448,"start_character":32,"end_line":448,"end_character":39},"updated":"2020-01-16 12:52:15.000000000","message":"Or not. This will mark the interface readiness to be bound","commit_id":"1c8cee78706e5a08a9cfa9dd9996b856aecce782"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"93bae6243b7da880dd9bb9453b33aa94b9977fe4","unresolved":false,"context_lines":[{"line_number":445,"context_line":""},{"line_number":446,"context_line":"    def set_device_as_ready_to_bind(self, device_name, ready, namespace\u003dNone,"},{"line_number":447,"context_line":"                                    bridge\u003dNone):"},{"line_number":448,"context_line":"        \"\"\"Mark interface to be enabled\"\"\""},{"line_number":449,"context_line":"        ovs \u003d ovs_lib.OVSBridge(bridge)"},{"line_number":450,"context_line":"        ready_to_bind \u003d ("},{"line_number":451,"context_line":"            ovs_lib.READY_TO_BIND if ready else ovs_lib.NOT_READY_TO_BIND)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_e9e02a2a","line":448,"range":{"start_line":448,"start_character":32,"end_line":448,"end_character":39},"in_reply_to":"3fa7e38b_d6e6294a","updated":"2020-01-16 13:44:39.000000000","message":"yes, I need to update this comment message :)","commit_id":"1c8cee78706e5a08a9cfa9dd9996b856aecce782"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"861b37ebf5773ba7f3ba955e0279bbc9088d6c5f","unresolved":false,"context_lines":[{"line_number":302,"context_line":"            LOG.warning(\"Interface driver cannot update MTU for ports\")"},{"line_number":303,"context_line":"            self._mtu_update_warn_logged \u003d True"},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"    def set_device_internal_status(self, device_name, status, namespace\u003dNone,"},{"line_number":306,"context_line":"                                   bridge\u003dNone):"},{"line_number":307,"context_line":"        \"\"\"Mark interface as ready or not yet ready to be bound by L2 agent.\"\"\""},{"line_number":308,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_b6e87b7e","line":305,"range":{"start_line":305,"start_character":8,"end_line":305,"end_character":34},"updated":"2020-01-31 14:44:56.000000000","message":"Can we make this method to be abstract?","commit_id":"8927aca2afa4dfa883c9f3a92d281e934a42af3e"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"e920e34aea51c9c78fa94c3da9c6e25cd265fa2e","unresolved":false,"context_lines":[{"line_number":302,"context_line":"            LOG.warning(\"Interface driver cannot update MTU for ports\")"},{"line_number":303,"context_line":"            self._mtu_update_warn_logged \u003d True"},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"    def set_device_internal_status(self, device_name, status, namespace\u003dNone,"},{"line_number":306,"context_line":"                                   bridge\u003dNone):"},{"line_number":307,"context_line":"        \"\"\"Mark interface as ready or not yet ready to be bound by L2 agent.\"\"\""},{"line_number":308,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_3589ba28","line":305,"range":{"start_line":305,"start_character":8,"end_line":305,"end_character":34},"in_reply_to":"3fa7e38b_b6e87b7e","updated":"2020-02-04 13:16:44.000000000","message":"I don\u0027t want to make it abstract as then each driver will need to implement it and that\u0027s not really needed for some of drivers","commit_id":"8927aca2afa4dfa883c9f3a92d281e934a42af3e"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"218884bc82e1cf4eddbe92d5ce07e2d13b1312fb","unresolved":false,"context_lines":[{"line_number":445,"context_line":"            ns_dev \u003d ip_lib.IPWrapper(namespace\u003dnamespace).device(device_name)"},{"line_number":446,"context_line":"        ns_dev.link.set_mtu(mtu)"},{"line_number":447,"context_line":""},{"line_number":448,"context_line":"    def set_device_internal_status(self, device_name, status, namespace\u003dNone,"},{"line_number":449,"context_line":"                                   bridge\u003dNone):"},{"line_number":450,"context_line":"        \"\"\"Set device as active/inactive internally on host."},{"line_number":451,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3fa7e38b_7d64bb4d","line":448,"range":{"start_line":448,"start_character":54,"end_line":448,"end_character":60},"updated":"2020-02-07 16:12:55.000000000","message":"I just have one nit around the word \u0027status\u0027, since True means active and False means inactive?  I know we can\u0027t have the caller use the ovs_lib constants since it\u0027s a layer violation, but maybe this should be \u0027active\u0027 ?","commit_id":"b8f64de1758b855ffd5e429e4cc7edb9fe35226a"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"042e2a439e5f464e92696edc4b8f8ae32fb4e913","unresolved":false,"context_lines":[{"line_number":445,"context_line":"            ns_dev \u003d ip_lib.IPWrapper(namespace\u003dnamespace).device(device_name)"},{"line_number":446,"context_line":"        ns_dev.link.set_mtu(mtu)"},{"line_number":447,"context_line":""},{"line_number":448,"context_line":"    def set_device_internal_status(self, device_name, status, namespace\u003dNone,"},{"line_number":449,"context_line":"                                   bridge\u003dNone):"},{"line_number":450,"context_line":"        \"\"\"Set device as active/inactive internally on host."},{"line_number":451,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3fa7e38b_03051368","line":448,"range":{"start_line":448,"start_character":54,"end_line":448,"end_character":60},"in_reply_to":"3fa7e38b_7d64bb4d","updated":"2020-02-10 13:17:17.000000000","message":"Good idea. Changed :)","commit_id":"b8f64de1758b855ffd5e429e4cc7edb9fe35226a"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"f7557c811e008a20c34ccfc2b92a8202b599901a","unresolved":false,"context_lines":[{"line_number":305,"context_line":"    def set_device_internal_status(self, device_name, active, namespace\u003dNone,"},{"line_number":306,"context_line":"                                   bridge\u003dNone):"},{"line_number":307,"context_line":"        \"\"\"Mark interface as ready or not yet ready to be bound by L2 agent.\"\"\""},{"line_number":308,"context_line":"        pass"},{"line_number":309,"context_line":""},{"line_number":310,"context_line":""},{"line_number":311,"context_line":"class NullDriver(LinuxInterfaceDriver):"}],"source_content_type":"text/x-python","patch_set":10,"id":"1fa4df85_6b4c1a76","line":308,"range":{"start_line":308,"start_character":8,"end_line":308,"end_character":12},"updated":"2020-03-17 15:58:12.000000000","message":"might be useful to add comment why pass here","commit_id":"0666d99cd4d1a7b4ec5e2209934d12b5fe39652a"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"bb24955c962cbda9679c8348bfe3638ca0b395e7","unresolved":false,"context_lines":[{"line_number":305,"context_line":"    def set_device_internal_status(self, device_name, active, namespace\u003dNone,"},{"line_number":306,"context_line":"                                   bridge\u003dNone):"},{"line_number":307,"context_line":"        \"\"\"Mark interface as ready or not yet ready to be bound by L2 agent.\"\"\""},{"line_number":308,"context_line":"        pass"},{"line_number":309,"context_line":""},{"line_number":310,"context_line":""},{"line_number":311,"context_line":"class NullDriver(LinuxInterfaceDriver):"}],"source_content_type":"text/x-python","patch_set":10,"id":"1fa4df85_0e956ae4","line":308,"range":{"start_line":308,"start_character":8,"end_line":308,"end_character":12},"in_reply_to":"1fa4df85_6b4c1a76","updated":"2020-03-18 09:07:29.000000000","message":"Done","commit_id":"0666d99cd4d1a7b4ec5e2209934d12b5fe39652a"}],"neutron/plugins/ml2/drivers/openvswitch/agent/ovs_neutron_agent.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"6b6e794287208a4bb861b85bbc1aae7ba0613ba5","unresolved":false,"context_lines":[{"line_number":1092,"context_line":"                                \"local vlan change.\", port.ofport)"},{"line_number":1093,"context_line":"                    self.int_br.uninstall_flows(in_port\u003dport.ofport)"},{"line_number":1094,"context_line":""},{"line_number":1095,"context_line":"    def _bind_devices(self, need_binding_ports):"},{"line_number":1096,"context_line":"        devices_up \u003d []"},{"line_number":1097,"context_line":"        devices_down \u003d []"},{"line_number":1098,"context_line":"        failed_devices \u003d []"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_b6312dbe","line":1095,"updated":"2020-01-16 12:52:15.000000000","message":"I have one big question: this method is called only when the port is added, not when the port is updated. When the VLAN tag is going to be updated to a valid one once the port is updated?","commit_id":"1c8cee78706e5a08a9cfa9dd9996b856aecce782"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"1ea37a12317e56a93e1fddeec3a610e744375b75","unresolved":false,"context_lines":[{"line_number":1092,"context_line":"                                \"local vlan change.\", port.ofport)"},{"line_number":1093,"context_line":"                    self.int_br.uninstall_flows(in_port\u003dport.ofport)"},{"line_number":1094,"context_line":""},{"line_number":1095,"context_line":"    def _bind_devices(self, need_binding_ports):"},{"line_number":1096,"context_line":"        devices_up \u003d []"},{"line_number":1097,"context_line":"        devices_down \u003d []"},{"line_number":1098,"context_line":"        failed_devices \u003d []"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_0987c65d","line":1095,"in_reply_to":"3fa7e38b_b6312dbe","updated":"2020-01-16 13:42:40.000000000","message":"So I also though that this will require more changes on ovs agent\u0027s side. But such port which still has got tag\u003d4095 will be noticed by check_changed_vlans() method https://github.com/openstack/neutron/blob/master/neutron/plugins/ml2/drivers/openvswitch/agent/ovs_neutron_agent.py#L1691 and will than be configured in next iteration.","commit_id":"1c8cee78706e5a08a9cfa9dd9996b856aecce782"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"6b6e794287208a4bb861b85bbc1aae7ba0613ba5","unresolved":false,"context_lines":[{"line_number":1128,"context_line":"                # mark port as ready to be fully wired"},{"line_number":1129,"context_line":"                ready_for_binding \u003d other_config_by_name.get("},{"line_number":1130,"context_line":"                    port.port_name, {}).get("},{"line_number":1131,"context_line":"                        ovs_lib.BIND_DEVICE, ovs_lib.READY_TO_BIND)"},{"line_number":1132,"context_line":"                if ready_for_binding \u003d\u003d ovs_lib.READY_TO_BIND:"},{"line_number":1133,"context_line":"                    self.int_br.set_db_attribute("},{"line_number":1134,"context_line":"                        \"Port\", port.port_name, \"tag\", lvm.vlan)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_76c6559f","line":1131,"range":{"start_line":1131,"start_character":53,"end_line":1131,"end_character":66},"updated":"2020-01-16 12:52:15.000000000","message":"Ok, by default if the parameter does not exist (old one), the port is ready","commit_id":"1c8cee78706e5a08a9cfa9dd9996b856aecce782"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"93bae6243b7da880dd9bb9453b33aa94b9977fe4","unresolved":false,"context_lines":[{"line_number":1128,"context_line":"                # mark port as ready to be fully wired"},{"line_number":1129,"context_line":"                ready_for_binding \u003d other_config_by_name.get("},{"line_number":1130,"context_line":"                    port.port_name, {}).get("},{"line_number":1131,"context_line":"                        ovs_lib.BIND_DEVICE, ovs_lib.READY_TO_BIND)"},{"line_number":1132,"context_line":"                if ready_for_binding \u003d\u003d ovs_lib.READY_TO_BIND:"},{"line_number":1133,"context_line":"                    self.int_br.set_db_attribute("},{"line_number":1134,"context_line":"                        \"Port\", port.port_name, \"tag\", lvm.vlan)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_893e5688","line":1131,"range":{"start_line":1131,"start_character":53,"end_line":1131,"end_character":66},"in_reply_to":"3fa7e38b_76c6559f","updated":"2020-01-16 13:44:39.000000000","message":"exactly. Nothing will change for all existing ports and also for all ports which belongs to VMs, DHCP agents or other L3 agents (dvr or legacy)","commit_id":"1c8cee78706e5a08a9cfa9dd9996b856aecce782"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"861b37ebf5773ba7f3ba955e0279bbc9088d6c5f","unresolved":false,"context_lines":[{"line_number":1745,"context_line":"        port_tags \u003d self.int_br.get_port_tag_dict()"},{"line_number":1746,"context_line":"        changed_ports \u003d set()"},{"line_number":1747,"context_line":"        changed_dead_ports \u003d set()"},{"line_number":1748,"context_line":"        LOG.error(\"SK: checking for changed vlans\")"},{"line_number":1749,"context_line":"        for lvm in self.vlan_manager:"},{"line_number":1750,"context_line":"            for port in lvm.vif_ports.values():"},{"line_number":1751,"context_line":"                if ("}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_76b0c38e","line":1748,"range":{"start_line":1748,"start_character":7,"end_line":1748,"end_character":51},"updated":"2020-01-31 14:44:56.000000000","message":"hmm :)","commit_id":"8927aca2afa4dfa883c9f3a92d281e934a42af3e"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"e920e34aea51c9c78fa94c3da9c6e25cd265fa2e","unresolved":false,"context_lines":[{"line_number":1745,"context_line":"        port_tags \u003d self.int_br.get_port_tag_dict()"},{"line_number":1746,"context_line":"        changed_ports \u003d set()"},{"line_number":1747,"context_line":"        changed_dead_ports \u003d set()"},{"line_number":1748,"context_line":"        LOG.error(\"SK: checking for changed vlans\")"},{"line_number":1749,"context_line":"        for lvm in self.vlan_manager:"},{"line_number":1750,"context_line":"            for port in lvm.vif_ports.values():"},{"line_number":1751,"context_line":"                if ("}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_f5924255","line":1748,"range":{"start_line":1748,"start_character":7,"end_line":1748,"end_character":51},"in_reply_to":"3fa7e38b_76b0c38e","updated":"2020-02-04 13:16:44.000000000","message":"ups :)","commit_id":"8927aca2afa4dfa883c9f3a92d281e934a42af3e"}]}
