)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":34860,"name":"Amit Uniyal","email":"auniyal@redhat.com","username":"auniyal"},"change_message_id":"cda025ea9a173b31d40fc29da7145af38ef76a64","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"7185e2df_1a3d4837","updated":"2026-06-19 11:23:00.000000000","message":"can you please rebase this and fix merge conflicts - most of the fails we in tempest are from backup tests.","commit_id":"dbcaac281185b535cbb28ee7dad718d5baaec79f"},{"author":{"_account_id":34860,"name":"Amit Uniyal","email":"auniyal@redhat.com","username":"auniyal"},"change_message_id":"693b7115ab5d9e74ea401ddb9a631bf84f5bc11f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"a10a5ecd_0453e1a3","updated":"2026-06-11 06:07:03.000000000","message":"fyi, we are getting this error in c-backup statup in tempest job\ncan we fix this in this patch \n\n```ERROR cinder ValueError: \u0027workers\u0027 must be an int \u003e\u003d 1, not: None (NoneType)\n```\n\nFull logs\n\n```\n2026-06-11 05:42:41.168562 | controller | + functions-common:service_check:1708      :   for service in ${ENABLED_SERVICES//,/ }\n2026-06-11 05:42:41.170707 | controller | + functions-common:service_check:1710      :   sudo systemctl is-enabled devstack@c-bak.service\n2026-06-11 05:42:41.180534 | controller | enabled\n2026-06-11 05:42:41.183614 | controller | + functions-common:service_check:1714      :   sudo systemctl status devstack@c-bak.service --no-pager\n2026-06-11 05:42:41.196217 | controller | Ã— devstack@c-bak.service - Devstack devstack@c-bak.service\n2026-06-11 05:42:41.196230 | controller |      Loaded: loaded (/etc/systemd/system/devstack@c-bak.service; enabled; preset: enabled)\n2026-06-11 05:42:41.196234 | controller |      Active: failed (Result: exit-code) since Thu 2026-06-11 05:42:14 UTC; 26s ago\n2026-06-11 05:42:41.196236 | controller |    Duration: 1.287s\n2026-06-11 05:42:41.196239 | controller |    Main PID: 90065 (code\u003dexited, status\u003d1/FAILURE)\n2026-06-11 05:42:41.196250 | controller |         CPU: 1.209s\n2026-06-11 05:42:41.196253 | controller |\n2026-06-11 05:42:41.196256 | controller | Jun 11 05:42:14 npe9fb4337ffce4 cinder-backup[90065]: ERROR cinder     self._manager.add(ServiceWrapper, workers, args\u003d(service,))\n2026-06-11 05:42:41.196259 | controller | Jun 11 05:42:14 npe9fb4337ffce4 cinder-backup[90065]: ERROR cinder   File \"/opt/stack/data/venv/lib/python3.12/site-packages/cotyledon/_service_manager.py\", line 302, in add\n2026-06-11 05:42:41.196262 | controller | Jun 11 05:42:14 npe9fb4337ffce4 cinder-backup[90065]: ERROR cinder     _utils.check_workers(workers, 1)\n2026-06-11 05:42:41.196265 | controller | Jun 11 05:42:14 npe9fb4337ffce4 cinder-backup[90065]: ERROR cinder   File \"/opt/stack/data/venv/lib/python3.12/site-packages/cotyledon/_utils.py\", line 67, in check_workers\n2026-06-11 05:42:41.196267 | controller | Jun 11 05:42:14 npe9fb4337ffce4 cinder-backup[90065]: ERROR cinder     raise ValueError(msg)\n2026-06-11 05:42:41.196270 | controller | Jun 11 05:42:14 npe9fb4337ffce4 cinder-backup[90065]: ERROR cinder ValueError: \u0027workers\u0027 must be an int \u003e\u003d 1, not: None (NoneType)\n2026-06-11 05:42:41.196273 | controller | Jun 11 05:42:14 npe9fb4337ffce4 cinder-backup[90065]: ERROR cinder\n2026-06-11 05:42:41.196275 | controller | Jun 11 05:42:14 npe9fb4337ffce4 systemd[1]: devstack@c-bak.service: Main process exited, code\u003dexited, status\u003d1/FAILURE\n2026-06-11 05:42:41.196278 | controller | Jun 11 05:42:14 npe9fb4337ffce4 systemd[1]: devstack@c-bak.service: Failed with result \u0027exit-code\u0027.\n2026-06-11 05:42:41.196281 | controller | Jun 11 05:42:14 npe9fb4337ffce4 systemd[1]: devstack@c-bak.service: Consumed 1.209s CPU time, 81.6M memory peak, 0B memory swap peak.\n2026-06-11 05:42:41.199115 | controller | + functions-common:service_check:1         :   exit_trap\n```","commit_id":"dbcaac281185b535cbb28ee7dad718d5baaec79f"},{"author":{"_account_id":34860,"name":"Amit Uniyal","email":"auniyal@redhat.com","username":"auniyal"},"change_message_id":"3f7ea868371a00964789a4ff60f0d6d71b4fea46","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"b2e8aea2_d3b965b1","in_reply_to":"5f4cfbbf_2f5e3c89","updated":"2026-08-05 13:18:59.000000000","message":"Done","commit_id":"dbcaac281185b535cbb28ee7dad718d5baaec79f"},{"author":{"_account_id":34860,"name":"Amit Uniyal","email":"auniyal@redhat.com","username":"auniyal"},"change_message_id":"ce400e253e56d545a56fcb3dadac6af9db59b009","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":16,"id":"5f4cfbbf_2f5e3c89","in_reply_to":"62a3c131_7b7be4bc","updated":"2026-06-11 12:53:51.000000000","message":"this being \"somewhat\" fixed here https://review.opendev.org/c/openstack/cinder/+/992876","commit_id":"dbcaac281185b535cbb28ee7dad718d5baaec79f"},{"author":{"_account_id":34860,"name":"Amit Uniyal","email":"auniyal@redhat.com","username":"auniyal"},"change_message_id":"e1d139c7f9a002ae0e1a8c3f111eb606b508aae7","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":16,"id":"62a3c131_7b7be4bc","in_reply_to":"a10a5ecd_0453e1a3","updated":"2026-06-11 06:07:48.000000000","message":"https://4307127f9f165a0e73f6-6ad2866cb2f2d9b07fba7722c401096a.ssl.cf1.rackcdn.com/openstack/47740badd4d0454f84e593279ace6d26/job-output.txt","commit_id":"dbcaac281185b535cbb28ee7dad718d5baaec79f"},{"author":{"_account_id":34860,"name":"Amit Uniyal","email":"auniyal@redhat.com","username":"auniyal"},"change_message_id":"dbebdd955681f2c9181966b4eb283b2ecee51408","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":18,"id":"c88438c9_480f207a","updated":"2026-06-24 03:48:56.000000000","message":"backup tests are resolved with this patch in tempest so +1\nbut there are other tests  failing.","commit_id":"34c049bccdaf1aeed49d53207730b96e6ed5ff11"},{"author":{"_account_id":34860,"name":"Amit Uniyal","email":"auniyal@redhat.com","username":"auniyal"},"change_message_id":"58064603f42ca3d7697d7a2a6f158fe87f5679bd","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":18,"id":"2d0c606b_713246eb","updated":"2026-06-24 01:02:10.000000000","message":"recheck\nto see native threading tempest job tests status","commit_id":"34c049bccdaf1aeed49d53207730b96e6ed5ff11"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"e7ffab8c8fcf42c41b832d43e75837769c7e6d80","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":23,"id":"f287de5a_1b7c0884","updated":"2026-08-06 16:07:29.000000000","message":"The cinder-without-eventlet job failure is real, working on resolving those now.","commit_id":"9ad99a1e66fbd3227f4b4c0673378758a8bd5896"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"101bc41880e9ed4982763d1e39e589ac61a6bd09","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":23,"id":"43ad57b6_36fcf776","updated":"2026-08-06 16:04:52.000000000","message":"recheck grenade - some kind of issue with pip being mistaken for a crawler and being rejected from accessing dependencies was happening yesterday, looks like it is resolved now","commit_id":"9ad99a1e66fbd3227f4b4c0673378758a8bd5896"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"58eb57f22d40a03e1e185f2ee81e03190ee4ac76","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":24,"id":"aa1339cd_bb6ba2bd","updated":"2026-08-06 19:48:02.000000000","message":"recheck openstacksdk-functional-devstack - failure is at the \"Ensure no backups remain\" section of openstack.tests.functional.cloud.test_project_cleanup.TestProjectCleanup.test_block_storage_cleanup","commit_id":"75143be0b75a6df8ddcda2e0aa6bb5335ff0a96b"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"3ef2147f9bcc2bdd1d3e5070dddd08a6841760c1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":25,"id":"d1982279_bf3ea52d","updated":"2026-08-12 16:19:53.000000000","message":"I only worked on the tests, so my +2 is for the code part of this patch, which LGTM.","commit_id":"c07c49c586d1667d3e11a7142689894fd9196c74"},{"author":{"_account_id":34860,"name":"Amit Uniyal","email":"auniyal@redhat.com","username":"auniyal"},"change_message_id":"31606f8e8f9e81e628583fb9bc9f469a9923472c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":25,"id":"298814f3_aeb95d79","updated":"2026-08-12 15:27:35.000000000","message":"lgtm","commit_id":"c07c49c586d1667d3e11a7142689894fd9196c74"},{"author":{"_account_id":30555,"name":"Fernando Ferraz","display_name":"Fernando Ferraz","email":"fesilva@redhat.com","username":"fernandoperches"},"change_message_id":"a5a9f4733979923a396aa8642bcbc35ffa51e931","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":25,"id":"d4ed174c_be9191ba","updated":"2026-08-12 12:17:30.000000000","message":"recheck","commit_id":"c07c49c586d1667d3e11a7142689894fd9196c74"},{"author":{"_account_id":34860,"name":"Amit Uniyal","email":"auniyal@redhat.com","username":"auniyal"},"change_message_id":"18865ce846c0e3bc432ef80686be1495dc80cdd2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":25,"id":"0b29444d_ec8ef7ef","updated":"2026-08-13 03:01:52.000000000","message":"recheck\n\nunrelated test failed from tempest-integrated-storage \n\n```\n\nTraceback (most recent call last):\n  File \"/opt/stack/tempest/tempest/api/image/v2/test_images.py\", line 149, in test_image_web_download_import\n    waiters.wait_for_image_imported_to_stores(self.client, image[\u0027id\u0027])\n  File \"/opt/stack/tempest/tempest/common/waiters.py\", line 293, in wait_for_image_imported_to_stores\n    raise exc_cls(message)\ntempest.lib.exceptions.TimeoutException: Request timed out\nDetails: (ImportImagesTest:test_image_web_download_import) Image 0317b296-67fd-4c13-b7e7-45a122fd4860 failed to import on stores:\n\n\n\n```","commit_id":"c07c49c586d1667d3e11a7142689894fd9196c74"}],"cinder/backup/api.py":[{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"1087216626b790430db86c82c8a4dabb09ec006e","unresolved":true,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"\"\"\"Handles all requests relating to the volume backups service.\"\"\""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from __future__ import annotations"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from datetime import datetime"},{"line_number":23,"context_line":"import random"}],"source_content_type":"text/x-python","patch_set":16,"id":"dff420d9_46c7b823","line":20,"updated":"2026-06-10 15:31:33.000000000","message":"Not needed?","commit_id":"dbcaac281185b535cbb28ee7dad718d5baaec79f"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"92dfb3225b081f9840f955360b59acf66df18813","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"\"\"\"Handles all requests relating to the volume backups service.\"\"\""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from __future__ import annotations"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from datetime import datetime"},{"line_number":23,"context_line":"import random"}],"source_content_type":"text/x-python","patch_set":16,"id":"a0e46206_669f4db3","line":20,"in_reply_to":"dff420d9_46c7b823","updated":"2026-08-05 12:22:41.000000000","message":"Done","commit_id":"dbcaac281185b535cbb28ee7dad718d5baaec79f"}],"cinder/backup/chunkeddriver.py":[{"author":{"_account_id":36171,"name":"jayaanand borra","display_name":"jayaanand borra","email":"jayaanand.borra@netapp.com","username":"jayaanan","status":"netapp"},"change_message_id":"94a2af0cb05df8742cd8556219ea3e96941d5976","unresolved":true,"context_lines":[{"line_number":407,"context_line":"        object_meta[\u0027list\u0027] \u003d object_list"},{"line_number":408,"context_line":"        object_meta[\u0027id\u0027] \u003d object_id"},{"line_number":409,"context_line":""},{"line_number":410,"context_line":"        time.sleep(0)"},{"line_number":411,"context_line":""},{"line_number":412,"context_line":"    def _prepare_output_data(self, data):"},{"line_number":413,"context_line":"        if self.compressor is None:"}],"source_content_type":"text/x-python","patch_set":10,"id":"9e8671f5_a16aa3e9","line":410,"updated":"2026-04-06 12:43:44.000000000","message":"eventlet.sleep(0)\n and time.sleep(0) are different as far as i understand?","commit_id":"eec9131d47ffd3f8243cc7dcff3abf72d6b26c6b"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"9682379366e19cfce399208d81b3d9c6b6423fec","unresolved":false,"context_lines":[{"line_number":407,"context_line":"        object_meta[\u0027list\u0027] \u003d object_list"},{"line_number":408,"context_line":"        object_meta[\u0027id\u0027] \u003d object_id"},{"line_number":409,"context_line":""},{"line_number":410,"context_line":"        time.sleep(0)"},{"line_number":411,"context_line":""},{"line_number":412,"context_line":"    def _prepare_output_data(self, data):"},{"line_number":413,"context_line":"        if self.compressor is None:"}],"source_content_type":"text/x-python","patch_set":10,"id":"beadfd9e_9c19f591","line":410,"in_reply_to":"9e8671f5_a16aa3e9","updated":"2026-06-04 14:58:31.000000000","message":"When running in eventlet mode, they are the same thing.","commit_id":"eec9131d47ffd3f8243cc7dcff3abf72d6b26c6b"},{"author":{"_account_id":34860,"name":"Amit Uniyal","email":"auniyal@redhat.com","username":"auniyal"},"change_message_id":"3f7ea868371a00964789a4ff60f0d6d71b4fea46","unresolved":true,"context_lines":[{"line_number":843,"context_line":"                          })"},{"line_number":844,"context_line":"                # Deleting a backup\u0027s objects can take some time."},{"line_number":845,"context_line":"                # Yield so other threads can run"},{"line_number":846,"context_line":"                time.sleep(0)"},{"line_number":847,"context_line":""},{"line_number":848,"context_line":"        LOG.debug(\u0027delete %s finished.\u0027, backup[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":22,"id":"f7613b29_aceb6091","line":846,"updated":"2026-08-05 13:18:59.000000000","message":"do we really need this ? time.sleep is not same as eventlet.sleep\n\nthreading wll have actual threads, while eventlet, single manager handles everything so we need to ask for sleep to let it know.","commit_id":"5018d7685933aa204b8c1c8e92b5f55a0d89ee6a"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"af71ab5c36530119643d8b64f9267363c626ce5d","unresolved":true,"context_lines":[{"line_number":843,"context_line":"                          })"},{"line_number":844,"context_line":"                # Deleting a backup\u0027s objects can take some time."},{"line_number":845,"context_line":"                # Yield so other threads can run"},{"line_number":846,"context_line":"                time.sleep(0)"},{"line_number":847,"context_line":""},{"line_number":848,"context_line":"        LOG.debug(\u0027delete %s finished.\u0027, backup[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":22,"id":"bf70c2e0_311b9032","line":846,"in_reply_to":"63a01b30_bd879ff3","updated":"2026-08-05 22:53:05.000000000","message":"I think it makes sense to have a cooperative_yield function like nova so that we only call time.sleep(0) when running in eventlet mode; but let\u0027s do that in a separate patch (and add the hacking enforcement, too).","commit_id":"5018d7685933aa204b8c1c8e92b5f55a0d89ee6a"},{"author":{"_account_id":34860,"name":"Amit Uniyal","email":"auniyal@redhat.com","username":"auniyal"},"change_message_id":"11a0a50a6eea6dea8a5685aab33b32a005466aaa","unresolved":true,"context_lines":[{"line_number":843,"context_line":"                          })"},{"line_number":844,"context_line":"                # Deleting a backup\u0027s objects can take some time."},{"line_number":845,"context_line":"                # Yield so other threads can run"},{"line_number":846,"context_line":"                time.sleep(0)"},{"line_number":847,"context_line":""},{"line_number":848,"context_line":"        LOG.debug(\u0027delete %s finished.\u0027, backup[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":22,"id":"426d1ab3_af887e9a","line":846,"in_reply_to":"6daa3c37_4fb25377","updated":"2026-08-13 11:12:24.000000000","message":"create here https://review.opendev.org/c/openstack/cinder/+/1000826","commit_id":"5018d7685933aa204b8c1c8e92b5f55a0d89ee6a"},{"author":{"_account_id":30555,"name":"Fernando Ferraz","display_name":"Fernando Ferraz","email":"fesilva@redhat.com","username":"fernandoperches"},"change_message_id":"de227dfce9d107a731a3881428fb1c3a5cf6a990","unresolved":false,"context_lines":[{"line_number":843,"context_line":"                          })"},{"line_number":844,"context_line":"                # Deleting a backup\u0027s objects can take some time."},{"line_number":845,"context_line":"                # Yield so other threads can run"},{"line_number":846,"context_line":"                time.sleep(0)"},{"line_number":847,"context_line":""},{"line_number":848,"context_line":"        LOG.debug(\u0027delete %s finished.\u0027, backup[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":22,"id":"6daa3c37_4fb25377","line":846,"in_reply_to":"bf70c2e0_311b9032","updated":"2026-08-11 12:39:55.000000000","message":"Done","commit_id":"5018d7685933aa204b8c1c8e92b5f55a0d89ee6a"},{"author":{"_account_id":34860,"name":"Amit Uniyal","email":"auniyal@redhat.com","username":"auniyal"},"change_message_id":"dac29a9d079900b4ee842e82f1ceccbf7f9835bd","unresolved":true,"context_lines":[{"line_number":843,"context_line":"                          })"},{"line_number":844,"context_line":"                # Deleting a backup\u0027s objects can take some time."},{"line_number":845,"context_line":"                # Yield so other threads can run"},{"line_number":846,"context_line":"                time.sleep(0)"},{"line_number":847,"context_line":""},{"line_number":848,"context_line":"        LOG.debug(\u0027delete %s finished.\u0027, backup[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":22,"id":"63a01b30_bd879ff3","line":846,"in_reply_to":"f7613b29_aceb6091","updated":"2026-08-05 14:07:34.000000000","message":"nova is using it too https://review.opendev.org/c/openstack/nova/+/950992\nmay be we want to have similar approach.","commit_id":"5018d7685933aa204b8c1c8e92b5f55a0d89ee6a"}],"cinder/cmd/backup.py":[{"author":{"_account_id":34860,"name":"Amit Uniyal","email":"auniyal@redhat.com","username":"auniyal"},"change_message_id":"32c9acb62d15e38c90851b4834022fbf00693919","unresolved":true,"context_lines":[{"line_number":129,"context_line":"                                        service_name\u003d\u0027backup\u0027,"},{"line_number":130,"context_line":"                                        process_number\u003d1,"},{"line_number":131,"context_line":"                                        semaphore\u003dsemaphore)"},{"line_number":132,"context_line":"        service.serve(server)"},{"line_number":133,"context_line":"        service.wait()"}],"source_content_type":"text/x-python","patch_set":16,"id":"1c355d2e_8d69deab","line":132,"updated":"2026-06-11 07:03:11.000000000","message":"so this seems to be issue, `serve` also except workers and default is None, which run a `single process mode` as logged above.\n\n```\n\ndef serve(server, workers\u003dNone):\n    global _launcher\n    if _launcher:\n        raise RuntimeError(_(\u0027serve() can only be called once\u0027))\n\n    _launcher \u003d service.launch(CONF, server, workers\u003dworkers,\n                               restart_method\u003d\u0027mutate\u0027)\n\n```\n\nand this is same for scheduler as well but not for api and volume service.\n\nthey are using\n\n```\n\ndef _launch_services() -\u003e None:\n    launcher \u003d service.process_launcher()\n```\nto\n\n```\ndef process_launcher() -\u003e service.ProcessLauncher:\n    return service.ProcessLauncher(CONF, restart_method\u003d\u0027mutate\u0027)\n\n```","commit_id":"dbcaac281185b535cbb28ee7dad718d5baaec79f"},{"author":{"_account_id":34860,"name":"Amit Uniyal","email":"auniyal@redhat.com","username":"auniyal"},"change_message_id":"3f7ea868371a00964789a4ff60f0d6d71b4fea46","unresolved":false,"context_lines":[{"line_number":129,"context_line":"                                        service_name\u003d\u0027backup\u0027,"},{"line_number":130,"context_line":"                                        process_number\u003d1,"},{"line_number":131,"context_line":"                                        semaphore\u003dsemaphore)"},{"line_number":132,"context_line":"        service.serve(server)"},{"line_number":133,"context_line":"        service.wait()"}],"source_content_type":"text/x-python","patch_set":16,"id":"2ace602b_a8fd8018","line":132,"in_reply_to":"1c355d2e_8d69deab","updated":"2026-08-05 13:18:59.000000000","message":"Done","commit_id":"dbcaac281185b535cbb28ee7dad718d5baaec79f"}],"cinder/tests/unit/backup/test_backup.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"e93687c096408a19d47f74fc58ad06cb10a1091b","unresolved":false,"context_lines":[{"line_number":39,"context_line":"from cinder.objects import fields"},{"line_number":40,"context_line":"from cinder import quota"},{"line_number":41,"context_line":"from cinder import utils as cinder_utils"},{"line_number":42,"context_line":"from cinder.tests import fake_driver"},{"line_number":43,"context_line":"from cinder.tests.unit.api.v3 import fakes as v3_fakes"},{"line_number":44,"context_line":"from cinder.tests.unit import fake_constants as fake"},{"line_number":45,"context_line":"from cinder.tests.unit import known_issues as issues"}],"source_content_type":"text/x-python","patch_set":16,"id":"34cf6871_2790c0aa","line":42,"updated":"2026-06-10 18:44:11.000000000","message":"pep8: H306: imports not in alphabetical order (cinder.utils, cinder.tests.fake_driver)","commit_id":"dbcaac281185b535cbb28ee7dad718d5baaec79f"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"673db85dcd4a949106e96965c11658392455fd1c","unresolved":false,"context_lines":[{"line_number":39,"context_line":"from cinder.objects import fields"},{"line_number":40,"context_line":"from cinder import quota"},{"line_number":41,"context_line":"from cinder import utils as cinder_utils"},{"line_number":42,"context_line":"from cinder.tests import fake_driver"},{"line_number":43,"context_line":"from cinder.tests.unit.api.v3 import fakes as v3_fakes"},{"line_number":44,"context_line":"from cinder.tests.unit import fake_constants as fake"},{"line_number":45,"context_line":"from cinder.tests.unit import known_issues as issues"}],"source_content_type":"text/x-python","patch_set":17,"id":"b45d0f41_6a13c927","line":42,"updated":"2026-06-22 14:46:31.000000000","message":"pep8: H306: imports not in alphabetical order (cinder.utils, cinder.tests.fake_driver)","commit_id":"f8702043344eb662c5b021f56ff9ec64b5936407"},{"author":{"_account_id":34860,"name":"Amit Uniyal","email":"auniyal@redhat.com","username":"auniyal"},"change_message_id":"941954a437658bcc66bb7926cc0f90ccb47c20f0","unresolved":true,"context_lines":[{"line_number":1992,"context_line":""},{"line_number":1993,"context_line":"    @test.testtools.skipIf(issues.TPOOL_KILLALL_ISSUE, \u0027tpool.killall bug\u0027)"},{"line_number":1994,"context_line":"    @test.testtools.skipIf(cinder_utils.is_native_threading(),"},{"line_number":1995,"context_line":"                           \u0027not supported for native threading\u0027)"},{"line_number":1996,"context_line":"    def test_default_tpool_size(self):"},{"line_number":1997,"context_line":"        \"\"\"Test we can set custom tpool size.\"\"\""},{"line_number":1998,"context_line":"        tpool._nthreads \u003d 20"}],"source_content_type":"text/x-python","patch_set":17,"id":"540ad068_5ca827db","line":1995,"updated":"2026-06-23 05:44:25.000000000","message":"AttributeError: module \u0027cinder.utils\u0027 has no attribute \u0027is_native_threading\u0027","commit_id":"f8702043344eb662c5b021f56ff9ec64b5936407"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"ab7caf187a13fd45d2d2a3952fff311b882f3215","unresolved":false,"context_lines":[{"line_number":1992,"context_line":""},{"line_number":1993,"context_line":"    @test.testtools.skipIf(issues.TPOOL_KILLALL_ISSUE, \u0027tpool.killall bug\u0027)"},{"line_number":1994,"context_line":"    @test.testtools.skipIf(cinder_utils.is_native_threading(),"},{"line_number":1995,"context_line":"                           \u0027not supported for native threading\u0027)"},{"line_number":1996,"context_line":"    def test_default_tpool_size(self):"},{"line_number":1997,"context_line":"        \"\"\"Test we can set custom tpool size.\"\"\""},{"line_number":1998,"context_line":"        tpool._nthreads \u003d 20"}],"source_content_type":"text/x-python","patch_set":17,"id":"00c20e15_3394d37f","line":1995,"in_reply_to":"540ad068_5ca827db","updated":"2026-07-09 14:57:23.000000000","message":"Done","commit_id":"f8702043344eb662c5b021f56ff9ec64b5936407"}],"cinder/utils.py":[{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"e763f8fd576d39b1afece85ccfe7468c5901f443","unresolved":true,"context_lines":[{"line_number":99,"context_line":"    return tpool.Proxy(obj)"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"def thread_sleep(seconds: float) -\u003e None:"},{"line_number":103,"context_line":"    \"\"\"Sleep while yielding control appropriately for the current mode."},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    Uses ``eventlet.sleep`` under eventlet so other greenthreads can run,"}],"source_content_type":"text/x-python","patch_set":2,"id":"1d6ede60_cd9f9add","line":102,"updated":"2026-02-24 20:39:50.000000000","message":"This method is unnecessary, you can just use time.sleep() and eventlet monkey_patching will handle it when in eventlet mode.","commit_id":"50e1083f496bac168ebc6fb1e5e16d6d9573f8db"},{"author":{"_account_id":30555,"name":"Fernando Ferraz","display_name":"Fernando Ferraz","email":"fesilva@redhat.com","username":"fernandoperches"},"change_message_id":"de227dfce9d107a731a3881428fb1c3a5cf6a990","unresolved":false,"context_lines":[{"line_number":99,"context_line":"    return tpool.Proxy(obj)"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"def thread_sleep(seconds: float) -\u003e None:"},{"line_number":103,"context_line":"    \"\"\"Sleep while yielding control appropriately for the current mode."},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    Uses ``eventlet.sleep`` under eventlet so other greenthreads can run,"}],"source_content_type":"text/x-python","patch_set":2,"id":"40e0ae09_c66b54d5","line":102,"in_reply_to":"1d6ede60_cd9f9add","updated":"2026-08-11 12:39:55.000000000","message":"Done","commit_id":"50e1083f496bac168ebc6fb1e5e16d6d9573f8db"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"fd74d3add261026f6efd901884d81d3d38944021","unresolved":true,"context_lines":[{"line_number":85,"context_line":"    return val in (\u00271\u0027, \u0027true\u0027, \u0027yes\u0027)"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"def tpool_wrap(obj: object) -\u003e object:"},{"line_number":89,"context_line":"    \"\"\"Wrap obj so blocking I/O does not stall the event loop."},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    Under eventlet, wraps *obj* with ``tpool.Proxy`` so every method call"}],"source_content_type":"text/x-python","patch_set":10,"id":"b9a95e04_6e7f7d77","line":88,"range":{"start_line":88,"start_character":4,"end_line":88,"end_character":14},"updated":"2026-04-02 14:44:45.000000000","message":"Please split this into another patch so it can be used by I0b0e32282 for the RBD driver.","commit_id":"eec9131d47ffd3f8243cc7dcff3abf72d6b26c6b"},{"author":{"_account_id":30555,"name":"Fernando Ferraz","display_name":"Fernando Ferraz","email":"fesilva@redhat.com","username":"fernandoperches"},"change_message_id":"de227dfce9d107a731a3881428fb1c3a5cf6a990","unresolved":false,"context_lines":[{"line_number":85,"context_line":"    return val in (\u00271\u0027, \u0027true\u0027, \u0027yes\u0027)"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"def tpool_wrap(obj: object) -\u003e object:"},{"line_number":89,"context_line":"    \"\"\"Wrap obj so blocking I/O does not stall the event loop."},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    Under eventlet, wraps *obj* with ``tpool.Proxy`` so every method call"}],"source_content_type":"text/x-python","patch_set":10,"id":"0e4b3712_c5d3d6a6","line":88,"range":{"start_line":88,"start_character":4,"end_line":88,"end_character":14},"in_reply_to":"b9a95e04_6e7f7d77","updated":"2026-08-11 12:39:55.000000000","message":"Done","commit_id":"eec9131d47ffd3f8243cc7dcff3abf72d6b26c6b"},{"author":{"_account_id":36171,"name":"jayaanand borra","display_name":"jayaanand borra","email":"jayaanand.borra@netapp.com","username":"jayaanan","status":"netapp"},"change_message_id":"94a2af0cb05df8742cd8556219ea3e96941d5976","unresolved":true,"context_lines":[{"line_number":1049,"context_line":"        # Eventlet does not work with multiprocessing\u0027s Semaphore, so we have"},{"line_number":1050,"context_line":"        # to execute it in a native thread to avoid getting blocked when trying"},{"line_number":1051,"context_line":"        # to acquire the semaphore."},{"line_number":1052,"context_line":"        return tpool.execute(self.semaphore.__enter__)"},{"line_number":1053,"context_line":""},{"line_number":1054,"context_line":"    def __exit__(self, *args):"},{"line_number":1055,"context_line":"        # Don\u0027t use native thread for exit, as it will only add overhead"}],"source_content_type":"text/x-python","patch_set":10,"id":"5d078bf2_48caee1b","line":1052,"updated":"2026-04-06 12:43:44.000000000","message":"unconditionally calls `tpool.execute(self.semaphore.__enter__)`, which relies on eventlet\u0027s tpool","commit_id":"eec9131d47ffd3f8243cc7dcff3abf72d6b26c6b"},{"author":{"_account_id":30555,"name":"Fernando Ferraz","display_name":"Fernando Ferraz","email":"fesilva@redhat.com","username":"fernandoperches"},"change_message_id":"b1e314e53fa35ac95f0954976ec0ab5f71c46f22","unresolved":false,"context_lines":[{"line_number":1049,"context_line":"        # Eventlet does not work with multiprocessing\u0027s Semaphore, so we have"},{"line_number":1050,"context_line":"        # to execute it in a native thread to avoid getting blocked when trying"},{"line_number":1051,"context_line":"        # to acquire the semaphore."},{"line_number":1052,"context_line":"        return tpool.execute(self.semaphore.__enter__)"},{"line_number":1053,"context_line":""},{"line_number":1054,"context_line":"    def __exit__(self, *args):"},{"line_number":1055,"context_line":"        # Don\u0027t use native thread for exit, as it will only add overhead"}],"source_content_type":"text/x-python","patch_set":10,"id":"cab06362_6aa1cad0","line":1052,"in_reply_to":"5d078bf2_48caee1b","updated":"2026-08-11 14:16:07.000000000","message":"This has been addressed in https://review.opendev.org/c/openstack/cinder/+/984951.","commit_id":"eec9131d47ffd3f8243cc7dcff3abf72d6b26c6b"},{"author":{"_account_id":36171,"name":"jayaanand borra","display_name":"jayaanand borra","email":"jayaanand.borra@netapp.com","username":"jayaanan","status":"netapp"},"change_message_id":"94a2af0cb05df8742cd8556219ea3e96941d5976","unresolved":true,"context_lines":[{"line_number":1050,"context_line":"        # to execute it in a native thread to avoid getting blocked when trying"},{"line_number":1051,"context_line":"        # to acquire the semaphore."},{"line_number":1052,"context_line":"        return tpool.execute(self.semaphore.__enter__)"},{"line_number":1053,"context_line":""},{"line_number":1054,"context_line":"    def __exit__(self, *args):"},{"line_number":1055,"context_line":"        # Don\u0027t use native thread for exit, as it will only add overhead"},{"line_number":1056,"context_line":"        return self.semaphore.__exit__(*args)"}],"source_content_type":"text/x-python","patch_set":10,"id":"af198a9a_cd97f261","line":1053,"updated":"2026-04-06 12:43:44.000000000","message":"__enter__ may need to condition on is_native_threading()","commit_id":"eec9131d47ffd3f8243cc7dcff3abf72d6b26c6b"},{"author":{"_account_id":30555,"name":"Fernando Ferraz","display_name":"Fernando Ferraz","email":"fesilva@redhat.com","username":"fernandoperches"},"change_message_id":"b1e314e53fa35ac95f0954976ec0ab5f71c46f22","unresolved":false,"context_lines":[{"line_number":1050,"context_line":"        # to execute it in a native thread to avoid getting blocked when trying"},{"line_number":1051,"context_line":"        # to acquire the semaphore."},{"line_number":1052,"context_line":"        return tpool.execute(self.semaphore.__enter__)"},{"line_number":1053,"context_line":""},{"line_number":1054,"context_line":"    def __exit__(self, *args):"},{"line_number":1055,"context_line":"        # Don\u0027t use native thread for exit, as it will only add overhead"},{"line_number":1056,"context_line":"        return self.semaphore.__exit__(*args)"}],"source_content_type":"text/x-python","patch_set":10,"id":"11770e94_0676e628","line":1053,"in_reply_to":"af198a9a_cd97f261","updated":"2026-08-11 14:16:07.000000000","message":"This has been addressed in https://review.opendev.org/c/openstack/cinder/+/984951.","commit_id":"eec9131d47ffd3f8243cc7dcff3abf72d6b26c6b"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"733001eb4b82c7d4b6fd65a075e0ee9954907b19","unresolved":true,"context_lines":[{"line_number":807,"context_line":"        self.semaphore \u003d multiprocessing.Semaphore(limit)"},{"line_number":808,"context_line":""},{"line_number":809,"context_line":"    def __enter__(self):"},{"line_number":810,"context_line":"        # Eventlet does not work with multiprocessing\u0027s Semaphore, so we have"},{"line_number":811,"context_line":"        # to execute it in a native thread to avoid getting blocked when trying"},{"line_number":812,"context_line":"        # to acquire the semaphore."},{"line_number":813,"context_line":"        return tpool_wrap(self.semaphore.__enter__)()"},{"line_number":814,"context_line":""},{"line_number":815,"context_line":"    def __exit__(self, *args):"},{"line_number":816,"context_line":"        # Don\u0027t use native thread for exit, as it will only add overhead"}],"source_content_type":"text/x-python","patch_set":25,"id":"b2b1849a_618bdd67","line":813,"range":{"start_line":810,"start_character":0,"end_line":813,"end_character":53},"updated":"2026-08-11 13:48:12.000000000","message":"Before this change, when in eventlet mode, the semaphore was wrapped into a native tpool thread. Now, it isn\u0027t, which is a problem according to this comment.\n\nWe need to either revert back to the previous tpool.execute() or update this comment.","commit_id":"c07c49c586d1667d3e11a7142689894fd9196c74"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"c630929a8ef37990ce8a09c7f45d78cce9ab5a91","unresolved":true,"context_lines":[{"line_number":807,"context_line":"        self.semaphore \u003d multiprocessing.Semaphore(limit)"},{"line_number":808,"context_line":""},{"line_number":809,"context_line":"    def __enter__(self):"},{"line_number":810,"context_line":"        # Eventlet does not work with multiprocessing\u0027s Semaphore, so we have"},{"line_number":811,"context_line":"        # to execute it in a native thread to avoid getting blocked when trying"},{"line_number":812,"context_line":"        # to acquire the semaphore."},{"line_number":813,"context_line":"        return tpool_wrap(self.semaphore.__enter__)()"},{"line_number":814,"context_line":""},{"line_number":815,"context_line":"    def __exit__(self, *args):"},{"line_number":816,"context_line":"        # Don\u0027t use native thread for exit, as it will only add overhead"}],"source_content_type":"text/x-python","patch_set":25,"id":"f87992d9_0173ffba","line":813,"range":{"start_line":810,"start_character":0,"end_line":813,"end_character":53},"in_reply_to":"b2b1849a_618bdd67","updated":"2026-08-11 13:51:32.000000000","message":"Sorry, not this change, this was made in https://review.opendev.org/c/openstack/cinder/+/984951 .  But it looks like we need to re-work this now to always use a native thread instead of tpool_wrap().","commit_id":"c07c49c586d1667d3e11a7142689894fd9196c74"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"d32f4acbfa32042c7a01f2f7529aaa9a9ccb1f79","unresolved":false,"context_lines":[{"line_number":807,"context_line":"        self.semaphore \u003d multiprocessing.Semaphore(limit)"},{"line_number":808,"context_line":""},{"line_number":809,"context_line":"    def __enter__(self):"},{"line_number":810,"context_line":"        # Eventlet does not work with multiprocessing\u0027s Semaphore, so we have"},{"line_number":811,"context_line":"        # to execute it in a native thread to avoid getting blocked when trying"},{"line_number":812,"context_line":"        # to acquire the semaphore."},{"line_number":813,"context_line":"        return tpool_wrap(self.semaphore.__enter__)()"},{"line_number":814,"context_line":""},{"line_number":815,"context_line":"    def __exit__(self, *args):"},{"line_number":816,"context_line":"        # Don\u0027t use native thread for exit, as it will only add overhead"}],"source_content_type":"text/x-python","patch_set":25,"id":"1332dc03_05bab0f0","line":813,"range":{"start_line":810,"start_character":0,"end_line":813,"end_character":53},"in_reply_to":"c199e39c_2fbfd3f3","updated":"2026-08-11 15:33:38.000000000","message":"Yes, I had this mixed up -- looks ok.","commit_id":"c07c49c586d1667d3e11a7142689894fd9196c74"},{"author":{"_account_id":30555,"name":"Fernando Ferraz","display_name":"Fernando Ferraz","email":"fesilva@redhat.com","username":"fernandoperches"},"change_message_id":"b1e314e53fa35ac95f0954976ec0ab5f71c46f22","unresolved":true,"context_lines":[{"line_number":807,"context_line":"        self.semaphore \u003d multiprocessing.Semaphore(limit)"},{"line_number":808,"context_line":""},{"line_number":809,"context_line":"    def __enter__(self):"},{"line_number":810,"context_line":"        # Eventlet does not work with multiprocessing\u0027s Semaphore, so we have"},{"line_number":811,"context_line":"        # to execute it in a native thread to avoid getting blocked when trying"},{"line_number":812,"context_line":"        # to acquire the semaphore."},{"line_number":813,"context_line":"        return tpool_wrap(self.semaphore.__enter__)()"},{"line_number":814,"context_line":""},{"line_number":815,"context_line":"    def __exit__(self, *args):"},{"line_number":816,"context_line":"        # Don\u0027t use native thread for exit, as it will only add overhead"}],"source_content_type":"text/x-python","patch_set":25,"id":"c199e39c_2fbfd3f3","line":813,"range":{"start_line":810,"start_character":0,"end_line":813,"end_character":53},"in_reply_to":"f87992d9_0173ffba","updated":"2026-08-11 14:16:07.000000000","message":"tpool_wrap() is designed to call tpool.Proxy() to spawn a native thread in case of eventlet, so this is covered.","commit_id":"c07c49c586d1667d3e11a7142689894fd9196c74"}]}
