)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"de8bf2cbddb1fae23077e4857c62e5c26115b9c5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"4def4398_cfb2ea43","updated":"2026-08-10 10:26:18.000000000","message":"just a comment typo","commit_id":"435c5a9a6fb77003c8843338d980f035da45b302"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ed46c4e33065017a29e2b9ffd8c2a9408d1335b5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"50f75bcd_e9db3e36","updated":"2026-07-24 16:56:26.000000000","message":"looks good to me.","commit_id":"435c5a9a6fb77003c8843338d980f035da45b302"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"7cb4e662ea3f1506577f15ab5b307e016a0f691d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"3dd4f98c_30b9ff4f","updated":"2026-08-27 07:58:09.000000000","message":"test failure is relevant","commit_id":"2d35039085e41e6b90170b69bdd0d6b7d81f8522"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"220814ff95c08a1dbe28d0c59dcc61417816c57c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"982c1a7c_c57055ea","updated":"2026-08-28 00:30:24.000000000","message":"recheck known flakiness of nova-tox-functional-py313-threading","commit_id":"8d07d9a09186f8d73262bb881ea0c0bf096fd0cc"}],"nova/tests/functional/libvirt/test_report_cpu_traits.py":[{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"de8bf2cbddb1fae23077e4857c62e5c26115b9c5","unresolved":true,"context_lines":[{"line_number":452,"context_line":"        self.assertMemEncryptionSlotsEqual(self.host_uuid, 0)"},{"line_number":453,"context_line":""},{"line_number":454,"context_line":"    def _assert_tdx_rps(self, enabled):"},{"line_number":455,"context_line":"        \"\"\"Assert presence of sub-PRs representing TDX capacility\"\"\""},{"line_number":456,"context_line":""},{"line_number":457,"context_line":"        # sanity checks for root RP"},{"line_number":458,"context_line":"        self._assert_global_tdx_traits()"}],"source_content_type":"text/x-python","patch_set":2,"id":"37c53ff8_ebdbef9f","line":455,"range":{"start_line":455,"start_character":30,"end_line":455,"end_character":37},"updated":"2026-08-10 10:26:18.000000000","message":"heh, sub-RPs","commit_id":"435c5a9a6fb77003c8843338d980f035da45b302"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"263f6b6a6f5b5fccd9ff2019496afe02ad85a47a","unresolved":false,"context_lines":[{"line_number":452,"context_line":"        self.assertMemEncryptionSlotsEqual(self.host_uuid, 0)"},{"line_number":453,"context_line":""},{"line_number":454,"context_line":"    def _assert_tdx_rps(self, enabled):"},{"line_number":455,"context_line":"        \"\"\"Assert presence of sub-PRs representing TDX capacility\"\"\""},{"line_number":456,"context_line":""},{"line_number":457,"context_line":"        # sanity checks for root RP"},{"line_number":458,"context_line":"        self._assert_global_tdx_traits()"}],"source_content_type":"text/x-python","patch_set":2,"id":"162d204f_6ecc1b7b","line":455,"range":{"start_line":455,"start_character":30,"end_line":455,"end_character":37},"in_reply_to":"37c53ff8_ebdbef9f","updated":"2026-08-27 08:16:45.000000000","message":"Done","commit_id":"435c5a9a6fb77003c8843338d980f035da45b302"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ed46c4e33065017a29e2b9ffd8c2a9408d1335b5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"f706fb7d_cef69d78","line":501,"updated":"2026-07-24 16:56:26.000000000","message":"nice coverage. thanks.","commit_id":"435c5a9a6fb77003c8843338d980f035da45b302"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"34f46bb5f223e695f9fda134961acd4457fcb7b4","unresolved":false,"context_lines":[{"line_number":336,"context_line":"        return [rp for rp in rps"},{"line_number":337,"context_line":"                if rp[\u0027name\u0027] \u003d\u003d \u0027%s_intel_tdx\u0027 % root_rp[\u0027name\u0027]]"},{"line_number":338,"context_line":""},{"line_number":339,"context_line":"    @contextlib.contextmanager"},{"line_number":340,"context_line":"    def _patch_tdx_capability(self, enabled):"},{"line_number":341,"context_line":"        \"\"\"Patch /sys/fs/cgroup/misc.capacity and domain tdx capability"},{"line_number":342,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"25fcd695_4da98b5d","line":339,"updated":"2026-08-27 09:01:44.000000000","message":"pep8: F821 undefined name \u0027contextlib\u0027","commit_id":"c20bb02eb2862722fe157039443ce747b5de2845"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"01eb644316155872bb01c91e483598eae030ce9c","unresolved":true,"context_lines":[{"line_number":336,"context_line":"        return [rp for rp in rps"},{"line_number":337,"context_line":"                if rp[\u0027name\u0027] \u003d\u003d \u0027%s_intel_tdx\u0027 % root_rp[\u0027name\u0027]]"},{"line_number":338,"context_line":""},{"line_number":339,"context_line":"    @contextlib.contextmanager"},{"line_number":340,"context_line":"    def _patch_tdx_capability(self, enabled):"},{"line_number":341,"context_line":"        \"\"\"Patch /sys/fs/cgroup/misc.capacity and domain tdx capability"},{"line_number":342,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"ed94e1c0_5755353e","line":339,"updated":"2026-08-27 08:30:37.000000000","message":"this triggers an import error","commit_id":"c20bb02eb2862722fe157039443ce747b5de2845"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"9226a818136c3e305811fe7fb83281433c5f989c","unresolved":false,"context_lines":[{"line_number":336,"context_line":"        return [rp for rp in rps"},{"line_number":337,"context_line":"                if rp[\u0027name\u0027] \u003d\u003d \u0027%s_intel_tdx\u0027 % root_rp[\u0027name\u0027]]"},{"line_number":338,"context_line":""},{"line_number":339,"context_line":"    @contextlib.contextmanager"},{"line_number":340,"context_line":"    def _patch_tdx_capability(self, enabled):"},{"line_number":341,"context_line":"        \"\"\"Patch /sys/fs/cgroup/misc.capacity and domain tdx capability"},{"line_number":342,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"c29ba40a_a56d7d1d","line":339,"in_reply_to":"ed94e1c0_5755353e","updated":"2026-08-27 10:39:06.000000000","message":"Done","commit_id":"c20bb02eb2862722fe157039443ce747b5de2845"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"34f46bb5f223e695f9fda134961acd4457fcb7b4","unresolved":false,"context_lines":[{"line_number":343,"context_line":"        Domain tdx capability is changed according to the expected presence"},{"line_number":344,"context_line":"        of TDX."},{"line_number":345,"context_line":"        \"\"\""},{"line_number":346,"context_line":"        real_exists \u003d os.path.exists"},{"line_number":347,"context_line":"        real_open \u003d builtins.open"},{"line_number":348,"context_line":""},{"line_number":349,"context_line":"        def fake_exists(path):"}],"source_content_type":"text/x-python","patch_set":4,"id":"3ded335b_e5bd7131","line":346,"updated":"2026-08-27 09:01:44.000000000","message":"pep8: F821 undefined name \u0027os\u0027","commit_id":"c20bb02eb2862722fe157039443ce747b5de2845"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"34f46bb5f223e695f9fda134961acd4457fcb7b4","unresolved":false,"context_lines":[{"line_number":344,"context_line":"        of TDX."},{"line_number":345,"context_line":"        \"\"\""},{"line_number":346,"context_line":"        real_exists \u003d os.path.exists"},{"line_number":347,"context_line":"        real_open \u003d builtins.open"},{"line_number":348,"context_line":""},{"line_number":349,"context_line":"        def fake_exists(path):"},{"line_number":350,"context_line":"            if path \u003d\u003d libvirt_host.MISC_CONTROL_GROUP_CAPACITY_FILE:"}],"source_content_type":"text/x-python","patch_set":4,"id":"70504d01_a9e630cd","line":347,"updated":"2026-08-27 09:01:44.000000000","message":"pep8: F821 undefined name \u0027builtins\u0027","commit_id":"c20bb02eb2862722fe157039443ce747b5de2845"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"34f46bb5f223e695f9fda134961acd4457fcb7b4","unresolved":false,"context_lines":[{"line_number":353,"context_line":""},{"line_number":354,"context_line":"        def fake_open(path, *args, **kwargs):"},{"line_number":355,"context_line":"            if path \u003d\u003d libvirt_host.MISC_CONTROL_GROUP_CAPACITY_FILE:"},{"line_number":356,"context_line":"                return mock.mock_open(read_data\u003d\u0027tdx 63\\n\u0027)(path)"},{"line_number":357,"context_line":"            return real_open(path, *args, **kwargs)"},{"line_number":358,"context_line":""},{"line_number":359,"context_line":"        if enabled:"}],"source_content_type":"text/x-python","patch_set":4,"id":"46d2157d_11eb8e6d","line":356,"updated":"2026-08-27 09:01:44.000000000","message":"pep8: F821 undefined name \u0027mock\u0027","commit_id":"c20bb02eb2862722fe157039443ce747b5de2845"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"34f46bb5f223e695f9fda134961acd4457fcb7b4","unresolved":false,"context_lines":[{"line_number":363,"context_line":"            caps \u003d (fakelibvirt.virConnect."},{"line_number":364,"context_line":"                    _domain_capability_features_with_TDX_unsupported)"},{"line_number":365,"context_line":""},{"line_number":366,"context_line":"        with mock.patch(\u0027os.path.exists\u0027) as mock_exists, \\"},{"line_number":367,"context_line":"                mock.patch(\u0027builtins.open\u0027) as mock_open, \\"},{"line_number":368,"context_line":"                mock.patch.object(fakelibvirt.virConnect,"},{"line_number":369,"context_line":"                                  \u0027_domain_capability_features\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"8067ab91_4441695d","line":366,"updated":"2026-08-27 09:01:44.000000000","message":"pep8: F821 undefined name \u0027mock\u0027","commit_id":"c20bb02eb2862722fe157039443ce747b5de2845"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"34f46bb5f223e695f9fda134961acd4457fcb7b4","unresolved":false,"context_lines":[{"line_number":364,"context_line":"                    _domain_capability_features_with_TDX_unsupported)"},{"line_number":365,"context_line":""},{"line_number":366,"context_line":"        with mock.patch(\u0027os.path.exists\u0027) as mock_exists, \\"},{"line_number":367,"context_line":"                mock.patch(\u0027builtins.open\u0027) as mock_open, \\"},{"line_number":368,"context_line":"                mock.patch.object(fakelibvirt.virConnect,"},{"line_number":369,"context_line":"                                  \u0027_domain_capability_features\u0027,"},{"line_number":370,"context_line":"                                  new\u003dcaps):"}],"source_content_type":"text/x-python","patch_set":4,"id":"6ec80e66_fee8dace","line":367,"updated":"2026-08-27 09:01:44.000000000","message":"pep8: F821 undefined name \u0027mock\u0027","commit_id":"c20bb02eb2862722fe157039443ce747b5de2845"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"34f46bb5f223e695f9fda134961acd4457fcb7b4","unresolved":false,"context_lines":[{"line_number":365,"context_line":""},{"line_number":366,"context_line":"        with mock.patch(\u0027os.path.exists\u0027) as mock_exists, \\"},{"line_number":367,"context_line":"                mock.patch(\u0027builtins.open\u0027) as mock_open, \\"},{"line_number":368,"context_line":"                mock.patch.object(fakelibvirt.virConnect,"},{"line_number":369,"context_line":"                                  \u0027_domain_capability_features\u0027,"},{"line_number":370,"context_line":"                                  new\u003dcaps):"},{"line_number":371,"context_line":"            mock_exists.side_effect \u003d fake_exists"}],"source_content_type":"text/x-python","patch_set":4,"id":"7c89e689_8b225a97","line":368,"updated":"2026-08-27 09:01:44.000000000","message":"pep8: F821 undefined name \u0027mock\u0027","commit_id":"c20bb02eb2862722fe157039443ce747b5de2845"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"34f46bb5f223e695f9fda134961acd4457fcb7b4","unresolved":false,"context_lines":[{"line_number":375,"context_line":""},{"line_number":376,"context_line":"            if enabled:"},{"line_number":377,"context_line":"                mock_exists.assert_has_calls(["},{"line_number":378,"context_line":"                    mock.call(libvirt_host.MISC_CONTROL_GROUP_CAPACITY_FILE)"},{"line_number":379,"context_line":"                ])"},{"line_number":380,"context_line":"                mock_open.assert_has_calls(["},{"line_number":381,"context_line":"                    mock.call(libvirt_host.MISC_CONTROL_GROUP_CAPACITY_FILE)"}],"source_content_type":"text/x-python","patch_set":4,"id":"98c1faaf_97a0ca6b","line":378,"updated":"2026-08-27 09:01:44.000000000","message":"pep8: F821 undefined name \u0027mock\u0027","commit_id":"c20bb02eb2862722fe157039443ce747b5de2845"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"34f46bb5f223e695f9fda134961acd4457fcb7b4","unresolved":false,"context_lines":[{"line_number":378,"context_line":"                    mock.call(libvirt_host.MISC_CONTROL_GROUP_CAPACITY_FILE)"},{"line_number":379,"context_line":"                ])"},{"line_number":380,"context_line":"                mock_open.assert_has_calls(["},{"line_number":381,"context_line":"                    mock.call(libvirt_host.MISC_CONTROL_GROUP_CAPACITY_FILE)"},{"line_number":382,"context_line":"                ])"},{"line_number":383,"context_line":""},{"line_number":384,"context_line":"    def _assert_global_tdx_traits(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"0e8aa314_d6996d92","line":381,"updated":"2026-08-27 09:01:44.000000000","message":"pep8: F821 undefined name \u0027mock\u0027","commit_id":"c20bb02eb2862722fe157039443ce747b5de2845"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"fb455920210847a0cd3a903dad693282a67c28f8","unresolved":false,"context_lines":[{"line_number":432,"context_line":"        mocking), after a restart of the compute service, the TDX sub-RP is"},{"line_number":433,"context_line":"        created/deleted."},{"line_number":434,"context_line":"        \"\"\""},{"line_number":435,"context_line":"        self.flags(cpu_mode\u003d\"host-passthrough\", group\u003d\"libvirt\")"},{"line_number":436,"context_line":""},{"line_number":437,"context_line":"        self.start_compute_with_tdx(before)"},{"line_number":438,"context_line":"        self._assert_host_tdx_support(before)"}],"source_content_type":"text/x-python","patch_set":4,"id":"addabf76_cce825b3","line":435,"range":{"start_line":435,"start_character":8,"end_line":435,"end_character":64},"updated":"2026-08-27 08:17:26.000000000","message":"We need this since the cpu_mode check was introduced into the capability detection logic.","commit_id":"c20bb02eb2862722fe157039443ce747b5de2845"},{"author":{"_account_id":38744,"name":"Anton Iacobaeus","display_name":"antia","email":"anton.iacobaeus@canarybit.eu","username":"antia","status":"Canary Bit"},"change_message_id":"05d544b1b7d4b0b5bb354f817c12ea78cb87127b","unresolved":false,"context_lines":[{"line_number":432,"context_line":"        mocking), after a restart of the compute service, the TDX sub-RP is"},{"line_number":433,"context_line":"        created/deleted."},{"line_number":434,"context_line":"        \"\"\""},{"line_number":435,"context_line":"        self.flags(cpu_mode\u003d\"host-passthrough\", group\u003d\"libvirt\")"},{"line_number":436,"context_line":""},{"line_number":437,"context_line":"        self.start_compute_with_tdx(before)"},{"line_number":438,"context_line":"        self._assert_host_tdx_support(before)"}],"source_content_type":"text/x-python","patch_set":4,"id":"b67b5750_e427e722","line":435,"range":{"start_line":435,"start_character":8,"end_line":435,"end_character":64},"in_reply_to":"addabf76_cce825b3","updated":"2026-08-28 13:02:57.000000000","message":"Good catch!","commit_id":"c20bb02eb2862722fe157039443ce747b5de2845"}]}
