)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"99276dd44414c6778546151fa2ba22e10ac64867","unresolved":false,"context_lines":[{"line_number":15,"context_line":" - The current segment_id \u003d\u003d None"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Change-Id: I1aee29dfb59e9769ec0f1cb1f5d2933bc5dc0dc5"},{"line_number":18,"context_line":"Closes-Bug: bug/1692490"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"df87a7cf_142d9342","line":18,"range":{"start_line":18,"start_character":12,"end_line":18,"end_character":23},"updated":"2017-12-04 19:37:51.000000000","message":"s/#1692490\n\nso the hyperlink works from gerrit","commit_id":"968fbd0e32885213f0ccc92e234511cd90e1c47d"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"0a2bd3c65b305822b48c2d5176e85c6cba114ef4","unresolved":false,"context_lines":[{"line_number":15,"context_line":" - The current segment_id \u003d\u003d None"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Change-Id: I1aee29dfb59e9769ec0f1cb1f5d2933bc5dc0dc5"},{"line_number":18,"context_line":"Closes-Bug: bug/1692490"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"df87a7cf_8d8e7276","line":18,"range":{"start_line":18,"start_character":12,"end_line":18,"end_character":23},"in_reply_to":"df87a7cf_142d9342","updated":"2017-12-04 22:18:13.000000000","message":"Done","commit_id":"968fbd0e32885213f0ccc92e234511cd90e1c47d"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"154a3a5b27bef67a5d037b4a27c7d629ebb3cf27","unresolved":false,"context_lines":[{"line_number":13,"context_line":" - The network only has one segment"},{"line_number":14,"context_line":" - The network only has one subnet"},{"line_number":15,"context_line":" - The current segment_id \u003d\u003d None"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Change-Id: I1aee29dfb59e9769ec0f1cb1f5d2933bc5dc0dc5"},{"line_number":18,"context_line":"Closes-Bug: #1692490"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"df87a7cf_b04d06c6","line":16,"updated":"2017-12-13 00:31:08.000000000","message":"According to the \u0027Including external references\u0027 here https://wiki.openstack.org/wiki/GitCommitMessages, the APImpact flag is needed for more than docs. So I suggest adding it","commit_id":"8e3b29391db3c45fc7be5773aef4613241bfa12c"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"083d2a10d390e230304e94d2d477323be2c1c5e0","unresolved":false,"context_lines":[{"line_number":13,"context_line":" - The network only has one segment"},{"line_number":14,"context_line":" - The network only has one subnet"},{"line_number":15,"context_line":" - The current segment_id \u003d\u003d None"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Change-Id: I1aee29dfb59e9769ec0f1cb1f5d2933bc5dc0dc5"},{"line_number":18,"context_line":"Closes-Bug: #1692490"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"df87a7cf_6ffeaf6c","line":16,"in_reply_to":"df87a7cf_b04d06c6","updated":"2017-12-13 10:49:48.000000000","message":"Done","commit_id":"8e3b29391db3c45fc7be5773aef4613241bfa12c"}],"doc/source/admin/config-routed-networks.rst":[{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"b656db576a4c7663d293a6b6aee24aed6ad9be0a","unresolved":false,"context_lines":[{"line_number":469,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":470,"context_line":""},{"line_number":471,"context_line":"Migration of existing non-routed networks is only possible if there is only one"},{"line_number":472,"context_line":"segment and one subnet on the network. To migrate a candidate network update"},{"line_number":473,"context_line":"the subnet and set ``id`` of the existing network segment as ``segment_id``."},{"line_number":474,"context_line":""},{"line_number":475,"context_line":"  .. note::"}],"source_content_type":"text/x-rst","patch_set":7,"id":"df87a7cf_05f7f65a","line":472,"range":{"start_line":472,"start_character":62,"end_line":472,"end_character":69},"updated":"2017-12-11 18:38:59.000000000","message":"nit: comma after network?","commit_id":"1144eda75d737435dc4f4bae161afc6dda75add6"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"1e8e3b25faece5091b7ced76abba9ba917d0eb1f","unresolved":false,"context_lines":[{"line_number":469,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":470,"context_line":""},{"line_number":471,"context_line":"Migration of existing non-routed networks is only possible if there is only one"},{"line_number":472,"context_line":"segment and one subnet on the network. To migrate a candidate network update"},{"line_number":473,"context_line":"the subnet and set ``id`` of the existing network segment as ``segment_id``."},{"line_number":474,"context_line":""},{"line_number":475,"context_line":"  .. note::"}],"source_content_type":"text/x-rst","patch_set":7,"id":"df87a7cf_1555cdf9","line":472,"range":{"start_line":472,"start_character":62,"end_line":472,"end_character":69},"in_reply_to":"df87a7cf_05f7f65a","updated":"2017-12-12 16:12:06.000000000","message":"Done","commit_id":"1144eda75d737435dc4f4bae161afc6dda75add6"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"b656db576a4c7663d293a6b6aee24aed6ad9be0a","unresolved":false,"context_lines":[{"line_number":472,"context_line":"segment and one subnet on the network. To migrate a candidate network update"},{"line_number":473,"context_line":"the subnet and set ``id`` of the existing network segment as ``segment_id``."},{"line_number":474,"context_line":""},{"line_number":475,"context_line":"  .. note::"},{"line_number":476,"context_line":""},{"line_number":477,"context_line":"     In the case where there are multiple subnets or segments it is not"},{"line_number":478,"context_line":"     possible to safely migrate. The reason for this is that in non-routed"}],"source_content_type":"text/x-rst","patch_set":7,"id":"df87a7cf_656b62f0","line":475,"range":{"start_line":475,"start_character":0,"end_line":475,"end_character":2},"updated":"2017-12-11 18:38:59.000000000","message":"I\u0027m not sure these leading spaces are needed. When used it adds a \"tabbed over\" version of the note [1]. It seems this would look better like as is done on line 7 of this file.\n\n\n[1] http://logs.openstack.org/72/523972/7/check/build-openstack-sphinx-docs/905d412/html/admin/config-routed-networks.html#migrating-non-routed-networks-to-routed","commit_id":"1144eda75d737435dc4f4bae161afc6dda75add6"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"1e8e3b25faece5091b7ced76abba9ba917d0eb1f","unresolved":false,"context_lines":[{"line_number":472,"context_line":"segment and one subnet on the network. To migrate a candidate network update"},{"line_number":473,"context_line":"the subnet and set ``id`` of the existing network segment as ``segment_id``."},{"line_number":474,"context_line":""},{"line_number":475,"context_line":"  .. note::"},{"line_number":476,"context_line":""},{"line_number":477,"context_line":"     In the case where there are multiple subnets or segments it is not"},{"line_number":478,"context_line":"     possible to safely migrate. The reason for this is that in non-routed"}],"source_content_type":"text/x-rst","patch_set":7,"id":"df87a7cf_35b7b1f7","line":475,"range":{"start_line":475,"start_character":0,"end_line":475,"end_character":2},"in_reply_to":"df87a7cf_656b62f0","updated":"2017-12-12 16:12:06.000000000","message":"Done","commit_id":"1144eda75d737435dc4f4bae161afc6dda75add6"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"b656db576a4c7663d293a6b6aee24aed6ad9be0a","unresolved":false,"context_lines":[{"line_number":474,"context_line":""},{"line_number":475,"context_line":"  .. note::"},{"line_number":476,"context_line":""},{"line_number":477,"context_line":"     In the case where there are multiple subnets or segments it is not"},{"line_number":478,"context_line":"     possible to safely migrate. The reason for this is that in non-routed"},{"line_number":479,"context_line":"     networks addresses from the subnet\u0027s allocation pools are assigned to"},{"line_number":480,"context_line":"     ports without considering to which network segment the port is bound."},{"line_number":481,"context_line":""},{"line_number":482,"context_line":"Example"},{"line_number":483,"context_line":"-------"}],"source_content_type":"text/x-rst","patch_set":7,"id":"df87a7cf_65e8427b","line":480,"range":{"start_line":477,"start_character":5,"end_line":480,"end_character":74},"updated":"2017-12-11 18:38:59.000000000","message":"Not sure this is needed, but I guess it doesn\u0027t hurt to divulge details.","commit_id":"1144eda75d737435dc4f4bae161afc6dda75add6"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"b656db576a4c7663d293a6b6aee24aed6ad9be0a","unresolved":false,"context_lines":[{"line_number":489,"context_line":"#. Get the ``id`` of the current network segment on the network that is being"},{"line_number":490,"context_line":"   migrated."},{"line_number":491,"context_line":""},{"line_number":492,"context_line":"  .. code-block:: console"},{"line_number":493,"context_line":""},{"line_number":494,"context_line":"     $ openstack network segment list --network my_network"},{"line_number":495,"context_line":"     +--------------------------------------+------+--------------------------------------+--------------+---------+"}],"source_content_type":"text/x-rst","patch_set":7,"id":"df87a7cf_c5510e38","line":492,"range":{"start_line":492,"start_character":2,"end_line":492,"end_character":5},"updated":"2017-12-11 18:38:59.000000000","message":"I think all these code-blocks should be aligned with the text above. Otherwise there\u0027s a \"tabbed format\" of the code block... For example the code block below for \"openstack subnet list --network my_network\" looks correct, but this one doesn\u0027t.","commit_id":"1144eda75d737435dc4f4bae161afc6dda75add6"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"1e8e3b25faece5091b7ced76abba9ba917d0eb1f","unresolved":false,"context_lines":[{"line_number":489,"context_line":"#. Get the ``id`` of the current network segment on the network that is being"},{"line_number":490,"context_line":"   migrated."},{"line_number":491,"context_line":""},{"line_number":492,"context_line":"  .. code-block:: console"},{"line_number":493,"context_line":""},{"line_number":494,"context_line":"     $ openstack network segment list --network my_network"},{"line_number":495,"context_line":"     +--------------------------------------+------+--------------------------------------+--------------+---------+"}],"source_content_type":"text/x-rst","patch_set":7,"id":"df87a7cf_b51421ea","line":492,"range":{"start_line":492,"start_character":2,"end_line":492,"end_character":5},"in_reply_to":"df87a7cf_c5510e38","updated":"2017-12-12 16:12:06.000000000","message":"Done\n\nOne space more.","commit_id":"1144eda75d737435dc4f4bae161afc6dda75add6"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"b656db576a4c7663d293a6b6aee24aed6ad9be0a","unresolved":false,"context_lines":[{"line_number":498,"context_line":"     | 81e5453d-4c9f-43a5-8ddf-feaf3937e8c7 | None | 45e84575-2918-471c-95c0-018b961a2984 | flat         | None    |"},{"line_number":499,"context_line":"     +--------------------------------------+------+--------------------------------------+--------------+---------+"},{"line_number":500,"context_line":""},{"line_number":501,"context_line":"#. Get the ``id`` or ``name`` of the current subnet on the network."},{"line_number":502,"context_line":""},{"line_number":503,"context_line":"   .. code-block:: console"},{"line_number":504,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"df87a7cf_85478677","line":501,"range":{"start_line":501,"start_character":0,"end_line":501,"end_character":2},"updated":"2017-12-11 18:38:59.000000000","message":"I think the above (my comment) messed up the formatting here... This restarts at #1 in the HTML generated.","commit_id":"1144eda75d737435dc4f4bae161afc6dda75add6"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"be30e42bd8ba0062e19fe376d05be078acf1543d","unresolved":false,"context_lines":[{"line_number":509,"context_line":"      | 71d931d2-0328-46ae-93bc-126caf794307 | my_subnet | 45e84575-2918-471c-95c0-018b961a2984 | 172.24.4.0/24 |"},{"line_number":510,"context_line":"      +--------------------------------------+-----------+--------------------------------------+---------------+"},{"line_number":511,"context_line":""},{"line_number":512,"context_line":"#. The current ``segment_id`` of the subnet should be ``None``, to verify run the show command."},{"line_number":513,"context_line":""},{"line_number":514,"context_line":"   .. code-block:: console"},{"line_number":515,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"9f91af0f_5c3ca392","line":512,"updated":"2018-01-03 03:20:38.000000000","message":"It seems like \"show\" should be highlighted somehow, or maybe just re-write:\n\nVerify the current ``segment_id`` of the subnet is ``None``.","commit_id":"6e9b511a7b813a0987ac9d2777ed6d976bc45fec"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"f98eb90e3731af90d3683096c112056d4cbbcc51","unresolved":false,"context_lines":[{"line_number":509,"context_line":"      | 71d931d2-0328-46ae-93bc-126caf794307 | my_subnet | 45e84575-2918-471c-95c0-018b961a2984 | 172.24.4.0/24 |"},{"line_number":510,"context_line":"      +--------------------------------------+-----------+--------------------------------------+---------------+"},{"line_number":511,"context_line":""},{"line_number":512,"context_line":"#. The current ``segment_id`` of the subnet should be ``None``, to verify run the show command."},{"line_number":513,"context_line":""},{"line_number":514,"context_line":"   .. code-block:: console"},{"line_number":515,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"9f91af0f_af27ae12","line":512,"in_reply_to":"9f91af0f_5c3ca392","updated":"2018-01-03 11:35:17.000000000","message":"I think the shorter suggestion here \"Verify the current ...\" is better. Thanks!\n\nDone.","commit_id":"6e9b511a7b813a0987ac9d2777ed6d976bc45fec"}],"neutron/db/db_base_plugin_v2.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"b24cab5d861103b568ae78dc335ad80cfef41bc2","unresolved":false,"context_lines":[{"line_number":1,"context_line":""},{"line_number":2,"context_line":"# Copyright (c) 2012 OpenStack Foundation."},{"line_number":3,"context_line":"# All Rights Reserved."},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":3,"id":"df87a7cf_2b75db95","line":1,"updated":"2018-05-21 19:04:16.000000000","message":"nit - not needed","commit_id":"968fbd0e32885213f0ccc92e234511cd90e1c47d"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"99276dd44414c6778546151fa2ba22e10ac64867","unresolved":false,"context_lines":[{"line_number":1,"context_line":""},{"line_number":2,"context_line":"# Copyright (c) 2012 OpenStack Foundation."},{"line_number":3,"context_line":"# All Rights Reserved."},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":3,"id":"df87a7cf_00146e4d","line":1,"updated":"2017-12-04 19:37:51.000000000","message":"nit: unrelated whitespace change","commit_id":"968fbd0e32885213f0ccc92e234511cd90e1c47d"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"0a2bd3c65b305822b48c2d5176e85c6cba114ef4","unresolved":false,"context_lines":[{"line_number":1,"context_line":""},{"line_number":2,"context_line":"# Copyright (c) 2012 OpenStack Foundation."},{"line_number":3,"context_line":"# All Rights Reserved."},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":3,"id":"df87a7cf_edf29e06","line":1,"in_reply_to":"df87a7cf_00146e4d","updated":"2017-12-04 22:18:13.000000000","message":"Done","commit_id":"968fbd0e32885213f0ccc92e234511cd90e1c47d"}],"neutron/db/ipam_backend_mixin.py":[{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"ac6a12bfece72d3a8cd737fc58eec2e2aea957e8","unresolved":false,"context_lines":[{"line_number":326,"context_line":"                network_id\u003dnetwork_id)"},{"line_number":327,"context_line":""},{"line_number":328,"context_line":"        if action \u003d\u003d \u0027update\u0027:"},{"line_number":329,"context_line":"            query \u003d context.session.query(segment_model.NetworkSegment.id)"},{"line_number":330,"context_line":"            query \u003d query.filter("},{"line_number":331,"context_line":"                segment_model.NetworkSegment.network_id \u003d\u003d network_id)"},{"line_number":332,"context_line":"            net_segments \u003d set(row.id for row in query)"},{"line_number":333,"context_line":"            query \u003d context.session.query(models_v2.Subnet.id)"},{"line_number":334,"context_line":"            query \u003d query.filter(models_v2.Subnet.network_id \u003d\u003d network_id)"},{"line_number":335,"context_line":"            associated_subnets \u003d set(row.id for row in query)"},{"line_number":336,"context_line":"            query \u003d context.session.query(models_v2.Subnet.segment_id)"},{"line_number":337,"context_line":"            query \u003d query.filter(models_v2.Subnet.id \u003d\u003d subnet_id)"},{"line_number":338,"context_line":"            current_subnet_segment \u003d set(row.segment_id for row in query)"},{"line_number":339,"context_line":""},{"line_number":340,"context_line":"            if None in associated_segments and len(net_segments) \u003e 1:"},{"line_number":341,"context_line":"                raise segment_exc.NoUpdateSubnetWhenMultipleSegmentsOnNetwork("},{"line_number":342,"context_line":"                    network_id\u003dnetwork_id)"},{"line_number":343,"context_line":"            if None in associated_segments and len(associated_subnets) \u003e 1:"},{"line_number":344,"context_line":"                raise segment_exc.SubnetsNotAllAssociatedWithSegments("},{"line_number":345,"context_line":"                    network_id\u003dnetwork_id)"},{"line_number":346,"context_line":"            if (None not in current_subnet_segment"},{"line_number":347,"context_line":"                and segment_id not in current_subnet_segment):"},{"line_number":348,"context_line":"                raise segment_exc.SubnetSegmentAssociationChangeNotAllowed()"},{"line_number":349,"context_line":""},{"line_number":350,"context_line":"        if segment_id:"},{"line_number":351,"context_line":"            segment \u003d network_obj.NetworkSegment.get_object(context,"}],"source_content_type":"text/x-python","patch_set":5,"id":"df87a7cf_2149138a","line":348,"range":{"start_line":329,"start_character":1,"end_line":348,"end_character":76},"updated":"2017-12-07 21:16:36.000000000","message":"After executing the query in L321-323 we have much of the data we need to implement the logic here. Consider this simplified version:\n\n            if query.count() \u003e 1:\n                  raise segment_exc.SubnetsNotAllAssociatedWithSegments(\n                      network_id\u003dnetwork_id)\n              if (None not in associated_segments and \n                 segment_id not in associated_segments):\n                  raise segment_exc.SubnetSegmentAssociationChangeNotAllowed()\n      \n              query \u003d context.session.query(segment_model.NetworkSegment.id)\n              query \u003d query.filter(\n                  segment_model.NetworkSegment.network_id \u003d\u003d network_id)\n              if query.count() \u003e 1:\n                  raise segment_exc.NoUpdateSubnetWhenMultipleSegmentsOnNetwork(\n                      network_id\u003dnetwork_id)\n\nI ran the unit tests with this version and they pass :-)","commit_id":"4844229797d2f34db9e9ecc8345cdc83cb677c46"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"85dbe799ce0aab5961e4c536d6dc124000796379","unresolved":false,"context_lines":[{"line_number":326,"context_line":"                network_id\u003dnetwork_id)"},{"line_number":327,"context_line":""},{"line_number":328,"context_line":"        if action \u003d\u003d \u0027update\u0027:"},{"line_number":329,"context_line":"            query \u003d context.session.query(segment_model.NetworkSegment.id)"},{"line_number":330,"context_line":"            query \u003d query.filter("},{"line_number":331,"context_line":"                segment_model.NetworkSegment.network_id \u003d\u003d network_id)"},{"line_number":332,"context_line":"            net_segments \u003d set(row.id for row in query)"},{"line_number":333,"context_line":"            query \u003d context.session.query(models_v2.Subnet.id)"},{"line_number":334,"context_line":"            query \u003d query.filter(models_v2.Subnet.network_id \u003d\u003d network_id)"},{"line_number":335,"context_line":"            associated_subnets \u003d set(row.id for row in query)"},{"line_number":336,"context_line":"            query \u003d context.session.query(models_v2.Subnet.segment_id)"},{"line_number":337,"context_line":"            query \u003d query.filter(models_v2.Subnet.id \u003d\u003d subnet_id)"},{"line_number":338,"context_line":"            current_subnet_segment \u003d set(row.segment_id for row in query)"},{"line_number":339,"context_line":""},{"line_number":340,"context_line":"            if None in associated_segments and len(net_segments) \u003e 1:"},{"line_number":341,"context_line":"                raise segment_exc.NoUpdateSubnetWhenMultipleSegmentsOnNetwork("},{"line_number":342,"context_line":"                    network_id\u003dnetwork_id)"},{"line_number":343,"context_line":"            if None in associated_segments and len(associated_subnets) \u003e 1:"},{"line_number":344,"context_line":"                raise segment_exc.SubnetsNotAllAssociatedWithSegments("},{"line_number":345,"context_line":"                    network_id\u003dnetwork_id)"},{"line_number":346,"context_line":"            if (None not in current_subnet_segment"},{"line_number":347,"context_line":"                and segment_id not in current_subnet_segment):"},{"line_number":348,"context_line":"                raise segment_exc.SubnetSegmentAssociationChangeNotAllowed()"},{"line_number":349,"context_line":""},{"line_number":350,"context_line":"        if segment_id:"},{"line_number":351,"context_line":"            segment \u003d network_obj.NetworkSegment.get_object(context,"}],"source_content_type":"text/x-python","patch_set":5,"id":"df87a7cf_76c4b5f5","line":348,"range":{"start_line":329,"start_character":1,"end_line":348,"end_character":76},"in_reply_to":"df87a7cf_2149138a","updated":"2017-12-09 23:54:45.000000000","message":"Thanks Miguel. Half the queries removed. A good optimization.","commit_id":"4844229797d2f34db9e9ecc8345cdc83cb677c46"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"679ff624c52a7d8665f88892a25090f20a451dd1","unresolved":false,"context_lines":[{"line_number":326,"context_line":"                network_id\u003dnetwork_id)"},{"line_number":327,"context_line":""},{"line_number":328,"context_line":"        if action \u003d\u003d \u0027update\u0027:"},{"line_number":329,"context_line":"            query \u003d context.session.query(segment_model.NetworkSegment.id)"},{"line_number":330,"context_line":"            query \u003d query.filter("},{"line_number":331,"context_line":"                segment_model.NetworkSegment.network_id \u003d\u003d network_id)"},{"line_number":332,"context_line":"            net_segments \u003d set(row.id for row in query)"},{"line_number":333,"context_line":"            query \u003d context.session.query(models_v2.Subnet.id)"},{"line_number":334,"context_line":"            query \u003d query.filter(models_v2.Subnet.network_id \u003d\u003d network_id)"},{"line_number":335,"context_line":"            associated_subnets \u003d set(row.id for row in query)"},{"line_number":336,"context_line":"            query \u003d context.session.query(models_v2.Subnet.segment_id)"},{"line_number":337,"context_line":"            query \u003d query.filter(models_v2.Subnet.id \u003d\u003d subnet_id)"},{"line_number":338,"context_line":"            current_subnet_segment \u003d set(row.segment_id for row in query)"},{"line_number":339,"context_line":""},{"line_number":340,"context_line":"            if None in associated_segments and len(net_segments) \u003e 1:"},{"line_number":341,"context_line":"                raise segment_exc.NoUpdateSubnetWhenMultipleSegmentsOnNetwork("},{"line_number":342,"context_line":"                    network_id\u003dnetwork_id)"},{"line_number":343,"context_line":"            if None in associated_segments and len(associated_subnets) \u003e 1:"},{"line_number":344,"context_line":"                raise segment_exc.SubnetsNotAllAssociatedWithSegments("},{"line_number":345,"context_line":"                    network_id\u003dnetwork_id)"},{"line_number":346,"context_line":"            if (None not in current_subnet_segment"},{"line_number":347,"context_line":"                and segment_id not in current_subnet_segment):"},{"line_number":348,"context_line":"                raise segment_exc.SubnetSegmentAssociationChangeNotAllowed()"},{"line_number":349,"context_line":""},{"line_number":350,"context_line":"        if segment_id:"},{"line_number":351,"context_line":"            segment \u003d network_obj.NetworkSegment.get_object(context,"}],"source_content_type":"text/x-python","patch_set":5,"id":"df87a7cf_fc38b2ee","line":348,"range":{"start_line":329,"start_character":1,"end_line":348,"end_character":76},"in_reply_to":"df87a7cf_2149138a","updated":"2017-12-07 21:54:50.000000000","message":"The lines inside this if statement have to do with the migration for non routed to routed. To make it more readable, would you please add a comment explaining this?","commit_id":"4844229797d2f34db9e9ecc8345cdc83cb677c46"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"85dbe799ce0aab5961e4c536d6dc124000796379","unresolved":false,"context_lines":[{"line_number":326,"context_line":"                network_id\u003dnetwork_id)"},{"line_number":327,"context_line":""},{"line_number":328,"context_line":"        if action \u003d\u003d \u0027update\u0027:"},{"line_number":329,"context_line":"            query \u003d context.session.query(segment_model.NetworkSegment.id)"},{"line_number":330,"context_line":"            query \u003d query.filter("},{"line_number":331,"context_line":"                segment_model.NetworkSegment.network_id \u003d\u003d network_id)"},{"line_number":332,"context_line":"            net_segments \u003d set(row.id for row in query)"},{"line_number":333,"context_line":"            query \u003d context.session.query(models_v2.Subnet.id)"},{"line_number":334,"context_line":"            query \u003d query.filter(models_v2.Subnet.network_id \u003d\u003d network_id)"},{"line_number":335,"context_line":"            associated_subnets \u003d set(row.id for row in query)"},{"line_number":336,"context_line":"            query \u003d context.session.query(models_v2.Subnet.segment_id)"},{"line_number":337,"context_line":"            query \u003d query.filter(models_v2.Subnet.id \u003d\u003d subnet_id)"},{"line_number":338,"context_line":"            current_subnet_segment \u003d set(row.segment_id for row in query)"},{"line_number":339,"context_line":""},{"line_number":340,"context_line":"            if None in associated_segments and len(net_segments) \u003e 1:"},{"line_number":341,"context_line":"                raise segment_exc.NoUpdateSubnetWhenMultipleSegmentsOnNetwork("},{"line_number":342,"context_line":"                    network_id\u003dnetwork_id)"},{"line_number":343,"context_line":"            if None in associated_segments and len(associated_subnets) \u003e 1:"},{"line_number":344,"context_line":"                raise segment_exc.SubnetsNotAllAssociatedWithSegments("},{"line_number":345,"context_line":"                    network_id\u003dnetwork_id)"},{"line_number":346,"context_line":"            if (None not in current_subnet_segment"},{"line_number":347,"context_line":"                and segment_id not in current_subnet_segment):"},{"line_number":348,"context_line":"                raise segment_exc.SubnetSegmentAssociationChangeNotAllowed()"},{"line_number":349,"context_line":""},{"line_number":350,"context_line":"        if segment_id:"},{"line_number":351,"context_line":"            segment \u003d network_obj.NetworkSegment.get_object(context,"}],"source_content_type":"text/x-python","patch_set":5,"id":"df87a7cf_d94b7228","line":348,"range":{"start_line":329,"start_character":1,"end_line":348,"end_character":76},"in_reply_to":"df87a7cf_fc38b2ee","updated":"2017-12-09 23:54:45.000000000","message":"Done","commit_id":"4844229797d2f34db9e9ecc8345cdc83cb677c46"}],"neutron/extensions/_subnet_segmentid_writable.py":[{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"7b0c8652818de6524439c272157874b411d83ae3","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"# The alias of the extension."},{"line_number":24,"context_line":"ALIAS \u003d \u0027subnet-segmentid-writable\u0027"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"# Whether or not this extension is simply signaling behavior to the user"},{"line_number":27,"context_line":"# or it actively modifies the attribute map."}],"source_content_type":"text/x-python","patch_set":23,"id":"5f7c97a3_223efe8b","line":24,"range":{"start_line":24,"start_character":26,"end_line":24,"end_character":34},"updated":"2018-05-10 22:19:38.000000000","message":"I would have preferred updateable, but oh well, we already merged in neutron-lib","commit_id":"848670947b9b3c2edfd7b62ec7059cad3a620774"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"d8304ae4b23c164e52044e5d913c9a1ae57a9b28","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":24,"id":"5f7c97a3_fcdb2b4c","updated":"2018-05-19 00:14:08.000000000","message":"We released neutron-lib a few days ago (https://github.com/openstack/neutron-lib/releases). This module can be removed now","commit_id":"90c913a6700d2c993560baa96646f4ff264e6eb5"}],"neutron/extensions/segment.py":[{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"b656db576a4c7663d293a6b6aee24aed6ad9be0a","unresolved":false,"context_lines":[{"line_number":82,"context_line":"    },"},{"line_number":83,"context_line":"    subnet_def.COLLECTION_NAME: {"},{"line_number":84,"context_line":"        SEGMENT_ID: {\u0027allow_post\u0027: True,"},{"line_number":85,"context_line":"                     \u0027allow_put\u0027: True,"},{"line_number":86,"context_line":"                     \u0027default\u0027: None,"},{"line_number":87,"context_line":"                     \u0027validate\u0027: {\u0027type:uuid_or_none\u0027: None},"},{"line_number":88,"context_line":"                     \u0027is_visible\u0027: True, },"}],"source_content_type":"text/x-python","patch_set":7,"id":"df87a7cf_c567ce4c","line":85,"updated":"2017-12-11 18:38:59.000000000","message":"I think this warrants an APIImpact tag [1] since it changes the API behavior.\n\n\n[1] https://docs.openstack.org/neutron/latest/contributor/effective_neutron.html#commit-messages","commit_id":"1144eda75d737435dc4f4bae161afc6dda75add6"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"1e8e3b25faece5091b7ced76abba9ba917d0eb1f","unresolved":false,"context_lines":[{"line_number":82,"context_line":"    },"},{"line_number":83,"context_line":"    subnet_def.COLLECTION_NAME: {"},{"line_number":84,"context_line":"        SEGMENT_ID: {\u0027allow_post\u0027: True,"},{"line_number":85,"context_line":"                     \u0027allow_put\u0027: True,"},{"line_number":86,"context_line":"                     \u0027default\u0027: None,"},{"line_number":87,"context_line":"                     \u0027validate\u0027: {\u0027type:uuid_or_none\u0027: None},"},{"line_number":88,"context_line":"                     \u0027is_visible\u0027: True, },"}],"source_content_type":"text/x-python","patch_set":7,"id":"df87a7cf_55335514","line":85,"in_reply_to":"df87a7cf_c567ce4c","updated":"2017-12-12 16:12:06.000000000","message":"I created a review to update the api doc.\nhttps://review.openstack.org/527445","commit_id":"1144eda75d737435dc4f4bae161afc6dda75add6"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"e358ee18d2234eaafbc581da30689f87488f43d9","unresolved":false,"context_lines":[{"line_number":82,"context_line":"    },"},{"line_number":83,"context_line":"    subnet_def.COLLECTION_NAME: {"},{"line_number":84,"context_line":"        SEGMENT_ID: {\u0027allow_post\u0027: True,"},{"line_number":85,"context_line":"                     \u0027allow_put\u0027: True,"},{"line_number":86,"context_line":"                     \u0027default\u0027: None,"},{"line_number":87,"context_line":"                     \u0027validate\u0027: {\u0027type:uuid_or_none\u0027: None},"},{"line_number":88,"context_line":"                     \u0027is_visible\u0027: True, },"}],"source_content_type":"text/x-python","patch_set":11,"id":"9f91af0f_f218c01e","line":85,"updated":"2018-01-09 14:12:41.000000000","message":"Maybe this was already asked and I missed it, but wouldn\u0027t we typically add this behavior as a new extension rather than modifying and existing extension? That\u0027s what I\u0027ve seen done before, but perhaps this is a special case.","commit_id":"7ac2cd9a0b00665378b7e58fb81d0fe999bb82ac"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"6dfcf7c460f59b74153a035569c59ae93684cbc9","unresolved":false,"context_lines":[{"line_number":82,"context_line":"    },"},{"line_number":83,"context_line":"    subnet_def.COLLECTION_NAME: {"},{"line_number":84,"context_line":"        SEGMENT_ID: {\u0027allow_post\u0027: True,"},{"line_number":85,"context_line":"                     \u0027allow_put\u0027: True,"},{"line_number":86,"context_line":"                     \u0027default\u0027: None,"},{"line_number":87,"context_line":"                     \u0027validate\u0027: {\u0027type:uuid_or_none\u0027: None},"},{"line_number":88,"context_line":"                     \u0027is_visible\u0027: True, },"}],"source_content_type":"text/x-python","patch_set":11,"id":"5f93b717_f721fbfc","line":85,"in_reply_to":"7f96bb07_87315ea5","updated":"2018-01-26 19:36:59.000000000","message":"https://review.openstack.org/#/c/483518/ - made network mtu writable","commit_id":"7ac2cd9a0b00665378b7e58fb81d0fe999bb82ac"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"d55fbf38f75e0e4a71306bbbcfdb2af7d16ce9c3","unresolved":false,"context_lines":[{"line_number":82,"context_line":"    },"},{"line_number":83,"context_line":"    subnet_def.COLLECTION_NAME: {"},{"line_number":84,"context_line":"        SEGMENT_ID: {\u0027allow_post\u0027: True,"},{"line_number":85,"context_line":"                     \u0027allow_put\u0027: True,"},{"line_number":86,"context_line":"                     \u0027default\u0027: None,"},{"line_number":87,"context_line":"                     \u0027validate\u0027: {\u0027type:uuid_or_none\u0027: None},"},{"line_number":88,"context_line":"                     \u0027is_visible\u0027: True, },"}],"source_content_type":"text/x-python","patch_set":11,"id":"7f96bb07_87315ea5","line":85,"in_reply_to":"9f91af0f_f218c01e","updated":"2018-01-13 11:19:12.000000000","message":"I am not sure I understand exactly what/how that can be done.\nCould you point me to an example?","commit_id":"7ac2cd9a0b00665378b7e58fb81d0fe999bb82ac"}],"neutron/objects/subnet.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"b24cab5d861103b568ae78dc335ad80cfef41bc2","unresolved":false,"context_lines":[{"line_number":165,"context_line":"@base.NeutronObjectRegistry.register"},{"line_number":166,"context_line":"class Subnet(base.NeutronDbObject):"},{"line_number":167,"context_line":"    # Version 1.0: Initial version"},{"line_number":168,"context_line":"    VERSION \u003d \u00271.0\u0027"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"    db_model \u003d models_v2.Subnet"},{"line_number":171,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"5f7c97a3_6b62d718","line":168,"updated":"2018-05-21 19:04:16.000000000","message":"does this change require a version bump?","commit_id":"87ca5b4356cd61be7f0b74b61dfba0deb079a907"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"405d3dc82464969ca778cb9d430410aa49f054b7","unresolved":false,"context_lines":[{"line_number":165,"context_line":"@base.NeutronObjectRegistry.register"},{"line_number":166,"context_line":"class Subnet(base.NeutronDbObject):"},{"line_number":167,"context_line":"    # Version 1.0: Initial version"},{"line_number":168,"context_line":"    VERSION \u003d \u00271.0\u0027"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"    db_model \u003d models_v2.Subnet"},{"line_number":171,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"5f7c97a3_554f5abc","line":168,"in_reply_to":"5f7c97a3_156002a5","updated":"2018-05-23 23:10:44.000000000","message":"Ok. Reverted to patchset 25.","commit_id":"87ca5b4356cd61be7f0b74b61dfba0deb079a907"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"31bff136d892323c3252a6df1c762438dc23ac99","unresolved":false,"context_lines":[{"line_number":165,"context_line":"@base.NeutronObjectRegistry.register"},{"line_number":166,"context_line":"class Subnet(base.NeutronDbObject):"},{"line_number":167,"context_line":"    # Version 1.0: Initial version"},{"line_number":168,"context_line":"    VERSION \u003d \u00271.0\u0027"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"    db_model \u003d models_v2.Subnet"},{"line_number":171,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"5f7c97a3_d9cbaa47","line":168,"in_reply_to":"5f7c97a3_6b62d718","updated":"2018-05-23 15:27:25.000000000","message":"thanks Gary! I think that makes sense.\nI will push another patchset.","commit_id":"87ca5b4356cd61be7f0b74b61dfba0deb079a907"},{"author":{"_account_id":17491,"name":"Lujin Luo","email":"luo.lujin@jp.fujitsu.com","username":"Lujin"},"change_message_id":"d5fd9d2476da425425031b25bf1168f668232a2f","unresolved":false,"context_lines":[{"line_number":165,"context_line":"@base.NeutronObjectRegistry.register"},{"line_number":166,"context_line":"class Subnet(base.NeutronDbObject):"},{"line_number":167,"context_line":"    # Version 1.0: Initial version"},{"line_number":168,"context_line":"    VERSION \u003d \u00271.0\u0027"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"    db_model \u003d models_v2.Subnet"},{"line_number":171,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"5f7c97a3_7272ac4b","line":168,"in_reply_to":"5f7c97a3_6f63a4dd","updated":"2018-05-23 21:12:13.000000000","message":"Speaking from the OVO side, no, we do not need to bump object version here. \n\nFor record, we bump versions if new field or new synthetic field is added. :)","commit_id":"87ca5b4356cd61be7f0b74b61dfba0deb079a907"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"bbc7ebdb31b96182ae22e0873f87d76671c2402f","unresolved":false,"context_lines":[{"line_number":165,"context_line":"@base.NeutronObjectRegistry.register"},{"line_number":166,"context_line":"class Subnet(base.NeutronDbObject):"},{"line_number":167,"context_line":"    # Version 1.0: Initial version"},{"line_number":168,"context_line":"    VERSION \u003d \u00271.0\u0027"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"    db_model \u003d models_v2.Subnet"},{"line_number":171,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"5f7c97a3_72df0cd6","line":168,"in_reply_to":"5f7c97a3_7272ac4b","updated":"2018-05-23 21:35:46.000000000","message":"ok, I\u0027ll take that as not needed, but does not hurt. And not push a revert to the previous patch-set.","commit_id":"87ca5b4356cd61be7f0b74b61dfba0deb079a907"},{"author":{"_account_id":17491,"name":"Lujin Luo","email":"luo.lujin@jp.fujitsu.com","username":"Lujin"},"change_message_id":"b0c1f618af167b6804632b56fe734b18398c8b5c","unresolved":false,"context_lines":[{"line_number":165,"context_line":"@base.NeutronObjectRegistry.register"},{"line_number":166,"context_line":"class Subnet(base.NeutronDbObject):"},{"line_number":167,"context_line":"    # Version 1.0: Initial version"},{"line_number":168,"context_line":"    VERSION \u003d \u00271.0\u0027"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"    db_model \u003d models_v2.Subnet"},{"line_number":171,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"5f7c97a3_156002a5","line":168,"in_reply_to":"5f7c97a3_72df0cd6","updated":"2018-05-23 22:24:30.000000000","message":"Well, no. Let me rephrase that, we cannot bump version here. It does not follow the rule of bumping versions, no changes to existing fields. field_no_change list just ensures that we are not going to touch those fields that may violating foreign key requirements. Please push another PS to revise this.","commit_id":"87ca5b4356cd61be7f0b74b61dfba0deb079a907"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"4be2c6935a66945c01fcc0d6b3091cdc4e67fa0b","unresolved":false,"context_lines":[{"line_number":165,"context_line":"@base.NeutronObjectRegistry.register"},{"line_number":166,"context_line":"class Subnet(base.NeutronDbObject):"},{"line_number":167,"context_line":"    # Version 1.0: Initial version"},{"line_number":168,"context_line":"    VERSION \u003d \u00271.0\u0027"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"    db_model \u003d models_v2.Subnet"},{"line_number":171,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"5f7c97a3_6f63a4dd","line":168,"in_reply_to":"5f7c97a3_948c1980","updated":"2018-05-23 17:26:03.000000000","message":"Done","commit_id":"87ca5b4356cd61be7f0b74b61dfba0deb079a907"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"a7f2fb882224014d0314779727a95b86f2efd6eb","unresolved":false,"context_lines":[{"line_number":165,"context_line":"@base.NeutronObjectRegistry.register"},{"line_number":166,"context_line":"class Subnet(base.NeutronDbObject):"},{"line_number":167,"context_line":"    # Version 1.0: Initial version"},{"line_number":168,"context_line":"    VERSION \u003d \u00271.0\u0027"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"    db_model \u003d models_v2.Subnet"},{"line_number":171,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"5f7c97a3_948c1980","line":168,"in_reply_to":"5f7c97a3_d9cbaa47","updated":"2018-05-23 16:13:21.000000000","message":"Doing this seem to have revealed a bug?\n\nneutron.tests.unit.objects.test_subnet.SubnetDbObjectTestCase.test_downgrade_to_1_0\n-----------------------------------------------------------------------------------\n\nCaptured traceback:\n~~~~~~~~~~~~~~~~~~~\n    Traceback (most recent call last):\n      File \"neutron/tests/base.py\", line 140, in func\n        return f(self, *args, **kwargs)\n      File \"neutron/tests/unit/objects/test_base.py\", line 1619, in test_downgrade_to_1_0\n        obj.obj_to_primitive(target_version\u003d\u00271.0\u0027)\n      File \"/home/hjensas/code/neutron/.tox/py27/lib/python2.7/site-packages/oslo_versionedobjects/base.py\", line 566, in obj_to_primitive\n        version_manifest)\n      File \"/home/hjensas/code/neutron/.tox/py27/lib/python2.7/site-packages/oslo_versionedobjects/base.py\", line 538, in obj_make_compatible_from_manifest\n        return self.obj_make_compatible(primitive, target_version)\n      File \"/home/hjensas/code/neutron/.tox/py27/lib/python2.7/site-packages/oslo_versionedobjects/base.py\", line 525, in obj_make_compatible\n        self._obj_make_obj_compatible(primitive, target_version, key)\n      File \"/home/hjensas/code/neutron/.tox/py27/lib/python2.7/site-packages/oslo_versionedobjects/base.py\", line 477, in _obj_make_obj_compatible\n        relationship_map \u003d self._obj_relationship_for(field, target_version)\n      File \"/home/hjensas/code/neutron/.tox/py27/lib/python2.7/site-packages/oslo_versionedobjects/base.py\", line 454, in _obj_relationship_for\n        reason\u003d\u0027No rule for %s\u0027 % field)\n    oslo_versionedobjects.exception.ObjectActionError: Object action obj_make_compatible failed because: No rule for host_routes","commit_id":"87ca5b4356cd61be7f0b74b61dfba0deb079a907"}],"neutron/services/segments/exceptions.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"99276dd44414c6778546151fa2ba22e10ac64867","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"class NoUpdateSubnetWhenMultipleSegmentsOnNetwork("},{"line_number":27,"context_line":"    exceptions.BadRequest):"},{"line_number":28,"context_line":"    message \u003d _(\"The network \u0027%(network_id)s\u0027 have multiple segments, it is \""},{"line_number":29,"context_line":"                \"only possible to associate an existing subnet with a segment \""},{"line_number":30,"context_line":"                \"on networks with a single segment.\")"},{"line_number":31,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"df87a7cf_74917f99","line":28,"range":{"start_line":28,"start_character":46,"end_line":28,"end_character":50},"updated":"2017-12-04 19:37:51.000000000","message":"s/has","commit_id":"968fbd0e32885213f0ccc92e234511cd90e1c47d"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"0a2bd3c65b305822b48c2d5176e85c6cba114ef4","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"class NoUpdateSubnetWhenMultipleSegmentsOnNetwork("},{"line_number":27,"context_line":"    exceptions.BadRequest):"},{"line_number":28,"context_line":"    message \u003d _(\"The network \u0027%(network_id)s\u0027 have multiple segments, it is \""},{"line_number":29,"context_line":"                \"only possible to associate an existing subnet with a segment \""},{"line_number":30,"context_line":"                \"on networks with a single segment.\")"},{"line_number":31,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"df87a7cf_8dff52a9","line":28,"range":{"start_line":28,"start_character":46,"end_line":28,"end_character":50},"in_reply_to":"df87a7cf_74917f99","updated":"2017-12-04 22:18:13.000000000","message":"Done","commit_id":"968fbd0e32885213f0ccc92e234511cd90e1c47d"}],"neutron/services/segments/plugin.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"be30e42bd8ba0062e19fe376d05be078acf1543d","unresolved":false,"context_lines":[{"line_number":250,"context_line":"        original_segment_id \u003d original_subnet.get(\u0027segment_id\u0027)"},{"line_number":251,"context_line":"        if not segment_id or subnet[\u0027ip_version\u0027] !\u003d constants.IP_VERSION_4:"},{"line_number":252,"context_line":"            return"},{"line_number":253,"context_line":"        if original_segment_id !\u003d segment_id:"},{"line_number":254,"context_line":"            # Migration to routed network, treat as create"},{"line_number":255,"context_line":"            total, reserved \u003d self._calculate_inventory_total_and_reserved("},{"line_number":256,"context_line":"                subnet)"}],"source_content_type":"text/x-python","patch_set":10,"id":"9f91af0f_1cb05bf4","line":253,"updated":"2018-01-03 03:20:38.000000000","message":"Does original_segment_id have to be None to migrate?  Maybe that was already verified?","commit_id":"6e9b511a7b813a0987ac9d2777ed6d976bc45fec"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"f98eb90e3731af90d3683096c112056d4cbbcc51","unresolved":false,"context_lines":[{"line_number":250,"context_line":"        original_segment_id \u003d original_subnet.get(\u0027segment_id\u0027)"},{"line_number":251,"context_line":"        if not segment_id or subnet[\u0027ip_version\u0027] !\u003d constants.IP_VERSION_4:"},{"line_number":252,"context_line":"            return"},{"line_number":253,"context_line":"        if original_segment_id !\u003d segment_id:"},{"line_number":254,"context_line":"            # Migration to routed network, treat as create"},{"line_number":255,"context_line":"            total, reserved \u003d self._calculate_inventory_total_and_reserved("},{"line_number":256,"context_line":"                subnet)"}],"source_content_type":"text/x-python","patch_set":10,"id":"9f91af0f_cfc8f256","line":253,"in_reply_to":"9f91af0f_1cb05bf4","updated":"2018-01-03 11:35:17.000000000","message":"Yes the migration is limited to subnets with None as segment_id.\nIn ipam_backend_mixin.py _validate_segment() this is verified.\n\n            if (None not in associated_segments and\n                    segment_id not in associated_segments):\n                raise segment_exc.SubnetSegmentAssociationChangeNotAllowed()","commit_id":"6e9b511a7b813a0987ac9d2777ed6d976bc45fec"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"7b0c8652818de6524439c272157874b411d83ae3","unresolved":false,"context_lines":[{"line_number":180,"context_line":"        segment_id \u003d subnet.get(\u0027segment_id\u0027)"},{"line_number":181,"context_line":"        if not segment_id or subnet[\u0027ip_version\u0027] !\u003d constants.IP_VERSION_4:"},{"line_number":182,"context_line":"            return"},{"line_number":183,"context_line":"        total, reserved \u003d self._calculate_inventory_total_and_reserved(subnet)"},{"line_number":184,"context_line":"        if total:"},{"line_number":185,"context_line":"            segment_host_mappings \u003d net_obj.SegmentHostMapping.get_objects("},{"line_number":186,"context_line":"                context, segment_id\u003dsegment_id)"},{"line_number":187,"context_line":"            self.batch_notifier.queue_event(Event("},{"line_number":188,"context_line":"                self._create_or_update_nova_inventory, segment_id, total\u003dtotal,"},{"line_number":189,"context_line":"                reserved\u003dreserved,"},{"line_number":190,"context_line":"                segment_host_mappings\u003dsegment_host_mappings))"},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"    def _create_or_update_nova_inventory(self, event):"},{"line_number":193,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":23,"id":"5f7c97a3_c2c94aac","line":190,"range":{"start_line":183,"start_character":0,"end_line":190,"end_character":61},"updated":"2018-05-10 22:19:38.000000000","message":"Why not re-factor this into a method that can be called from here and from L270 below?","commit_id":"848670947b9b3c2edfd7b62ec7059cad3a620774"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"082a7d776533f46387fba43ca3a5f8509d10d945","unresolved":false,"context_lines":[{"line_number":180,"context_line":"        segment_id \u003d subnet.get(\u0027segment_id\u0027)"},{"line_number":181,"context_line":"        if not segment_id or subnet[\u0027ip_version\u0027] !\u003d constants.IP_VERSION_4:"},{"line_number":182,"context_line":"            return"},{"line_number":183,"context_line":"        total, reserved \u003d self._calculate_inventory_total_and_reserved(subnet)"},{"line_number":184,"context_line":"        if total:"},{"line_number":185,"context_line":"            segment_host_mappings \u003d net_obj.SegmentHostMapping.get_objects("},{"line_number":186,"context_line":"                context, segment_id\u003dsegment_id)"},{"line_number":187,"context_line":"            self.batch_notifier.queue_event(Event("},{"line_number":188,"context_line":"                self._create_or_update_nova_inventory, segment_id, total\u003dtotal,"},{"line_number":189,"context_line":"                reserved\u003dreserved,"},{"line_number":190,"context_line":"                segment_host_mappings\u003dsegment_host_mappings))"},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"    def _create_or_update_nova_inventory(self, event):"},{"line_number":193,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":23,"id":"5f7c97a3_f7042e1a","line":190,"range":{"start_line":183,"start_character":0,"end_line":190,"end_character":61},"in_reply_to":"5f7c97a3_c2c94aac","updated":"2018-05-12 20:35:27.000000000","message":"Done","commit_id":"848670947b9b3c2edfd7b62ec7059cad3a620774"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"7b0c8652818de6524439c272157874b411d83ae3","unresolved":false,"context_lines":[{"line_number":267,"context_line":"            return"},{"line_number":268,"context_line":"        if original_segment_id !\u003d segment_id:"},{"line_number":269,"context_line":"            # Migration to routed network, treat as create"},{"line_number":270,"context_line":"            total, reserved \u003d self._calculate_inventory_total_and_reserved("},{"line_number":271,"context_line":"                subnet)"},{"line_number":272,"context_line":"            if total:"},{"line_number":273,"context_line":"                segment_host_mappings \u003d net_obj.SegmentHostMapping.get_objects("},{"line_number":274,"context_line":"                    context, segment_id\u003dsegment_id)"},{"line_number":275,"context_line":"                self.batch_notifier.queue_event(Event("},{"line_number":276,"context_line":"                    self._create_or_update_nova_inventory, segment_id,"},{"line_number":277,"context_line":"                    total\u003dtotal,"},{"line_number":278,"context_line":"                    reserved\u003dreserved,"},{"line_number":279,"context_line":"                    segment_host_mappings\u003dsegment_host_mappings))"},{"line_number":280,"context_line":"            return"},{"line_number":281,"context_line":"        filters \u003d {\u0027segment_id\u0027: [segment_id],"},{"line_number":282,"context_line":"                   \u0027ip_version\u0027: [constants.IP_VERSION_4]}"}],"source_content_type":"text/x-python","patch_set":23,"id":"5f7c97a3_e2cec6b2","line":279,"range":{"start_line":270,"start_character":0,"end_line":279,"end_character":65},"updated":"2018-05-10 22:19:38.000000000","message":"See my comment to L183","commit_id":"848670947b9b3c2edfd7b62ec7059cad3a620774"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"082a7d776533f46387fba43ca3a5f8509d10d945","unresolved":false,"context_lines":[{"line_number":267,"context_line":"            return"},{"line_number":268,"context_line":"        if original_segment_id !\u003d segment_id:"},{"line_number":269,"context_line":"            # Migration to routed network, treat as create"},{"line_number":270,"context_line":"            total, reserved \u003d self._calculate_inventory_total_and_reserved("},{"line_number":271,"context_line":"                subnet)"},{"line_number":272,"context_line":"            if total:"},{"line_number":273,"context_line":"                segment_host_mappings \u003d net_obj.SegmentHostMapping.get_objects("},{"line_number":274,"context_line":"                    context, segment_id\u003dsegment_id)"},{"line_number":275,"context_line":"                self.batch_notifier.queue_event(Event("},{"line_number":276,"context_line":"                    self._create_or_update_nova_inventory, segment_id,"},{"line_number":277,"context_line":"                    total\u003dtotal,"},{"line_number":278,"context_line":"                    reserved\u003dreserved,"},{"line_number":279,"context_line":"                    segment_host_mappings\u003dsegment_host_mappings))"},{"line_number":280,"context_line":"            return"},{"line_number":281,"context_line":"        filters \u003d {\u0027segment_id\u0027: [segment_id],"},{"line_number":282,"context_line":"                   \u0027ip_version\u0027: [constants.IP_VERSION_4]}"}],"source_content_type":"text/x-python","patch_set":23,"id":"5f7c97a3_17020a0c","line":279,"range":{"start_line":270,"start_character":0,"end_line":279,"end_character":65},"in_reply_to":"5f7c97a3_e2cec6b2","updated":"2018-05-12 20:35:27.000000000","message":"Done","commit_id":"848670947b9b3c2edfd7b62ec7059cad3a620774"}],"neutron/tests/unit/extensions/test_segment.py":[{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"b656db576a4c7663d293a6b6aee24aed6ad9be0a","unresolved":false,"context_lines":[{"line_number":474,"context_line":"        res \u003d self.deserialize(self.fmt, response)"},{"line_number":475,"context_line":""},{"line_number":476,"context_line":"        self.assertEqual(webob.exc.HTTPOk.code, response.status_int)"},{"line_number":477,"context_line":"        self.assertEqual(res[\u0027subnet\u0027][\u0027segment_id\u0027], segment[\u0027id\u0027])"},{"line_number":478,"context_line":""},{"line_number":479,"context_line":"    def test_associate_existing_subnet_fail_if_multiple_segments(self):"},{"line_number":480,"context_line":"        with self.network() as network:"}],"source_content_type":"text/x-python","patch_set":7,"id":"df87a7cf_e81ae76c","line":477,"range":{"start_line":477,"start_character":54,"end_line":477,"end_character":67},"updated":"2017-12-11 18:38:59.000000000","message":"Isn\u0027t this the valid value to assert is equal? If so it\u0027s best to put it as 1st arg to assertEqual.","commit_id":"1144eda75d737435dc4f4bae161afc6dda75add6"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"154a3a5b27bef67a5d037b4a27c7d629ebb3cf27","unresolved":false,"context_lines":[{"line_number":1634,"context_line":"    def test_first_subnet_association_with_segment(self):"},{"line_number":1635,"context_line":"        self._test_first_subnet_association_with_segment()"},{"line_number":1636,"context_line":""},{"line_number":1637,"context_line":"    def test_update_subnet_association_with_segment(self, cidr\u003d\u002710.0.0.0/24\u0027,"},{"line_number":1638,"context_line":"                                                    allocation_pools\u003dNone):"},{"line_number":1639,"context_line":"        with self.network() as network:"},{"line_number":1640,"context_line":"            segment_id \u003d self._list(\u0027segments\u0027)[\u0027segments\u0027][0][\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":8,"id":"df87a7cf_b0d8a61e","line":1637,"updated":"2017-12-13 00:31:08.000000000","message":"The segment that you are associating to the subnet is not associated with any other subnets. That is one of the rules we have defined for this migration. As a consequence, you are not updating the inventory for this segment. You are creating it. Therefore, this test case should be setup like the one in L1634. Look at slides 19 and 20 here: https://www.openstack.org/assets/presentation-media/Scaling-Up-OpenStack-Networking-with-Routed-Networks.pdf. It will give you a graphical idea of what should be created","commit_id":"8e3b29391db3c45fc7be5773aef4613241bfa12c"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"083d2a10d390e230304e94d2d477323be2c1c5e0","unresolved":false,"context_lines":[{"line_number":1634,"context_line":"    def test_first_subnet_association_with_segment(self):"},{"line_number":1635,"context_line":"        self._test_first_subnet_association_with_segment()"},{"line_number":1636,"context_line":""},{"line_number":1637,"context_line":"    def test_update_subnet_association_with_segment(self, cidr\u003d\u002710.0.0.0/24\u0027,"},{"line_number":1638,"context_line":"                                                    allocation_pools\u003dNone):"},{"line_number":1639,"context_line":"        with self.network() as network:"},{"line_number":1640,"context_line":"            segment_id \u003d self._list(\u0027segments\u0027)[\u0027segments\u0027][0][\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":8,"id":"df87a7cf_15461651","line":1637,"in_reply_to":"df87a7cf_b0d8a61e","updated":"2017-12-13 10:49:48.000000000","message":"Ok, so it only sends the notification to create the resource pool if the subnet is associated with a segment. \n\n_notify_subnet_updated() changed do the same as notify on create in the case where the update is a migration.\n\nif original_segment_id !\u003d segment_id:\n    # Migration to routed network, treat as create\n    ...\n\nAnd in the unit test updated to _assert_inventory_creation(). \n\nI also added _validate_l2_adjacency() in the unit test, pre/post the segment association.","commit_id":"8e3b29391db3c45fc7be5773aef4613241bfa12c"}],"releasenotes/notes/allow-update-subnet-segment-id-association-1fb02ace27e85bb8.yaml":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"99276dd44414c6778546151fa2ba22e10ac64867","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Add support for setting the ``segment_id`` for and existing"},{"line_number":4,"context_line":"    subnet. This enables users to migrate from non routed networks"},{"line_number":5,"context_line":"    with no subnet/segment-association, to the new model. It is"},{"line_number":6,"context_line":"    only possible to do this migration if the following conditions"}],"source_content_type":"text/x-yaml","patch_set":3,"id":"df87a7cf_54eebb22","line":3,"range":{"start_line":3,"start_character":51,"end_line":3,"end_character":54},"updated":"2017-12-04 19:37:51.000000000","message":"s/an","commit_id":"968fbd0e32885213f0ccc92e234511cd90e1c47d"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"0a2bd3c65b305822b48c2d5176e85c6cba114ef4","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Add support for setting the ``segment_id`` for and existing"},{"line_number":4,"context_line":"    subnet. This enables users to migrate from non routed networks"},{"line_number":5,"context_line":"    with no subnet/segment-association, to the new model. It is"},{"line_number":6,"context_line":"    only possible to do this migration if the following conditions"}],"source_content_type":"text/x-yaml","patch_set":3,"id":"df87a7cf_adcfb67d","line":3,"range":{"start_line":3,"start_character":51,"end_line":3,"end_character":54},"in_reply_to":"df87a7cf_54eebb22","updated":"2017-12-04 22:18:13.000000000","message":"Done","commit_id":"968fbd0e32885213f0ccc92e234511cd90e1c47d"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"99276dd44414c6778546151fa2ba22e10ac64867","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Add support for setting the ``segment_id`` for and existing"},{"line_number":4,"context_line":"    subnet. This enables users to migrate from non routed networks"},{"line_number":5,"context_line":"    with no subnet/segment-association, to the new model. It is"},{"line_number":6,"context_line":"    only possible to do this migration if the following conditions"},{"line_number":7,"context_line":"    are met. (The current segment_id is None, the Network contain a"}],"source_content_type":"text/x-yaml","patch_set":3,"id":"df87a7cf_b4dce774","line":4,"range":{"start_line":4,"start_character":47,"end_line":4,"end_character":57},"updated":"2017-12-04 19:37:51.000000000","message":"s/non-routed","commit_id":"968fbd0e32885213f0ccc92e234511cd90e1c47d"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"0a2bd3c65b305822b48c2d5176e85c6cba114ef4","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Add support for setting the ``segment_id`` for and existing"},{"line_number":4,"context_line":"    subnet. This enables users to migrate from non routed networks"},{"line_number":5,"context_line":"    with no subnet/segment-association, to the new model. It is"},{"line_number":6,"context_line":"    only possible to do this migration if the following conditions"},{"line_number":7,"context_line":"    are met. (The current segment_id is None, the Network contain a"}],"source_content_type":"text/x-yaml","patch_set":3,"id":"df87a7cf_0dbb42e2","line":4,"range":{"start_line":4,"start_character":47,"end_line":4,"end_character":57},"in_reply_to":"df87a7cf_b4dce774","updated":"2017-12-04 22:18:13.000000000","message":"Done","commit_id":"968fbd0e32885213f0ccc92e234511cd90e1c47d"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"99276dd44414c6778546151fa2ba22e10ac64867","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - Add support for setting the ``segment_id`` for and existing"},{"line_number":4,"context_line":"    subnet. This enables users to migrate from non routed networks"},{"line_number":5,"context_line":"    with no subnet/segment-association, to the new model. It is"},{"line_number":6,"context_line":"    only possible to do this migration if the following conditions"},{"line_number":7,"context_line":"    are met. (The current segment_id is None, the Network contain a"},{"line_number":8,"context_line":"    single segment and subnet.)"},{"line_number":9,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":3,"id":"df87a7cf_d4c2cb85","line":6,"range":{"start_line":6,"start_character":42,"end_line":6,"end_character":45},"updated":"2017-12-04 19:37:51.000000000","message":"s/both of the","commit_id":"968fbd0e32885213f0ccc92e234511cd90e1c47d"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"0a2bd3c65b305822b48c2d5176e85c6cba114ef4","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - Add support for setting the ``segment_id`` for and existing"},{"line_number":4,"context_line":"    subnet. This enables users to migrate from non routed networks"},{"line_number":5,"context_line":"    with no subnet/segment-association, to the new model. It is"},{"line_number":6,"context_line":"    only possible to do this migration if the following conditions"},{"line_number":7,"context_line":"    are met. (The current segment_id is None, the Network contain a"},{"line_number":8,"context_line":"    single segment and subnet.)"},{"line_number":9,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":3,"id":"df87a7cf_edb5beef","line":6,"range":{"start_line":6,"start_character":42,"end_line":6,"end_character":45},"in_reply_to":"df87a7cf_d4c2cb85","updated":"2017-12-04 22:18:13.000000000","message":"Done","commit_id":"968fbd0e32885213f0ccc92e234511cd90e1c47d"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"99276dd44414c6778546151fa2ba22e10ac64867","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    subnet. This enables users to migrate from non routed networks"},{"line_number":5,"context_line":"    with no subnet/segment-association, to the new model. It is"},{"line_number":6,"context_line":"    only possible to do this migration if the following conditions"},{"line_number":7,"context_line":"    are met. (The current segment_id is None, the Network contain a"},{"line_number":8,"context_line":"    single segment and subnet.)"},{"line_number":9,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":3,"id":"df87a7cf_b4c5c790","line":8,"range":{"start_line":7,"start_character":11,"end_line":8,"end_character":31},"updated":"2017-12-04 19:37:51.000000000","message":"s/: the current ``segment_id`` of the subnet is None and the network contains a single segment and subnet.","commit_id":"968fbd0e32885213f0ccc92e234511cd90e1c47d"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"0a2bd3c65b305822b48c2d5176e85c6cba114ef4","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    subnet. This enables users to migrate from non routed networks"},{"line_number":5,"context_line":"    with no subnet/segment-association, to the new model. It is"},{"line_number":6,"context_line":"    only possible to do this migration if the following conditions"},{"line_number":7,"context_line":"    are met. (The current segment_id is None, the Network contain a"},{"line_number":8,"context_line":"    single segment and subnet.)"},{"line_number":9,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":3,"id":"df87a7cf_2dbc06db","line":8,"range":{"start_line":7,"start_character":11,"end_line":8,"end_character":31},"in_reply_to":"df87a7cf_b4c5c790","updated":"2017-12-04 22:18:13.000000000","message":"Done","commit_id":"968fbd0e32885213f0ccc92e234511cd90e1c47d"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"fa03d3445102c1afe9a5947f6ded450c61b85dd1","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":"    Add support for setting the ``segment_id`` for an existing"},{"line_number":5,"context_line":"    subnet. This enables users to migrate from non-routed networks"},{"line_number":6,"context_line":"    with no subnet/segment-association, to the new model. It is"}],"source_content_type":"text/x-yaml","patch_set":4,"id":"df87a7cf_be957942","line":3,"updated":"2017-12-06 05:23:05.000000000","message":"nit: trailing whitespace","commit_id":"530faee6fcb501dbb3a86784845999f0358c10e6"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"45104552e13fa504fb4148d5fe668e6d0178df05","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":"    Add support for setting the ``segment_id`` for an existing"},{"line_number":5,"context_line":"    subnet. This enables users to migrate from non-routed networks"},{"line_number":6,"context_line":"    with no subnet/segment-association, to the new model. It is"}],"source_content_type":"text/x-yaml","patch_set":4,"id":"df87a7cf_e37efd69","line":3,"in_reply_to":"df87a7cf_be957942","updated":"2017-12-06 14:03:57.000000000","message":"Done","commit_id":"530faee6fcb501dbb3a86784845999f0358c10e6"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"fa03d3445102c1afe9a5947f6ded450c61b85dd1","unresolved":false,"context_lines":[{"line_number":5,"context_line":"    subnet. This enables users to migrate from non-routed networks"},{"line_number":6,"context_line":"    with no subnet/segment-association, to the new model. It is"},{"line_number":7,"context_line":"    only possible to do this migration if both of the following"},{"line_number":8,"context_line":"    conditions are met: the current ``segment_id`` is None and the"},{"line_number":9,"context_line":"    network contains a single segment and subnet."},{"line_number":10,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":4,"id":"df87a7cf_1e88251d","line":8,"range":{"start_line":8,"start_character":4,"end_line":8,"end_character":23},"updated":"2017-12-06 05:23:05.000000000","message":"nit: I think the \u0027:\u0027 here is messing something up, this text seems a different color, maybe just make a \u0027 - \u0027 instead?","commit_id":"530faee6fcb501dbb3a86784845999f0358c10e6"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"45104552e13fa504fb4148d5fe668e6d0178df05","unresolved":false,"context_lines":[{"line_number":5,"context_line":"    subnet. This enables users to migrate from non-routed networks"},{"line_number":6,"context_line":"    with no subnet/segment-association, to the new model. It is"},{"line_number":7,"context_line":"    only possible to do this migration if both of the following"},{"line_number":8,"context_line":"    conditions are met: the current ``segment_id`` is None and the"},{"line_number":9,"context_line":"    network contains a single segment and subnet."},{"line_number":10,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":4,"id":"df87a7cf_43880970","line":8,"range":{"start_line":8,"start_character":4,"end_line":8,"end_character":23},"in_reply_to":"df87a7cf_1e88251d","updated":"2017-12-06 14:03:57.000000000","message":"Done","commit_id":"530faee6fcb501dbb3a86784845999f0358c10e6"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"ac6a12bfece72d3a8cd737fc58eec2e2aea957e8","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Add support for setting the ``segment_id`` for an existing"},{"line_number":5,"context_line":"    subnet. This enables users to migrate from non-routed networks"},{"line_number":6,"context_line":"    with no subnet/segment-association, to the new model. It is"},{"line_number":7,"context_line":"    only possible to do this migration if both of the following"},{"line_number":8,"context_line":"    conditions are met - the current ``segment_id`` is None and the"},{"line_number":9,"context_line":"    network contains a single segment and subnet."}],"source_content_type":"text/x-yaml","patch_set":5,"id":"df87a7cf_7c3342f7","line":6,"range":{"start_line":5,"start_character":12,"end_line":6,"end_character":56},"updated":"2017-12-07 21:16:36.000000000","message":"This \u0027new model\u0027 thing seems unclear to me. Consider the following version:\n\nThis enables users to convert a non-routed network with no subnet/segment association to a routed one.","commit_id":"4844229797d2f34db9e9ecc8345cdc83cb677c46"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"85dbe799ce0aab5961e4c536d6dc124000796379","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Add support for setting the ``segment_id`` for an existing"},{"line_number":5,"context_line":"    subnet. This enables users to migrate from non-routed networks"},{"line_number":6,"context_line":"    with no subnet/segment-association, to the new model. It is"},{"line_number":7,"context_line":"    only possible to do this migration if both of the following"},{"line_number":8,"context_line":"    conditions are met - the current ``segment_id`` is None and the"},{"line_number":9,"context_line":"    network contains a single segment and subnet."}],"source_content_type":"text/x-yaml","patch_set":5,"id":"df87a7cf_399b7e66","line":6,"range":{"start_line":5,"start_character":12,"end_line":6,"end_character":56},"in_reply_to":"df87a7cf_7c3342f7","updated":"2017-12-09 23:54:45.000000000","message":"Done","commit_id":"4844229797d2f34db9e9ecc8345cdc83cb677c46"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"ac6a12bfece72d3a8cd737fc58eec2e2aea957e8","unresolved":false,"context_lines":[{"line_number":5,"context_line":"    subnet. This enables users to migrate from non-routed networks"},{"line_number":6,"context_line":"    with no subnet/segment-association, to the new model. It is"},{"line_number":7,"context_line":"    only possible to do this migration if both of the following"},{"line_number":8,"context_line":"    conditions are met - the current ``segment_id`` is None and the"},{"line_number":9,"context_line":"    network contains a single segment and subnet."},{"line_number":10,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":5,"id":"df87a7cf_c10f0735","line":8,"range":{"start_line":8,"start_character":55,"end_line":8,"end_character":59},"updated":"2017-12-07 21:16:36.000000000","message":"``None``","commit_id":"4844229797d2f34db9e9ecc8345cdc83cb677c46"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"85dbe799ce0aab5961e4c536d6dc124000796379","unresolved":false,"context_lines":[{"line_number":5,"context_line":"    subnet. This enables users to migrate from non-routed networks"},{"line_number":6,"context_line":"    with no subnet/segment-association, to the new model. It is"},{"line_number":7,"context_line":"    only possible to do this migration if both of the following"},{"line_number":8,"context_line":"    conditions are met - the current ``segment_id`` is None and the"},{"line_number":9,"context_line":"    network contains a single segment and subnet."},{"line_number":10,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":5,"id":"df87a7cf_d9a3729d","line":8,"range":{"start_line":8,"start_character":55,"end_line":8,"end_character":59},"in_reply_to":"df87a7cf_c10f0735","updated":"2017-12-09 23:54:45.000000000","message":"Done","commit_id":"4844229797d2f34db9e9ecc8345cdc83cb677c46"}]}
