)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"e9f7ef633bcadfd723c7d20ae268b2623ee9cce5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"af35b058_50a17d66","updated":"2026-06-23 07:19:23.000000000","message":"recheck","commit_id":"d096257db7a092d516dab2c5352e8fbd8249d883"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"f6699aaa1bf188b3271ccf8d5703af127b97772b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"aa411945_bc0c5809","updated":"2026-06-29 10:07:47.000000000","message":"recheck","commit_id":"7f6f19fdbbcb33a94e446cdcd1ddc541b559d09a"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"a105444d9d4410ff88e0b92db7cca1331697ab0c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"199b0b5b_fc495673","updated":"2026-06-29 13:11:42.000000000","message":"recheck on docs job post failure","commit_id":"7f6f19fdbbcb33a94e446cdcd1ddc541b559d09a"}],"glance/tests/__init__.py":[{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"9ba1c8c1d4dd727e15f08875421685cbbcc336ac","unresolved":true,"context_lines":[{"line_number":30,"context_line":"    unless tearDown or this handler runs."},{"line_number":31,"context_line":"    \"\"\""},{"line_number":32,"context_line":"    try:"},{"line_number":33,"context_line":"        from glance.api import common as api_common"},{"line_number":34,"context_line":"        for name in list(api_common._CACHED_THREAD_POOL):"},{"line_number":35,"context_line":"            pool_model \u003d api_common._CACHED_THREAD_POOL.pop(name)"},{"line_number":36,"context_line":"            pool \u003d pool_model.pool"}],"source_content_type":"text/x-python","patch_set":5,"id":"091a5a23_d6a09bdd","line":33,"updated":"2026-06-25 06:30:52.000000000","message":"I am surprised why pep8 is not failed here;\nAny reason not to import it at top?","commit_id":"9ef6d23d43de18d235f4242a28759a64394f1f04"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"fe4a744e479c5d846be0644e9af3fc93de86c4f4","unresolved":true,"context_lines":[{"line_number":30,"context_line":"    unless tearDown or this handler runs."},{"line_number":31,"context_line":"    \"\"\""},{"line_number":32,"context_line":"    try:"},{"line_number":33,"context_line":"        from glance.api import common as api_common"},{"line_number":34,"context_line":"        for name in list(api_common._CACHED_THREAD_POOL):"},{"line_number":35,"context_line":"            pool_model \u003d api_common._CACHED_THREAD_POOL.pop(name)"},{"line_number":36,"context_line":"            pool \u003d pool_model.pool"}],"source_content_type":"text/x-python","patch_set":5,"id":"2fa10cd4_73a3678d","line":33,"in_reply_to":"091a5a23_d6a09bdd","updated":"2026-06-29 06:28:08.000000000","message":"yeah missed it to remove as pep8 didn\u0027t fail, seems like local imports inside a function are allowed by pep8.","commit_id":"9ef6d23d43de18d235f4242a28759a64394f1f04"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"4a5e58a12317c56bbc5887cc3e2342b8977e023f","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    unless tearDown or this handler runs."},{"line_number":31,"context_line":"    \"\"\""},{"line_number":32,"context_line":"    try:"},{"line_number":33,"context_line":"        from glance.api import common as api_common"},{"line_number":34,"context_line":"        for name in list(api_common._CACHED_THREAD_POOL):"},{"line_number":35,"context_line":"            pool_model \u003d api_common._CACHED_THREAD_POOL.pop(name)"},{"line_number":36,"context_line":"            pool \u003d pool_model.pool"}],"source_content_type":"text/x-python","patch_set":5,"id":"be9844d6_ca2a2174","line":33,"in_reply_to":"2fa10cd4_73a3678d","updated":"2026-06-29 16:31:20.000000000","message":"Acknowledged","commit_id":"9ef6d23d43de18d235f4242a28759a64394f1f04"}],"glance/tests/functional/__init__.py":[{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"9ba1c8c1d4dd727e15f08875421685cbbcc336ac","unresolved":true,"context_lines":[{"line_number":463,"context_line":"                except Exception:"},{"line_number":464,"context_line":"                    pass"},{"line_number":465,"context_line":"                cached_images.WORKER \u003d None"},{"line_number":466,"context_line":"        # load_paste_app() does not run wsgi_app.init_app(), so tasks_pool is"},{"line_number":467,"context_line":"        # never drained via atexit. Shut down and drop the cached pool after"},{"line_number":468,"context_line":"        # each test so import task threads from the previous test cannot block"},{"line_number":469,"context_line":"        # the next one (see 992633 / concurrent.futures)."},{"line_number":470,"context_line":"        try:"},{"line_number":471,"context_line":"            from glance.api import common as api_common"},{"line_number":472,"context_line":"            pool_model \u003d api_common._CACHED_THREAD_POOL.pop(\u0027tasks_pool\u0027, None)"}],"source_content_type":"text/x-python","patch_set":5,"id":"453d2c62_82033e25","line":469,"range":{"start_line":466,"start_character":7,"end_line":469,"end_character":57},"updated":"2026-06-25 06:30:52.000000000","message":"you should treat this as NOTE and should start with NOTE(ircnick):","commit_id":"9ef6d23d43de18d235f4242a28759a64394f1f04"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"fe4a744e479c5d846be0644e9af3fc93de86c4f4","unresolved":false,"context_lines":[{"line_number":463,"context_line":"                except Exception:"},{"line_number":464,"context_line":"                    pass"},{"line_number":465,"context_line":"                cached_images.WORKER \u003d None"},{"line_number":466,"context_line":"        # load_paste_app() does not run wsgi_app.init_app(), so tasks_pool is"},{"line_number":467,"context_line":"        # never drained via atexit. Shut down and drop the cached pool after"},{"line_number":468,"context_line":"        # each test so import task threads from the previous test cannot block"},{"line_number":469,"context_line":"        # the next one (see 992633 / concurrent.futures)."},{"line_number":470,"context_line":"        try:"},{"line_number":471,"context_line":"            from glance.api import common as api_common"},{"line_number":472,"context_line":"            pool_model \u003d api_common._CACHED_THREAD_POOL.pop(\u0027tasks_pool\u0027, None)"}],"source_content_type":"text/x-python","patch_set":5,"id":"09301d41_fb025a45","line":469,"range":{"start_line":466,"start_character":7,"end_line":469,"end_character":57},"in_reply_to":"453d2c62_82033e25","updated":"2026-06-29 06:28:08.000000000","message":"Done","commit_id":"9ef6d23d43de18d235f4242a28759a64394f1f04"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"9ba1c8c1d4dd727e15f08875421685cbbcc336ac","unresolved":true,"context_lines":[{"line_number":468,"context_line":"        # each test so import task threads from the previous test cannot block"},{"line_number":469,"context_line":"        # the next one (see 992633 / concurrent.futures)."},{"line_number":470,"context_line":"        try:"},{"line_number":471,"context_line":"            from glance.api import common as api_common"},{"line_number":472,"context_line":"            pool_model \u003d api_common._CACHED_THREAD_POOL.pop(\u0027tasks_pool\u0027, None)"},{"line_number":473,"context_line":"            if pool_model is not None:"},{"line_number":474,"context_line":"                pool \u003d pool_model.pool"}],"source_content_type":"text/x-python","patch_set":5,"id":"96c95805_cf7a30eb","line":471,"range":{"start_line":471,"start_character":12,"end_line":471,"end_character":55},"updated":"2026-06-25 06:30:52.000000000","message":"ditto","commit_id":"9ef6d23d43de18d235f4242a28759a64394f1f04"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"fe4a744e479c5d846be0644e9af3fc93de86c4f4","unresolved":false,"context_lines":[{"line_number":468,"context_line":"        # each test so import task threads from the previous test cannot block"},{"line_number":469,"context_line":"        # the next one (see 992633 / concurrent.futures)."},{"line_number":470,"context_line":"        try:"},{"line_number":471,"context_line":"            from glance.api import common as api_common"},{"line_number":472,"context_line":"            pool_model \u003d api_common._CACHED_THREAD_POOL.pop(\u0027tasks_pool\u0027, None)"},{"line_number":473,"context_line":"            if pool_model is not None:"},{"line_number":474,"context_line":"                pool \u003d pool_model.pool"}],"source_content_type":"text/x-python","patch_set":5,"id":"eae85593_8def6837","line":471,"range":{"start_line":471,"start_character":12,"end_line":471,"end_character":55},"in_reply_to":"96c95805_cf7a30eb","updated":"2026-06-29 06:28:08.000000000","message":"Done","commit_id":"9ef6d23d43de18d235f4242a28759a64394f1f04"}],"glance/tests/unit/v2/test_tasks_resource.py":[{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"9ba1c8c1d4dd727e15f08875421685cbbcc336ac","unresolved":true,"context_lines":[{"line_number":126,"context_line":"                        created_at\u003dtimes[3], updated_at\u003dtimes[3])]"},{"line_number":127,"context_line":"        [self.db.task_create(None, task) for task in self.tasks]"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    def _wait_for_task_status(self, task_repo, task_id, expected_status,"},{"line_number":130,"context_line":"                              timeout\u003d5.0, delay\u003d0.01):"},{"line_number":131,"context_line":"        deadline \u003d time.time() + timeout"},{"line_number":132,"context_line":"        task \u003d None"},{"line_number":133,"context_line":"        while time.time() \u003c deadline:"},{"line_number":134,"context_line":"            task \u003d task_repo.get(task_id)"},{"line_number":135,"context_line":"            if task.status \u003d\u003d expected_status:"},{"line_number":136,"context_line":"                return task"},{"line_number":137,"context_line":"            if task.status in (\u0027success\u0027, \u0027failure\u0027):"},{"line_number":138,"context_line":"                break"},{"line_number":139,"context_line":"            time.sleep(delay)"},{"line_number":140,"context_line":"        self.fail(\u0027Timed out waiting for task %s status %s (last status\u003d%s)\u0027"},{"line_number":141,"context_line":"                  % (task_id, expected_status,"},{"line_number":142,"context_line":"                     task.status if task else \u0027unknown\u0027))"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"    def test_index(self):"},{"line_number":145,"context_line":"        self.config(limit_param_default\u003d1, api_limit_max\u003d3)"}],"source_content_type":"text/x-python","patch_set":5,"id":"8129b89f_9c135ceb","line":142,"range":{"start_line":129,"start_character":0,"end_line":142,"end_character":57},"updated":"2026-06-25 06:30:52.000000000","message":"We have similar method at https://github.com/openstack/glance/blob/master/glance/tests/functional/__init__.py#L907\nI think we should use same rather than duplicating the code.","commit_id":"9ef6d23d43de18d235f4242a28759a64394f1f04"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"4a5e58a12317c56bbc5887cc3e2342b8977e023f","unresolved":false,"context_lines":[{"line_number":126,"context_line":"                        created_at\u003dtimes[3], updated_at\u003dtimes[3])]"},{"line_number":127,"context_line":"        [self.db.task_create(None, task) for task in self.tasks]"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    def _wait_for_task_status(self, task_repo, task_id, expected_status,"},{"line_number":130,"context_line":"                              timeout\u003d5.0, delay\u003d0.01):"},{"line_number":131,"context_line":"        deadline \u003d time.time() + timeout"},{"line_number":132,"context_line":"        task \u003d None"},{"line_number":133,"context_line":"        while time.time() \u003c deadline:"},{"line_number":134,"context_line":"            task \u003d task_repo.get(task_id)"},{"line_number":135,"context_line":"            if task.status \u003d\u003d expected_status:"},{"line_number":136,"context_line":"                return task"},{"line_number":137,"context_line":"            if task.status in (\u0027success\u0027, \u0027failure\u0027):"},{"line_number":138,"context_line":"                break"},{"line_number":139,"context_line":"            time.sleep(delay)"},{"line_number":140,"context_line":"        self.fail(\u0027Timed out waiting for task %s status %s (last status\u003d%s)\u0027"},{"line_number":141,"context_line":"                  % (task_id, expected_status,"},{"line_number":142,"context_line":"                     task.status if task else \u0027unknown\u0027))"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"    def test_index(self):"},{"line_number":145,"context_line":"        self.config(limit_param_default\u003d1, api_limit_max\u003d3)"}],"source_content_type":"text/x-python","patch_set":5,"id":"c1f644c3_f40546fe","line":142,"range":{"start_line":129,"start_character":0,"end_line":142,"end_character":57},"in_reply_to":"1279aa5a_50740f9a","updated":"2026-06-29 16:31:20.000000000","message":"Acknowledged","commit_id":"9ef6d23d43de18d235f4242a28759a64394f1f04"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"fe4a744e479c5d846be0644e9af3fc93de86c4f4","unresolved":true,"context_lines":[{"line_number":126,"context_line":"                        created_at\u003dtimes[3], updated_at\u003dtimes[3])]"},{"line_number":127,"context_line":"        [self.db.task_create(None, task) for task in self.tasks]"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    def _wait_for_task_status(self, task_repo, task_id, expected_status,"},{"line_number":130,"context_line":"                              timeout\u003d5.0, delay\u003d0.01):"},{"line_number":131,"context_line":"        deadline \u003d time.time() + timeout"},{"line_number":132,"context_line":"        task \u003d None"},{"line_number":133,"context_line":"        while time.time() \u003c deadline:"},{"line_number":134,"context_line":"            task \u003d task_repo.get(task_id)"},{"line_number":135,"context_line":"            if task.status \u003d\u003d expected_status:"},{"line_number":136,"context_line":"                return task"},{"line_number":137,"context_line":"            if task.status in (\u0027success\u0027, \u0027failure\u0027):"},{"line_number":138,"context_line":"                break"},{"line_number":139,"context_line":"            time.sleep(delay)"},{"line_number":140,"context_line":"        self.fail(\u0027Timed out waiting for task %s status %s (last status\u003d%s)\u0027"},{"line_number":141,"context_line":"                  % (task_id, expected_status,"},{"line_number":142,"context_line":"                     task.status if task else \u0027unknown\u0027))"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"    def test_index(self):"},{"line_number":145,"context_line":"        self.config(limit_param_default\u003d1, api_limit_max\u003d3)"}],"source_content_type":"text/x-python","patch_set":5,"id":"1279aa5a_50740f9a","line":142,"range":{"start_line":129,"start_character":0,"end_line":142,"end_character":57},"in_reply_to":"8129b89f_9c135ceb","updated":"2026-06-29 06:28:08.000000000","message":"I think this helper is for unit tests only — it checks status with task_repo.get(), not the API like the functional test does. I added a NOTE to link the two. I can move this to a shared helper in a follow-up if you want.","commit_id":"9ef6d23d43de18d235f4242a28759a64394f1f04"}]}
