)]}'
{"neutron/db/ipam_pluggable_backend.py":[{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"1ff801e3d34fed6c167573dc212a3f0869edc3b3","unresolved":false,"context_lines":[{"line_number":433,"context_line":"        # request so that segment validation is skipped."},{"line_number":434,"context_line":"        if obj_subnet.Subnet.get_object("},{"line_number":435,"context_line":"                context, id\u003did).segment_id \u003d\u003d s[\u0027segment_id\u0027]:"},{"line_number":436,"context_line":"            del s[\u0027segment_id\u0027]"},{"line_number":437,"context_line":"        if \u0027segment_id\u0027 in s:"},{"line_number":438,"context_line":"            self._validate_segment(context, s[\u0027network_id\u0027], s[\u0027segment_id\u0027],"},{"line_number":439,"context_line":"                                   action\u003d\u0027update\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_a5972839","line":436,"range":{"start_line":436,"start_character":12,"end_line":436,"end_character":31},"updated":"2018-09-20 21:49:04.000000000","message":"*facepalm*, yes.\n\nI saw retry_error and a log of errors on CI and initially figured it was some infra issue.","commit_id":"abdaaa7ebcc3ebb6688657bde23f97c5d15510e6"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"882cdb2c1941d520580da938585dcba05fcb4954","unresolved":false,"context_lines":[{"line_number":433,"context_line":"        # request so that segment validation is skipped."},{"line_number":434,"context_line":"        if obj_subnet.Subnet.get_object("},{"line_number":435,"context_line":"                context, id\u003did).segment_id \u003d\u003d s[\u0027segment_id\u0027]:"},{"line_number":436,"context_line":"            del s[\u0027segment_id\u0027]"},{"line_number":437,"context_line":"        if \u0027segment_id\u0027 in s:"},{"line_number":438,"context_line":"            self._validate_segment(context, s[\u0027network_id\u0027], s[\u0027segment_id\u0027],"},{"line_number":439,"context_line":"                                   action\u003d\u0027update\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_93559afb","line":436,"updated":"2018-09-20 15:53:08.000000000","message":"We actually don\u0027t know if there is a segment_id here, the next line checks that, so perhaps you need to check twice to cover the case where you delete it.  I\u0027m just guessing that\u0027s causing some of the test issues?","commit_id":"abdaaa7ebcc3ebb6688657bde23f97c5d15510e6"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"5a69002d0387624875a14d2de2b34b57e5fd02e3","unresolved":false,"context_lines":[{"line_number":433,"context_line":"        # request so that segment validation is skipped."},{"line_number":434,"context_line":"        if \u0027segment_id\u0027 in s and obj_subnet.Subnet.get_object("},{"line_number":435,"context_line":"                context, id\u003did).segment_id \u003d\u003d s[\u0027segment_id\u0027]:"},{"line_number":436,"context_line":"            del s[\u0027segment_id\u0027]"},{"line_number":437,"context_line":"        elif \u0027segment_id\u0027 in s:"},{"line_number":438,"context_line":"            self._validate_segment(context, s[\u0027network_id\u0027], s[\u0027segment_id\u0027],"},{"line_number":439,"context_line":"                                   action\u003d\u0027update\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_fb01076f","line":436,"updated":"2018-09-24 21:22:10.000000000","message":"Are you sure this can\u0027t somehow be put into _validate_segment()?  It just looks out of place here, but then it doesn\u0027t seem to me it should throw a NoUpdateSubnetWhenMultipleSegmentsOnNetwork if there is only one segment there to begin with.  Might need to look when my eyes are fresh.","commit_id":"e9fcbb4e878d6c229388269db31bfcf4a0150683"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"6aebbac3f2a72eb6a60aedbd9e2a0f64f302c8bb","unresolved":false,"context_lines":[{"line_number":433,"context_line":"        # request so that segment validation is skipped."},{"line_number":434,"context_line":"        if \u0027segment_id\u0027 in s and obj_subnet.Subnet.get_object("},{"line_number":435,"context_line":"                context, id\u003did).segment_id \u003d\u003d s[\u0027segment_id\u0027]:"},{"line_number":436,"context_line":"            del s[\u0027segment_id\u0027]"},{"line_number":437,"context_line":"        elif \u0027segment_id\u0027 in s:"},{"line_number":438,"context_line":"            self._validate_segment(context, s[\u0027network_id\u0027], s[\u0027segment_id\u0027],"},{"line_number":439,"context_line":"                                   action\u003d\u0027update\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_e194ffe9","line":436,"in_reply_to":"3f79a3b5_fb01076f","updated":"2018-10-05 16:14:24.000000000","message":"We would have to pass the subnet object (or the subnet.id) into _validate_segment in that case?\n\nI guess if we did we could have a condition around neutron/db/ipam_backend_mixin.py#L324 to break out \u0027if action \u003d\u003d \u0027update\u0027:\u0027 in case the segment_id is not being changed.","commit_id":"e9fcbb4e878d6c229388269db31bfcf4a0150683"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"b4ac726956171d97f91bc4ffe4b4d5f31719c404","unresolved":false,"context_lines":[{"line_number":432,"context_line":"            self._validate_segment("},{"line_number":433,"context_line":"                context, s[\u0027network_id\u0027], s[\u0027segment_id\u0027], action\u003d\u0027update\u0027,"},{"line_number":434,"context_line":"                old_segment_id\u003dobj_subnet.Subnet.get_object("},{"line_number":435,"context_line":"                    context, id\u003did).segment_id)"},{"line_number":436,"context_line":"        # \u0027allocation_pools\u0027 is removed from \u0027s\u0027 in"},{"line_number":437,"context_line":"        # _update_subnet_allocation_pools (ipam_backend_mixin),"},{"line_number":438,"context_line":"        # so create unchanged copy for ipam driver"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_eb90d951","line":435,"updated":"2018-10-12 03:20:33.000000000","message":"I guess I\u0027d be more comfortable if this was done outside the call like:\n\nsubnet \u003d obj_subnet.Subnet.get_object(...)\nold_segment_id \u003d subnet.segment_id if subnet else None\n\nIt\u0027s what self._get_subnet_object() would do, but it could throw an exception.","commit_id":"651a0be9595b123e5391eda2d524a7d5bd5f28fd"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"41175f4fa6a9a0a48b17e69f1d99fab849ad393c","unresolved":false,"context_lines":[{"line_number":432,"context_line":"            self._validate_segment("},{"line_number":433,"context_line":"                context, s[\u0027network_id\u0027], s[\u0027segment_id\u0027], action\u003d\u0027update\u0027,"},{"line_number":434,"context_line":"                old_segment_id\u003dobj_subnet.Subnet.get_object("},{"line_number":435,"context_line":"                    context, id\u003did).segment_id)"},{"line_number":436,"context_line":"        # \u0027allocation_pools\u0027 is removed from \u0027s\u0027 in"},{"line_number":437,"context_line":"        # _update_subnet_allocation_pools (ipam_backend_mixin),"},{"line_number":438,"context_line":"        # so create unchanged copy for ipam driver"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_6bafcc7b","line":435,"in_reply_to":"3f79a3b5_4580d149","updated":"2018-10-13 16:27:39.000000000","message":"Done","commit_id":"651a0be9595b123e5391eda2d524a7d5bd5f28fd"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"a04694f58de1777ca437d16b4838843a2a39c4f1","unresolved":false,"context_lines":[{"line_number":432,"context_line":"            self._validate_segment("},{"line_number":433,"context_line":"                context, s[\u0027network_id\u0027], s[\u0027segment_id\u0027], action\u003d\u0027update\u0027,"},{"line_number":434,"context_line":"                old_segment_id\u003dobj_subnet.Subnet.get_object("},{"line_number":435,"context_line":"                    context, id\u003did).segment_id)"},{"line_number":436,"context_line":"        # \u0027allocation_pools\u0027 is removed from \u0027s\u0027 in"},{"line_number":437,"context_line":"        # _update_subnet_allocation_pools (ipam_backend_mixin),"},{"line_number":438,"context_line":"        # so create unchanged copy for ipam driver"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_4580d149","line":435,"in_reply_to":"3f79a3b5_eb90d951","updated":"2018-10-12 11:46:10.000000000","message":"+1, that get_object can return None in some case.","commit_id":"651a0be9595b123e5391eda2d524a7d5bd5f28fd"}],"neutron/tests/unit/extensions/test_segment.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"882cdb2c1941d520580da938585dcba05fcb4954","unresolved":false,"context_lines":[{"line_number":546,"context_line":""},{"line_number":547,"context_line":"        segment1 \u003d self._test_create_segment(network_id\u003dnet[\u0027id\u0027],"},{"line_number":548,"context_line":"                                            physical_network\u003d\u0027phys_net1\u0027,"},{"line_number":549,"context_line":"                                            segmentation_id\u003d200)[\u0027segment\u0027]"},{"line_number":550,"context_line":"        self._test_create_segment(network_id\u003dnet[\u0027id\u0027],"},{"line_number":551,"context_line":"                                  physical_network\u003d\u0027phys_net2\u0027,"},{"line_number":552,"context_line":"                                  segmentation_id\u003d200)[\u0027segment\u0027]"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_f002c40b","line":549,"updated":"2018-09-20 15:53:08.000000000","message":"super nit: indent looks off, but pep8 didn\u0027t complain, so not important","commit_id":"abdaaa7ebcc3ebb6688657bde23f97c5d15510e6"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"3a01c213f147ae61eac892f1b0b1d8de99e9a2db","unresolved":false,"context_lines":[{"line_number":547,"context_line":"        segment1 \u003d self._test_create_segment(network_id\u003dnet[\u0027id\u0027],"},{"line_number":548,"context_line":"                                            physical_network\u003d\u0027phys_net1\u0027,"},{"line_number":549,"context_line":"                                            segmentation_id\u003d200)[\u0027segment\u0027]"},{"line_number":550,"context_line":"        self._test_create_segment(network_id\u003dnet[\u0027id\u0027],"},{"line_number":551,"context_line":"                                  physical_network\u003d\u0027phys_net2\u0027,"},{"line_number":552,"context_line":"                                  segmentation_id\u003d200)[\u0027segment\u0027]"},{"line_number":553,"context_line":"        with self.subnet(network\u003dnetwork, segment_id\u003dsegment1[\u0027id\u0027]) as subnet:"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_0f8ea825","line":550,"range":{"start_line":550,"start_character":13,"end_line":550,"end_character":33},"updated":"2018-10-10 17:11:35.000000000","message":"Nit: it seems creating the second segment is not mandatory and doesn\u0027t seem increase the coverage.","commit_id":"651a0be9595b123e5391eda2d524a7d5bd5f28fd"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"9351afaf2155ebe5746806915396f05fc78733cd","unresolved":false,"context_lines":[{"line_number":547,"context_line":"        segment1 \u003d self._test_create_segment(network_id\u003dnet[\u0027id\u0027],"},{"line_number":548,"context_line":"                                            physical_network\u003d\u0027phys_net1\u0027,"},{"line_number":549,"context_line":"                                            segmentation_id\u003d200)[\u0027segment\u0027]"},{"line_number":550,"context_line":"        self._test_create_segment(network_id\u003dnet[\u0027id\u0027],"},{"line_number":551,"context_line":"                                  physical_network\u003d\u0027phys_net2\u0027,"},{"line_number":552,"context_line":"                                  segmentation_id\u003d200)[\u0027segment\u0027]"},{"line_number":553,"context_line":"        with self.subnet(network\u003dnetwork, segment_id\u003dsegment1[\u0027id\u0027]) as subnet:"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_df060575","line":550,"range":{"start_line":550,"start_character":13,"end_line":550,"end_character":33},"in_reply_to":"3f79a3b5_0f8ea825","updated":"2018-10-11 15:05:50.000000000","message":"Actually it is.\n\nIf there is just one segment none of the check\u0027s in the block at neutron/db/ipam_backend_mixin.py:324 will fail. So the update actually passes in that case, without this change.\n\nHowever when there are more than one segment the first check after neutron/db/ipam_backend_mixin.py:327 will raise SubnetsNotAllAssociatedWithSegments unless this patch is in place.","commit_id":"651a0be9595b123e5391eda2d524a7d5bd5f28fd"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"a0351a44cd1c71fe0f60cc5f159a796bf30d8f9d","unresolved":false,"context_lines":[{"line_number":547,"context_line":"        segment1 \u003d self._test_create_segment(network_id\u003dnet[\u0027id\u0027],"},{"line_number":548,"context_line":"                                            physical_network\u003d\u0027phys_net1\u0027,"},{"line_number":549,"context_line":"                                            segmentation_id\u003d200)[\u0027segment\u0027]"},{"line_number":550,"context_line":"        self._test_create_segment(network_id\u003dnet[\u0027id\u0027],"},{"line_number":551,"context_line":"                                  physical_network\u003d\u0027phys_net2\u0027,"},{"line_number":552,"context_line":"                                  segmentation_id\u003d200)[\u0027segment\u0027]"},{"line_number":553,"context_line":"        with self.subnet(network\u003dnetwork, segment_id\u003dsegment1[\u0027id\u0027]) as subnet:"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_3d2b7e33","line":550,"range":{"start_line":550,"start_character":13,"end_line":550,"end_character":33},"in_reply_to":"3f79a3b5_df060575","updated":"2018-10-11 18:15:05.000000000","message":"ACK","commit_id":"651a0be9595b123e5391eda2d524a7d5bd5f28fd"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"3a01c213f147ae61eac892f1b0b1d8de99e9a2db","unresolved":false,"context_lines":[{"line_number":549,"context_line":"                                            segmentation_id\u003d200)[\u0027segment\u0027]"},{"line_number":550,"context_line":"        self._test_create_segment(network_id\u003dnet[\u0027id\u0027],"},{"line_number":551,"context_line":"                                  physical_network\u003d\u0027phys_net2\u0027,"},{"line_number":552,"context_line":"                                  segmentation_id\u003d200)[\u0027segment\u0027]"},{"line_number":553,"context_line":"        with self.subnet(network\u003dnetwork, segment_id\u003dsegment1[\u0027id\u0027]) as subnet:"},{"line_number":554,"context_line":"            subnet \u003d subnet[\u0027subnet\u0027]"},{"line_number":555,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_affbf478","line":552,"range":{"start_line":552,"start_character":50,"end_line":552,"end_character":53},"updated":"2018-10-10 17:11:35.000000000","message":"It looks strange to have two segment within the same network to have the same segmentation_id. Are you sure this is what you intend to do?","commit_id":"651a0be9595b123e5391eda2d524a7d5bd5f28fd"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"9351afaf2155ebe5746806915396f05fc78733cd","unresolved":false,"context_lines":[{"line_number":549,"context_line":"                                            segmentation_id\u003d200)[\u0027segment\u0027]"},{"line_number":550,"context_line":"        self._test_create_segment(network_id\u003dnet[\u0027id\u0027],"},{"line_number":551,"context_line":"                                  physical_network\u003d\u0027phys_net2\u0027,"},{"line_number":552,"context_line":"                                  segmentation_id\u003d200)[\u0027segment\u0027]"},{"line_number":553,"context_line":"        with self.subnet(network\u003dnetwork, segment_id\u003dsegment1[\u0027id\u0027]) as subnet:"},{"line_number":554,"context_line":"            subnet \u003d subnet[\u0027subnet\u0027]"},{"line_number":555,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_ffe741aa","line":552,"range":{"start_line":552,"start_character":50,"end_line":552,"end_character":53},"in_reply_to":"3f79a3b5_affbf478","updated":"2018-10-11 15:05:50.000000000","message":"I believe it is a common pattern to use the same VLAN id for the same L3 network in different physical networks. The first segment is VLAN 200 on TOR switch A, and the second is VLAN 200 on TOR switch B. There is routing between TOR A and TOR B, i.e no L2 vlan trunk, so the same vlan id can be used.","commit_id":"651a0be9595b123e5391eda2d524a7d5bd5f28fd"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"a0351a44cd1c71fe0f60cc5f159a796bf30d8f9d","unresolved":false,"context_lines":[{"line_number":549,"context_line":"                                            segmentation_id\u003d200)[\u0027segment\u0027]"},{"line_number":550,"context_line":"        self._test_create_segment(network_id\u003dnet[\u0027id\u0027],"},{"line_number":551,"context_line":"                                  physical_network\u003d\u0027phys_net2\u0027,"},{"line_number":552,"context_line":"                                  segmentation_id\u003d200)[\u0027segment\u0027]"},{"line_number":553,"context_line":"        with self.subnet(network\u003dnetwork, segment_id\u003dsegment1[\u0027id\u0027]) as subnet:"},{"line_number":554,"context_line":"            subnet \u003d subnet[\u0027subnet\u0027]"},{"line_number":555,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_9df892c1","line":552,"range":{"start_line":552,"start_character":50,"end_line":552,"end_character":53},"in_reply_to":"3f79a3b5_ffe741aa","updated":"2018-10-11 18:15:05.000000000","message":"ACK","commit_id":"651a0be9595b123e5391eda2d524a7d5bd5f28fd"}]}
