)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"6949b34ed2e16dac0c8c5fa5bdc3639d74ab7c9d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"f0e00634_8d1bd329","updated":"2026-02-25 14:55:59.000000000","message":"I just have a minor suggestions otherwise looks good","commit_id":"13d38d0f448736e34f3e36d7587ab14a74a4ee7b"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"83f05ab7fd228fff23a7d882ecf00cd8effb64bc","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"bc810158_f4702462","updated":"2026-02-25 15:01:08.000000000","message":"Neutral review.  Interested in response to making the retry functionality generic instead of so targeted.","commit_id":"13d38d0f448736e34f3e36d7587ab14a74a4ee7b"}],"cinder/volume/drivers/lightos.py":[{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"c0e78828d38b0e900369b12d828901a270324172","unresolved":true,"context_lines":[{"line_number":100,"context_line":"BLOCK_SIZE \u003d 8"},{"line_number":101,"context_line":"LIGHTOS \u003d \"LIGHTOS\""},{"line_number":102,"context_line":"INTERM_SNAPSHOT_PREFIX \u003d \"for_clone_\""},{"line_number":103,"context_line":"STOP_LIGHTOS_CMD_FOR_RETURN_STATUS_LIST \u003d [httpstatus.OK,"},{"line_number":104,"context_line":"                                           httpstatus.BAD_REQUEST,"},{"line_number":105,"context_line":"                                           httpstatus.UNAUTHORIZED,"},{"line_number":106,"context_line":"                                           httpstatus.FORBIDDEN,"}],"source_content_type":"text/x-python","patch_set":1,"id":"de7a7b46_0da42fed","line":103,"range":{"start_line":103,"start_character":42,"end_line":103,"end_character":43},"updated":"2026-02-11 16:47:09.000000000","message":"Can use a tuple instead of a list here.","commit_id":"503a672914b93daedda01fe1990188a2b0bc3870"},{"author":{"_account_id":33612,"name":"yuval","email":"yuval@lightbitslabs.com","username":"yuval"},"change_message_id":"c1e3c1c934fe8444f292f7358cec1482489a103a","unresolved":false,"context_lines":[{"line_number":100,"context_line":"BLOCK_SIZE \u003d 8"},{"line_number":101,"context_line":"LIGHTOS \u003d \"LIGHTOS\""},{"line_number":102,"context_line":"INTERM_SNAPSHOT_PREFIX \u003d \"for_clone_\""},{"line_number":103,"context_line":"STOP_LIGHTOS_CMD_FOR_RETURN_STATUS_LIST \u003d [httpstatus.OK,"},{"line_number":104,"context_line":"                                           httpstatus.BAD_REQUEST,"},{"line_number":105,"context_line":"                                           httpstatus.UNAUTHORIZED,"},{"line_number":106,"context_line":"                                           httpstatus.FORBIDDEN,"}],"source_content_type":"text/x-python","patch_set":1,"id":"2c0fcc91_7c0dd7c9","line":103,"range":{"start_line":103,"start_character":42,"end_line":103,"end_character":43},"in_reply_to":"57949379_55394aa5","updated":"2026-02-23 12:10:19.000000000","message":"Done","commit_id":"503a672914b93daedda01fe1990188a2b0bc3870"},{"author":{"_account_id":33612,"name":"yuval","email":"yuval@lightbitslabs.com","username":"yuval"},"change_message_id":"9538bcbb489fbd7501ac84d4994a9666bca07b1b","unresolved":true,"context_lines":[{"line_number":100,"context_line":"BLOCK_SIZE \u003d 8"},{"line_number":101,"context_line":"LIGHTOS \u003d \"LIGHTOS\""},{"line_number":102,"context_line":"INTERM_SNAPSHOT_PREFIX \u003d \"for_clone_\""},{"line_number":103,"context_line":"STOP_LIGHTOS_CMD_FOR_RETURN_STATUS_LIST \u003d [httpstatus.OK,"},{"line_number":104,"context_line":"                                           httpstatus.BAD_REQUEST,"},{"line_number":105,"context_line":"                                           httpstatus.UNAUTHORIZED,"},{"line_number":106,"context_line":"                                           httpstatus.FORBIDDEN,"}],"source_content_type":"text/x-python","patch_set":1,"id":"57949379_55394aa5","line":103,"range":{"start_line":103,"start_character":42,"end_line":103,"end_character":43},"in_reply_to":"de7a7b46_0da42fed","updated":"2026-02-22 10:26:44.000000000","message":"fixed","commit_id":"503a672914b93daedda01fe1990188a2b0bc3870"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"c0e78828d38b0e900369b12d828901a270324172","unresolved":true,"context_lines":[{"line_number":534,"context_line":"        Returns:"},{"line_number":535,"context_line":"            Tuple of (status_code, response_data)"},{"line_number":536,"context_line":"        \"\"\""},{"line_number":537,"context_line":"        assert vol_uuid or vol_name, \\"},{"line_number":538,"context_line":"            \u0027LightOS volume name or UUID must be specified\u0027"},{"line_number":539,"context_line":""},{"line_number":540,"context_line":"        end_time \u003d time.time() + retry_timeout"},{"line_number":541,"context_line":"        last_status \u003d None"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a85021c_7700e269","line":538,"range":{"start_line":537,"start_character":8,"end_line":538,"end_character":59},"updated":"2026-02-11 16:47:09.000000000","message":"Please change this to raise a VolumeDriverException instead of an assert.","commit_id":"503a672914b93daedda01fe1990188a2b0bc3870"},{"author":{"_account_id":33612,"name":"yuval","email":"yuval@lightbitslabs.com","username":"yuval"},"change_message_id":"c1e3c1c934fe8444f292f7358cec1482489a103a","unresolved":false,"context_lines":[{"line_number":534,"context_line":"        Returns:"},{"line_number":535,"context_line":"            Tuple of (status_code, response_data)"},{"line_number":536,"context_line":"        \"\"\""},{"line_number":537,"context_line":"        assert vol_uuid or vol_name, \\"},{"line_number":538,"context_line":"            \u0027LightOS volume name or UUID must be specified\u0027"},{"line_number":539,"context_line":""},{"line_number":540,"context_line":"        end_time \u003d time.time() + retry_timeout"},{"line_number":541,"context_line":"        last_status \u003d None"}],"source_content_type":"text/x-python","patch_set":1,"id":"34329361_65ea8484","line":538,"range":{"start_line":537,"start_character":8,"end_line":538,"end_character":59},"in_reply_to":"01686a94_806b9430","updated":"2026-02-23 12:10:19.000000000","message":"Done","commit_id":"503a672914b93daedda01fe1990188a2b0bc3870"},{"author":{"_account_id":33612,"name":"yuval","email":"yuval@lightbitslabs.com","username":"yuval"},"change_message_id":"9538bcbb489fbd7501ac84d4994a9666bca07b1b","unresolved":true,"context_lines":[{"line_number":534,"context_line":"        Returns:"},{"line_number":535,"context_line":"            Tuple of (status_code, response_data)"},{"line_number":536,"context_line":"        \"\"\""},{"line_number":537,"context_line":"        assert vol_uuid or vol_name, \\"},{"line_number":538,"context_line":"            \u0027LightOS volume name or UUID must be specified\u0027"},{"line_number":539,"context_line":""},{"line_number":540,"context_line":"        end_time \u003d time.time() + retry_timeout"},{"line_number":541,"context_line":"        last_status \u003d None"}],"source_content_type":"text/x-python","patch_set":1,"id":"01686a94_806b9430","line":538,"range":{"start_line":537,"start_character":8,"end_line":538,"end_character":59},"in_reply_to":"9a85021c_7700e269","updated":"2026-02-22 10:26:44.000000000","message":"fixed","commit_id":"503a672914b93daedda01fe1990188a2b0bc3870"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"6949b34ed2e16dac0c8c5fa5bdc3639d74ab7c9d","unresolved":true,"context_lines":[{"line_number":100,"context_line":"BLOCK_SIZE \u003d 8"},{"line_number":101,"context_line":"LIGHTOS \u003d \"LIGHTOS\""},{"line_number":102,"context_line":"INTERM_SNAPSHOT_PREFIX \u003d \"for_clone_\""},{"line_number":103,"context_line":"STOP_LIGHTOS_CMD_FOR_RETURN_STATUS_LIST \u003d (httpstatus.OK,"},{"line_number":104,"context_line":"                                           httpstatus.BAD_REQUEST,"},{"line_number":105,"context_line":"                                           httpstatus.UNAUTHORIZED,"},{"line_number":106,"context_line":"                                           httpstatus.FORBIDDEN,"}],"source_content_type":"text/x-python","patch_set":2,"id":"6dc5cd36_fe9e0c50","line":103,"range":{"start_line":103,"start_character":0,"end_line":103,"end_character":39},"updated":"2026-02-25 14:55:59.000000000","message":"I really don\u0027t understand what this variable name means. How about just:\n\nLIGHTOS_CMD_STATUSES","commit_id":"13d38d0f448736e34f3e36d7587ab14a74a4ee7b"},{"author":{"_account_id":33612,"name":"yuval","email":"yuval@lightbitslabs.com","username":"yuval"},"change_message_id":"8c3f85b079e3f8a91ec1dad008548050cb0515f2","unresolved":true,"context_lines":[{"line_number":100,"context_line":"BLOCK_SIZE \u003d 8"},{"line_number":101,"context_line":"LIGHTOS \u003d \"LIGHTOS\""},{"line_number":102,"context_line":"INTERM_SNAPSHOT_PREFIX \u003d \"for_clone_\""},{"line_number":103,"context_line":"STOP_LIGHTOS_CMD_FOR_RETURN_STATUS_LIST \u003d (httpstatus.OK,"},{"line_number":104,"context_line":"                                           httpstatus.BAD_REQUEST,"},{"line_number":105,"context_line":"                                           httpstatus.UNAUTHORIZED,"},{"line_number":106,"context_line":"                                           httpstatus.FORBIDDEN,"}],"source_content_type":"text/x-python","patch_set":2,"id":"be932f92_74de4b3a","line":103,"range":{"start_line":103,"start_character":0,"end_line":103,"end_character":39},"in_reply_to":"6dc5cd36_fe9e0c50","updated":"2026-02-25 15:49:03.000000000","message":"I will give a better name - I am not sure its worth the -1 though","commit_id":"13d38d0f448736e34f3e36d7587ab14a74a4ee7b"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"83f05ab7fd228fff23a7d882ecf00cd8effb64bc","unresolved":true,"context_lines":[{"line_number":517,"context_line":"            timeout\u003dtimeout,"},{"line_number":518,"context_line":"            volume_name\u003dvol_name)"},{"line_number":519,"context_line":""},{"line_number":520,"context_line":"    def _get_lightos_volume_with_retry("},{"line_number":521,"context_line":"            self,"},{"line_number":522,"context_line":"            project_name,"},{"line_number":523,"context_line":"            vol_uuid\u003dNone,"}],"source_content_type":"text/x-python","patch_set":2,"id":"152e1ad3_e1fd2243","line":520,"updated":"2026-02-25 15:01:08.000000000","message":"Is this kind of transient error specific to retrieving a volume?  If not, why not make a generic function that can handle any of your requests with a retry?","commit_id":"13d38d0f448736e34f3e36d7587ab14a74a4ee7b"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"83f05ab7fd228fff23a7d882ecf00cd8effb64bc","unresolved":true,"context_lines":[{"line_number":523,"context_line":"            vol_uuid\u003dNone,"},{"line_number":524,"context_line":"            vol_name\u003dNone,"},{"line_number":525,"context_line":"            retry_timeout\u003d5):"},{"line_number":526,"context_line":"        \"\"\"Get LightOS volume with retry logic for 10 seconds by default."},{"line_number":527,"context_line":""},{"line_number":528,"context_line":"        Args:"},{"line_number":529,"context_line":"            project_name: The project name"}],"source_content_type":"text/x-python","patch_set":2,"id":"29fe7fad_16285410","line":526,"updated":"2026-02-25 15:01:08.000000000","message":"Looks like it\u0027s 5, not 10","commit_id":"13d38d0f448736e34f3e36d7587ab14a74a4ee7b"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"83f05ab7fd228fff23a7d882ecf00cd8effb64bc","unresolved":true,"context_lines":[{"line_number":529,"context_line":"            project_name: The project name"},{"line_number":530,"context_line":"            vol_uuid: Volume UUID (optional)"},{"line_number":531,"context_line":"            vol_name: Volume name (optional)"},{"line_number":532,"context_line":"            retry_timeout: How long to retry in seconds (default: 10)"},{"line_number":533,"context_line":""},{"line_number":534,"context_line":"        Returns:"},{"line_number":535,"context_line":"            Tuple of (status_code, response_data)"}],"source_content_type":"text/x-python","patch_set":2,"id":"92a33307_fff241f7","line":532,"updated":"2026-02-25 15:01:08.000000000","message":"Looks like it\u0027s 5, not 10","commit_id":"13d38d0f448736e34f3e36d7587ab14a74a4ee7b"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"83f05ab7fd228fff23a7d882ecf00cd8effb64bc","unresolved":true,"context_lines":[{"line_number":1681,"context_line":"                                         host_ips)"},{"line_number":1682,"context_line":"        if not success or not self._wait_for_volume_acl("},{"line_number":1683,"context_line":"                project_name, lightos_volname, hostnqn, False):"},{"line_number":1684,"context_line":"            msg \u003d \u0027Could not remove ACL for hostnqn %s LightOS \\"},{"line_number":1685,"context_line":"                volume %s, limping along\u0027,"},{"line_number":1686,"context_line":"            LOG.warning("},{"line_number":1687,"context_line":"                msg,"}],"source_content_type":"text/x-python","patch_set":2,"id":"abf56c69_6235582c","line":1684,"updated":"2026-02-25 15:01:08.000000000","message":"You may want to avoid this to head off merge headaches.","commit_id":"13d38d0f448736e34f3e36d7587ab14a74a4ee7b"}]}
