)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":37713,"name":"Alokedip Choudhuri","display_name":"Alokedip","email":"alokedip.choudhuri@infoscale.com","username":"alokedip_choudhuri"},"change_message_id":"0f22fc843af3c6ad989733baab94ff43fcc9382d","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":2,"id":"7850a4f4_7a982354","updated":"2026-04-24 14:50:39.000000000","message":"recheck","commit_id":"e7508adeec0cdb4e5db1e5962c0c7a0f75c07531"},{"author":{"_account_id":37713,"name":"Alokedip Choudhuri","display_name":"Alokedip","email":"alokedip.choudhuri@infoscale.com","username":"alokedip_choudhuri"},"change_message_id":"cea2e671e0c809da30ddc2118de82b15f1af8294","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"1caec6c8_0c3a561f","in_reply_to":"7850a4f4_7a982354","updated":"2026-04-26 10:19:24.000000000","message":"Done","commit_id":"e7508adeec0cdb4e5db1e5962c0c7a0f75c07531"},{"author":{"_account_id":37713,"name":"Alokedip Choudhuri","display_name":"Alokedip","email":"alokedip.choudhuri@infoscale.com","username":"alokedip_choudhuri"},"change_message_id":"3f834f89db23f6ed97bbd0e77c0c4fa7410128f0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"f5209269_69046e21","updated":"2026-04-26 09:38:03.000000000","message":"recheck","commit_id":"392eb2802dde23d69261aa2920ec184ba2702b7f"},{"author":{"_account_id":37713,"name":"Alokedip Choudhuri","display_name":"Alokedip","email":"alokedip.choudhuri@infoscale.com","username":"alokedip_choudhuri"},"change_message_id":"cea2e671e0c809da30ddc2118de82b15f1af8294","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"0c4bff62_3d1f3581","updated":"2026-04-26 10:19:24.000000000","message":"run infoscale-ci","commit_id":"392eb2802dde23d69261aa2920ec184ba2702b7f"},{"author":{"_account_id":37713,"name":"Alokedip Choudhuri","display_name":"Alokedip","email":"alokedip.choudhuri@infoscale.com","username":"alokedip_choudhuri"},"change_message_id":"baaabbdcab984a73b45cef2ed23477f0d00a3659","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"f65ea4fd_c1bce547","updated":"2026-04-26 10:26:09.000000000","message":"run infoscale-ci","commit_id":"392eb2802dde23d69261aa2920ec184ba2702b7f"},{"author":{"_account_id":37713,"name":"Alokedip Choudhuri","display_name":"Alokedip","email":"alokedip.choudhuri@infoscale.com","username":"alokedip_choudhuri"},"change_message_id":"3bc8a3325ebf834092d142ad9c8cbee4119ed744","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"f858c4d1_cadba131","updated":"2026-04-26 10:37:45.000000000","message":"run infoscale-ci","commit_id":"392eb2802dde23d69261aa2920ec184ba2702b7f"}],"cinder/volume/drivers/infoscale.py":[{"author":{"_account_id":36171,"name":"jayaanand borra","display_name":"jayaanand borra","email":"jayaanand.borra@netapp.com","username":"jayaanan","status":"netapp"},"change_message_id":"dbfb26f434c1dc2ab1121416622e6976ae7c8e1b","unresolved":true,"context_lines":[{"line_number":99,"context_line":"    INFOSCALE_REST_OBJID \u003d \"InfoScaleObjId\""},{"line_number":100,"context_line":"    INFOSCALE_PROTONAME \u003d \"infoscale\""},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    def __init__(self, execute \u003d processutils.execute, *args, **kwargs):"},{"line_number":103,"context_line":"        super(InfoScaleCinderDriver, self).__init__(*args, **kwargs)"},{"line_number":104,"context_line":"        self.configuration.append_config_values(volume_opts)"},{"line_number":105,"context_line":"        self._base \u003d self.configuration.inf_base"}],"source_content_type":"text/x-python","patch_set":3,"id":"ab13b78f_2a130031","line":102,"updated":"2026-04-30 18:34:45.000000000","message":"execute is declared and never used","commit_id":"392eb2802dde23d69261aa2920ec184ba2702b7f"},{"author":{"_account_id":37713,"name":"Alokedip Choudhuri","display_name":"Alokedip","email":"alokedip.choudhuri@infoscale.com","username":"alokedip_choudhuri"},"change_message_id":"6d44a6203884fb258abb9cdc63e3f703bda6a97a","unresolved":false,"context_lines":[{"line_number":99,"context_line":"    INFOSCALE_REST_OBJID \u003d \"InfoScaleObjId\""},{"line_number":100,"context_line":"    INFOSCALE_PROTONAME \u003d \"infoscale\""},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    def __init__(self, execute \u003d processutils.execute, *args, **kwargs):"},{"line_number":103,"context_line":"        super(InfoScaleCinderDriver, self).__init__(*args, **kwargs)"},{"line_number":104,"context_line":"        self.configuration.append_config_values(volume_opts)"},{"line_number":105,"context_line":"        self._base \u003d self.configuration.inf_base"}],"source_content_type":"text/x-python","patch_set":3,"id":"ab7b9943_1905f745","line":102,"in_reply_to":"ab13b78f_2a130031","updated":"2026-05-01 14:08:03.000000000","message":"Corrected.","commit_id":"392eb2802dde23d69261aa2920ec184ba2702b7f"},{"author":{"_account_id":36171,"name":"jayaanand borra","display_name":"jayaanand borra","email":"jayaanand.borra@netapp.com","username":"jayaanan","status":"netapp"},"change_message_id":"dbfb26f434c1dc2ab1121416622e6976ae7c8e1b","unresolved":true,"context_lines":[{"line_number":143,"context_line":"        if self._token is not None:"},{"line_number":144,"context_line":"            now \u003d timeutils.utcnow()"},{"line_number":145,"context_line":"            tdelta \u003d now - self._token_time"},{"line_number":146,"context_line":"            if timedelta(minutes \u003d 15) \u003c\u003d tdelta:"},{"line_number":147,"context_line":"                msg \u003d (_(\"InfoScaleCinderDriver: Token has been \""},{"line_number":148,"context_line":"                         \"expired now: %(now)s, token_issued: \""},{"line_number":149,"context_line":"                         \"%(token_issue_time)s, delta: %(delta)s\") % {"}],"source_content_type":"text/x-python","patch_set":3,"id":"34ffc16e_3bcb7d2a","line":146,"updated":"2026-04-30 18:34:45.000000000","message":"why 15 minutes hardcoded","commit_id":"392eb2802dde23d69261aa2920ec184ba2702b7f"},{"author":{"_account_id":37713,"name":"Alokedip Choudhuri","display_name":"Alokedip","email":"alokedip.choudhuri@infoscale.com","username":"alokedip_choudhuri"},"change_message_id":"6d44a6203884fb258abb9cdc63e3f703bda6a97a","unresolved":false,"context_lines":[{"line_number":143,"context_line":"        if self._token is not None:"},{"line_number":144,"context_line":"            now \u003d timeutils.utcnow()"},{"line_number":145,"context_line":"            tdelta \u003d now - self._token_time"},{"line_number":146,"context_line":"            if timedelta(minutes \u003d 15) \u003c\u003d tdelta:"},{"line_number":147,"context_line":"                msg \u003d (_(\"InfoScaleCinderDriver: Token has been \""},{"line_number":148,"context_line":"                         \"expired now: %(now)s, token_issued: \""},{"line_number":149,"context_line":"                         \"%(token_issue_time)s, delta: %(delta)s\") % {"}],"source_content_type":"text/x-python","patch_set":3,"id":"a32c9652_97f9927f","line":146,"in_reply_to":"34ffc16e_3bcb7d2a","updated":"2026-05-01 14:08:03.000000000","message":"Corrected. \n\nI have made one configuration parameter for the token expiry time. Infoscale REST API token\u0027s expiry time is 15 minutes. Hence made the default value of the newly configurable parameter as \"15\".","commit_id":"392eb2802dde23d69261aa2920ec184ba2702b7f"},{"author":{"_account_id":36171,"name":"jayaanand borra","display_name":"jayaanand borra","email":"jayaanand.borra@netapp.com","username":"jayaanan","status":"netapp"},"change_message_id":"dbfb26f434c1dc2ab1121416622e6976ae7c8e1b","unresolved":true,"context_lines":[{"line_number":281,"context_line":""},{"line_number":282,"context_line":"    def _do_volume_snapshot(self, src_vol, tgt_vol):"},{"line_number":283,"context_line":"        input_data \u003d {\u0027SnapshotName\u0027: tgt_vol.name}"},{"line_number":284,"context_line":"        src_volid \u003d src_vol.metadata[self.INFOSCALE_REST_OBJID]"},{"line_number":285,"context_line":"        api_endpoint \u003d self._create_cindersnapshot.format(src_volid)"},{"line_number":286,"context_line":"        resp, __ \u003d self._rest_api(api_endpoint, self.VA_POST_STR, input_data)"},{"line_number":287,"context_line":"        return resp[\u0027SnapshotId\u0027]"}],"source_content_type":"text/x-python","patch_set":3,"id":"972e65c4_040af333","line":284,"updated":"2026-04-30 18:34:45.000000000","message":"INFOSCALE_REST_OBJID may miss. get with default will help","commit_id":"392eb2802dde23d69261aa2920ec184ba2702b7f"},{"author":{"_account_id":37713,"name":"Alokedip Choudhuri","display_name":"Alokedip","email":"alokedip.choudhuri@infoscale.com","username":"alokedip_choudhuri"},"change_message_id":"6d44a6203884fb258abb9cdc63e3f703bda6a97a","unresolved":false,"context_lines":[{"line_number":281,"context_line":""},{"line_number":282,"context_line":"    def _do_volume_snapshot(self, src_vol, tgt_vol):"},{"line_number":283,"context_line":"        input_data \u003d {\u0027SnapshotName\u0027: tgt_vol.name}"},{"line_number":284,"context_line":"        src_volid \u003d src_vol.metadata[self.INFOSCALE_REST_OBJID]"},{"line_number":285,"context_line":"        api_endpoint \u003d self._create_cindersnapshot.format(src_volid)"},{"line_number":286,"context_line":"        resp, __ \u003d self._rest_api(api_endpoint, self.VA_POST_STR, input_data)"},{"line_number":287,"context_line":"        return resp[\u0027SnapshotId\u0027]"}],"source_content_type":"text/x-python","patch_set":3,"id":"0b293358_06d67614","line":284,"in_reply_to":"972e65c4_040af333","updated":"2026-05-01 14:08:03.000000000","message":"Corrected.","commit_id":"392eb2802dde23d69261aa2920ec184ba2702b7f"},{"author":{"_account_id":36171,"name":"jayaanand borra","display_name":"jayaanand borra","email":"jayaanand.borra@netapp.com","username":"jayaanan","status":"netapp"},"change_message_id":"dbfb26f434c1dc2ab1121416622e6976ae7c8e1b","unresolved":true,"context_lines":[{"line_number":297,"context_line":"    def _build_volume_payload(self, volume):"},{"line_number":298,"context_line":"        vtype \u003d volume.volume_type"},{"line_number":299,"context_line":"        vtype_name \u003d vtype.get(\u0027name\u0027, None)"},{"line_number":300,"context_line":"        vtype_extraspecs \u003d vtype.extra_specs if vtype else {}"},{"line_number":301,"context_line":"        volcreate_payload \u003d {}"},{"line_number":302,"context_line":"        pv_props \u003d {}"},{"line_number":303,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"39e29b6b_3e7253dc","line":300,"updated":"2026-04-30 18:34:45.000000000","message":"vtype is a object or dict? .get not work for object.","commit_id":"392eb2802dde23d69261aa2920ec184ba2702b7f"},{"author":{"_account_id":37713,"name":"Alokedip Choudhuri","display_name":"Alokedip","email":"alokedip.choudhuri@infoscale.com","username":"alokedip_choudhuri"},"change_message_id":"6d44a6203884fb258abb9cdc63e3f703bda6a97a","unresolved":false,"context_lines":[{"line_number":297,"context_line":"    def _build_volume_payload(self, volume):"},{"line_number":298,"context_line":"        vtype \u003d volume.volume_type"},{"line_number":299,"context_line":"        vtype_name \u003d vtype.get(\u0027name\u0027, None)"},{"line_number":300,"context_line":"        vtype_extraspecs \u003d vtype.extra_specs if vtype else {}"},{"line_number":301,"context_line":"        volcreate_payload \u003d {}"},{"line_number":302,"context_line":"        pv_props \u003d {}"},{"line_number":303,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"c91dab2c_2ae38b3f","line":300,"in_reply_to":"39e29b6b_3e7253dc","updated":"2026-05-01 14:08:03.000000000","message":"vtype is a VolumeType object. However, it supports dict-like access (.get(), []) because it inherits from CinderObjectDictCompat. But I have updated the code to access the name like vtype.name to keep it consistent with other drivers.","commit_id":"392eb2802dde23d69261aa2920ec184ba2702b7f"},{"author":{"_account_id":36171,"name":"jayaanand borra","display_name":"jayaanand borra","email":"jayaanand.borra@netapp.com","username":"jayaanan","status":"netapp"},"change_message_id":"dbfb26f434c1dc2ab1121416622e6976ae7c8e1b","unresolved":true,"context_lines":[{"line_number":344,"context_line":"        \"\"\"Make sure volume is exported.\"\"\""},{"line_number":345,"context_line":"        pass"},{"line_number":346,"context_line":""},{"line_number":347,"context_line":"    def check_for_setup_error(self):"},{"line_number":348,"context_line":"        pass"},{"line_number":349,"context_line":""},{"line_number":350,"context_line":"    def do_setup(self, context):"}],"source_content_type":"text/x-python","patch_set":3,"id":"67bf508d_eb55dc77","line":347,"updated":"2026-04-30 18:34:45.000000000","message":"you may check config errors hear. New driver needs to inform config issue to user","commit_id":"392eb2802dde23d69261aa2920ec184ba2702b7f"},{"author":{"_account_id":37713,"name":"Alokedip Choudhuri","display_name":"Alokedip","email":"alokedip.choudhuri@infoscale.com","username":"alokedip_choudhuri"},"change_message_id":"6d44a6203884fb258abb9cdc63e3f703bda6a97a","unresolved":false,"context_lines":[{"line_number":344,"context_line":"        \"\"\"Make sure volume is exported.\"\"\""},{"line_number":345,"context_line":"        pass"},{"line_number":346,"context_line":""},{"line_number":347,"context_line":"    def check_for_setup_error(self):"},{"line_number":348,"context_line":"        pass"},{"line_number":349,"context_line":""},{"line_number":350,"context_line":"    def do_setup(self, context):"}],"source_content_type":"text/x-python","patch_set":3,"id":"f7614ad3_3377faa0","line":347,"in_reply_to":"67bf508d_eb55dc77","updated":"2026-05-01 14:08:03.000000000","message":"Updated.","commit_id":"392eb2802dde23d69261aa2920ec184ba2702b7f"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"9a695034fa184b41baaa236d3a28e91af874a880","unresolved":true,"context_lines":[{"line_number":550,"context_line":"        metadata \u003d volume.metadata or {}"},{"line_number":551,"context_line":"        return {\u0027provider_location\u0027: volume.provider_location,"},{"line_number":552,"context_line":"                \u0027metadata\u0027: {**metadata,"},{"line_number":553,"context_line":"                             self.INFOSCALE_REST_OBJID: vol_objid}}"},{"line_number":554,"context_line":""},{"line_number":555,"context_line":"    @coordination.synchronized(\u0027{self.driver_prefix}-{volume.id}\u0027)"},{"line_number":556,"context_line":"    def create_volume(self, volume):"}],"source_content_type":"text/x-python","patch_set":5,"id":"f1241c3b_b1981e07","line":553,"updated":"2026-05-05 20:51:51.000000000","message":"This looks like it\u0027s persisting info about identifying the volume in the volume metadata. The volume metadata is user-editable so this isn\u0027t safe to do - should be in the provider_location or provider_id field.","commit_id":"a87497ca6a24faa90e8fb8c32dd4a30d0e49aa69"},{"author":{"_account_id":37713,"name":"Alokedip Choudhuri","display_name":"Alokedip","email":"alokedip.choudhuri@infoscale.com","username":"alokedip_choudhuri"},"change_message_id":"29fdb2f8e9aec0a2a2da10f9c209467598aebbf0","unresolved":false,"context_lines":[{"line_number":550,"context_line":"        metadata \u003d volume.metadata or {}"},{"line_number":551,"context_line":"        return {\u0027provider_location\u0027: volume.provider_location,"},{"line_number":552,"context_line":"                \u0027metadata\u0027: {**metadata,"},{"line_number":553,"context_line":"                             self.INFOSCALE_REST_OBJID: vol_objid}}"},{"line_number":554,"context_line":""},{"line_number":555,"context_line":"    @coordination.synchronized(\u0027{self.driver_prefix}-{volume.id}\u0027)"},{"line_number":556,"context_line":"    def create_volume(self, volume):"}],"source_content_type":"text/x-python","patch_set":5,"id":"adc4e377_258f2e52","line":553,"in_reply_to":"75014213_f267bd75","updated":"2026-05-07 13:46:30.000000000","message":"Typo, made the code changes to store the ID in \"provider_id\".","commit_id":"a87497ca6a24faa90e8fb8c32dd4a30d0e49aa69"},{"author":{"_account_id":37713,"name":"Alokedip Choudhuri","display_name":"Alokedip","email":"alokedip.choudhuri@infoscale.com","username":"alokedip_choudhuri"},"change_message_id":"ba73e7190b7a952c505906ebb28fb8eb4d43fa16","unresolved":false,"context_lines":[{"line_number":550,"context_line":"        metadata \u003d volume.metadata or {}"},{"line_number":551,"context_line":"        return {\u0027provider_location\u0027: volume.provider_location,"},{"line_number":552,"context_line":"                \u0027metadata\u0027: {**metadata,"},{"line_number":553,"context_line":"                             self.INFOSCALE_REST_OBJID: vol_objid}}"},{"line_number":554,"context_line":""},{"line_number":555,"context_line":"    @coordination.synchronized(\u0027{self.driver_prefix}-{volume.id}\u0027)"},{"line_number":556,"context_line":"    def create_volume(self, volume):"}],"source_content_type":"text/x-python","patch_set":5,"id":"75014213_f267bd75","line":553,"in_reply_to":"f1241c3b_b1981e07","updated":"2026-05-07 13:39:32.000000000","message":"Hi Eric,\n\nThank you for the review!\n\nI have incorporated the changes to store the ID in the \"provider_location\".","commit_id":"a87497ca6a24faa90e8fb8c32dd4a30d0e49aa69"}]}
