)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":34510,"name":"Maxim Sava","email":"msava@redhat.com","username":"msava@redhat.com"},"change_message_id":"0cec79f0e65d86ec60cbdf801bd7938a570f6433","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":2,"id":"ad7b9f2a_7311db1f","updated":"2025-12-11 08:06:48.000000000","message":"Duplicate,we already have concurency tests in [1]\nand waiting for your review [1]https://review.opendev.org/c/openstack/tempest/+/945320?usp\u003ddashboard","commit_id":"ab8c51baccbe3ddbfd8e73843e0ee19edb6dd372"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"0cf3bda5176e89ec68b15663a3e53a61fbdbd969","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":2,"id":"1f72be91_db8addaa","in_reply_to":"ad7b9f2a_7311db1f","updated":"2026-01-06 17:01:47.000000000","message":"++, let\u0027s not duplicate what covered in https://review.opendev.org/c/openstack/tempest/+/945320. It is still in my list and will try to review it this week sometime.","commit_id":"ab8c51baccbe3ddbfd8e73843e0ee19edb6dd372"},{"author":{"_account_id":19262,"name":"Liron Kuchlani","email":"lkuchlan@redhat.com","username":"lkuchlan"},"change_message_id":"800763246e38e059305846edd4b7fb7cf61d15ff","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"ee85447d_c6d506dc","updated":"2026-01-27 09:17:54.000000000","message":"Thanks Ghanshyam for your comments","commit_id":"d486e97a34e466e3579e6d403ff40994ff9ca7d8"},{"author":{"_account_id":19262,"name":"Liron Kuchlani","email":"lkuchlan@redhat.com","username":"lkuchlan"},"change_message_id":"38511984f0f161bf8665a3f0375e99a14d5a8ecb","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"bd076ab2_1137d57d","updated":"2026-01-27 12:44:44.000000000","message":"recheck","commit_id":"998bb2bba6cfce8277eb6513b1dce72bd0a3a359"}],"glance_tempest_plugin/common/concurrency.py":[{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"90c5b13d935b69809f2230e9c09a4f32fd228297","unresolved":true,"context_lines":[{"line_number":26,"context_line":"    resource_ids \u003d manager.list()"},{"line_number":27,"context_line":"    # To capture exceptions"},{"line_number":28,"context_line":"    errors \u003d manager.list()"},{"line_number":29,"context_line":"    resource_count \u003d CONF.image.concurrent_resource_count"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def wrapped_target(index, resource_ids, **kwargs):"},{"line_number":32,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":2,"id":"ae75fe3a_92d93cca","line":29,"range":{"start_line":29,"start_character":0,"end_line":29,"end_character":57},"updated":"2026-01-06 17:01:11.000000000","message":"I will suggest to take this as a arg from caller and test using this method can pass the concurrency they want to run for per operation.","commit_id":"ab8c51baccbe3ddbfd8e73843e0ee19edb6dd372"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"90c5b13d935b69809f2230e9c09a4f32fd228297","unresolved":true,"context_lines":[{"line_number":42,"context_line":"            kwargs\u003dkwargs"},{"line_number":43,"context_line":"        )"},{"line_number":44,"context_line":"        processes.append(p)"},{"line_number":45,"context_line":"        p.start()"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    for p in processes:"},{"line_number":48,"context_line":"        p.join()"}],"source_content_type":"text/x-python","patch_set":2,"id":"757627ed_990d03b0","line":45,"range":{"start_line":45,"start_character":0,"end_line":45,"end_character":17},"updated":"2026-01-06 17:01:11.000000000","message":"I would suggest to start each process out of this for loop so that we can make sure each operation is running in parallel instead of some are finished before next process is ready and start.","commit_id":"ab8c51baccbe3ddbfd8e73843e0ee19edb6dd372"}],"glance_tempest_plugin/config.py":[{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"90c5b13d935b69809f2230e9c09a4f32fd228297","unresolved":true,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":"concurrency_option \u003d ["},{"line_number":30,"context_line":"    cfg.IntOpt(\u0027concurrent_resource_count\u0027,"},{"line_number":31,"context_line":"               default\u003d5,"},{"line_number":32,"context_line":"               help\u003d\u0027Number of resources to create concurrently.\u0027),"},{"line_number":33,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":2,"id":"1475dbb3_77d93c48","line":31,"range":{"start_line":31,"start_character":23,"end_line":31,"end_character":25},"updated":"2026-01-06 17:01:11.000000000","message":"I will keep this default as 2 for upstream CI and it can be overridden in jobs if needed","commit_id":"ab8c51baccbe3ddbfd8e73843e0ee19edb6dd372"},{"author":{"_account_id":19262,"name":"Liron Kuchlani","email":"lkuchlan@redhat.com","username":"lkuchlan"},"change_message_id":"800763246e38e059305846edd4b7fb7cf61d15ff","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":"concurrency_option \u003d ["},{"line_number":30,"context_line":"    cfg.IntOpt(\u0027concurrent_resource_count\u0027,"},{"line_number":31,"context_line":"               default\u003d5,"},{"line_number":32,"context_line":"               help\u003d\u0027Number of resources to create concurrently.\u0027),"},{"line_number":33,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":2,"id":"f4716c3a_7f21d664","line":31,"range":{"start_line":31,"start_character":23,"end_line":31,"end_character":25},"in_reply_to":"1475dbb3_77d93c48","updated":"2026-01-27 09:17:54.000000000","message":"Done","commit_id":"ab8c51baccbe3ddbfd8e73843e0ee19edb6dd372"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"90c5b13d935b69809f2230e9c09a4f32fd228297","unresolved":true,"context_lines":[{"line_number":29,"context_line":"concurrency_option \u003d ["},{"line_number":30,"context_line":"    cfg.IntOpt(\u0027concurrent_resource_count\u0027,"},{"line_number":31,"context_line":"               default\u003d5,"},{"line_number":32,"context_line":"               help\u003d\u0027Number of resources to create concurrently.\u0027),"},{"line_number":33,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":2,"id":"662cb20e_82456f52","line":32,"range":{"start_line":32,"start_character":31,"end_line":32,"end_character":40},"updated":"2026-01-06 17:01:11.000000000","message":"it is not just resource but the operations. \n\nNumber of operations to be performed concurrently.","commit_id":"ab8c51baccbe3ddbfd8e73843e0ee19edb6dd372"},{"author":{"_account_id":19262,"name":"Liron Kuchlani","email":"lkuchlan@redhat.com","username":"lkuchlan"},"change_message_id":"800763246e38e059305846edd4b7fb7cf61d15ff","unresolved":false,"context_lines":[{"line_number":29,"context_line":"concurrency_option \u003d ["},{"line_number":30,"context_line":"    cfg.IntOpt(\u0027concurrent_resource_count\u0027,"},{"line_number":31,"context_line":"               default\u003d5,"},{"line_number":32,"context_line":"               help\u003d\u0027Number of resources to create concurrently.\u0027),"},{"line_number":33,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":2,"id":"91241922_6ee9a0a9","line":32,"range":{"start_line":32,"start_character":31,"end_line":32,"end_character":40},"in_reply_to":"662cb20e_82456f52","updated":"2026-01-27 09:17:54.000000000","message":"Done","commit_id":"ab8c51baccbe3ddbfd8e73843e0ee19edb6dd372"}],"glance_tempest_plugin/plugin.py":[{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"90c5b13d935b69809f2230e9c09a4f32fd228297","unresolved":true,"context_lines":[{"line_number":34,"context_line":"        config.register_opt_group(conf,"},{"line_number":35,"context_line":"                                  glance_config.glance_api_group,"},{"line_number":36,"context_line":"                                  glance_config.GlanceAPIGroup)"},{"line_number":37,"context_line":"        config.register_opt_group(conf, config.image_feature_group,"},{"line_number":38,"context_line":"                                  glance_config.glance_feature_option)"},{"line_number":39,"context_line":"        config.register_opt_group(conf, config.image_group,"},{"line_number":40,"context_line":"                                  glance_config.concurrency_option)"},{"line_number":41,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"e0c17443_d45e7606","line":38,"range":{"start_line":37,"start_character":8,"end_line":38,"end_character":70},"updated":"2026-01-06 17:01:11.000000000","message":"we have the \u0027image-feature-enabled\u0027 group registered via tempest, we do not need to add new group for that same\n\n- https://github.com/openstack/tempest/blob/1b54854f98e94476301a5985a3c4f8ef29ea2901/tempest/config.py#L710C42-L710C63","commit_id":"ab8c51baccbe3ddbfd8e73843e0ee19edb6dd372"},{"author":{"_account_id":19262,"name":"Liron Kuchlani","email":"lkuchlan@redhat.com","username":"lkuchlan"},"change_message_id":"800763246e38e059305846edd4b7fb7cf61d15ff","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        config.register_opt_group(conf,"},{"line_number":35,"context_line":"                                  glance_config.glance_api_group,"},{"line_number":36,"context_line":"                                  glance_config.GlanceAPIGroup)"},{"line_number":37,"context_line":"        config.register_opt_group(conf, config.image_feature_group,"},{"line_number":38,"context_line":"                                  glance_config.glance_feature_option)"},{"line_number":39,"context_line":"        config.register_opt_group(conf, config.image_group,"},{"line_number":40,"context_line":"                                  glance_config.concurrency_option)"},{"line_number":41,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"e61ebd85_26e85af6","line":38,"range":{"start_line":37,"start_character":8,"end_line":38,"end_character":70},"in_reply_to":"e0c17443_d45e7606","updated":"2026-01-27 09:17:54.000000000","message":"Done","commit_id":"ab8c51baccbe3ddbfd8e73843e0ee19edb6dd372"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"90c5b13d935b69809f2230e9c09a4f32fd228297","unresolved":true,"context_lines":[{"line_number":36,"context_line":"                                  glance_config.GlanceAPIGroup)"},{"line_number":37,"context_line":"        config.register_opt_group(conf, config.image_feature_group,"},{"line_number":38,"context_line":"                                  glance_config.glance_feature_option)"},{"line_number":39,"context_line":"        config.register_opt_group(conf, config.image_group,"},{"line_number":40,"context_line":"                                  glance_config.concurrency_option)"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def get_opt_lists(self):"},{"line_number":43,"context_line":"        return ["}],"source_content_type":"text/x-python","patch_set":2,"id":"31e4dfba_69af5642","line":40,"range":{"start_line":39,"start_character":0,"end_line":40,"end_character":67},"updated":"2026-01-06 17:01:11.000000000","message":"I will suggest to use the existing \u0027image\u0027 group for this new config option\n\n- https://github.com/openstack/tempest/blob/1b54854f98e94476301a5985a3c4f8ef29ea2901/tempest/config.py#L641","commit_id":"ab8c51baccbe3ddbfd8e73843e0ee19edb6dd372"},{"author":{"_account_id":19262,"name":"Liron Kuchlani","email":"lkuchlan@redhat.com","username":"lkuchlan"},"change_message_id":"800763246e38e059305846edd4b7fb7cf61d15ff","unresolved":false,"context_lines":[{"line_number":36,"context_line":"                                  glance_config.GlanceAPIGroup)"},{"line_number":37,"context_line":"        config.register_opt_group(conf, config.image_feature_group,"},{"line_number":38,"context_line":"                                  glance_config.glance_feature_option)"},{"line_number":39,"context_line":"        config.register_opt_group(conf, config.image_group,"},{"line_number":40,"context_line":"                                  glance_config.concurrency_option)"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def get_opt_lists(self):"},{"line_number":43,"context_line":"        return ["}],"source_content_type":"text/x-python","patch_set":2,"id":"29d7c9f2_7ec4a788","line":40,"range":{"start_line":39,"start_character":0,"end_line":40,"end_character":67},"in_reply_to":"31e4dfba_69af5642","updated":"2026-01-27 09:17:54.000000000","message":"Done","commit_id":"ab8c51baccbe3ddbfd8e73843e0ee19edb6dd372"}],"glance_tempest_plugin/tests/scenario/manager.py":[{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"90c5b13d935b69809f2230e9c09a4f32fd228297","unresolved":true,"context_lines":[{"line_number":35,"context_line":"        super(ScenarioTest, cls).setup_clients()"},{"line_number":36,"context_line":"        cls.image_client \u003d cls.os_primary.image_client_v2"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    def create_image(self, name\u003dNone, container_format\u003d\u0027bare\u0027,"},{"line_number":39,"context_line":"                     disk_format\u003d\u0027raw\u0027, visibility\u003d\u0027private\u0027, **kwargs):"},{"line_number":40,"context_line":"        \"\"\"Create a new image.\"\"\""},{"line_number":41,"context_line":"        if name is None:"}],"source_content_type":"text/x-python","patch_set":2,"id":"00e8fc11_93b4eb1c","line":38,"range":{"start_line":38,"start_character":3,"end_line":38,"end_character":62},"updated":"2026-01-06 17:01:11.000000000","message":"we have image_create in tempest scenario manager, can we use that?\n- https://github.com/openstack/tempest/blob/1b54854f98e94476301a5985a3c4f8ef29ea2901/tempest/scenario/manager.py#L808C9-L808C21","commit_id":"ab8c51baccbe3ddbfd8e73843e0ee19edb6dd372"},{"author":{"_account_id":19262,"name":"Liron Kuchlani","email":"lkuchlan@redhat.com","username":"lkuchlan"},"change_message_id":"800763246e38e059305846edd4b7fb7cf61d15ff","unresolved":true,"context_lines":[{"line_number":35,"context_line":"        super(ScenarioTest, cls).setup_clients()"},{"line_number":36,"context_line":"        cls.image_client \u003d cls.os_primary.image_client_v2"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    def create_image(self, name\u003dNone, container_format\u003d\u0027bare\u0027,"},{"line_number":39,"context_line":"                     disk_format\u003d\u0027raw\u0027, visibility\u003d\u0027private\u0027, **kwargs):"},{"line_number":40,"context_line":"        \"\"\"Create a new image.\"\"\""},{"line_number":41,"context_line":"        if name is None:"}],"source_content_type":"text/x-python","patch_set":2,"id":"87e7348b_bb41d4ba","line":38,"range":{"start_line":38,"start_character":3,"end_line":38,"end_character":62},"in_reply_to":"00e8fc11_93b4eb1c","updated":"2026-01-27 09:17:54.000000000","message":"I initially tried using image_create from tempest, but it failed with \"Image status transition from active to saving is not allowed\" because image_create automatically uploads the full image file from CONF.scenario.img_file, making the image active, and then the test\u0027s subsequent store_image_file call attempted to upload again, which Glance doesn\u0027t allow. This create_image method is better for these concurrency tests because it only creates image metadata without uploading data, giving us explicit control over when to upload and allowing us to use small test data (1KB) instead of a full multi-MB image file, which is much faster and more appropriate for testing Glance\u0027s concurrent API operations rather than realistic cross service scenarios.","commit_id":"ab8c51baccbe3ddbfd8e73843e0ee19edb6dd372"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"90c5b13d935b69809f2230e9c09a4f32fd228297","unresolved":true,"context_lines":[{"line_number":51,"context_line":"        self.addCleanup(self.image_client.delete_image, image[\u0027id\u0027])"},{"line_number":52,"context_line":"        return image"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    def upload_image(self, image_id, data\u003dNone):"},{"line_number":55,"context_line":"        \"\"\"Upload image data.\"\"\""},{"line_number":56,"context_line":"        if data is None:"},{"line_number":57,"context_line":"            # Create a small random data for testing"}],"source_content_type":"text/x-python","patch_set":2,"id":"ed229614_9164fca6","line":54,"range":{"start_line":54,"start_character":4,"end_line":54,"end_character":21},"updated":"2026-01-06 17:01:11.000000000","message":"this one can be directly used in test","commit_id":"ab8c51baccbe3ddbfd8e73843e0ee19edb6dd372"},{"author":{"_account_id":19262,"name":"Liron Kuchlani","email":"lkuchlan@redhat.com","username":"lkuchlan"},"change_message_id":"800763246e38e059305846edd4b7fb7cf61d15ff","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        self.addCleanup(self.image_client.delete_image, image[\u0027id\u0027])"},{"line_number":52,"context_line":"        return image"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    def upload_image(self, image_id, data\u003dNone):"},{"line_number":55,"context_line":"        \"\"\"Upload image data.\"\"\""},{"line_number":56,"context_line":"        if data is None:"},{"line_number":57,"context_line":"            # Create a small random data for testing"}],"source_content_type":"text/x-python","patch_set":2,"id":"bb8944b1_4f0ec5b1","line":54,"range":{"start_line":54,"start_character":4,"end_line":54,"end_character":21},"in_reply_to":"ed229614_9164fca6","updated":"2026-01-27 09:17:54.000000000","message":"Done","commit_id":"ab8c51baccbe3ddbfd8e73843e0ee19edb6dd372"}],"glance_tempest_plugin/tests/scenario/test_image_concurrency.py":[{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"90c5b13d935b69809f2230e9c09a4f32fd228297","unresolved":true,"context_lines":[{"line_number":111,"context_line":"        image_ids \u003d concurrency.run_concurrent_tasks("},{"line_number":112,"context_line":"            self._resource_create,"},{"line_number":113,"context_line":"            create_func\u003dself.create_image,"},{"line_number":114,"context_line":"        )"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"        self._cleanup_resources(image_ids,"},{"line_number":117,"context_line":"                                self.image_client.delete_image)"}],"source_content_type":"text/x-python","patch_set":2,"id":"a48419d7_dcf76bc0","line":114,"range":{"start_line":114,"start_character":7,"end_line":114,"end_character":9},"updated":"2026-01-06 17:01:11.000000000","message":"I was not clear how many create image it run in parallel until I looked into the run_concurrent_tasks(). I will suggest to pass concurrency here so that it will be explicit from tests","commit_id":"ab8c51baccbe3ddbfd8e73843e0ee19edb6dd372"},{"author":{"_account_id":19262,"name":"Liron Kuchlani","email":"lkuchlan@redhat.com","username":"lkuchlan"},"change_message_id":"800763246e38e059305846edd4b7fb7cf61d15ff","unresolved":false,"context_lines":[{"line_number":111,"context_line":"        image_ids \u003d concurrency.run_concurrent_tasks("},{"line_number":112,"context_line":"            self._resource_create,"},{"line_number":113,"context_line":"            create_func\u003dself.create_image,"},{"line_number":114,"context_line":"        )"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"        self._cleanup_resources(image_ids,"},{"line_number":117,"context_line":"                                self.image_client.delete_image)"}],"source_content_type":"text/x-python","patch_set":2,"id":"ecdcb60a_c6f1b2ff","line":114,"range":{"start_line":114,"start_character":7,"end_line":114,"end_character":9},"in_reply_to":"a48419d7_dcf76bc0","updated":"2026-01-27 09:17:54.000000000","message":"Done","commit_id":"ab8c51baccbe3ddbfd8e73843e0ee19edb6dd372"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"90c5b13d935b69809f2230e9c09a4f32fd228297","unresolved":true,"context_lines":[{"line_number":120,"context_line":"    @decorators.idempotent_id(\u0027b2c3d4e5-f6a7-48b9-c0d1-e2f3a4b5c6d7\u0027)"},{"line_number":121,"context_line":"    def test_upload_images(self):"},{"line_number":122,"context_line":"        \"\"\"Test parallel image upload.\"\"\""},{"line_number":123,"context_line":"        # Step 1: Create images"},{"line_number":124,"context_line":"        image_ids \u003d concurrency.run_concurrent_tasks("},{"line_number":125,"context_line":"            self._resource_create,"},{"line_number":126,"context_line":"            create_func\u003dself.create_image,"},{"line_number":127,"context_line":"        )"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"        # Step 2: Upload data to images concurrently"},{"line_number":130,"context_line":"        uploaded_ids \u003d concurrency.run_concurrent_tasks("}],"source_content_type":"text/x-python","patch_set":2,"id":"7c410a15_065a55e1","line":127,"range":{"start_line":123,"start_character":0,"end_line":127,"end_character":9},"updated":"2026-01-06 17:01:11.000000000","message":"this is duplicating test_create_images test. we can combine both\n\nremove test_create_images\nrename test_upload_images -\u003e test_create_and_upload_images","commit_id":"ab8c51baccbe3ddbfd8e73843e0ee19edb6dd372"},{"author":{"_account_id":19262,"name":"Liron Kuchlani","email":"lkuchlan@redhat.com","username":"lkuchlan"},"change_message_id":"800763246e38e059305846edd4b7fb7cf61d15ff","unresolved":false,"context_lines":[{"line_number":120,"context_line":"    @decorators.idempotent_id(\u0027b2c3d4e5-f6a7-48b9-c0d1-e2f3a4b5c6d7\u0027)"},{"line_number":121,"context_line":"    def test_upload_images(self):"},{"line_number":122,"context_line":"        \"\"\"Test parallel image upload.\"\"\""},{"line_number":123,"context_line":"        # Step 1: Create images"},{"line_number":124,"context_line":"        image_ids \u003d concurrency.run_concurrent_tasks("},{"line_number":125,"context_line":"            self._resource_create,"},{"line_number":126,"context_line":"            create_func\u003dself.create_image,"},{"line_number":127,"context_line":"        )"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"        # Step 2: Upload data to images concurrently"},{"line_number":130,"context_line":"        uploaded_ids \u003d concurrency.run_concurrent_tasks("}],"source_content_type":"text/x-python","patch_set":2,"id":"ee7abcf3_95e3ea67","line":127,"range":{"start_line":123,"start_character":0,"end_line":127,"end_character":9},"in_reply_to":"7c410a15_065a55e1","updated":"2026-01-27 09:17:54.000000000","message":"Done","commit_id":"ab8c51baccbe3ddbfd8e73843e0ee19edb6dd372"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"90c5b13d935b69809f2230e9c09a4f32fd228297","unresolved":true,"context_lines":[{"line_number":170,"context_line":"    @decorators.idempotent_id(\u0027d4e5f6a7-b8c9-40d1-e2f3-a4b5c6d7e8f9\u0027)"},{"line_number":171,"context_line":"    def test_update_images(self):"},{"line_number":172,"context_line":"        \"\"\"Test parallel image metadata update.\"\"\""},{"line_number":173,"context_line":"        # Step 1: Create images"},{"line_number":174,"context_line":"        image_ids \u003d concurrency.run_concurrent_tasks("},{"line_number":175,"context_line":"            self._resource_create,"},{"line_number":176,"context_line":"            create_func\u003dself.create_image,"},{"line_number":177,"context_line":"        )"},{"line_number":178,"context_line":"        # Step 2: Update images concurrently"},{"line_number":179,"context_line":"        updated_ids \u003d concurrency.run_concurrent_tasks("},{"line_number":180,"context_line":"            self._update_image_action,"}],"source_content_type":"text/x-python","patch_set":2,"id":"bf589c93_f0b8990e","line":177,"range":{"start_line":173,"start_character":0,"end_line":177,"end_character":9},"updated":"2026-01-06 17:01:11.000000000","message":"ditto, this can be combined in\n\ntest_upload_images -\u003e test_create_update_and_upload_images","commit_id":"ab8c51baccbe3ddbfd8e73843e0ee19edb6dd372"},{"author":{"_account_id":19262,"name":"Liron Kuchlani","email":"lkuchlan@redhat.com","username":"lkuchlan"},"change_message_id":"800763246e38e059305846edd4b7fb7cf61d15ff","unresolved":false,"context_lines":[{"line_number":170,"context_line":"    @decorators.idempotent_id(\u0027d4e5f6a7-b8c9-40d1-e2f3-a4b5c6d7e8f9\u0027)"},{"line_number":171,"context_line":"    def test_update_images(self):"},{"line_number":172,"context_line":"        \"\"\"Test parallel image metadata update.\"\"\""},{"line_number":173,"context_line":"        # Step 1: Create images"},{"line_number":174,"context_line":"        image_ids \u003d concurrency.run_concurrent_tasks("},{"line_number":175,"context_line":"            self._resource_create,"},{"line_number":176,"context_line":"            create_func\u003dself.create_image,"},{"line_number":177,"context_line":"        )"},{"line_number":178,"context_line":"        # Step 2: Update images concurrently"},{"line_number":179,"context_line":"        updated_ids \u003d concurrency.run_concurrent_tasks("},{"line_number":180,"context_line":"            self._update_image_action,"}],"source_content_type":"text/x-python","patch_set":2,"id":"197e01f3_6291bf7b","line":177,"range":{"start_line":173,"start_character":0,"end_line":177,"end_character":9},"in_reply_to":"bf589c93_f0b8990e","updated":"2026-01-27 09:17:54.000000000","message":"Done","commit_id":"ab8c51baccbe3ddbfd8e73843e0ee19edb6dd372"}]}
