)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"3ca54ba06e59a15ab6763644e5dc84acbd210782","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"4a89ad05_c3ec2ab2","updated":"2026-08-17 15:56:55.000000000","message":"Thanks for adding this, I didn\u0027t realize that we weren\u0027t actually testing the tpool_wrap function anywhere!  Suggestion noted inline for one of the tests.","commit_id":"2b8e606674286c2227a4a0d473e5f8806b1c05d2"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"e27a6483eea3b1fee5fda899a318a98ac4404ccf","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"c3bfcb71_cb5e86a3","updated":"2026-08-18 13:36:14.000000000","message":"The non-eventlet job failure is unrelated, so this is working in both regular (eventlet) and threading environments.\n\nRaising the priority because there are tests elsewhere that assume that this tpool_wrap function is working correctly.","commit_id":"1639dcd76efe522ccd77c25ca04983ff67fd2a6b"}],"cinder/tests/unit/test_utils.py":[{"author":{"_account_id":34860,"name":"Amit Uniyal","email":"auniyal@redhat.com","username":"auniyal"},"change_message_id":"7e3b7cbd2f57248f23cfdbc811311a2b6b37d301","unresolved":false,"context_lines":[{"line_number":19,"context_line":"from unittest import mock"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"import ddt"},{"line_number":22,"context_line":"from eventlet import tpool"},{"line_number":23,"context_line":"from oslo_utils import timeutils"},{"line_number":24,"context_line":"import webob.exc"},{"line_number":25,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"e99f7b7c_3ba2e28d","line":22,"updated":"2026-08-18 06:40:24.000000000","message":"I forgot that this is a part of eventlet-removal from cinder 🤦","commit_id":"2b8e606674286c2227a4a0d473e5f8806b1c05d2"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"3ca54ba06e59a15ab6763644e5dc84acbd210782","unresolved":true,"context_lines":[{"line_number":291,"context_line":"        self.assertIs(obj, utils.tpool_wrap(obj))"},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"    @mock.patch(\u0027cinder.utils.concurrency_mode_threading\u0027, return_value\u003dFalse)"},{"line_number":294,"context_line":"    def test_tpool_wrap_eventlet_returns_proxy(self, mock_threading):"},{"line_number":295,"context_line":"        obj \u003d mock.Mock()"},{"line_number":296,"context_line":"        wrapped \u003d utils.tpool_wrap(obj)"},{"line_number":297,"context_line":"        # In eventlet mode we must get back a tpool.Proxy,"}],"source_content_type":"text/x-python","patch_set":1,"id":"6b21ba70_cc0f9fbe","line":294,"range":{"start_line":294,"start_character":0,"end_line":294,"end_character":69},"updated":"2026-08-17 15:56:55.000000000","message":"I think we can test this without importing eventlet if we change the test like this:\n\n```\n    @mock.patch(\u0027cinder.utils.concurrency_mode_threading\u0027, return_value\u003dFalse)\n    @mock.patch(\u0027eventlet.tpool.Proxy\u0027, create\u003dTrue)\n    def test_tpool_wrap_eventlet_returns_proxy(\n            self, mock_tpool_Proxy, mock_threading):\n        class fakeProxy(object):\n            pass\n\n        mock_tpool_Proxy.return_value \u003d fakeProxy()\n        obj \u003d mock.Mock()\n        wrapped \u003d utils.tpool_wrap(obj)\n        # In eventlet mode we must get back a tpool.Proxy,\n        # not the object itself.\n        self.assertIsInstance(wrapped, fakeProxy)\n        self.assertIsNot(obj, wrapped)\n```\nI don\u0027t think this compromises the validity of the test, and for some reason I don\u0027t like importing eventlet into any files where it\u0027s not already imported.","commit_id":"2b8e606674286c2227a4a0d473e5f8806b1c05d2"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"e27a6483eea3b1fee5fda899a318a98ac4404ccf","unresolved":false,"context_lines":[{"line_number":291,"context_line":"        self.assertIs(obj, utils.tpool_wrap(obj))"},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"    @mock.patch(\u0027cinder.utils.concurrency_mode_threading\u0027, return_value\u003dFalse)"},{"line_number":294,"context_line":"    def test_tpool_wrap_eventlet_returns_proxy(self, mock_threading):"},{"line_number":295,"context_line":"        obj \u003d mock.Mock()"},{"line_number":296,"context_line":"        wrapped \u003d utils.tpool_wrap(obj)"},{"line_number":297,"context_line":"        # In eventlet mode we must get back a tpool.Proxy,"}],"source_content_type":"text/x-python","patch_set":1,"id":"09f753a6_d0df1c1b","line":294,"range":{"start_line":294,"start_character":0,"end_line":294,"end_character":69},"in_reply_to":"2d003ee1_b4a33c66","updated":"2026-08-18 13:36:14.000000000","message":"Good idea.","commit_id":"2b8e606674286c2227a4a0d473e5f8806b1c05d2"},{"author":{"_account_id":34860,"name":"Amit Uniyal","email":"auniyal@redhat.com","username":"auniyal"},"change_message_id":"7e3b7cbd2f57248f23cfdbc811311a2b6b37d301","unresolved":true,"context_lines":[{"line_number":291,"context_line":"        self.assertIs(obj, utils.tpool_wrap(obj))"},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"    @mock.patch(\u0027cinder.utils.concurrency_mode_threading\u0027, return_value\u003dFalse)"},{"line_number":294,"context_line":"    def test_tpool_wrap_eventlet_returns_proxy(self, mock_threading):"},{"line_number":295,"context_line":"        obj \u003d mock.Mock()"},{"line_number":296,"context_line":"        wrapped \u003d utils.tpool_wrap(obj)"},{"line_number":297,"context_line":"        # In eventlet mode we must get back a tpool.Proxy,"}],"source_content_type":"text/x-python","patch_set":1,"id":"b21684af_21cbc659","line":294,"range":{"start_line":294,"start_character":0,"end_line":294,"end_character":69},"in_reply_to":"6b21ba70_cc0f9fbe","updated":"2026-08-18 06:40:24.000000000","message":"thanks Brian for noticing and fix","commit_id":"2b8e606674286c2227a4a0d473e5f8806b1c05d2"},{"author":{"_account_id":34860,"name":"Amit Uniyal","email":"auniyal@redhat.com","username":"auniyal"},"change_message_id":"4f88a03b203d5ba7b29ffa6ea6c4c2870327c436","unresolved":true,"context_lines":[{"line_number":291,"context_line":"        self.assertIs(obj, utils.tpool_wrap(obj))"},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"    @mock.patch(\u0027cinder.utils.concurrency_mode_threading\u0027, return_value\u003dFalse)"},{"line_number":294,"context_line":"    def test_tpool_wrap_eventlet_returns_proxy(self, mock_threading):"},{"line_number":295,"context_line":"        obj \u003d mock.Mock()"},{"line_number":296,"context_line":"        wrapped \u003d utils.tpool_wrap(obj)"},{"line_number":297,"context_line":"        # In eventlet mode we must get back a tpool.Proxy,"}],"source_content_type":"text/x-python","patch_set":1,"id":"2d003ee1_b4a33c66","line":294,"range":{"start_line":294,"start_character":0,"end_line":294,"end_character":69},"in_reply_to":"b21684af_21cbc659","updated":"2026-08-18 06:49:05.000000000","message":"slight change, patched `cinder.utils.tpool.Proxy` instead of `eventlet.tpool.Proxy` (same obj either way, but keeps eventlet out of this test file).","commit_id":"2b8e606674286c2227a4a0d473e5f8806b1c05d2"}]}
