)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":12404,"name":"Rico Lin","email":"ricolin@ricolky.com","username":"rico.lin"},"change_message_id":"f1181c68ed58fe468e16391a7c2f0e8ce11efe51","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"831e25f6_9141e965","updated":"2026-07-10 03:16:41.000000000","message":"recheck","commit_id":"8629db504f7566f259d04c1ae3a75e00cf138dbc"}],"cinder/tests/unit/volume/drivers/test_rbd.py":[{"author":{"_account_id":12404,"name":"Rico Lin","email":"ricolin@ricolky.com","username":"rico.lin"},"change_message_id":"76fec2b731e07ee2837ebd5a94177af0ef2d9aac","unresolved":true,"context_lines":[{"line_number":2123,"context_line":"                concurrent_processes\u003d1))"},{"line_number":2124,"context_line":""},{"line_number":2125,"context_line":"        # Verify semaphore exists"},{"line_number":2126,"context_line":"        self.assertIsNotNone(self.driver._image_conversion_semaphore)"},{"line_number":2127,"context_line":""},{"line_number":2128,"context_line":"        self.driver.copy_image_to_volume("},{"line_number":2129,"context_line":"            self.context, self.volume_a, mock_image_service, \u0027test-image-id\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"bca8e7c8_dce2d24a","line":2126,"updated":"2026-07-10 06:29:41.000000000","message":"This assertion only proves that a semaphore object was constructed; it would still pass if _copy_image_to_volume stopped entering the semaphore. Please replace it with a context-manager mock that verifies the fetch occurs while entered, or add a deterministic concurrent test that proves the configured limit is enforced.","commit_id":"8629db504f7566f259d04c1ae3a75e00cf138dbc"},{"author":{"_account_id":12404,"name":"Rico Lin","email":"ricolin@ricolky.com","username":"rico.lin"},"change_message_id":"3804259ef466da41f5916b53aa1bffde77cc3c44","unresolved":true,"context_lines":[{"line_number":2123,"context_line":"                concurrent_processes\u003d1))"},{"line_number":2124,"context_line":""},{"line_number":2125,"context_line":"        # Verify semaphore exists"},{"line_number":2126,"context_line":"        self.assertIsNotNone(self.driver._image_conversion_semaphore)"},{"line_number":2127,"context_line":""},{"line_number":2128,"context_line":"        self.driver.copy_image_to_volume("},{"line_number":2129,"context_line":"            self.context, self.volume_a, mock_image_service, \u0027test-image-id\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"041da7f4_5487f1bf","line":2126,"updated":"2026-07-10 06:20:55.000000000","message":"This only asserts that a semaphore object exists; it does not prove that _copy_image_to_volume enters it or enforces the configured limit. Please use a context-manager mock and assert that fetch runs inside it, or add a deterministic concurrent test that proves the limit. The live single-worker behavior was correct, but this test would not catch a regression that stopped using the semaphore.","commit_id":"8629db504f7566f259d04c1ae3a75e00cf138dbc"},{"author":{"_account_id":12404,"name":"Rico Lin","email":"ricolin@ricolky.com","username":"rico.lin"},"change_message_id":"582d493aa5176e7f26740b944bdbde18c57e4c06","unresolved":false,"context_lines":[{"line_number":2123,"context_line":"                concurrent_processes\u003d1))"},{"line_number":2124,"context_line":""},{"line_number":2125,"context_line":"        # Verify semaphore exists"},{"line_number":2126,"context_line":"        self.assertIsNotNone(self.driver._image_conversion_semaphore)"},{"line_number":2127,"context_line":""},{"line_number":2128,"context_line":"        self.driver.copy_image_to_volume("},{"line_number":2129,"context_line":"            self.context, self.volume_a, mock_image_service, \u0027test-image-id\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"08044c5f_93c9d8c3","line":2126,"in_reply_to":"041da7f4_5487f1bf","updated":"2026-07-10 06:28:14.000000000","message":"Done","commit_id":"8629db504f7566f259d04c1ae3a75e00cf138dbc"},{"author":{"_account_id":12404,"name":"Rico Lin","email":"ricolin@ricolky.com","username":"rico.lin"},"change_message_id":"76fec2b731e07ee2837ebd5a94177af0ef2d9aac","unresolved":false,"context_lines":[{"line_number":2123,"context_line":"                concurrent_processes\u003d1))"},{"line_number":2124,"context_line":""},{"line_number":2125,"context_line":"        # Verify semaphore exists"},{"line_number":2126,"context_line":"        self.assertIsNotNone(self.driver._image_conversion_semaphore)"},{"line_number":2127,"context_line":""},{"line_number":2128,"context_line":"        self.driver.copy_image_to_volume("},{"line_number":2129,"context_line":"            self.context, self.volume_a, mock_image_service, \u0027test-image-id\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"c15406bc_c7c36bcc","line":2126,"in_reply_to":"041da7f4_5487f1bf","updated":"2026-07-10 06:29:41.000000000","message":"Superseded by the implementation-focused review comment on this line.","commit_id":"8629db504f7566f259d04c1ae3a75e00cf138dbc"}]}
