)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"c1d175e051d93ace3f3ecb360b64bd4938791359","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"b1d02f08_c5c37560","updated":"2025-02-06 06:43:51.000000000","message":"Sean, I didn\u0027t manage to get to the code reuse from hardware.py today. I\u0027ll chase that tomorrow.","commit_id":"38764447bd4aefb0a429ea9fa8197cb16785a566"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"1ddc9d66c3fb208a8dafca430fb605a6037ac8cc","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"bc18eb04_48cc709d","updated":"2025-05-22 22:10:18.000000000","message":"recheck unrelated neutron unit test failure","commit_id":"60623acc0afdfb0d569e038de8c683175d18d83d"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"ee9375c3a729d253b6ba33457b6b1cc4d5dff125","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"7de104b3_3bc836f8","updated":"2025-06-12 10:08:42.000000000","message":"recheck timeout","commit_id":"7dc31764653ec33502219a3b397c89d2483ae7fc"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"791202d30a144557a18e7406a86f086d90e0efea","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"d4e3b4b7_18d83286","updated":"2025-06-24 01:25:33.000000000","message":"recheck ceph","commit_id":"7cb776d5c47bc3f5ae6c68a6404683f35bbe9a79"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"b42d864993bb710d6e43cd0da1ab8d91165c88a9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"e105d55e_d58cb4a7","updated":"2025-06-29 08:47:30.000000000","message":"recheck nova-ovs-hybrid-plug","commit_id":"b619b7b5b2e61ad2e047784734f9b7a5c003a097"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"e8c1bc66d83f64bf936f0aebd2e61b871fad66fc","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"ce4bb97e_0b84e226","updated":"2025-07-03 01:33:18.000000000","message":"recheck ceph CI flakey","commit_id":"698f053fee83a34c291e6d2c5306fa359ed2f4bf"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"761638dd8ffb884d1999cfe64b1f9fb5b2de3674","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"a45968f7_5e8e990b","updated":"2025-07-03 04:40:39.000000000","message":"recheck grenade","commit_id":"698f053fee83a34c291e6d2c5306fa359ed2f4bf"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"15bbfb87123e545a1dbbb91cfa65313ba41a144b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"56039929_c15ee661","updated":"2025-07-02 19:33:01.000000000","message":"recheck release notes timeout","commit_id":"698f053fee83a34c291e6d2c5306fa359ed2f4bf"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"55b9a445bacc650a3346998ab4ef32a54de9546a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":18,"id":"549bb812_6280c04c","updated":"2025-07-23 15:08:27.000000000","message":"One nit on the release notes but otherwise I am happy with this. Please do address that nit in a follow-up if you have a change.","commit_id":"dab248718d03c7020b554440087bbdf0f024eba1"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"02ec928217151a9aab91733526dc634567229649","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":18,"id":"a485cc74_d7ea52df","updated":"2025-07-07 09:19:53.000000000","message":"recheck grenade","commit_id":"dab248718d03c7020b554440087bbdf0f024eba1"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"266f4febb665aa9db79d5258bf4ddd15fdd56f86","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":18,"id":"e0f9686d_677aa6f7","updated":"2025-07-23 19:13:02.000000000","message":"recheck grenade","commit_id":"dab248718d03c7020b554440087bbdf0f024eba1"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"b5be00175ae01866feedbd515b39f0e7ebbfd884","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":18,"id":"ff018d70_fc576561","updated":"2025-07-24 05:15:48.000000000","message":"recheck grenade","commit_id":"dab248718d03c7020b554440087bbdf0f024eba1"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"d059fa403252b8794be3f68071549f5c25ef41d0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":18,"id":"38701d81_9aa9ed76","updated":"2025-07-07 23:05:05.000000000","message":"recheck grenade timeout","commit_id":"dab248718d03c7020b554440087bbdf0f024eba1"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"a4630b1fbadd1e74b26f604c067f32942fca06a8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":18,"id":"e178dc8a_0fb555a8","updated":"2025-07-07 19:28:51.000000000","message":"recheck live migration","commit_id":"dab248718d03c7020b554440087bbdf0f024eba1"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"312d0ecc019f54e04c35b81b3bd93a97834d8c77","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":18,"id":"0e19dfc8_5ea1b342","updated":"2025-07-23 23:11:15.000000000","message":"recheck multi-cell","commit_id":"dab248718d03c7020b554440087bbdf0f024eba1"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"125d0e94e3e937fd8130a66416ff7e3753611ad7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":18,"id":"b8a36356_97673d72","updated":"2025-07-24 09:48:26.000000000","message":"recheck nova-multi-cell","commit_id":"dab248718d03c7020b554440087bbdf0f024eba1"}],"nova/compute/api.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"ba0b4ed8b5c572fe06ecf12ae2adf2b906f25a27","unresolved":false,"context_lines":[{"line_number":865,"context_line":"    # TODO(huaqiang): Remove in Wallaby when there is no nova-compute node"},{"line_number":866,"context_line":"    # having a version prior to Victoria."},{"line_number":867,"context_line":"    @staticmethod"},{"line_number":868,"context_line":"    def _check_compute_service_for_mixed_instance(numa_topology, min_comp_ver):"},{"line_number":869,"context_line":"        \"\"\"Check if the nova-compute service is ready to support mixed instance"},{"line_number":870,"context_line":"        when the CPU allocation policy is \u0027mixed\u0027."},{"line_number":871,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"ee04ef8e_baf5c2c8","line":868,"updated":"2025-02-05 19:04:57.000000000","message":"ok this refactroring is not strictly requried but it does avoid lookign this up multipel times so thats a valid enhancement.","commit_id":"a6685b7fb92ddc6815b6428b91f7c1dbe234e9c8"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"ba0b4ed8b5c572fe06ecf12ae2adf2b906f25a27","unresolved":false,"context_lines":[{"line_number":1039,"context_line":"        image \u003d self.image_api.get(context, image_href)"},{"line_number":1040,"context_line":"        return image[\u0027id\u0027], image"},{"line_number":1041,"context_line":""},{"line_number":1042,"context_line":"    def _checks_for_create_and_rebuild("},{"line_number":1043,"context_line":"        self, context, image_id, image, flavor, metadata, files_to_inject,"},{"line_number":1044,"context_line":"        root_bdm, min_comp_ver, validate_numa\u003dTrue,"},{"line_number":1045,"context_line":"    ):"}],"source_content_type":"text/x-python","patch_set":1,"id":"67ee64a2_f1609794","line":1042,"range":{"start_line":1042,"start_character":8,"end_line":1042,"end_character":38},"updated":"2025-02-05 19:04:57.000000000","message":"this an internal funciton in teh comptue api so it wont chagne the rpcs so adding the min_compute_ver is a local change so again that ok","commit_id":"a6685b7fb92ddc6815b6428b91f7c1dbe234e9c8"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"ba0b4ed8b5c572fe06ecf12ae2adf2b906f25a27","unresolved":true,"context_lines":[{"line_number":1061,"context_line":"            (image_sound_model or flavor_sound_model) and"},{"line_number":1062,"context_line":"            (min_comp_ver \u003c MIN_COMPUTE_SOUND_MODEL_TRAITS)"},{"line_number":1063,"context_line":"        ):"},{"line_number":1064,"context_line":"            raise exception.SoundModelRequestOldCompute()"},{"line_number":1065,"context_line":""},{"line_number":1066,"context_line":"    def _check_support_vnic_accelerator("},{"line_number":1067,"context_line":"            self, context, requested_networks, min_comp_ver):"}],"source_content_type":"text/x-python","patch_set":1,"id":"290d62e6_0201bb72","line":1064,"updated":"2025-02-05 19:04:57.000000000","message":"In the previous patch you added a function to get the sound model in hardware.py\n\nhttps://review.opendev.org/c/openstack/nova/+/926126/27/nova/virt/hardware.py#2917\n\nI would reuse that instead of looking it up directly again.\n\nthis change should also be squased int the prvious patch by the way but the logic of the change looks correct to me.","commit_id":"a6685b7fb92ddc6815b6428b91f7c1dbe234e9c8"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"59b7cc6e8adc54308cd6c4f555812c725f22be79","unresolved":true,"context_lines":[{"line_number":1061,"context_line":"            (image_sound_model or flavor_sound_model) and"},{"line_number":1062,"context_line":"            (min_comp_ver \u003c MIN_COMPUTE_SOUND_MODEL_TRAITS)"},{"line_number":1063,"context_line":"        ):"},{"line_number":1064,"context_line":"            raise exception.SoundModelRequestOldCompute()"},{"line_number":1065,"context_line":""},{"line_number":1066,"context_line":"    def _check_support_vnic_accelerator("},{"line_number":1067,"context_line":"            self, context, requested_networks, min_comp_ver):"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a9fbb6e_4647ed95","line":1064,"in_reply_to":"290d62e6_0201bb72","updated":"2025-02-14 20:52:20.000000000","message":"I\u0027m now using hardware.py. I\u0027ll squash once we\u0027ve agreed this part is correct.","commit_id":"a6685b7fb92ddc6815b6428b91f7c1dbe234e9c8"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"ffcbfd9916b9852573169d9fd34e9ae0965957ac","unresolved":false,"context_lines":[{"line_number":1061,"context_line":"            (image_sound_model or flavor_sound_model) and"},{"line_number":1062,"context_line":"            (min_comp_ver \u003c MIN_COMPUTE_SOUND_MODEL_TRAITS)"},{"line_number":1063,"context_line":"        ):"},{"line_number":1064,"context_line":"            raise exception.SoundModelRequestOldCompute()"},{"line_number":1065,"context_line":""},{"line_number":1066,"context_line":"    def _check_support_vnic_accelerator("},{"line_number":1067,"context_line":"            self, context, requested_networks, min_comp_ver):"}],"source_content_type":"text/x-python","patch_set":1,"id":"ec34bda1_90870c8f","line":1064,"in_reply_to":"5a9fbb6e_4647ed95","updated":"2025-06-24 13:07:46.000000000","message":"the pathces have been rearraged already so marking this done","commit_id":"a6685b7fb92ddc6815b6428b91f7c1dbe234e9c8"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"ba0b4ed8b5c572fe06ecf12ae2adf2b906f25a27","unresolved":false,"context_lines":[{"line_number":1175,"context_line":"        ):"},{"line_number":1176,"context_line":"            # we only support the extended resource request if the computes are"},{"line_number":1177,"context_line":"            # upgraded to Xena."},{"line_number":1178,"context_line":"            if min_comp_ver \u003c MIN_COMPUTE_BOOT_WITH_EXTENDED_RESOURCE_REQUEST:"},{"line_number":1179,"context_line":"                raise exception.ExtendedResourceRequestOldCompute()"},{"line_number":1180,"context_line":""},{"line_number":1181,"context_line":"        base_options \u003d {"}],"source_content_type":"text/x-python","patch_set":1,"id":"8664b662_d809064f","line":1178,"updated":"2025-02-05 19:04:57.000000000","message":"ack so this is just propagating the parmater and avoiding the muliple looks +1","commit_id":"a6685b7fb92ddc6815b6428b91f7c1dbe234e9c8"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"ba0b4ed8b5c572fe06ecf12ae2adf2b906f25a27","unresolved":false,"context_lines":[{"line_number":1715,"context_line":"        # Only lookup the minimum compute version once"},{"line_number":1716,"context_line":"        min_comp_ver \u003d objects.service.get_minimum_version_all_cells("},{"line_number":1717,"context_line":"            context, [\"nova-compute\"])"},{"line_number":1718,"context_line":""},{"line_number":1719,"context_line":"        self._check_auto_disk_config(image\u003dboot_meta,"},{"line_number":1720,"context_line":"                                     auto_disk_config\u003dauto_disk_config)"},{"line_number":1721,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"c6380a42_a78a76fd","line":1718,"updated":"2025-02-05 19:04:57.000000000","message":"ack so same optimistaiton for create as rebuild.","commit_id":"a6685b7fb92ddc6815b6428b91f7c1dbe234e9c8"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"ba0b4ed8b5c572fe06ecf12ae2adf2b906f25a27","unresolved":false,"context_lines":[{"line_number":4225,"context_line":"        # Only lookup the minimum compute version once"},{"line_number":4226,"context_line":"        min_comp_ver \u003d objects.service.get_minimum_version_all_cells("},{"line_number":4227,"context_line":"            context, [\"nova-compute\"])"},{"line_number":4228,"context_line":""},{"line_number":4229,"context_line":"        allow_cross_cell_resize \u003d self._allow_cross_cell_resize("},{"line_number":4230,"context_line":"            context, instance, min_comp_ver)"},{"line_number":4231,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"f92f137f_1350f199","line":4228,"updated":"2025-02-05 19:04:57.000000000","message":"and resize\n\nthis all looks correct to me.","commit_id":"a6685b7fb92ddc6815b6428b91f7c1dbe234e9c8"}],"nova/exception.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"ba0b4ed8b5c572fe06ecf12ae2adf2b906f25a27","unresolved":true,"context_lines":[{"line_number":611,"context_line":"    msg_fmt \u003d _(\"The supplied hypervisor type of is invalid.\")"},{"line_number":612,"context_line":""},{"line_number":613,"context_line":""},{"line_number":614,"context_line":"class HypervisorTooOld(Invalid):"},{"line_number":615,"context_line":"    msg_fmt \u003d _(\"This compute node\u0027s hypervisor is older than the minimum \""},{"line_number":616,"context_line":"                \"supported version: %(version)s.\")"},{"line_number":617,"context_line":""},{"line_number":618,"context_line":""},{"line_number":619,"context_line":"class DestinationHypervisorTooOld(Invalid):"},{"line_number":620,"context_line":"    msg_fmt \u003d _(\"The instance requires a newer hypervisor version than \""},{"line_number":621,"context_line":"                \"has been provided.\")"},{"line_number":622,"context_line":""},{"line_number":623,"context_line":""},{"line_number":624,"context_line":"class ServiceTooOld(Invalid):"},{"line_number":625,"context_line":"    msg_fmt \u003d _(\"This service is older (v%(thisver)i) than the minimum \""},{"line_number":626,"context_line":"                \"(v%(minver)i) version of the rest of the deployment. \""},{"line_number":627,"context_line":"                \"Unable to continue.\")"},{"line_number":628,"context_line":""},{"line_number":629,"context_line":""},{"line_number":630,"context_line":"class TooOldComputeService(Invalid):"},{"line_number":631,"context_line":"    msg_fmt \u003d _(\"Current Nova version does not support computes older than \""},{"line_number":632,"context_line":"                \"%(oldest_supported_version)s but the minimum compute service \""},{"line_number":633,"context_line":"                \"level in your %(scope)s is %(min_service_level)d and the \""},{"line_number":634,"context_line":"                \"oldest supported service level is \""},{"line_number":635,"context_line":"                \"%(oldest_supported_service)d.\")"},{"line_number":636,"context_line":""},{"line_number":637,"context_line":""},{"line_number":638,"context_line":"class DestinationDiskExists(Invalid):"}],"source_content_type":"text/x-python","patch_set":1,"id":"8a71a3d9_d0021c39","line":635,"range":{"start_line":614,"start_character":0,"end_line":635,"end_character":48},"updated":"2025-02-05 19:04:57.000000000","message":"ack, the new excpetion also intherits form Invalid so its consitent with these smilier exceptions.","commit_id":"a6685b7fb92ddc6815b6428b91f7c1dbe234e9c8"}],"nova/scheduler/request_filter.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"ffcbfd9916b9852573169d9fd34e9ae0965957ac","unresolved":false,"context_lines":[{"line_number":462,"context_line":""},{"line_number":463,"context_line":"    request_spec.root_required.add(os_traits.COMPUTE_SOUND_MODEL_VIRTIO)"},{"line_number":464,"context_line":"    LOG.debug(\u0027virtio_sound_filter added trait COMPUTE_SOUND_MODEL_VIRTIO\u0027)"},{"line_number":465,"context_line":"    return True"},{"line_number":466,"context_line":""},{"line_number":467,"context_line":""},{"line_number":468,"context_line":"ALL_REQUEST_FILTERS \u003d ["}],"source_content_type":"text/x-python","patch_set":13,"id":"706ccbc3_8da49d88","line":465,"updated":"2025-06-24 13:07:46.000000000","message":"+1","commit_id":"7cb776d5c47bc3f5ae6c68a6404683f35bbe9a79"}],"nova/virt/libvirt/driver.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"ffcbfd9916b9852573169d9fd34e9ae0965957ac","unresolved":false,"context_lines":[{"line_number":6897,"context_line":"        # Enable sound support if required in the flavor or image."},{"line_number":6898,"context_line":"        sound_model \u003d hardware.get_sound_model(flavor, image_meta)"},{"line_number":6899,"context_line":"        if not sound_model:"},{"line_number":6900,"context_line":"            return None"},{"line_number":6901,"context_line":""},{"line_number":6902,"context_line":"        sound_device \u003d vconfig.LibvirtConfigGuestSound(sound_model)"},{"line_number":6903,"context_line":"        guest.add_device(sound_device)"}],"source_content_type":"text/x-python","patch_set":13,"id":"0e5fc9dc_e76ae8c9","line":6900,"range":{"start_line":6900,"start_character":18,"end_line":6900,"end_character":23},"updated":"2025-06-24 13:07:46.000000000","message":"nit: its probaly more convetnional to have a bare return but i think this is perfectly fine too.","commit_id":"7cb776d5c47bc3f5ae6c68a6404683f35bbe9a79"}],"releasenotes/notes/sound-model-extra-specs-2bcbe644b889005c.yaml":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"55b9a445bacc650a3346998ab4ef32a54de9546a","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":"    The `hw:sound_model` flavor extra spec and the matching `hw_sound_model`"},{"line_number":5,"context_line":"    image property were added to allow the configuration of a sound device"},{"line_number":6,"context_line":"    within an instance. This is useful with the new spice-direct console"},{"line_number":7,"context_line":"    type. The default remains no sound device, but when using the libvirt"}],"source_content_type":"text/x-yaml","patch_set":18,"id":"8229d181_ab74c54f","line":4,"range":{"start_line":4,"start_character":8,"end_line":4,"end_character":76},"updated":"2025-07-23 15:08:27.000000000","message":"This should all be double literals to render as code (it\u0027s reStructuredText, not markdown)","commit_id":"dab248718d03c7020b554440087bbdf0f024eba1"}]}
