)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"21a9200c849b14c14450e4f5d062d1cf2e053b81","unresolved":true,"context_lines":[{"line_number":7,"context_line":"Forbid create ndp proxy on same router with same ip address"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Create multiple ndp proxies with same ip address within one router"},{"line_number":10,"context_line":"is invalid. The related database constraint was missed in previous"},{"line_number":11,"context_line":"patchsets. The patch add some codes fixed this error."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Additionally, Fixed two typo errors."},{"line_number":14,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"6cfea75c_a61c72a6","line":11,"range":{"start_line":10,"start_character":12,"end_line":11,"end_character":10},"updated":"2022-05-16 07:24:27.000000000","message":"Cloud we run to this way? IMO, that \"np.NDPProxy.get_objects\" can have some race condition for API workers in different hosts. So, finally duplicated ndp proxy can still be stored in DB.","commit_id":"32e43d9251d6f15ac2f2d7724890f40e8e64d93b"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"e1444d2fce3e32f0e7ceeaddcef204951ce5c567","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Forbid create ndp proxy on same router with same ip address"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Create multiple ndp proxies with same ip address within one router"},{"line_number":10,"context_line":"is invalid. The related database constraint was missed in previous"},{"line_number":11,"context_line":"patchsets. The patch add some codes fixed this error."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Additionally, Fixed two typo errors."},{"line_number":14,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"3810efa7_ebc92c00","line":11,"range":{"start_line":10,"start_character":12,"end_line":11,"end_character":10},"in_reply_to":"6cfea75c_a61c72a6","updated":"2022-05-22 08:08:55.000000000","message":"Done","commit_id":"32e43d9251d6f15ac2f2d7724890f40e8e64d93b"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"77fa2887d58b021b52be49369dd2f3fe295f43a4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"3ef648df_df048f8f","updated":"2022-05-16 04:56:36.000000000","message":"recheck","commit_id":"32e43d9251d6f15ac2f2d7724890f40e8e64d93b"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"5b96b7997cb5c27c940adbca0deb921a286651fc","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"e7132c5e_5918552e","updated":"2022-05-26 12:43:49.000000000","message":"Could you please add a release-note to make it clear for the users that this is changed?","commit_id":"a055b1a059cf268df5b2296b063b348d048e0ae7"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"1aaa19a61014b06d16e486875d486b2b962c6340","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"006466d2_4b178957","updated":"2022-05-24 02:29:27.000000000","message":"recheck","commit_id":"a055b1a059cf268df5b2296b063b348d048e0ae7"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"7ae3b6da202fae3c84b03f41d4a1b174598abec4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"8e832322_81a2b94d","updated":"2022-05-23 10:29:24.000000000","message":"recheck","commit_id":"a055b1a059cf268df5b2296b063b348d048e0ae7"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"4e1dad6e9209fe2ada6c4e277815720338f3c9f8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"a6c9f3a4_20fb0715","updated":"2022-05-24 06:52:27.000000000","message":"recheck","commit_id":"a055b1a059cf268df5b2296b063b348d048e0ae7"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"b74cc0f2a64fd46304a2f128a365dfd0d52731b1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"8b74a54b_49142953","in_reply_to":"e7132c5e_5918552e","updated":"2022-05-30 07:10:50.000000000","message":"Done","commit_id":"a055b1a059cf268df5b2296b063b348d048e0ae7"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"f64ec835385ab902435dbbe60b1485ad69f9e181","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"a3676eca_e9088113","updated":"2022-06-02 23:03:33.000000000","message":"Looks like this needs a rebase.","commit_id":"e719abeb11a5a0203069ac26672f26e5b0e71768"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"fb852e3671bd2a359598655959ffdc3a04db5bec","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"f54961ca_57928426","updated":"2022-05-30 10:30:02.000000000","message":"recheck","commit_id":"e719abeb11a5a0203069ac26672f26e5b0e71768"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"208fc3f6d33352b93bc4770aa77000bab28c2713","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"72dd907c_d4028ed4","updated":"2022-06-09 21:57:11.000000000","message":"Just adding Rodolfo since he knows the DB code better than anyone...","commit_id":"9dd06e9c4424c7201cb65420f73309c545349055"}],"neutron/db/migration/alembic_migrations/versions/zed/expand/21ff98fabab1_add_ndp_proxy_constraint.py":[{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"e912851d984d0ae44246af63fe363c2c9ba4604a","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":8,"id":"41de6809_0fabdb99","line":38,"range":{"start_line":32,"start_character":0,"end_line":38,"end_character":0},"updated":"2022-05-31 12:46:26.000000000","message":"What if there are duplicated entries in DB already? The DB expand migration may get failed. This uniq constraint will not be created successfully, and neutron upgrade may get failed. So, maybe an upgrade check is necessary. Or in this script here, check if there are duplicated entries, skip for creating unique constraint when there are duplicated records.\n\nSince this feature may not be widely used for now, so I\u0027m fine with current version.","commit_id":"e719abeb11a5a0203069ac26672f26e5b0e71768"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"56628273d02dbbf58e206c3eeae465c6fcf2ea99","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"da0c11b8_1c809ee2","line":38,"range":{"start_line":32,"start_character":0,"end_line":38,"end_character":0},"in_reply_to":"41de6809_0fabdb99","updated":"2022-06-04 02:28:37.000000000","message":"Done","commit_id":"e719abeb11a5a0203069ac26672f26e5b0e71768"}],"neutron/services/ndp_proxy/exceptions.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"253bfc7e5ccb17fd0f28baed004eece4b1e8c484","unresolved":true,"context_lines":[{"line_number":67,"context_line":""},{"line_number":68,"context_line":"class NDPProxyDuplicated(n_exc.Conflict):"},{"line_number":69,"context_line":"    message \u003d _(\"Cannot create ndp proxy on router %(router_id)s with \""},{"line_number":70,"context_line":"                \"port %(port_id)s and ip address %(ip_address)s, it is \""},{"line_number":71,"context_line":"                \"duplicated with already exist ndp proxy.\")"}],"source_content_type":"text/x-python","patch_set":2,"id":"bd0e52e8_ade96cc3","line":70,"range":{"start_line":70,"start_character":38,"end_line":70,"end_character":40},"updated":"2022-05-14 20:34:08.000000000","message":"nit: IP","commit_id":"8a634938862632ae5231b24bd0b5fa7370975293"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"2aa543b6080cbb06bf95806032187395a961c302","unresolved":false,"context_lines":[{"line_number":67,"context_line":""},{"line_number":68,"context_line":"class NDPProxyDuplicated(n_exc.Conflict):"},{"line_number":69,"context_line":"    message \u003d _(\"Cannot create ndp proxy on router %(router_id)s with \""},{"line_number":70,"context_line":"                \"port %(port_id)s and ip address %(ip_address)s, it is \""},{"line_number":71,"context_line":"                \"duplicated with already exist ndp proxy.\")"}],"source_content_type":"text/x-python","patch_set":2,"id":"63f45bb6_9389f2de","line":70,"range":{"start_line":70,"start_character":38,"end_line":70,"end_character":40},"in_reply_to":"bd0e52e8_ade96cc3","updated":"2022-05-16 02:42:15.000000000","message":"Done","commit_id":"8a634938862632ae5231b24bd0b5fa7370975293"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"253bfc7e5ccb17fd0f28baed004eece4b1e8c484","unresolved":true,"context_lines":[{"line_number":68,"context_line":"class NDPProxyDuplicated(n_exc.Conflict):"},{"line_number":69,"context_line":"    message \u003d _(\"Cannot create ndp proxy on router %(router_id)s with \""},{"line_number":70,"context_line":"                \"port %(port_id)s and ip address %(ip_address)s, it is \""},{"line_number":71,"context_line":"                \"duplicated with already exist ndp proxy.\")"}],"source_content_type":"text/x-python","patch_set":2,"id":"25a834cb_f3e1f136","line":71,"range":{"start_line":71,"start_character":17,"end_line":71,"end_character":46},"updated":"2022-05-14 20:34:08.000000000","message":"s/a duplicate of an existing\n\nAnd just something I noticed that here \u0027ndp\u0027 is used, but above both NDP and ndp, don\u0027t know if it\u0027s worth making them all the same.","commit_id":"8a634938862632ae5231b24bd0b5fa7370975293"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"2aa543b6080cbb06bf95806032187395a961c302","unresolved":false,"context_lines":[{"line_number":68,"context_line":"class NDPProxyDuplicated(n_exc.Conflict):"},{"line_number":69,"context_line":"    message \u003d _(\"Cannot create ndp proxy on router %(router_id)s with \""},{"line_number":70,"context_line":"                \"port %(port_id)s and ip address %(ip_address)s, it is \""},{"line_number":71,"context_line":"                \"duplicated with already exist ndp proxy.\")"}],"source_content_type":"text/x-python","patch_set":2,"id":"ab139d1e_4f2ad846","line":71,"range":{"start_line":71,"start_character":17,"end_line":71,"end_character":46},"in_reply_to":"25a834cb_f3e1f136","updated":"2022-05-16 02:42:15.000000000","message":"Done","commit_id":"8a634938862632ae5231b24bd0b5fa7370975293"}],"releasenotes/notes/forbid-duplicate-ndp-proxy-entry-28040bc2afb3c1c7.yaml":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"f64ec835385ab902435dbbe60b1485ad69f9e181","unresolved":true,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Forbid create ndp proxy which ``ip_address`` is same with other ndp proxy"},{"line_number":5,"context_line":"    on same router. On a router, the IP address on the router is unique, a IPv6"}],"source_content_type":"text/x-yaml","patch_set":8,"id":"3b846450_ce002277","line":2,"range":{"start_line":2,"start_character":0,"end_line":2,"end_character":8},"updated":"2022-06-02 23:03:33.000000000","message":"Not sure this is a feature, perhaps \u0027fixes\u0027 ?","commit_id":"e719abeb11a5a0203069ac26672f26e5b0e71768"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"4936b5b1c3863a9a189df18ba8fa84afb3a71d44","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Forbid create ndp proxy which ``ip_address`` is same with other ndp proxy"},{"line_number":5,"context_line":"    on same router. On a router, the IP address on the router is unique, a IPv6"}],"source_content_type":"text/x-yaml","patch_set":8,"id":"384585da_209c619d","line":2,"range":{"start_line":2,"start_character":0,"end_line":2,"end_character":8},"in_reply_to":"3b846450_ce002277","updated":"2022-06-04 02:28:16.000000000","message":"Done","commit_id":"e719abeb11a5a0203069ac26672f26e5b0e71768"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"f64ec835385ab902435dbbe60b1485ad69f9e181","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":8,"id":"e36969cd_4a851808","line":8,"updated":"2022-06-02 23:03:33.000000000","message":"Maybe this can be shortened since both sentences seem to say the same thing?\n\nForbid the creation of a duplicate NDP proxy entry on the same router, since the IP address of a router is unique and an IPv6 address only needs one NDP proxy.","commit_id":"e719abeb11a5a0203069ac26672f26e5b0e71768"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"4936b5b1c3863a9a189df18ba8fa84afb3a71d44","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":8,"id":"f796c2a2_cfc30a23","line":8,"in_reply_to":"e36969cd_4a851808","updated":"2022-06-04 02:28:16.000000000","message":"Thanks very much","commit_id":"e719abeb11a5a0203069ac26672f26e5b0e71768"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"56628273d02dbbf58e206c3eeae465c6fcf2ea99","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"2a6873aa_aa06524c","line":8,"in_reply_to":"f796c2a2_cfc30a23","updated":"2022-06-04 02:28:37.000000000","message":"Done","commit_id":"e719abeb11a5a0203069ac26672f26e5b0e71768"}]}
