)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"cf289e4feb9153e3350e818e46c93301e945c4f2","unresolved":true,"context_lines":[{"line_number":10,"context_line":"1. Non-dvr router. The all related rules are applied in"},{"line_number":11,"context_line":"   qrouter-namespace"},{"line_number":12,"context_line":"2. Dvr router with the local agent mode is dvr_no_external."},{"line_number":13,"context_line":"   The all related rules are applied in sant-namespace."},{"line_number":14,"context_line":"3. Dvr router with the local agent mode is dvr. In this scenario,"},{"line_number":15,"context_line":"   The all related rules are applied in fip-namespace."},{"line_number":16,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":33,"id":"9d590ec5_fd673315","line":13,"range":{"start_line":13,"start_character":40,"end_line":13,"end_character":44},"updated":"2022-02-22 13:54:51.000000000","message":"nit: should be \"snat\" I guess 😊","commit_id":"7630e0978e5ff8c53d0d7e821e01944ccc166ad3"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"f24c301deeb405836d4ea6f5e7ad43cd8fb48aba","unresolved":true,"context_lines":[{"line_number":10,"context_line":"1. Non-dvr router. The all related rules are applied in"},{"line_number":11,"context_line":"   qrouter-namespace"},{"line_number":12,"context_line":"2. Dvr router with the local agent mode is dvr_no_external."},{"line_number":13,"context_line":"   The all related rules are applied in sant-namespace."},{"line_number":14,"context_line":"3. Dvr router with the local agent mode is dvr. In this scenario,"},{"line_number":15,"context_line":"   The all related rules are applied in fip-namespace."},{"line_number":16,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":33,"id":"d243dd39_691ba1c1","line":13,"range":{"start_line":13,"start_character":40,"end_line":13,"end_character":44},"in_reply_to":"9d590ec5_fd673315","updated":"2022-02-23 00:29:01.000000000","message":"thx","commit_id":"7630e0978e5ff8c53d0d7e821e01944ccc166ad3"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"15d6681848972661baa6f956f5e116759bce31e3","unresolved":false,"context_lines":[{"line_number":10,"context_line":"1. Non-dvr router. The all related rules are applied in"},{"line_number":11,"context_line":"   qrouter-namespace"},{"line_number":12,"context_line":"2. Dvr router with the local agent mode is dvr_no_external."},{"line_number":13,"context_line":"   The all related rules are applied in sant-namespace."},{"line_number":14,"context_line":"3. Dvr router with the local agent mode is dvr. In this scenario,"},{"line_number":15,"context_line":"   The all related rules are applied in fip-namespace."},{"line_number":16,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":33,"id":"02d0546a_d176fc43","line":13,"range":{"start_line":13,"start_character":40,"end_line":13,"end_character":44},"in_reply_to":"d243dd39_691ba1c1","updated":"2022-02-25 03:49:56.000000000","message":"Done","commit_id":"7630e0978e5ff8c53d0d7e821e01944ccc166ad3"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"15d6681848972661baa6f956f5e116759bce31e3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":34,"id":"5c48f229_6479333c","updated":"2022-02-25 03:49:56.000000000","message":"Also need implment some methods in \u0027ip_lib\u0027 to add/del/flush ndp proxy entry. ","commit_id":"1721f014719a667fe2b9ead8bcc8c4a9641b9e33"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"1792f414bcb063de7e2eace28e6cb2d9f4671230","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":35,"id":"81ad70a1_a424a793","updated":"2022-02-27 03:08:18.000000000","message":"I read the pyroute2 docs [1] and related codes [2] carefully. I am sorry to say maybe the pyroute2 has no method to process IPv6 ndp proxy.\n\n[1] https://docs.pyroute2.org/\n[2] https://github.com/svinota/pyroute2/blob/master/pyroute2.core/pr2modules/iproute/linux.py#L950","commit_id":"9b27020a65a5e8d1f6c9dccd352ae00a2c40cf41"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"534488002e0de28f5de8889bf3b8c0786cfad21e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":35,"id":"a0125e97_41b31542","updated":"2022-03-12 02:15:33.000000000","message":"Nice work!","commit_id":"9b27020a65a5e8d1f6c9dccd352ae00a2c40cf41"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"7e05bae41a7552f95db34758ba9aa47313ba5dff","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":35,"id":"2113f88b_2115b9f3","updated":"2022-02-28 08:19:48.000000000","message":"Sorry, code looks good for me but we are past Feature Freeze now so we shouldn\u0027t merge it now without FFE accepted. That\u0027s why I gave -1 for now. It\u0027s temporary only.","commit_id":"9b27020a65a5e8d1f6c9dccd352ae00a2c40cf41"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"46bda5f39fe4dba8a3468ce4f4841414c1494813","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":35,"id":"ef8dffe8_2568bbe6","updated":"2022-03-11 15:13:35.000000000","message":"We now have stable/yoga so master is open again and IMO we can move on with this.","commit_id":"9b27020a65a5e8d1f6c9dccd352ae00a2c40cf41"}],"etc/neutron/rootwrap.d/rootwrap.filters":[{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"3f387ef806ff6f59447ff65dafb1825401b8132d","unresolved":true,"context_lines":[{"line_number":51,"context_line":"radvd: CommandFilter, radvd, root"},{"line_number":52,"context_line":"keepalived: CommandFilter, keepalived, root"},{"line_number":53,"context_line":"keepalived_state_change: CommandFilter, neutron-keepalived-state-change, root"},{"line_number":54,"context_line":"ndsend: CommandFilter, ndsend, root"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"# OPEN VSWITCH"},{"line_number":57,"context_line":"ovs-ofctl: CommandFilter, ovs-ofctl, root"}],"source_content_type":"application/octet-stream","patch_set":14,"id":"3606d09c_5fdfae81","line":54,"range":{"start_line":54,"start_character":0,"end_line":54,"end_character":6},"updated":"2022-02-08 08:57:42.000000000","message":"This new command should be announced in the release note.","commit_id":"3f9312bbb85164b3c9a87f55e4bd2c7fb7a405c8"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"f225b0cd0b0aa427f9794f0ce581d3e736e80cc6","unresolved":true,"context_lines":[{"line_number":51,"context_line":"radvd: CommandFilter, radvd, root"},{"line_number":52,"context_line":"keepalived: CommandFilter, keepalived, root"},{"line_number":53,"context_line":"keepalived_state_change: CommandFilter, neutron-keepalived-state-change, root"},{"line_number":54,"context_line":"ndsend: CommandFilter, ndsend, root"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"# OPEN VSWITCH"},{"line_number":57,"context_line":"ovs-ofctl: CommandFilter, ovs-ofctl, root"}],"source_content_type":"application/octet-stream","patch_set":14,"id":"00115bb8_085827b9","line":54,"range":{"start_line":54,"start_character":0,"end_line":54,"end_character":6},"in_reply_to":"3606d09c_5fdfae81","updated":"2022-02-11 13:41:48.000000000","message":"Thinks for you remind, I will add it at [docs] patch https://review.opendev.org/c/openstack/neutron/+/822253 .","commit_id":"3f9312bbb85164b3c9a87f55e4bd2c7fb7a405c8"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"ebf08f5a232fdc91a20eef680a62be6c9f9f1169","unresolved":true,"context_lines":[{"line_number":51,"context_line":"radvd: CommandFilter, radvd, root"},{"line_number":52,"context_line":"keepalived: CommandFilter, keepalived, root"},{"line_number":53,"context_line":"keepalived_state_change: CommandFilter, neutron-keepalived-state-change, root"},{"line_number":54,"context_line":"ndsend: CommandFilter, ndsend, root"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"# OPEN VSWITCH"},{"line_number":57,"context_line":"ovs-ofctl: CommandFilter, ovs-ofctl, root"}],"source_content_type":"application/octet-stream","patch_set":19,"id":"e344e9d9_423880f0","line":54,"range":{"start_line":54,"start_character":0,"end_line":54,"end_character":35},"updated":"2021-12-06 07:26:17.000000000","message":"we are moving from rootwrap to privsep, please check https://storyboard.openstack.org/#!/story/2007686","commit_id":"e2da8ebd81c16f8d4efdfe6ac4869e75ecb7bcde"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"96c1676b1b659cfa6b15d050717a3ab393774369","unresolved":false,"context_lines":[{"line_number":51,"context_line":"radvd: CommandFilter, radvd, root"},{"line_number":52,"context_line":"keepalived: CommandFilter, keepalived, root"},{"line_number":53,"context_line":"keepalived_state_change: CommandFilter, neutron-keepalived-state-change, root"},{"line_number":54,"context_line":"ndsend: CommandFilter, ndsend, root"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"# OPEN VSWITCH"},{"line_number":57,"context_line":"ovs-ofctl: CommandFilter, ovs-ofctl, root"}],"source_content_type":"application/octet-stream","patch_set":19,"id":"f877f6b7_8e82329e","line":54,"range":{"start_line":54,"start_character":0,"end_line":54,"end_character":35},"in_reply_to":"e344e9d9_423880f0","updated":"2021-12-19 05:18:05.000000000","message":"Done","commit_id":"e2da8ebd81c16f8d4efdfe6ac4869e75ecb7bcde"}],"neutron/agent/l3/dvr_fip_ns.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"807eaae3d244b400222f3ec45c6b246b7576f9f9","unresolved":false,"context_lines":[{"line_number":440,"context_line":"            fip_2_rtr_dev.link.set_mtu(mtu)"},{"line_number":441,"context_line":""},{"line_number":442,"context_line":""},{"line_number":443,"context_line":"        self._add_cidr_to_device(rtr_2_fip_dev, str(rtr_2_fip))"},{"line_number":444,"context_line":"        self._add_cidr_to_device(fip_2_rtr_dev, str(fip_2_rtr))"},{"line_number":445,"context_line":""},{"line_number":446,"context_line":"        # Add permanant ARP entries on each side of veth pair"}],"source_content_type":"text/x-python","patch_set":6,"id":"9f560f44_1e541721","line":443,"updated":"2020-08-29 05:24:43.000000000","message":"pep8: E303 too many blank lines (2)","commit_id":"4c04c24d071e8321dba151707f03832ee4ee7fd0"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"869f123e204dccdd3c0d18bde322f36e2818dfa9","unresolved":true,"context_lines":[{"line_number":426,"context_line":"        if ri.rtr_fip_subnet is None:"},{"line_number":427,"context_line":"            ri.rtr_fip_subnet \u003d self.local_subnets.allocate(ri.router_id)"},{"line_number":428,"context_line":"        rtr_2_fip, fip_2_rtr \u003d ri.rtr_fip_subnet.get_pair()"},{"line_number":429,"context_line":"        rtr_2_fip_dev \u003d ip_lib.IPDevice(rtr_2_fip_name, namespace\u003dri.ns_name)"},{"line_number":430,"context_line":"        fip_2_rtr_dev \u003d ip_lib.IPDevice(fip_2_rtr_name, namespace\u003dfip_ns_name)"},{"line_number":431,"context_line":""},{"line_number":432,"context_line":"        if not rtr_2_fip_dev.exists():"},{"line_number":433,"context_line":"            ip_wrapper \u003d ip_lib.IPWrapper(namespace\u003dri.ns_name)"}],"source_content_type":"text/x-python","patch_set":28,"id":"14f66576_0784ffdc","line":430,"range":{"start_line":429,"start_character":8,"end_line":430,"end_character":78},"updated":"2022-02-09 12:12:22.000000000","message":"Can use new methods here","commit_id":"768f566185769dfbf36d6c50328d926f2b82c741"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"f225b0cd0b0aa427f9794f0ce581d3e736e80cc6","unresolved":false,"context_lines":[{"line_number":426,"context_line":"        if ri.rtr_fip_subnet is None:"},{"line_number":427,"context_line":"            ri.rtr_fip_subnet \u003d self.local_subnets.allocate(ri.router_id)"},{"line_number":428,"context_line":"        rtr_2_fip, fip_2_rtr \u003d ri.rtr_fip_subnet.get_pair()"},{"line_number":429,"context_line":"        rtr_2_fip_dev \u003d ip_lib.IPDevice(rtr_2_fip_name, namespace\u003dri.ns_name)"},{"line_number":430,"context_line":"        fip_2_rtr_dev \u003d ip_lib.IPDevice(fip_2_rtr_name, namespace\u003dfip_ns_name)"},{"line_number":431,"context_line":""},{"line_number":432,"context_line":"        if not rtr_2_fip_dev.exists():"},{"line_number":433,"context_line":"            ip_wrapper \u003d ip_lib.IPWrapper(namespace\u003dri.ns_name)"}],"source_content_type":"text/x-python","patch_set":28,"id":"1b32bd00_31c16600","line":430,"range":{"start_line":429,"start_character":8,"end_line":430,"end_character":78},"in_reply_to":"14f66576_0784ffdc","updated":"2022-02-11 13:41:48.000000000","message":"Done","commit_id":"768f566185769dfbf36d6c50328d926f2b82c741"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"c01d49d799241c4ea753dd5d034b90a1fa77a403","unresolved":true,"context_lines":[{"line_number":418,"context_line":"    def create_rtr_2_fip_link(self, ri):"},{"line_number":419,"context_line":"        \"\"\"Create interface between router and Floating IP namespace.\"\"\""},{"line_number":420,"context_line":"        LOG.debug(\"Create FIP link interfaces for router %s\", ri.router_id)"},{"line_number":421,"context_line":"        rtr_2_fip_name \u003d self.get_rtr_ext_device_name(ri.router_id)"},{"line_number":422,"context_line":"        fip_2_rtr_name \u003d self.get_int_device_name(ri.router_id)"},{"line_number":423,"context_line":"        fip_ns_name \u003d self.get_name()"},{"line_number":424,"context_line":""},{"line_number":425,"context_line":"        # add link local IP to interface"}],"source_content_type":"text/x-python","patch_set":30,"id":"23f3f1bc_34287497","line":422,"range":{"start_line":421,"start_character":8,"end_line":422,"end_character":63},"updated":"2022-02-14 07:33:08.000000000","message":"not needed","commit_id":"3229a43603b7b9192da826ab4f76e00fbbb5ae0d"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"044baf2b40404f713c62594ec8b9be68a514e1c8","unresolved":false,"context_lines":[{"line_number":418,"context_line":"    def create_rtr_2_fip_link(self, ri):"},{"line_number":419,"context_line":"        \"\"\"Create interface between router and Floating IP namespace.\"\"\""},{"line_number":420,"context_line":"        LOG.debug(\"Create FIP link interfaces for router %s\", ri.router_id)"},{"line_number":421,"context_line":"        rtr_2_fip_name \u003d self.get_rtr_ext_device_name(ri.router_id)"},{"line_number":422,"context_line":"        fip_2_rtr_name \u003d self.get_int_device_name(ri.router_id)"},{"line_number":423,"context_line":"        fip_ns_name \u003d self.get_name()"},{"line_number":424,"context_line":""},{"line_number":425,"context_line":"        # add link local IP to interface"}],"source_content_type":"text/x-python","patch_set":30,"id":"d8670004_7cb6fb07","line":422,"range":{"start_line":421,"start_character":8,"end_line":422,"end_character":63},"in_reply_to":"23f3f1bc_34287497","updated":"2022-02-15 00:29:40.000000000","message":"Done","commit_id":"3229a43603b7b9192da826ab4f76e00fbbb5ae0d"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"c01d49d799241c4ea753dd5d034b90a1fa77a403","unresolved":true,"context_lines":[{"line_number":431,"context_line":""},{"line_number":432,"context_line":"        if not rtr_2_fip_dev.exists():"},{"line_number":433,"context_line":"            ip_wrapper \u003d ip_lib.IPWrapper(namespace\u003dri.ns_name)"},{"line_number":434,"context_line":"            rtr_2_fip_dev, fip_2_rtr_dev \u003d ip_wrapper.add_veth(rtr_2_fip_name,"},{"line_number":435,"context_line":"                                                               fip_2_rtr_name,"},{"line_number":436,"context_line":"                                                               fip_ns_name)"},{"line_number":437,"context_line":"            rtr_2_fip_dev.link.set_up()"}],"source_content_type":"text/x-python","patch_set":30,"id":"8449a7fe_09ac6d24","line":434,"range":{"start_line":434,"start_character":63,"end_line":434,"end_character":77},"updated":"2022-02-14 07:33:08.000000000","message":"rtr_2_fip_dev.name","commit_id":"3229a43603b7b9192da826ab4f76e00fbbb5ae0d"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"044baf2b40404f713c62594ec8b9be68a514e1c8","unresolved":false,"context_lines":[{"line_number":431,"context_line":""},{"line_number":432,"context_line":"        if not rtr_2_fip_dev.exists():"},{"line_number":433,"context_line":"            ip_wrapper \u003d ip_lib.IPWrapper(namespace\u003dri.ns_name)"},{"line_number":434,"context_line":"            rtr_2_fip_dev, fip_2_rtr_dev \u003d ip_wrapper.add_veth(rtr_2_fip_name,"},{"line_number":435,"context_line":"                                                               fip_2_rtr_name,"},{"line_number":436,"context_line":"                                                               fip_ns_name)"},{"line_number":437,"context_line":"            rtr_2_fip_dev.link.set_up()"}],"source_content_type":"text/x-python","patch_set":30,"id":"3d879f60_73640b06","line":434,"range":{"start_line":434,"start_character":63,"end_line":434,"end_character":77},"in_reply_to":"8449a7fe_09ac6d24","updated":"2022-02-15 00:29:40.000000000","message":"Done","commit_id":"3229a43603b7b9192da826ab4f76e00fbbb5ae0d"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"c01d49d799241c4ea753dd5d034b90a1fa77a403","unresolved":true,"context_lines":[{"line_number":432,"context_line":"        if not rtr_2_fip_dev.exists():"},{"line_number":433,"context_line":"            ip_wrapper \u003d ip_lib.IPWrapper(namespace\u003dri.ns_name)"},{"line_number":434,"context_line":"            rtr_2_fip_dev, fip_2_rtr_dev \u003d ip_wrapper.add_veth(rtr_2_fip_name,"},{"line_number":435,"context_line":"                                                               fip_2_rtr_name,"},{"line_number":436,"context_line":"                                                               fip_ns_name)"},{"line_number":437,"context_line":"            rtr_2_fip_dev.link.set_up()"},{"line_number":438,"context_line":"            fip_2_rtr_dev.link.set_up()"}],"source_content_type":"text/x-python","patch_set":30,"id":"b13f93b8_9346d120","line":435,"range":{"start_line":435,"start_character":63,"end_line":435,"end_character":77},"updated":"2022-02-14 07:33:08.000000000","message":"fip_2_rtr_dev.name","commit_id":"3229a43603b7b9192da826ab4f76e00fbbb5ae0d"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"044baf2b40404f713c62594ec8b9be68a514e1c8","unresolved":false,"context_lines":[{"line_number":432,"context_line":"        if not rtr_2_fip_dev.exists():"},{"line_number":433,"context_line":"            ip_wrapper \u003d ip_lib.IPWrapper(namespace\u003dri.ns_name)"},{"line_number":434,"context_line":"            rtr_2_fip_dev, fip_2_rtr_dev \u003d ip_wrapper.add_veth(rtr_2_fip_name,"},{"line_number":435,"context_line":"                                                               fip_2_rtr_name,"},{"line_number":436,"context_line":"                                                               fip_ns_name)"},{"line_number":437,"context_line":"            rtr_2_fip_dev.link.set_up()"},{"line_number":438,"context_line":"            fip_2_rtr_dev.link.set_up()"}],"source_content_type":"text/x-python","patch_set":30,"id":"ecd21c93_91410189","line":435,"range":{"start_line":435,"start_character":63,"end_line":435,"end_character":77},"in_reply_to":"b13f93b8_9346d120","updated":"2022-02-15 00:29:40.000000000","message":"Done","commit_id":"3229a43603b7b9192da826ab4f76e00fbbb5ae0d"}],"neutron/agent/l3/extensions/ndp_proxy.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"807eaae3d244b400222f3ec45c6b246b7576f9f9","unresolved":false,"context_lines":[{"line_number":105,"context_line":"        self._process_ndp_proxy_for_router(context, data)"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    def delete_router(self, context, data):"},{"line_number":108,"context_line":"        # TODO (yangjianfeng): Clear relate rules in fip-* namespace"},{"line_number":109,"context_line":"        pass"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    def ha_state_change(self, context, data):"}],"source_content_type":"text/x-python","patch_set":6,"id":"9f560f44_7e2ef3ab","line":108,"updated":"2020-08-29 05:24:43.000000000","message":"pep8: H101: Use TODO(NAME)","commit_id":"4c04c24d071e8321dba151707f03832ee4ee7fd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"807eaae3d244b400222f3ec45c6b246b7576f9f9","unresolved":false,"context_lines":[{"line_number":113,"context_line":""},{"line_number":114,"context_line":"    def _register_rpc_consumers(self):"},{"line_number":115,"context_line":"        registry.register(self._handle_notification,"},{"line_number":116,"context_line":"                            resources.NDPPROXY)"},{"line_number":117,"context_line":"        self._connection \u003d n_rpc.Connection()"},{"line_number":118,"context_line":"        endpoints \u003d [resources_rpc.ResourcesPushRpcCallback()]"},{"line_number":119,"context_line":"        topic \u003d resources_rpc.resource_type_versioned_topic("}],"source_content_type":"text/x-python","patch_set":6,"id":"9f560f44_5e332f14","line":116,"updated":"2020-08-29 05:24:43.000000000","message":"pep8: E127 continuation line over-indented for visual indent","commit_id":"4c04c24d071e8321dba151707f03832ee4ee7fd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"807eaae3d244b400222f3ec45c6b246b7576f9f9","unresolved":false,"context_lines":[{"line_number":135,"context_line":""},{"line_number":136,"context_line":"        is_distributed \u003d ri.router.get(\u0027distributed\u0027)"},{"line_number":137,"context_line":"        if is_distributed:"},{"line_number":138,"context_line":"            port_obj  \u003d self.resource_rpc.pull("},{"line_number":139,"context_line":"                   context, resources.PORT, proxy.port_id)"},{"line_number":140,"context_line":"            for binding in port_obj.bindings:"},{"line_number":141,"context_line":"               if binding.host \u003d\u003d ri.agent_conf.host:"}],"source_content_type":"text/x-python","patch_set":6,"id":"9f560f44_be388bee","line":138,"updated":"2020-08-29 05:24:43.000000000","message":"pep8: E221 multiple spaces before operator","commit_id":"4c04c24d071e8321dba151707f03832ee4ee7fd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"807eaae3d244b400222f3ec45c6b246b7576f9f9","unresolved":false,"context_lines":[{"line_number":136,"context_line":"        is_distributed \u003d ri.router.get(\u0027distributed\u0027)"},{"line_number":137,"context_line":"        if is_distributed:"},{"line_number":138,"context_line":"            port_obj  \u003d self.resource_rpc.pull("},{"line_number":139,"context_line":"                   context, resources.PORT, proxy.port_id)"},{"line_number":140,"context_line":"            for binding in port_obj.bindings:"},{"line_number":141,"context_line":"               if binding.host \u003d\u003d ri.agent_conf.host:"},{"line_number":142,"context_line":"                   break"}],"source_content_type":"text/x-python","patch_set":6,"id":"9f560f44_9e3dc7df","line":139,"updated":"2020-08-29 05:24:43.000000000","message":"pep8: F821 undefined name \u0027proxy\u0027","commit_id":"4c04c24d071e8321dba151707f03832ee4ee7fd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"807eaae3d244b400222f3ec45c6b246b7576f9f9","unresolved":false,"context_lines":[{"line_number":138,"context_line":"            port_obj  \u003d self.resource_rpc.pull("},{"line_number":139,"context_line":"                   context, resources.PORT, proxy.port_id)"},{"line_number":140,"context_line":"            for binding in port_obj.bindings:"},{"line_number":141,"context_line":"               if binding.host \u003d\u003d ri.agent_conf.host:"},{"line_number":142,"context_line":"                   break"},{"line_number":143,"context_line":"            else:"},{"line_number":144,"context_line":"                return"}],"source_content_type":"text/x-python","patch_set":6,"id":"9f560f44_fe2163b7","line":141,"updated":"2020-08-29 05:24:43.000000000","message":"pep8: E111 indentation is not a multiple of four","commit_id":"4c04c24d071e8321dba151707f03832ee4ee7fd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"807eaae3d244b400222f3ec45c6b246b7576f9f9","unresolved":false,"context_lines":[{"line_number":139,"context_line":"                   context, resources.PORT, proxy.port_id)"},{"line_number":140,"context_line":"            for binding in port_obj.bindings:"},{"line_number":141,"context_line":"               if binding.host \u003d\u003d ri.agent_conf.host:"},{"line_number":142,"context_line":"                   break"},{"line_number":143,"context_line":"            else:"},{"line_number":144,"context_line":"                return"},{"line_number":145,"context_line":"            rtr_2_fip_dev \u003d ri.fip_ns.get_rtr_2_fip_device(ri)"}],"source_content_type":"text/x-python","patch_set":6,"id":"9f560f44_de1e1f73","line":142,"updated":"2020-08-29 05:24:43.000000000","message":"pep8: E111 indentation is not a multiple of four","commit_id":"4c04c24d071e8321dba151707f03832ee4ee7fd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"807eaae3d244b400222f3ec45c6b246b7576f9f9","unresolved":false,"context_lines":[{"line_number":229,"context_line":"            cmd \u003d [\u0027ip\u0027, \u0027-6\u0027, \u0027neigh\u0027, \u0027del\u0027,"},{"line_number":230,"context_line":"                   \u0027proxy\u0027, proxy, \u0027dev\u0027, interface_name]"},{"line_number":231,"context_line":"            ip_wrapper.netns.execute(cmd, check_exit_code\u003dFalse)"},{"line_number":232,"context_line":"        "},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"    def _get_existing_ndp_proxies_dvr(self, rtr_2_fip_dev, fip_2_rtr_dev):"},{"line_number":235,"context_line":"        existing_ndp_proxies \u003d []"}],"source_content_type":"text/x-python","patch_set":6,"id":"9f560f44_3e2c7bab","line":232,"updated":"2020-08-29 05:24:43.000000000","message":"pep8: W293 blank line contains whitespace","commit_id":"4c04c24d071e8321dba151707f03832ee4ee7fd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"807eaae3d244b400222f3ec45c6b246b7576f9f9","unresolved":false,"context_lines":[{"line_number":231,"context_line":"            ip_wrapper.netns.execute(cmd, check_exit_code\u003dFalse)"},{"line_number":232,"context_line":"        "},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"    def _get_existing_ndp_proxies_dvr(self, rtr_2_fip_dev, fip_2_rtr_dev):"},{"line_number":235,"context_line":"        existing_ndp_proxies \u003d []"},{"line_number":236,"context_line":"        rtr_2_fip_v6_address \u003d self._get_device_ipv6_lladdr(rtr_2_fip_dev)"},{"line_number":237,"context_line":"        ndp_routers \u003d fip_2_rtr_dev.route.list_routes("}],"source_content_type":"text/x-python","patch_set":6,"id":"9f560f44_1e29b79a","line":234,"updated":"2020-08-29 05:24:43.000000000","message":"pep8: E303 too many blank lines (2)","commit_id":"4c04c24d071e8321dba151707f03832ee4ee7fd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"807eaae3d244b400222f3ec45c6b246b7576f9f9","unresolved":false,"context_lines":[{"line_number":260,"context_line":"        new_proxies \u003d []"},{"line_number":261,"context_line":"        for proxy in ndp_proxies:"},{"line_number":262,"context_line":"            if is_distributed:"},{"line_number":263,"context_line":"                port_obj  \u003d self.resource_rpc.pull("},{"line_number":264,"context_line":"                    context, resources.PORT, proxy.port_id)"},{"line_number":265,"context_line":"                for binding in port_obj.bindings:"},{"line_number":266,"context_line":"                    if binding.host \u003d\u003d ri.agent_conf.host:"}],"source_content_type":"text/x-python","patch_set":6,"id":"9f560f44_7e171356","line":263,"updated":"2020-08-29 05:24:43.000000000","message":"pep8: E221 multiple spaces before operator","commit_id":"4c04c24d071e8321dba151707f03832ee4ee7fd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"895ea119eb7e74b0370fdd09121a416219f58a3b","unresolved":false,"context_lines":[{"line_number":105,"context_line":"        self._process_ndp_proxy_for_router(context, data)"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    def delete_router(self, context, data):"},{"line_number":108,"context_line":"        # TODO (yangjianfeng): Clear relate rules in fip-* namespace"},{"line_number":109,"context_line":"        pass"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    def ha_state_change(self, context, data):"}],"source_content_type":"text/x-python","patch_set":7,"id":"9f560f44_686aab1b","line":108,"updated":"2020-08-31 13:29:13.000000000","message":"pep8: H101: Use TODO(NAME)","commit_id":"487af72d84de6987486c8a824bfa6012bc67f187"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"895ea119eb7e74b0370fdd09121a416219f58a3b","unresolved":false,"context_lines":[{"line_number":113,"context_line":""},{"line_number":114,"context_line":"    def _register_rpc_consumers(self):"},{"line_number":115,"context_line":"        registry.register(self._handle_notification,"},{"line_number":116,"context_line":"                            resources.NDPPROXY)"},{"line_number":117,"context_line":"        self._connection \u003d n_rpc.Connection()"},{"line_number":118,"context_line":"        endpoints \u003d [resources_rpc.ResourcesPushRpcCallback()]"},{"line_number":119,"context_line":"        topic \u003d resources_rpc.resource_type_versioned_topic("}],"source_content_type":"text/x-python","patch_set":7,"id":"9f560f44_4867e752","line":116,"updated":"2020-08-31 13:29:13.000000000","message":"pep8: E127 continuation line over-indented for visual indent","commit_id":"487af72d84de6987486c8a824bfa6012bc67f187"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"895ea119eb7e74b0370fdd09121a416219f58a3b","unresolved":false,"context_lines":[{"line_number":135,"context_line":""},{"line_number":136,"context_line":"        is_distributed \u003d ri.router.get(\u0027distributed\u0027)"},{"line_number":137,"context_line":"        if is_distributed:"},{"line_number":138,"context_line":"            port_obj  \u003d self.resource_rpc.pull("},{"line_number":139,"context_line":"                   context, resources.PORT, ndp_proxy[\u0027port_id\u0027])"},{"line_number":140,"context_line":"            for binding in port_obj.bindings:"},{"line_number":141,"context_line":"               if binding.host \u003d\u003d ri.agent_conf.host:"}],"source_content_type":"text/x-python","patch_set":7,"id":"9f560f44_a874c3ff","line":138,"updated":"2020-08-31 13:29:13.000000000","message":"pep8: E221 multiple spaces before operator","commit_id":"487af72d84de6987486c8a824bfa6012bc67f187"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"895ea119eb7e74b0370fdd09121a416219f58a3b","unresolved":false,"context_lines":[{"line_number":138,"context_line":"            port_obj  \u003d self.resource_rpc.pull("},{"line_number":139,"context_line":"                   context, resources.PORT, ndp_proxy[\u0027port_id\u0027])"},{"line_number":140,"context_line":"            for binding in port_obj.bindings:"},{"line_number":141,"context_line":"               if binding.host \u003d\u003d ri.agent_conf.host:"},{"line_number":142,"context_line":"                   break"},{"line_number":143,"context_line":"            else:"},{"line_number":144,"context_line":"                return"}],"source_content_type":"text/x-python","patch_set":7,"id":"9f560f44_8871ff0f","line":141,"updated":"2020-08-31 13:29:13.000000000","message":"pep8: E111 indentation is not a multiple of four","commit_id":"487af72d84de6987486c8a824bfa6012bc67f187"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"895ea119eb7e74b0370fdd09121a416219f58a3b","unresolved":false,"context_lines":[{"line_number":139,"context_line":"                   context, resources.PORT, ndp_proxy[\u0027port_id\u0027])"},{"line_number":140,"context_line":"            for binding in port_obj.bindings:"},{"line_number":141,"context_line":"               if binding.host \u003d\u003d ri.agent_conf.host:"},{"line_number":142,"context_line":"                   break"},{"line_number":143,"context_line":"            else:"},{"line_number":144,"context_line":"                return"},{"line_number":145,"context_line":"            rtr_2_fip_dev \u003d ri.fip_ns.get_rtr_2_fip_device(ri)"}],"source_content_type":"text/x-python","patch_set":7,"id":"9f560f44_e85fdb72","line":142,"updated":"2020-08-31 13:29:13.000000000","message":"pep8: E111 indentation is not a multiple of four","commit_id":"487af72d84de6987486c8a824bfa6012bc67f187"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"895ea119eb7e74b0370fdd09121a416219f58a3b","unresolved":false,"context_lines":[{"line_number":229,"context_line":"            cmd \u003d [\u0027ip\u0027, \u0027-6\u0027, \u0027neigh\u0027, \u0027del\u0027,"},{"line_number":230,"context_line":"                   \u0027proxy\u0027, proxy, \u0027dev\u0027, interface_name]"},{"line_number":231,"context_line":"            ip_wrapper.netns.execute(cmd, check_exit_code\u003dFalse)"},{"line_number":232,"context_line":"        "},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"    def _get_existing_ndp_proxies_dvr(self, rtr_2_fip_dev, fip_2_rtr_dev):"},{"line_number":235,"context_line":"        existing_ndp_proxies \u003d []"}],"source_content_type":"text/x-python","patch_set":7,"id":"9f560f44_c864974c","line":232,"updated":"2020-08-31 13:29:13.000000000","message":"pep8: W293 blank line contains whitespace","commit_id":"487af72d84de6987486c8a824bfa6012bc67f187"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"895ea119eb7e74b0370fdd09121a416219f58a3b","unresolved":false,"context_lines":[{"line_number":231,"context_line":"            ip_wrapper.netns.execute(cmd, check_exit_code\u003dFalse)"},{"line_number":232,"context_line":"        "},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"    def _get_existing_ndp_proxies_dvr(self, rtr_2_fip_dev, fip_2_rtr_dev):"},{"line_number":235,"context_line":"        existing_ndp_proxies \u003d []"},{"line_number":236,"context_line":"        rtr_2_fip_v6_address \u003d self._get_device_ipv6_lladdr(rtr_2_fip_dev)"},{"line_number":237,"context_line":"        ndp_routers \u003d fip_2_rtr_dev.route.list_routes("}],"source_content_type":"text/x-python","patch_set":7,"id":"9f560f44_285a7382","line":234,"updated":"2020-08-31 13:29:13.000000000","message":"pep8: E303 too many blank lines (2)","commit_id":"487af72d84de6987486c8a824bfa6012bc67f187"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"895ea119eb7e74b0370fdd09121a416219f58a3b","unresolved":false,"context_lines":[{"line_number":260,"context_line":"        new_proxies \u003d []"},{"line_number":261,"context_line":"        for proxy in ndp_proxies:"},{"line_number":262,"context_line":"            if is_distributed:"},{"line_number":263,"context_line":"                port_obj  \u003d self.resource_rpc.pull("},{"line_number":264,"context_line":"                    context, resources.PORT, proxy.port_id)"},{"line_number":265,"context_line":"                for binding in port_obj.bindings:"},{"line_number":266,"context_line":"                    if binding.host \u003d\u003d ri.agent_conf.host:"}],"source_content_type":"text/x-python","patch_set":7,"id":"9f560f44_085faf72","line":263,"updated":"2020-08-31 13:29:13.000000000","message":"pep8: E221 multiple spaces before operator","commit_id":"487af72d84de6987486c8a824bfa6012bc67f187"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"3f387ef806ff6f59447ff65dafb1825401b8132d","unresolved":true,"context_lines":[{"line_number":232,"context_line":"        agent_mode \u003d ri.agent_conf.agent_mode"},{"line_number":233,"context_line":"        if (is_distributed and"},{"line_number":234,"context_line":"                agent_mode in [constants.L3_AGENT_MODE_DVR_NO_EXTERNAL,"},{"line_number":235,"context_line":"                               constants.L3_AGENT_MODE_DVR_SNAT]):"},{"line_number":236,"context_line":"            return False"},{"line_number":237,"context_line":"        return True"},{"line_number":238,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"ed27e770_fe46fcaa","line":235,"range":{"start_line":235,"start_character":31,"end_line":235,"end_character":63},"updated":"2022-02-08 08:57:42.000000000","message":"\u0027dvr_snat\u0027 node should process the IPv6\u0027s ndp_proxy which blongs to the VM in the dvr_no_external node, while the router is distributed.","commit_id":"3f9312bbb85164b3c9a87f55e4bd2c7fb7a405c8"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"f72958d766d93d1a8d3b8df3364edd7003ac3d10","unresolved":true,"context_lines":[{"line_number":232,"context_line":"        agent_mode \u003d ri.agent_conf.agent_mode"},{"line_number":233,"context_line":"        if (is_distributed and"},{"line_number":234,"context_line":"                agent_mode in [constants.L3_AGENT_MODE_DVR_NO_EXTERNAL,"},{"line_number":235,"context_line":"                               constants.L3_AGENT_MODE_DVR_SNAT]):"},{"line_number":236,"context_line":"            return False"},{"line_number":237,"context_line":"        return True"},{"line_number":238,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"d5d89302_dc49ed01","line":235,"range":{"start_line":235,"start_character":31,"end_line":235,"end_character":63},"in_reply_to":"ed27e770_fe46fcaa","updated":"2022-02-11 13:13:04.000000000","message":"I notice that the comment which from ps14. So, I think it is outdated. Right?","commit_id":"3f9312bbb85164b3c9a87f55e4bd2c7fb7a405c8"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"ebf08f5a232fdc91a20eef680a62be6c9f9f1169","unresolved":true,"context_lines":[{"line_number":1,"context_line":"# Copyright 2020 Troila"},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":19,"id":"d4a44de4_0b2ae9d3","line":1,"range":{"start_line":1,"start_character":12,"end_line":1,"end_character":16},"updated":"2021-12-06 07:26:17.000000000","message":"nit: 2021","commit_id":"e2da8ebd81c16f8d4efdfe6ac4869e75ecb7bcde"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"96c1676b1b659cfa6b15d050717a3ab393774369","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2020 Troila"},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":19,"id":"5b2dd723_3dcc1fdc","line":1,"range":{"start_line":1,"start_character":12,"end_line":1,"end_character":16},"in_reply_to":"d4a44de4_0b2ae9d3","updated":"2021-12-19 05:18:05.000000000","message":"Done","commit_id":"e2da8ebd81c16f8d4efdfe6ac4869e75ecb7bcde"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"ebf08f5a232fdc91a20eef680a62be6c9f9f1169","unresolved":true,"context_lines":[{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    def __init__(self):"},{"line_number":39,"context_line":"        self.managed_ndp_proxies \u003d {}"},{"line_number":40,"context_line":"        \"\"\""},{"line_number":41,"context_line":"        router_ndp_proxy_mapping \u003d {"},{"line_number":42,"context_line":"            router_id_1: set(ndp_proxy_id_1, ndp_proxy_id_2),"},{"line_number":43,"context_line":"            router_id_2: set(ndp_proxy_id_3, ndp_proxy_id_4)"},{"line_number":44,"context_line":"        }"},{"line_number":45,"context_line":"        \"\"\""},{"line_number":46,"context_line":"        self.router_ndp_proxy_mapping \u003d collections.defaultdict(set)"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def set_ndp_proxies(self, ndp_proxies):"}],"source_content_type":"text/x-python","patch_set":19,"id":"a2303f79_426cbb37","line":45,"range":{"start_line":40,"start_character":8,"end_line":45,"end_character":11},"updated":"2021-12-06 07:26:17.000000000","message":"to be removed or uncommented","commit_id":"e2da8ebd81c16f8d4efdfe6ac4869e75ecb7bcde"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"96c1676b1b659cfa6b15d050717a3ab393774369","unresolved":false,"context_lines":[{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    def __init__(self):"},{"line_number":39,"context_line":"        self.managed_ndp_proxies \u003d {}"},{"line_number":40,"context_line":"        \"\"\""},{"line_number":41,"context_line":"        router_ndp_proxy_mapping \u003d {"},{"line_number":42,"context_line":"            router_id_1: set(ndp_proxy_id_1, ndp_proxy_id_2),"},{"line_number":43,"context_line":"            router_id_2: set(ndp_proxy_id_3, ndp_proxy_id_4)"},{"line_number":44,"context_line":"        }"},{"line_number":45,"context_line":"        \"\"\""},{"line_number":46,"context_line":"        self.router_ndp_proxy_mapping \u003d collections.defaultdict(set)"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def set_ndp_proxies(self, ndp_proxies):"}],"source_content_type":"text/x-python","patch_set":19,"id":"5ce2ffbf_fb4b4d00","line":45,"range":{"start_line":40,"start_character":8,"end_line":45,"end_character":11},"in_reply_to":"a2303f79_426cbb37","updated":"2021-12-19 05:18:05.000000000","message":"Done","commit_id":"e2da8ebd81c16f8d4efdfe6ac4869e75ecb7bcde"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"cf289e4feb9153e3350e818e46c93301e945c4f2","unresolved":true,"context_lines":[{"line_number":93,"context_line":"        self._connection.create_consumer(topic, endpoints, fanout\u003dTrue)"},{"line_number":94,"context_line":"        self._connection.consume_in_threads()"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    @lockutils.synchronized(\u0027ndp-proxy\u0027)"},{"line_number":97,"context_line":"    def _handle_notification(self, context, resource_type,"},{"line_number":98,"context_line":"                             ndp_proxies, event_type):"},{"line_number":99,"context_line":"        for ndp_proxy in ndp_proxies:"}],"source_content_type":"text/x-python","patch_set":33,"id":"226be85c_ba35af4a","line":96,"updated":"2022-02-22 13:54:51.000000000","message":"I\u0027m not sure if that will be ok. If You will share iptables_manager object with l3_agent, You may hit similar issue like was with metadata agent, see https://bugs.launchpad.net/neutron/+bug/1920778 for details.\nMaybe it would be better to use:\n\n    @coordination.synchronized(\u0027router-lock-ns-{router.ns_name}\u0027)\n\nas lock here too?","commit_id":"7630e0978e5ff8c53d0d7e821e01944ccc166ad3"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"f24c301deeb405836d4ea6f5e7ad43cd8fb48aba","unresolved":true,"context_lines":[{"line_number":93,"context_line":"        self._connection.create_consumer(topic, endpoints, fanout\u003dTrue)"},{"line_number":94,"context_line":"        self._connection.consume_in_threads()"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    @lockutils.synchronized(\u0027ndp-proxy\u0027)"},{"line_number":97,"context_line":"    def _handle_notification(self, context, resource_type,"},{"line_number":98,"context_line":"                             ndp_proxies, event_type):"},{"line_number":99,"context_line":"        for ndp_proxy in ndp_proxies:"}],"source_content_type":"text/x-python","patch_set":33,"id":"770b38bb_c624e949","line":96,"in_reply_to":"226be85c_ba35af4a","updated":"2022-02-23 00:29:01.000000000","message":"Yep, great suggestion.","commit_id":"7630e0978e5ff8c53d0d7e821e01944ccc166ad3"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"15d6681848972661baa6f956f5e116759bce31e3","unresolved":false,"context_lines":[{"line_number":93,"context_line":"        self._connection.create_consumer(topic, endpoints, fanout\u003dTrue)"},{"line_number":94,"context_line":"        self._connection.consume_in_threads()"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    @lockutils.synchronized(\u0027ndp-proxy\u0027)"},{"line_number":97,"context_line":"    def _handle_notification(self, context, resource_type,"},{"line_number":98,"context_line":"                             ndp_proxies, event_type):"},{"line_number":99,"context_line":"        for ndp_proxy in ndp_proxies:"}],"source_content_type":"text/x-python","patch_set":33,"id":"4fcd5316_dd368147","line":96,"in_reply_to":"770b38bb_c624e949","updated":"2022-02-25 03:49:56.000000000","message":"Done","commit_id":"7630e0978e5ff8c53d0d7e821e01944ccc166ad3"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"cf289e4feb9153e3350e818e46c93301e945c4f2","unresolved":true,"context_lines":[{"line_number":210,"context_line":"            v6_address \u003d str(proxy.ip_address)"},{"line_number":211,"context_line":"            cmd \u003d [\u0027ip\u0027, \u0027-6\u0027, \u0027neigh\u0027, \u0027add\u0027,"},{"line_number":212,"context_line":"                   \u0027proxy\u0027, v6_address, \u0027dev\u0027, interface_name]"},{"line_number":213,"context_line":"            ip_wrapper.netns.execute(cmd, privsep_exec\u003dTrue)"},{"line_number":214,"context_line":"            accept_rule \u003d \u0027-i %s --destination %s -j ACCEPT\u0027 % ("},{"line_number":215,"context_line":"                        interface_name, v6_address)"},{"line_number":216,"context_line":"            iptables_manager.ipv6[\u0027filter\u0027].add_rule("}],"source_content_type":"text/x-python","patch_set":33,"id":"54929419_4d9e0982","line":213,"updated":"2022-02-22 13:54:51.000000000","message":"we already have \"add_neigh_entry\" in https://github.com/openstack/neutron/blob/master/neutron/agent/linux/ip_lib.py#L850, can\u0027t You use it here?","commit_id":"7630e0978e5ff8c53d0d7e821e01944ccc166ad3"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"f24c301deeb405836d4ea6f5e7ad43cd8fb48aba","unresolved":true,"context_lines":[{"line_number":210,"context_line":"            v6_address \u003d str(proxy.ip_address)"},{"line_number":211,"context_line":"            cmd \u003d [\u0027ip\u0027, \u0027-6\u0027, \u0027neigh\u0027, \u0027add\u0027,"},{"line_number":212,"context_line":"                   \u0027proxy\u0027, v6_address, \u0027dev\u0027, interface_name]"},{"line_number":213,"context_line":"            ip_wrapper.netns.execute(cmd, privsep_exec\u003dTrue)"},{"line_number":214,"context_line":"            accept_rule \u003d \u0027-i %s --destination %s -j ACCEPT\u0027 % ("},{"line_number":215,"context_line":"                        interface_name, v6_address)"},{"line_number":216,"context_line":"            iptables_manager.ipv6[\u0027filter\u0027].add_rule("}],"source_content_type":"text/x-python","patch_set":33,"id":"6b5c6713_e7e5b790","line":213,"in_reply_to":"54929419_4d9e0982","updated":"2022-02-23 00:29:01.000000000","message":"Thx, I will try to replace this with ip_lib\u0027s method","commit_id":"7630e0978e5ff8c53d0d7e821e01944ccc166ad3"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"15d6681848972661baa6f956f5e116759bce31e3","unresolved":true,"context_lines":[{"line_number":210,"context_line":"            v6_address \u003d str(proxy.ip_address)"},{"line_number":211,"context_line":"            cmd \u003d [\u0027ip\u0027, \u0027-6\u0027, \u0027neigh\u0027, \u0027add\u0027,"},{"line_number":212,"context_line":"                   \u0027proxy\u0027, v6_address, \u0027dev\u0027, interface_name]"},{"line_number":213,"context_line":"            ip_wrapper.netns.execute(cmd, privsep_exec\u003dTrue)"},{"line_number":214,"context_line":"            accept_rule \u003d \u0027-i %s --destination %s -j ACCEPT\u0027 % ("},{"line_number":215,"context_line":"                        interface_name, v6_address)"},{"line_number":216,"context_line":"            iptables_manager.ipv6[\u0027filter\u0027].add_rule("}],"source_content_type":"text/x-python","patch_set":33,"id":"a8ca9908_aa3e5fcc","line":213,"in_reply_to":"6b5c6713_e7e5b790","updated":"2022-02-25 03:49:56.000000000","message":"The new method \"add_neigh_entry\" don\u0027t apply here. Maybe we need a extra method like  \"add_neigh_proxy_entry\".","commit_id":"7630e0978e5ff8c53d0d7e821e01944ccc166ad3"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"1792f414bcb063de7e2eace28e6cb2d9f4671230","unresolved":true,"context_lines":[{"line_number":210,"context_line":"            v6_address \u003d str(proxy.ip_address)"},{"line_number":211,"context_line":"            cmd \u003d [\u0027ip\u0027, \u0027-6\u0027, \u0027neigh\u0027, \u0027add\u0027,"},{"line_number":212,"context_line":"                   \u0027proxy\u0027, v6_address, \u0027dev\u0027, interface_name]"},{"line_number":213,"context_line":"            ip_wrapper.netns.execute(cmd, privsep_exec\u003dTrue)"},{"line_number":214,"context_line":"            accept_rule \u003d \u0027-i %s --destination %s -j ACCEPT\u0027 % ("},{"line_number":215,"context_line":"                        interface_name, v6_address)"},{"line_number":216,"context_line":"            iptables_manager.ipv6[\u0027filter\u0027].add_rule("}],"source_content_type":"text/x-python","patch_set":33,"id":"c592c7af_8c8fb9d7","line":213,"in_reply_to":"a8ca9908_aa3e5fcc","updated":"2022-02-27 03:08:18.000000000","message":"I read the pyroute2 docs [1] and related codes [2] carefully. I am sorry to say maybe the pyroute2 has no method to process IPv6 ndp proxy.\n\n[1] https://docs.pyroute2.org/\n[2] https://github.com/svinota/pyroute2/blob/master/pyroute2.core/pr2modules/iproute/linux.py#L950","commit_id":"7630e0978e5ff8c53d0d7e821e01944ccc166ad3"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"cf289e4feb9153e3350e818e46c93301e945c4f2","unresolved":true,"context_lines":[{"line_number":228,"context_line":"            v6_address \u003d str(proxy.ip_address)"},{"line_number":229,"context_line":"            fip_2_rtr_dev.route.add_route(v6_address, via\u003drtr_2_fip_v6_address)"},{"line_number":230,"context_line":"            cmd \u003d [\u0027ip\u0027, \u0027-6\u0027, \u0027neigh\u0027, \u0027add\u0027,"},{"line_number":231,"context_line":"                   \u0027proxy\u0027, v6_address, \u0027dev\u0027, interface_name]"},{"line_number":232,"context_line":"            ip_wrapper.netns.execute(cmd, privsep_exec\u003dTrue)"},{"line_number":233,"context_line":"            cmd \u003d [\u0027ndsend\u0027, v6_address, interface_name]"},{"line_number":234,"context_line":"            ip_wrapper.netns.execute(cmd, check_exit_code\u003dFalse,"}],"source_content_type":"text/x-python","patch_set":33,"id":"78979412_58dc52d1","line":231,"updated":"2022-02-22 13:54:51.000000000","message":"same here","commit_id":"7630e0978e5ff8c53d0d7e821e01944ccc166ad3"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"cf289e4feb9153e3350e818e46c93301e945c4f2","unresolved":true,"context_lines":[{"line_number":241,"context_line":"        for proxy in ndp_proxies:"},{"line_number":242,"context_line":"            v6_address \u003d str(proxy.ip_address)"},{"line_number":243,"context_line":"            cmd \u003d [\u0027ip\u0027, \u0027-6\u0027, \u0027neigh\u0027, \u0027del\u0027,"},{"line_number":244,"context_line":"                   \u0027proxy\u0027, v6_address, \u0027dev\u0027, interface_name]"},{"line_number":245,"context_line":"            ip_wrapper.netns.execute(cmd, privsep_exec\u003dTrue)"},{"line_number":246,"context_line":"            accept_rule \u003d \u0027-i %s --destination %s -j ACCEPT\u0027 % ("},{"line_number":247,"context_line":"                        interface_name, v6_address)"}],"source_content_type":"text/x-python","patch_set":33,"id":"6ce20062_d901ecd2","line":244,"updated":"2022-02-22 13:54:51.000000000","message":"same for delete neigh entry: https://github.com/openstack/neutron/blob/699869100e361ac23a8543b8d7e5e6581be144fb/neutron/agent/linux/ip_lib.py#L872","commit_id":"7630e0978e5ff8c53d0d7e821e01944ccc166ad3"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"f24c301deeb405836d4ea6f5e7ad43cd8fb48aba","unresolved":true,"context_lines":[{"line_number":241,"context_line":"        for proxy in ndp_proxies:"},{"line_number":242,"context_line":"            v6_address \u003d str(proxy.ip_address)"},{"line_number":243,"context_line":"            cmd \u003d [\u0027ip\u0027, \u0027-6\u0027, \u0027neigh\u0027, \u0027del\u0027,"},{"line_number":244,"context_line":"                   \u0027proxy\u0027, v6_address, \u0027dev\u0027, interface_name]"},{"line_number":245,"context_line":"            ip_wrapper.netns.execute(cmd, privsep_exec\u003dTrue)"},{"line_number":246,"context_line":"            accept_rule \u003d \u0027-i %s --destination %s -j ACCEPT\u0027 % ("},{"line_number":247,"context_line":"                        interface_name, v6_address)"}],"source_content_type":"text/x-python","patch_set":33,"id":"f752537b_58065a9b","line":244,"in_reply_to":"6ce20062_d901ecd2","updated":"2022-02-23 00:29:01.000000000","message":"thx","commit_id":"7630e0978e5ff8c53d0d7e821e01944ccc166ad3"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"cf289e4feb9153e3350e818e46c93301e945c4f2","unresolved":true,"context_lines":[{"line_number":257,"context_line":"            fip_2_rtr_dev.route.delete_route("},{"line_number":258,"context_line":"                v6_address, via\u003drtr_2_fip_v6_address)"},{"line_number":259,"context_line":"            cmd \u003d [\u0027ip\u0027, \u0027-6\u0027, \u0027neigh\u0027, \u0027del\u0027,"},{"line_number":260,"context_line":"                   \u0027proxy\u0027, v6_address, \u0027dev\u0027, interface_name]"},{"line_number":261,"context_line":"            ip_wrapper.netns.execute(cmd, privsep_exec\u003dTrue)"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"    def _get_router_info(self, router_id):"}],"source_content_type":"text/x-python","patch_set":33,"id":"c2109f66_9fc3f693","line":260,"updated":"2022-02-22 13:54:51.000000000","message":"ditto","commit_id":"7630e0978e5ff8c53d0d7e821e01944ccc166ad3"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"cf289e4feb9153e3350e818e46c93301e945c4f2","unresolved":true,"context_lines":[{"line_number":377,"context_line":"                self._process_delete(need_delete, interface_name,"},{"line_number":378,"context_line":"                                     namespace, iptables_manager)"},{"line_number":379,"context_line":"            elif agent_mode \u003d\u003d constants.L3_AGENT_MODE_DVR_SNAT:"},{"line_number":380,"context_line":"                self._process_create(need_create, interface_name,"},{"line_number":381,"context_line":"                                     namespace, iptables_manager)"},{"line_number":382,"context_line":"                self._process_delete(need_delete, interface_name,"},{"line_number":383,"context_line":"                                     namespace, iptables_manager)"},{"line_number":384,"context_line":"            elif agent_mode \u003d\u003d constants.L3_AGENT_MODE_DVR:"},{"line_number":385,"context_line":"                self._process_create_dvr(need_create, rtr_2_fip_dev,"},{"line_number":386,"context_line":"                                         fip_2_rtr_dev, interface_name,"}],"source_content_type":"text/x-python","patch_set":33,"id":"d612c47f_0a9e281c","line":383,"range":{"start_line":380,"start_character":0,"end_line":383,"end_character":65},"updated":"2022-02-22 13:54:51.000000000","message":"those lines are exactly the same as L375-378 - what\u0027s the point of repeating it twice?","commit_id":"7630e0978e5ff8c53d0d7e821e01944ccc166ad3"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"15d6681848972661baa6f956f5e116759bce31e3","unresolved":false,"context_lines":[{"line_number":377,"context_line":"                self._process_delete(need_delete, interface_name,"},{"line_number":378,"context_line":"                                     namespace, iptables_manager)"},{"line_number":379,"context_line":"            elif agent_mode \u003d\u003d constants.L3_AGENT_MODE_DVR_SNAT:"},{"line_number":380,"context_line":"                self._process_create(need_create, interface_name,"},{"line_number":381,"context_line":"                                     namespace, iptables_manager)"},{"line_number":382,"context_line":"                self._process_delete(need_delete, interface_name,"},{"line_number":383,"context_line":"                                     namespace, iptables_manager)"},{"line_number":384,"context_line":"            elif agent_mode \u003d\u003d constants.L3_AGENT_MODE_DVR:"},{"line_number":385,"context_line":"                self._process_create_dvr(need_create, rtr_2_fip_dev,"},{"line_number":386,"context_line":"                                         fip_2_rtr_dev, interface_name,"}],"source_content_type":"text/x-python","patch_set":33,"id":"88e5c0bc_aeba92f5","line":383,"range":{"start_line":380,"start_character":0,"end_line":383,"end_character":65},"in_reply_to":"9606b3d3_2c0045c5","updated":"2022-02-25 03:49:56.000000000","message":"Done","commit_id":"7630e0978e5ff8c53d0d7e821e01944ccc166ad3"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"f24c301deeb405836d4ea6f5e7ad43cd8fb48aba","unresolved":true,"context_lines":[{"line_number":377,"context_line":"                self._process_delete(need_delete, interface_name,"},{"line_number":378,"context_line":"                                     namespace, iptables_manager)"},{"line_number":379,"context_line":"            elif agent_mode \u003d\u003d constants.L3_AGENT_MODE_DVR_SNAT:"},{"line_number":380,"context_line":"                self._process_create(need_create, interface_name,"},{"line_number":381,"context_line":"                                     namespace, iptables_manager)"},{"line_number":382,"context_line":"                self._process_delete(need_delete, interface_name,"},{"line_number":383,"context_line":"                                     namespace, iptables_manager)"},{"line_number":384,"context_line":"            elif agent_mode \u003d\u003d constants.L3_AGENT_MODE_DVR:"},{"line_number":385,"context_line":"                self._process_create_dvr(need_create, rtr_2_fip_dev,"},{"line_number":386,"context_line":"                                         fip_2_rtr_dev, interface_name,"}],"source_content_type":"text/x-python","patch_set":33,"id":"9606b3d3_2c0045c5","line":383,"range":{"start_line":380,"start_character":0,"end_line":383,"end_character":65},"in_reply_to":"d612c47f_0a9e281c","updated":"2022-02-23 00:29:01.000000000","message":"Yep, this is repeated codes, I will try to simplify them.","commit_id":"7630e0978e5ff8c53d0d7e821e01944ccc166ad3"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"cf289e4feb9153e3350e818e46c93301e945c4f2","unresolved":true,"context_lines":[{"line_number":395,"context_line":"                    existing_ndp_proxies, rtr_2_fip_dev,"},{"line_number":396,"context_line":"                    fip_2_rtr_dev, interface_name, namespace)"},{"line_number":397,"context_line":"            else:"},{"line_number":398,"context_line":"                cmd \u003d [\u0027ip\u0027, \u0027-6\u0027, \u0027neigh\u0027, \u0027flush\u0027, \u0027proxy\u0027]"},{"line_number":399,"context_line":"                ip_wrapper.netns.execute(cmd, check_exit_code\u003dFalse,"},{"line_number":400,"context_line":"                                         privsep_exec\u003dTrue)"},{"line_number":401,"context_line":"                iptables_manager.ipv6[\u0027filter\u0027].remove_chain("}],"source_content_type":"text/x-python","patch_set":33,"id":"43882758_0a41ca00","line":398,"updated":"2022-02-22 13:54:51.000000000","message":"maybe You can implement flush using pyroute2, as we have for other neigh operations already?","commit_id":"7630e0978e5ff8c53d0d7e821e01944ccc166ad3"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"f24c301deeb405836d4ea6f5e7ad43cd8fb48aba","unresolved":true,"context_lines":[{"line_number":395,"context_line":"                    existing_ndp_proxies, rtr_2_fip_dev,"},{"line_number":396,"context_line":"                    fip_2_rtr_dev, interface_name, namespace)"},{"line_number":397,"context_line":"            else:"},{"line_number":398,"context_line":"                cmd \u003d [\u0027ip\u0027, \u0027-6\u0027, \u0027neigh\u0027, \u0027flush\u0027, \u0027proxy\u0027]"},{"line_number":399,"context_line":"                ip_wrapper.netns.execute(cmd, check_exit_code\u003dFalse,"},{"line_number":400,"context_line":"                                         privsep_exec\u003dTrue)"},{"line_number":401,"context_line":"                iptables_manager.ipv6[\u0027filter\u0027].remove_chain("}],"source_content_type":"text/x-python","patch_set":33,"id":"d60b6b7a_27b7484f","line":398,"in_reply_to":"43882758_0a41ca00","updated":"2022-02-23 00:29:01.000000000","message":"thx","commit_id":"7630e0978e5ff8c53d0d7e821e01944ccc166ad3"}]}
