)]}'
{"neutron_lib/api/definitions/base.py":[{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"08746b2c8eaeb306513f3c70fecfa3b83542c402","unresolved":false,"context_lines":[{"line_number":37,"context_line":"    \u0027min_prefixlen\u0027,"},{"line_number":38,"context_line":"    \u0027name\u0027,"},{"line_number":39,"context_line":"    \u0027network_id\u0027,"},{"line_number":40,"context_line":"    \u0027network_segment_range_id\u0027,"},{"line_number":41,"context_line":"    \u0027port_id\u0027,"},{"line_number":42,"context_line":"    \u0027prefixes\u0027,"},{"line_number":43,"context_line":"    \u0027prefixlen\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"3f79a3b5_18a3fab0","line":40,"range":{"start_line":40,"start_character":5,"end_line":40,"end_character":29},"updated":"2018-12-21 17:11:52.000000000","message":"Couldn\u0027t find this attribute used in anywhere. Unrelated change?","commit_id":"485253680a9674df11a4cd8f420df5f04b8d6db1"},{"author":{"_account_id":28373,"name":"Kailun Qin","email":"kailun.qin@hotmail.com","username":"kailun.qin"},"change_message_id":"8e38ab3e4a4b9d0ef3b8da65d18d79f3b9dffc5e","unresolved":false,"context_lines":[{"line_number":37,"context_line":"    \u0027min_prefixlen\u0027,"},{"line_number":38,"context_line":"    \u0027name\u0027,"},{"line_number":39,"context_line":"    \u0027network_id\u0027,"},{"line_number":40,"context_line":"    \u0027network_segment_range_id\u0027,"},{"line_number":41,"context_line":"    \u0027port_id\u0027,"},{"line_number":42,"context_line":"    \u0027prefixes\u0027,"},{"line_number":43,"context_line":"    \u0027prefixlen\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"3f79a3b5_070156b4","line":40,"range":{"start_line":40,"start_character":5,"end_line":40,"end_character":29},"in_reply_to":"3f79a3b5_18a3fab0","updated":"2018-12-21 22:24:23.000000000","message":"Yes, I missed to remove this placeholder somehow. Thanks.","commit_id":"485253680a9674df11a4cd8f420df5f04b8d6db1"}],"neutron_lib/api/definitions/network_segment_range.py":[{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"4d72c8115ba2aaba74b80a583ecdaee1593fbdcf","unresolved":false,"context_lines":[{"line_number":25,"context_line":"# The alias of the extension."},{"line_number":26,"context_line":"ALIAS \u003d \u0027network-segment-range\u0027"},{"line_number":27,"context_line":"# The description of the extension."},{"line_number":28,"context_line":"DESCRIPTION \u003d \"Network segment range abstraction\""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"# A timestamp of when the extension was introduced."},{"line_number":31,"context_line":"UPDATED_TIMESTAMP \u003d \"2018-11-29T00:00:00-00:00\""}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_3dd285d1","line":28,"range":{"start_line":28,"start_character":37,"end_line":28,"end_character":48},"updated":"2018-12-20 10:31:17.000000000","message":"it\u0027s not abstraction. You should describe here shortly what feature this API extension provides.","commit_id":"85f39d147b03a7eaac59f2db2d411a06e7399165"},{"author":{"_account_id":28373,"name":"Kailun Qin","email":"kailun.qin@hotmail.com","username":"kailun.qin"},"change_message_id":"8e15eacdfb0bf37aba2d17e30a4e90e3b4f108ac","unresolved":false,"context_lines":[{"line_number":25,"context_line":"# The alias of the extension."},{"line_number":26,"context_line":"ALIAS \u003d \u0027network-segment-range\u0027"},{"line_number":27,"context_line":"# The description of the extension."},{"line_number":28,"context_line":"DESCRIPTION \u003d \"Network segment range abstraction\""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"# A timestamp of when the extension was introduced."},{"line_number":31,"context_line":"UPDATED_TIMESTAMP \u003d \"2018-11-29T00:00:00-00:00\""}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_efe1a597","line":28,"range":{"start_line":28,"start_character":37,"end_line":28,"end_character":48},"in_reply_to":"3f79a3b5_3dd285d1","updated":"2018-12-21 01:56:24.000000000","message":"Done","commit_id":"85f39d147b03a7eaac59f2db2d411a06e7399165"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"4d72c8115ba2aaba74b80a583ecdaee1593fbdcf","unresolved":false,"context_lines":[{"line_number":55,"context_line":"                 \u0027is_filter\u0027: True,"},{"line_number":56,"context_line":"                 \u0027is_sort_key\u0027: True,"},{"line_number":57,"context_line":"                 \u0027is_visible\u0027: True},"},{"line_number":58,"context_line":"        \u0027default\u0027: {\u0027allow_post\u0027: False,"},{"line_number":59,"context_line":"                    \u0027allow_put\u0027: False,"},{"line_number":60,"context_line":"                    \u0027convert_to\u0027: converters.convert_to_boolean,"},{"line_number":61,"context_line":"                    \u0027default\u0027: False,"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_ddba716e","line":58,"updated":"2018-12-20 10:31:17.000000000","message":"there is no such attribute in specs: https://specs.openstack.org/openstack/neutron-specs/specs/stein/network-segment-range-management.html#resource-extension","commit_id":"85f39d147b03a7eaac59f2db2d411a06e7399165"},{"author":{"_account_id":28373,"name":"Kailun Qin","email":"kailun.qin@hotmail.com","username":"kailun.qin"},"change_message_id":"19d28508d3cc2eec5570b28e1355be828339ef23","unresolved":false,"context_lines":[{"line_number":55,"context_line":"                 \u0027is_filter\u0027: True,"},{"line_number":56,"context_line":"                 \u0027is_sort_key\u0027: True,"},{"line_number":57,"context_line":"                 \u0027is_visible\u0027: True},"},{"line_number":58,"context_line":"        \u0027default\u0027: {\u0027allow_post\u0027: False,"},{"line_number":59,"context_line":"                    \u0027allow_put\u0027: False,"},{"line_number":60,"context_line":"                    \u0027convert_to\u0027: converters.convert_to_boolean,"},{"line_number":61,"context_line":"                    \u0027default\u0027: False,"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_21724c19","line":58,"in_reply_to":"3f79a3b5_66adbae6","updated":"2018-12-21 10:42:20.000000000","message":"We will reload the `default` segment ranges when Neutron server starts/restarts. Please kindly refer to the commit msg of [1] for detailed information.\nAs the current design considers network segment range as a purely logic resource. We do not really \"care\" whether the old default range has already been used or not. We\u0027ll simply re-populate the ranges into the proposed segment range DB table, but always rely on the underlying ML2 segment allocation DB tables and `_sync_vlan_allocations` in type drivers to handle the actual updates.\n\n[1] https://review.openstack.org/#/c/624709/","commit_id":"85f39d147b03a7eaac59f2db2d411a06e7399165"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"f986b1f59cdf9b031bc43f6d5768e5acf8228851","unresolved":false,"context_lines":[{"line_number":55,"context_line":"                 \u0027is_filter\u0027: True,"},{"line_number":56,"context_line":"                 \u0027is_sort_key\u0027: True,"},{"line_number":57,"context_line":"                 \u0027is_visible\u0027: True},"},{"line_number":58,"context_line":"        \u0027default\u0027: {\u0027allow_post\u0027: False,"},{"line_number":59,"context_line":"                    \u0027allow_put\u0027: False,"},{"line_number":60,"context_line":"                    \u0027convert_to\u0027: converters.convert_to_boolean,"},{"line_number":61,"context_line":"                    \u0027default\u0027: False,"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_e1b0cae1","line":58,"in_reply_to":"3f79a3b5_804d7039","updated":"2018-12-21 19:31:53.000000000","message":"@Kailun,\n\nCould you update the spec to write down this new proposed change?","commit_id":"85f39d147b03a7eaac59f2db2d411a06e7399165"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"3a475f5f23b6e036dcf909673ce1d37b266d5443","unresolved":false,"context_lines":[{"line_number":55,"context_line":"                 \u0027is_filter\u0027: True,"},{"line_number":56,"context_line":"                 \u0027is_sort_key\u0027: True,"},{"line_number":57,"context_line":"                 \u0027is_visible\u0027: True},"},{"line_number":58,"context_line":"        \u0027default\u0027: {\u0027allow_post\u0027: False,"},{"line_number":59,"context_line":"                    \u0027allow_put\u0027: False,"},{"line_number":60,"context_line":"                    \u0027convert_to\u0027: converters.convert_to_boolean,"},{"line_number":61,"context_line":"                    \u0027default\u0027: False,"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_66adbae6","line":58,"in_reply_to":"3f79a3b5_804d7039","updated":"2018-12-21 07:34:21.000000000","message":"Ok, thx for explanation.\nBut what if admin will change range in config file and then restart process? How You want to handle that if \"old\" default\" range will be already used?","commit_id":"85f39d147b03a7eaac59f2db2d411a06e7399165"},{"author":{"_account_id":28373,"name":"Kailun Qin","email":"kailun.qin@hotmail.com","username":"kailun.qin"},"change_message_id":"64cb5a7249f7295cd8c9562c0bdda205e59ff317","unresolved":false,"context_lines":[{"line_number":55,"context_line":"                 \u0027is_filter\u0027: True,"},{"line_number":56,"context_line":"                 \u0027is_sort_key\u0027: True,"},{"line_number":57,"context_line":"                 \u0027is_visible\u0027: True},"},{"line_number":58,"context_line":"        \u0027default\u0027: {\u0027allow_post\u0027: False,"},{"line_number":59,"context_line":"                    \u0027allow_put\u0027: False,"},{"line_number":60,"context_line":"                    \u0027convert_to\u0027: converters.convert_to_boolean,"},{"line_number":61,"context_line":"                    \u0027default\u0027: False,"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_804d7039","line":58,"in_reply_to":"3f79a3b5_ddba716e","updated":"2018-12-20 10:48:12.000000000","message":"Based on the following requirements:\n1. We need the shared range creation ability for admins.\n2. We need to keep network segment range feature usage as user-friendly as we can, i.e. having the underlying ranges exposed so that per-tenant range arrangement can be based on that.\n3. We need to handle the range DB refresh each time the server starts/restarts.\n4. We should try our best to maintain backward compatibility based on the community feedbacks, i.e. not changing the original flow w/ or w/o the extension’s loaded.\n5. It is reasonable to use the values in the config file to populate the initial values if no other ranges exist.\n\nWe’d like to propose the below updates:\n1. Maintain an additional/separate “read-only” attribute “default” that tracks whether this is a range that is managed from the configuration file. When Neutron server starts/restarts, it will populate the values in the config files into the range DB w/ default\u003dTrue, shared\u003dTrue.\n2. An admin is able to create a range either shared or non-shared but w/ a valid project_id. But none of these are “default” ranges so default\u003dFalse.\n3. When a tenant allocates a segment, it will first allocate from an available segment range assigned to the it, and then a shared (including \"default\") range if no tenant specific allocation is possible.","commit_id":"85f39d147b03a7eaac59f2db2d411a06e7399165"},{"author":{"_account_id":28373,"name":"Kailun Qin","email":"kailun.qin@hotmail.com","username":"kailun.qin"},"change_message_id":"8e38ab3e4a4b9d0ef3b8da65d18d79f3b9dffc5e","unresolved":false,"context_lines":[{"line_number":55,"context_line":"                 \u0027is_filter\u0027: True,"},{"line_number":56,"context_line":"                 \u0027is_sort_key\u0027: True,"},{"line_number":57,"context_line":"                 \u0027is_visible\u0027: True},"},{"line_number":58,"context_line":"        \u0027default\u0027: {\u0027allow_post\u0027: False,"},{"line_number":59,"context_line":"                    \u0027allow_put\u0027: False,"},{"line_number":60,"context_line":"                    \u0027convert_to\u0027: converters.convert_to_boolean,"},{"line_number":61,"context_line":"                    \u0027default\u0027: False,"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_e7cbfa7b","line":58,"in_reply_to":"3f79a3b5_e1b0cae1","updated":"2018-12-21 22:24:23.000000000","message":"Sure. I\u0027ll definitely make a spec update for this along w/ some other nit changes cited by Nate in [1].\n\n[1] https://review.openstack.org/#/c/599980","commit_id":"85f39d147b03a7eaac59f2db2d411a06e7399165"},{"author":{"_account_id":28373,"name":"Kailun Qin","email":"kailun.qin@hotmail.com","username":"kailun.qin"},"change_message_id":"4621b371cddc104c53161cc68f96dddff79eee65","unresolved":false,"context_lines":[{"line_number":55,"context_line":"                 \u0027is_filter\u0027: True,"},{"line_number":56,"context_line":"                 \u0027is_sort_key\u0027: True,"},{"line_number":57,"context_line":"                 \u0027is_visible\u0027: True},"},{"line_number":58,"context_line":"        \u0027default\u0027: {\u0027allow_post\u0027: False,"},{"line_number":59,"context_line":"                    \u0027allow_put\u0027: False,"},{"line_number":60,"context_line":"                    \u0027convert_to\u0027: converters.convert_to_boolean,"},{"line_number":61,"context_line":"                    \u0027default\u0027: False,"}],"source_content_type":"text/x-python","patch_set":1,"id":"1f769fc5_cb66cb52","line":58,"in_reply_to":"3f79a3b5_e7cbfa7b","updated":"2018-12-25 07:01:18.000000000","message":"Please kindly see the spec update for `default` @ https://review.openstack.org/#/c/627226/","commit_id":"85f39d147b03a7eaac59f2db2d411a06e7399165"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"4d72c8115ba2aaba74b80a583ecdaee1593fbdcf","unresolved":false,"context_lines":[{"line_number":55,"context_line":"                 \u0027is_filter\u0027: True,"},{"line_number":56,"context_line":"                 \u0027is_sort_key\u0027: True,"},{"line_number":57,"context_line":"                 \u0027is_visible\u0027: True},"},{"line_number":58,"context_line":"        \u0027default\u0027: {\u0027allow_post\u0027: False,"},{"line_number":59,"context_line":"                    \u0027allow_put\u0027: False,"},{"line_number":60,"context_line":"                    \u0027convert_to\u0027: converters.convert_to_boolean,"},{"line_number":61,"context_line":"                    \u0027default\u0027: False,"},{"line_number":62,"context_line":"                    \u0027is_visible\u0027: True},"},{"line_number":63,"context_line":"        constants.SHARED: {\u0027allow_post\u0027: True,"},{"line_number":64,"context_line":"                           \u0027allow_put\u0027: False,"},{"line_number":65,"context_line":"                           \u0027convert_to\u0027: converters.convert_to_boolean,"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_7dab1d20","line":62,"range":{"start_line":58,"start_character":8,"end_line":62,"end_character":40},"updated":"2018-12-20 10:31:17.000000000","message":"there is no such attribute in merged specs: https://specs.openstack.org/openstack/neutron-specs/specs/stein/network-segment-range-management.html#resource-extension","commit_id":"85f39d147b03a7eaac59f2db2d411a06e7399165"},{"author":{"_account_id":28373,"name":"Kailun Qin","email":"kailun.qin@hotmail.com","username":"kailun.qin"},"change_message_id":"64cb5a7249f7295cd8c9562c0bdda205e59ff317","unresolved":false,"context_lines":[{"line_number":55,"context_line":"                 \u0027is_filter\u0027: True,"},{"line_number":56,"context_line":"                 \u0027is_sort_key\u0027: True,"},{"line_number":57,"context_line":"                 \u0027is_visible\u0027: True},"},{"line_number":58,"context_line":"        \u0027default\u0027: {\u0027allow_post\u0027: False,"},{"line_number":59,"context_line":"                    \u0027allow_put\u0027: False,"},{"line_number":60,"context_line":"                    \u0027convert_to\u0027: converters.convert_to_boolean,"},{"line_number":61,"context_line":"                    \u0027default\u0027: False,"},{"line_number":62,"context_line":"                    \u0027is_visible\u0027: True},"},{"line_number":63,"context_line":"        constants.SHARED: {\u0027allow_post\u0027: True,"},{"line_number":64,"context_line":"                           \u0027allow_put\u0027: False,"},{"line_number":65,"context_line":"                           \u0027convert_to\u0027: converters.convert_to_boolean,"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_60edb4ff","line":62,"range":{"start_line":58,"start_character":8,"end_line":62,"end_character":40},"in_reply_to":"3f79a3b5_7dab1d20","updated":"2018-12-20 10:48:12.000000000","message":"This attribute is proposed due to the reasons cited above. A spec update is needed. Let me know if any comment.","commit_id":"85f39d147b03a7eaac59f2db2d411a06e7399165"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"d87c9ee42a4e042840df580aa8d873c3d32c5c94","unresolved":false,"context_lines":[{"line_number":89,"context_line":"                             \u0027is_filter\u0027: True,"},{"line_number":90,"context_line":"                             \u0027is_visible\u0027: True},"},{"line_number":91,"context_line":"        \u0027minimum\u0027: {\u0027allow_post\u0027: True,"},{"line_number":92,"context_line":"                    \u0027allow_put\u0027: True,"},{"line_number":93,"context_line":"                    \u0027convert_to\u0027: converters.convert_to_int,"},{"line_number":94,"context_line":"                    \u0027is_visible\u0027: True},"},{"line_number":95,"context_line":"        \u0027maximum\u0027: {\u0027allow_post\u0027: True,"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_2f6b2787","line":92,"updated":"2018-12-20 15:21:43.000000000","message":"Sorry, again, min value for this is necessary.","commit_id":"85f39d147b03a7eaac59f2db2d411a06e7399165"},{"author":{"_account_id":28373,"name":"Kailun Qin","email":"kailun.qin@hotmail.com","username":"kailun.qin"},"change_message_id":"8e15eacdfb0bf37aba2d17e30a4e90e3b4f108ac","unresolved":false,"context_lines":[{"line_number":89,"context_line":"                             \u0027is_filter\u0027: True,"},{"line_number":90,"context_line":"                             \u0027is_visible\u0027: True},"},{"line_number":91,"context_line":"        \u0027minimum\u0027: {\u0027allow_post\u0027: True,"},{"line_number":92,"context_line":"                    \u0027allow_put\u0027: True,"},{"line_number":93,"context_line":"                    \u0027convert_to\u0027: converters.convert_to_int,"},{"line_number":94,"context_line":"                    \u0027is_visible\u0027: True},"},{"line_number":95,"context_line":"        \u0027maximum\u0027: {\u0027allow_post\u0027: True,"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_f2d4281f","line":92,"in_reply_to":"3f79a3b5_2f6b2787","updated":"2018-12-21 01:56:24.000000000","message":"Thanks, done.","commit_id":"85f39d147b03a7eaac59f2db2d411a06e7399165"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"4d72c8115ba2aaba74b80a583ecdaee1593fbdcf","unresolved":false,"context_lines":[{"line_number":98,"context_line":"                    \u0027is_visible\u0027: True},"},{"line_number":99,"context_line":"        \u0027used\u0027: {\u0027allow_post\u0027: False,"},{"line_number":100,"context_line":"                 \u0027allow_put\u0027: False,"},{"line_number":101,"context_line":"                 \u0027is_visible\u0027: True},"},{"line_number":102,"context_line":"        \u0027available\u0027: {\u0027allow_post\u0027: False,"},{"line_number":103,"context_line":"                      \u0027allow_put\u0027: False,"},{"line_number":104,"context_line":"                      \u0027convert_to\u0027: converters.convert_none_to_empty_list,"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_9d65d91d","line":101,"updated":"2018-12-20 10:31:17.000000000","message":"shouldn\u0027t this be converted to boolean maybe?","commit_id":"85f39d147b03a7eaac59f2db2d411a06e7399165"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"3a475f5f23b6e036dcf909673ce1d37b266d5443","unresolved":false,"context_lines":[{"line_number":98,"context_line":"                    \u0027is_visible\u0027: True},"},{"line_number":99,"context_line":"        \u0027used\u0027: {\u0027allow_post\u0027: False,"},{"line_number":100,"context_line":"                 \u0027allow_put\u0027: False,"},{"line_number":101,"context_line":"                 \u0027is_visible\u0027: True},"},{"line_number":102,"context_line":"        \u0027available\u0027: {\u0027allow_post\u0027: False,"},{"line_number":103,"context_line":"                      \u0027allow_put\u0027: False,"},{"line_number":104,"context_line":"                      \u0027convert_to\u0027: converters.convert_none_to_empty_list,"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_86a816d7","line":101,"in_reply_to":"3f79a3b5_601614f6","updated":"2018-12-21 07:34:21.000000000","message":"Right, Sorry that I forgot about it :)","commit_id":"85f39d147b03a7eaac59f2db2d411a06e7399165"},{"author":{"_account_id":28373,"name":"Kailun Qin","email":"kailun.qin@hotmail.com","username":"kailun.qin"},"change_message_id":"64cb5a7249f7295cd8c9562c0bdda205e59ff317","unresolved":false,"context_lines":[{"line_number":98,"context_line":"                    \u0027is_visible\u0027: True},"},{"line_number":99,"context_line":"        \u0027used\u0027: {\u0027allow_post\u0027: False,"},{"line_number":100,"context_line":"                 \u0027allow_put\u0027: False,"},{"line_number":101,"context_line":"                 \u0027is_visible\u0027: True},"},{"line_number":102,"context_line":"        \u0027available\u0027: {\u0027allow_post\u0027: False,"},{"line_number":103,"context_line":"                      \u0027allow_put\u0027: False,"},{"line_number":104,"context_line":"                      \u0027convert_to\u0027: converters.convert_none_to_empty_list,"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_601614f6","line":101,"in_reply_to":"3f79a3b5_9d65d91d","updated":"2018-12-20 10:48:12.000000000","message":"According to the merged spec, this field should indicate the mapping of \"segmentation_id: project_id\" in a dict format, e.g. {100: \"07ac1127ee9647d48ce2626867104a13\"}.","commit_id":"85f39d147b03a7eaac59f2db2d411a06e7399165"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"e2d4b579278a335b866a240ec2964fdb1aaf4b90","unresolved":false,"context_lines":[{"line_number":40,"context_line":"                                   constants.TYPE_GRE,"},{"line_number":41,"context_line":"                                   constants.TYPE_GENEVE]"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"NETWORK_SEGMENT_RANGE_LIMIT \u003d [1, constants.MAX_GRE_ID]"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"RESOURCE_ATTRIBUTE_MAP \u003d {"},{"line_number":46,"context_line":"    COLLECTION_NAME: {"}],"source_content_type":"text/x-python","patch_set":8,"id":"1f769fc5_1bddc36f","line":43,"updated":"2019-01-02 09:26:28.000000000","message":"nit: You can use MIN_GRE_ID instead of 1 here too,\nand also maybe it\u0027s worth to add some short comment why MAX_GRE_ID is used here instead of e.g. MAX_VXLAN_ID :)","commit_id":"da03e1a5627a9d267d18144960aa7ea65c5a47a8"},{"author":{"_account_id":28373,"name":"Kailun Qin","email":"kailun.qin@hotmail.com","username":"kailun.qin"},"change_message_id":"cb3c0fa9084da73d109465d43380907cb89362d0","unresolved":false,"context_lines":[{"line_number":40,"context_line":"                                   constants.TYPE_GRE,"},{"line_number":41,"context_line":"                                   constants.TYPE_GENEVE]"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"NETWORK_SEGMENT_RANGE_LIMIT \u003d [1, constants.MAX_GRE_ID]"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"RESOURCE_ATTRIBUTE_MAP \u003d {"},{"line_number":46,"context_line":"    COLLECTION_NAME: {"}],"source_content_type":"text/x-python","patch_set":8,"id":"1f769fc5_c198be1c","line":43,"in_reply_to":"1f769fc5_1bddc36f","updated":"2019-01-02 12:19:27.000000000","message":"Done","commit_id":"da03e1a5627a9d267d18144960aa7ea65c5a47a8"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"1922d19a79a2fd64d9d063c7559d62c65ad4e399","unresolved":false,"context_lines":[{"line_number":134,"context_line":"ACTION_MAP \u003d {}"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"# The list of required extensions."},{"line_number":137,"context_line":"REQUIRED_EXTENSIONS \u003d []"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"# The list of optional extensions."},{"line_number":140,"context_line":"OPTIONAL_EXTENSIONS \u003d []"}],"source_content_type":"text/x-python","patch_set":8,"id":"1f769fc5_95bc4906","line":137,"updated":"2018-12-31 17:19:52.000000000","message":"This doesn\u0027t require the \u0027segment\u0027 extension?","commit_id":"da03e1a5627a9d267d18144960aa7ea65c5a47a8"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"79d0680819b20ff254dbd628f300b836fe76d383","unresolved":false,"context_lines":[{"line_number":134,"context_line":"ACTION_MAP \u003d {}"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"# The list of required extensions."},{"line_number":137,"context_line":"REQUIRED_EXTENSIONS \u003d []"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"# The list of optional extensions."},{"line_number":140,"context_line":"OPTIONAL_EXTENSIONS \u003d []"}],"source_content_type":"text/x-python","patch_set":8,"id":"1f769fc5_a406f085","line":137,"in_reply_to":"1f769fc5_210e523b","updated":"2019-01-02 12:44:33.000000000","message":"ML2 is only one of possible plugins to use. User can use something else like Midonet, Calico or others. So You should specify it here","commit_id":"da03e1a5627a9d267d18144960aa7ea65c5a47a8"},{"author":{"_account_id":28373,"name":"Kailun Qin","email":"kailun.qin@hotmail.com","username":"kailun.qin"},"change_message_id":"cb3c0fa9084da73d109465d43380907cb89362d0","unresolved":false,"context_lines":[{"line_number":134,"context_line":"ACTION_MAP \u003d {}"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"# The list of required extensions."},{"line_number":137,"context_line":"REQUIRED_EXTENSIONS \u003d []"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"# The list of optional extensions."},{"line_number":140,"context_line":"OPTIONAL_EXTENSIONS \u003d []"}],"source_content_type":"text/x-python","patch_set":8,"id":"1f769fc5_210e523b","line":137,"in_reply_to":"1f769fc5_5b0fbbe0","updated":"2019-01-02 12:19:27.000000000","message":"Yes, provider extension is required.\nHowever, as \"provider\" extension is added directly to the core/ML2 plugin, loaded by default and has no option to disable, do we need to specify it explicitly here?\nI noticed that multiprovidernet [1] and segment [2] do not require \"provider\" extension neither.\n\n[1] https://github.com/openstack/neutron-lib/blob/master/neutron_lib/api/definitions/multiprovidernet.py#L69\n[2] https://github.com/openstack/neutron-lib/blob/master/neutron_lib/api/definitions/segment.py#L125","commit_id":"da03e1a5627a9d267d18144960aa7ea65c5a47a8"},{"author":{"_account_id":28373,"name":"Kailun Qin","email":"kailun.qin@hotmail.com","username":"kailun.qin"},"change_message_id":"da989c7e719909e276194cf28f6bd205bb44b1dd","unresolved":false,"context_lines":[{"line_number":134,"context_line":"ACTION_MAP \u003d {}"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"# The list of required extensions."},{"line_number":137,"context_line":"REQUIRED_EXTENSIONS \u003d []"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"# The list of optional extensions."},{"line_number":140,"context_line":"OPTIONAL_EXTENSIONS \u003d []"}],"source_content_type":"text/x-python","patch_set":8,"id":"1f769fc5_9c946e46","line":137,"in_reply_to":"1f769fc5_95bc4906","updated":"2019-01-02 06:20:23.000000000","message":"According to [1], `segment` extension aims to support routed networks in Neutron. The network segment range extension introduced here can support routed networks based on `segment` extension when it\u0027s loaded, but it also supports basic (non-routed) tenant networks\u0027 segment allocation. So IMO, `segment` extension is not a must.\n\n[1] https://blueprints.launchpad.net/neutron/+spec/routed-networks","commit_id":"da03e1a5627a9d267d18144960aa7ea65c5a47a8"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"e2d4b579278a335b866a240ec2964fdb1aaf4b90","unresolved":false,"context_lines":[{"line_number":134,"context_line":"ACTION_MAP \u003d {}"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"# The list of required extensions."},{"line_number":137,"context_line":"REQUIRED_EXTENSIONS \u003d []"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"# The list of optional extensions."},{"line_number":140,"context_line":"OPTIONAL_EXTENSIONS \u003d []"}],"source_content_type":"text/x-python","patch_set":8,"id":"1f769fc5_5b0fbbe0","line":137,"in_reply_to":"1f769fc5_9c946e46","updated":"2019-01-02 09:26:28.000000000","message":"But I think that \"provider\" extension is required as it\u0027s the extension which provides segmentation_id attribute to network resource: https://github.com/openstack/neutron-lib/blob/56033ba643812a30577f6ab17648806c2ee494ba/neutron_lib/api/definitions/provider_net.py","commit_id":"da03e1a5627a9d267d18144960aa7ea65c5a47a8"},{"author":{"_account_id":28373,"name":"Kailun Qin","email":"kailun.qin@hotmail.com","username":"kailun.qin"},"change_message_id":"2b37e804205f6036846c04ec20a262ac36896bb4","unresolved":false,"context_lines":[{"line_number":134,"context_line":"ACTION_MAP \u003d {}"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"# The list of required extensions."},{"line_number":137,"context_line":"REQUIRED_EXTENSIONS \u003d []"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"# The list of optional extensions."},{"line_number":140,"context_line":"OPTIONAL_EXTENSIONS \u003d []"}],"source_content_type":"text/x-python","patch_set":8,"id":"1f769fc5_ef77e139","line":137,"in_reply_to":"1f769fc5_a406f085","updated":"2019-01-02 12:59:33.000000000","message":"Specified, thanks.","commit_id":"da03e1a5627a9d267d18144960aa7ea65c5a47a8"}],"neutron_lib/exceptions/network_segment_range.py":[{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"4d72c8115ba2aaba74b80a583ecdaee1593fbdcf","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"class NetworkSegmentRangeNetTypeNotSupported(exceptions.NeutronException):"},{"line_number":20,"context_line":"    message \u003d _(\"Network Segment Range network type %(type)s not supported\")"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"class NetworkSegmentRangeNotFoundById(exceptions.NotFound):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_7d39ddf7","line":20,"range":{"start_line":20,"start_character":17,"end_line":20,"end_character":74},"updated":"2018-12-20 10:31:17.000000000","message":"maybe something like:\n\n\"Network type %(type)s do not support segment ranges.\"","commit_id":"85f39d147b03a7eaac59f2db2d411a06e7399165"},{"author":{"_account_id":28373,"name":"Kailun Qin","email":"kailun.qin@hotmail.com","username":"kailun.qin"},"change_message_id":"8e15eacdfb0bf37aba2d17e30a4e90e3b4f108ac","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"class NetworkSegmentRangeNetTypeNotSupported(exceptions.NeutronException):"},{"line_number":20,"context_line":"    message \u003d _(\"Network Segment Range network type %(type)s not supported\")"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"class NetworkSegmentRangeNotFoundById(exceptions.NotFound):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_32b860e5","line":20,"range":{"start_line":20,"start_character":17,"end_line":20,"end_character":74},"in_reply_to":"3f79a3b5_7d39ddf7","updated":"2018-12-21 01:56:24.000000000","message":"Done","commit_id":"85f39d147b03a7eaac59f2db2d411a06e7399165"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"4d72c8115ba2aaba74b80a583ecdaee1593fbdcf","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"class NetworkSegmentRangeNotFoundById(exceptions.NotFound):"},{"line_number":24,"context_line":"    message \u003d _(\"Network Segment Range %(id)s could not be found\")"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"class NetworkSegmentRangeNotFoundByName(exceptions.NotFound):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_7d079d21","line":24,"range":{"start_line":24,"start_character":59,"end_line":24,"end_character":64},"updated":"2018-12-20 10:31:17.000000000","message":"missing dot at the end of sentence","commit_id":"85f39d147b03a7eaac59f2db2d411a06e7399165"},{"author":{"_account_id":28373,"name":"Kailun Qin","email":"kailun.qin@hotmail.com","username":"kailun.qin"},"change_message_id":"8e15eacdfb0bf37aba2d17e30a4e90e3b4f108ac","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"class NetworkSegmentRangeNotFoundById(exceptions.NotFound):"},{"line_number":24,"context_line":"    message \u003d _(\"Network Segment Range %(id)s could not be found\")"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"class NetworkSegmentRangeNotFoundByName(exceptions.NotFound):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_129a0474","line":24,"range":{"start_line":24,"start_character":59,"end_line":24,"end_character":64},"in_reply_to":"3f79a3b5_7d079d21","updated":"2018-12-21 01:56:24.000000000","message":"Done","commit_id":"85f39d147b03a7eaac59f2db2d411a06e7399165"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"4d72c8115ba2aaba74b80a583ecdaee1593fbdcf","unresolved":false,"context_lines":[{"line_number":24,"context_line":"    message \u003d _(\"Network Segment Range %(id)s could not be found\")"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"class NetworkSegmentRangeNotFoundByName(exceptions.NotFound):"},{"line_number":28,"context_line":"    message \u003d _(\"Network Segment Range %(name)s could not be found\")"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"class NetworkSegmentRangeNameAlreadyExists(exceptions.NeutronException):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_3d57e52a","line":28,"range":{"start_line":27,"start_character":0,"end_line":28,"end_character":68},"updated":"2018-12-20 10:31:17.000000000","message":"it\u0027s duplicate of above class","commit_id":"85f39d147b03a7eaac59f2db2d411a06e7399165"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"4d72c8115ba2aaba74b80a583ecdaee1593fbdcf","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"class NetworkSegmentRangeNotFoundByName(exceptions.NotFound):"},{"line_number":28,"context_line":"    message \u003d _(\"Network Segment Range %(name)s could not be found\")"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"class NetworkSegmentRangeNameAlreadyExists(exceptions.NeutronException):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_9d0cf943","line":28,"range":{"start_line":28,"start_character":61,"end_line":28,"end_character":66},"updated":"2018-12-20 10:31:17.000000000","message":"missing dot at the end of sentence","commit_id":"85f39d147b03a7eaac59f2db2d411a06e7399165"},{"author":{"_account_id":28373,"name":"Kailun Qin","email":"kailun.qin@hotmail.com","username":"kailun.qin"},"change_message_id":"8e15eacdfb0bf37aba2d17e30a4e90e3b4f108ac","unresolved":false,"context_lines":[{"line_number":24,"context_line":"    message \u003d _(\"Network Segment Range %(id)s could not be found\")"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"class NetworkSegmentRangeNotFoundByName(exceptions.NotFound):"},{"line_number":28,"context_line":"    message \u003d _(\"Network Segment Range %(name)s could not be found\")"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"class NetworkSegmentRangeNameAlreadyExists(exceptions.NeutronException):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_329dc06a","line":28,"range":{"start_line":27,"start_character":0,"end_line":28,"end_character":68},"in_reply_to":"3f79a3b5_3d57e52a","updated":"2018-12-21 01:56:24.000000000","message":"Merged.","commit_id":"85f39d147b03a7eaac59f2db2d411a06e7399165"},{"author":{"_account_id":28373,"name":"Kailun Qin","email":"kailun.qin@hotmail.com","username":"kailun.qin"},"change_message_id":"8e15eacdfb0bf37aba2d17e30a4e90e3b4f108ac","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"class NetworkSegmentRangeNotFoundByName(exceptions.NotFound):"},{"line_number":28,"context_line":"    message \u003d _(\"Network Segment Range %(name)s could not be found\")"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"class NetworkSegmentRangeNameAlreadyExists(exceptions.NeutronException):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_328b8016","line":28,"range":{"start_line":28,"start_character":61,"end_line":28,"end_character":66},"in_reply_to":"3f79a3b5_9d0cf943","updated":"2018-12-21 01:56:24.000000000","message":"Done","commit_id":"85f39d147b03a7eaac59f2db2d411a06e7399165"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"4d72c8115ba2aaba74b80a583ecdaee1593fbdcf","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    message \u003d _(\"Network Segment Range %(name)s could not be found\")"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"class NetworkSegmentRangeNameAlreadyExists(exceptions.NeutronException):"},{"line_number":32,"context_line":"    message \u003d _(\"Network Segment Range with name %(name)s already exists\")"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"class NetworkSegmentRangeReferencedByTenant(exceptions.NeutronException):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_dd2d91ad","line":32,"range":{"start_line":31,"start_character":0,"end_line":32,"end_character":74},"updated":"2018-12-20 10:31:17.000000000","message":"do we need such exception? Should name be unique if we have uuid?","commit_id":"85f39d147b03a7eaac59f2db2d411a06e7399165"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"4d72c8115ba2aaba74b80a583ecdaee1593fbdcf","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"class NetworkSegmentRangeNameAlreadyExists(exceptions.NeutronException):"},{"line_number":32,"context_line":"    message \u003d _(\"Network Segment Range with name %(name)s already exists\")"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"class NetworkSegmentRangeReferencedByTenant(exceptions.NeutronException):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_3d05a516","line":32,"range":{"start_line":32,"start_character":66,"end_line":32,"end_character":72},"updated":"2018-12-20 10:31:17.000000000","message":"missing dot at the end of sentence","commit_id":"85f39d147b03a7eaac59f2db2d411a06e7399165"},{"author":{"_account_id":28373,"name":"Kailun Qin","email":"kailun.qin@hotmail.com","username":"kailun.qin"},"change_message_id":"8e15eacdfb0bf37aba2d17e30a4e90e3b4f108ac","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"class NetworkSegmentRangeNameAlreadyExists(exceptions.NeutronException):"},{"line_number":32,"context_line":"    message \u003d _(\"Network Segment Range with name %(name)s already exists\")"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"class NetworkSegmentRangeReferencedByTenant(exceptions.NeutronException):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_32862017","line":32,"range":{"start_line":32,"start_character":66,"end_line":32,"end_character":72},"in_reply_to":"3f79a3b5_3d05a516","updated":"2018-12-21 01:56:24.000000000","message":"Done","commit_id":"85f39d147b03a7eaac59f2db2d411a06e7399165"},{"author":{"_account_id":28373,"name":"Kailun Qin","email":"kailun.qin@hotmail.com","username":"kailun.qin"},"change_message_id":"8e15eacdfb0bf37aba2d17e30a4e90e3b4f108ac","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    message \u003d _(\"Network Segment Range %(name)s could not be found\")"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"class NetworkSegmentRangeNameAlreadyExists(exceptions.NeutronException):"},{"line_number":32,"context_line":"    message \u003d _(\"Network Segment Range with name %(name)s already exists\")"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"class NetworkSegmentRangeReferencedByTenant(exceptions.NeutronException):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_f290a842","line":32,"range":{"start_line":31,"start_character":0,"end_line":32,"end_character":74},"in_reply_to":"3f79a3b5_dd2d91ad","updated":"2018-12-21 01:56:24.000000000","message":"Agree that we do not necessarily need such exception. Removed.","commit_id":"85f39d147b03a7eaac59f2db2d411a06e7399165"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"4d72c8115ba2aaba74b80a583ecdaee1593fbdcf","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    message \u003d _(\"Network Segment Range with name %(name)s already exists\")"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"class NetworkSegmentRangeReferencedByTenant(exceptions.NeutronException):"},{"line_number":36,"context_line":"    message \u003d _(\"Network range %(name)s is referenced by one or \""},{"line_number":37,"context_line":"                \"more tenant networks\")"},{"line_number":38,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_7d2ebda9","line":35,"range":{"start_line":35,"start_character":37,"end_line":35,"end_character":43},"updated":"2018-12-20 10:31:17.000000000","message":"Project?","commit_id":"85f39d147b03a7eaac59f2db2d411a06e7399165"},{"author":{"_account_id":28373,"name":"Kailun Qin","email":"kailun.qin@hotmail.com","username":"kailun.qin"},"change_message_id":"8e15eacdfb0bf37aba2d17e30a4e90e3b4f108ac","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    message \u003d _(\"Network Segment Range with name %(name)s already exists\")"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"class NetworkSegmentRangeReferencedByTenant(exceptions.NeutronException):"},{"line_number":36,"context_line":"    message \u003d _(\"Network range %(name)s is referenced by one or \""},{"line_number":37,"context_line":"                \"more tenant networks\")"},{"line_number":38,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_b288f024","line":35,"range":{"start_line":35,"start_character":37,"end_line":35,"end_character":43},"in_reply_to":"3f79a3b5_7d2ebda9","updated":"2018-12-21 01:56:24.000000000","message":"Done","commit_id":"85f39d147b03a7eaac59f2db2d411a06e7399165"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"4d72c8115ba2aaba74b80a583ecdaee1593fbdcf","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"class NetworkSegmentRangeReferencedByTenant(exceptions.NeutronException):"},{"line_number":36,"context_line":"    message \u003d _(\"Network range %(name)s is referenced by one or \""},{"line_number":37,"context_line":"                \"more tenant networks\")"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"class NetworkSegmentRangeDefaultReadOnly(exceptions.NeutronException):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_5d02e10e","line":37,"range":{"start_line":37,"start_character":29,"end_line":37,"end_character":37},"updated":"2018-12-20 10:31:17.000000000","message":"missing dot at the end of sentence","commit_id":"85f39d147b03a7eaac59f2db2d411a06e7399165"},{"author":{"_account_id":28373,"name":"Kailun Qin","email":"kailun.qin@hotmail.com","username":"kailun.qin"},"change_message_id":"8e15eacdfb0bf37aba2d17e30a4e90e3b4f108ac","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"class NetworkSegmentRangeReferencedByTenant(exceptions.NeutronException):"},{"line_number":36,"context_line":"    message \u003d _(\"Network range %(name)s is referenced by one or \""},{"line_number":37,"context_line":"                \"more tenant networks\")"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"class NetworkSegmentRangeDefaultReadOnly(exceptions.NeutronException):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_52939c5a","line":37,"range":{"start_line":37,"start_character":29,"end_line":37,"end_character":37},"in_reply_to":"3f79a3b5_5d02e10e","updated":"2018-12-21 01:56:24.000000000","message":"Done","commit_id":"85f39d147b03a7eaac59f2db2d411a06e7399165"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"4d72c8115ba2aaba74b80a583ecdaee1593fbdcf","unresolved":false,"context_lines":[{"line_number":39,"context_line":""},{"line_number":40,"context_line":"class NetworkSegmentRangeDefaultReadOnly(exceptions.NeutronException):"},{"line_number":41,"context_line":"    message \u003d _(\"Network Segment Range %(id)s is a default segment \""},{"line_number":42,"context_line":"                \"range which could not be updated or deleted\")"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_fdfacd10","line":42,"range":{"start_line":42,"start_character":53,"end_line":42,"end_character":60},"updated":"2018-12-20 10:31:17.000000000","message":"missing dot at the end of sentence","commit_id":"85f39d147b03a7eaac59f2db2d411a06e7399165"},{"author":{"_account_id":28373,"name":"Kailun Qin","email":"kailun.qin@hotmail.com","username":"kailun.qin"},"change_message_id":"8e15eacdfb0bf37aba2d17e30a4e90e3b4f108ac","unresolved":false,"context_lines":[{"line_number":39,"context_line":""},{"line_number":40,"context_line":"class NetworkSegmentRangeDefaultReadOnly(exceptions.NeutronException):"},{"line_number":41,"context_line":"    message \u003d _(\"Network Segment Range %(id)s is a default segment \""},{"line_number":42,"context_line":"                \"range which could not be updated or deleted\")"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_728ed830","line":42,"range":{"start_line":42,"start_character":53,"end_line":42,"end_character":60},"in_reply_to":"3f79a3b5_fdfacd10","updated":"2018-12-21 01:56:24.000000000","message":"Done","commit_id":"85f39d147b03a7eaac59f2db2d411a06e7399165"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"3a475f5f23b6e036dcf909673ce1d37b266d5443","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class NetworkSegmentRangeNotFound(exceptions.NotFound):"},{"line_number":25,"context_line":"    message \u003d _(\"Network Segment Range %(network_segment_range_id)s \""},{"line_number":26,"context_line":"                \"could not be found.\")"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_8681f648","line":25,"range":{"start_line":25,"start_character":41,"end_line":25,"end_character":65},"updated":"2018-12-21 07:34:21.000000000","message":"it\u0027s nitty nit but can You maybe name it shorter, like for example \"id\" or \"range_id\" or something like that?\nAnd same comment is also valid for all other exceptions here :)","commit_id":"a8343bc25dbb4036df3497cb670e6fd79ab81819"},{"author":{"_account_id":28373,"name":"Kailun Qin","email":"kailun.qin@hotmail.com","username":"kailun.qin"},"change_message_id":"19d28508d3cc2eec5570b28e1355be828339ef23","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class NetworkSegmentRangeNotFound(exceptions.NotFound):"},{"line_number":25,"context_line":"    message \u003d _(\"Network Segment Range %(network_segment_range_id)s \""},{"line_number":26,"context_line":"                \"could not be found.\")"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_41d98824","line":25,"range":{"start_line":25,"start_character":41,"end_line":25,"end_character":65},"in_reply_to":"3f79a3b5_8681f648","updated":"2018-12-21 10:42:20.000000000","message":"Sure, done.","commit_id":"a8343bc25dbb4036df3497cb670e6fd79ab81819"}],"releasenotes/notes/network-segment-range-ext-2b93b7fa42310c25.yaml":[{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"d87c9ee42a4e042840df580aa8d873c3d32c5c94","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    API definition for the new ``network-segment-range`` extension has been"},{"line_number":5,"context_line":"    added as ``neutron_lib.api.definitions.network_segment_range``."}],"source_content_type":"text/x-yaml","patch_set":1,"id":"3f79a3b5_0fb0ab27","line":5,"range":{"start_line":5,"start_character":9,"end_line":5,"end_character":66},"updated":"2018-12-20 15:21:43.000000000","message":"IMO, this is not so much necessary.","commit_id":"85f39d147b03a7eaac59f2db2d411a06e7399165"},{"author":{"_account_id":28373,"name":"Kailun Qin","email":"kailun.qin@hotmail.com","username":"kailun.qin"},"change_message_id":"8e15eacdfb0bf37aba2d17e30a4e90e3b4f108ac","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    API definition for the new ``network-segment-range`` extension has been"},{"line_number":5,"context_line":"    added as ``neutron_lib.api.definitions.network_segment_range``."}],"source_content_type":"text/x-yaml","patch_set":1,"id":"3f79a3b5_929b7463","line":5,"range":{"start_line":5,"start_character":9,"end_line":5,"end_character":66},"in_reply_to":"3f79a3b5_0fb0ab27","updated":"2018-12-21 01:56:24.000000000","message":"Done","commit_id":"85f39d147b03a7eaac59f2db2d411a06e7399165"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"08746b2c8eaeb306513f3c70fecfa3b83542c402","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":"    API definition for the new ``network-segment-range`` extension has been"},{"line_number":5,"context_line":"    added."}],"source_content_type":"text/x-yaml","patch_set":7,"id":"3f79a3b5_d83ee286","line":5,"range":{"start_line":4,"start_character":4,"end_line":5,"end_character":10},"updated":"2018-12-21 17:11:52.000000000","message":"I would rephrase it as:\n\n    Add API definition for the new ``network-segment-range`` extension.\n\nI am not an English speaker so other reviewers might have a better suggestion for the wording.","commit_id":"485253680a9674df11a4cd8f420df5f04b8d6db1"},{"author":{"_account_id":28373,"name":"Kailun Qin","email":"kailun.qin@hotmail.com","username":"kailun.qin"},"change_message_id":"8e38ab3e4a4b9d0ef3b8da65d18d79f3b9dffc5e","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":"    API definition for the new ``network-segment-range`` extension has been"},{"line_number":5,"context_line":"    added."}],"source_content_type":"text/x-yaml","patch_set":7,"id":"3f79a3b5_67f12adf","line":5,"range":{"start_line":4,"start_character":4,"end_line":5,"end_character":10},"in_reply_to":"3f79a3b5_d83ee286","updated":"2018-12-21 22:24:23.000000000","message":"Done","commit_id":"485253680a9674df11a4cd8f420df5f04b8d6db1"}]}
