)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"0241de122e257025a317f552d626f87e3b031dac","unresolved":true,"context_lines":[{"line_number":4,"context_line":"Commit:     Balazs Gibizer \u003cbalazs.gibizer@est.tech\u003e"},{"line_number":5,"context_line":"CommitDate: 2021-03-31 09:28:19 +0200"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add support for RP re- and un-parenting"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch adds the new microversion 1.37 in which changing the"},{"line_number":10,"context_line":"parent_provider_uuid of a resource provider to any other provider"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"036526a8_4b311ea1","line":7,"range":{"start_line":7,"start_character":27,"end_line":7,"end_character":39},"updated":"2021-03-31 12:46:32.000000000","message":"I\u0027d call this orphaning.","commit_id":"699052c9dd56ed2bfd2f18b9038dba6f33da9164"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"eebdaa134a3e8a1d469ade3d6ee7f234e15026df","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Balazs Gibizer \u003cbalazs.gibizer@est.tech\u003e"},{"line_number":5,"context_line":"CommitDate: 2021-03-31 09:28:19 +0200"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add support for RP re- and un-parenting"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch adds the new microversion 1.37 in which changing the"},{"line_number":10,"context_line":"parent_provider_uuid of a resource provider to any other provider"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"f679c992_569cb1a8","line":7,"range":{"start_line":7,"start_character":27,"end_line":7,"end_character":39},"in_reply_to":"036526a8_4b311ea1","updated":"2021-04-15 11:03:39.000000000","message":"Done","commit_id":"699052c9dd56ed2bfd2f18b9038dba6f33da9164"}],"api-ref/source/parameters.yaml":[{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"0241de122e257025a317f552d626f87e3b031dac","unresolved":true,"context_lines":[{"line_number":678,"context_line":"      cannot be changed."},{"line_number":679,"context_line":""},{"line_number":680,"context_line":"    * Since version ``1.37``, it can be set to any existing provider UUID"},{"line_number":681,"context_line":"      excepts to providers in its own subtree. Also it can be set to null to"},{"line_number":682,"context_line":"      transform the provider to a new root provider."},{"line_number":683,"context_line":"  min_version: 1.14"},{"line_number":684,"context_line":"resource_provider_parent_provider_uuid_required_no_min:"}],"source_content_type":"text/x-yaml","patch_set":1,"id":"65e8794b_16a0e018","line":681,"range":{"start_line":681,"start_character":0,"end_line":681,"end_character":6},"updated":"2021-03-31 12:46:32.000000000","message":"Talking about \u0027rejecting loops\u0027 probably expresses the intention better.","commit_id":"699052c9dd56ed2bfd2f18b9038dba6f33da9164"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"eebdaa134a3e8a1d469ade3d6ee7f234e15026df","unresolved":false,"context_lines":[{"line_number":678,"context_line":"      cannot be changed."},{"line_number":679,"context_line":""},{"line_number":680,"context_line":"    * Since version ``1.37``, it can be set to any existing provider UUID"},{"line_number":681,"context_line":"      excepts to providers in its own subtree. Also it can be set to null to"},{"line_number":682,"context_line":"      transform the provider to a new root provider."},{"line_number":683,"context_line":"  min_version: 1.14"},{"line_number":684,"context_line":"resource_provider_parent_provider_uuid_required_no_min:"}],"source_content_type":"text/x-yaml","patch_set":1,"id":"9effdcb5_4729e938","line":681,"range":{"start_line":681,"start_character":0,"end_line":681,"end_character":6},"in_reply_to":"65e8794b_16a0e018","updated":"2021-04-15 11:03:39.000000000","message":"Done","commit_id":"699052c9dd56ed2bfd2f18b9038dba6f33da9164"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"0241de122e257025a317f552d626f87e3b031dac","unresolved":true,"context_lines":[{"line_number":679,"context_line":""},{"line_number":680,"context_line":"    * Since version ``1.37``, it can be set to any existing provider UUID"},{"line_number":681,"context_line":"      excepts to providers in its own subtree. Also it can be set to null to"},{"line_number":682,"context_line":"      transform the provider to a new root provider."},{"line_number":683,"context_line":"  min_version: 1.14"},{"line_number":684,"context_line":"resource_provider_parent_provider_uuid_required_no_min:"},{"line_number":685,"context_line":"  type: string"}],"source_content_type":"text/x-yaml","patch_set":1,"id":"43312487_0cdb532b","line":682,"updated":"2021-03-31 12:46:32.000000000","message":"It may be worth to explain what kind of problems can arise (and when) if someone uses this carelessly.","commit_id":"699052c9dd56ed2bfd2f18b9038dba6f33da9164"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"eebdaa134a3e8a1d469ade3d6ee7f234e15026df","unresolved":false,"context_lines":[{"line_number":679,"context_line":""},{"line_number":680,"context_line":"    * Since version ``1.37``, it can be set to any existing provider UUID"},{"line_number":681,"context_line":"      excepts to providers in its own subtree. Also it can be set to null to"},{"line_number":682,"context_line":"      transform the provider to a new root provider."},{"line_number":683,"context_line":"  min_version: 1.14"},{"line_number":684,"context_line":"resource_provider_parent_provider_uuid_required_no_min:"},{"line_number":685,"context_line":"  type: string"}],"source_content_type":"text/x-yaml","patch_set":1,"id":"4d6239fd_6c8eb94c","line":682,"in_reply_to":"43312487_0cdb532b","updated":"2021-04-15 11:03:39.000000000","message":"Done","commit_id":"699052c9dd56ed2bfd2f18b9038dba6f33da9164"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"3711e58fdcdb7ebfc3bda6949bc3115b366fa492","unresolved":true,"context_lines":[{"line_number":681,"context_line":"      excepts to providers that would cause a loop. Also it can be set to null"},{"line_number":682,"context_line":"      to transform the provider to a new root provider. This operation needs"},{"line_number":683,"context_line":"      to be used carefully. Moving providers can mean that the original rules"},{"line_number":684,"context_line":"      used to create the existing resource allocations are invalidated by the"},{"line_number":685,"context_line":"      such move."},{"line_number":686,"context_line":"  min_version: 1.14"},{"line_number":687,"context_line":"resource_provider_parent_provider_uuid_required_no_min:"}],"source_content_type":"text/x-yaml","patch_set":4,"id":"bf2f4253_738c5174","line":684,"range":{"start_line":684,"start_character":55,"end_line":684,"end_character":58},"updated":"2021-07-06 16:22:37.000000000","message":"nit: may be","commit_id":"123fbb793fe433c707aa83fa087ceb431f58fa8c"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"08c8827774a841a5215592169361feb5e8ef0f65","unresolved":false,"context_lines":[{"line_number":681,"context_line":"      excepts to providers that would cause a loop. Also it can be set to null"},{"line_number":682,"context_line":"      to transform the provider to a new root provider. This operation needs"},{"line_number":683,"context_line":"      to be used carefully. Moving providers can mean that the original rules"},{"line_number":684,"context_line":"      used to create the existing resource allocations are invalidated by the"},{"line_number":685,"context_line":"      such move."},{"line_number":686,"context_line":"  min_version: 1.14"},{"line_number":687,"context_line":"resource_provider_parent_provider_uuid_required_no_min:"}],"source_content_type":"text/x-yaml","patch_set":4,"id":"4049bbc4_506f913c","line":684,"range":{"start_line":684,"start_character":55,"end_line":684,"end_character":58},"in_reply_to":"bf2f4253_738c5174","updated":"2021-07-14 15:56:29.000000000","message":"Done","commit_id":"123fbb793fe433c707aa83fa087ceb431f58fa8c"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"5bd67f7bebe86034cd95887c5a4a3aaeb542f745","unresolved":true,"context_lines":[{"line_number":678,"context_line":"      cannot be changed."},{"line_number":679,"context_line":""},{"line_number":680,"context_line":"    * Since version ``1.37``, it can be set to any existing provider UUID"},{"line_number":681,"context_line":"      excepts to providers that would cause a loop. Also it can be set to null"},{"line_number":682,"context_line":"      to transform the provider to a new root provider. This operation needs"},{"line_number":683,"context_line":"      to be used carefully. Moving providers can mean that the original rules"},{"line_number":684,"context_line":"      used to create the existing resource allocations may be invalidated"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"203097c5_3dcbfc16","line":681,"range":{"start_line":681,"start_character":6,"end_line":681,"end_character":13},"updated":"2021-07-22 21:59:56.000000000","message":"except","commit_id":"00795f31b8398ffcc817f4d2f3aa16b5b18c803e"}],"placement/objects/resource_provider.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"3711e58fdcdb7ebfc3bda6949bc3115b366fa492","unresolved":true,"context_lines":[{"line_number":800,"context_line":"                        action\u003d\u0027update\u0027,"},{"line_number":801,"context_line":"                        reason\u003d\u0027re-parenting a provider is not currently \u0027"},{"line_number":802,"context_line":"                               \u0027allowed.\u0027)"},{"line_number":803,"context_line":"                if my_ids.parent_uuid is None:"},{"line_number":804,"context_line":"                    # So the user specifies a parent for an RP that doesn\u0027t"},{"line_number":805,"context_line":"                    # have one. We have to check that by this new parent we"},{"line_number":806,"context_line":"                    # don\u0027t create a loop in the tree. Basically the new parent"}],"source_content_type":"text/x-python","patch_set":1,"id":"e6a5f0ab_3ecb2e66","side":"PARENT","line":803,"range":{"start_line":803,"start_character":14,"end_line":803,"end_character":46},"updated":"2021-07-06 16:22:37.000000000","message":"ok so we now do this check always so when we reparent a rp it cant turn the tree into a cyclic graph makes sense","commit_id":"48b9d6f2d7afb6f0b6d82cf60722bb4cd3494b03"},{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"8346fe2458a94701d7e76c9520529649ddc83307","unresolved":true,"context_lines":[{"line_number":795,"context_line":"                    raise exception.ObjectActionError("},{"line_number":796,"context_line":"                        action\u003d\u0027create\u0027,"},{"line_number":797,"context_line":"                        reason\u003d\u0027parent provider UUID does not exist.\u0027)"},{"line_number":798,"context_line":"                if (my_ids.parent_id is not None and"},{"line_number":799,"context_line":"                        my_ids.parent_id !\u003d parent_ids.id):"},{"line_number":800,"context_line":"                    if not allow_reparenting:"},{"line_number":801,"context_line":"                        raise exception.ObjectActionError("},{"line_number":802,"context_line":"                            action\u003d\u0027update\u0027,"},{"line_number":803,"context_line":"                            reason\u003d\u0027re-parenting a provider is not currently \u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"f6f42bc0_893e12aa","line":800,"range":{"start_line":798,"start_character":19,"end_line":800,"end_character":45},"updated":"2021-04-23 11:46:39.000000000","message":"nit: the if clause could be merged","commit_id":"b594ac00e75502e99b88b7f3b9404236036b39b3"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"5aa6e217da01aa14bd620fd9b68074d87971ff07","unresolved":false,"context_lines":[{"line_number":795,"context_line":"                    raise exception.ObjectActionError("},{"line_number":796,"context_line":"                        action\u003d\u0027create\u0027,"},{"line_number":797,"context_line":"                        reason\u003d\u0027parent provider UUID does not exist.\u0027)"},{"line_number":798,"context_line":"                if (my_ids.parent_id is not None and"},{"line_number":799,"context_line":"                        my_ids.parent_id !\u003d parent_ids.id):"},{"line_number":800,"context_line":"                    if not allow_reparenting:"},{"line_number":801,"context_line":"                        raise exception.ObjectActionError("},{"line_number":802,"context_line":"                            action\u003d\u0027update\u0027,"},{"line_number":803,"context_line":"                            reason\u003d\u0027re-parenting a provider is not currently \u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"ddfc49df_da44eefd","line":800,"range":{"start_line":798,"start_character":19,"end_line":800,"end_character":45},"in_reply_to":"f6f42bc0_893e12aa","updated":"2021-04-27 12:11:41.000000000","message":"Done","commit_id":"b594ac00e75502e99b88b7f3b9404236036b39b3"},{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"8346fe2458a94701d7e76c9520529649ddc83307","unresolved":true,"context_lines":[{"line_number":826,"context_line":"                new_root_id \u003d parent_ids.root_id"},{"line_number":827,"context_line":"                new_root_uuid \u003d parent_ids.root_uuid"},{"line_number":828,"context_line":"            else:"},{"line_number":829,"context_line":"                if my_ids.parent_id is not None:"},{"line_number":830,"context_line":"                    if not allow_reparenting:"},{"line_number":831,"context_line":"                        raise exception.ObjectActionError("},{"line_number":832,"context_line":"                            action\u003d\u0027update\u0027,"},{"line_number":833,"context_line":"                            reason\u003d\u0027un-parenting a provider is not currently \u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"0117265a_ebe4d9c3","line":830,"range":{"start_line":829,"start_character":19,"end_line":830,"end_character":45},"updated":"2021-04-23 11:46:39.000000000","message":"ditto","commit_id":"b594ac00e75502e99b88b7f3b9404236036b39b3"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"5aa6e217da01aa14bd620fd9b68074d87971ff07","unresolved":false,"context_lines":[{"line_number":826,"context_line":"                new_root_id \u003d parent_ids.root_id"},{"line_number":827,"context_line":"                new_root_uuid \u003d parent_ids.root_uuid"},{"line_number":828,"context_line":"            else:"},{"line_number":829,"context_line":"                if my_ids.parent_id is not None:"},{"line_number":830,"context_line":"                    if not allow_reparenting:"},{"line_number":831,"context_line":"                        raise exception.ObjectActionError("},{"line_number":832,"context_line":"                            action\u003d\u0027update\u0027,"},{"line_number":833,"context_line":"                            reason\u003d\u0027un-parenting a provider is not currently \u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"5bf6cd9e_8ca5e9bd","line":830,"range":{"start_line":829,"start_character":19,"end_line":830,"end_character":45},"in_reply_to":"0117265a_ebe4d9c3","updated":"2021-04-27 12:11:41.000000000","message":"Here I can\u0027t simply glue \u0027and not allow_reparenting\u0027 to the outer condition as the inner condition acts as a guard for the L836-L846 logic. So if I glue the inner to the outer condition then I have to repeat the outer condition again for the L836-L846 lines","commit_id":"b594ac00e75502e99b88b7f3b9404236036b39b3"},{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"8346fe2458a94701d7e76c9520529649ddc83307","unresolved":true,"context_lines":[{"line_number":895,"context_line":"        if rp_uuid_to_child_rps is None:"},{"line_number":896,"context_line":"            same_tree \u003d get_all_by_filters("},{"line_number":897,"context_line":"                context, filters\u003d{\u0027in_tree\u0027: self.uuid})"},{"line_number":898,"context_line":"            rp_uuid_to_child_rps \u003d collections.defaultdict(list)"},{"line_number":899,"context_line":"            for rp in same_tree:"},{"line_number":900,"context_line":"                if rp.parent_provider_uuid:"},{"line_number":901,"context_line":"                    rp_uuid_to_child_rps[rp.parent_provider_uuid].append(rp)"}],"source_content_type":"text/x-python","patch_set":2,"id":"e1a3422e_2ae94302","line":898,"range":{"start_line":898,"start_character":59,"end_line":898,"end_character":63},"updated":"2021-04-23 11:46:39.000000000","message":"Should we make the object hashable so that we can use set instead of list here? ... As long as we forbid multiple parents, this list never has duplicated rp, so I don\u0027t think it is necessary so far.","commit_id":"b594ac00e75502e99b88b7f3b9404236036b39b3"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"5aa6e217da01aa14bd620fd9b68074d87971ff07","unresolved":false,"context_lines":[{"line_number":895,"context_line":"        if rp_uuid_to_child_rps is None:"},{"line_number":896,"context_line":"            same_tree \u003d get_all_by_filters("},{"line_number":897,"context_line":"                context, filters\u003d{\u0027in_tree\u0027: self.uuid})"},{"line_number":898,"context_line":"            rp_uuid_to_child_rps \u003d collections.defaultdict(list)"},{"line_number":899,"context_line":"            for rp in same_tree:"},{"line_number":900,"context_line":"                if rp.parent_provider_uuid:"},{"line_number":901,"context_line":"                    rp_uuid_to_child_rps[rp.parent_provider_uuid].append(rp)"}],"source_content_type":"text/x-python","patch_set":2,"id":"65cb6181_0a3cb695","line":898,"range":{"start_line":898,"start_character":59,"end_line":898,"end_character":63},"in_reply_to":"e1a3422e_2ae94302","updated":"2021-04-27 12:11:41.000000000","message":"Hm. I agree that we have a strong assumption that RPs in Placement forms a tree instead a generic graph. So we never have to worry about reaching the same child RP via more than one route.","commit_id":"b594ac00e75502e99b88b7f3b9404236036b39b3"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"3711e58fdcdb7ebfc3bda6949bc3115b366fa492","unresolved":true,"context_lines":[{"line_number":800,"context_line":"                        action\u003d\u0027update\u0027,"},{"line_number":801,"context_line":"                        reason\u003d\u0027re-parenting a provider is not currently \u0027"},{"line_number":802,"context_line":"                               \u0027allowed.\u0027)"},{"line_number":803,"context_line":"                if my_ids.parent_uuid is None:"},{"line_number":804,"context_line":"                    # So the user specifies a parent for an RP that doesn\u0027t"},{"line_number":805,"context_line":"                    # have one. We have to check that by this new parent we"},{"line_number":806,"context_line":"                    # don\u0027t create a loop in the tree. Basically the new parent"}],"source_content_type":"text/x-python","patch_set":4,"id":"c3175647_ca37a5b0","side":"PARENT","line":803,"range":{"start_line":803,"start_character":15,"end_line":803,"end_character":46},"updated":"2021-07-06 16:22:37.000000000","message":"and here by removing this if we run the validation both when our prvious parent was none and when we are re parenting.","commit_id":"024133eb2dc35476719f3e46839bb77afaa00573"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"08c8827774a841a5215592169361feb5e8ef0f65","unresolved":false,"context_lines":[{"line_number":800,"context_line":"                        action\u003d\u0027update\u0027,"},{"line_number":801,"context_line":"                        reason\u003d\u0027re-parenting a provider is not currently \u0027"},{"line_number":802,"context_line":"                               \u0027allowed.\u0027)"},{"line_number":803,"context_line":"                if my_ids.parent_uuid is None:"},{"line_number":804,"context_line":"                    # So the user specifies a parent for an RP that doesn\u0027t"},{"line_number":805,"context_line":"                    # have one. We have to check that by this new parent we"},{"line_number":806,"context_line":"                    # don\u0027t create a loop in the tree. Basically the new parent"}],"source_content_type":"text/x-python","patch_set":4,"id":"f09e0a03_eb527926","side":"PARENT","line":803,"range":{"start_line":803,"start_character":15,"end_line":803,"end_character":46},"in_reply_to":"c3175647_ca37a5b0","updated":"2021-07-14 15:56:29.000000000","message":"yes, as at this point we know that reparenting is allowed.","commit_id":"024133eb2dc35476719f3e46839bb77afaa00573"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"3711e58fdcdb7ebfc3bda6949bc3115b366fa492","unresolved":true,"context_lines":[{"line_number":795,"context_line":"                    raise exception.ObjectActionError("},{"line_number":796,"context_line":"                        action\u003d\u0027create\u0027,"},{"line_number":797,"context_line":"                        reason\u003d\u0027parent provider UUID does not exist.\u0027)"},{"line_number":798,"context_line":"                if (my_ids.parent_id is not None and"},{"line_number":799,"context_line":"                        my_ids.parent_id !\u003d parent_ids.id and"},{"line_number":800,"context_line":"                        not allow_reparenting):"},{"line_number":801,"context_line":"                    raise exception.ObjectActionError("},{"line_number":802,"context_line":"                        action\u003d\u0027update\u0027,"},{"line_number":803,"context_line":"                        reason\u003d\u0027re-parenting a provider is not currently \u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf27812c_e415e814","line":800,"range":{"start_line":798,"start_character":15,"end_line":800,"end_character":47},"updated":"2021-07-06 16:22:37.000000000","message":"so this maintains the old behavior for the old mico version","commit_id":"123fbb793fe433c707aa83fa087ceb431f58fa8c"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"08c8827774a841a5215592169361feb5e8ef0f65","unresolved":false,"context_lines":[{"line_number":795,"context_line":"                    raise exception.ObjectActionError("},{"line_number":796,"context_line":"                        action\u003d\u0027create\u0027,"},{"line_number":797,"context_line":"                        reason\u003d\u0027parent provider UUID does not exist.\u0027)"},{"line_number":798,"context_line":"                if (my_ids.parent_id is not None and"},{"line_number":799,"context_line":"                        my_ids.parent_id !\u003d parent_ids.id and"},{"line_number":800,"context_line":"                        not allow_reparenting):"},{"line_number":801,"context_line":"                    raise exception.ObjectActionError("},{"line_number":802,"context_line":"                        action\u003d\u0027update\u0027,"},{"line_number":803,"context_line":"                        reason\u003d\u0027re-parenting a provider is not currently \u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"9107c913_690ce339","line":800,"range":{"start_line":798,"start_character":15,"end_line":800,"end_character":47},"in_reply_to":"bf27812c_e415e814","updated":"2021-07-14 15:56:29.000000000","message":"yes.","commit_id":"123fbb793fe433c707aa83fa087ceb431f58fa8c"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"08c8827774a841a5215592169361feb5e8ef0f65","unresolved":true,"context_lines":[{"line_number":806,"context_line":"                # that the new parent is not a descendant of the"},{"line_number":807,"context_line":"                # current RP to avoid a loop in the graph. It could be"},{"line_number":808,"context_line":"                # easily checked by traversing the tree from the new parent"},{"line_number":809,"context_line":"                # up to the root and see if we every hit the current RP"},{"line_number":810,"context_line":"                # along the way. However later we need to update every"},{"line_number":811,"context_line":"                # descendant of the current RP with a possibly new root"},{"line_number":812,"context_line":"                # so we go with the more expensive way and gather every"}],"source_content_type":"text/x-python","patch_set":4,"id":"2b01cf76_6fa2ef32","line":809,"range":{"start_line":809,"start_character":47,"end_line":809,"end_character":52},"updated":"2021-07-14 15:56:29.000000000","message":"nit: ever. Done.","commit_id":"123fbb793fe433c707aa83fa087ceb431f58fa8c"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"3711e58fdcdb7ebfc3bda6949bc3115b366fa492","unresolved":true,"context_lines":[{"line_number":825,"context_line":"                self.root_provider_uuid \u003d parent_ids.root_uuid"},{"line_number":826,"context_line":"                new_root_id \u003d parent_ids.root_id"},{"line_number":827,"context_line":"                new_root_uuid \u003d parent_ids.root_uuid"},{"line_number":828,"context_line":"            else:"},{"line_number":829,"context_line":"                if my_ids.parent_id is not None:"},{"line_number":830,"context_line":"                    if not allow_reparenting:"},{"line_number":831,"context_line":"                        raise exception.ObjectActionError("}],"source_content_type":"text/x-python","patch_set":4,"id":"6f3b6f6c_1f0dafba","line":828,"range":{"start_line":828,"start_character":11,"end_line":828,"end_character":17},"updated":"2021-07-06 16:22:37.000000000","message":"this equates to \"if parent_uuid is None:\"","commit_id":"123fbb793fe433c707aa83fa087ceb431f58fa8c"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"08c8827774a841a5215592169361feb5e8ef0f65","unresolved":false,"context_lines":[{"line_number":825,"context_line":"                self.root_provider_uuid \u003d parent_ids.root_uuid"},{"line_number":826,"context_line":"                new_root_id \u003d parent_ids.root_id"},{"line_number":827,"context_line":"                new_root_uuid \u003d parent_ids.root_uuid"},{"line_number":828,"context_line":"            else:"},{"line_number":829,"context_line":"                if my_ids.parent_id is not None:"},{"line_number":830,"context_line":"                    if not allow_reparenting:"},{"line_number":831,"context_line":"                        raise exception.ObjectActionError("}],"source_content_type":"text/x-python","patch_set":4,"id":"368a2d5c_0c0e507d","line":828,"range":{"start_line":828,"start_character":11,"end_line":828,"end_character":17},"in_reply_to":"6f3b6f6c_1f0dafba","updated":"2021-07-14 15:56:29.000000000","message":"yepp, the incoming data has None as parent. It is either not an update on the parent as it was None before, or it is an unparenting request.","commit_id":"123fbb793fe433c707aa83fa087ceb431f58fa8c"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"3711e58fdcdb7ebfc3bda6949bc3115b366fa492","unresolved":true,"context_lines":[{"line_number":826,"context_line":"                new_root_id \u003d parent_ids.root_id"},{"line_number":827,"context_line":"                new_root_uuid \u003d parent_ids.root_uuid"},{"line_number":828,"context_line":"            else:"},{"line_number":829,"context_line":"                if my_ids.parent_id is not None:"},{"line_number":830,"context_line":"                    if not allow_reparenting:"},{"line_number":831,"context_line":"                        raise exception.ObjectActionError("},{"line_number":832,"context_line":"                            action\u003d\u0027update\u0027,"},{"line_number":833,"context_line":"                            reason\u003d\u0027un-parenting a provider is not currently \u0027"},{"line_number":834,"context_line":"                                   \u0027allowed.\u0027)"},{"line_number":835,"context_line":""},{"line_number":836,"context_line":"                    # we don\u0027t need to do loop detection but we still need to"},{"line_number":837,"context_line":"                    # collect the RPs from the subtree so that the new root"},{"line_number":838,"context_line":"                    # value is updated in the whole subtree below."},{"line_number":839,"context_line":"                    subtree_rps \u003d self.get_subtree(context)"},{"line_number":840,"context_line":""},{"line_number":841,"context_line":"                    # this RP becomes a new root RP"},{"line_number":842,"context_line":"                    updates[\u0027root_provider_id\u0027] \u003d my_ids.id"},{"line_number":843,"context_line":"                    updates[\u0027parent_provider_id\u0027] \u003d None"},{"line_number":844,"context_line":"                    self.root_provider_uuid \u003d my_ids.uuid"},{"line_number":845,"context_line":"                    new_root_id \u003d my_ids.id"},{"line_number":846,"context_line":"                    new_root_uuid \u003d my_ids.uuid"},{"line_number":847,"context_line":""},{"line_number":848,"context_line":"        db_rp \u003d context.session.query(models.ResourceProvider).filter_by("},{"line_number":849,"context_line":"            id\u003did).first()"}],"source_content_type":"text/x-python","patch_set":4,"id":"98144b22_5efe9554","line":846,"range":{"start_line":829,"start_character":16,"end_line":846,"end_character":47},"updated":"2021-07-06 16:22:37.000000000","message":"i dont think this is correct it will work but you are duplicating this code when you dont ahve too.\n\nwe can do it this way or we can remove the if on line 790 and have\njust one code patch wehre we always set teh parent iid to None or a value.","commit_id":"123fbb793fe433c707aa83fa087ceb431f58fa8c"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"08c8827774a841a5215592169361feb5e8ef0f65","unresolved":true,"context_lines":[{"line_number":826,"context_line":"                new_root_id \u003d parent_ids.root_id"},{"line_number":827,"context_line":"                new_root_uuid \u003d parent_ids.root_uuid"},{"line_number":828,"context_line":"            else:"},{"line_number":829,"context_line":"                if my_ids.parent_id is not None:"},{"line_number":830,"context_line":"                    if not allow_reparenting:"},{"line_number":831,"context_line":"                        raise exception.ObjectActionError("},{"line_number":832,"context_line":"                            action\u003d\u0027update\u0027,"},{"line_number":833,"context_line":"                            reason\u003d\u0027un-parenting a provider is not currently \u0027"},{"line_number":834,"context_line":"                                   \u0027allowed.\u0027)"},{"line_number":835,"context_line":""},{"line_number":836,"context_line":"                    # we don\u0027t need to do loop detection but we still need to"},{"line_number":837,"context_line":"                    # collect the RPs from the subtree so that the new root"},{"line_number":838,"context_line":"                    # value is updated in the whole subtree below."},{"line_number":839,"context_line":"                    subtree_rps \u003d self.get_subtree(context)"},{"line_number":840,"context_line":""},{"line_number":841,"context_line":"                    # this RP becomes a new root RP"},{"line_number":842,"context_line":"                    updates[\u0027root_provider_id\u0027] \u003d my_ids.id"},{"line_number":843,"context_line":"                    updates[\u0027parent_provider_id\u0027] \u003d None"},{"line_number":844,"context_line":"                    self.root_provider_uuid \u003d my_ids.uuid"},{"line_number":845,"context_line":"                    new_root_id \u003d my_ids.id"},{"line_number":846,"context_line":"                    new_root_uuid \u003d my_ids.uuid"},{"line_number":847,"context_line":""},{"line_number":848,"context_line":"        db_rp \u003d context.session.query(models.ResourceProvider).filter_by("},{"line_number":849,"context_line":"            id\u003did).first()"}],"source_content_type":"text/x-python","patch_set":4,"id":"f3457fe3_701775cc","line":846,"range":{"start_line":829,"start_character":16,"end_line":846,"end_character":47},"in_reply_to":"98144b22_5efe9554","updated":"2021-07-14 15:56:29.000000000","message":"Actually L841-846 makes a difference. In case of re-parening (the if branch) the subtree gets a new root based on the root of the new parent. But in case of un-parenting (the else branch) the subtree gets a new parent which is the RP being updated. So 829-839 can be eliminated if the else is removed but 841-846 doesn\u0027t. I think that elimination does not worth the complication. Also we would lose the simple way to have different error message for re-parenting and un-parenting case.","commit_id":"123fbb793fe433c707aa83fa087ceb431f58fa8c"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"72ff99c49eb315e42faaed7295cc383a15d17efe","unresolved":true,"context_lines":[{"line_number":826,"context_line":"                new_root_id \u003d parent_ids.root_id"},{"line_number":827,"context_line":"                new_root_uuid \u003d parent_ids.root_uuid"},{"line_number":828,"context_line":"            else:"},{"line_number":829,"context_line":"                if my_ids.parent_id is not None:"},{"line_number":830,"context_line":"                    if not allow_reparenting:"},{"line_number":831,"context_line":"                        raise exception.ObjectActionError("},{"line_number":832,"context_line":"                            action\u003d\u0027update\u0027,"},{"line_number":833,"context_line":"                            reason\u003d\u0027un-parenting a provider is not currently \u0027"},{"line_number":834,"context_line":"                                   \u0027allowed.\u0027)"},{"line_number":835,"context_line":""},{"line_number":836,"context_line":"                    # we don\u0027t need to do loop detection but we still need to"},{"line_number":837,"context_line":"                    # collect the RPs from the subtree so that the new root"},{"line_number":838,"context_line":"                    # value is updated in the whole subtree below."},{"line_number":839,"context_line":"                    subtree_rps \u003d self.get_subtree(context)"},{"line_number":840,"context_line":""},{"line_number":841,"context_line":"                    # this RP becomes a new root RP"},{"line_number":842,"context_line":"                    updates[\u0027root_provider_id\u0027] \u003d my_ids.id"},{"line_number":843,"context_line":"                    updates[\u0027parent_provider_id\u0027] \u003d None"},{"line_number":844,"context_line":"                    self.root_provider_uuid \u003d my_ids.uuid"},{"line_number":845,"context_line":"                    new_root_id \u003d my_ids.id"},{"line_number":846,"context_line":"                    new_root_uuid \u003d my_ids.uuid"},{"line_number":847,"context_line":""},{"line_number":848,"context_line":"        db_rp \u003d context.session.query(models.ResourceProvider).filter_by("},{"line_number":849,"context_line":"            id\u003did).first()"}],"source_content_type":"text/x-python","patch_set":4,"id":"85cc6b81_94fea319","line":846,"range":{"start_line":829,"start_character":16,"end_line":846,"end_character":47},"in_reply_to":"f3457fe3_701775cc","updated":"2021-07-14 18:12:52.000000000","message":"ok i think you have convinced me the duplication is worth it for the better error message \n\nthe delta regarding the parent was not imeditely obvious and for me was lost in the common code\n\ni was orginaly hoping ot hoist up the common code and make the scope of the if smaller\nbut if you think this is simpler then im ok with it as is.","commit_id":"123fbb793fe433c707aa83fa087ceb431f58fa8c"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"5b118bb163e037134ce74f9bb9c8f75be94608eb","unresolved":true,"context_lines":[{"line_number":797,"context_line":"                        reason\u003d\u0027parent provider UUID does not exist.\u0027)"},{"line_number":798,"context_line":"                if (my_ids.parent_id is not None and"},{"line_number":799,"context_line":"                        my_ids.parent_id !\u003d parent_ids.id and"},{"line_number":800,"context_line":"                        not allow_reparenting):"},{"line_number":801,"context_line":"                    raise exception.ObjectActionError("},{"line_number":802,"context_line":"                        action\u003d\u0027update\u0027,"},{"line_number":803,"context_line":"                        reason\u003d\u0027re-parenting a provider is not currently \u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"6e112681_2376b635","line":800,"range":{"start_line":800,"start_character":28,"end_line":800,"end_character":45},"updated":"2021-07-19 14:57:40.000000000","message":"note: it\u0027s always either False or True, never None.","commit_id":"00795f31b8398ffcc817f4d2f3aa16b5b18c803e"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"39723e673e6a3374dd027e8aa4e4140bcdc63cba","unresolved":true,"context_lines":[{"line_number":812,"context_line":"                # so we go with the more expensive way and gather every"},{"line_number":813,"context_line":"                # descendant for the current RP and check if the new"},{"line_number":814,"context_line":"                # parent is part of that set."},{"line_number":815,"context_line":"                subtree_rps \u003d self.get_subtree(context)"},{"line_number":816,"context_line":"                subtree_rp_uuids \u003d {rp.uuid for rp in subtree_rps}"},{"line_number":817,"context_line":"                if parent_uuid in subtree_rp_uuids:"},{"line_number":818,"context_line":"                    raise exception.ObjectActionError("}],"source_content_type":"text/x-python","patch_set":5,"id":"1767b0b0_aee99aa5","line":815,"range":{"start_line":815,"start_character":15,"end_line":815,"end_character":55},"updated":"2021-07-23 11:06:04.000000000","message":"nit: i know its not required in python but if im initallising the same parmater differently in 2 banahcne of an if and then using it later outside i like to forward declar it with the correct type just in case we add and elif ectra to it at some poitn where its not set or slimilar.\n\nthis is fine for now but in generally i woudl have liked to see\nsubtree_rps \u003d []\nif ...:\n  ...\n  subtree_rps \u003d self.get_subtree(context)\nelse:\n...\n   subtree_rps \u003d self.get_subtree(context)\n\n\ni would be tempted to do \n\n   subtree_rps \u003d self.get_subtree(context) \n\nout side the if but you are actully using the if to check some things like reparenting before porceeding\n\nim not going to ask yout reformat this since we discussed that in the past i just dont lke have possible unitiales varables depending on which path we can take which is why i like to preinit the vars.\n\nin this case the code is correct","commit_id":"00795f31b8398ffcc817f4d2f3aa16b5b18c803e"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"5bd67f7bebe86034cd95887c5a4a3aaeb542f745","unresolved":true,"context_lines":[{"line_number":813,"context_line":"                # descendant for the current RP and check if the new"},{"line_number":814,"context_line":"                # parent is part of that set."},{"line_number":815,"context_line":"                subtree_rps \u003d self.get_subtree(context)"},{"line_number":816,"context_line":"                subtree_rp_uuids \u003d {rp.uuid for rp in subtree_rps}"},{"line_number":817,"context_line":"                if parent_uuid in subtree_rp_uuids:"},{"line_number":818,"context_line":"                    raise exception.ObjectActionError("},{"line_number":819,"context_line":"                        action\u003d\u0027update\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"9cc5e8d3_62509406","line":816,"updated":"2021-07-22 21:59:56.000000000","message":"++ set comprehension","commit_id":"00795f31b8398ffcc817f4d2f3aa16b5b18c803e"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"39723e673e6a3374dd027e8aa4e4140bcdc63cba","unresolved":true,"context_lines":[{"line_number":813,"context_line":"                # descendant for the current RP and check if the new"},{"line_number":814,"context_line":"                # parent is part of that set."},{"line_number":815,"context_line":"                subtree_rps \u003d self.get_subtree(context)"},{"line_number":816,"context_line":"                subtree_rp_uuids \u003d {rp.uuid for rp in subtree_rps}"},{"line_number":817,"context_line":"                if parent_uuid in subtree_rp_uuids:"},{"line_number":818,"context_line":"                    raise exception.ObjectActionError("},{"line_number":819,"context_line":"                        action\u003d\u0027update\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"142ce98c_bfa89253","line":816,"in_reply_to":"9cc5e8d3_62509406","updated":"2021-07-23 11:06:04.000000000","message":"yep i like when people use the right data structure for the job.","commit_id":"00795f31b8398ffcc817f4d2f3aa16b5b18c803e"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"5b118bb163e037134ce74f9bb9c8f75be94608eb","unresolved":true,"context_lines":[{"line_number":855,"context_line":"        for rp in subtree_rps:"},{"line_number":856,"context_line":"            # If the parent is not updated, this clause is skipped since the"},{"line_number":857,"context_line":"            # `subtree_rps` has no element."},{"line_number":858,"context_line":"            rp.root_provider_uuid \u003d new_root_uuid"},{"line_number":859,"context_line":"            db_rp \u003d context.session.query("},{"line_number":860,"context_line":"                models.ResourceProvider).filter_by(id\u003drp.id).first()"},{"line_number":861,"context_line":"            data \u003d {\u0027root_provider_id\u0027: new_root_id}"}],"source_content_type":"text/x-python","patch_set":5,"id":"4a271622_bc0e85f7","line":858,"range":{"start_line":858,"start_character":36,"end_line":858,"end_character":49},"updated":"2021-07-19 14:57:40.000000000","message":"note : both this variable and the new_root_id are set when subtree_rps is also set so they can be None only if the parent RP is the root one.","commit_id":"00795f31b8398ffcc817f4d2f3aa16b5b18c803e"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"5b118bb163e037134ce74f9bb9c8f75be94608eb","unresolved":true,"context_lines":[{"line_number":858,"context_line":"            rp.root_provider_uuid \u003d new_root_uuid"},{"line_number":859,"context_line":"            db_rp \u003d context.session.query("},{"line_number":860,"context_line":"                models.ResourceProvider).filter_by(id\u003drp.id).first()"},{"line_number":861,"context_line":"            data \u003d {\u0027root_provider_id\u0027: new_root_id}"},{"line_number":862,"context_line":"            db_rp.update(data)"},{"line_number":863,"context_line":"            context.session.add(db_rp)"},{"line_number":864,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"9f859047_cba595e7","line":861,"range":{"start_line":861,"start_character":40,"end_line":861,"end_character":51},"updated":"2021-07-19 14:57:40.000000000","message":"technically, you could reuse the updates dict by getting the root_provider_id but since you also need to create a new variable for the UUID, fair enough.","commit_id":"00795f31b8398ffcc817f4d2f3aa16b5b18c803e"}],"placement/rest_api_version_history.rst":[{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"8346fe2458a94701d7e76c9520529649ddc83307","unresolved":true,"context_lines":[{"line_number":568,"context_line":"  \u0026resources2\u003dDISK_GB:100\u0026in_tree2\u003d\u003csharing1_uuid\u003e"},{"line_number":569,"context_line":""},{"line_number":570,"context_line":""},{"line_number":571,"context_line":"Train"},{"line_number":572,"context_line":"-----"},{"line_number":573,"context_line":""},{"line_number":574,"context_line":"1.32 - Support forbidden aggregates"},{"line_number":575,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":2,"id":"d4cb0e55_177d91a2","line":572,"range":{"start_line":571,"start_character":0,"end_line":572,"end_character":5},"updated":"2021-04-23 11:46:39.000000000","message":"We have the release series heading like this. Can we have one for Xena as well?","commit_id":"b594ac00e75502e99b88b7f3b9404236036b39b3"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"5aa6e217da01aa14bd620fd9b68074d87971ff07","unresolved":false,"context_lines":[{"line_number":568,"context_line":"  \u0026resources2\u003dDISK_GB:100\u0026in_tree2\u003d\u003csharing1_uuid\u003e"},{"line_number":569,"context_line":""},{"line_number":570,"context_line":""},{"line_number":571,"context_line":"Train"},{"line_number":572,"context_line":"-----"},{"line_number":573,"context_line":""},{"line_number":574,"context_line":"1.32 - Support forbidden aggregates"},{"line_number":575,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":2,"id":"79b435f1_dbf4b605","line":572,"range":{"start_line":571,"start_character":0,"end_line":572,"end_character":5},"in_reply_to":"d4cb0e55_177d91a2","updated":"2021-04-27 12:11:41.000000000","message":"Sure.Done.","commit_id":"b594ac00e75502e99b88b7f3b9404236036b39b3"}],"placement/tests/functional/db/test_resource_provider.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"5a5616cbb37b9368059f9992c772b21c2e6a9242","unresolved":true,"context_lines":[{"line_number":322,"context_line":"        self.assertIn("},{"line_number":323,"context_line":"            \u0027creating loop in the provider tree is not allowed.\u0027, str(exc))"},{"line_number":324,"context_line":""},{"line_number":325,"context_line":"        # direct loop, i.e. are child is our parent"},{"line_number":326,"context_line":"        test_rp.parent_provider_uuid \u003d test_rp_child.uuid"},{"line_number":327,"context_line":"        exc \u003d self.assertRaises("},{"line_number":328,"context_line":"            exception.ObjectActionError, test_rp.save, allow_reparenting\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":1,"id":"34583dfa_f1725ad0","line":325,"range":{"start_line":325,"start_character":28,"end_line":325,"end_character":31},"updated":"2021-03-31 07:37:27.000000000","message":"our","commit_id":"699052c9dd56ed2bfd2f18b9038dba6f33da9164"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"5a5616cbb37b9368059f9992c772b21c2e6a9242","unresolved":true,"context_lines":[{"line_number":329,"context_line":"        self.assertIn("},{"line_number":330,"context_line":"            \u0027creating loop in the provider tree is not allowed.\u0027, str(exc))"},{"line_number":331,"context_line":""},{"line_number":332,"context_line":"        # indirect loop, i.e. are grandchild is our parent"},{"line_number":333,"context_line":"        test_rp.parent_provider_uuid \u003d test_rp_grandchild.uuid"},{"line_number":334,"context_line":"        exc \u003d self.assertRaises("},{"line_number":335,"context_line":"            exception.ObjectActionError, test_rp.save, allow_reparenting\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":1,"id":"e09d631e_c5dc1698","line":332,"range":{"start_line":332,"start_character":30,"end_line":332,"end_character":33},"updated":"2021-03-31 07:37:27.000000000","message":"our","commit_id":"699052c9dd56ed2bfd2f18b9038dba6f33da9164"},{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"8346fe2458a94701d7e76c9520529649ddc83307","unresolved":true,"context_lines":[{"line_number":322,"context_line":"        self.assertIn("},{"line_number":323,"context_line":"            \u0027creating loop in the provider tree is not allowed.\u0027, str(exc))"},{"line_number":324,"context_line":""},{"line_number":325,"context_line":"        # direct loop, i.e. are child is our parent"},{"line_number":326,"context_line":"        test_rp.parent_provider_uuid \u003d test_rp_child.uuid"},{"line_number":327,"context_line":"        exc \u003d self.assertRaises("},{"line_number":328,"context_line":"            exception.ObjectActionError, test_rp.save, allow_reparenting\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":2,"id":"8ac8c0d6_264269ab","line":325,"range":{"start_line":325,"start_character":28,"end_line":325,"end_character":31},"updated":"2021-04-23 11:46:39.000000000","message":"nit: the?","commit_id":"b594ac00e75502e99b88b7f3b9404236036b39b3"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"5aa6e217da01aa14bd620fd9b68074d87971ff07","unresolved":false,"context_lines":[{"line_number":322,"context_line":"        self.assertIn("},{"line_number":323,"context_line":"            \u0027creating loop in the provider tree is not allowed.\u0027, str(exc))"},{"line_number":324,"context_line":""},{"line_number":325,"context_line":"        # direct loop, i.e. are child is our parent"},{"line_number":326,"context_line":"        test_rp.parent_provider_uuid \u003d test_rp_child.uuid"},{"line_number":327,"context_line":"        exc \u003d self.assertRaises("},{"line_number":328,"context_line":"            exception.ObjectActionError, test_rp.save, allow_reparenting\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":2,"id":"50d89849_4149cb6d","line":325,"range":{"start_line":325,"start_character":28,"end_line":325,"end_character":31},"in_reply_to":"8ac8c0d6_264269ab","updated":"2021-04-27 12:11:41.000000000","message":"Done","commit_id":"b594ac00e75502e99b88b7f3b9404236036b39b3"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"5aa6e217da01aa14bd620fd9b68074d87971ff07","unresolved":false,"context_lines":[{"line_number":322,"context_line":"        self.assertIn("},{"line_number":323,"context_line":"            \u0027creating loop in the provider tree is not allowed.\u0027, str(exc))"},{"line_number":324,"context_line":""},{"line_number":325,"context_line":"        # direct loop, i.e. are child is our parent"},{"line_number":326,"context_line":"        test_rp.parent_provider_uuid \u003d test_rp_child.uuid"},{"line_number":327,"context_line":"        exc \u003d self.assertRaises("},{"line_number":328,"context_line":"            exception.ObjectActionError, test_rp.save, allow_reparenting\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":2,"id":"7c01ecc7_494fc66f","line":325,"range":{"start_line":325,"start_character":28,"end_line":325,"end_character":31},"in_reply_to":"8ac8c0d6_264269ab","updated":"2021-04-27 12:11:41.000000000","message":"Done","commit_id":"b594ac00e75502e99b88b7f3b9404236036b39b3"},{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"8346fe2458a94701d7e76c9520529649ddc83307","unresolved":true,"context_lines":[{"line_number":329,"context_line":"        self.assertIn("},{"line_number":330,"context_line":"            \u0027creating loop in the provider tree is not allowed.\u0027, str(exc))"},{"line_number":331,"context_line":""},{"line_number":332,"context_line":"        # indirect loop, i.e. are grandchild is our parent"},{"line_number":333,"context_line":"        test_rp.parent_provider_uuid \u003d test_rp_grandchild.uuid"},{"line_number":334,"context_line":"        exc \u003d self.assertRaises("},{"line_number":335,"context_line":"            exception.ObjectActionError, test_rp.save, allow_reparenting\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":2,"id":"ec37fbb7_22d2edd2","line":332,"range":{"start_line":332,"start_character":30,"end_line":332,"end_character":33},"updated":"2021-04-23 11:46:39.000000000","message":"ditto","commit_id":"b594ac00e75502e99b88b7f3b9404236036b39b3"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"5aa6e217da01aa14bd620fd9b68074d87971ff07","unresolved":false,"context_lines":[{"line_number":329,"context_line":"        self.assertIn("},{"line_number":330,"context_line":"            \u0027creating loop in the provider tree is not allowed.\u0027, str(exc))"},{"line_number":331,"context_line":""},{"line_number":332,"context_line":"        # indirect loop, i.e. are grandchild is our parent"},{"line_number":333,"context_line":"        test_rp.parent_provider_uuid \u003d test_rp_grandchild.uuid"},{"line_number":334,"context_line":"        exc \u003d self.assertRaises("},{"line_number":335,"context_line":"            exception.ObjectActionError, test_rp.save, allow_reparenting\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":2,"id":"74465926_920ef310","line":332,"range":{"start_line":332,"start_character":30,"end_line":332,"end_character":33},"in_reply_to":"ec37fbb7_22d2edd2","updated":"2021-04-27 12:11:41.000000000","message":"Done","commit_id":"b594ac00e75502e99b88b7f3b9404236036b39b3"}],"releasenotes/notes/re-parentin-providers-94dcedff45b35bf7.yaml":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"5a5616cbb37b9368059f9992c772b21c2e6a9242","unresolved":true,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    With the new microversion ``1.37`` placement now supports re-parenting and "},{"line_number":5,"context_line":"    un-parenting resource providers via ``PUT /resource_providers/{uuid}`` API."}],"source_content_type":"text/x-yaml","patch_set":1,"id":"fd37faee_8cac6eb2","line":4,"range":{"start_line":4,"start_character":78,"end_line":4,"end_character":79},"updated":"2021-03-31 07:37:27.000000000","message":"drop","commit_id":"699052c9dd56ed2bfd2f18b9038dba6f33da9164"},{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"8346fe2458a94701d7e76c9520529649ddc83307","unresolved":true,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    With the new microversion ``1.37`` placement now supports re-parenting and "},{"line_number":5,"context_line":"    un-parenting resource providers via ``PUT /resource_providers/{uuid}`` API."}],"source_content_type":"text/x-yaml","patch_set":2,"id":"24e55fe9_53310161","line":4,"range":{"start_line":4,"start_character":78,"end_line":4,"end_character":79},"updated":"2021-04-23 11:46:39.000000000","message":"nit: unnecessary space","commit_id":"b594ac00e75502e99b88b7f3b9404236036b39b3"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"5aa6e217da01aa14bd620fd9b68074d87971ff07","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":"    With the new microversion ``1.37`` placement now supports re-parenting and "},{"line_number":5,"context_line":"    un-parenting resource providers via ``PUT /resource_providers/{uuid}`` API."}],"source_content_type":"text/x-yaml","patch_set":2,"id":"624b944b_ffb2dd11","line":4,"range":{"start_line":4,"start_character":78,"end_line":4,"end_character":79},"in_reply_to":"24e55fe9_53310161","updated":"2021-04-27 12:11:41.000000000","message":"Done","commit_id":"b594ac00e75502e99b88b7f3b9404236036b39b3"}],"releasenotes/notes/re-parenting-providers-94dcedff45b35bf7.yaml":[{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"5b118bb163e037134ce74f9bb9c8f75be94608eb","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":5,"id":"92177647_17d0406e","line":6,"updated":"2021-07-19 14:57:40.000000000","message":"maybe you should add the same paragraph than for the API documentation :\n\n\"Moving providers can mean that the original rules used to create the existing resource allocations may be invalidated by that move.\"","commit_id":"00795f31b8398ffcc817f4d2f3aa16b5b18c803e"}]}
