)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"a57ca5735af8c7684ade4f5dd4fd780cb8313013","unresolved":true,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Improve Router callback system\u0027s publish events"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When I writing \u0027ndp_proxy\u0027 service plugin, I found I couldn\u0027t get enough"},{"line_number":10,"context_line":"informations about router from the callback system (Such as: the origin"},{"line_number":11,"context_line":"request body of user send). So, for write service plugin that related"},{"line_number":12,"context_line":"router plugin more concisely I commit this patch."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"This patch proposal two changes about router callback publish events:"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"eba83671_f12dca31","line":11,"range":{"start_line":9,"start_character":0,"end_line":11,"end_character":27},"updated":"2021-08-18 10:59:01.000000000","message":"https://review.opendev.org/c/openstack/neutron/+/743142\nIs this patch? Could you point out which function need the information of what? And what will new service plugin do with this information?\n\nIs this line?\nhttps://review.opendev.org/c/openstack/neutron/+/743142/15/neutron/services/ndp_proxy/plugin.py@90\n\nThe funtion _check_router_update needs to check if the router gateway updated? If yes, then the resource type is ROUTER_GATEWAY now. And it includes the request external_gateway_info in the request_body.\n\nhttps://github.com/openstack/neutron/commit/6d570dfd7dc4814b3cdb2c1b3cadaf34fb7927af#diff-fd128e4178b24eff549251e292a53c15a98403ced377f60679f1e9243499351a","commit_id":"52026aece31df6a48a565efbf5dfa906139f9541"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"dc194306061e2bd8342ae2940b4727aad8c15340","unresolved":true,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Improve Router callback system\u0027s publish events"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When I writing \u0027ndp_proxy\u0027 service plugin, I found I couldn\u0027t get enough"},{"line_number":10,"context_line":"informations about router from the callback system (Such as: the origin"},{"line_number":11,"context_line":"request body of user send). So, for write service plugin that related"},{"line_number":12,"context_line":"router plugin more concisely I commit this patch."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"This patch proposal two changes about router callback publish events:"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"a9dd6c4a_75e8217a","line":11,"range":{"start_line":9,"start_character":0,"end_line":11,"end_character":27},"in_reply_to":"533dac7c_3d54a617","updated":"2021-09-06 01:24:36.000000000","message":"Hi, Yulong.\nThe enable_ndp_proxy\u0027s purpose is that for support multiple method to publish IPv6 address to external. Reference [1].I agree with 1.1 and 1.2 in your opinions above. But, the 1.3 and 2 I don\u0027t agree, they do not obey the spec [1].\n\n[1] https://review.opendev.org/c/openstack/neutron-specs/+/728628/41/specs/xena/l3-router-support-ndp-proxy.rst#70","commit_id":"52026aece31df6a48a565efbf5dfa906139f9541"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"ba0080dc15e897162e4eea3c00f7e2805b6d7e05","unresolved":true,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Improve Router callback system\u0027s publish events"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When I writing \u0027ndp_proxy\u0027 service plugin, I found I couldn\u0027t get enough"},{"line_number":10,"context_line":"informations about router from the callback system (Such as: the origin"},{"line_number":11,"context_line":"request body of user send). So, for write service plugin that related"},{"line_number":12,"context_line":"router plugin more concisely I commit this patch."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"This patch proposal two changes about router callback publish events:"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"fd5ec50d_bddbe612","line":11,"range":{"start_line":9,"start_character":0,"end_line":11,"end_character":27},"in_reply_to":"eba83671_f12dca31","updated":"2021-08-18 11:57:37.000000000","message":"Yep, That\u0027s the patch. But just the external_gateway_info isn\u0027t enough. Consider a case: The user update external_gateway and enable_ndp_proxy at the same time in one request, process this case is difficult in current neutron. And current neutron the router\u0027s BEFORE_UPDATE event at the back of PRECOMMIT_UPDATE event this is unreasonable in my option. Moreover, I think the improved event payload will make other service plugin\u0027s development more convenient in the future.","commit_id":"52026aece31df6a48a565efbf5dfa906139f9541"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"809dbb9e9b48dd0ed5bbf6edc3b4ffeb4c9a00e3","unresolved":true,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Improve Router callback system\u0027s publish events"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When I writing \u0027ndp_proxy\u0027 service plugin, I found I couldn\u0027t get enough"},{"line_number":10,"context_line":"informations about router from the callback system (Such as: the origin"},{"line_number":11,"context_line":"request body of user send). So, for write service plugin that related"},{"line_number":12,"context_line":"router plugin more concisely I commit this patch."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"This patch proposal two changes about router callback publish events:"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"533dac7c_3d54a617","line":11,"range":{"start_line":9,"start_character":0,"end_line":11,"end_character":27},"in_reply_to":"fd5ec50d_bddbe612","updated":"2021-09-02 03:46:13.000000000","message":"This \"enable_ndp_proxy\" is the burden you insist to add, since I noticed this option in the spec [1]. So cloud we add some limitation here:\n1. if there are ndp_proxies, 1)do not allow to unset external gateway; 2) do not allow to set external gateway to another external network; 3) do not allow to set enable_ndp_proxy \u003d False.\n\n2. only when there is no ndp_proxies, then we can set enable_ndp_proxy to False.\n\nThen this cloud be simple here, receive the ROUTER_GATEWAY PRECOMMIT_UPDATE event [2]. And check the request, if it breaks the rule 1 and 2, return not allowed to user.\n\n[1] https://review.opendev.org/c/openstack/neutron-specs/+/728628/13/specs/victoria/l3-router-support-ndp-proxy.rst#64\n[2] https://github.com/openstack/neutron/commit/6d570dfd7dc4814b3cdb2c1b3cadaf34fb7927af#diff-fd128e4178b24eff549251e292a53c15a98403ced377f60679f1e9243499351a","commit_id":"52026aece31df6a48a565efbf5dfa906139f9541"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"e92c4e1ecf22081cd030541362b7c6f15914ca64","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"829fc972_eb8ba133","updated":"2021-10-16 10:57:30.000000000","message":"Thx, I will add release note at next patch set.","commit_id":"2482b6a667a960dd1f763cf052c46224a553a2b1"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"c87b6339200463bd3591d3075403a98a8b2e60a2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"fc5c47f5_f584d35f","updated":"2021-10-26 07:50:39.000000000","message":"recheck","commit_id":"1a960782c7b87d1af3154dfad02fd75d167fe144"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"18abb099d07b53891a04556f64dfe93ff4e9b671","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"12bf5e76_116d15f3","updated":"2021-11-21 05:11:34.000000000","message":"recheck","commit_id":"ff043383aae216738397530e5cc80f3710005912"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"cad91362c216eb606fbfcd7cf9f336992260341a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":18,"id":"252ec898_f027d5b3","updated":"2021-12-08 07:28:03.000000000","message":"recheck","commit_id":"e4c168b1fcc3bd79e7708c63533e3caf83ba7f1b"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"e6bf4091876846c5df77ec28aea164a3ad29948c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":18,"id":"3bf1f2f4_daf1e309","updated":"2021-12-09 01:33:42.000000000","message":"recheck","commit_id":"e4c168b1fcc3bd79e7708c63533e3caf83ba7f1b"},{"author":{"_account_id":32667,"name":"Mamatisa Nurmatov","email":"nurmatov.mamatisa@huawei.com","username":"isabek"},"change_message_id":"2145dafd96e0e725d568b3d84492506a46441e65","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":18,"id":"cb21921f_5152c573","updated":"2021-12-07 06:15:49.000000000","message":"recheck","commit_id":"e4c168b1fcc3bd79e7708c63533e3caf83ba7f1b"}],"neutron/db/l3_db.py":[{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"cde398e8c1e4dc53509db9e906923224c0791aa7","unresolved":true,"context_lines":[{"line_number":283,"context_line":""},{"line_number":284,"context_line":"    @db_api.retry_if_session_inactive()"},{"line_number":285,"context_line":"    def create_router(self, context, router):"},{"line_number":286,"context_line":"        request_body \u003d router[\u0027router\u0027]"},{"line_number":287,"context_line":"        r \u003d self._get_striped_router_body(request_body)"},{"line_number":288,"context_line":"        gw_info \u003d request_body.get(EXTERNAL_GW_INFO, None)"},{"line_number":289,"context_line":"        create \u003d functools.partial(self._create_router_db, context, r,"},{"line_number":290,"context_line":"                                   request_body, r[\u0027tenant_id\u0027])"}],"source_content_type":"text/x-python","patch_set":2,"id":"44bc0473_4125b100","line":287,"range":{"start_line":286,"start_character":8,"end_line":287,"end_character":55},"updated":"2021-08-18 07:17:16.000000000","message":"request_body and r will contain much duplicated data. Isn\u0027t it possible to just not \u0027pop\u0027 EXTERNAL_GW_INFO from r (use \u0027get\u0027)? As far I can see this is the only data missed in payloads.","commit_id":"d159cf10737fd3bb87cd8a5d21f5b214f09c2db6"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"35a11f85f367d1a5efaa3d134c6af92af4493fd0","unresolved":true,"context_lines":[{"line_number":283,"context_line":""},{"line_number":284,"context_line":"    @db_api.retry_if_session_inactive()"},{"line_number":285,"context_line":"    def create_router(self, context, router):"},{"line_number":286,"context_line":"        request_body \u003d router[\u0027router\u0027]"},{"line_number":287,"context_line":"        r \u003d self._get_striped_router_body(request_body)"},{"line_number":288,"context_line":"        gw_info \u003d request_body.get(EXTERNAL_GW_INFO, None)"},{"line_number":289,"context_line":"        create \u003d functools.partial(self._create_router_db, context, r,"},{"line_number":290,"context_line":"                                   request_body, r[\u0027tenant_id\u0027])"}],"source_content_type":"text/x-python","patch_set":2,"id":"8c4acf44_d5b09e2a","line":287,"range":{"start_line":286,"start_character":8,"end_line":287,"end_character":55},"in_reply_to":"44bc0473_4125b100","updated":"2021-08-18 10:52:03.000000000","message":"Thanks for you suggestion. I already simplify these codes in latest patch","commit_id":"d159cf10737fd3bb87cd8a5d21f5b214f09c2db6"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"cde398e8c1e4dc53509db9e906923224c0791aa7","unresolved":true,"context_lines":[{"line_number":323,"context_line":"    @db_api.retry_if_session_inactive()"},{"line_number":324,"context_line":"    def update_router(self, context, id, router):"},{"line_number":325,"context_line":"        request_body \u003d router[\u0027router\u0027]"},{"line_number":326,"context_line":"        r \u003d self._get_striped_router_body(request_body)"},{"line_number":327,"context_line":"        gw_info \u003d request_body.get(EXTERNAL_GW_INFO,"},{"line_number":328,"context_line":"                                   constants.ATTR_NOT_SPECIFIED)"},{"line_number":329,"context_line":"        original \u003d self.get_router(context, id)"}],"source_content_type":"text/x-python","patch_set":2,"id":"37e0e8b0_215b2b16","line":326,"range":{"start_line":326,"start_character":8,"end_line":326,"end_character":55},"updated":"2021-08-18 07:17:16.000000000","message":"Who needs exactly \u0027stripped\u0027 data? Will it fail if there will be more data?","commit_id":"d159cf10737fd3bb87cd8a5d21f5b214f09c2db6"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"35a11f85f367d1a5efaa3d134c6af92af4493fd0","unresolved":true,"context_lines":[{"line_number":323,"context_line":"    @db_api.retry_if_session_inactive()"},{"line_number":324,"context_line":"    def update_router(self, context, id, router):"},{"line_number":325,"context_line":"        request_body \u003d router[\u0027router\u0027]"},{"line_number":326,"context_line":"        r \u003d self._get_striped_router_body(request_body)"},{"line_number":327,"context_line":"        gw_info \u003d request_body.get(EXTERNAL_GW_INFO,"},{"line_number":328,"context_line":"                                   constants.ATTR_NOT_SPECIFIED)"},{"line_number":329,"context_line":"        original \u003d self.get_router(context, id)"}],"source_content_type":"text/x-python","patch_set":2,"id":"d7ffb650_e8e4308f","line":326,"range":{"start_line":326,"start_character":8,"end_line":326,"end_character":55},"in_reply_to":"37e0e8b0_215b2b16","updated":"2021-08-18 10:52:03.000000000","message":"In _update_router_db function, we need to strip additional parameters before update router DB use the user\u0027s request data. The latest patch is more readable.","commit_id":"d159cf10737fd3bb87cd8a5d21f5b214f09c2db6"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"a57ca5735af8c7684ade4f5dd4fd780cb8313013","unresolved":true,"context_lines":[{"line_number":527,"context_line":""},{"line_number":528,"context_line":"    def _update_current_gw_port(self, context, router_id, router,"},{"line_number":529,"context_line":"                                ext_ips, request_body):"},{"line_number":530,"context_line":"        registry.publish(resources.ROUTER_GATEWAY, events.BEFORE_UPDATE, self,"},{"line_number":531,"context_line":"                         payload\u003devents.DBEventPayload("},{"line_number":532,"context_line":"                             context, request_body\u003drequest_body,"},{"line_number":533,"context_line":"                             states\u003d(router,)))"},{"line_number":534,"context_line":"        self._core_plugin.update_port(context.elevated(), router.gw_port[\u0027id\u0027],"},{"line_number":535,"context_line":"                                      {\u0027port\u0027: {\u0027fixed_ips\u0027: ext_ips}})"},{"line_number":536,"context_line":"        registry.publish(resources.ROUTER_GATEWAY, events.AFTER_UPDATE, self,"},{"line_number":537,"context_line":"                         payload\u003devents.DBEventPayload("},{"line_number":538,"context_line":"                             context, request_body\u003drequest_body,"},{"line_number":539,"context_line":"                             states\u003d(router,)))"},{"line_number":540,"context_line":""},{"line_number":541,"context_line":"    def _update_router_gw_info(self, context, router_id, info,"},{"line_number":542,"context_line":"                               request_body, router\u003dNone):"}],"source_content_type":"text/x-python","patch_set":3,"id":"277576d3_b32fdd10","line":539,"range":{"start_line":530,"start_character":0,"end_line":539,"end_character":47},"updated":"2021-08-18 10:59:01.000000000","message":"This should be the final use of the long march of \"request_body\" transmition. What the purpose of these notifications?","commit_id":"52026aece31df6a48a565efbf5dfa906139f9541"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"ba0080dc15e897162e4eea3c00f7e2805b6d7e05","unresolved":true,"context_lines":[{"line_number":527,"context_line":""},{"line_number":528,"context_line":"    def _update_current_gw_port(self, context, router_id, router,"},{"line_number":529,"context_line":"                                ext_ips, request_body):"},{"line_number":530,"context_line":"        registry.publish(resources.ROUTER_GATEWAY, events.BEFORE_UPDATE, self,"},{"line_number":531,"context_line":"                         payload\u003devents.DBEventPayload("},{"line_number":532,"context_line":"                             context, request_body\u003drequest_body,"},{"line_number":533,"context_line":"                             states\u003d(router,)))"},{"line_number":534,"context_line":"        self._core_plugin.update_port(context.elevated(), router.gw_port[\u0027id\u0027],"},{"line_number":535,"context_line":"                                      {\u0027port\u0027: {\u0027fixed_ips\u0027: ext_ips}})"},{"line_number":536,"context_line":"        registry.publish(resources.ROUTER_GATEWAY, events.AFTER_UPDATE, self,"},{"line_number":537,"context_line":"                         payload\u003devents.DBEventPayload("},{"line_number":538,"context_line":"                             context, request_body\u003drequest_body,"},{"line_number":539,"context_line":"                             states\u003d(router,)))"},{"line_number":540,"context_line":""},{"line_number":541,"context_line":"    def _update_router_gw_info(self, context, router_id, info,"},{"line_number":542,"context_line":"                               request_body, router\u003dNone):"}],"source_content_type":"text/x-python","patch_set":3,"id":"a5f986a5_309771bd","line":539,"range":{"start_line":530,"start_character":0,"end_line":539,"end_character":47},"in_reply_to":"277576d3_b32fdd10","updated":"2021-08-18 11:57:37.000000000","message":"Currently, this is useless, even if in my unfinished \u0027ndp_proxy\u0027 service plugin. I add this just for make the router callback events more complete. Maybe, this is useful in the future 😊.","commit_id":"52026aece31df6a48a565efbf5dfa906139f9541"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"809dbb9e9b48dd0ed5bbf6edc3b4ffeb4c9a00e3","unresolved":true,"context_lines":[{"line_number":525,"context_line":""},{"line_number":526,"context_line":"    def _update_current_gw_port(self, context, router_id, router,"},{"line_number":527,"context_line":"                                ext_ips, request_body):"},{"line_number":528,"context_line":"        registry.publish(resources.ROUTER_GATEWAY, events.BEFORE_UPDATE, self,"},{"line_number":529,"context_line":"                         payload\u003devents.DBEventPayload("},{"line_number":530,"context_line":"                             context, request_body\u003drequest_body,"},{"line_number":531,"context_line":"                             states\u003d(router,)))"},{"line_number":532,"context_line":"        self._core_plugin.update_port(context.elevated(), router.gw_port[\u0027id\u0027],"},{"line_number":533,"context_line":"                                      {\u0027port\u0027: {\u0027fixed_ips\u0027: ext_ips}})"},{"line_number":534,"context_line":"        registry.publish(resources.ROUTER_GATEWAY, events.AFTER_UPDATE, self,"},{"line_number":535,"context_line":"                         payload\u003devents.DBEventPayload("},{"line_number":536,"context_line":"                             context, request_body\u003drequest_body,"},{"line_number":537,"context_line":"                             states\u003d(router,)))"},{"line_number":538,"context_line":""},{"line_number":539,"context_line":"    def _update_router_gw_info(self, context, router_id, info,"},{"line_number":540,"context_line":"                               request_body, router\u003dNone):"}],"source_content_type":"text/x-python","patch_set":7,"id":"8804fafe_ba22be11","line":537,"range":{"start_line":528,"start_character":0,"end_line":537,"end_character":47},"updated":"2021-09-02 03:46:13.000000000","message":"Why port update related notifications can not be reused?\n\nContinue the previous discussion on patch set 3: if this is not used, it\u0027s better to commit it when we really need it. Otherwise, this is a bit waste of reviewers bandwidth.","commit_id":"e2c5e4646a5e6ac3bbeb09c9bb843fe6f7964e68"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"dc194306061e2bd8342ae2940b4727aad8c15340","unresolved":true,"context_lines":[{"line_number":525,"context_line":""},{"line_number":526,"context_line":"    def _update_current_gw_port(self, context, router_id, router,"},{"line_number":527,"context_line":"                                ext_ips, request_body):"},{"line_number":528,"context_line":"        registry.publish(resources.ROUTER_GATEWAY, events.BEFORE_UPDATE, self,"},{"line_number":529,"context_line":"                         payload\u003devents.DBEventPayload("},{"line_number":530,"context_line":"                             context, request_body\u003drequest_body,"},{"line_number":531,"context_line":"                             states\u003d(router,)))"},{"line_number":532,"context_line":"        self._core_plugin.update_port(context.elevated(), router.gw_port[\u0027id\u0027],"},{"line_number":533,"context_line":"                                      {\u0027port\u0027: {\u0027fixed_ips\u0027: ext_ips}})"},{"line_number":534,"context_line":"        registry.publish(resources.ROUTER_GATEWAY, events.AFTER_UPDATE, self,"},{"line_number":535,"context_line":"                         payload\u003devents.DBEventPayload("},{"line_number":536,"context_line":"                             context, request_body\u003drequest_body,"},{"line_number":537,"context_line":"                             states\u003d(router,)))"},{"line_number":538,"context_line":""},{"line_number":539,"context_line":"    def _update_router_gw_info(self, context, router_id, info,"},{"line_number":540,"context_line":"                               request_body, router\u003dNone):"}],"source_content_type":"text/x-python","patch_set":7,"id":"7dd1a451_09fdb2a1","line":537,"range":{"start_line":528,"start_character":0,"end_line":537,"end_character":47},"in_reply_to":"8804fafe_ba22be11","updated":"2021-09-06 01:24:36.000000000","message":"Thanks for you suggestions. But, I don\u0027t think this is a good idea. The port\u0027s nitifications is very vast, we need to wirte some complex code to decide whether or not it is related the router, moreover we can\u0027t get the original request body from port notification\u0027s payload.","commit_id":"e2c5e4646a5e6ac3bbeb09c9bb843fe6f7964e68"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"ce53869f5c9136c9e64fa17e3c29b08e2a137c7e","unresolved":true,"context_lines":[{"line_number":309,"context_line":"                             payload\u003devents.DBEventPayload("},{"line_number":310,"context_line":"                                 context, request_body\u003ddata,"},{"line_number":311,"context_line":"                                 resource_id\u003did, states\u003d(old_router,"},{"line_number":312,"context_line":"                                                         router_db,)))"},{"line_number":313,"context_line":"            if data:"},{"line_number":314,"context_line":"                router_db.update(self._get_stripped_router(data))"},{"line_number":315,"context_line":"            registry.publish(resources.ROUTER, events.PRECOMMIT_UPDATE, self,"}],"source_content_type":"text/x-python","patch_set":11,"id":"f5c83241_c1589b35","line":312,"updated":"2021-10-04 07:23:24.000000000","message":"I\u0027m not sure if I understand why this is needed? Can You explain?","commit_id":"2482b6a667a960dd1f763cf052c46224a553a2b1"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"e92c4e1ecf22081cd030541362b7c6f15914ca64","unresolved":true,"context_lines":[{"line_number":309,"context_line":"                             payload\u003devents.DBEventPayload("},{"line_number":310,"context_line":"                                 context, request_body\u003ddata,"},{"line_number":311,"context_line":"                                 resource_id\u003did, states\u003d(old_router,"},{"line_number":312,"context_line":"                                                         router_db,)))"},{"line_number":313,"context_line":"            if data:"},{"line_number":314,"context_line":"                router_db.update(self._get_stripped_router(data))"},{"line_number":315,"context_line":"            registry.publish(resources.ROUTER, events.PRECOMMIT_UPDATE, self,"}],"source_content_type":"text/x-python","patch_set":11,"id":"e9147b5b_99a28956","line":312,"in_reply_to":"f5c83241_c1589b35","updated":"2021-10-16 10:57:30.000000000","message":"This just move BEFORE_UPDATE event to the front of PRECOMMIT_UPDATE event. But I review my codes about ndp plugin noce again I found this change is not needed. So, I will revert this change in next patch set.","commit_id":"2482b6a667a960dd1f763cf052c46224a553a2b1"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"024bfae5367cc1c358d116a3d15ae2e3b185619c","unresolved":true,"context_lines":[{"line_number":271,"context_line":"    def _get_stripped_router(self, router_body):"},{"line_number":272,"context_line":"        stripped_router \u003d {}"},{"line_number":273,"context_line":"        for key in router_body:"},{"line_number":274,"context_line":"            if not getattr(l3_models.Router, key, None) and not getattr("},{"line_number":275,"context_line":"                    l3_attrs_models.RouterExtraAttributes, key, None):"},{"line_number":276,"context_line":"                continue"},{"line_number":277,"context_line":"            stripped_router[key] \u003d router_body[key]"},{"line_number":278,"context_line":"        return stripped_router"}],"source_content_type":"text/x-python","patch_set":15,"id":"a6a15a8d_af432940","line":275,"range":{"start_line":274,"start_character":12,"end_line":275,"end_character":70},"updated":"2021-11-23 13:47:35.000000000","message":"nit: a more strict and readable way seems to check \"getattr(l3_models.Router, key, None) or getattr(l3_attrs_models.RouterExtraAttributes, key, None)\" and get rid of \"continue\"","commit_id":"0865ee02fc0cc025accceb82d573eae195c62fb3"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"caf074746a52c152eb7113d9701310f0ae0c5e64","unresolved":true,"context_lines":[{"line_number":271,"context_line":"    def _get_stripped_router(self, router_body):"},{"line_number":272,"context_line":"        stripped_router \u003d {}"},{"line_number":273,"context_line":"        for key in router_body:"},{"line_number":274,"context_line":"            if not getattr(l3_models.Router, key, None) and not getattr("},{"line_number":275,"context_line":"                    l3_attrs_models.RouterExtraAttributes, key, None):"},{"line_number":276,"context_line":"                continue"},{"line_number":277,"context_line":"            stripped_router[key] \u003d router_body[key]"},{"line_number":278,"context_line":"        return stripped_router"}],"source_content_type":"text/x-python","patch_set":15,"id":"02e35213_b7590f5d","line":275,"range":{"start_line":274,"start_character":12,"end_line":275,"end_character":70},"in_reply_to":"a6a15a8d_af432940","updated":"2021-11-27 03:17:01.000000000","message":"Thanks, good suggestion.","commit_id":"0865ee02fc0cc025accceb82d573eae195c62fb3"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"024bfae5367cc1c358d116a3d15ae2e3b185619c","unresolved":true,"context_lines":[{"line_number":306,"context_line":"            router_db \u003d self._get_router(context, router_id)"},{"line_number":307,"context_line":"            old_router \u003d self._make_router_dict(router_db)"},{"line_number":308,"context_line":"            if data:"},{"line_number":309,"context_line":"                router_db.update(self._get_stripped_router(data))"},{"line_number":310,"context_line":"            registry.publish(resources.ROUTER, events.PRECOMMIT_UPDATE, self,"},{"line_number":311,"context_line":"                             payload\u003devents.DBEventPayload("},{"line_number":312,"context_line":"                                 context, request_body\u003ddata,"}],"source_content_type":"text/x-python","patch_set":15,"id":"0841dd78_e94b0cb9","line":309,"range":{"start_line":309,"start_character":33,"end_line":309,"end_character":64},"updated":"2021-11-23 13:47:35.000000000","message":"so _get_stripped_router() was added just because this change of \u0027pop\u0027 to \u0027get\u0027 at line #320? Would copy.deepcopy() be less overhead?","commit_id":"0865ee02fc0cc025accceb82d573eae195c62fb3"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"caf074746a52c152eb7113d9701310f0ae0c5e64","unresolved":true,"context_lines":[{"line_number":306,"context_line":"            router_db \u003d self._get_router(context, router_id)"},{"line_number":307,"context_line":"            old_router \u003d self._make_router_dict(router_db)"},{"line_number":308,"context_line":"            if data:"},{"line_number":309,"context_line":"                router_db.update(self._get_stripped_router(data))"},{"line_number":310,"context_line":"            registry.publish(resources.ROUTER, events.PRECOMMIT_UPDATE, self,"},{"line_number":311,"context_line":"                             payload\u003devents.DBEventPayload("},{"line_number":312,"context_line":"                                 context, request_body\u003ddata,"}],"source_content_type":"text/x-python","patch_set":15,"id":"ac7f5740_8f3c9c1d","line":309,"range":{"start_line":309,"start_character":33,"end_line":309,"end_character":64},"in_reply_to":"0841dd78_e94b0cb9","updated":"2021-11-27 03:17:01.000000000","message":"IMHO, the \u0027deepcopy\u0027 and \u0027pop\u0027 isn\u0027t a good idea. Before, we only need pop external_gw_info, Now, I extent enable_ndp_proxy to router, we also need pop enable_ndp_proxy. Maybe, In the future, more parameter will be extented to router, the coder also need modify these codes to pop the paramters.","commit_id":"0865ee02fc0cc025accceb82d573eae195c62fb3"}],"neutron/db/l3_dvr_db.py":[{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"ce53869f5c9136c9e64fa17e3c29b08e2a137c7e","unresolved":true,"context_lines":[{"line_number":160,"context_line":"            # NOTE(armax): preserve old check\u0027s behavior"},{"line_number":161,"context_line":"            if len(e.errors) \u003d\u003d 1:"},{"line_number":162,"context_line":"                raise e.errors[0].error"},{"line_number":163,"context_line":"            raise l3_exc.RouterInUse(router_id\u003drouter_db[\u0027id\u0027], reason\u003de)"},{"line_number":164,"context_line":"        return True"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"    @registry.receives(resources.ROUTER, [events.PRECOMMIT_UPDATE],"}],"source_content_type":"text/x-python","patch_set":11,"id":"6b7edc33_54fb4f18","side":"PARENT","line":163,"updated":"2021-10-04 07:23:24.000000000","message":"didn\u0027t You remove raising of that RouterInUse exception with Your patch? Where it can be raised now?","commit_id":"824af3e0523caa0b9fd2b8c2ff090fa3389bf744"}],"neutron/db/l3_hamode_db.py":[{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"a57ca5735af8c7684ade4f5dd4fd780cb8313013","unresolved":true,"context_lines":[{"line_number":414,"context_line":"                                  router_id)"},{"line_number":415,"context_line":"                router[\u0027status\u0027] \u003d self._update_router_db("},{"line_number":416,"context_line":"                    context, router_id,"},{"line_number":417,"context_line":"                    {\u0027status\u0027: constants.ERROR},)[\u0027status\u0027]"},{"line_number":418,"context_line":""},{"line_number":419,"context_line":"    @registry.receives(resources.ROUTER, [events.PRECOMMIT_UPDATE],"},{"line_number":420,"context_line":"                       priority_group.PRIORITY_ROUTER_EXTENDED_ATTRIBUTE)"}],"source_content_type":"text/x-python","patch_set":3,"id":"7563d8c2_3dd81b2d","line":417,"updated":"2021-08-18 10:59:01.000000000","message":"Unrelated change.","commit_id":"52026aece31df6a48a565efbf5dfa906139f9541"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"ba0080dc15e897162e4eea3c00f7e2805b6d7e05","unresolved":true,"context_lines":[{"line_number":414,"context_line":"                                  router_id)"},{"line_number":415,"context_line":"                router[\u0027status\u0027] \u003d self._update_router_db("},{"line_number":416,"context_line":"                    context, router_id,"},{"line_number":417,"context_line":"                    {\u0027status\u0027: constants.ERROR},)[\u0027status\u0027]"},{"line_number":418,"context_line":""},{"line_number":419,"context_line":"    @registry.receives(resources.ROUTER, [events.PRECOMMIT_UPDATE],"},{"line_number":420,"context_line":"                       priority_group.PRIORITY_ROUTER_EXTENDED_ATTRIBUTE)"}],"source_content_type":"text/x-python","patch_set":3,"id":"05248146_42a63047","line":417,"in_reply_to":"7563d8c2_3dd81b2d","updated":"2021-08-18 11:57:37.000000000","message":"This is already fixed in the latest patch.","commit_id":"52026aece31df6a48a565efbf5dfa906139f9541"}],"neutron/tests/unit/db/test_l3_dvr_db.py":[{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"a57ca5735af8c7684ade4f5dd4fd780cb8313013","unresolved":true,"context_lines":[{"line_number":1232,"context_line":"            self.ctx, filters\u003ddvr_filters)"},{"line_number":1233,"context_line":"        self.assertEqual(1, len(dvr_ports))"},{"line_number":1234,"context_line":""},{"line_number":1235,"context_line":"    def _test__validate_router_migration_notify_advanced_services(self):"},{"line_number":1236,"context_line":"        router \u003d {\u0027name\u0027: \u0027foo_router\u0027, \u0027admin_state_up\u0027: False}"},{"line_number":1237,"context_line":"        router_db \u003d self._create_router(router)"},{"line_number":1238,"context_line":"        with mock.patch.object(l3_dvr_db.registry, \u0027publish\u0027) as mock_publish:"}],"source_content_type":"text/x-python","patch_set":3,"id":"c8ef8882_14818667","side":"PARENT","line":1235,"updated":"2021-08-18 10:59:01.000000000","message":"Why test cases are removed?","commit_id":"96f1ea140edb1386159ce8b103c48b4e6a816ca1"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"ba0080dc15e897162e4eea3c00f7e2805b6d7e05","unresolved":true,"context_lines":[{"line_number":1232,"context_line":"            self.ctx, filters\u003ddvr_filters)"},{"line_number":1233,"context_line":"        self.assertEqual(1, len(dvr_ports))"},{"line_number":1234,"context_line":""},{"line_number":1235,"context_line":"    def _test__validate_router_migration_notify_advanced_services(self):"},{"line_number":1236,"context_line":"        router \u003d {\u0027name\u0027: \u0027foo_router\u0027, \u0027admin_state_up\u0027: False}"},{"line_number":1237,"context_line":"        router_db \u003d self._create_router(router)"},{"line_number":1238,"context_line":"        with mock.patch.object(l3_dvr_db.registry, \u0027publish\u0027) as mock_publish:"}],"source_content_type":"text/x-python","patch_set":3,"id":"9e14d25c_f883b4dd","side":"PARENT","line":1235,"in_reply_to":"c8ef8882_14818667","updated":"2021-08-18 11:57:37.000000000","message":"In [1], I remove BEFORE_UPDATE event and add the event to [2]. I will add unit test for this change at later on.\n\n[1] https://review.opendev.org/c/openstack/neutron/+/804846/4/neutron/db/l3_dvr_db.py#b150\n[2] https://review.opendev.org/c/openstack/neutron/+/804846/4/neutron/db/l3_db.py#324","commit_id":"96f1ea140edb1386159ce8b103c48b4e6a816ca1"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"ce53869f5c9136c9e64fa17e3c29b08e2a137c7e","unresolved":true,"context_lines":[{"line_number":1249,"context_line":"            payload \u003d mock_publish.call_args_list[0][1][\u0027payload\u0027]"},{"line_number":1250,"context_line":"            self.assertEqual(self.ctx, payload.context)"},{"line_number":1251,"context_line":"            self.assertEqual(router_db, payload.latest_state)"},{"line_number":1252,"context_line":""},{"line_number":1253,"context_line":"    def _assert_mock_called_with_router(self, mock_fn, router_id):"},{"line_number":1254,"context_line":"        router \u003d mock_fn.call_args[1].get(\u0027router_db\u0027)"},{"line_number":1255,"context_line":"        self.assertEqual(router_id, router.id)"}],"source_content_type":"text/x-python","patch_set":11,"id":"3e175f5f_eaf0716e","side":"PARENT","line":1252,"updated":"2021-10-04 07:23:24.000000000","message":"why those tests are removed completly?","commit_id":"824af3e0523caa0b9fd2b8c2ff090fa3389bf744"}]}
