)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"5af397dc8e355cdd08c03dbeca3006a97e47ab9a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"05ea65ae_a1670993","updated":"2024-06-25 15:18:55.000000000","message":"recheck ssh: connect to host 23.253.56.19 port 22: Connection timed out\\r\\nrsync: connection unexpectedly closed indicates network glitch in test infra","commit_id":"1c9ea23adbd37b0f141dc3dfffd2d61e66d73d31"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"c6821e815b90589290b67ed442e48c5a83b2dd57","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"50c07509_b5d12819","updated":"2024-06-26 01:54:22.000000000","message":"recheck `No valid host was found.`, probably is a timing problem ?","commit_id":"66e6aa5701deaa3ac977bbbfaa7316be0382e893"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"e73cfd3fde5a15521cd110e68d2fc0f1799a4458","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"dbc786b5_a0099fdb","updated":"2024-07-01 05:52:02.000000000","message":"recheck this feature is not used in CI, so the failure is irrelevant.","commit_id":"66e6aa5701deaa3ac977bbbfaa7316be0382e893"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"c6bb53abf9aae773e047e26a070ec2914f48aff9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":19,"id":"bfa6a212_05dac3be","updated":"2024-09-03 03:31:51.000000000","message":"recheck timeout while checking ssh connectivity","commit_id":"6e24d5a01f3de2305dc9ff07404d78ac7b347705"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"76a21d16963014adb2a0363ad9469371b93e83fa","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":24,"id":"1fd5f79f_b4733605","updated":"2024-12-13 03:16:03.000000000","message":"recheck time out","commit_id":"29493c1baa920ea61d76af7eefc5ba9f9d1194d4"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"33fc19cb9e6efcf778a08a3ae98bbe7b6cbcbb1e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":25,"id":"b0a63b5e_1f454642","updated":"2025-02-27 02:21:38.000000000","message":"im too tired to review a reshape properly but as a quick glance the patch lloks ok over all.","commit_id":"4d93369579cbe12a143e29547aec46730c3f0afd"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"8a19155e66c404a91a2f534d11f9e470ed68a943","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":28,"id":"a85c5c8c_fd6a3dcd","updated":"2025-06-19 06:27:34.000000000","message":"recheck timeout","commit_id":"e4f0d201a779cffe30bff0916408aec2199c3e5d"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"f6a60ddd5ebd27689ad39c18234cb2830d71218e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":31,"id":"144cedbe_3a9f0e37","updated":"2025-08-13 15:51:37.000000000","message":"I have not finished reviewing this patch.\nBut I have found minor typos so making this comment, so you can fix them.","commit_id":"e36edf978bd578616788e2106f338d3d88ab11e5"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"d994fad2e50ea34004403de7994668eb74cef3eb","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":32,"id":"69071b3a_ca1291f3","updated":"2025-08-27 09:49:05.000000000","message":"\u0026","commit_id":"5b89f6c6eea8103af2965c51faf1272de4b4a5ed"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"f7aede7de4d48a1a0d6616b078c76012b32409c1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":32,"id":"cab0170f_41ea4ef2","updated":"2025-08-27 08:18:37.000000000","message":"just a nit","commit_id":"5b89f6c6eea8103af2965c51faf1272de4b4a5ed"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"b4983e36d2ac5e318c0933cecb27dbb2131faa98","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":32,"id":"7fcf78aa_bb91428d","updated":"2025-08-27 13:46:00.000000000","message":"soft -1 to signal just a little bug I found.\nTBH, it is a hard to review patch (for me).\nI think I have probably not grasp all of this patch. But it seems well tested with unit + fn tests, and I understood you tested it against real hardware. So for an overall perspective it looks good to me.","commit_id":"5b89f6c6eea8103af2965c51faf1272de4b4a5ed"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"ee5bee678d3b16fbc89e888052606b2bb838706f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":32,"id":"744a5057_644995eb","updated":"2025-08-26 20:15:04.000000000","message":"that patch is pretty well written while the workflow is pretty badly explained. Kudos to you.\n\nI maybe have one concern about the deletion of the nested RP once we unsupport AMD SEV, I feel we should document it correctly as it\u0027s errorprone.","commit_id":"5b89f6c6eea8103af2965c51faf1272de4b4a5ed"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"d572254a74fa52d52c8daa7627e161d99c5d3bce","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":32,"id":"d0f445ba_3d2370d3","in_reply_to":"7fcf78aa_bb91428d","updated":"2025-08-27 13:58:51.000000000","message":"Thanks. I fixed it and also another nit I found earlier, because that missing s seems like a real problem for operators...","commit_id":"5b89f6c6eea8103af2965c51faf1272de4b4a5ed"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"4a32f14bd0e6f59d8f17f6c1bf4f32e67a23d26a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":33,"id":"7547b687_d0f98938","updated":"2025-08-28 08:14:56.000000000","message":"I\u0027ll +W once we have two +2 for the whole series.","commit_id":"b7c7d45093c9f6f2e3eac5433f3d614ba1cb9a44"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"4edac15f7616d3216735f2cc0c9a4c64fe513bc3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":33,"id":"05459e95_a46f8eb1","updated":"2025-08-27 20:15:40.000000000","message":"recheck test_image_defined_boot_from_volume failed due to ssh connectivity\n\nit took 35 second to get get to the login prompt after it was created so i think this is again jsut a slwo node.\n\nwe may want to relax the connectiviy timeout to deal with this but we should proably try and figure out why its slow later.\n\nmy guess is \"its FF\" and everyone is tryign to merge things.","commit_id":"b7c7d45093c9f6f2e3eac5433f3d614ba1cb9a44"}],"nova/tests/functional/libvirt/test_report_cpu_traits.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"4edac15f7616d3216735f2cc0c9a4c64fe513bc3","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"class LibvirtReportTraitsTestBase("},{"line_number":32,"context_line":"        integrated_helpers.LibvirtProviderUsageBaseTestCase):"},{"line_number":33,"context_line":"    pass"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    def assertMemEncryptionSlotsEqual(self, slots):"},{"line_number":36,"context_line":"        inventory \u003d self._get_provider_inventory(self.host_uuid)"}],"source_content_type":"text/x-python","patch_set":32,"id":"a3fe1e84_bf824f7e","side":"PARENT","line":33,"updated":"2025-08-27 20:15:40.000000000","message":"hum... i dont know why we did not see that before but ok.., thanks for fixing that.","commit_id":"11ed3b32f12a99f477cd2fd4ae08461e36937588"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"ee5bee678d3b16fbc89e888052606b2bb838706f","unresolved":false,"context_lines":[{"line_number":45,"context_line":"                    \u0027allocation_ratio\u0027: 1.0,"},{"line_number":46,"context_line":"                    \u0027reserved\u0027: 0,"},{"line_number":47,"context_line":"                },"},{"line_number":48,"context_line":"                inventory[orc.MEM_ENCRYPTION_CONTEXT]"},{"line_number":49,"context_line":"            )"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    def _get_amd_sev_rps(self):"}],"source_content_type":"text/x-python","patch_set":32,"id":"2b8e425c_ea377cc3","line":48,"updated":"2025-08-26 20:15:04.000000000","message":"unnecessary modification, but that makes it clearer.","commit_id":"5b89f6c6eea8103af2965c51faf1272de4b4a5ed"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"4a32f14bd0e6f59d8f17f6c1bf4f32e67a23d26a","unresolved":false,"context_lines":[{"line_number":45,"context_line":"                    \u0027allocation_ratio\u0027: 1.0,"},{"line_number":46,"context_line":"                    \u0027reserved\u0027: 0,"},{"line_number":47,"context_line":"                },"},{"line_number":48,"context_line":"                inventory[orc.MEM_ENCRYPTION_CONTEXT]"},{"line_number":49,"context_line":"            )"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    def _get_amd_sev_rps(self):"}],"source_content_type":"text/x-python","patch_set":32,"id":"37967060_be57f942","line":48,"in_reply_to":"07b60154_c7882446","updated":"2025-08-28 08:14:56.000000000","message":"yup, the pattern shall be assert_something(expected, actual) but we don\u0027t fully enforce it.\nMy concern is about the size of the change and how difficult it can be to review it, so when adding more unnneeded modifications, it\u0027s more difficult 😊","commit_id":"5b89f6c6eea8103af2965c51faf1272de4b4a5ed"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"4edac15f7616d3216735f2cc0c9a4c64fe513bc3","unresolved":false,"context_lines":[{"line_number":45,"context_line":"                    \u0027allocation_ratio\u0027: 1.0,"},{"line_number":46,"context_line":"                    \u0027reserved\u0027: 0,"},{"line_number":47,"context_line":"                },"},{"line_number":48,"context_line":"                inventory[orc.MEM_ENCRYPTION_CONTEXT]"},{"line_number":49,"context_line":"            )"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    def _get_amd_sev_rps(self):"}],"source_content_type":"text/x-python","patch_set":32,"id":"07b60154_c7882446","line":48,"in_reply_to":"2b8e425c_ea377cc3","updated":"2025-08-27 20:15:40.000000000","message":"for equal your correc tthat  the order does not matter accouding to the doc.\n\nhttps://docs.python.org/3/library/unittest.html#unittest.TestCase.assertEqual\n\nbut if recall correctly when this fails the first valud is treated as the expcected value and the secodn as the \"actual\" value in the error message so yes this is cleaner in that regard.","commit_id":"5b89f6c6eea8103af2965c51faf1272de4b4a5ed"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"ee5bee678d3b16fbc89e888052606b2bb838706f","unresolved":false,"context_lines":[{"line_number":151,"context_line":"        self.assertMemEncryptionSlotsEqual(self.host_uuid, 0)"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"        sev_rps \u003d self._get_amd_sev_rps()"},{"line_number":154,"context_line":"        self.assertEqual(0, len(sev_rps))"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"        # Now simulate the host gaining SEV functionality.  Here we"},{"line_number":157,"context_line":"        # simulate a kernel update or reconfiguration which causes the"}],"source_content_type":"text/x-python","patch_set":32,"id":"e92314fc_a4f2d233","line":154,"updated":"2025-08-26 20:15:04.000000000","message":"correct, the reshape happened so now we have nested RPs.","commit_id":"5b89f6c6eea8103af2965c51faf1272de4b4a5ed"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"ee5bee678d3b16fbc89e888052606b2bb838706f","unresolved":false,"context_lines":[{"line_number":191,"context_line":"            # sev capabilities are managed by sub rp and are not present in"},{"line_number":192,"context_line":"            # root rp"},{"line_number":193,"context_line":"            traits \u003d self._get_provider_traits(self.host_uuid)"},{"line_number":194,"context_line":"            self.assertNotIn(sev_trait, traits)"},{"line_number":195,"context_line":"            self.assertMemEncryptionSlotsEqual(self.host_uuid, 0)"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"            sev_rps \u003d self._get_amd_sev_rps()"}],"source_content_type":"text/x-python","patch_set":32,"id":"e4836161_e43f983a","line":194,"updated":"2025-08-26 20:15:04.000000000","message":"now the SEV traits also moved to the nested RP","commit_id":"5b89f6c6eea8103af2965c51faf1272de4b4a5ed"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"ee5bee678d3b16fbc89e888052606b2bb838706f","unresolved":false,"context_lines":[{"line_number":199,"context_line":"            sev_rp_uuid \u003d sev_rps[0][\u0027uuid\u0027]"},{"line_number":200,"context_line":"            sev_rp_traits \u003d self._get_provider_traits(sev_rp_uuid)"},{"line_number":201,"context_line":"            self.assertIn(sev_trait, sev_rp_traits)"},{"line_number":202,"context_line":"            self.assertMemEncryptionSlotsEqual(sev_rp_uuid, db_const.MAX_INT)"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"class LibvirtReportSevTraitsTests(LibvirtReportTraitsTestBase):"}],"source_content_type":"text/x-python","patch_set":32,"id":"b3b3b75c_b3f00d20","line":202,"updated":"2025-08-26 20:15:04.000000000","message":"and here, you\u0027re testing that the nested RP has the correct inventory, all good.","commit_id":"5b89f6c6eea8103af2965c51faf1272de4b4a5ed"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"ee5bee678d3b16fbc89e888052606b2bb838706f","unresolved":false,"context_lines":[{"line_number":246,"context_line":"        sev_rp_uuid \u003d sev_rps[0][\u0027uuid\u0027]"},{"line_number":247,"context_line":"        sev_rp_traits \u003d self._get_provider_traits(sev_rp_uuid)"},{"line_number":248,"context_line":"        self.assertIn(sev_trait, sev_rp_traits)"},{"line_number":249,"context_line":"        self.assertMemEncryptionSlotsEqual(sev_rp_uuid, 16)"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"        # Now simulate the host losing SEV functionality.  Here we"},{"line_number":252,"context_line":"        # simulate a kernel downgrade or reconfiguration which causes"}],"source_content_type":"text/x-python","patch_set":32,"id":"2e9e6d10_0d52e9c2","line":249,"updated":"2025-08-26 20:15:04.000000000","message":"++, excellent work","commit_id":"5b89f6c6eea8103af2965c51faf1272de4b4a5ed"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"ee5bee678d3b16fbc89e888052606b2bb838706f","unresolved":true,"context_lines":[{"line_number":279,"context_line":"            # support is turned off. This follows the existing behavior for"},{"line_number":280,"context_line":"            # other resources such as vGPU."},{"line_number":281,"context_line":"            # sev_rps \u003d self._get_amd_sev_rps()"},{"line_number":282,"context_line":"            # self.assertEqual(0, len(sev_rps))"}],"source_content_type":"text/x-python","patch_set":32,"id":"4c3e1376_de296057","line":282,"updated":"2025-08-26 20:15:04.000000000","message":"indeed, that\u0027s a good finding : nova doesn\u0027t automatically delete unused children resource providers, leading to a capacity misunderstanding.\n\nI\u0027m not asking you to fix that bug for now, but I\u0027d appreciate if you could amend your docs to mention to use the openstack CLI in order to remove old compute nodes if they want to remove SEV support.","commit_id":"5b89f6c6eea8103af2965c51faf1272de4b4a5ed"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"a89f84450ed761ecdfab8320ea844fa53292a350","unresolved":false,"context_lines":[{"line_number":279,"context_line":"            # support is turned off. This follows the existing behavior for"},{"line_number":280,"context_line":"            # other resources such as vGPU."},{"line_number":281,"context_line":"            # sev_rps \u003d self._get_amd_sev_rps()"},{"line_number":282,"context_line":"            # self.assertEqual(0, len(sev_rps))"}],"source_content_type":"text/x-python","patch_set":32,"id":"cd0bbef4_ffa5c370","line":282,"in_reply_to":"4c3e1376_de296057","updated":"2025-08-27 09:36:08.000000000","message":"I implemented the purge logic in　https://review.opendev.org/c/openstack/nova/+/958626 .\n\nSEV RPs get static names, according to compute node names, so we should be able to purge it, while GPU RPs are named according to configuration and may be lost when any record is deleted.","commit_id":"5b89f6c6eea8103af2965c51faf1272de4b4a5ed"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"d994fad2e50ea34004403de7994668eb74cef3eb","unresolved":false,"context_lines":[{"line_number":279,"context_line":"            # support is turned off. This follows the existing behavior for"},{"line_number":280,"context_line":"            # other resources such as vGPU."},{"line_number":281,"context_line":"            # sev_rps \u003d self._get_amd_sev_rps()"},{"line_number":282,"context_line":"            # self.assertEqual(0, len(sev_rps))"}],"source_content_type":"text/x-python","patch_set":32,"id":"0de5d29c_544aca69","line":282,"in_reply_to":"cd0bbef4_ffa5c370","updated":"2025-08-27 09:49:05.000000000","message":"yeah, I\u0027m cool with that logic, I just reviewed it.","commit_id":"5b89f6c6eea8103af2965c51faf1272de4b4a5ed"}],"nova/tests/functional/libvirt/test_reshape.py":[{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"ee5bee678d3b16fbc89e888052606b2bb838706f","unresolved":false,"context_lines":[{"line_number":296,"context_line":"            \u0027/resource_providers/%s/usages\u0027 % compute_rp_uuid).body["},{"line_number":297,"context_line":"            \u0027usages\u0027]"},{"line_number":298,"context_line":"        self.assertEqual(1, compute_usages[\u0027MEM_ENCRYPTION_CONTEXT\u0027])"},{"line_number":299,"context_line":""},{"line_number":300,"context_line":"        # restart the compute service to trigger reshape"},{"line_number":301,"context_line":"        with mock.patch(\u0027nova.virt.libvirt.host.Host.supports_amd_sev\u0027,"},{"line_number":302,"context_line":"                        return_value\u003dTrue):"}],"source_content_type":"text/x-python","patch_set":32,"id":"1a71d898_2631c97a","line":299,"updated":"2025-08-26 20:15:04.000000000","message":"++, you\u0027re doing the right asserts.","commit_id":"5b89f6c6eea8103af2965c51faf1272de4b4a5ed"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"ee5bee678d3b16fbc89e888052606b2bb838706f","unresolved":false,"context_lines":[{"line_number":300,"context_line":"        # restart the compute service to trigger reshape"},{"line_number":301,"context_line":"        with mock.patch(\u0027nova.virt.libvirt.host.Host.supports_amd_sev\u0027,"},{"line_number":302,"context_line":"                        return_value\u003dTrue):"},{"line_number":303,"context_line":"            self.compute \u003d self.restart_compute_service(self.hostname)"},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"        # verify that the inventory, usages and allocation are correct after"},{"line_number":306,"context_line":"        # the reshape"}],"source_content_type":"text/x-python","patch_set":32,"id":"f512ee15_69e0adba","line":303,"updated":"2025-08-26 20:15:04.000000000","message":"note to reviewers : that\u0027s where the reshape happens","commit_id":"5b89f6c6eea8103af2965c51faf1272de4b4a5ed"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"ee5bee678d3b16fbc89e888052606b2bb838706f","unresolved":false,"context_lines":[{"line_number":312,"context_line":"            \u0027/resource_providers/%s/usages\u0027 % compute_rp_uuid).body["},{"line_number":313,"context_line":"            \u0027usages\u0027]"},{"line_number":314,"context_line":"        self.assertNotIn(\u0027MEM_ENCRYPTION_CONTEXT\u0027, compute_usages)"},{"line_number":315,"context_line":""},{"line_number":316,"context_line":"        sev_rp_uuid \u003d self.placement.get("},{"line_number":317,"context_line":"            \u0027/resource_providers?name\u003dcompute1_amd_sev\u0027).body["},{"line_number":318,"context_line":"            \u0027resource_providers\u0027][0][\u0027uuid\u0027]"}],"source_content_type":"text/x-python","patch_set":32,"id":"b69e41d1_243077d4","line":315,"updated":"2025-08-26 20:15:04.000000000","message":"yup, they\u0027re gone.","commit_id":"5b89f6c6eea8103af2965c51faf1272de4b4a5ed"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"ee5bee678d3b16fbc89e888052606b2bb838706f","unresolved":true,"context_lines":[{"line_number":314,"context_line":"        self.assertNotIn(\u0027MEM_ENCRYPTION_CONTEXT\u0027, compute_usages)"},{"line_number":315,"context_line":""},{"line_number":316,"context_line":"        sev_rp_uuid \u003d self.placement.get("},{"line_number":317,"context_line":"            \u0027/resource_providers?name\u003dcompute1_amd_sev\u0027).body["},{"line_number":318,"context_line":"            \u0027resource_providers\u0027][0][\u0027uuid\u0027]"},{"line_number":319,"context_line":"        sev_inventory \u003d self.placement.get("},{"line_number":320,"context_line":"            \u0027/resource_providers/%s/inventories\u0027 % sev_rp_uuid).body["}],"source_content_type":"text/x-python","patch_set":32,"id":"7b9d9b9a_e14d7107","line":317,"range":{"start_line":317,"start_character":38,"end_line":317,"end_character":54},"updated":"2025-08-26 20:15:04.000000000","message":"as said in the spec, the names are deterministic.\nnit: you could have autogenerated the name then.","commit_id":"5b89f6c6eea8103af2965c51faf1272de4b4a5ed"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"4a32f14bd0e6f59d8f17f6c1bf4f32e67a23d26a","unresolved":false,"context_lines":[{"line_number":314,"context_line":"        self.assertNotIn(\u0027MEM_ENCRYPTION_CONTEXT\u0027, compute_usages)"},{"line_number":315,"context_line":""},{"line_number":316,"context_line":"        sev_rp_uuid \u003d self.placement.get("},{"line_number":317,"context_line":"            \u0027/resource_providers?name\u003dcompute1_amd_sev\u0027).body["},{"line_number":318,"context_line":"            \u0027resource_providers\u0027][0][\u0027uuid\u0027]"},{"line_number":319,"context_line":"        sev_inventory \u003d self.placement.get("},{"line_number":320,"context_line":"            \u0027/resource_providers/%s/inventories\u0027 % sev_rp_uuid).body["}],"source_content_type":"text/x-python","patch_set":32,"id":"dfbe5453_ccdd5d50","line":317,"range":{"start_line":317,"start_character":38,"end_line":317,"end_character":54},"in_reply_to":"167e45bd_ccc3d616","updated":"2025-08-28 08:14:56.000000000","message":"agreed.","commit_id":"5b89f6c6eea8103af2965c51faf1272de4b4a5ed"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"4edac15f7616d3216735f2cc0c9a4c64fe513bc3","unresolved":true,"context_lines":[{"line_number":314,"context_line":"        self.assertNotIn(\u0027MEM_ENCRYPTION_CONTEXT\u0027, compute_usages)"},{"line_number":315,"context_line":""},{"line_number":316,"context_line":"        sev_rp_uuid \u003d self.placement.get("},{"line_number":317,"context_line":"            \u0027/resource_providers?name\u003dcompute1_amd_sev\u0027).body["},{"line_number":318,"context_line":"            \u0027resource_providers\u0027][0][\u0027uuid\u0027]"},{"line_number":319,"context_line":"        sev_inventory \u003d self.placement.get("},{"line_number":320,"context_line":"            \u0027/resource_providers/%s/inventories\u0027 % sev_rp_uuid).body["}],"source_content_type":"text/x-python","patch_set":32,"id":"167e45bd_ccc3d616","line":317,"range":{"start_line":317,"start_character":38,"end_line":317,"end_character":54},"in_reply_to":"7b9d9b9a_e14d7107","updated":"2025-08-27 20:15:40.000000000","message":"yes, but this is fine also.\n\nits true that we have other ways to knwo the uuid like grabing it form the compute node with the corresponding hypervior_hostname\n\nbut im fine with looking it up like this. this simulate how we woudl do this ie we were driving the reshape api externally.\n\ni.e. this is what neutron would have to do when it looking up the root rp.","commit_id":"5b89f6c6eea8103af2965c51faf1272de4b4a5ed"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"ee5bee678d3b16fbc89e888052606b2bb838706f","unresolved":false,"context_lines":[{"line_number":334,"context_line":"        compute_usages \u003d self.placement.get("},{"line_number":335,"context_line":"            \u0027/resource_providers/%s/usages\u0027 % sev_rp_uuid).body["},{"line_number":336,"context_line":"            \u0027usages\u0027]"},{"line_number":337,"context_line":"        self.assertEqual(2, compute_usages[\u0027MEM_ENCRYPTION_CONTEXT\u0027])"}],"source_content_type":"text/x-python","patch_set":32,"id":"980f0161_ed663a57","line":337,"updated":"2025-08-26 20:15:04.000000000","message":"and yeah, we\u0027re still able to do an allocation on a nested RP without changing the scheduling request, cool.","commit_id":"5b89f6c6eea8103af2965c51faf1272de4b4a5ed"}],"nova/tests/unit/virt/libvirt/test_driver.py":[{"author":{"_account_id":35307,"name":"Taketani Ryo","email":"taketani.ryo@fujitsu.com","username":"r-taketn0517"},"change_message_id":"3dbfb0152263218d3c8affceab5b29af25be1669","unresolved":true,"context_lines":[{"line_number":23366,"context_line":"            },"},{"line_number":23367,"context_line":"            uuids.consumer2: {"},{"line_number":23368,"context_line":"                \u0027allocations\u0027: {"},{"line_number":23369,"context_line":"                    # This consumer has no vGPU allocations on the root node"},{"line_number":23370,"context_line":"                    # provider and *should not* be changed."},{"line_number":23371,"context_line":"                    self.cn_rp[\u0027uuid\u0027]: {"},{"line_number":23372,"context_line":"                        \u0027resources\u0027: {"}],"source_content_type":"text/x-python","patch_set":27,"id":"53a815c9_9dae0a82","line":23369,"range":{"start_line":23369,"start_character":43,"end_line":23369,"end_character":47},"updated":"2025-06-11 11:06:53.000000000","message":"Is MEM_ENCRYPTION_CONTEXT correct?","commit_id":"620045a814e4e135c33d44e1c0e89f71e48973a7"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"adaa8274fdceaf4840f2bae29e86da67c503c842","unresolved":false,"context_lines":[{"line_number":23366,"context_line":"            },"},{"line_number":23367,"context_line":"            uuids.consumer2: {"},{"line_number":23368,"context_line":"                \u0027allocations\u0027: {"},{"line_number":23369,"context_line":"                    # This consumer has no vGPU allocations on the root node"},{"line_number":23370,"context_line":"                    # provider and *should not* be changed."},{"line_number":23371,"context_line":"                    self.cn_rp[\u0027uuid\u0027]: {"},{"line_number":23372,"context_line":"                        \u0027resources\u0027: {"}],"source_content_type":"text/x-python","patch_set":27,"id":"f526f5bd_06671dad","line":23369,"range":{"start_line":23369,"start_character":43,"end_line":23369,"end_character":47},"in_reply_to":"53a815c9_9dae0a82","updated":"2025-06-11 11:50:18.000000000","message":"Oops. No !","commit_id":"620045a814e4e135c33d44e1c0e89f71e48973a7"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"ee5bee678d3b16fbc89e888052606b2bb838706f","unresolved":false,"context_lines":[{"line_number":23679,"context_line":"                               allocations\u003dallocations)"},{"line_number":23680,"context_line":"        self.assertIn(\u0027Unexpected MEM_ENCRYPTION_CONTEXT resource allocation \u0027"},{"line_number":23681,"context_line":"                      \u0027on provider %s\u0027 % uuids.other_rp, str(ex))"},{"line_number":23682,"context_line":""},{"line_number":23683,"context_line":"    @mock.patch(\u0027nova.objects.instance.Instance.get_by_uuid\u0027)"},{"line_number":23684,"context_line":"    @mock.patch(\u0027nova.objects.migration.MigrationList\u0027"},{"line_number":23685,"context_line":"                \u0027.get_in_progress_by_host_and_node\u0027)"}],"source_content_type":"text/x-python","patch_set":32,"id":"9f5b5255_ea3e4e5e","line":23682,"updated":"2025-08-26 20:15:04.000000000","message":"++, excellent work","commit_id":"5b89f6c6eea8103af2965c51faf1272de4b4a5ed"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"4edac15f7616d3216735f2cc0c9a4c64fe513bc3","unresolved":true,"context_lines":[{"line_number":23589,"context_line":"            self.cn_rp[\u0027name\u0027])"},{"line_number":23590,"context_line":"        self.assertEqual(2, len(compute_node_tree_uuids))"},{"line_number":23591,"context_line":"        # The SEV provider should be the 2nd UUID in the list"},{"line_number":23592,"context_line":"        sev_rp_uuid \u003d compute_node_tree_uuids[1]"},{"line_number":23593,"context_line":"        # The MEM_ENCRYPTION_CONTEXT inventory should be on the SEV child"},{"line_number":23594,"context_line":"        # provider"},{"line_number":23595,"context_line":"        sev_provider_data \u003d self.pt.data(sev_rp_uuid)"}],"source_content_type":"text/x-python","patch_set":33,"id":"1b4c5136_b473f7a8","line":23592,"updated":"2025-08-27 20:15:40.000000000","message":"this is true in this test case but this might be fragile over time\n\nit shoudl be ok for now i guess based on how you are simulating things but","commit_id":"b7c7d45093c9f6f2e3eac5433f3d614ba1cb9a44"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"4a32f14bd0e6f59d8f17f6c1bf4f32e67a23d26a","unresolved":true,"context_lines":[{"line_number":23589,"context_line":"            self.cn_rp[\u0027name\u0027])"},{"line_number":23590,"context_line":"        self.assertEqual(2, len(compute_node_tree_uuids))"},{"line_number":23591,"context_line":"        # The SEV provider should be the 2nd UUID in the list"},{"line_number":23592,"context_line":"        sev_rp_uuid \u003d compute_node_tree_uuids[1]"},{"line_number":23593,"context_line":"        # The MEM_ENCRYPTION_CONTEXT inventory should be on the SEV child"},{"line_number":23594,"context_line":"        # provider"},{"line_number":23595,"context_line":"        sev_provider_data \u003d self.pt.data(sev_rp_uuid)"}],"source_content_type":"text/x-python","patch_set":33,"id":"6037c619_37bea5b8","line":23592,"in_reply_to":"1b4c5136_b473f7a8","updated":"2025-08-28 08:14:56.000000000","message":"see the above change","commit_id":"b7c7d45093c9f6f2e3eac5433f3d614ba1cb9a44"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"b5c60b600bc6f5941e1b3e03b036cebe2b116e6a","unresolved":false,"context_lines":[{"line_number":23589,"context_line":"            self.cn_rp[\u0027name\u0027])"},{"line_number":23590,"context_line":"        self.assertEqual(2, len(compute_node_tree_uuids))"},{"line_number":23591,"context_line":"        # The SEV provider should be the 2nd UUID in the list"},{"line_number":23592,"context_line":"        sev_rp_uuid \u003d compute_node_tree_uuids[1]"},{"line_number":23593,"context_line":"        # The MEM_ENCRYPTION_CONTEXT inventory should be on the SEV child"},{"line_number":23594,"context_line":"        # provider"},{"line_number":23595,"context_line":"        sev_provider_data \u003d self.pt.data(sev_rp_uuid)"}],"source_content_type":"text/x-python","patch_set":33,"id":"2af6a611_12c48971","line":23592,"in_reply_to":"6037c619_37bea5b8","updated":"2025-08-29 04:07:57.000000000","message":"Done","commit_id":"b7c7d45093c9f6f2e3eac5433f3d614ba1cb9a44"}],"nova/virt/libvirt/driver.py":[{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"f6a60ddd5ebd27689ad39c18234cb2830d71218e","unresolved":true,"context_lines":[{"line_number":9666,"context_line":""},{"line_number":9667,"context_line":"    @staticmethod"},{"line_number":9668,"context_line":"    def _is_reshape_needed_memory_encryption_on_root(provider_tree, nodename):"},{"line_number":9669,"context_line":"        \"\"\"Determine if root RP has MEM_ENCRYPTION_COTEXT inventories."},{"line_number":9670,"context_line":""},{"line_number":9671,"context_line":"        Check to see if the root compute node provider in the tree for"},{"line_number":9672,"context_line":"        this host already has MEM_ENCRYPTION_COTEXT inventory because if it"}],"source_content_type":"text/x-python","patch_set":31,"id":"de60a45f_b120454d","line":9669,"range":{"start_line":9669,"start_character":51,"end_line":9669,"end_character":57},"updated":"2025-08-13 15:51:37.000000000","message":"typo: CONTEXT","commit_id":"e36edf978bd578616788e2106f338d3d88ab11e5"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"831ab882d77999731ecde53700b85da197c83001","unresolved":false,"context_lines":[{"line_number":9666,"context_line":""},{"line_number":9667,"context_line":"    @staticmethod"},{"line_number":9668,"context_line":"    def _is_reshape_needed_memory_encryption_on_root(provider_tree, nodename):"},{"line_number":9669,"context_line":"        \"\"\"Determine if root RP has MEM_ENCRYPTION_COTEXT inventories."},{"line_number":9670,"context_line":""},{"line_number":9671,"context_line":"        Check to see if the root compute node provider in the tree for"},{"line_number":9672,"context_line":"        this host already has MEM_ENCRYPTION_COTEXT inventory because if it"}],"source_content_type":"text/x-python","patch_set":31,"id":"1225b07c_d736b0dc","line":9669,"range":{"start_line":9669,"start_character":51,"end_line":9669,"end_character":57},"in_reply_to":"de60a45f_b120454d","updated":"2025-08-14 00:34:26.000000000","message":"Done","commit_id":"e36edf978bd578616788e2106f338d3d88ab11e5"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"f6a60ddd5ebd27689ad39c18234cb2830d71218e","unresolved":true,"context_lines":[{"line_number":9669,"context_line":"        \"\"\"Determine if root RP has MEM_ENCRYPTION_COTEXT inventories."},{"line_number":9670,"context_line":""},{"line_number":9671,"context_line":"        Check to see if the root compute node provider in the tree for"},{"line_number":9672,"context_line":"        this host already has MEM_ENCRYPTION_COTEXT inventory because if it"},{"line_number":9673,"context_line":"        does, we either need to signal for a reshape (if"},{"line_number":9674,"context_line":"        _update_provider_tree_for_memory_encryption () has no allocations) or"},{"line_number":9675,"context_line":"        move the allocations within the ProviderTree if passed."}],"source_content_type":"text/x-python","patch_set":31,"id":"5f850923_ace9c181","line":9672,"range":{"start_line":9672,"start_character":45,"end_line":9672,"end_character":51},"updated":"2025-08-13 15:51:37.000000000","message":"typo: CONTEXT","commit_id":"e36edf978bd578616788e2106f338d3d88ab11e5"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"831ab882d77999731ecde53700b85da197c83001","unresolved":false,"context_lines":[{"line_number":9669,"context_line":"        \"\"\"Determine if root RP has MEM_ENCRYPTION_COTEXT inventories."},{"line_number":9670,"context_line":""},{"line_number":9671,"context_line":"        Check to see if the root compute node provider in the tree for"},{"line_number":9672,"context_line":"        this host already has MEM_ENCRYPTION_COTEXT inventory because if it"},{"line_number":9673,"context_line":"        does, we either need to signal for a reshape (if"},{"line_number":9674,"context_line":"        _update_provider_tree_for_memory_encryption () has no allocations) or"},{"line_number":9675,"context_line":"        move the allocations within the ProviderTree if passed."}],"source_content_type":"text/x-python","patch_set":31,"id":"662edfb2_7fc2581f","line":9672,"range":{"start_line":9672,"start_character":45,"end_line":9672,"end_character":51},"in_reply_to":"5f850923_ace9c181","updated":"2025-08-14 00:34:26.000000000","message":"Done","commit_id":"e36edf978bd578616788e2106f338d3d88ab11e5"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"f6a60ddd5ebd27689ad39c18234cb2830d71218e","unresolved":true,"context_lines":[{"line_number":9677,"context_line":"        :param provider_tree: The ProviderTree object for this host."},{"line_number":9678,"context_line":"        :param nodename: The ComputeNode.hypervisor_hostname, also known as"},{"line_number":9679,"context_line":"            the name of the root node provider in the tree for this host."},{"line_number":9680,"context_line":"        :returns: boolean, whether we have MEM_ENCRYPTION_COTEXT root"},{"line_number":9681,"context_line":"            inventory."},{"line_number":9682,"context_line":"        \"\"\""},{"line_number":9683,"context_line":"        root_node \u003d provider_tree.data(nodename)"}],"source_content_type":"text/x-python","patch_set":31,"id":"f007d682_16848e94","line":9680,"range":{"start_line":9680,"start_character":58,"end_line":9680,"end_character":64},"updated":"2025-08-13 15:51:37.000000000","message":"typo: CONTEXT","commit_id":"e36edf978bd578616788e2106f338d3d88ab11e5"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"831ab882d77999731ecde53700b85da197c83001","unresolved":false,"context_lines":[{"line_number":9677,"context_line":"        :param provider_tree: The ProviderTree object for this host."},{"line_number":9678,"context_line":"        :param nodename: The ComputeNode.hypervisor_hostname, also known as"},{"line_number":9679,"context_line":"            the name of the root node provider in the tree for this host."},{"line_number":9680,"context_line":"        :returns: boolean, whether we have MEM_ENCRYPTION_COTEXT root"},{"line_number":9681,"context_line":"            inventory."},{"line_number":9682,"context_line":"        \"\"\""},{"line_number":9683,"context_line":"        root_node \u003d provider_tree.data(nodename)"}],"source_content_type":"text/x-python","patch_set":31,"id":"b6427f20_012eb51e","line":9680,"range":{"start_line":9680,"start_character":58,"end_line":9680,"end_character":64},"in_reply_to":"f007d682_16848e94","updated":"2025-08-14 00:34:26.000000000","message":"Done","commit_id":"e36edf978bd578616788e2106f338d3d88ab11e5"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"f6a60ddd5ebd27689ad39c18234cb2830d71218e","unresolved":true,"context_lines":[{"line_number":9809,"context_line":"                            \"%d, but is not SEV-capable.\", conf_slots)"},{"line_number":9810,"context_line":"            return {}"},{"line_number":9811,"context_line":""},{"line_number":9812,"context_line":"        slots \u003d db_const.MAX_INT"},{"line_number":9813,"context_line":""},{"line_number":9814,"context_line":"        # NOTE(tkajinam): Current nova supports SEV only so we ignore SEV-ES"},{"line_number":9815,"context_line":"        if self._host.max_sev_guests is not None:"},{"line_number":9816,"context_line":"            slots \u003d self._host.max_sev_guests"}],"source_content_type":"text/x-python","patch_set":31,"id":"c0dbc0bb_cb15b084","line":9813,"range":{"start_line":9812,"start_character":16,"end_line":9813,"end_character":1},"updated":"2025-08-13 15:51:37.000000000","message":"Does this value make sense for a number of slots?\nI mean, slot number is probably not an unsigned int.","commit_id":"e36edf978bd578616788e2106f338d3d88ab11e5"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"831ab882d77999731ecde53700b85da197c83001","unresolved":true,"context_lines":[{"line_number":9809,"context_line":"                            \"%d, but is not SEV-capable.\", conf_slots)"},{"line_number":9810,"context_line":"            return {}"},{"line_number":9811,"context_line":""},{"line_number":9812,"context_line":"        slots \u003d db_const.MAX_INT"},{"line_number":9813,"context_line":""},{"line_number":9814,"context_line":"        # NOTE(tkajinam): Current nova supports SEV only so we ignore SEV-ES"},{"line_number":9815,"context_line":"        if self._host.max_sev_guests is not None:"},{"line_number":9816,"context_line":"            slots \u003d self._host.max_sev_guests"}],"source_content_type":"text/x-python","patch_set":31,"id":"f17fa408_0de81e12","line":9813,"range":{"start_line":9812,"start_character":16,"end_line":9813,"end_character":1},"in_reply_to":"c0dbc0bb_cb15b084","updated":"2025-08-14 00:34:26.000000000","message":"It may be not very realistic that we get that huge number of slots but this has been here for a while and as long as users use recent versions of libvirt which exposes actual number of slots this is not used (and the REAL number is detected) so I\u0027ll leave this now.","commit_id":"e36edf978bd578616788e2106f338d3d88ab11e5"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"b4983e36d2ac5e318c0933cecb27dbb2131faa98","unresolved":false,"context_lines":[{"line_number":9809,"context_line":"                            \"%d, but is not SEV-capable.\", conf_slots)"},{"line_number":9810,"context_line":"            return {}"},{"line_number":9811,"context_line":""},{"line_number":9812,"context_line":"        slots \u003d db_const.MAX_INT"},{"line_number":9813,"context_line":""},{"line_number":9814,"context_line":"        # NOTE(tkajinam): Current nova supports SEV only so we ignore SEV-ES"},{"line_number":9815,"context_line":"        if self._host.max_sev_guests is not None:"},{"line_number":9816,"context_line":"            slots \u003d self._host.max_sev_guests"}],"source_content_type":"text/x-python","patch_set":31,"id":"7755c698_1caec0a6","line":9813,"range":{"start_line":9812,"start_character":16,"end_line":9813,"end_character":1},"in_reply_to":"f17fa408_0de81e12","updated":"2025-08-27 13:46:00.000000000","message":"Acknowledged","commit_id":"e36edf978bd578616788e2106f338d3d88ab11e5"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"ee5bee678d3b16fbc89e888052606b2bb838706f","unresolved":true,"context_lines":[{"line_number":9809,"context_line":"                            \"%d, but is not SEV-capable.\", conf_slots)"},{"line_number":9810,"context_line":"            return {}"},{"line_number":9811,"context_line":""},{"line_number":9812,"context_line":"        slots \u003d db_const.MAX_INT"},{"line_number":9813,"context_line":""},{"line_number":9814,"context_line":"        # NOTE(tkajinam): Current nova supports SEV only so we ignore SEV-ES"},{"line_number":9815,"context_line":"        if self._host.max_sev_guests is not None:"},{"line_number":9816,"context_line":"            slots \u003d self._host.max_sev_guests"}],"source_content_type":"text/x-python","patch_set":31,"id":"19c639ce_e9efd3c8","line":9813,"range":{"start_line":9812,"start_character":16,"end_line":9813,"end_character":1},"in_reply_to":"f17fa408_0de81e12","updated":"2025-08-26 20:15:04.000000000","message":"not related to the patch anyway","commit_id":"e36edf978bd578616788e2106f338d3d88ab11e5"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"ee5bee678d3b16fbc89e888052606b2bb838706f","unresolved":false,"context_lines":[{"line_number":9552,"context_line":"                \u0027allocation_ratio\u0027: 1.0,"},{"line_number":9553,"context_line":"                \u0027reserved\u0027: 0,"},{"line_number":9554,"context_line":"            }"},{"line_number":9555,"context_line":""},{"line_number":9556,"context_line":"        # If a sharing DISK_GB provider exists in the provider tree, then our"},{"line_number":9557,"context_line":"        # storage is shared, and we should not report the DISK_GB inventory in"},{"line_number":9558,"context_line":"        # the compute node provider."}],"source_content_type":"text/x-python","patch_set":32,"id":"48ea2f36_76ab8494","side":"PARENT","line":9555,"updated":"2025-08-26 20:15:04.000000000","message":"yeah, we no longer add inventories to the root RP.","commit_id":"11ed3b32f12a99f477cd2fd4ae08461e36937588"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"ee5bee678d3b16fbc89e888052606b2bb838706f","unresolved":false,"context_lines":[{"line_number":9447,"context_line":"                     \u0027Cannot get block stats for device\u0027, instance.name,"},{"line_number":9448,"context_line":"                     instance\u003dinstance)"},{"line_number":9449,"context_line":""},{"line_number":9450,"context_line":"    def update_provider_tree(self, provider_tree, nodename, allocations\u003dNone):"},{"line_number":9451,"context_line":"        \"\"\"Update a ProviderTree object with current resource provider,"},{"line_number":9452,"context_line":"        inventory information and CPU traits."},{"line_number":9453,"context_line":""}],"source_content_type":"text/x-python","patch_set":32,"id":"3251a8a3_8553c9c1","line":9450,"range":{"start_line":9450,"start_character":60,"end_line":9450,"end_character":76},"updated":"2025-08-26 20:15:04.000000000","message":"see, this is where allocations\u003dNone is set by default during periodics and restart.","commit_id":"5b89f6c6eea8103af2965c51faf1272de4b4a5ed"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"ee5bee678d3b16fbc89e888052606b2bb838706f","unresolved":false,"context_lines":[{"line_number":9617,"context_line":"                    metadata\u003dvpmem)"},{"line_number":9618,"context_line":"                resources[rc].add(resource_obj)"},{"line_number":9619,"context_line":""},{"line_number":9620,"context_line":"    def _update_provider_tree_for_memory_encryption(self, provider_tree,"},{"line_number":9621,"context_line":"                                                    nodename, allocations):"},{"line_number":9622,"context_line":"        \"\"\"Updates the provider tree for MEM_ENCRYPTION_CONTEXT inventory."},{"line_number":9623,"context_line":""}],"source_content_type":"text/x-python","patch_set":32,"id":"52226e25_303ecf61","line":9620,"updated":"2025-08-26 20:15:04.000000000","message":"note for reviewers before you do your role : you can find the workflow here https://specs.openstack.org/openstack/nova-specs/specs/stein/approved/reshape-provider-tree.html#proposed-change","commit_id":"5b89f6c6eea8103af2965c51faf1272de4b4a5ed"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"ee5bee678d3b16fbc89e888052606b2bb838706f","unresolved":false,"context_lines":[{"line_number":9618,"context_line":"                resources[rc].add(resource_obj)"},{"line_number":9619,"context_line":""},{"line_number":9620,"context_line":"    def _update_provider_tree_for_memory_encryption(self, provider_tree,"},{"line_number":9621,"context_line":"                                                    nodename, allocations):"},{"line_number":9622,"context_line":"        \"\"\"Updates the provider tree for MEM_ENCRYPTION_CONTEXT inventory."},{"line_number":9623,"context_line":""},{"line_number":9624,"context_line":"        Before 2025.2, MEM_ENCRYPTION_CONTEXT inventory and allocations were on"}],"source_content_type":"text/x-python","patch_set":32,"id":"0652796c_d2df002c","line":9621,"range":{"start_line":9621,"start_character":62,"end_line":9621,"end_character":73},"updated":"2025-08-26 20:15:04.000000000","message":"as said below, allocations\u003dNone the first time we call that method, at compute restart (or during periodics)","commit_id":"5b89f6c6eea8103af2965c51faf1272de4b4a5ed"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"ee5bee678d3b16fbc89e888052606b2bb838706f","unresolved":false,"context_lines":[{"line_number":9642,"context_line":"        \"\"\""},{"line_number":9643,"context_line":"        inventories_dict \u003d self._get_memory_encryption_inventories()"},{"line_number":9644,"context_line":"        if not inventories_dict:"},{"line_number":9645,"context_line":"            return"},{"line_number":9646,"context_line":""},{"line_number":9647,"context_line":"        me_rps \u003d self._ensure_memory_encryption_providers("},{"line_number":9648,"context_line":"            inventories_dict, provider_tree, nodename)"}],"source_content_type":"text/x-python","patch_set":32,"id":"1d379c2a_f05024bc","line":9645,"updated":"2025-08-26 20:15:04.000000000","message":"correct, no need to update then","commit_id":"5b89f6c6eea8103af2965c51faf1272de4b4a5ed"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"ee5bee678d3b16fbc89e888052606b2bb838706f","unresolved":false,"context_lines":[{"line_number":9645,"context_line":"            return"},{"line_number":9646,"context_line":""},{"line_number":9647,"context_line":"        me_rps \u003d self._ensure_memory_encryption_providers("},{"line_number":9648,"context_line":"            inventories_dict, provider_tree, nodename)"},{"line_number":9649,"context_line":""},{"line_number":9650,"context_line":"        if self._is_reshape_needed_memory_encryption_on_root(provider_tree,"},{"line_number":9651,"context_line":"                                                             nodename):"}],"source_content_type":"text/x-python","patch_set":32,"id":"3508cc65_07831a39","line":9648,"updated":"2025-08-26 20:15:04.000000000","message":"this is in this method that we create those nested RPs, as a result the ProviderTree is updated.","commit_id":"5b89f6c6eea8103af2965c51faf1272de4b4a5ed"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"ee5bee678d3b16fbc89e888052606b2bb838706f","unresolved":false,"context_lines":[{"line_number":9648,"context_line":"            inventories_dict, provider_tree, nodename)"},{"line_number":9649,"context_line":""},{"line_number":9650,"context_line":"        if self._is_reshape_needed_memory_encryption_on_root(provider_tree,"},{"line_number":9651,"context_line":"                                                             nodename):"},{"line_number":9652,"context_line":"            if allocations is None:"},{"line_number":9653,"context_line":"                LOG.info(\u0027Requesting provider tree reshape in order to move \u0027"},{"line_number":9654,"context_line":"                         \u0027memory encryption context inventory from the root \u0027"}],"source_content_type":"text/x-python","patch_set":32,"id":"7ebeba50_66026c9a","line":9651,"updated":"2025-08-26 20:15:04.000000000","message":"this method will tell us whether we have allocations on a root RP.","commit_id":"5b89f6c6eea8103af2965c51faf1272de4b4a5ed"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"ee5bee678d3b16fbc89e888052606b2bb838706f","unresolved":false,"context_lines":[{"line_number":9654,"context_line":"                         \u0027memory encryption context inventory from the root \u0027"},{"line_number":9655,"context_line":"                         \u0027compute node provider %s to a child provider.\u0027,"},{"line_number":9656,"context_line":"                         nodename)"},{"line_number":9657,"context_line":"                raise exception.ReshapeNeeded()"},{"line_number":9658,"context_line":"            root_node \u003d provider_tree.data(nodename)"},{"line_number":9659,"context_line":"            self._reshape_memory_encryption_resources(allocations, root_node,"},{"line_number":9660,"context_line":"                                                      me_rps)"}],"source_content_type":"text/x-python","patch_set":32,"id":"c47b9d5c_c96f5293","line":9657,"updated":"2025-08-26 20:15:04.000000000","message":"that\u0027s where we trigger the reshape : we know we are at startup and we found allocations to move.","commit_id":"5b89f6c6eea8103af2965c51faf1272de4b4a5ed"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"ee5bee678d3b16fbc89e888052606b2bb838706f","unresolved":false,"context_lines":[{"line_number":9657,"context_line":"                raise exception.ReshapeNeeded()"},{"line_number":9658,"context_line":"            root_node \u003d provider_tree.data(nodename)"},{"line_number":9659,"context_line":"            self._reshape_memory_encryption_resources(allocations, root_node,"},{"line_number":9660,"context_line":"                                                      me_rps)"},{"line_number":9661,"context_line":"            if provider_tree.has_traits(nodename, [ot.HW_CPU_X86_AMD_SEV]):"},{"line_number":9662,"context_line":"                provider_tree.remove_traits(nodename, ot.HW_CPU_X86_AMD_SEV)"},{"line_number":9663,"context_line":"            if orc.MEM_ENCRYPTION_CONTEXT in root_node.inventory:"}],"source_content_type":"text/x-python","patch_set":32,"id":"9e29a61c_c3a044ca","line":9660,"updated":"2025-08-26 20:15:04.000000000","message":"that\u0027s where we reshuffle the allocations (as a reminder, the ProviderTree is already updated at that point in time).\nAs a reminder, this section of code is only executed because the ResourceTracker received the ReshapeNeeded exception and called again update_resource_provider() by providing the parameter allocations with the real list of allocations.","commit_id":"5b89f6c6eea8103af2965c51faf1272de4b4a5ed"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"ee5bee678d3b16fbc89e888052606b2bb838706f","unresolved":false,"context_lines":[{"line_number":9659,"context_line":"            self._reshape_memory_encryption_resources(allocations, root_node,"},{"line_number":9660,"context_line":"                                                      me_rps)"},{"line_number":9661,"context_line":"            if provider_tree.has_traits(nodename, [ot.HW_CPU_X86_AMD_SEV]):"},{"line_number":9662,"context_line":"                provider_tree.remove_traits(nodename, ot.HW_CPU_X86_AMD_SEV)"},{"line_number":9663,"context_line":"            if orc.MEM_ENCRYPTION_CONTEXT in root_node.inventory:"},{"line_number":9664,"context_line":"                del root_node.inventory[orc.MEM_ENCRYPTION_CONTEXT]"},{"line_number":9665,"context_line":"                provider_tree.update_inventory(nodename, root_node.inventory)"}],"source_content_type":"text/x-python","patch_set":32,"id":"d888d14e_fb1a474c","line":9662,"updated":"2025-08-26 20:15:04.000000000","message":"that\u0027s where we delete the traits on the root RP.","commit_id":"5b89f6c6eea8103af2965c51faf1272de4b4a5ed"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"ee5bee678d3b16fbc89e888052606b2bb838706f","unresolved":false,"context_lines":[{"line_number":9662,"context_line":"                provider_tree.remove_traits(nodename, ot.HW_CPU_X86_AMD_SEV)"},{"line_number":9663,"context_line":"            if orc.MEM_ENCRYPTION_CONTEXT in root_node.inventory:"},{"line_number":9664,"context_line":"                del root_node.inventory[orc.MEM_ENCRYPTION_CONTEXT]"},{"line_number":9665,"context_line":"                provider_tree.update_inventory(nodename, root_node.inventory)"},{"line_number":9666,"context_line":""},{"line_number":9667,"context_line":"    @staticmethod"},{"line_number":9668,"context_line":"    def _is_reshape_needed_memory_encryption_on_root(provider_tree, nodename):"}],"source_content_type":"text/x-python","patch_set":32,"id":"7e7eff91_5d2ba547","line":9665,"updated":"2025-08-26 20:15:04.000000000","message":"now that the allocations moved to the nested RPs, we can remove the old inventory from the root RP.","commit_id":"5b89f6c6eea8103af2965c51faf1272de4b4a5ed"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"ee5bee678d3b16fbc89e888052606b2bb838706f","unresolved":false,"context_lines":[{"line_number":9681,"context_line":"            inventory."},{"line_number":9682,"context_line":"        \"\"\""},{"line_number":9683,"context_line":"        root_node \u003d provider_tree.data(nodename)"},{"line_number":9684,"context_line":"        return orc.MEM_ENCRYPTION_CONTEXT in root_node.inventory"},{"line_number":9685,"context_line":""},{"line_number":9686,"context_line":"    def _ensure_memory_encryption_providers(self, inventories_dict,"},{"line_number":9687,"context_line":"                                            provider_tree, nodename):"}],"source_content_type":"text/x-python","patch_set":32,"id":"adde6e6e_014ccbc9","line":9684,"updated":"2025-08-26 20:15:04.000000000","message":"++","commit_id":"5b89f6c6eea8103af2965c51faf1272de4b4a5ed"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"ee5bee678d3b16fbc89e888052606b2bb838706f","unresolved":true,"context_lines":[{"line_number":9716,"context_line":"            me_rp_name \u003d \u0027%s_%s\u0027 % (nodename, me_id)"},{"line_number":9717,"context_line":"            if not inventory[\u0027total\u0027]:"},{"line_number":9718,"context_line":"                if provider_tree.exists(me_rp_name):"},{"line_number":9719,"context_line":"                    provider_tree.remove(me_rp_name)"},{"line_number":9720,"context_line":"                break"},{"line_number":9721,"context_line":"            if not provider_tree.exists(me_rp_name):"},{"line_number":9722,"context_line":"                provider_tree.new_child(me_rp_name, nodename)"}],"source_content_type":"text/x-python","patch_set":32,"id":"3bd12c4c_eb6f1e0c","line":9719,"updated":"2025-08-26 20:15:04.000000000","message":"in theory, we shall delete the nested RP if there are no resources, that\u0027s where I\u0027m confused.","commit_id":"5b89f6c6eea8103af2965c51faf1272de4b4a5ed"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"f7aede7de4d48a1a0d6616b078c76012b32409c1","unresolved":false,"context_lines":[{"line_number":9716,"context_line":"            me_rp_name \u003d \u0027%s_%s\u0027 % (nodename, me_id)"},{"line_number":9717,"context_line":"            if not inventory[\u0027total\u0027]:"},{"line_number":9718,"context_line":"                if provider_tree.exists(me_rp_name):"},{"line_number":9719,"context_line":"                    provider_tree.remove(me_rp_name)"},{"line_number":9720,"context_line":"                break"},{"line_number":9721,"context_line":"            if not provider_tree.exists(me_rp_name):"},{"line_number":9722,"context_line":"                provider_tree.new_child(me_rp_name, nodename)"}],"source_content_type":"text/x-python","patch_set":32,"id":"58146140_7d3f70e3","line":9719,"in_reply_to":"3bd12c4c_eb6f1e0c","updated":"2025-08-27 08:18:37.000000000","message":"\u003e in theory, we shall delete the nested RP if there are no resources, that\u0027s where I\u0027m confused.\n\nIt was late when I reviewed it, now I remember why we don\u0027t remove the RPs.\n_ensure_memory_encryption_providers() is only called whether we have inventories by _get_memory_encryption_inventories() so of course when we change the support, then we don\u0027t provide back the previous inventories, hence why we don\u0027t remove them.","commit_id":"5b89f6c6eea8103af2965c51faf1272de4b4a5ed"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"ee5bee678d3b16fbc89e888052606b2bb838706f","unresolved":false,"context_lines":[{"line_number":9719,"context_line":"                    provider_tree.remove(me_rp_name)"},{"line_number":9720,"context_line":"                break"},{"line_number":9721,"context_line":"            if not provider_tree.exists(me_rp_name):"},{"line_number":9722,"context_line":"                provider_tree.new_child(me_rp_name, nodename)"},{"line_number":9723,"context_line":"            me_rp \u003d provider_tree.data(me_rp_name)"},{"line_number":9724,"context_line":"            me_rps[me_id] \u003d me_rp"},{"line_number":9725,"context_line":"            me_traits \u003d inventory.pop(\u0027traits\u0027, [])"}],"source_content_type":"text/x-python","patch_set":32,"id":"0c313c51_108f7c49","line":9722,"updated":"2025-08-26 20:15:04.000000000","message":"this is where we create the nested RP","commit_id":"5b89f6c6eea8103af2965c51faf1272de4b4a5ed"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"ee5bee678d3b16fbc89e888052606b2bb838706f","unresolved":false,"context_lines":[{"line_number":9725,"context_line":"            me_traits \u003d inventory.pop(\u0027traits\u0027, [])"},{"line_number":9726,"context_line":"            me_inventory \u003d {orc.MEM_ENCRYPTION_CONTEXT: inventory}"},{"line_number":9727,"context_line":"            provider_tree.update_inventory(me_rp_name, me_inventory)"},{"line_number":9728,"context_line":"            provider_tree.add_traits(me_rp_name, *me_traits)"},{"line_number":9729,"context_line":"        return me_rps"},{"line_number":9730,"context_line":""},{"line_number":9731,"context_line":"    def _reshape_memory_encryption_resources("}],"source_content_type":"text/x-python","patch_set":32,"id":"eefa572d_f75b8725","line":9728,"updated":"2025-08-26 20:15:04.000000000","message":"that\u0027s where we add the traits to the nested RP.","commit_id":"5b89f6c6eea8103af2965c51faf1272de4b4a5ed"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"ee5bee678d3b16fbc89e888052606b2bb838706f","unresolved":false,"context_lines":[{"line_number":9729,"context_line":"        return me_rps"},{"line_number":9730,"context_line":""},{"line_number":9731,"context_line":"    def _reshape_memory_encryption_resources("},{"line_number":9732,"context_line":"            self, allocations, root_node, me_rps):"},{"line_number":9733,"context_line":"        for consumer_uuid, alloc_data in allocations.items():"},{"line_number":9734,"context_line":"            allocs \u003d alloc_data[\u0027allocations\u0027]"},{"line_number":9735,"context_line":"            for rp_uuid in list(allocs):"}],"source_content_type":"text/x-python","patch_set":32,"id":"54a95e1d_468f1160","line":9732,"range":{"start_line":9732,"start_character":18,"end_line":9732,"end_character":29},"updated":"2025-08-26 20:15:04.000000000","message":"that value directly comes from the RT.","commit_id":"5b89f6c6eea8103af2965c51faf1272de4b4a5ed"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"ee5bee678d3b16fbc89e888052606b2bb838706f","unresolved":false,"context_lines":[{"line_number":9732,"context_line":"            self, allocations, root_node, me_rps):"},{"line_number":9733,"context_line":"        for consumer_uuid, alloc_data in allocations.items():"},{"line_number":9734,"context_line":"            allocs \u003d alloc_data[\u0027allocations\u0027]"},{"line_number":9735,"context_line":"            for rp_uuid in list(allocs):"},{"line_number":9736,"context_line":"                resources \u003d allocs[rp_uuid][\u0027resources\u0027]"},{"line_number":9737,"context_line":"                if orc.MEM_ENCRYPTION_CONTEXT in resources:"},{"line_number":9738,"context_line":"                    self._reshape_memory_encryption_allocations("}],"source_content_type":"text/x-python","patch_set":32,"id":"2498f623_38df72d9","line":9735,"updated":"2025-08-26 20:15:04.000000000","message":"it should always be the root RP.","commit_id":"5b89f6c6eea8103af2965c51faf1272de4b4a5ed"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"ee5bee678d3b16fbc89e888052606b2bb838706f","unresolved":false,"context_lines":[{"line_number":9762,"context_line":"        \"\"\""},{"line_number":9763,"context_line":"        self._assert_is_root_provider("},{"line_number":9764,"context_line":"            orc.MEM_ENCRYPTION_CONTEXT, rp_uuid, root_node, consumer_uuid,"},{"line_number":9765,"context_line":"            alloc_data)"},{"line_number":9766,"context_line":""},{"line_number":9767,"context_line":"        sev_rp \u003d None"},{"line_number":9768,"context_line":"        for me_rp_name in me_rps:"}],"source_content_type":"text/x-python","patch_set":32,"id":"ce613368_fafb05dd","line":9765,"updated":"2025-08-26 20:15:04.000000000","message":"++, this is where we emit ReshapeFailed if the assertion is invalid, see below.","commit_id":"5b89f6c6eea8103af2965c51faf1272de4b4a5ed"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"ee5bee678d3b16fbc89e888052606b2bb838706f","unresolved":false,"context_lines":[{"line_number":9768,"context_line":"        for me_rp_name in me_rps:"},{"line_number":9769,"context_line":"            if ot.HW_CPU_X86_AMD_SEV in me_rps[me_rp_name].traits:"},{"line_number":9770,"context_line":"                sev_rp \u003d me_rps[me_rp_name]"},{"line_number":9771,"context_line":"                break"},{"line_number":9772,"context_line":""},{"line_number":9773,"context_line":"        if sev_rp is None:"},{"line_number":9774,"context_line":"            msg \u003d (_(\u0027MEM_ENCRYPTION_CONTEXT resources in the root provider \u0027"}],"source_content_type":"text/x-python","patch_set":32,"id":"70b8cb99_10be34dc","line":9771,"updated":"2025-08-26 20:15:04.000000000","message":"here we pick the first nested RP that does AMD SEV support.","commit_id":"5b89f6c6eea8103af2965c51faf1272de4b4a5ed"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"b4983e36d2ac5e318c0933cecb27dbb2131faa98","unresolved":true,"context_lines":[{"line_number":9772,"context_line":""},{"line_number":9773,"context_line":"        if sev_rp is None:"},{"line_number":9774,"context_line":"            msg \u003d (_(\u0027MEM_ENCRYPTION_CONTEXT resources in the root provider \u0027"},{"line_number":9775,"context_line":"                     \u0027%(rp_uuid) are allocated by %(consumer_uuid)s but \u0027"},{"line_number":9776,"context_line":"                     \u0027the child resource provider for AMD SEV is not found.\u0027)"},{"line_number":9777,"context_line":"                   % {\u0027rp_uuid\u0027: rp_uuid, \u0027consumer_uuid\u0027: consumer_uuid})"},{"line_number":9778,"context_line":"            raise exception.ReshapeFailed(error\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":32,"id":"4d08be6e_63784245","line":9775,"range":{"start_line":9775,"start_character":22,"end_line":9775,"end_character":32},"updated":"2025-08-27 13:46:00.000000000","message":"Missing trailing \u0027s\u0027","commit_id":"5b89f6c6eea8103af2965c51faf1272de4b4a5ed"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"d572254a74fa52d52c8daa7627e161d99c5d3bce","unresolved":false,"context_lines":[{"line_number":9772,"context_line":""},{"line_number":9773,"context_line":"        if sev_rp is None:"},{"line_number":9774,"context_line":"            msg \u003d (_(\u0027MEM_ENCRYPTION_CONTEXT resources in the root provider \u0027"},{"line_number":9775,"context_line":"                     \u0027%(rp_uuid) are allocated by %(consumer_uuid)s but \u0027"},{"line_number":9776,"context_line":"                     \u0027the child resource provider for AMD SEV is not found.\u0027)"},{"line_number":9777,"context_line":"                   % {\u0027rp_uuid\u0027: rp_uuid, \u0027consumer_uuid\u0027: consumer_uuid})"},{"line_number":9778,"context_line":"            raise exception.ReshapeFailed(error\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":32,"id":"6ec9b041_3ed660bc","line":9775,"range":{"start_line":9775,"start_character":22,"end_line":9775,"end_character":32},"in_reply_to":"4d08be6e_63784245","updated":"2025-08-27 13:58:51.000000000","message":"Done","commit_id":"5b89f6c6eea8103af2965c51faf1272de4b4a5ed"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"ee5bee678d3b16fbc89e888052606b2bb838706f","unresolved":false,"context_lines":[{"line_number":9782,"context_line":"            \u0027resources\u0027: {"},{"line_number":9783,"context_line":"                orc.MEM_ENCRYPTION_CONTEXT: 1"},{"line_number":9784,"context_line":"            }"},{"line_number":9785,"context_line":"        }"},{"line_number":9786,"context_line":"        del resources[orc.MEM_ENCRYPTION_CONTEXT]"},{"line_number":9787,"context_line":""},{"line_number":9788,"context_line":"    def _get_memory_encryption_inventories(self):"}],"source_content_type":"text/x-python","patch_set":32,"id":"bb29e3a7_a8592d7e","line":9785,"updated":"2025-08-26 20:15:04.000000000","message":"there we allocate one on the nested RP...","commit_id":"5b89f6c6eea8103af2965c51faf1272de4b4a5ed"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"ee5bee678d3b16fbc89e888052606b2bb838706f","unresolved":false,"context_lines":[{"line_number":9783,"context_line":"                orc.MEM_ENCRYPTION_CONTEXT: 1"},{"line_number":9784,"context_line":"            }"},{"line_number":9785,"context_line":"        }"},{"line_number":9786,"context_line":"        del resources[orc.MEM_ENCRYPTION_CONTEXT]"},{"line_number":9787,"context_line":""},{"line_number":9788,"context_line":"    def _get_memory_encryption_inventories(self):"},{"line_number":9789,"context_line":"        \"\"\"Returns the inventories for MEM_ENCRYPTION_CONTEXT."}],"source_content_type":"text/x-python","patch_set":32,"id":"fdc57451_3bde4119","line":9786,"updated":"2025-08-26 20:15:04.000000000","message":"... and here, we delete the allocation on the root RP.","commit_id":"5b89f6c6eea8103af2965c51faf1272de4b4a5ed"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"6af625d48a5697ffd43a59baa69f4022ff155b7d","unresolved":true,"context_lines":[{"line_number":9939,"context_line":"        When reshaping, inventory and allocations should be on the root node"},{"line_number":9940,"context_line":"        provider and then moved to child providers."},{"line_number":9941,"context_line":""},{"line_number":9942,"context_line":"        :param rsc_name: Resource class name"},{"line_number":9943,"context_line":"        :param rp_uuid: UUID of the provider that holds inventory/allocations."},{"line_number":9944,"context_line":"        :param root_node: ProviderData object representing the root node in a"},{"line_number":9945,"context_line":"            provider tree."}],"source_content_type":"text/x-python","patch_set":32,"id":"8545a876_db75fcc4","line":9942,"range":{"start_line":9942,"start_character":15,"end_line":9942,"end_character":23},"updated":"2025-08-26 18:04:02.000000000","message":"Oops. This should be rc_name (but I hope it\u0027s a nit ...)","commit_id":"5b89f6c6eea8103af2965c51faf1272de4b4a5ed"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"d572254a74fa52d52c8daa7627e161d99c5d3bce","unresolved":false,"context_lines":[{"line_number":9939,"context_line":"        When reshaping, inventory and allocations should be on the root node"},{"line_number":9940,"context_line":"        provider and then moved to child providers."},{"line_number":9941,"context_line":""},{"line_number":9942,"context_line":"        :param rsc_name: Resource class name"},{"line_number":9943,"context_line":"        :param rp_uuid: UUID of the provider that holds inventory/allocations."},{"line_number":9944,"context_line":"        :param root_node: ProviderData object representing the root node in a"},{"line_number":9945,"context_line":"            provider tree."}],"source_content_type":"text/x-python","patch_set":32,"id":"af8e106c_7d365844","line":9942,"range":{"start_line":9942,"start_character":15,"end_line":9942,"end_character":23},"in_reply_to":"8545a876_db75fcc4","updated":"2025-08-27 13:58:51.000000000","message":"Done","commit_id":"5b89f6c6eea8103af2965c51faf1272de4b4a5ed"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"4edac15f7616d3216735f2cc0c9a4c64fe513bc3","unresolved":false,"context_lines":[{"line_number":9647,"context_line":"        me_rps \u003d self._ensure_memory_encryption_providers("},{"line_number":9648,"context_line":"            inventories_dict, provider_tree, nodename)"},{"line_number":9649,"context_line":""},{"line_number":9650,"context_line":"        if self._is_reshape_needed_memory_encryption_on_root(provider_tree,"},{"line_number":9651,"context_line":"                                                             nodename):"},{"line_number":9652,"context_line":"            if allocations is None:"},{"line_number":9653,"context_line":"                LOG.info(\u0027Requesting provider tree reshape in order to move \u0027"},{"line_number":9654,"context_line":"                         \u0027memory encryption context inventory from the root \u0027"}],"source_content_type":"text/x-python","patch_set":33,"id":"83785cd1_c6f8ee34","line":9651,"range":{"start_line":9650,"start_character":0,"end_line":9651,"end_character":70},"updated":"2025-08-27 20:15:40.000000000","message":"```suggestion\n        if self._is_reshape_needed_memory_encryption_on_root(\n            provider_tree, nodename):\n```\n\nwhen you need to put parater on a new line you shoudl move all of them and\nindent one level.\n\nit give you back way more horizontal space and save vertical space.\n\npep8 and imporantly autopep8 allows this so in general i woudl be nice to follw this style for new code.\n\nalso imporantly put the close peren on the same line so not this\n\n```\n        if self._is_reshape_needed_memory_encryption_on_root(\n            provider_tree, nodename\n        ):\n```\n\nor dan will be sad. this is also valid pep8 but it take more virtical space making it harder to read the full function at once.\n\nthis is not enough to ask you to respin but it make the code eiser to maintian if we follow that rule\n\nif it need more then 1 line move all args so you can dedent the arguments.\n\nim only mentioning it because it pull my attention away form review the actual code change since it harder to read when all the args are packed over to the right","commit_id":"b7c7d45093c9f6f2e3eac5433f3d614ba1cb9a44"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"9449082c58e275d4c59c720282c9980f33431fc2","unresolved":false,"context_lines":[{"line_number":9647,"context_line":"        me_rps \u003d self._ensure_memory_encryption_providers("},{"line_number":9648,"context_line":"            inventories_dict, provider_tree, nodename)"},{"line_number":9649,"context_line":""},{"line_number":9650,"context_line":"        if self._is_reshape_needed_memory_encryption_on_root(provider_tree,"},{"line_number":9651,"context_line":"                                                             nodename):"},{"line_number":9652,"context_line":"            if allocations is None:"},{"line_number":9653,"context_line":"                LOG.info(\u0027Requesting provider tree reshape in order to move \u0027"},{"line_number":9654,"context_line":"                         \u0027memory encryption context inventory from the root \u0027"}],"source_content_type":"text/x-python","patch_set":33,"id":"99b36734_bb35b79a","line":9651,"range":{"start_line":9650,"start_character":0,"end_line":9651,"end_character":70},"in_reply_to":"83785cd1_c6f8ee34","updated":"2025-08-29 04:07:43.000000000","message":"I\u0027ll address this by https://review.opendev.org/c/openstack/nova/+/958822 .","commit_id":"b7c7d45093c9f6f2e3eac5433f3d614ba1cb9a44"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"4edac15f7616d3216735f2cc0c9a4c64fe513bc3","unresolved":false,"context_lines":[{"line_number":9665,"context_line":"                provider_tree.update_inventory(nodename, root_node.inventory)"},{"line_number":9666,"context_line":""},{"line_number":9667,"context_line":"    @staticmethod"},{"line_number":9668,"context_line":"    def _is_reshape_needed_memory_encryption_on_root(provider_tree, nodename):"},{"line_number":9669,"context_line":"        \"\"\"Determine if root RP has MEM_ENCRYPTION_CONTEXT inventories."},{"line_number":9670,"context_line":""},{"line_number":9671,"context_line":"        Check to see if the root compute node provider in the tree for"}],"source_content_type":"text/x-python","patch_set":33,"id":"4156c2ef_0bec6241","line":9668,"updated":"2025-08-27 20:15:40.000000000","message":"nit: again just a style thing that you do nto need to change but evnthough python\ndoes not care about declaration order in this case it would be nice if you had defiend thse before you used them as i kept finding my self scrolling down and jumping back up to understand what was happening.","commit_id":"b7c7d45093c9f6f2e3eac5433f3d614ba1cb9a44"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"9449082c58e275d4c59c720282c9980f33431fc2","unresolved":false,"context_lines":[{"line_number":9665,"context_line":"                provider_tree.update_inventory(nodename, root_node.inventory)"},{"line_number":9666,"context_line":""},{"line_number":9667,"context_line":"    @staticmethod"},{"line_number":9668,"context_line":"    def _is_reshape_needed_memory_encryption_on_root(provider_tree, nodename):"},{"line_number":9669,"context_line":"        \"\"\"Determine if root RP has MEM_ENCRYPTION_CONTEXT inventories."},{"line_number":9670,"context_line":""},{"line_number":9671,"context_line":"        Check to see if the root compute node provider in the tree for"}],"source_content_type":"text/x-python","patch_set":33,"id":"519983e1_f275b806","line":9668,"in_reply_to":"4156c2ef_0bec6241","updated":"2025-08-29 04:07:43.000000000","message":"yeah I agree with you though I followed the order of existing vgpu reshape functions. We can \"fix\" the order but I\u0027ll leave it now to avoid mass git blame change.","commit_id":"b7c7d45093c9f6f2e3eac5433f3d614ba1cb9a44"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"4edac15f7616d3216735f2cc0c9a4c64fe513bc3","unresolved":true,"context_lines":[{"line_number":9775,"context_line":"                     \u0027%(rp_uuid)s are allocated by %(consumer_uuid)s but \u0027"},{"line_number":9776,"context_line":"                     \u0027the child resource provider for AMD SEV is not found.\u0027)"},{"line_number":9777,"context_line":"                   % {\u0027rp_uuid\u0027: rp_uuid, \u0027consumer_uuid\u0027: consumer_uuid})"},{"line_number":9778,"context_line":"            raise exception.ReshapeFailed(error\u003dmsg)"},{"line_number":9779,"context_line":""},{"line_number":9780,"context_line":"        allocs \u003d alloc_data[\u0027allocations\u0027]"},{"line_number":9781,"context_line":"        allocs[sev_rp.uuid] \u003d {"}],"source_content_type":"text/x-python","patch_set":33,"id":"797d6e77_26d75216","line":9778,"updated":"2025-08-27 20:15:40.000000000","message":"so this shoudl only happen if a vm on a hsot was using sev. and hten out of band the admin disbaled it on the host or something like that.\n\nbasicly we would only hit this case if something was very wrong or if we acindeltly called this fucntion before we create the nested RPs.\n\n\nwe dont currently ahve test coverag eof this edge case at least in the unit tests but i think we can build on that later in teh serise.\n\nthe same is ture for several fo the \"if it exsits remove it codepaths\" even in the final patch in the sereise.\n\nhttps://6fe7a4c45f2f7bdcea66-eeccdc6968a6b16fa4ca2e3ee7c1080d.ssl.cf5.rackcdn.com/openstack/4afbf092d4004d6495b7273f78392931/cover/z_155e0da3f29b7c55_driver_py.html#t9662\n\nalthough you are buildign out better functinal coverage as you go and the functional tests are not counted in the code coverage.","commit_id":"b7c7d45093c9f6f2e3eac5433f3d614ba1cb9a44"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"9449082c58e275d4c59c720282c9980f33431fc2","unresolved":true,"context_lines":[{"line_number":9775,"context_line":"                     \u0027%(rp_uuid)s are allocated by %(consumer_uuid)s but \u0027"},{"line_number":9776,"context_line":"                     \u0027the child resource provider for AMD SEV is not found.\u0027)"},{"line_number":9777,"context_line":"                   % {\u0027rp_uuid\u0027: rp_uuid, \u0027consumer_uuid\u0027: consumer_uuid})"},{"line_number":9778,"context_line":"            raise exception.ReshapeFailed(error\u003dmsg)"},{"line_number":9779,"context_line":""},{"line_number":9780,"context_line":"        allocs \u003d alloc_data[\u0027allocations\u0027]"},{"line_number":9781,"context_line":"        allocs[sev_rp.uuid] \u003d {"}],"source_content_type":"text/x-python","patch_set":33,"id":"8ae5b6c0_7ed5afbb","line":9778,"in_reply_to":"797d6e77_26d75216","updated":"2025-08-29 04:07:43.000000000","message":"I tried to fix it quickly but failed so didn\u0027t address this point in https://review.opendev.org/c/openstack/nova/+/958822 . Will take one more cycle to try covering this.","commit_id":"b7c7d45093c9f6f2e3eac5433f3d614ba1cb9a44"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"4edac15f7616d3216735f2cc0c9a4c64fe513bc3","unresolved":false,"context_lines":[{"line_number":9964,"context_line":"                      \u0027consumer_uuid\u0027: consumer_uuid,"},{"line_number":9965,"context_line":"                      \u0027alloc_data\u0027: alloc_data,"},{"line_number":9966,"context_line":"                      \u0027root_uuid\u0027: root_node.uuid})"},{"line_number":9967,"context_line":"            raise exception.ReshapeFailed(error\u003dmsg)"},{"line_number":9968,"context_line":""},{"line_number":9969,"context_line":"    def _get_assigned_mdevs_for_reshape("},{"line_number":9970,"context_line":"            self, instance_uuid, rp_uuid, alloc_data):"}],"source_content_type":"text/x-python","patch_set":33,"id":"d21b7adb_8730e93d","line":9967,"updated":"2025-08-27 20:15:40.000000000","message":"ah i see\n\ni was going to say the funtion should not need to care about the resocue class to determin if the provider is a root provider but we are using it to create the excption to know which rechape is failing.\n\n+1","commit_id":"b7c7d45093c9f6f2e3eac5433f3d614ba1cb9a44"}]}
