)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"0ebbcf57e0f956ab3e9699dc7a8aa19b5ebb2c8c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"4c67e297_3fed003d","updated":"2026-06-15 18:11:14.000000000","message":"As Eric indicates in the commit message, this TODO is not something that we need to actually do, so it makes sense to remove it so someone doesn\u0027t re-do Eric\u0027s work and then find out that there\u0027s nothing to do.","commit_id":"51578e84eaffcf6005b683af4495c41de4435960"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"d81dc4a741f5bd7d0a0ca7347883e2ef3e9d7b3e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"f02cb660_2e4ac7e8","updated":"2026-06-17 13:14:51.000000000","message":"recheck\n\nbuild-openstack-releasenotes failure seems unrelated","commit_id":"51578e84eaffcf6005b683af4495c41de4435960"},{"author":{"_account_id":34860,"name":"Amit Uniyal","email":"auniyal@redhat.com","username":"auniyal"},"change_message_id":"73c7097f6dbe84df2d435a8f676c7cb457230ee4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"6be0595f_9dc1648b","updated":"2026-06-16 07:12:11.000000000","message":"trival cleanup, lgtm\n\nupdate to doc string is good to have thogh.","commit_id":"51578e84eaffcf6005b683af4495c41de4435960"}],"cinder/utils.py":[{"author":{"_account_id":36171,"name":"jayaanand borra","display_name":"jayaanand borra","email":"jayaanand.borra@netapp.com","username":"jayaanan","status":"netapp"},"change_message_id":"57a17ecbe4c474797807d1b9549647d7b53666fd","unresolved":true,"context_lines":[{"line_number":801,"context_line":""},{"line_number":802,"context_line":""},{"line_number":803,"context_line":"class Semaphore(object):"},{"line_number":804,"context_line":"    \"\"\"Custom semaphore to workaround eventlet issues with multiprocessing.\"\"\""},{"line_number":805,"context_line":"    # TODO (eventlet-removal) : replace with threading.Semaphore implementation"},{"line_number":806,"context_line":"    def __init__(self, limit):"},{"line_number":807,"context_line":"        self.limit \u003d limit"}],"source_content_type":"text/x-python","patch_set":1,"id":"4583cbb6_8c1723e8","side":"PARENT","line":804,"updated":"2026-06-13 06:04:56.000000000","message":"comments is misleading and points to eventlet","commit_id":"7b775141853d809cc2f66c8d45710c3d3d6c2230"},{"author":{"_account_id":34860,"name":"Amit Uniyal","email":"auniyal@redhat.com","username":"auniyal"},"change_message_id":"73c7097f6dbe84df2d435a8f676c7cb457230ee4","unresolved":true,"context_lines":[{"line_number":801,"context_line":""},{"line_number":802,"context_line":""},{"line_number":803,"context_line":"class Semaphore(object):"},{"line_number":804,"context_line":"    \"\"\"Custom semaphore to workaround eventlet issues with multiprocessing.\"\"\""},{"line_number":805,"context_line":"    # TODO (eventlet-removal) : replace with threading.Semaphore implementation"},{"line_number":806,"context_line":"    def __init__(self, limit):"},{"line_number":807,"context_line":"        self.limit \u003d limit"}],"source_content_type":"text/x-python","patch_set":1,"id":"ff5ddeaa_9563b2a9","side":"PARENT","line":804,"in_reply_to":"26576086_1b93b9ad","updated":"2026-06-16 07:12:11.000000000","message":"I think @Jayaanand is talking about doc string of class.\n\u003e    \"\"\"Custom semaphore to workaround eventlet issues with multiprocessing.\"\"\"\n\nremoving ToDo is fine, the doc string might also need an update as it says -  `wokaround to eventlet issues`, but now we are using same \"this\" class for threading mode too.\nso this class now used for both.","commit_id":"7b775141853d809cc2f66c8d45710c3d3d6c2230"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"791dc7856f5bba91d6a330fecda0acd4f76f0903","unresolved":true,"context_lines":[{"line_number":801,"context_line":""},{"line_number":802,"context_line":""},{"line_number":803,"context_line":"class Semaphore(object):"},{"line_number":804,"context_line":"    \"\"\"Custom semaphore to workaround eventlet issues with multiprocessing.\"\"\""},{"line_number":805,"context_line":"    # TODO (eventlet-removal) : replace with threading.Semaphore implementation"},{"line_number":806,"context_line":"    def __init__(self, limit):"},{"line_number":807,"context_line":"        self.limit \u003d limit"}],"source_content_type":"text/x-python","patch_set":1,"id":"26576086_1b93b9ad","side":"PARENT","line":804,"in_reply_to":"4583cbb6_8c1723e8","updated":"2026-06-15 12:54:54.000000000","message":"I\u0027m not sure what you mean. This patch is removing the comment because it is not a TODO we intend to pursue.","commit_id":"7b775141853d809cc2f66c8d45710c3d3d6c2230"},{"author":{"_account_id":34860,"name":"Amit Uniyal","email":"auniyal@redhat.com","username":"auniyal"},"change_message_id":"73c7097f6dbe84df2d435a8f676c7cb457230ee4","unresolved":true,"context_lines":[{"line_number":830,"context_line":"    if limit:"},{"line_number":831,"context_line":"        # In native-thread mode always use our multiprocessing-backed"},{"line_number":832,"context_line":"        # Semaphore; eventlet.Semaphore is not appropriate here."},{"line_number":833,"context_line":"        if concurrency_mode_threading():"},{"line_number":834,"context_line":"            return Semaphore(limit)"},{"line_number":835,"context_line":"        # If we only have 1 process we can use eventlet\u0027s Semaphore"},{"line_number":836,"context_line":"        if concurrent_processes \u003d\u003d 1:"},{"line_number":837,"context_line":"            return eventlet.Semaphore(limit)"},{"line_number":838,"context_line":"        # Use our own Sempahore for interprocess because eventlet blocks with"},{"line_number":839,"context_line":"        # the standard one"},{"line_number":840,"context_line":"        return Semaphore(limit)"},{"line_number":841,"context_line":"    return contextlib.suppress()"}],"source_content_type":"text/x-python","patch_set":1,"id":"8df9c426_2486ffce","line":838,"range":{"start_line":833,"start_character":1,"end_line":838,"end_character":0},"updated":"2026-06-16 07:12:11.000000000","message":"^^","commit_id":"51578e84eaffcf6005b683af4495c41de4435960"},{"author":{"_account_id":34860,"name":"Amit Uniyal","email":"auniyal@redhat.com","username":"auniyal"},"change_message_id":"4e29c16b7c063a677a42638b925d5a998150b38a","unresolved":false,"context_lines":[{"line_number":830,"context_line":"    if limit:"},{"line_number":831,"context_line":"        # In native-thread mode always use our multiprocessing-backed"},{"line_number":832,"context_line":"        # Semaphore; eventlet.Semaphore is not appropriate here."},{"line_number":833,"context_line":"        if concurrency_mode_threading():"},{"line_number":834,"context_line":"            return Semaphore(limit)"},{"line_number":835,"context_line":"        # If we only have 1 process we can use eventlet\u0027s Semaphore"},{"line_number":836,"context_line":"        if concurrent_processes \u003d\u003d 1:"},{"line_number":837,"context_line":"            return eventlet.Semaphore(limit)"},{"line_number":838,"context_line":"        # Use our own Sempahore for interprocess because eventlet blocks with"},{"line_number":839,"context_line":"        # the standard one"},{"line_number":840,"context_line":"        return Semaphore(limit)"},{"line_number":841,"context_line":"    return contextlib.suppress()"}],"source_content_type":"text/x-python","patch_set":1,"id":"8e0c9603_afea493d","line":838,"range":{"start_line":833,"start_character":1,"end_line":838,"end_character":0},"in_reply_to":"8df9c426_2486ffce","updated":"2026-06-16 07:18:06.000000000","message":"Done","commit_id":"51578e84eaffcf6005b683af4495c41de4435960"},{"author":{"_account_id":34860,"name":"Amit Uniyal","email":"auniyal@redhat.com","username":"auniyal"},"change_message_id":"4e29c16b7c063a677a42638b925d5a998150b38a","unresolved":true,"context_lines":[{"line_number":830,"context_line":"    if limit:"},{"line_number":831,"context_line":"        # In native-thread mode always use our multiprocessing-backed"},{"line_number":832,"context_line":"        # Semaphore; eventlet.Semaphore is not appropriate here."},{"line_number":833,"context_line":"        if concurrency_mode_threading():"},{"line_number":834,"context_line":"            return Semaphore(limit)"},{"line_number":835,"context_line":"        # If we only have 1 process we can use eventlet\u0027s Semaphore"},{"line_number":836,"context_line":"        if concurrent_processes \u003d\u003d 1:"},{"line_number":837,"context_line":"            return eventlet.Semaphore(limit)"},{"line_number":838,"context_line":"        # Use our own Sempahore for interprocess because eventlet blocks with"},{"line_number":839,"context_line":"        # the standard one"},{"line_number":840,"context_line":"        return Semaphore(limit)"},{"line_number":841,"context_line":"    return contextlib.suppress()"},{"line_number":842,"context_line":""},{"line_number":843,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"5d840ecd_a3dc1e47","line":840,"range":{"start_line":833,"start_character":0,"end_line":840,"end_character":31},"updated":"2026-06-16 07:18:06.000000000","message":"^^","commit_id":"51578e84eaffcf6005b683af4495c41de4435960"}]}
