)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"42b01e8492932875ec50ea4be652280af922836b","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Add support for 1.24 microversion"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The 1.24 microversion of placement adds support for listing"},{"line_number":10,"context_line":"resource providers that are associated with multiple UUIDs."},{"line_number":11,"context_line":"User should use `in:` keyword for every UUID that the requested"},{"line_number":12,"context_line":"resource provider should be associated with."},{"line_number":13,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"9fb8cfa7_626453e6","line":10,"range":{"start_line":10,"start_character":53,"end_line":10,"end_character":58},"updated":"2019-06-20 14:10:13.000000000","message":"aggregates?","commit_id":"6ebf35962837c1b64e89bbdf4ecad10faafce0ba"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"b1ad65d9b8abdc79d9c65b559a23ac3747513bb4","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Add support for 1.24 microversion"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The 1.24 microversion of placement adds support for listing"},{"line_number":10,"context_line":"resource providers that are associated with multiple UUIDs."},{"line_number":11,"context_line":"User should use `in:` keyword for every UUID that the requested"},{"line_number":12,"context_line":"resource provider should be associated with."},{"line_number":13,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"9fb8cfa7_a1ab2873","line":10,"range":{"start_line":10,"start_character":53,"end_line":10,"end_character":58},"in_reply_to":"9fb8cfa7_626453e6","updated":"2019-06-20 15:17:28.000000000","message":"This description isn\u0027t really accurate.\n\nSee: https://docs.openstack.org/placement/latest/placement-api-microversion-history.html#support-multiple-member-of-queryparams for some additional explanation.\n\nAs well as the change that did 1.24: https://review.opendev.org/561315\n\nThe change is that multiple member_of params are allowed and are used together.","commit_id":"6ebf35962837c1b64e89bbdf4ecad10faafce0ba"},{"author":{"_account_id":30143,"name":"Pawel Baclawski","email":"baclawski.pawel@gmail.com","username":"pawel-baclawski"},"change_message_id":"17e8a18d45b2896303dcecc267ce12e12de04341","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Add support for 1.24 microversion"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The 1.24 microversion of placement adds support for listing"},{"line_number":10,"context_line":"resource providers that are associated with multiple UUIDs."},{"line_number":11,"context_line":"User should use `in:` keyword for every UUID that the requested"},{"line_number":12,"context_line":"resource provider should be associated with."},{"line_number":13,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"9fb8cfa7_33373c01","line":10,"range":{"start_line":10,"start_character":53,"end_line":10,"end_character":58},"in_reply_to":"9fb8cfa7_626453e6","updated":"2019-06-26 08:09:22.000000000","message":"Tried to make it more accurate now, please check.","commit_id":"6ebf35962837c1b64e89bbdf4ecad10faafce0ba"},{"author":{"_account_id":30143,"name":"Pawel Baclawski","email":"baclawski.pawel@gmail.com","username":"pawel-baclawski"},"change_message_id":"17e8a18d45b2896303dcecc267ce12e12de04341","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Add support for 1.24 microversion"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The 1.24 microversion of placement adds support for listing"},{"line_number":10,"context_line":"resource providers that are associated with multiple UUIDs."},{"line_number":11,"context_line":"User should use `in:` keyword for every UUID that the requested"},{"line_number":12,"context_line":"resource provider should be associated with."},{"line_number":13,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"9fb8cfa7_533c30e0","line":10,"range":{"start_line":10,"start_character":53,"end_line":10,"end_character":58},"in_reply_to":"9fb8cfa7_a1ab2873","updated":"2019-06-26 08:09:22.000000000","message":"As above.","commit_id":"6ebf35962837c1b64e89bbdf4ecad10faafce0ba"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"ef4d77073e5e74b09ea1f1506e33c0fecf9355a8","unresolved":true,"context_lines":[{"line_number":20,"context_line":"feature added in microversion 1.24."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Change-Id: I0f3068c411c504380918f27f994734528fe55c77"},{"line_number":23,"context_line":"Co-Autored-By: Tetsuro Nakamura \u003ctetsuro.nakamura.bc@hco.ntt.co.jp\u003e"},{"line_number":24,"context_line":"Story: #2006940"},{"line_number":25,"context_line":"Task: #37613"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"edcf19a1_ebd2f9e1","line":23,"range":{"start_line":23,"start_character":3,"end_line":23,"end_character":10},"updated":"2021-03-19 15:03:45.000000000","message":"Authored","commit_id":"db98792e466b51ad8112f0c4269ef0298befd50f"}],"osc_placement/resources/allocation_candidate.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"ef4d77073e5e74b09ea1f1506e33c0fecf9355a8","unresolved":true,"context_lines":[{"line_number":99,"context_line":"                 \u0027``--os-placement-api-version 1.22``.\u0027"},{"line_number":100,"context_line":"        )"},{"line_number":101,"context_line":"        # NOTE(tetsuro): --aggregate-uuid is deprecated in Jan 2020 in 1.x"},{"line_number":102,"context_line":"        # release. Do not remove before Jan 2021 and a 2.x release."},{"line_number":103,"context_line":"        aggregate_group \u003d parser.add_mutually_exclusive_group()"},{"line_number":104,"context_line":"        aggregate_group.add_argument("},{"line_number":105,"context_line":"            \"--member-of\","}],"source_content_type":"text/x-python","patch_set":10,"id":"2e9ba6dc_bf2f79c2","line":102,"updated":"2021-03-19 15:03:45.000000000","message":"The dates in this text should be updated now, but we can do that in a follow-up","commit_id":"db98792e466b51ad8112f0c4269ef0298befd50f"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"ef4d77073e5e74b09ea1f1506e33c0fecf9355a8","unresolved":true,"context_lines":[{"line_number":111,"context_line":"                 \u0027associated with at least one of the aggregates identified \u0027"},{"line_number":112,"context_line":"                 \u0027by uuid. This param requires at least \u0027"},{"line_number":113,"context_line":"                 \u0027``--os-placement-api-version 1.21`` and can be repeated to \u0027"},{"line_number":114,"context_line":"                 \u0027add(restrict) the condition with \u0027"},{"line_number":115,"context_line":"                 \u0027``--os-placement-api-version 1.24`` or greater. \u0027"},{"line_number":116,"context_line":"                 \u0027For example, to get candidates in either of agg1 or agg2 \u0027"},{"line_number":117,"context_line":"                 \u0027and definitely in agg3, specify:\\n\\n\u0027"}],"source_content_type":"text/x-python","patch_set":10,"id":"fd3d3abe_7cd6d806","line":114,"range":{"start_line":114,"start_character":21,"end_line":114,"end_character":22},"updated":"2021-03-19 15:03:45.000000000","message":"nit: missing space","commit_id":"db98792e466b51ad8112f0c4269ef0298befd50f"}],"osc_placement/resources/common.py":[{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"42b01e8492932875ec50ea4be652280af922836b","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    if filters:"},{"line_number":34,"context_line":"        query \u003d []"},{"line_number":35,"context_line":"        for key, values in filters.items():"},{"line_number":36,"context_line":"            param \u003d [(key, v) for v in values] if type(values) is list else [(key, values)]"},{"line_number":37,"context_line":"            query.extend(param)"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"        urlencoded_filters \u003d urlparse.urlencode(query)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fb8cfa7_82270765","line":36,"range":{"start_line":36,"start_character":22,"end_line":36,"end_character":28},"updated":"2019-06-20 14:10:13.000000000","message":"encode(key), encode(v)","commit_id":"6ebf35962837c1b64e89bbdf4ecad10faafce0ba"},{"author":{"_account_id":30143,"name":"Pawel Baclawski","email":"baclawski.pawel@gmail.com","username":"pawel-baclawski"},"change_message_id":"17e8a18d45b2896303dcecc267ce12e12de04341","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    if filters:"},{"line_number":34,"context_line":"        query \u003d []"},{"line_number":35,"context_line":"        for key, values in filters.items():"},{"line_number":36,"context_line":"            param \u003d [(key, v) for v in values] if type(values) is list else [(key, values)]"},{"line_number":37,"context_line":"            query.extend(param)"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"        urlencoded_filters \u003d urlparse.urlencode(query)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fb8cfa7_f32444c8","line":36,"range":{"start_line":36,"start_character":22,"end_line":36,"end_character":28},"in_reply_to":"9fb8cfa7_82270765","updated":"2019-06-26 08:09:22.000000000","message":"Done","commit_id":"6ebf35962837c1b64e89bbdf4ecad10faafce0ba"}],"osc_placement/resources/resource_provider.py":[{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"42b01e8492932875ec50ea4be652280af922836b","unresolved":false,"context_lines":[{"line_number":108,"context_line":"                 \u0027amount of resource of a specified class that a provider \u0027"},{"line_number":109,"context_line":"                 \u0027must have the capacity to serve. May be repeated.\\n\\n\u0027"},{"line_number":110,"context_line":"                 \u0027This param requires at least \u0027"},{"line_number":111,"context_line":"                 \u0027``--os-placement-api-version 1.4``.\\n\\n\u0027"},{"line_number":112,"context_line":"                 \u0027From ``--os-placement-api-version 1.24`` when repeating \u0027"},{"line_number":113,"context_line":"                 \u0027the option, with UUIDs preceded with ``in:`` keyword, \u0027"},{"line_number":114,"context_line":"                 \u0027the resource providers associated with the UUIDs, specified \u0027"},{"line_number":115,"context_line":"                 \u0027in every other repetition, are AND\\\u0027d in the final query.\u0027"},{"line_number":116,"context_line":"        )"},{"line_number":117,"context_line":"        parser.add_argument("},{"line_number":118,"context_line":"            \u0027--in-tree\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fb8cfa7_22c41b5f","line":115,"range":{"start_line":111,"start_character":53,"end_line":115,"end_character":75},"updated":"2019-06-20 14:10:13.000000000","message":"this should be added for --aggregate-uuid option, or am I missing something?","commit_id":"6ebf35962837c1b64e89bbdf4ecad10faafce0ba"},{"author":{"_account_id":30143,"name":"Pawel Baclawski","email":"baclawski.pawel@gmail.com","username":"pawel-baclawski"},"change_message_id":"17e8a18d45b2896303dcecc267ce12e12de04341","unresolved":false,"context_lines":[{"line_number":108,"context_line":"                 \u0027amount of resource of a specified class that a provider \u0027"},{"line_number":109,"context_line":"                 \u0027must have the capacity to serve. May be repeated.\\n\\n\u0027"},{"line_number":110,"context_line":"                 \u0027This param requires at least \u0027"},{"line_number":111,"context_line":"                 \u0027``--os-placement-api-version 1.4``.\\n\\n\u0027"},{"line_number":112,"context_line":"                 \u0027From ``--os-placement-api-version 1.24`` when repeating \u0027"},{"line_number":113,"context_line":"                 \u0027the option, with UUIDs preceded with ``in:`` keyword, \u0027"},{"line_number":114,"context_line":"                 \u0027the resource providers associated with the UUIDs, specified \u0027"},{"line_number":115,"context_line":"                 \u0027in every other repetition, are AND\\\u0027d in the final query.\u0027"},{"line_number":116,"context_line":"        )"},{"line_number":117,"context_line":"        parser.add_argument("},{"line_number":118,"context_line":"            \u0027--in-tree\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fb8cfa7_132238ba","line":115,"range":{"start_line":111,"start_character":53,"end_line":115,"end_character":75},"in_reply_to":"9fb8cfa7_22c41b5f","updated":"2019-06-26 08:09:22.000000000","message":"Done","commit_id":"6ebf35962837c1b64e89bbdf4ecad10faafce0ba"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"b1ad65d9b8abdc79d9c65b559a23ac3747513bb4","unresolved":false,"context_lines":[{"line_number":108,"context_line":"                 \u0027amount of resource of a specified class that a provider \u0027"},{"line_number":109,"context_line":"                 \u0027must have the capacity to serve. May be repeated.\\n\\n\u0027"},{"line_number":110,"context_line":"                 \u0027This param requires at least \u0027"},{"line_number":111,"context_line":"                 \u0027``--os-placement-api-version 1.4``.\\n\\n\u0027"},{"line_number":112,"context_line":"                 \u0027From ``--os-placement-api-version 1.24`` when repeating \u0027"},{"line_number":113,"context_line":"                 \u0027the option, with UUIDs preceded with ``in:`` keyword, \u0027"},{"line_number":114,"context_line":"                 \u0027the resource providers associated with the UUIDs, specified \u0027"},{"line_number":115,"context_line":"                 \u0027in every other repetition, are AND\\\u0027d in the final query.\u0027"},{"line_number":116,"context_line":"        )"},{"line_number":117,"context_line":"        parser.add_argument("},{"line_number":118,"context_line":"            \u0027--in-tree\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fb8cfa7_c1d41cec","line":115,"range":{"start_line":111,"start_character":53,"end_line":115,"end_character":75},"in_reply_to":"9fb8cfa7_22c41b5f","updated":"2019-06-20 15:17:28.000000000","message":"Yeah, this is in the wrong place","commit_id":"6ebf35962837c1b64e89bbdf4ecad10faafce0ba"},{"author":{"_account_id":30143,"name":"Pawel Baclawski","email":"baclawski.pawel@gmail.com","username":"pawel-baclawski"},"change_message_id":"17e8a18d45b2896303dcecc267ce12e12de04341","unresolved":false,"context_lines":[{"line_number":108,"context_line":"                 \u0027amount of resource of a specified class that a provider \u0027"},{"line_number":109,"context_line":"                 \u0027must have the capacity to serve. May be repeated.\\n\\n\u0027"},{"line_number":110,"context_line":"                 \u0027This param requires at least \u0027"},{"line_number":111,"context_line":"                 \u0027``--os-placement-api-version 1.4``.\\n\\n\u0027"},{"line_number":112,"context_line":"                 \u0027From ``--os-placement-api-version 1.24`` when repeating \u0027"},{"line_number":113,"context_line":"                 \u0027the option, with UUIDs preceded with ``in:`` keyword, \u0027"},{"line_number":114,"context_line":"                 \u0027the resource providers associated with the UUIDs, specified \u0027"},{"line_number":115,"context_line":"                 \u0027in every other repetition, are AND\\\u0027d in the final query.\u0027"},{"line_number":116,"context_line":"        )"},{"line_number":117,"context_line":"        parser.add_argument("},{"line_number":118,"context_line":"            \u0027--in-tree\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fb8cfa7_b32a4c8e","line":115,"range":{"start_line":111,"start_character":53,"end_line":115,"end_character":75},"in_reply_to":"9fb8cfa7_c1d41cec","updated":"2019-06-26 08:09:22.000000000","message":"Done","commit_id":"6ebf35962837c1b64e89bbdf4ecad10faafce0ba"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"b1ad65d9b8abdc79d9c65b559a23ac3747513bb4","unresolved":false,"context_lines":[{"line_number":157,"context_line":"            self.check_version(version.ge(\u00271.3\u0027))"},{"line_number":158,"context_line":"            if any(\u0027in:\u0027 in arg for arg in parsed_args.aggregate_uuid):"},{"line_number":159,"context_line":"                self.check_version(version.ge(\u00271.24\u0027))"},{"line_number":160,"context_line":"                filters[\u0027member_of\u0027] \u003d [uuids for uuids in parsed_args.aggregate_uuid]"},{"line_number":161,"context_line":"            else:"},{"line_number":162,"context_line":"                filters[\u0027member_of\u0027] \u003d \u0027in:\u0027 + \u0027,\u0027.join(parsed_args.aggregate_uuid)"},{"line_number":163,"context_line":"        if parsed_args.resource:"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fb8cfa7_a41b3671","line":160,"updated":"2019-06-20 15:17:28.000000000","message":"This is going to result in one member_of in the query string which does not provide the functionality described by 1.24","commit_id":"6ebf35962837c1b64e89bbdf4ecad10faafce0ba"},{"author":{"_account_id":30143,"name":"Pawel Baclawski","email":"baclawski.pawel@gmail.com","username":"pawel-baclawski"},"change_message_id":"17e8a18d45b2896303dcecc267ce12e12de04341","unresolved":false,"context_lines":[{"line_number":157,"context_line":"            self.check_version(version.ge(\u00271.3\u0027))"},{"line_number":158,"context_line":"            if any(\u0027in:\u0027 in arg for arg in parsed_args.aggregate_uuid):"},{"line_number":159,"context_line":"                self.check_version(version.ge(\u00271.24\u0027))"},{"line_number":160,"context_line":"                filters[\u0027member_of\u0027] \u003d [uuids for uuids in parsed_args.aggregate_uuid]"},{"line_number":161,"context_line":"            else:"},{"line_number":162,"context_line":"                filters[\u0027member_of\u0027] \u003d \u0027in:\u0027 + \u0027,\u0027.join(parsed_args.aggregate_uuid)"},{"line_number":163,"context_line":"        if parsed_args.resource:"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fb8cfa7_d327c0c6","line":160,"in_reply_to":"9fb8cfa7_a41b3671","updated":"2019-06-26 08:09:22.000000000","message":"It will work, when \u0027in:\u0027 keyword is used once per --aggregate-uuid","commit_id":"6ebf35962837c1b64e89bbdf4ecad10faafce0ba"},{"author":{"_account_id":30143,"name":"Pawel Baclawski","email":"baclawski.pawel@gmail.com","username":"pawel-baclawski"},"change_message_id":"b074e049d76f75c571d26a599b0d8d850405033c","unresolved":false,"context_lines":[{"line_number":87,"context_line":"            help\u003d\u0027Name of the resource provider\u0027"},{"line_number":88,"context_line":"        )"},{"line_number":89,"context_line":"        parser.add_argument("},{"line_number":90,"context_line":"            \u0027--aggregate-uuid\u0027,"},{"line_number":91,"context_line":"            default\u003d[],"},{"line_number":92,"context_line":"            action\u003d\u0027append\u0027,"},{"line_number":93,"context_line":"            metavar\u003d\u0027\u003caggregate_uuid\u003e\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"7faddb67_4a49f3b4","line":90,"range":{"start_line":90,"start_character":13,"end_line":90,"end_character":29},"updated":"2019-07-30 13:42:28.000000000","message":"should we mentioned to use --member-of / --member-in instead? or turn the option off if version \u003e\u003d 1.24?","commit_id":"2f939338a8ec9db8adad1426559a65ae2df2dfbe"},{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"db3fc87139fbc111ff1d58086f30402017e86752","unresolved":false,"context_lines":[{"line_number":87,"context_line":"            help\u003d\u0027Name of the resource provider\u0027"},{"line_number":88,"context_line":"        )"},{"line_number":89,"context_line":"        parser.add_argument("},{"line_number":90,"context_line":"            \u0027--aggregate-uuid\u0027,"},{"line_number":91,"context_line":"            default\u003d[],"},{"line_number":92,"context_line":"            action\u003d\u0027append\u0027,"},{"line_number":93,"context_line":"            metavar\u003d\u0027\u003caggregate_uuid\u003e\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_f0eb5ea1","line":90,"range":{"start_line":90,"start_character":13,"end_line":90,"end_character":29},"in_reply_to":"7faddb67_4a49f3b4","updated":"2019-11-27 12:05:53.000000000","message":"What I\u0027ve done in [1] is to deprecate and issue a warning if this is used.","commit_id":"2f939338a8ec9db8adad1426559a65ae2df2dfbe"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"8d4fb773ec6eedc5e7442aa1cd530d544e2c164a","unresolved":false,"context_lines":[{"line_number":140,"context_line":"                 \u0027by uuid. This param requires at least \u0027"},{"line_number":141,"context_line":"                 \u0027``--os-placement-api-version 1.3`` and can be repeated to \u0027"},{"line_number":142,"context_line":"                 \u0027add(restrict) the condition with \u0027"},{"line_number":143,"context_line":"                 \u0027``--os-placement-api-version 1.24`` or greater. \u0027"},{"line_number":144,"context_line":"                 \u0027For example, to get candidates either in agg1 or in agg2 \u0027"},{"line_number":145,"context_line":"                 \u0027and definitely in agg3, specify:\\n\\n\u0027"},{"line_number":146,"context_line":"                 \u0027``--member_of \u003cagg1\u003e,\u003cagg2\u003e --member_of \u003cagg3\u003e``\u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"3fa7e38b_81baeddd","line":143,"updated":"2020-01-13 12:48:41.000000000","message":"This is only validate by the placement API not by the client. The error message from placement is pretty informative, so it is OK to me.\n\n\"Multiple member_of parameters are not supported (HTTP 400)\"","commit_id":"1dc69487c5275d9844cc8c6b6ce5a02cf5cba142"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"ef4d77073e5e74b09ea1f1506e33c0fecf9355a8","unresolved":true,"context_lines":[{"line_number":127,"context_line":"                 \u0027``--os-placement-api-version 1.22``.\u0027"},{"line_number":128,"context_line":"        )"},{"line_number":129,"context_line":"        # NOTE(tetsuro): --aggregate-uuid is deprecated in Jan 2020 in 1.x"},{"line_number":130,"context_line":"        # release. Do not remove before Jan 2021 and a 2.x release."},{"line_number":131,"context_line":"        aggregate_group \u003d parser.add_mutually_exclusive_group()"},{"line_number":132,"context_line":"        aggregate_group.add_argument("},{"line_number":133,"context_line":"            \"--member-of\","}],"source_content_type":"text/x-python","patch_set":10,"id":"e1c63086_716fe9ea","line":130,"updated":"2021-03-19 15:03:45.000000000","message":"ditto","commit_id":"db98792e466b51ad8112f0c4269ef0298befd50f"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"ef4d77073e5e74b09ea1f1506e33c0fecf9355a8","unresolved":true,"context_lines":[{"line_number":139,"context_line":"                 \u0027associated with at least one of the aggregates identified \u0027"},{"line_number":140,"context_line":"                 \u0027by uuid. This param requires at least \u0027"},{"line_number":141,"context_line":"                 \u0027``--os-placement-api-version 1.3`` and can be repeated to \u0027"},{"line_number":142,"context_line":"                 \u0027add(restrict) the condition with \u0027"},{"line_number":143,"context_line":"                 \u0027``--os-placement-api-version 1.24`` or greater. \u0027"},{"line_number":144,"context_line":"                 \u0027For example, to get candidates either in agg1 or in agg2 \u0027"},{"line_number":145,"context_line":"                 \u0027and definitely in agg3, specify:\\n\\n\u0027"}],"source_content_type":"text/x-python","patch_set":10,"id":"64974d3f_e571b623","line":142,"range":{"start_line":142,"start_character":21,"end_line":142,"end_character":22},"updated":"2021-03-19 15:03:45.000000000","message":"ditto","commit_id":"db98792e466b51ad8112f0c4269ef0298befd50f"}],"osc_placement/tests/functional/test_resource_provider.py":[{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"b1ad65d9b8abdc79d9c65b559a23ac3747513bb4","unresolved":false,"context_lines":[{"line_number":353,"context_line":"        self.assertIn(rp2[\u0027uuid\u0027], uuids)"},{"line_number":354,"context_line":"        self.assertIn(rp3[\u0027uuid\u0027], uuids)"},{"line_number":355,"context_line":""},{"line_number":356,"context_line":"    # Specyfing aggregate_uuid with \u0027in:\u0027 available since 1.24"},{"line_number":357,"context_line":"    def test_fail_if_multiple_member_of_wrong_version(self):"},{"line_number":358,"context_line":"        self.assertCommandFailed("},{"line_number":359,"context_line":"            \u0027Operation or argument is not supported with version 1.22\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fb8cfa7_41d34cd6","line":356,"updated":"2019-06-20 15:17:28.000000000","message":"This is either not accurate, or is overloading terminology in a confusing way. \n\nmember_of can use \u0027in:\u0027 since 1.3: https://docs.openstack.org/placement/latest/placement-api-microversion-history.html#member-of-query-parameter","commit_id":"6ebf35962837c1b64e89bbdf4ecad10faafce0ba"},{"author":{"_account_id":30143,"name":"Pawel Baclawski","email":"baclawski.pawel@gmail.com","username":"pawel-baclawski"},"change_message_id":"17e8a18d45b2896303dcecc267ce12e12de04341","unresolved":false,"context_lines":[{"line_number":353,"context_line":"        self.assertIn(rp2[\u0027uuid\u0027], uuids)"},{"line_number":354,"context_line":"        self.assertIn(rp3[\u0027uuid\u0027], uuids)"},{"line_number":355,"context_line":""},{"line_number":356,"context_line":"    # Specyfing aggregate_uuid with \u0027in:\u0027 available since 1.24"},{"line_number":357,"context_line":"    def test_fail_if_multiple_member_of_wrong_version(self):"},{"line_number":358,"context_line":"        self.assertCommandFailed("},{"line_number":359,"context_line":"            \u0027Operation or argument is not supported with version 1.22\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fb8cfa7_931f086b","line":356,"in_reply_to":"9fb8cfa7_41d34cd6","updated":"2019-06-26 08:09:22.000000000","message":"In this case, I was referring to --aggregate-uuid, not member_of. Previously, when passed \u0027in:\u0027 keyword to --aggregate-uuid it would result with some error.","commit_id":"6ebf35962837c1b64e89bbdf4ecad10faafce0ba"},{"author":{"_account_id":30143,"name":"Pawel Baclawski","email":"baclawski.pawel@gmail.com","username":"pawel-baclawski"},"change_message_id":"b074e049d76f75c571d26a599b0d8d850405033c","unresolved":false,"context_lines":[{"line_number":381,"context_line":"        self.assertEqual(1, len(rps))"},{"line_number":382,"context_line":"        self.assertEqual(rp2[\u0027uuid\u0027], rps[0][\u0027uuid\u0027])"},{"line_number":383,"context_line":""},{"line_number":384,"context_line":"        # Passed as multiple --member-of arguments"},{"line_number":385,"context_line":"        rps \u003d self.resource_provider_list("},{"line_number":386,"context_line":"            member_of\u003d[return_rp1_rp2[\u0027uuid\u0027],"},{"line_number":387,"context_line":"                       return_rp2_rp3[\u0027uuid\u0027]])"}],"source_content_type":"text/x-python","patch_set":6,"id":"7faddb67_6a562f5f","line":384,"range":{"start_line":384,"start_character":10,"end_line":384,"end_character":50},"updated":"2019-07-30 13:42:28.000000000","message":"--member-of agg1,agg2\n\nis the same as\n\n--member-of agg1 --member-of agg2\n\nand will return resource providers that are members of BOTH agg1 and agg2\n\nis it correct or another result is expected?","commit_id":"2f939338a8ec9db8adad1426559a65ae2df2dfbe"},{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"db3fc87139fbc111ff1d58086f30402017e86752","unresolved":false,"context_lines":[{"line_number":381,"context_line":"        self.assertEqual(1, len(rps))"},{"line_number":382,"context_line":"        self.assertEqual(rp2[\u0027uuid\u0027], rps[0][\u0027uuid\u0027])"},{"line_number":383,"context_line":""},{"line_number":384,"context_line":"        # Passed as multiple --member-of arguments"},{"line_number":385,"context_line":"        rps \u003d self.resource_provider_list("},{"line_number":386,"context_line":"            member_of\u003d[return_rp1_rp2[\u0027uuid\u0027],"},{"line_number":387,"context_line":"                       return_rp2_rp3[\u0027uuid\u0027]])"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_900f8a8a","line":384,"range":{"start_line":384,"start_character":10,"end_line":384,"end_character":50},"in_reply_to":"7faddb67_6a562f5f","updated":"2019-11-27 12:05:53.000000000","message":"I thought \n\n    --member-of agg1,agg2\n\nwould mean agg1 OR agg2 and \n\n    --member-of agg1 --member-of agg2\n\nwould mean agg1 and agg2?","commit_id":"2f939338a8ec9db8adad1426559a65ae2df2dfbe"}],"releasenotes/notes/microversion-1.24-multiple-member-of-df0b676b4fcb8edc.yaml":[{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"b1ad65d9b8abdc79d9c65b559a23ac3747513bb4","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    Starting from `1.24 microversion`_ of placement, when user use"},{"line_number":5,"context_line":"    ``openstack resource provider list`` with multiple ``--aggregate-uuid``"},{"line_number":6,"context_line":"    option and preceeds UUIDs with ``in:`` keyword, they are AND\u0027d together"},{"line_number":7,"context_line":"    in the final query."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"    .. _1.24 microversion: https://docs.openstack.org/placement/latest/placement-api-microversion-history.html#support-allocation-candidates-with-nested-resource-providers"}],"source_content_type":"text/x-yaml","patch_set":2,"id":"9fb8cfa7_c1289c98","line":7,"updated":"2019-06-20 15:17:28.000000000","message":"That\u0027s not quite right. There\u0027s a few examples in the feature release note that may make it more clear: https://docs.openstack.org/releasenotes/nova/rocky.html#new-features (search for \"1.24\" in the document)\n\nFrom that:\n\n+    Get all providers that are associated with agg1 OR agg2:\n+    ?member_of\u003din:agg1,agg2\n+    Get all providers that are associated with agg1 and ANY OF (agg2, agg3):\n+    ?member_of\u003dagg1\u0026member_of\u003din:agg2,agg3\n+    Get all providers that are associated with ANY OF (agg1, agg2) AND are also\n+    associated with ANY OF (agg3, agg4):\n+    ?member_of\u003din:agg1,agg2\u0026member_of\u003din:agg3,agg4","commit_id":"6ebf35962837c1b64e89bbdf4ecad10faafce0ba"},{"author":{"_account_id":30143,"name":"Pawel Baclawski","email":"baclawski.pawel@gmail.com","username":"pawel-baclawski"},"change_message_id":"17e8a18d45b2896303dcecc267ce12e12de04341","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    Starting from `1.24 microversion`_ of placement, when user use"},{"line_number":5,"context_line":"    ``openstack resource provider list`` with multiple ``--aggregate-uuid``"},{"line_number":6,"context_line":"    option and preceeds UUIDs with ``in:`` keyword, they are AND\u0027d together"},{"line_number":7,"context_line":"    in the final query."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"    .. _1.24 microversion: https://docs.openstack.org/placement/latest/placement-api-microversion-history.html#support-allocation-candidates-with-nested-resource-providers"}],"source_content_type":"text/x-yaml","patch_set":2,"id":"9fb8cfa7_3605ea10","line":7,"in_reply_to":"9fb8cfa7_c1289c98","updated":"2019-06-26 08:09:22.000000000","message":"Please check current description. Hopefully it\u0027s slightly better now.","commit_id":"6ebf35962837c1b64e89bbdf4ecad10faafce0ba"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"0d453fb7aa1db36bd5d46bbd233005a167bf0244","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"    .. code-block:: text"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"      openstack resource provider list --aggregate-uuid in:agg1 --aggregate-uuid in:agg2"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"    Get all providers that are associated with agg1 OR agg2:"},{"line_number":21,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":5,"id":"9fb8cfa7_7d46967d","line":18,"updated":"2019-07-01 13:29:56.000000000","message":"This example is a bit misleading because you would presumably get the same results without include the \u0027in:\u0027.\n\nOr at least that would be my expectation based on what microversion 1.24 is: being able to use multiple member_of (of whatever form) in a single query.","commit_id":"ae9520fae7b7c9e7ebc76322ebc4ed5fa7362076"},{"author":{"_account_id":30143,"name":"Pawel Baclawski","email":"baclawski.pawel@gmail.com","username":"pawel-baclawski"},"change_message_id":"49979543bc0d1db9e68a8cf3a910c968ec806354","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"    .. code-block:: text"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"      openstack resource provider list --aggregate-uuid in:agg1 --aggregate-uuid in:agg2"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"    Get all providers that are associated with agg1 OR agg2:"},{"line_number":21,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":5,"id":"9fb8cfa7_5824000d","line":18,"in_reply_to":"9fb8cfa7_7d46967d","updated":"2019-07-02 05:50:13.000000000","message":"That\u0027s why it\u0027s important for user to understand when to use and when to not use \u0027in:\u0027 keyword. Without it, listing resource providers would work exactly as it worked before. But when \u0027in:\u0027 keyword is in use, then user has to be aware that the results will be returned using new, 1.24, functionality. In other words, \u0027in:\u0027 HAS TO BE USED with every other occurrence of --aggregate-uuid option if user wants the results based on microversion 1.24 and HAS TO BE SKIPPED otherwise. I understand that is it very confusing, but for now, I do not have any other idea for this implementation.\n\nThe examples are mostly copied from: https://review.opendev.org/#/c/561315/16/releasenotes/notes/multi-member-of-4f9518a96652c0c6.yaml","commit_id":"ae9520fae7b7c9e7ebc76322ebc4ed5fa7362076"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"0d453fb7aa1db36bd5d46bbd233005a167bf0244","unresolved":false,"context_lines":[{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    .. code-block:: text"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"      openstack resource provider list --aggregate-uuid in:agg1 --aggregate-uuid in:agg2,agg3"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    Get all providers that are associated with ANY OF (agg1, agg2) AND are also"},{"line_number":33,"context_line":"    associated with ANY OF (agg3, agg4):"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"9fb8cfa7_1d267acf","line":30,"range":{"start_line":30,"start_character":56,"end_line":30,"end_character":63},"updated":"2019-07-01 13:29:56.000000000","message":"Again, it\u0027s not clear what the \u0027in:\u0027 is doing here, other than being confusing.","commit_id":"ae9520fae7b7c9e7ebc76322ebc4ed5fa7362076"},{"author":{"_account_id":30143,"name":"Pawel Baclawski","email":"baclawski.pawel@gmail.com","username":"pawel-baclawski"},"change_message_id":"49979543bc0d1db9e68a8cf3a910c968ec806354","unresolved":false,"context_lines":[{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    .. code-block:: text"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"      openstack resource provider list --aggregate-uuid in:agg1 --aggregate-uuid in:agg2,agg3"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    Get all providers that are associated with ANY OF (agg1, agg2) AND are also"},{"line_number":33,"context_line":"    associated with ANY OF (agg3, agg4):"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"9fb8cfa7_988358cb","line":30,"range":{"start_line":30,"start_character":56,"end_line":30,"end_character":63},"in_reply_to":"9fb8cfa7_1d267acf","updated":"2019-07-02 05:50:13.000000000","message":"As above:\n\u0027in:\u0027 keyword used - 1.24\u003e\nno \u0027in:\u0027 keyword - \u003c1.24","commit_id":"ae9520fae7b7c9e7ebc76322ebc4ed5fa7362076"},{"author":{"_account_id":30143,"name":"Pawel Baclawski","email":"baclawski.pawel@gmail.com","username":"pawel-baclawski"},"change_message_id":"cc9d34e42be89e8442e145a3a42d74d4167590db","unresolved":false,"context_lines":[{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    .. code-block:: text"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"      openstack resource provider list --aggregate-uuid in:agg1 --aggregate-uuid in:agg2,agg3"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    Get all providers that are associated with ANY OF (agg1, agg2) AND are also"},{"line_number":33,"context_line":"    associated with ANY OF (agg3, agg4):"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"9fb8cfa7_22ce965b","line":30,"range":{"start_line":30,"start_character":56,"end_line":30,"end_character":63},"in_reply_to":"9fb8cfa7_7fe985b5","updated":"2019-07-03 12:46:19.000000000","message":"Okay, then one solution to that is to drop backward compatibility, so when microversion 1.24 is in use, using multiple --aggregate-uuid would work exactly as using multiple member_of query parameters.\n\nAnother way is to introduce new option / flag - then I would need some proposals how to name it.","commit_id":"ae9520fae7b7c9e7ebc76322ebc4ed5fa7362076"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"5eb04b704e9d1e097fc9142ac6bd9b69af20522f","unresolved":false,"context_lines":[{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    .. code-block:: text"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"      openstack resource provider list --aggregate-uuid in:agg1 --aggregate-uuid in:agg2,agg3"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    Get all providers that are associated with ANY OF (agg1, agg2) AND are also"},{"line_number":33,"context_line":"    associated with ANY OF (agg3, agg4):"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"9fb8cfa7_7fe985b5","line":30,"range":{"start_line":30,"start_character":56,"end_line":30,"end_character":63},"in_reply_to":"9fb8cfa7_988358cb","updated":"2019-07-03 12:03:42.000000000","message":"But that\u0027s not how selecting a microversion works. You have to explicitly declare your microversion:\n\n    --os-placement-api-version 1.24","commit_id":"ae9520fae7b7c9e7ebc76322ebc4ed5fa7362076"}]}
