)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"2fe5a3f9f163154c1edb0c9c22023b6969ba3033","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"b9244168_5ff3f405","updated":"2023-02-03 09:35:59.000000000","message":"This -W doesn\u0027t mean this patch is incorrect. Next week is the non client feature freeze and the spec is still being reviewed. We\u0027ll need to postpone this feature to 2023.2 Bobcat release.","commit_id":"759fbf438d5ae1f0fa36369419f8c4956bc66b68"},{"author":{"_account_id":24824,"name":"Dmitrii Shcherbakov","username":"dmitriis"},"change_message_id":"9452c2ea2e696d479e3c517c3f6b4169123d89c0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"ad16e4bf_dcf32fb3","updated":"2023-02-27 22:50:24.000000000","message":"Among a couple of fixes based on the Neutron patch prototype, switched to using router-level attributes for `enable_default_route_ecmp` and `enable_default_route_bfd`.\n\nRelated Neutron change:\nhttps://review.opendev.org/c/openstack/neutron/+/873593/16","commit_id":"5a86642eb83cb3997c98786c5e942e9df3f0d4fd"},{"author":{"_account_id":24824,"name":"Dmitrii Shcherbakov","username":"dmitriis"},"change_message_id":"dd2607e7c759e7dc4aa2a782adf5a2f440792bae","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"adaf7d28_e8b2dde0","updated":"2023-02-28 09:57:17.000000000","message":"recheck","commit_id":"12435436314823efd966e222014332c19309b047"},{"author":{"_account_id":24824,"name":"Dmitrii Shcherbakov","username":"dmitriis"},"change_message_id":"13dba2ccb7aabe861cfe2d3e3055e6d9f70540e9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"d6d3d1c6_4eb949b0","updated":"2023-03-20 12:04:09.000000000","message":"Just a doc update which includes the change in behavior when it comes to the lookup done based on external_fixed_ips.","commit_id":"8b090303dee9eae79886a2f3564a94aa5ee3080d"},{"author":{"_account_id":24824,"name":"Dmitrii Shcherbakov","username":"dmitriis"},"change_message_id":"ca64462112ea98350eeb57825f41fdf39d51ca8a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"e1b73d32_5c3f7fe0","updated":"2023-03-21 15:12:32.000000000","message":"Moved exceptions from the Neutron change in the latest update.","commit_id":"da3d6b7feae5db773efd08083851f507e30bd318"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"7f044723847b61e681cc1a61657931dd08d37d4e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"14fb343b_7495948e","updated":"2023-03-22 17:26:23.000000000","message":"Really just nits at this point, lgtm otherwise.","commit_id":"db527748beb6f52e4c9886bd66e2deaeb2cec6a3"},{"author":{"_account_id":24824,"name":"Dmitrii Shcherbakov","username":"dmitriis"},"change_message_id":"d9187cbb5b839c48b8766b7f1ae0b41b9c57d715","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"61ccb313_533c73c3","updated":"2023-03-22 13:47:54.000000000","message":"recheck","commit_id":"db527748beb6f52e4c9886bd66e2deaeb2cec6a3"},{"author":{"_account_id":13686,"name":"Frode Nordahl","email":"fnordahl@ubuntu.com","username":"fnordahl"},"change_message_id":"a0aefea4ed7dad57eb1bb8aee2dee96d1fbdd394","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"73ea0a7b_1769a76c","updated":"2023-03-27 10:45:05.000000000","message":"Thank you for the review, Rodolfo, much appreciated! New patch set follows momentarily.","commit_id":"98419874d4c5109072fc1621a901b6ba1c73c9eb"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"ae82d60405b6e1db5c21afb0ac053cc0c843e43d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"0f121f2a_ce972422","updated":"2023-03-27 13:24:35.000000000","message":"+1 only.\n\nPatch looks fine but the spec in not merged yet (this is the first step).","commit_id":"4ee5d8d7de91cac45c28d621d92abd48eddec753"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"80a45bf503cc1132dac9199d5c285bad4405fb94","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"f6a9dd72_9a64b964","updated":"2023-03-31 11:28:16.000000000","message":"I am fine with it, I have few questions for api-ref, but it must be refreshed anyway to remove the warning","commit_id":"4ee5d8d7de91cac45c28d621d92abd48eddec753"},{"author":{"_account_id":13686,"name":"Frode Nordahl","email":"fnordahl@ubuntu.com","username":"fnordahl"},"change_message_id":"7612ce07c15121681a14716a608c77da05e90415","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"d954ad6b_12e8d927","updated":"2023-03-31 08:38:05.000000000","message":"Thank you for the review, much appreciated! New patch set to address the nit follows momentarily.","commit_id":"4ee5d8d7de91cac45c28d621d92abd48eddec753"},{"author":{"_account_id":13686,"name":"Frode Nordahl","email":"fnordahl@ubuntu.com","username":"fnordahl"},"change_message_id":"ae6917163617ae369313744b720ffffd673ff80b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"e65c76b9_92efe21d","updated":"2023-03-31 12:03:41.000000000","message":"Thank you for the review, updated patch set coming momentarily.","commit_id":"17ad572253481805f064e563b7fe70236919b2ee"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"a188e41f7238db780a855d85485cd8a047d6be8e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"496d0ee6_1ba17e9e","updated":"2023-03-31 18:21:03.000000000","message":"Thanks for fixing the exception definitions, just had one more question.","commit_id":"dea370f39b36ab749b04217c94cee89371f478d1"},{"author":{"_account_id":13686,"name":"Frode Nordahl","email":"fnordahl@ubuntu.com","username":"fnordahl"},"change_message_id":"01d45f13c100116dee27da071053cbbf4f59602c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"66803019_bf5d6c78","updated":"2023-03-31 15:18:56.000000000","message":"Thx, fixed!","commit_id":"dea370f39b36ab749b04217c94cee89371f478d1"},{"author":{"_account_id":24824,"name":"Dmitrii Shcherbakov","username":"dmitriis"},"change_message_id":"ad6fb0d0d11bebe362e89a39fa6037bdd93df31e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"6d97668f_330cd25f","updated":"2023-04-14 10:51:10.000000000","message":"Another round of reviews would be much appreciated on this to unblock the core Neutron changes that depend on it.","commit_id":"1aff6afc49056482f05adf0253bf7c271e60946b"},{"author":{"_account_id":24824,"name":"Dmitrii Shcherbakov","username":"dmitriis"},"change_message_id":"e8b28b3de65e1a2a799310e16195c427cba286a8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":17,"id":"0ad586e1_c9c38937","updated":"2023-04-19 11:25:03.000000000","message":"Just removed the warning about this being experimental.","commit_id":"d79f193231ca5542cd5b20e7037b3305c138527b"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"7e2a1fa6105a816f56c7692c5222664c84f4ffcb","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":17,"id":"29fb022d_d5b4d82c","updated":"2023-04-19 11:40:06.000000000","message":"You are testing only one extension, what about enable_default_route_bfd and enable_default_route_ecmp?","commit_id":"d79f193231ca5542cd5b20e7037b3305c138527b"},{"author":{"_account_id":24824,"name":"Dmitrii Shcherbakov","username":"dmitriis"},"change_message_id":"bf9589d0f663a8bd372c33cf20e447cca4deeed8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":17,"id":"47afd995_9412a776","in_reply_to":"29fb022d_d5b4d82c","updated":"2023-04-19 12:03:51.000000000","message":"Thanks, added tests for the other two as well.","commit_id":"d79f193231ca5542cd5b20e7037b3305c138527b"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"840b2b5818f844d454cb27073cfe497726f12031","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":20,"id":"aec4a9ec_249a014b","updated":"2023-04-21 11:40:07.000000000","message":"\\o/ cool, thanks","commit_id":"e52a9372f76aa104543ab04cf1723e58da17d379"},{"author":{"_account_id":24824,"name":"Dmitrii Shcherbakov","username":"dmitriis"},"change_message_id":"7e6771a61c5fda120aa960a3879a1180aebd8412","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":20,"id":"cfd88885_e3aa0fc4","updated":"2023-04-20 18:39:32.000000000","message":"recheck","commit_id":"e52a9372f76aa104543ab04cf1723e58da17d379"}],"api-ref/source/v2/routers.inc":[{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"80a45bf503cc1132dac9199d5c285bad4405fb94","unresolved":true,"context_lines":[{"line_number":76,"context_line":"to handle ECMP and BFD for default routes inferred from the subnets"},{"line_number":77,"context_line":"associated with gateway ports."},{"line_number":78,"context_line":""},{"line_number":79,"context_line":".. warning::"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    This API extension was merged as experimental. At the moment this API"},{"line_number":82,"context_line":"    does not have a reference implementation and should not be considered"},{"line_number":83,"context_line":"    final. The removal of this warning will mark when the reference"},{"line_number":84,"context_line":"    implementation gets merged and the feauture is ready to be consumed."},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"L3 flavors extension (``l3-flavors``)"},{"line_number":87,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":88,"context_line":""}],"source_content_type":"text/x-c++src","patch_set":12,"id":"5f2dd27c_a0f66fa5","line":85,"range":{"start_line":79,"start_character":0,"end_line":85,"end_character":0},"updated":"2023-03-31 11:28:16.000000000","message":"it is not necesary as hopefully the feature will be merged in this cycle","commit_id":"4ee5d8d7de91cac45c28d621d92abd48eddec753"},{"author":{"_account_id":13686,"name":"Frode Nordahl","email":"fnordahl@ubuntu.com","username":"fnordahl"},"change_message_id":"ae6917163617ae369313744b720ffffd673ff80b","unresolved":false,"context_lines":[{"line_number":76,"context_line":"to handle ECMP and BFD for default routes inferred from the subnets"},{"line_number":77,"context_line":"associated with gateway ports."},{"line_number":78,"context_line":""},{"line_number":79,"context_line":".. warning::"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    This API extension was merged as experimental. At the moment this API"},{"line_number":82,"context_line":"    does not have a reference implementation and should not be considered"},{"line_number":83,"context_line":"    final. The removal of this warning will mark when the reference"},{"line_number":84,"context_line":"    implementation gets merged and the feauture is ready to be consumed."},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"L3 flavors extension (``l3-flavors``)"},{"line_number":87,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":88,"context_line":""}],"source_content_type":"text/x-c++src","patch_set":12,"id":"6530de3d_c409cbc9","line":85,"range":{"start_line":79,"start_character":0,"end_line":85,"end_character":0},"in_reply_to":"5f2dd27c_a0f66fa5","updated":"2023-03-31 12:03:41.000000000","message":"Done","commit_id":"4ee5d8d7de91cac45c28d621d92abd48eddec753"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"80a45bf503cc1132dac9199d5c285bad4405fb94","unresolved":true,"context_lines":[{"line_number":299,"context_line":"   - ha: router-ha"},{"line_number":300,"context_line":"   - availability_zone_hints: router-availability_zone_hints"},{"line_number":301,"context_line":"   - availability_zones: router-availability_zones"},{"line_number":302,"context_line":"   - service_type_id: router-service_type_id"},{"line_number":303,"context_line":"   - flavor_id: router-flavor_id"},{"line_number":304,"context_line":"   - created_at: created_at_resource"},{"line_number":305,"context_line":"   - updated_at: updated_at_resource"}],"source_content_type":"text/x-c++src","patch_set":12,"id":"67a1dd07_2c0fec2a","line":302,"updated":"2023-03-31 11:28:16.000000000","message":"why  enable_default_route_bfd \u0026 enable_default_route_ecmp are not listed here?","commit_id":"4ee5d8d7de91cac45c28d621d92abd48eddec753"},{"author":{"_account_id":13686,"name":"Frode Nordahl","email":"fnordahl@ubuntu.com","username":"fnordahl"},"change_message_id":"ae6917163617ae369313744b720ffffd673ff80b","unresolved":false,"context_lines":[{"line_number":299,"context_line":"   - ha: router-ha"},{"line_number":300,"context_line":"   - availability_zone_hints: router-availability_zone_hints"},{"line_number":301,"context_line":"   - availability_zones: router-availability_zones"},{"line_number":302,"context_line":"   - service_type_id: router-service_type_id"},{"line_number":303,"context_line":"   - flavor_id: router-flavor_id"},{"line_number":304,"context_line":"   - created_at: created_at_resource"},{"line_number":305,"context_line":"   - updated_at: updated_at_resource"}],"source_content_type":"text/x-c++src","patch_set":12,"id":"768d533b_42ffba33","line":302,"in_reply_to":"67a1dd07_2c0fec2a","updated":"2023-03-31 12:03:41.000000000","message":"Good catch, I\u0027ll go over the rest of the request/response templates and see if it\u0027s missing anywhere else. Thanks!","commit_id":"4ee5d8d7de91cac45c28d621d92abd48eddec753"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"80a45bf503cc1132dac9199d5c285bad4405fb94","unresolved":true,"context_lines":[{"line_number":360,"context_line":"   - distributed: router-distributed"},{"line_number":361,"context_line":"   - ha: router-ha"},{"line_number":362,"context_line":"   - availability_zone_hints: router-availability_zone_hints"},{"line_number":363,"context_line":"   - availability_zones: router-availability_zones"},{"line_number":364,"context_line":"   - service_type_id: router-service_type_id"},{"line_number":365,"context_line":"   - flavor_id: router-flavor_id"},{"line_number":366,"context_line":"   - created_at: created_at_resource"}],"source_content_type":"text/x-c++src","patch_set":12,"id":"d3aea457_362337c0","line":363,"updated":"2023-03-31 11:28:16.000000000","message":"ditto","commit_id":"4ee5d8d7de91cac45c28d621d92abd48eddec753"},{"author":{"_account_id":13686,"name":"Frode Nordahl","email":"fnordahl@ubuntu.com","username":"fnordahl"},"change_message_id":"ae6917163617ae369313744b720ffffd673ff80b","unresolved":false,"context_lines":[{"line_number":360,"context_line":"   - distributed: router-distributed"},{"line_number":361,"context_line":"   - ha: router-ha"},{"line_number":362,"context_line":"   - availability_zone_hints: router-availability_zone_hints"},{"line_number":363,"context_line":"   - availability_zones: router-availability_zones"},{"line_number":364,"context_line":"   - service_type_id: router-service_type_id"},{"line_number":365,"context_line":"   - flavor_id: router-flavor_id"},{"line_number":366,"context_line":"   - created_at: created_at_resource"}],"source_content_type":"text/x-c++src","patch_set":12,"id":"f7c1a644_2e7edfdb","line":363,"in_reply_to":"d3aea457_362337c0","updated":"2023-03-31 12:03:41.000000000","message":"Done","commit_id":"4ee5d8d7de91cac45c28d621d92abd48eddec753"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"41bfcb0e07b6c508166bf6f73c622ca85f635d1f","unresolved":true,"context_lines":[{"line_number":262,"context_line":"   - service_type_id: router-service_type_id-request"},{"line_number":263,"context_line":"   - flavor_id: router-flavor_id-optional"},{"line_number":264,"context_line":"   - enable_ndp_proxy: router-enable_ndp_proxy-request"},{"line_number":265,"context_line":""},{"line_number":266,"context_line":"Request Example"},{"line_number":267,"context_line":"---------------"},{"line_number":268,"context_line":""}],"source_content_type":"text/x-c++src","patch_set":18,"id":"0eee45eb_cdd11724","line":265,"updated":"2023-04-20 12:04:41.000000000","message":"here you should also list enable_default_route_bfd and enable_default_route_ecmp, am I wrong?","commit_id":"d9356e83cb6c2e6db513429c7f1036927410ce21"},{"author":{"_account_id":24824,"name":"Dmitrii Shcherbakov","username":"dmitriis"},"change_message_id":"04baff7fca167b2bdeb9f6f67061da52c79facfa","unresolved":false,"context_lines":[{"line_number":262,"context_line":"   - service_type_id: router-service_type_id-request"},{"line_number":263,"context_line":"   - flavor_id: router-flavor_id-optional"},{"line_number":264,"context_line":"   - enable_ndp_proxy: router-enable_ndp_proxy-request"},{"line_number":265,"context_line":""},{"line_number":266,"context_line":"Request Example"},{"line_number":267,"context_line":"---------------"},{"line_number":268,"context_line":""}],"source_content_type":"text/x-c++src","patch_set":18,"id":"6ff3a869_d90d3c48","line":265,"in_reply_to":"0eee45eb_cdd11724","updated":"2023-04-20 13:00:21.000000000","message":"Done","commit_id":"d9356e83cb6c2e6db513429c7f1036927410ce21"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"41bfcb0e07b6c508166bf6f73c622ca85f635d1f","unresolved":true,"context_lines":[{"line_number":398,"context_line":"   - routes: router-routes-request"},{"line_number":399,"context_line":"   - distributed: router-distributed-request"},{"line_number":400,"context_line":"   - enable_ndp_proxy: router-enable_ndp_proxy-request"},{"line_number":401,"context_line":""},{"line_number":402,"context_line":"Request Example"},{"line_number":403,"context_line":"---------------"},{"line_number":404,"context_line":""}],"source_content_type":"text/x-c++src","patch_set":18,"id":"3ec27f74_62bc14cf","line":401,"updated":"2023-04-20 12:04:41.000000000","message":"ditto","commit_id":"d9356e83cb6c2e6db513429c7f1036927410ce21"},{"author":{"_account_id":24824,"name":"Dmitrii Shcherbakov","username":"dmitriis"},"change_message_id":"04baff7fca167b2bdeb9f6f67061da52c79facfa","unresolved":false,"context_lines":[{"line_number":398,"context_line":"   - routes: router-routes-request"},{"line_number":399,"context_line":"   - distributed: router-distributed-request"},{"line_number":400,"context_line":"   - enable_ndp_proxy: router-enable_ndp_proxy-request"},{"line_number":401,"context_line":""},{"line_number":402,"context_line":"Request Example"},{"line_number":403,"context_line":"---------------"},{"line_number":404,"context_line":""}],"source_content_type":"text/x-c++src","patch_set":18,"id":"190daaa2_3d34d071","line":401,"in_reply_to":"3ec27f74_62bc14cf","updated":"2023-04-20 13:00:21.000000000","message":"Done","commit_id":"d9356e83cb6c2e6db513429c7f1036927410ce21"}],"api-ref/source/v2/samples/routers/router-add-external-gateways-response.json":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"f1df9a92331f54a8673f8cc78b41877f967c393f","unresolved":true,"context_lines":[{"line_number":35,"context_line":"            \"enable_snat\" : false,"},{"line_number":36,"context_line":"            \"external_fixed_ips\" : ["},{"line_number":37,"context_line":"               {"},{"line_number":38,"context_line":"                  \"ip_address\" : \"10.0.0.2\","},{"line_number":39,"context_line":"                  \"subnet_id\" : \"b189c314-ebb9-11eb-939c-9bde3f3867cb\""},{"line_number":40,"context_line":"               }"},{"line_number":41,"context_line":"            ],"}],"source_content_type":"application/json","patch_set":7,"id":"e0a0a109_a75bb617","line":38,"range":{"start_line":38,"start_character":34,"end_line":38,"end_character":42},"updated":"2023-03-20 14:09:37.000000000","message":"Just a question on the subnet choice. If I\u0027m understanding correctly this example shows a router with an external IP of 10.0.0.2 and an internal IP of 10.0.0.1? While I know it\u0027s valid since they are in different subnets, would another range be better? Just to make it obvious they are different subnets.","commit_id":"8b090303dee9eae79886a2f3564a94aa5ee3080d"},{"author":{"_account_id":24824,"name":"Dmitrii Shcherbakov","username":"dmitriis"},"change_message_id":"2d4a72d0c88d8e1ff5eb1ec7099917b14095f4b7","unresolved":false,"context_lines":[{"line_number":35,"context_line":"            \"enable_snat\" : false,"},{"line_number":36,"context_line":"            \"external_fixed_ips\" : ["},{"line_number":37,"context_line":"               {"},{"line_number":38,"context_line":"                  \"ip_address\" : \"10.0.0.2\","},{"line_number":39,"context_line":"                  \"subnet_id\" : \"b189c314-ebb9-11eb-939c-9bde3f3867cb\""},{"line_number":40,"context_line":"               }"},{"line_number":41,"context_line":"            ],"}],"source_content_type":"application/json","patch_set":7,"id":"70658eb3_c50de685","line":38,"range":{"start_line":38,"start_character":34,"end_line":38,"end_character":42},"in_reply_to":"0d0a9a54_01170dd7","updated":"2023-03-21 15:12:41.000000000","message":"Done","commit_id":"8b090303dee9eae79886a2f3564a94aa5ee3080d"},{"author":{"_account_id":24824,"name":"Dmitrii Shcherbakov","username":"dmitriis"},"change_message_id":"1a581a63a36c8c4e91e9a17c7c9c4493485b1903","unresolved":true,"context_lines":[{"line_number":35,"context_line":"            \"enable_snat\" : false,"},{"line_number":36,"context_line":"            \"external_fixed_ips\" : ["},{"line_number":37,"context_line":"               {"},{"line_number":38,"context_line":"                  \"ip_address\" : \"10.0.0.2\","},{"line_number":39,"context_line":"                  \"subnet_id\" : \"b189c314-ebb9-11eb-939c-9bde3f3867cb\""},{"line_number":40,"context_line":"               }"},{"line_number":41,"context_line":"            ],"}],"source_content_type":"application/json","patch_set":7,"id":"0d0a9a54_01170dd7","line":38,"range":{"start_line":38,"start_character":34,"end_line":38,"end_character":42},"in_reply_to":"e0a0a109_a75bb617","updated":"2023-03-21 14:47:56.000000000","message":"Yes, I think it\u0027s better to have a different subnet to be used here as well.\n\nI\u0027ll change it on the next upload.","commit_id":"8b090303dee9eae79886a2f3564a94aa5ee3080d"}],"neutron_lib/api/converters.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"f1df9a92331f54a8673f8cc78b41877f967c393f","unresolved":true,"context_lines":[{"line_number":260,"context_line":"                      \"names and their integer representation (0 to \""},{"line_number":261,"context_line":"                      \"255) are supported\") % data"},{"line_number":262,"context_line":"    try:"},{"line_number":263,"context_line":"        if 0 \u003c\u003d convert_to_int(data) \u003c\u003d 255:"},{"line_number":264,"context_line":"            return data"},{"line_number":265,"context_line":"        else:"},{"line_number":266,"context_line":"            raise n_exc.InvalidInput(error_message\u003derror_message)"}],"source_content_type":"text/x-python","patch_set":7,"id":"734457bb_6986baa7","line":263,"updated":"2023-03-20 14:09:37.000000000","message":"I don\u0027t think this changes how convert_to_protocol() works does it?","commit_id":"8b090303dee9eae79886a2f3564a94aa5ee3080d"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"0e1dab19e99411521a2698f13a9e4a23b97acec2","unresolved":true,"context_lines":[{"line_number":260,"context_line":"                      \"names and their integer representation (0 to \""},{"line_number":261,"context_line":"                      \"255) are supported\") % data"},{"line_number":262,"context_line":"    try:"},{"line_number":263,"context_line":"        if 0 \u003c\u003d convert_to_int(data) \u003c\u003d 255:"},{"line_number":264,"context_line":"            return data"},{"line_number":265,"context_line":"        else:"},{"line_number":266,"context_line":"            raise n_exc.InvalidInput(error_message\u003derror_message)"}],"source_content_type":"text/x-python","patch_set":7,"id":"b455e9aa_d102ecea","line":263,"in_reply_to":"304ff13d_a4a0f40e","updated":"2023-03-21 16:06:39.000000000","message":"Ah, I guess I hadn\u0027t seen that failure in the zuul voting, is it from pylint? Can maybe fix by moving import in validators, see my comment there","commit_id":"8b090303dee9eae79886a2f3564a94aa5ee3080d"},{"author":{"_account_id":24824,"name":"Dmitrii Shcherbakov","username":"dmitriis"},"change_message_id":"2d4a72d0c88d8e1ff5eb1ec7099917b14095f4b7","unresolved":false,"context_lines":[{"line_number":260,"context_line":"                      \"names and their integer representation (0 to \""},{"line_number":261,"context_line":"                      \"255) are supported\") % data"},{"line_number":262,"context_line":"    try:"},{"line_number":263,"context_line":"        if 0 \u003c\u003d convert_to_int(data) \u003c\u003d 255:"},{"line_number":264,"context_line":"            return data"},{"line_number":265,"context_line":"        else:"},{"line_number":266,"context_line":"            raise n_exc.InvalidInput(error_message\u003derror_message)"}],"source_content_type":"text/x-python","patch_set":7,"id":"2e55e5f7_1f6910fa","line":263,"in_reply_to":"304ff13d_a4a0f40e","updated":"2023-03-21 15:12:41.000000000","message":"Done","commit_id":"8b090303dee9eae79886a2f3564a94aa5ee3080d"},{"author":{"_account_id":24824,"name":"Dmitrii Shcherbakov","username":"dmitriis"},"change_message_id":"1a581a63a36c8c4e91e9a17c7c9c4493485b1903","unresolved":true,"context_lines":[{"line_number":260,"context_line":"                      \"names and their integer representation (0 to \""},{"line_number":261,"context_line":"                      \"255) are supported\") % data"},{"line_number":262,"context_line":"    try:"},{"line_number":263,"context_line":"        if 0 \u003c\u003d convert_to_int(data) \u003c\u003d 255:"},{"line_number":264,"context_line":"            return data"},{"line_number":265,"context_line":"        else:"},{"line_number":266,"context_line":"            raise n_exc.InvalidInput(error_message\u003derror_message)"}],"source_content_type":"text/x-python","patch_set":7,"id":"304ff13d_a4a0f40e","line":263,"in_reply_to":"734457bb_6986baa7","updated":"2023-03-21 14:47:56.000000000","message":"The only reason for changing this is to avoid a circular dependency the same way it was done in the previous attempt to implement multiple gateways:\n\nhttps://review.opendev.org/c/openstack/neutron-lib/+/802029/comment/41da89fd_7471e4c7/\n\nOtherwise I\u0027m getting \n\nR0401: Cyclic import (neutron_lib.api.converters -\u003e neutron_lib.api.validators) (cyclic-import)\n\nAs far as replacing validate_range with a combination of operators + convert_to_int it looks equivalent:\n\nhttps://github.com/openstack/neutron-lib/blob/ad8bcd2b3ae568aa7b8bca5b6c2048b5ba1e7d2e/neutron_lib/api/converters.py#L56-L68\nhttps://github.com/openstack/neutron-lib/blob/ad8bcd2b3ae568aa7b8bca5b6c2048b5ba1e7d2e/neutron_lib/api/validators/__init__.py#L341-L374","commit_id":"8b090303dee9eae79886a2f3564a94aa5ee3080d"},{"author":{"_account_id":24824,"name":"Dmitrii Shcherbakov","username":"dmitriis"},"change_message_id":"9a9fc94995e3466c6dfe86f4ae615f020fc1336d","unresolved":false,"context_lines":[{"line_number":260,"context_line":"                      \"names and their integer representation (0 to \""},{"line_number":261,"context_line":"                      \"255) are supported\") % data"},{"line_number":262,"context_line":"    try:"},{"line_number":263,"context_line":"        if 0 \u003c\u003d convert_to_int(data) \u003c\u003d 255:"},{"line_number":264,"context_line":"            return data"},{"line_number":265,"context_line":"        else:"},{"line_number":266,"context_line":"            raise n_exc.InvalidInput(error_message\u003derror_message)"}],"source_content_type":"text/x-python","patch_set":7,"id":"b40fce29_c9127a70","line":263,"in_reply_to":"b455e9aa_d102ecea","updated":"2023-03-22 10:53:34.000000000","message":"Switched it back to what it was in a addition to moving the import as you suggested \u0026 disabled the cyclic check since pylint was still unhappy.","commit_id":"8b090303dee9eae79886a2f3564a94aa5ee3080d"}],"neutron_lib/api/definitions/__init__.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"7f044723847b61e681cc1a61657931dd08d37d4e","unresolved":true,"context_lines":[{"line_number":216,"context_line":"    l3_flavors,"},{"line_number":217,"context_line":"    l3_ext_gw_multihoming,"},{"line_number":218,"context_line":"    l3_enable_default_route_bfd,"},{"line_number":219,"context_line":"    l3_enable_default_route_ecmp,"},{"line_number":220,"context_line":"    l3_ndp_proxy,"},{"line_number":221,"context_line":"    l3_port_ip_change_not_allowed,"},{"line_number":222,"context_line":"    local_ip,"}],"source_content_type":"text/x-python","patch_set":10,"id":"09cb515b_b774cfe1","line":219,"updated":"2023-03-22 17:26:23.000000000","message":"Same alphabetical comment here, should basically follow import statement order","commit_id":"db527748beb6f52e4c9886bd66e2deaeb2cec6a3"},{"author":{"_account_id":13686,"name":"Frode Nordahl","email":"fnordahl@ubuntu.com","username":"fnordahl"},"change_message_id":"fffaa039f74a00d4b435f739726347db12c1ce24","unresolved":false,"context_lines":[{"line_number":216,"context_line":"    l3_flavors,"},{"line_number":217,"context_line":"    l3_ext_gw_multihoming,"},{"line_number":218,"context_line":"    l3_enable_default_route_bfd,"},{"line_number":219,"context_line":"    l3_enable_default_route_ecmp,"},{"line_number":220,"context_line":"    l3_ndp_proxy,"},{"line_number":221,"context_line":"    l3_port_ip_change_not_allowed,"},{"line_number":222,"context_line":"    local_ip,"}],"source_content_type":"text/x-python","patch_set":10,"id":"7bade716_e2dc9f30","line":219,"in_reply_to":"09cb515b_b774cfe1","updated":"2023-03-24 11:44:00.000000000","message":"Done","commit_id":"db527748beb6f52e4c9886bd66e2deaeb2cec6a3"}],"neutron_lib/api/definitions/base.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"7f044723847b61e681cc1a61657931dd08d37d4e","unresolved":true,"context_lines":[{"line_number":94,"context_line":"    \u0027dns-integration\u0027,"},{"line_number":95,"context_line":"    \u0027dvr\u0027,"},{"line_number":96,"context_line":"    \u0027enable-default-route-ecmp\u0027,"},{"line_number":97,"context_line":"    \u0027enable-default-route-bfd\u0027,"},{"line_number":98,"context_line":"    \u0027empty-string-filtering\u0027,"},{"line_number":99,"context_line":"    \u0027expose-l3-conntrack-helper\u0027,"},{"line_number":100,"context_line":"    \u0027expose-port-forwarding-in-fip\u0027,"}],"source_content_type":"text/x-python","patch_set":10,"id":"1d78d4c8_f710fb41","line":97,"updated":"2023-03-22 17:26:23.000000000","message":"nit: i think you were trying to put these alphabetical, even if the list isn\u0027t fully? If so they are in the wrong order and should be after empty-string-filtering","commit_id":"db527748beb6f52e4c9886bd66e2deaeb2cec6a3"},{"author":{"_account_id":13686,"name":"Frode Nordahl","email":"fnordahl@ubuntu.com","username":"fnordahl"},"change_message_id":"fffaa039f74a00d4b435f739726347db12c1ce24","unresolved":false,"context_lines":[{"line_number":94,"context_line":"    \u0027dns-integration\u0027,"},{"line_number":95,"context_line":"    \u0027dvr\u0027,"},{"line_number":96,"context_line":"    \u0027enable-default-route-ecmp\u0027,"},{"line_number":97,"context_line":"    \u0027enable-default-route-bfd\u0027,"},{"line_number":98,"context_line":"    \u0027empty-string-filtering\u0027,"},{"line_number":99,"context_line":"    \u0027expose-l3-conntrack-helper\u0027,"},{"line_number":100,"context_line":"    \u0027expose-port-forwarding-in-fip\u0027,"}],"source_content_type":"text/x-python","patch_set":10,"id":"fe857165_2080fe87","line":97,"in_reply_to":"1d78d4c8_f710fb41","updated":"2023-03-24 11:44:00.000000000","message":"Done","commit_id":"db527748beb6f52e4c9886bd66e2deaeb2cec6a3"}],"neutron_lib/api/validators/__init__.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"0e1dab19e99411521a2698f13a9e4a23b97acec2","unresolved":true,"context_lines":[{"line_number":1222,"context_line":"    :param data: The data to validate."},{"line_number":1223,"context_line":"    :param valid_values: Not used!"},{"line_number":1224,"context_line":"    :returns: None if valid, error string otherwise."},{"line_number":1225,"context_line":"    \"\"\""},{"line_number":1226,"context_line":"    return validate_dict_or_nodata("},{"line_number":1227,"context_line":"        data,"},{"line_number":1228,"context_line":"        key_specs\u003d{"}],"source_content_type":"text/x-python","patch_set":9,"id":"0d411142_4679cb5b","line":1225,"updated":"2023-03-21 16:06:39.000000000","message":"Alternately you could probably do this:\n\n    # pylint: disable\u003dimport-outside-toplevel\n    from neutron_lib.api import converters","commit_id":"da3d6b7feae5db773efd08083851f507e30bd318"},{"author":{"_account_id":24824,"name":"Dmitrii Shcherbakov","username":"dmitriis"},"change_message_id":"58a99cf7eca78190aa8703a28f2ae789e5d83b62","unresolved":false,"context_lines":[{"line_number":1222,"context_line":"    :param data: The data to validate."},{"line_number":1223,"context_line":"    :param valid_values: Not used!"},{"line_number":1224,"context_line":"    :returns: None if valid, error string otherwise."},{"line_number":1225,"context_line":"    \"\"\""},{"line_number":1226,"context_line":"    return validate_dict_or_nodata("},{"line_number":1227,"context_line":"        data,"},{"line_number":1228,"context_line":"        key_specs\u003d{"}],"source_content_type":"text/x-python","patch_set":9,"id":"38ae3f25_71e16fc8","line":1225,"in_reply_to":"0d411142_4679cb5b","updated":"2023-03-22 10:51:26.000000000","message":"It was still failing until I disabled a check for the cyclic import. Apparently there\u0027s a discussion about this behavior here https://github.com/PyCQA/pylint/issues/850 and the conclusion seems to be to just disable the check for the case where an import is not done at the top level.","commit_id":"da3d6b7feae5db773efd08083851f507e30bd318"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"61ac6a6d7fdb66bc515f7376f6fdebe21433f812","unresolved":true,"context_lines":[{"line_number":1215,"context_line":"        return _(msg) % msg_data"},{"line_number":1216,"context_line":""},{"line_number":1217,"context_line":""},{"line_number":1218,"context_line":"def validate_external_gw_info(data, valid_values\u003dNone):"},{"line_number":1219,"context_line":"    \"\"\"Validate data is an external_gateway_info."},{"line_number":1220,"context_line":""},{"line_number":1221,"context_line":"    :param data: The data to validate."}],"source_content_type":"text/x-python","patch_set":12,"id":"64705137_673f205f","line":1218,"updated":"2023-03-31 08:15:14.000000000","message":"++ on this factoring.","commit_id":"4ee5d8d7de91cac45c28d621d92abd48eddec753"},{"author":{"_account_id":24824,"name":"Dmitrii Shcherbakov","username":"dmitriis"},"change_message_id":"ad6fb0d0d11bebe362e89a39fa6037bdd93df31e","unresolved":false,"context_lines":[{"line_number":1215,"context_line":"        return _(msg) % msg_data"},{"line_number":1216,"context_line":""},{"line_number":1217,"context_line":""},{"line_number":1218,"context_line":"def validate_external_gw_info(data, valid_values\u003dNone):"},{"line_number":1219,"context_line":"    \"\"\"Validate data is an external_gateway_info."},{"line_number":1220,"context_line":""},{"line_number":1221,"context_line":"    :param data: The data to validate."}],"source_content_type":"text/x-python","patch_set":12,"id":"4e55dac3_236f4cfb","line":1218,"in_reply_to":"64705137_673f205f","updated":"2023-04-14 10:51:10.000000000","message":"Ack","commit_id":"4ee5d8d7de91cac45c28d621d92abd48eddec753"}],"neutron_lib/exceptions/l3_ext_gw_multihoming.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"7f044723847b61e681cc1a61657931dd08d37d4e","unresolved":true,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"class UnableToAddExtraGatewayPort(exceptions.NeutronException):"},{"line_number":33,"context_line":"    message \u003d _(\"Unable to add an gateway port to a router\")"}],"source_content_type":"text/x-python","patch_set":10,"id":"114d9b63_8fd06ac5","line":33,"range":{"start_line":33,"start_character":31,"end_line":33,"end_character":33},"updated":"2023-03-22 17:26:23.000000000","message":"nit: s/a","commit_id":"db527748beb6f52e4c9886bd66e2deaeb2cec6a3"},{"author":{"_account_id":13686,"name":"Frode Nordahl","email":"fnordahl@ubuntu.com","username":"fnordahl"},"change_message_id":"fffaa039f74a00d4b435f739726347db12c1ce24","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"class UnableToAddExtraGatewayPort(exceptions.NeutronException):"},{"line_number":33,"context_line":"    message \u003d _(\"Unable to add an gateway port to a router\")"}],"source_content_type":"text/x-python","patch_set":10,"id":"5a9d99d6_bbdda268","line":33,"range":{"start_line":33,"start_character":31,"end_line":33,"end_character":33},"in_reply_to":"114d9b63_8fd06ac5","updated":"2023-03-24 11:44:00.000000000","message":"Done","commit_id":"db527748beb6f52e4c9886bd66e2deaeb2cec6a3"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"6a3526cb9167c07a880b645f215556e0c0dfcaf4","unresolved":true,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"class UnableToAddExtraGateways(exceptions.NeutronException):"},{"line_number":20,"context_line":"    message \u003d _(\"Unable to add extra gateways to a router\")"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"class UnableToRemoveGateways(exceptions.NeutronException):"}],"source_content_type":"text/x-python","patch_set":11,"id":"fa9f2bb1_5154c99e","line":20,"range":{"start_line":20,"start_character":51,"end_line":20,"end_character":57},"updated":"2023-03-27 10:07:37.000000000","message":"should we add the router ID in these messages?","commit_id":"98419874d4c5109072fc1621a901b6ba1c73c9eb"},{"author":{"_account_id":13686,"name":"Frode Nordahl","email":"fnordahl@ubuntu.com","username":"fnordahl"},"change_message_id":"a0aefea4ed7dad57eb1bb8aee2dee96d1fbdd394","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"class UnableToAddExtraGateways(exceptions.NeutronException):"},{"line_number":20,"context_line":"    message \u003d _(\"Unable to add extra gateways to a router\")"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"class UnableToRemoveGateways(exceptions.NeutronException):"}],"source_content_type":"text/x-python","patch_set":11,"id":"98b37595_8c628cc6","line":20,"range":{"start_line":20,"start_character":51,"end_line":20,"end_character":57},"in_reply_to":"fa9f2bb1_5154c99e","updated":"2023-03-27 10:45:05.000000000","message":"Done","commit_id":"98419874d4c5109072fc1621a901b6ba1c73c9eb"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"08d716980adff9d59ceca384d585b4b1e0f2fe87","unresolved":true,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"class UnableToRemoveGateways(exceptions.NeutronException):"},{"line_number":20,"context_line":"    message \u003d _(\"Unable to remove extra gateways from router %(router_id)s: \""},{"line_number":21,"context_line":"                \"%(reason)s\")"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"30c202dd_0f42b762","line":20,"range":{"start_line":20,"start_character":34,"end_line":20,"end_character":39},"updated":"2023-03-31 07:46:44.000000000","message":"nit: I would avoid this word \"extra\" here. Also below in UnableToAddExtraGatewayPort message is about \"add a gateway port to router\", maybe here it can be something like \"Unable to remove gateway ports from router...\"","commit_id":"4ee5d8d7de91cac45c28d621d92abd48eddec753"},{"author":{"_account_id":13686,"name":"Frode Nordahl","email":"fnordahl@ubuntu.com","username":"fnordahl"},"change_message_id":"7612ce07c15121681a14716a608c77da05e90415","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"class UnableToRemoveGateways(exceptions.NeutronException):"},{"line_number":20,"context_line":"    message \u003d _(\"Unable to remove extra gateways from router %(router_id)s: \""},{"line_number":21,"context_line":"                \"%(reason)s\")"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"8ff696b3_7103d9b0","line":20,"range":{"start_line":20,"start_character":34,"end_line":20,"end_character":39},"in_reply_to":"30c202dd_0f42b762","updated":"2023-03-31 08:38:05.000000000","message":"Done","commit_id":"4ee5d8d7de91cac45c28d621d92abd48eddec753"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"ffc1b1a268419bf225dd71adf3d4e9d932590a74","unresolved":true,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":"class UnableToAddExtraGatewayPort(exceptions.NeutronException):"},{"line_number":30,"context_line":"    message \u003d _(\"Unable to add a gateway port to router %(router_id)s: \""},{"line_number":31,"context_line":"                \"%(reason)s\")"}],"source_content_type":"text/x-python","patch_set":14,"id":"5c0f1a24_79817f67","line":31,"updated":"2023-03-31 14:57:19.000000000","message":"Just a comment on the name of these exceptions since they have different names and tenses.\n\n1) Only one has the word \u0027Port\u0027 in the name, but all the descriptions have it.\n\n2) Two are plural (end in \u0027s\u0027) and one is not.\n\n3) The third has \u0027Extra\u0027 in the name, but not in the description - I thought this API could be used to add just a \u0027normal\u0027 port too?\n\nhttps://review.opendev.org/c/openstack/neutron-lib/+/870887/14/api-ref/source/v2/routers.inc#836","commit_id":"53f84b80f403230da5b321e8e6a0ee9c0cbb2dfc"},{"author":{"_account_id":13686,"name":"Frode Nordahl","email":"fnordahl@ubuntu.com","username":"fnordahl"},"change_message_id":"01d45f13c100116dee27da071053cbbf4f59602c","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":"class UnableToAddExtraGatewayPort(exceptions.NeutronException):"},{"line_number":30,"context_line":"    message \u003d _(\"Unable to add a gateway port to router %(router_id)s: \""},{"line_number":31,"context_line":"                \"%(reason)s\")"}],"source_content_type":"text/x-python","patch_set":14,"id":"57acaaeb_76bbf16d","line":31,"in_reply_to":"5c0f1a24_79817f67","updated":"2023-03-31 15:18:56.000000000","message":"You are quite right!\n\nIn patch set 12 [0] I removed one called `UnableToAddExtraGateways` as it turned out to not be used. So perhaps I shall reintroduce it, replacing this one sans the `Extra` part. I\u0027ll also drop plurality in exception names, using optional plurality in the description instead as well as consistently using GatewayPort as part of the exception name.\n\n0: https://review.opendev.org/c/openstack/neutron-lib/+/870887/11..12/neutron_lib/exceptions/l3_ext_gw_multihoming.py","commit_id":"53f84b80f403230da5b321e8e6a0ee9c0cbb2dfc"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"7e2a1fa6105a816f56c7692c5222664c84f4ffcb","unresolved":true,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"class UnableToAddExtraGateways(exceptions.NeutronException):"},{"line_number":20,"context_line":"    message \u003d _(\"Unable to add extra gateways to a router\")"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"class UnableToRemoveGateways(exceptions.NeutronException):"}],"source_content_type":"text/x-python","patch_set":17,"id":"e75708db_2a82b142","line":20,"range":{"start_line":20,"start_character":51,"end_line":20,"end_character":57},"updated":"2023-04-19 11:40:06.000000000","message":"Should we add the router id? Same question in the other classes.","commit_id":"d79f193231ca5542cd5b20e7037b3305c138527b"},{"author":{"_account_id":24824,"name":"Dmitrii Shcherbakov","username":"dmitriis"},"change_message_id":"bf9589d0f663a8bd372c33cf20e447cca4deeed8","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"class UnableToAddExtraGateways(exceptions.NeutronException):"},{"line_number":20,"context_line":"    message \u003d _(\"Unable to add extra gateways to a router\")"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"class UnableToRemoveGateways(exceptions.NeutronException):"}],"source_content_type":"text/x-python","patch_set":17,"id":"cb007794_a1af4fb3","line":20,"range":{"start_line":20,"start_character":51,"end_line":20,"end_character":57},"in_reply_to":"e75708db_2a82b142","updated":"2023-04-19 12:03:51.000000000","message":"Ack, done.","commit_id":"d79f193231ca5542cd5b20e7037b3305c138527b"}],"neutron_lib/tests/unit/api/definitions/test_l3_multi_ext_gw.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"a188e41f7238db780a855d85485cd8a047d6be8e","unresolved":true,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"class L3ExternalGatewayMultihomingDefinitionTestCase("},{"line_number":20,"context_line":"        base.DefinitionBaseTestCase):"},{"line_number":21,"context_line":"    extension_module \u003d l3_ext_gw_multihoming"}],"source_content_type":"text/x-python","patch_set":15,"id":"20d43700_cee17b08","line":21,"updated":"2023-03-31 18:21:03.000000000","message":"Is this missing extension_attributes(l3_ext_gw_multihoming.EXTERNAL_GATEWAYS,) ?\n\nI\u0027m only basing this on the extraroutes extension so could be wrong.","commit_id":"dea370f39b36ab749b04217c94cee89371f478d1"},{"author":{"_account_id":13686,"name":"Frode Nordahl","email":"fnordahl@ubuntu.com","username":"fnordahl"},"change_message_id":"0b6ea54d1c51308788fc05056d357a37569506eb","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"class L3ExternalGatewayMultihomingDefinitionTestCase("},{"line_number":20,"context_line":"        base.DefinitionBaseTestCase):"},{"line_number":21,"context_line":"    extension_module \u003d l3_ext_gw_multihoming"}],"source_content_type":"text/x-python","patch_set":15,"id":"9555cbd6_de1f4f8d","line":21,"in_reply_to":"20d43700_cee17b08","updated":"2023-03-31 18:54:39.000000000","message":"Indeed, other extensions do indeed appear to define that, will add it. Thx!","commit_id":"dea370f39b36ab749b04217c94cee89371f478d1"}],"releasenotes/notes/l3-ext-gw-multihoming-1a7b556c541923cf.yaml":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"0dfe8e6cf32c9cd0f4b649b2fad3572879f7fd07","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":"    A definition for API extension: ``external-gateway-multihoming``."},{"line_number":5,"context_line":"    This API definition was merged as experimental. At the moment this"},{"line_number":6,"context_line":"    API does not have a reference implementation and should not be"},{"line_number":7,"context_line":"    considered final. A later release note will mark when the reference"}],"source_content_type":"text/x-yaml","patch_set":11,"id":"fac087ed_a3f252fe","line":4,"range":{"start_line":4,"start_character":38,"end_line":4,"end_character":66},"updated":"2023-03-27 10:09:53.000000000","message":"What about \"enable_default_route_bfd\" and \"enable_default_route_ecmp\"?","commit_id":"98419874d4c5109072fc1621a901b6ba1c73c9eb"},{"author":{"_account_id":13686,"name":"Frode Nordahl","email":"fnordahl@ubuntu.com","username":"fnordahl"},"change_message_id":"a0aefea4ed7dad57eb1bb8aee2dee96d1fbdd394","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":"    A definition for API extension: ``external-gateway-multihoming``."},{"line_number":5,"context_line":"    This API definition was merged as experimental. At the moment this"},{"line_number":6,"context_line":"    API does not have a reference implementation and should not be"},{"line_number":7,"context_line":"    considered final. A later release note will mark when the reference"}],"source_content_type":"text/x-yaml","patch_set":11,"id":"77ad73fb_4735adce","line":4,"range":{"start_line":4,"start_character":38,"end_line":4,"end_character":66},"in_reply_to":"fac087ed_a3f252fe","updated":"2023-03-27 10:45:05.000000000","message":"Done","commit_id":"98419874d4c5109072fc1621a901b6ba1c73c9eb"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"de9ddb7896986b4503f13bec2e4849ce04f17678","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":"    A definition for API extension: ``external-gateway-multihoming``."},{"line_number":5,"context_line":"    This API definition was merged as experimental. At the moment this"},{"line_number":6,"context_line":"    API does not have a reference implementation and should not be"}],"source_content_type":"text/x-yaml","patch_set":18,"id":"23ade153_5a12f609","line":3,"updated":"2023-04-20 09:39:48.000000000","message":"nit: all 3 extensions should be here (I am fine if ti will be added in the final reno)","commit_id":"d9356e83cb6c2e6db513429c7f1036927410ce21"},{"author":{"_account_id":24824,"name":"Dmitrii Shcherbakov","username":"dmitriis"},"change_message_id":"50cfa5f7c0b5ab10fce9d9ccb9cca077338d63fe","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":"    A definition for API extension: ``external-gateway-multihoming``."},{"line_number":5,"context_line":"    This API definition was merged as experimental. At the moment this"},{"line_number":6,"context_line":"    API does not have a reference implementation and should not be"}],"source_content_type":"text/x-yaml","patch_set":18,"id":"580df8ec_6b0aea57","line":3,"in_reply_to":"0f338926_9dd6945b","updated":"2023-04-20 14:45:46.000000000","message":"Done","commit_id":"d9356e83cb6c2e6db513429c7f1036927410ce21"},{"author":{"_account_id":24824,"name":"Dmitrii Shcherbakov","username":"dmitriis"},"change_message_id":"0ac49170ff6dde84d263588deabbfb32c4093f97","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":"    A definition for API extension: ``external-gateway-multihoming``."},{"line_number":5,"context_line":"    This API definition was merged as experimental. At the moment this"},{"line_number":6,"context_line":"    API does not have a reference implementation and should not be"}],"source_content_type":"text/x-yaml","patch_set":18,"id":"0f338926_9dd6945b","line":3,"in_reply_to":"23ade153_5a12f609","updated":"2023-04-20 10:17:10.000000000","message":"Ack, I can raise a follow-up to avoid another recheck.","commit_id":"d9356e83cb6c2e6db513429c7f1036927410ce21"}]}
