)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"904eb0904233cbbee7081e443db161da394bae06","unresolved":true,"context_lines":[{"line_number":19,"context_line":"Story: 2005345"},{"line_number":20,"context_line":"Story: 2005346"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Depends-On: https://review.opendev.org/c/openstack/placement/+/826719"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"Change-Id: I38ff55bdd072f3a9c1ed03e28192d045cb4096cf"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"63967bff_ad7843ca","line":22,"range":{"start_line":22,"start_character":12,"end_line":22,"end_character":69},"updated":"2022-06-30 14:27:16.000000000","message":"yep this is merged and release last cycle.","commit_id":"9545623054fda8313cde1253d9af3fffcdaa3949"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"c32c33118f3eaa921b642f4dd79a840b648a8a62","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"bf810821_e24b16ef","updated":"2022-03-01 16:34:14.000000000","message":"Just sayin\u0027, we will be branching osc-placement with https://review.opendev.org/c/openstack/releases/+/831293 so we could hold a little bit this change.","commit_id":"4e0cb071b20162fcbe3ceffce81b8e02d7309367"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"7b86760c573f3b0765dd59f2e0f207ac85e8c586","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"4d28ec8e_ae6e685b","updated":"2022-03-01 10:50:55.000000000","message":"looks good but we still have trailing spaces in the reno file. Wonder why the relnote job says nothing.","commit_id":"4e0cb071b20162fcbe3ceffce81b8e02d7309367"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"b2a9b433c7bf4823c834606cc08d0d409d0ebad7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"3da172a7_40830b79","updated":"2022-05-31 12:48:28.000000000","message":"fixed up the reno and rebased the patch","commit_id":"fe566ec2d731d25bd391be4b7188bbb6ec6d4168"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"33599c37ad7551f23f87a5cabb49e9816af4fd9c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"bb59a99d_eaf6a8cf","updated":"2022-06-02 15:32:30.000000000","message":"Thanks gibi, was needed for a while.","commit_id":"9545623054fda8313cde1253d9af3fffcdaa3949"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"904eb0904233cbbee7081e443db161da394bae06","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"63ee2b16_5624ec39","updated":"2022-06-30 14:27:16.000000000","message":"this looks good to me so lest send it on its way.","commit_id":"9545623054fda8313cde1253d9af3fffcdaa3949"}],"osc_placement/resources/allocation_candidate.py":[{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"7b86760c573f3b0765dd59f2e0f207ac85e8c586","unresolved":true,"context_lines":[{"line_number":218,"context_line":"                # Fail if --required but not high enough microversion."},{"line_number":219,"context_line":"                self.check_version(version.ge(\u00271.17\u0027))"},{"line_number":220,"context_line":"                if any(\u0027,\u0027 in required for required in group[\u0027required\u0027]):"},{"line_number":221,"context_line":"                    self.check_version(version.ge(\u00271.39\u0027))"},{"line_number":222,"context_line":"                required_traits \u003d group[\u0027required\u0027]"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"            forbidden_traits \u003d []"}],"source_content_type":"text/x-python","patch_set":2,"id":"5963d634_75b794fa","line":221,"range":{"start_line":221,"start_character":47,"end_line":221,"end_character":49},"updated":"2022-03-01 10:50:55.000000000","message":".ge() ?\nah, greater or equal. For one min, I thought it was a typo for .get()","commit_id":"4e0cb071b20162fcbe3ceffce81b8e02d7309367"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"b2a9b433c7bf4823c834606cc08d0d409d0ebad7","unresolved":false,"context_lines":[{"line_number":218,"context_line":"                # Fail if --required but not high enough microversion."},{"line_number":219,"context_line":"                self.check_version(version.ge(\u00271.17\u0027))"},{"line_number":220,"context_line":"                if any(\u0027,\u0027 in required for required in group[\u0027required\u0027]):"},{"line_number":221,"context_line":"                    self.check_version(version.ge(\u00271.39\u0027))"},{"line_number":222,"context_line":"                required_traits \u003d group[\u0027required\u0027]"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"            forbidden_traits \u003d []"}],"source_content_type":"text/x-python","patch_set":2,"id":"3744198b_41836964","line":221,"range":{"start_line":221,"start_character":47,"end_line":221,"end_character":49},"in_reply_to":"5963d634_75b794fa","updated":"2022-05-31 12:48:28.000000000","message":"Ack","commit_id":"4e0cb071b20162fcbe3ceffce81b8e02d7309367"}],"osc_placement/resources/common.py":[{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"7b86760c573f3b0765dd59f2e0f207ac85e8c586","unresolved":true,"context_lines":[{"line_number":48,"context_line":"    and_traits \u003d []"},{"line_number":49,"context_line":"    for required in required_traits:"},{"line_number":50,"context_line":"        if \u0027,\u0027 in required:"},{"line_number":51,"context_line":"            required_query_params.append(\u0027in:\u0027 + required)"},{"line_number":52,"context_line":"        else:"},{"line_number":53,"context_line":"            and_traits.append(required)"},{"line_number":54,"context_line":"    # We need an extra required query param for the and_traits and the"}],"source_content_type":"text/x-python","patch_set":2,"id":"234639bd_14736735","line":51,"updated":"2022-03-01 10:50:55.000000000","message":"++","commit_id":"4e0cb071b20162fcbe3ceffce81b8e02d7309367"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"b2a9b433c7bf4823c834606cc08d0d409d0ebad7","unresolved":false,"context_lines":[{"line_number":48,"context_line":"    and_traits \u003d []"},{"line_number":49,"context_line":"    for required in required_traits:"},{"line_number":50,"context_line":"        if \u0027,\u0027 in required:"},{"line_number":51,"context_line":"            required_query_params.append(\u0027in:\u0027 + required)"},{"line_number":52,"context_line":"        else:"},{"line_number":53,"context_line":"            and_traits.append(required)"},{"line_number":54,"context_line":"    # We need an extra required query param for the and_traits and the"}],"source_content_type":"text/x-python","patch_set":2,"id":"405e4ff4_335ef785","line":51,"in_reply_to":"234639bd_14736735","updated":"2022-05-31 12:48:28.000000000","message":"Ack","commit_id":"4e0cb071b20162fcbe3ceffce81b8e02d7309367"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"33599c37ad7551f23f87a5cabb49e9816af4fd9c","unresolved":true,"context_lines":[{"line_number":56,"context_line":"    and_query \u003d \u0027,\u0027.join(and_traits + forbidden_traits)"},{"line_number":57,"context_line":"    if and_query:"},{"line_number":58,"context_line":"        required_query_params.append(and_query)"},{"line_number":59,"context_line":"    return required_query_params"}],"source_content_type":"text/x-python","patch_set":7,"id":"29e1d184_30e69c74","line":59,"updated":"2022-06-02 15:32:30.000000000","message":"++","commit_id":"9545623054fda8313cde1253d9af3fffcdaa3949"}],"osc_placement/resources/resource_provider.py":[{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"33599c37ad7551f23f87a5cabb49e9816af4fd9c","unresolved":true,"context_lines":[{"line_number":117,"context_line":"                 \u0027This option requires at least \u0027"},{"line_number":118,"context_line":"                 \u0027``--os-placement-api-version 1.18``. \u0027"},{"line_number":119,"context_line":"                 \u0027Since ``--os-placement-api-version 1.39`` the value of \u0027"},{"line_number":120,"context_line":"                 \u0027this parameter can be a comma separated list of trait names \u0027"},{"line_number":121,"context_line":"                 \u0027to express OR relationship between those traits.\u0027"},{"line_number":122,"context_line":"        )"},{"line_number":123,"context_line":"        parser.add_argument("}],"source_content_type":"text/x-python","patch_set":7,"id":"b9840539_e2978970","line":120,"range":{"start_line":120,"start_character":42,"end_line":120,"end_character":57},"updated":"2022-06-02 15:32:30.000000000","message":"nit: comma-separated (I think)","commit_id":"9545623054fda8313cde1253d9af3fffcdaa3949"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"904eb0904233cbbee7081e443db161da394bae06","unresolved":true,"context_lines":[{"line_number":117,"context_line":"                 \u0027This option requires at least \u0027"},{"line_number":118,"context_line":"                 \u0027``--os-placement-api-version 1.18``. \u0027"},{"line_number":119,"context_line":"                 \u0027Since ``--os-placement-api-version 1.39`` the value of \u0027"},{"line_number":120,"context_line":"                 \u0027this parameter can be a comma separated list of trait names \u0027"},{"line_number":121,"context_line":"                 \u0027to express OR relationship between those traits.\u0027"},{"line_number":122,"context_line":"        )"},{"line_number":123,"context_line":"        parser.add_argument("}],"source_content_type":"text/x-python","patch_set":7,"id":"f2018e05_ffa294da","line":120,"range":{"start_line":120,"start_character":42,"end_line":120,"end_character":57},"in_reply_to":"b9840539_e2978970","updated":"2022-06-30 14:27:16.000000000","message":"both i think are fine","commit_id":"9545623054fda8313cde1253d9af3fffcdaa3949"}],"osc_placement/tests/functional/test_allocation_candidate.py":[{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"7b86760c573f3b0765dd59f2e0f207ac85e8c586","unresolved":true,"context_lines":[{"line_number":434,"context_line":"        }"},{"line_number":435,"context_line":"        self.assertCommandFailed("},{"line_number":436,"context_line":"            \u0027Operation or argument is not supported with version 1.29\u0027,"},{"line_number":437,"context_line":"            self.allocation_candidate_granular, groups\u003dgroups"},{"line_number":438,"context_line":"        )"},{"line_number":439,"context_line":""},{"line_number":440,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"f4fb075b_b3e77cba","line":437,"updated":"2022-03-01 10:50:55.000000000","message":"++","commit_id":"4e0cb071b20162fcbe3ceffce81b8e02d7309367"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"b2a9b433c7bf4823c834606cc08d0d409d0ebad7","unresolved":false,"context_lines":[{"line_number":434,"context_line":"        }"},{"line_number":435,"context_line":"        self.assertCommandFailed("},{"line_number":436,"context_line":"            \u0027Operation or argument is not supported with version 1.29\u0027,"},{"line_number":437,"context_line":"            self.allocation_candidate_granular, groups\u003dgroups"},{"line_number":438,"context_line":"        )"},{"line_number":439,"context_line":""},{"line_number":440,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"d6ff7acb_d50e39aa","line":437,"in_reply_to":"f4fb075b_b3e77cba","updated":"2022-05-31 12:48:28.000000000","message":"Ack","commit_id":"4e0cb071b20162fcbe3ceffce81b8e02d7309367"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"33599c37ad7551f23f87a5cabb49e9816af4fd9c","unresolved":true,"context_lines":[{"line_number":310,"context_line":""},{"line_number":311,"context_line":""},{"line_number":312,"context_line":"class TestAllocationCandidate129(base.BaseTestCase):"},{"line_number":313,"context_line":"    VERSION \u003d \u00271.29\u0027"},{"line_number":314,"context_line":""},{"line_number":315,"context_line":"    def setUp(self):"},{"line_number":316,"context_line":"        super(TestAllocationCandidate129, self).setUp()"}],"source_content_type":"text/x-python","patch_set":7,"id":"a98c3e2f_d2021d7f","line":313,"updated":"2022-06-02 15:32:30.000000000","message":"see, this is why we get an exception below with this version.","commit_id":"9545623054fda8313cde1253d9af3fffcdaa3949"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"33599c37ad7551f23f87a5cabb49e9816af4fd9c","unresolved":true,"context_lines":[{"line_number":433,"context_line":"            }"},{"line_number":434,"context_line":"        }"},{"line_number":435,"context_line":"        self.assertCommandFailed("},{"line_number":436,"context_line":"            \u0027Operation or argument is not supported with version 1.29\u0027,"},{"line_number":437,"context_line":"            self.allocation_candidate_granular, groups\u003dgroups"},{"line_number":438,"context_line":"        )"},{"line_number":439,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"81a9a369_8c0ae7e7","line":436,"range":{"start_line":436,"start_character":65,"end_line":436,"end_character":69},"updated":"2022-06-02 15:32:30.000000000","message":"took me a second to understand, but this isn\u0027t a typo, this is just because we use 1.29 in this testclass :)","commit_id":"9545623054fda8313cde1253d9af3fffcdaa3949"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"33599c37ad7551f23f87a5cabb49e9816af4fd9c","unresolved":true,"context_lines":[{"line_number":557,"context_line":"        self.assertEqual(2, len(rows))"},{"line_number":558,"context_line":""},{"line_number":559,"context_line":"        rps \u003d {row[\u0027resource provider\u0027] for row in rows}"},{"line_number":560,"context_line":"        self.assertEqual({self.rp2[\u0027uuid\u0027], self.rp2_1[\u0027uuid\u0027]}, rps)"}],"source_content_type":"text/x-python","patch_set":7,"id":"37ae3757_295f9e13","line":560,"updated":"2022-06-02 15:32:30.000000000","message":"thanks for those tests, they help the reviewers.","commit_id":"9545623054fda8313cde1253d9af3fffcdaa3949"}],"osc_placement/tests/functional/test_resource_provider.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"86eaef0836c60c73182ac2950d970a085767279a","unresolved":true,"context_lines":[{"line_number":358,"context_line":"        rps \u003d self.resource_provider_list("},{"line_number":359,"context_line":"            resources\u003d(\u0027MEMORY_MB\u003d1024\u0027, \u0027DISK_GB\u003d80\u0027),"},{"line_number":360,"context_line":"            required\u003d(\u0027HW_CPU_X86_VMX\u0027,),"},{"line_number":361,"context_line":"            forbidden\u003d(\u0027STORAGE_DISK_SSD\u0027,))"},{"line_number":362,"context_line":""},{"line_number":363,"context_line":"        uuids \u003d [rp[\u0027uuid\u0027] for rp in rps]"},{"line_number":364,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"f3731f5b_a1717b62","line":361,"updated":"2022-02-09 14:57:14.000000000","message":"This change is noted here as well https://review.opendev.org/c/openstack/placement/+/826491/7#message-af8324d5631836fe3ec8052192994f9a42e00492","commit_id":"a8b45352da6b088534e51b8782d79b2869c96aab"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"7b86760c573f3b0765dd59f2e0f207ac85e8c586","unresolved":false,"context_lines":[{"line_number":358,"context_line":"        rps \u003d self.resource_provider_list("},{"line_number":359,"context_line":"            resources\u003d(\u0027MEMORY_MB\u003d1024\u0027, \u0027DISK_GB\u003d80\u0027),"},{"line_number":360,"context_line":"            required\u003d(\u0027HW_CPU_X86_VMX\u0027,),"},{"line_number":361,"context_line":"            forbidden\u003d(\u0027STORAGE_DISK_SSD\u0027,))"},{"line_number":362,"context_line":""},{"line_number":363,"context_line":"        uuids \u003d [rp[\u0027uuid\u0027] for rp in rps]"},{"line_number":364,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"d8695164_f692257c","line":361,"in_reply_to":"f3731f5b_a1717b62","updated":"2022-03-01 10:50:55.000000000","message":"Ack","commit_id":"a8b45352da6b088534e51b8782d79b2869c96aab"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"33599c37ad7551f23f87a5cabb49e9816af4fd9c","unresolved":true,"context_lines":[{"line_number":369,"context_line":""},{"line_number":370,"context_line":"    def test_list_required_trait_any_trait_old_microversion(self):"},{"line_number":371,"context_line":"        self.assertCommandFailed("},{"line_number":372,"context_line":"            \u0027Operation or argument is not supported with version 1.22\u0027,"},{"line_number":373,"context_line":"            self.resource_provider_list,"},{"line_number":374,"context_line":"            resources\u003d(\u0027MEMORY_MB\u003d1024\u0027, \u0027DISK_GB\u003d80\u0027),"},{"line_number":375,"context_line":"            required\u003d("}],"source_content_type":"text/x-python","patch_set":7,"id":"8360384c_4badcbd0","line":372,"range":{"start_line":372,"start_character":65,"end_line":372,"end_character":69},"updated":"2022-06-02 15:32:30.000000000","message":"same here, I won\u0027t explain again :-)","commit_id":"9545623054fda8313cde1253d9af3fffcdaa3949"}],"osc_placement/version.py":[{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"33599c37ad7551f23f87a5cabb49e9816af4fd9c","unresolved":true,"context_lines":[{"line_number":50,"context_line":"    \u00271.29\u0027,"},{"line_number":51,"context_line":"    \u00271.37\u0027,  # unused"},{"line_number":52,"context_line":"    \u00271.38\u0027,  # Added for consumer types (Xena)"},{"line_number":53,"context_line":"    \u00271.39\u0027,  # Added any-traits support (Yoga)"},{"line_number":54,"context_line":"]"},{"line_number":55,"context_line":"SUPPORTED_VERSIONS \u003d SUPPORTED_MICROVERSIONS + NEGOTIATE_VERSIONS"},{"line_number":56,"context_line":"# The max microversion lower than which are all supported by this client."}],"source_content_type":"text/x-python","patch_set":7,"id":"c2cc927b_962b85a0","line":53,"updated":"2022-06-02 15:32:30.000000000","message":"huzzah","commit_id":"9545623054fda8313cde1253d9af3fffcdaa3949"}],"releasenotes/notes/microversion-1.39-any-traits-da32e4ef7c9ac6b7.yaml":[{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"7b86760c573f3b0765dd59f2e0f207ac85e8c586","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":"    Both the ``openstack resource provider list`` and "},{"line_number":5,"context_line":"    ``openstack allocation candidate list`` command now supports "},{"line_number":6,"context_line":"    ``--os-placement-api-version 1.39`` where the ``--required`` argument now "},{"line_number":7,"context_line":"    can contain a comma separated list of trait names to express OR "}],"source_content_type":"text/x-yaml","patch_set":2,"id":"df35a743_2fc9fbd6","line":4,"range":{"start_line":4,"start_character":53,"end_line":4,"end_character":54},"updated":"2022-03-01 10:50:55.000000000","message":"trailing space","commit_id":"4e0cb071b20162fcbe3ceffce81b8e02d7309367"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"b2a9b433c7bf4823c834606cc08d0d409d0ebad7","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":"    Both the ``openstack resource provider list`` and "},{"line_number":5,"context_line":"    ``openstack allocation candidate list`` command now supports "},{"line_number":6,"context_line":"    ``--os-placement-api-version 1.39`` where the ``--required`` argument now "},{"line_number":7,"context_line":"    can contain a comma separated list of trait names to express OR "}],"source_content_type":"text/x-yaml","patch_set":2,"id":"92e63d01_41ec336e","line":4,"range":{"start_line":4,"start_character":53,"end_line":4,"end_character":54},"in_reply_to":"df35a743_2fc9fbd6","updated":"2022-05-31 12:48:28.000000000","message":"Done","commit_id":"4e0cb071b20162fcbe3ceffce81b8e02d7309367"}]}
