)]}'
{"cinder/exception.py":[{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"63c51fd6b450394c0ea5fc0347fc4822ce0be8b7","unresolved":false,"context_lines":[{"line_number":1095,"context_line":"    message \u003d _(\"An invalid \u0027name\u0027 value was provided. %(reason)s\")"},{"line_number":1096,"context_line":""},{"line_number":1097,"context_line":""},{"line_number":1098,"context_line":"# Infortrend Driver"},{"line_number":1099,"context_line":"class InfortrendCliException(CinderException):"},{"line_number":1100,"context_line":"    message \u003d _(\"Infortrend CLI exception: %(err)s Param: %(param)s \""},{"line_number":1101,"context_line":"                \"(Return Code: %(rc)s) (Output: %(out)s)\")"}],"source_content_type":"text/x-python","patch_set":19,"id":"7faddb67_948b571d","line":1098,"updated":"2019-07-16 21:35:10.000000000","message":"We are no longer taking exceptions for the individual drivers in here.  This needs to move to your driver.","commit_id":"58e140999c87bbf41abc20fb8d9bd45e24772af7"},{"author":{"_account_id":29311,"name":"KuiRong","email":"Kuirong.Chen@infortrend.com","username":"Kuirong.Chen"},"change_message_id":"040ef1c1b94ad38085731fd707771c9fea4a8cc5","unresolved":false,"context_lines":[{"line_number":1095,"context_line":"    message \u003d _(\"An invalid \u0027name\u0027 value was provided. %(reason)s\")"},{"line_number":1096,"context_line":""},{"line_number":1097,"context_line":""},{"line_number":1098,"context_line":"# Infortrend Driver"},{"line_number":1099,"context_line":"class InfortrendCliException(CinderException):"},{"line_number":1100,"context_line":"    message \u003d _(\"Infortrend CLI exception: %(err)s Param: %(param)s \""},{"line_number":1101,"context_line":"                \"(Return Code: %(rc)s) (Output: %(out)s)\")"}],"source_content_type":"text/x-python","patch_set":19,"id":"7faddb67_b276a06f","line":1098,"in_reply_to":"7faddb67_948b571d","updated":"2019-07-17 06:02:43.000000000","message":"Done","commit_id":"58e140999c87bbf41abc20fb8d9bd45e24772af7"}],"cinder/volume/drivers/infortrend/infortrend_fc_cli.py":[{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"6f84f7979ccaf68c5f8857420c5e9a567f5f742f","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        self.common.check_for_setup_error()"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def create_volume(self, volume):"},{"line_number":48,"context_line":"        \"\"\"Creates a volume."},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"        Can optionally return a Dictionary of changes"},{"line_number":51,"context_line":"        to the volume object to be persisted."}],"source_content_type":"text/x-python","patch_set":11,"id":"9f91af0f_ac91e59b","line":48,"range":{"start_line":48,"start_character":11,"end_line":48,"end_character":18},"updated":"2018-01-04 07:46:57.000000000","message":"Create instead of Creates?","commit_id":"895af803be22360009007e8e63e4ec2fda13a54f"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"6f84f7979ccaf68c5f8857420c5e9a567f5f742f","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        return self.common.create_volume(volume)"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    def create_volume_from_snapshot(self, volume, snapshot):"},{"line_number":58,"context_line":"        \"\"\"Creates a volume from a snapshot.\"\"\""},{"line_number":59,"context_line":"        LOG.debug("},{"line_number":60,"context_line":"            \u0027create_volume_from_snapshot volume id\u003d%(volume_id)s \u0027"},{"line_number":61,"context_line":"            \u0027snapshot id\u003d%(snapshot_id)s\u0027, {"}],"source_content_type":"text/x-python","patch_set":11,"id":"9f91af0f_8cec212a","line":58,"range":{"start_line":58,"start_character":11,"end_line":58,"end_character":18},"updated":"2018-01-04 07:46:57.000000000","message":"ditto.","commit_id":"895af803be22360009007e8e63e4ec2fda13a54f"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"6f84f7979ccaf68c5f8857420c5e9a567f5f742f","unresolved":false,"context_lines":[{"line_number":63,"context_line":"        return self.common.create_volume_from_snapshot(volume, snapshot)"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    def create_cloned_volume(self, volume, src_vref):"},{"line_number":66,"context_line":"        \"\"\"Creates a clone of the specified volume.\"\"\""},{"line_number":67,"context_line":"        LOG.debug("},{"line_number":68,"context_line":"            \u0027create_cloned_volume volume id\u003d%(volume_id)s \u0027"},{"line_number":69,"context_line":"            \u0027src_vref provider_location\u003d%(provider_location)s\u0027, {"}],"source_content_type":"text/x-python","patch_set":11,"id":"9f91af0f_2cf3950c","line":66,"range":{"start_line":66,"start_character":11,"end_line":66,"end_character":18},"updated":"2018-01-04 07:46:57.000000000","message":"ditto.","commit_id":"895af803be22360009007e8e63e4ec2fda13a54f"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"6f84f7979ccaf68c5f8857420c5e9a567f5f742f","unresolved":false,"context_lines":[{"line_number":79,"context_line":"        self.common.extend_volume(volume, new_size)"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    def delete_volume(self, volume):"},{"line_number":82,"context_line":"        \"\"\"Deletes a volume.\"\"\""},{"line_number":83,"context_line":"        LOG.debug(\u0027delete_volume volume id\u003d%(volume_id)s\u0027, {"},{"line_number":84,"context_line":"            \u0027volume_id\u0027: volume[\u0027id\u0027]})"},{"line_number":85,"context_line":"        return self.common.delete_volume(volume)"}],"source_content_type":"text/x-python","patch_set":11,"id":"9f91af0f_6cd2fd5e","line":82,"range":{"start_line":82,"start_character":11,"end_line":82,"end_character":18},"updated":"2018-01-04 07:46:57.000000000","message":"Delete instead of Deletes?","commit_id":"895af803be22360009007e8e63e4ec2fda13a54f"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"6f84f7979ccaf68c5f8857420c5e9a567f5f742f","unresolved":false,"context_lines":[{"line_number":101,"context_line":"        return self.common.migrate_volume(volume, host)"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    def create_snapshot(self, snapshot):"},{"line_number":104,"context_line":"        \"\"\"Creates a snapshot.\"\"\""},{"line_number":105,"context_line":"        LOG.debug("},{"line_number":106,"context_line":"            \u0027create_snapshot snapshot id\u003d%(snapshot_id)s \u0027"},{"line_number":107,"context_line":"            \u0027volume id\u003d%(volume_id)s\u0027, {"}],"source_content_type":"text/x-python","patch_set":11,"id":"9f91af0f_ecc5ad8f","line":104,"range":{"start_line":104,"start_character":11,"end_line":104,"end_character":18},"updated":"2018-01-04 07:46:57.000000000","message":"ditto.","commit_id":"895af803be22360009007e8e63e4ec2fda13a54f"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"6f84f7979ccaf68c5f8857420c5e9a567f5f742f","unresolved":false,"context_lines":[{"line_number":110,"context_line":"        return self.common.create_snapshot(snapshot)"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"    def delete_snapshot(self, snapshot):"},{"line_number":113,"context_line":"        \"\"\"Deletes a snapshot.\"\"\""},{"line_number":114,"context_line":"        LOG.debug("},{"line_number":115,"context_line":"            \u0027delete_snapshot snapshot id\u003d%(snapshot_id)s \u0027"},{"line_number":116,"context_line":"            \u0027volume id\u003d%(volume_id)s\u0027, {"}],"source_content_type":"text/x-python","patch_set":11,"id":"9f91af0f_0cc1f180","line":113,"range":{"start_line":113,"start_character":11,"end_line":113,"end_character":18},"updated":"2018-01-04 07:46:57.000000000","message":"ditto.","commit_id":"895af803be22360009007e8e63e4ec2fda13a54f"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"6f84f7979ccaf68c5f8857420c5e9a567f5f742f","unresolved":false,"context_lines":[{"line_number":123,"context_line":"        pass"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"    def create_export(self, context, volume, connector):"},{"line_number":126,"context_line":"        \"\"\"Exports the volume."},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"        Can optionally return a Dictionary of changes"},{"line_number":129,"context_line":"        to the volume object to be persisted."}],"source_content_type":"text/x-python","patch_set":11,"id":"9f91af0f_acbfa5f9","line":126,"range":{"start_line":126,"start_character":11,"end_line":126,"end_character":18},"updated":"2018-01-04 07:46:57.000000000","message":"Export?","commit_id":"895af803be22360009007e8e63e4ec2fda13a54f"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"6f84f7979ccaf68c5f8857420c5e9a567f5f742f","unresolved":false,"context_lines":[{"line_number":134,"context_line":"        return self.common.create_export(context, volume)"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"    def remove_export(self, context, volume):"},{"line_number":137,"context_line":"        \"\"\"Removes an export for a volume.\"\"\""},{"line_number":138,"context_line":"        pass"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    @fczm_utils.add_fc_zone"}],"source_content_type":"text/x-python","patch_set":11,"id":"9f91af0f_ccba2909","line":137,"range":{"start_line":137,"start_character":11,"end_line":137,"end_character":18},"updated":"2018-01-04 07:46:57.000000000","message":"Remove?","commit_id":"895af803be22360009007e8e63e4ec2fda13a54f"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"6f84f7979ccaf68c5f8857420c5e9a567f5f742f","unresolved":false,"context_lines":[{"line_number":221,"context_line":"        return self.common.manage_existing(volume, existing_ref)"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"    def unmanage(self, volume):"},{"line_number":224,"context_line":"        \"\"\"Removes the specified volume from Cinder management."},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"        Does not delete the underlying backend storage object."},{"line_number":227,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"9f91af0f_6cd3dd39","line":224,"range":{"start_line":224,"start_character":11,"end_line":224,"end_character":18},"updated":"2018-01-04 07:46:57.000000000","message":"Remove?","commit_id":"895af803be22360009007e8e63e4ec2fda13a54f"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"6f84f7979ccaf68c5f8857420c5e9a567f5f742f","unresolved":false,"context_lines":[{"line_number":301,"context_line":"                                                  sort_dirs)"},{"line_number":302,"context_line":""},{"line_number":303,"context_line":"    def manage_existing_snapshot(self, snapshot, existing_ref):"},{"line_number":304,"context_line":"        \"\"\"Brings an existing backend storage object under Cinder management."},{"line_number":305,"context_line":""},{"line_number":306,"context_line":"        :param snapshot:     Cinder volume snapshot to manage"},{"line_number":307,"context_line":"        :param existing_ref: Driver-specific information used to identify a"}],"source_content_type":"text/x-python","patch_set":11,"id":"9f91af0f_8cd66127","line":304,"range":{"start_line":304,"start_character":11,"end_line":304,"end_character":17},"updated":"2018-01-04 07:46:57.000000000","message":"Bring?","commit_id":"895af803be22360009007e8e63e4ec2fda13a54f"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"6f84f7979ccaf68c5f8857420c5e9a567f5f742f","unresolved":false,"context_lines":[{"line_number":361,"context_line":"                                                    sort_dirs)"},{"line_number":362,"context_line":""},{"line_number":363,"context_line":"    def unmanage_snapshot(self, snapshot):"},{"line_number":364,"context_line":"        \"\"\"Removes the specified snapshot from Cinder management."},{"line_number":365,"context_line":""},{"line_number":366,"context_line":"        Does not delete the underlying backend storage object."},{"line_number":367,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"9f91af0f_2cddd541","line":364,"range":{"start_line":364,"start_character":11,"end_line":364,"end_character":18},"updated":"2018-01-04 07:46:57.000000000","message":"ditto.","commit_id":"895af803be22360009007e8e63e4ec2fda13a54f"}],"cinder/volume/drivers/infortrend/infortrend_iscsi_cli.py":[{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"6f84f7979ccaf68c5f8857420c5e9a567f5f742f","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        self.common.check_for_setup_error()"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def create_volume(self, volume):"},{"line_number":46,"context_line":"        \"\"\"Creates a volume."},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"        Can optionally return a Dictionary of changes"},{"line_number":49,"context_line":"        to the volume object to be persisted."}],"source_content_type":"text/x-python","patch_set":11,"id":"9f91af0f_eccfed7c","line":46,"range":{"start_line":46,"start_character":11,"end_line":46,"end_character":18},"updated":"2018-01-04 07:46:57.000000000","message":"Create?","commit_id":"895af803be22360009007e8e63e4ec2fda13a54f"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"6f84f7979ccaf68c5f8857420c5e9a567f5f742f","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        return self.common.create_volume(volume)"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    def create_volume_from_snapshot(self, volume, snapshot):"},{"line_number":56,"context_line":"        \"\"\"Creates a volume from a snapshot.\"\"\""},{"line_number":57,"context_line":"        LOG.debug("},{"line_number":58,"context_line":"            \u0027create_volume_from_snapshot volume id\u003d%(volume_id)s \u0027"},{"line_number":59,"context_line":"            \u0027snapshot id\u003d%(snapshot_id)s\u0027, {"}],"source_content_type":"text/x-python","patch_set":11,"id":"9f91af0f_2c99556d","line":56,"range":{"start_line":56,"start_character":11,"end_line":56,"end_character":18},"updated":"2018-01-04 07:46:57.000000000","message":"ditto.","commit_id":"895af803be22360009007e8e63e4ec2fda13a54f"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"6f84f7979ccaf68c5f8857420c5e9a567f5f742f","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        return self.common.create_volume_from_snapshot(volume, snapshot)"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    def create_cloned_volume(self, volume, src_vref):"},{"line_number":64,"context_line":"        \"\"\"Creates a clone of the specified volume.\"\"\""},{"line_number":65,"context_line":"        LOG.debug("},{"line_number":66,"context_line":"            \u0027create_cloned_volume volume id\u003d%(volume_id)s \u0027"},{"line_number":67,"context_line":"            \u0027src_vref provider_location\u003d%(provider_location)s\u0027, {"}],"source_content_type":"text/x-python","patch_set":11,"id":"9f91af0f_0ccb3172","line":64,"range":{"start_line":64,"start_character":11,"end_line":64,"end_character":18},"updated":"2018-01-04 07:46:57.000000000","message":"Create?","commit_id":"895af803be22360009007e8e63e4ec2fda13a54f"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"6f84f7979ccaf68c5f8857420c5e9a567f5f742f","unresolved":false,"context_lines":[{"line_number":77,"context_line":"        self.common.extend_volume(volume, new_size)"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    def delete_volume(self, volume):"},{"line_number":80,"context_line":"        \"\"\"Deletes a volume.\"\"\""},{"line_number":81,"context_line":"        LOG.debug(\u0027delete_volume volume id\u003d%(volume_id)s\u0027, {"},{"line_number":82,"context_line":"            \u0027volume_id\u0027: volume[\u0027id\u0027]})"},{"line_number":83,"context_line":"        return self.common.delete_volume(volume)"}],"source_content_type":"text/x-python","patch_set":11,"id":"9f91af0f_6c8f5d23","line":80,"range":{"start_line":80,"start_character":11,"end_line":80,"end_character":18},"updated":"2018-01-04 07:46:57.000000000","message":"Delete?","commit_id":"895af803be22360009007e8e63e4ec2fda13a54f"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"6f84f7979ccaf68c5f8857420c5e9a567f5f742f","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        return self.common.migrate_volume(volume, host)"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    def create_snapshot(self, snapshot):"},{"line_number":102,"context_line":"        \"\"\"Creates a snapshot.\"\"\""},{"line_number":103,"context_line":"        LOG.debug("},{"line_number":104,"context_line":"            \u0027create_snapshot snapshot id\u003d%(snapshot_id)s \u0027"},{"line_number":105,"context_line":"            \u0027volume_id\u003d%(volume_id)s\u0027, {"}],"source_content_type":"text/x-python","patch_set":11,"id":"9f91af0f_ec7dad1c","line":102,"range":{"start_line":102,"start_character":11,"end_line":102,"end_character":18},"updated":"2018-01-04 07:46:57.000000000","message":"ditto.","commit_id":"895af803be22360009007e8e63e4ec2fda13a54f"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"6f84f7979ccaf68c5f8857420c5e9a567f5f742f","unresolved":false,"context_lines":[{"line_number":108,"context_line":"        return self.common.create_snapshot(snapshot)"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"    def delete_snapshot(self, snapshot):"},{"line_number":111,"context_line":"        \"\"\"Deletes a snapshot.\"\"\""},{"line_number":112,"context_line":"        LOG.debug("},{"line_number":113,"context_line":"            \u0027delete_snapshot snapshot id\u003d%(snapshot_id)s \u0027"},{"line_number":114,"context_line":"            \u0027volume_id\u003d%(volume_id)s\u0027, {"}],"source_content_type":"text/x-python","patch_set":11,"id":"9f91af0f_ccc46962","line":111,"range":{"start_line":111,"start_character":11,"end_line":111,"end_character":18},"updated":"2018-01-04 07:46:57.000000000","message":"Delete?","commit_id":"895af803be22360009007e8e63e4ec2fda13a54f"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"6f84f7979ccaf68c5f8857420c5e9a567f5f742f","unresolved":false,"context_lines":[{"line_number":121,"context_line":"        pass"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    def create_export(self, context, volume, connector):"},{"line_number":124,"context_line":"        \"\"\"Exports the volume."},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"        Can optionally return a Dictionary of changes"},{"line_number":127,"context_line":"        to the volume object to be persisted."}],"source_content_type":"text/x-python","patch_set":11,"id":"9f91af0f_6c8afd1b","line":124,"range":{"start_line":124,"start_character":11,"end_line":124,"end_character":18},"updated":"2018-01-04 07:46:57.000000000","message":"Export?","commit_id":"895af803be22360009007e8e63e4ec2fda13a54f"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"6f84f7979ccaf68c5f8857420c5e9a567f5f742f","unresolved":false,"context_lines":[{"line_number":132,"context_line":"        return self.common.create_export(context, volume)"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"    def remove_export(self, context, volume):"},{"line_number":135,"context_line":"        \"\"\"Removes an export for a volume.\"\"\""},{"line_number":136,"context_line":"        pass"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"    def initialize_connection(self, volume, connector):"}],"source_content_type":"text/x-python","patch_set":11,"id":"9f91af0f_6ca19da9","line":135,"range":{"start_line":135,"start_character":11,"end_line":135,"end_character":18},"updated":"2018-01-04 07:46:57.000000000","message":"Remove?","commit_id":"895af803be22360009007e8e63e4ec2fda13a54f"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"6f84f7979ccaf68c5f8857420c5e9a567f5f742f","unresolved":false,"context_lines":[{"line_number":194,"context_line":"        return self.common.manage_existing(volume, existing_ref)"},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"    def unmanage(self, volume):"},{"line_number":197,"context_line":"        \"\"\"Removes the specified volume from Cinder management."},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"        Does not delete the underlying backend storage object."},{"line_number":200,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"9f91af0f_4cae1999","line":197,"range":{"start_line":197,"start_character":11,"end_line":197,"end_character":18},"updated":"2018-01-04 07:46:57.000000000","message":"Remove?","commit_id":"895af803be22360009007e8e63e4ec2fda13a54f"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"6f84f7979ccaf68c5f8857420c5e9a567f5f742f","unresolved":false,"context_lines":[{"line_number":274,"context_line":"                                                  sort_dirs)"},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"    def manage_existing_snapshot(self, snapshot, existing_ref):"},{"line_number":277,"context_line":"        \"\"\"Brings an existing backend storage object under Cinder management."},{"line_number":278,"context_line":""},{"line_number":279,"context_line":"        :param snapshot:     Cinder volume snapshot to manage"},{"line_number":280,"context_line":"        :param existing_ref: Driver-specific information used to identify a"}],"source_content_type":"text/x-python","patch_set":11,"id":"9f91af0f_8cbf41cf","line":277,"range":{"start_line":277,"start_character":11,"end_line":277,"end_character":17},"updated":"2018-01-04 07:46:57.000000000","message":"Bring?","commit_id":"895af803be22360009007e8e63e4ec2fda13a54f"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"6f84f7979ccaf68c5f8857420c5e9a567f5f742f","unresolved":false,"context_lines":[{"line_number":334,"context_line":"                                                    sort_dirs)"},{"line_number":335,"context_line":""},{"line_number":336,"context_line":"    def unmanage_snapshot(self, snapshot):"},{"line_number":337,"context_line":"        \"\"\"Removes the specified snapshot from Cinder management."},{"line_number":338,"context_line":""},{"line_number":339,"context_line":"        Does not delete the underlying backend storage object."},{"line_number":340,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"9f91af0f_acf005cb","line":337,"range":{"start_line":337,"start_character":11,"end_line":337,"end_character":18},"updated":"2018-01-04 07:46:57.000000000","message":"Remove?","commit_id":"895af803be22360009007e8e63e4ec2fda13a54f"}],"cinder/volume/drivers/infortrend/raidcmd_cli/common_cli.py":[{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"9f3a089194d2c48bc4363e5f124974fab138185c","unresolved":false,"context_lines":[{"line_number":36,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"infortrend_opts \u003d ["},{"line_number":39,"context_line":"    cfg.StrOpt(\u0027infortrend_pools_name\u0027,"},{"line_number":40,"context_line":"               default\u003d\u0027\u0027,"},{"line_number":41,"context_line":"               help\u003d\u0027The Infortrend logical volumes name list. \u0027"},{"line_number":42,"context_line":"               \u0027It is separated with comma.\u0027),"}],"source_content_type":"text/x-python","patch_set":10,"id":"9f91af0f_58191877","line":39,"range":{"start_line":39,"start_character":8,"end_line":39,"end_character":14},"updated":"2018-01-02 16:37:57.000000000","message":"Shouldn\u0027t this be a ListOpt instead of a StrOpt?  It would be good to fix this up.","commit_id":"2e8d6d722470d371aa27bfcc8c3e6583cd102400"},{"author":{"_account_id":24561,"name":"billsung","email":"billsung.taiwan@gmail.com","username":"rebillsung"},"change_message_id":"bbc9e892711e02e3dc2b26bae4a59e65cc4da4bc","unresolved":false,"context_lines":[{"line_number":36,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"infortrend_opts \u003d ["},{"line_number":39,"context_line":"    cfg.StrOpt(\u0027infortrend_pools_name\u0027,"},{"line_number":40,"context_line":"               default\u003d\u0027\u0027,"},{"line_number":41,"context_line":"               help\u003d\u0027The Infortrend logical volumes name list. \u0027"},{"line_number":42,"context_line":"               \u0027It is separated with comma.\u0027),"}],"source_content_type":"text/x-python","patch_set":10,"id":"9f91af0f_22b09af4","line":39,"range":{"start_line":39,"start_character":8,"end_line":39,"end_character":14},"in_reply_to":"9f91af0f_58191877","updated":"2018-01-03 06:42:58.000000000","message":"Done","commit_id":"2e8d6d722470d371aa27bfcc8c3e6583cd102400"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"9f3a089194d2c48bc4363e5f124974fab138185c","unresolved":false,"context_lines":[{"line_number":49,"context_line":"    cfg.IntOpt(\u0027infortrend_cli_timeout\u0027,"},{"line_number":50,"context_line":"               default\u003d60,"},{"line_number":51,"context_line":"               help\u003d\u0027The timeout for CLI in seconds.\u0027),"},{"line_number":52,"context_line":"    cfg.StrOpt(\u0027infortrend_slots_a_channels_id\u0027,"},{"line_number":53,"context_line":"               default\u003d\u0027\u0027,"},{"line_number":54,"context_line":"               help\u003d\u0027Infortrend raid channel ID list on Slot A \u0027"},{"line_number":55,"context_line":"               \u0027for OpenStack usage. It is separated with comma.\u0027),"}],"source_content_type":"text/x-python","patch_set":10,"id":"9f91af0f_f827ccb5","line":52,"range":{"start_line":52,"start_character":8,"end_line":52,"end_character":14},"updated":"2018-01-02 16:37:57.000000000","message":"Same","commit_id":"2e8d6d722470d371aa27bfcc8c3e6583cd102400"},{"author":{"_account_id":24561,"name":"billsung","email":"billsung.taiwan@gmail.com","username":"rebillsung"},"change_message_id":"bbc9e892711e02e3dc2b26bae4a59e65cc4da4bc","unresolved":false,"context_lines":[{"line_number":49,"context_line":"    cfg.IntOpt(\u0027infortrend_cli_timeout\u0027,"},{"line_number":50,"context_line":"               default\u003d60,"},{"line_number":51,"context_line":"               help\u003d\u0027The timeout for CLI in seconds.\u0027),"},{"line_number":52,"context_line":"    cfg.StrOpt(\u0027infortrend_slots_a_channels_id\u0027,"},{"line_number":53,"context_line":"               default\u003d\u0027\u0027,"},{"line_number":54,"context_line":"               help\u003d\u0027Infortrend raid channel ID list on Slot A \u0027"},{"line_number":55,"context_line":"               \u0027for OpenStack usage. It is separated with comma.\u0027),"}],"source_content_type":"text/x-python","patch_set":10,"id":"9f91af0f_e2915254","line":52,"range":{"start_line":52,"start_character":8,"end_line":52,"end_character":14},"in_reply_to":"9f91af0f_f827ccb5","updated":"2018-01-03 06:42:58.000000000","message":"Done","commit_id":"2e8d6d722470d371aa27bfcc8c3e6583cd102400"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"9f3a089194d2c48bc4363e5f124974fab138185c","unresolved":false,"context_lines":[{"line_number":53,"context_line":"               default\u003d\u0027\u0027,"},{"line_number":54,"context_line":"               help\u003d\u0027Infortrend raid channel ID list on Slot A \u0027"},{"line_number":55,"context_line":"               \u0027for OpenStack usage. It is separated with comma.\u0027),"},{"line_number":56,"context_line":"    cfg.StrOpt(\u0027infortrend_slots_b_channels_id\u0027,"},{"line_number":57,"context_line":"               default\u003d\u0027\u0027,"},{"line_number":58,"context_line":"               help\u003d\u0027Infortrend raid channel ID list on Slot B \u0027"},{"line_number":59,"context_line":"               \u0027for OpenStack usage. It is separated with comma.\u0027),"}],"source_content_type":"text/x-python","patch_set":10,"id":"9f91af0f_182dd094","line":56,"range":{"start_line":56,"start_character":8,"end_line":56,"end_character":14},"updated":"2018-01-02 16:37:57.000000000","message":"Same","commit_id":"2e8d6d722470d371aa27bfcc8c3e6583cd102400"},{"author":{"_account_id":24561,"name":"billsung","email":"billsung.taiwan@gmail.com","username":"rebillsung"},"change_message_id":"bbc9e892711e02e3dc2b26bae4a59e65cc4da4bc","unresolved":false,"context_lines":[{"line_number":53,"context_line":"               default\u003d\u0027\u0027,"},{"line_number":54,"context_line":"               help\u003d\u0027Infortrend raid channel ID list on Slot A \u0027"},{"line_number":55,"context_line":"               \u0027for OpenStack usage. It is separated with comma.\u0027),"},{"line_number":56,"context_line":"    cfg.StrOpt(\u0027infortrend_slots_b_channels_id\u0027,"},{"line_number":57,"context_line":"               default\u003d\u0027\u0027,"},{"line_number":58,"context_line":"               help\u003d\u0027Infortrend raid channel ID list on Slot B \u0027"},{"line_number":59,"context_line":"               \u0027for OpenStack usage. It is separated with comma.\u0027),"}],"source_content_type":"text/x-python","patch_set":10,"id":"9f91af0f_829e4661","line":56,"range":{"start_line":56,"start_character":8,"end_line":56,"end_character":14},"in_reply_to":"9f91af0f_182dd094","updated":"2018-01-03 06:42:58.000000000","message":"Done","commit_id":"2e8d6d722470d371aa27bfcc8c3e6583cd102400"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"9f3a089194d2c48bc4363e5f124974fab138185c","unresolved":false,"context_lines":[{"line_number":66,"context_line":"                \u0027Make sure the array is only managed by Openstack, \u0027"},{"line_number":67,"context_line":"                \u0027and it is only used by one cinder-volume node. \u0027"},{"line_number":68,"context_line":"                \u0027Otherwise, never enable it! \u0027"},{"line_number":69,"context_line":"                \u0027The data might be asynchronous \u0027"},{"line_number":70,"context_line":"                \u0027if there were any other operations.\u0027),"},{"line_number":71,"context_line":"    cfg.StrOpt(\u0027java_path\u0027,"},{"line_number":72,"context_line":"               default\u003d\u0027/usr/bin/java\u0027,"}],"source_content_type":"text/x-python","patch_set":10,"id":"9f91af0f_983800d4","line":69,"range":{"start_line":69,"start_character":17,"end_line":69,"end_character":48},"updated":"2018-01-02 16:37:57.000000000","message":"I think this needs to be reworded for clarity.  Is it saying data might be corrupted?","commit_id":"2e8d6d722470d371aa27bfcc8c3e6583cd102400"},{"author":{"_account_id":24561,"name":"billsung","email":"billsung.taiwan@gmail.com","username":"rebillsung"},"change_message_id":"bbc9e892711e02e3dc2b26bae4a59e65cc4da4bc","unresolved":false,"context_lines":[{"line_number":66,"context_line":"                \u0027Make sure the array is only managed by Openstack, \u0027"},{"line_number":67,"context_line":"                \u0027and it is only used by one cinder-volume node. \u0027"},{"line_number":68,"context_line":"                \u0027Otherwise, never enable it! \u0027"},{"line_number":69,"context_line":"                \u0027The data might be asynchronous \u0027"},{"line_number":70,"context_line":"                \u0027if there were any other operations.\u0027),"},{"line_number":71,"context_line":"    cfg.StrOpt(\u0027java_path\u0027,"},{"line_number":72,"context_line":"               default\u003d\u0027/usr/bin/java\u0027,"}],"source_content_type":"text/x-python","patch_set":10,"id":"9f91af0f_a29b4a70","line":69,"range":{"start_line":69,"start_character":17,"end_line":69,"end_character":48},"in_reply_to":"9f91af0f_983800d4","updated":"2018-01-03 06:42:58.000000000","message":"Done","commit_id":"2e8d6d722470d371aa27bfcc8c3e6583cd102400"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"d1962a8cd1063e75bf858a44492105b93ac08a41","unresolved":false,"context_lines":[{"line_number":65,"context_line":"                help\u003d\u0027The Infortrend CLI cache. \u0027"},{"line_number":66,"context_line":"                \u0027While set True, the RAID status will be cached in local CLI. \u0027"},{"line_number":67,"context_line":"                \u0027Never enable this unless the RAID is managed only by \u0027"},{"line_number":68,"context_line":"                \u0027Openstack and only by one Openstack cinder-volume node. \u0027"},{"line_number":69,"context_line":"                \u0027Otherwise, the RAID status/setting can be changed by someone \u0027"},{"line_number":70,"context_line":"                \u0027else without notifing the cinder-volume service.\u0027),"},{"line_number":71,"context_line":"    cfg.StrOpt(\u0027java_path\u0027,"}],"source_content_type":"text/x-python","patch_set":11,"id":"df7087c5_f70533c3","line":68,"range":{"start_line":68,"start_character":17,"end_line":68,"end_character":26},"updated":"2018-03-22 20:58:33.000000000","message":"OpenStack","commit_id":"895af803be22360009007e8e63e4ec2fda13a54f"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"41b933b7dea155a8c5fca781c85256e2957e7bef","unresolved":false,"context_lines":[{"line_number":217,"context_line":"        self.unmanaged_prefix \u003d \u0027cinder-unmanaged-%s\u0027"},{"line_number":218,"context_line":"        self.java_path \u003d self.configuration.java_path"},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"        if self.ip \u003d\u003d \u0027\u0027:"},{"line_number":221,"context_line":"            msg \u003d _(\u0027san_ip is not set.\u0027)"},{"line_number":222,"context_line":"            LOG.error(msg)"},{"line_number":223,"context_line":"            raise exception.VolumeDriverException(message\u003dmsg)"},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"        if self.cli_timeout \u003c 40:"},{"line_number":226,"context_line":"            msg \u003d _(\u0027infortrend_cli_timeout should be larger than 40.\u0027)"},{"line_number":227,"context_line":"            LOG.error(msg)"},{"line_number":228,"context_line":"            raise exception.VolumeDriverException(message\u003dmsg)"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"        self.fc_lookup_service \u003d fczm_utils.create_lookup_service()"},{"line_number":231,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"bf659307_08f9da7e","line":228,"range":{"start_line":220,"start_character":0,"end_line":228,"end_character":62},"updated":"2018-04-09 19:20:02.000000000","message":"This needs to be done in do_setup/check_for_setup_error rather than in __init__.","commit_id":"d21c405ae9e5174be025fb94b44ad436acb6e316"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"41b933b7dea155a8c5fca781c85256e2957e7bef","unresolved":false,"context_lines":[{"line_number":257,"context_line":""},{"line_number":258,"context_line":"        self._init_pool_dict()"},{"line_number":259,"context_line":"        self._init_channel_list()"},{"line_number":260,"context_line":"        self._init_raidcmd()"},{"line_number":261,"context_line":"        self.cli_conf \u003d {"},{"line_number":262,"context_line":"            \u0027path\u0027: self.path,"},{"line_number":263,"context_line":"            \u0027cli_retry_time\u0027: self.cli_retry_time,"}],"source_content_type":"text/x-python","patch_set":12,"id":"bf659307_6885f6ce","line":260,"range":{"start_line":260,"start_character":8,"end_line":260,"end_character":28},"updated":"2018-04-09 19:20:02.000000000","message":"This calls out to CLI tools and the array, needs to be in do_setup().","commit_id":"d21c405ae9e5174be025fb94b44ad436acb6e316"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"41b933b7dea155a8c5fca781c85256e2957e7bef","unresolved":false,"context_lines":[{"line_number":303,"context_line":"        if not self.pid:"},{"line_number":304,"context_line":"            self.pid, self.fd \u003d os.forkpty()"},{"line_number":305,"context_line":"            if self.pid \u003d\u003d 0:"},{"line_number":306,"context_line":"                os.execv(self.java_path, [self.java_path, \u0027-jar\u0027, self.path])"},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"            check_java_start \u003d cli.os_read(self.fd, 1024, \u0027RAIDCmd:\u003e\u0027, 10)"},{"line_number":309,"context_line":"            if \u0027Raidcmd timeout\u0027 in check_java_start:"}],"source_content_type":"text/x-python","patch_set":12,"id":"bf659307_a816aea6","line":306,"updated":"2018-04-09 19:20:02.000000000","message":"Would it not be better to just use os.execvp() and skip having a java_path config variable?\n\nAlso, please strongly consider using oslo.concurrency\u0027s processutils rather than os.execv() here.  I think it may make it a lot easier to ensure that this works robustly.","commit_id":"d21c405ae9e5174be025fb94b44ad436acb6e316"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"41b933b7dea155a8c5fca781c85256e2957e7bef","unresolved":false,"context_lines":[{"line_number":304,"context_line":"            self.pid, self.fd \u003d os.forkpty()"},{"line_number":305,"context_line":"            if self.pid \u003d\u003d 0:"},{"line_number":306,"context_line":"                os.execv(self.java_path, [self.java_path, \u0027-jar\u0027, self.path])"},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"            check_java_start \u003d cli.os_read(self.fd, 1024, \u0027RAIDCmd:\u003e\u0027, 10)"},{"line_number":309,"context_line":"            if \u0027Raidcmd timeout\u0027 in check_java_start:"},{"line_number":310,"context_line":"                msg \u003d _(\u0027Raidcmd failed to start. \u0027"}],"source_content_type":"text/x-python","patch_set":12,"id":"bf659307_a87b0ef2","line":307,"updated":"2018-04-09 19:20:02.000000000","message":"Should also check for an OSError here indicating that \"java\" is not installed.","commit_id":"d21c405ae9e5174be025fb94b44ad436acb6e316"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"08571eb289f08c9022ff95bf475e912ff99bf1ef","unresolved":false,"context_lines":[{"line_number":322,"context_line":"            self.pid, self.fd \u003d os.forkpty()"},{"line_number":323,"context_line":"            if self.pid \u003d\u003d 0:"},{"line_number":324,"context_line":"                try:"},{"line_number":325,"context_line":"                    os.execv(self.java_path,"},{"line_number":326,"context_line":"                             [self.java_path, \u0027-jar\u0027, self.path])"},{"line_number":327,"context_line":"                except OSError:"},{"line_number":328,"context_line":"                    msg \u003d _(\u0027Raidcmd failed to start. \u0027"}],"source_content_type":"text/x-python","patch_set":21,"id":"7faddb67_98484c2d","line":325,"range":{"start_line":325,"start_character":20,"end_line":325,"end_character":28},"updated":"2019-07-18 13:48:32.000000000","message":"This should be done using processutils.execute rather than os.forkpty/execv.  processutils is a well-tested standard interface that we use for things like this.","commit_id":"d7f1715552021344c72cc78e9f1026ad2b50ab62"},{"author":{"_account_id":29311,"name":"KuiRong","email":"Kuirong.Chen@infortrend.com","username":"Kuirong.Chen"},"change_message_id":"900a3be5c5900b6771216bce4ac4e63967d8fcc1","unresolved":false,"context_lines":[{"line_number":322,"context_line":"            self.pid, self.fd \u003d os.forkpty()"},{"line_number":323,"context_line":"            if self.pid \u003d\u003d 0:"},{"line_number":324,"context_line":"                try:"},{"line_number":325,"context_line":"                    os.execv(self.java_path,"},{"line_number":326,"context_line":"                             [self.java_path, \u0027-jar\u0027, self.path])"},{"line_number":327,"context_line":"                except OSError:"},{"line_number":328,"context_line":"                    msg \u003d _(\u0027Raidcmd failed to start. \u0027"}],"source_content_type":"text/x-python","patch_set":21,"id":"7faddb67_f874d2ff","line":325,"range":{"start_line":325,"start_character":20,"end_line":325,"end_character":28},"in_reply_to":"7faddb67_98484c2d","updated":"2019-07-19 08:38:38.000000000","message":"Does processutils.execute have Process ID or something others can be used?\nI would like to use child process to execute .jar file,\nand parent process will send command to child process.","commit_id":"d7f1715552021344c72cc78e9f1026ad2b50ab62"}],"doc/source/configuration/block-storage/drivers/infortrend-volume-driver.rst":[{"author":{"_account_id":23630,"name":"Tovin Seven","email":"tovin07@gmail.com","username":"tovin07"},"change_message_id":"f217494b8543d7c60ca21dc0b0d712ec9281b606","unresolved":false,"context_lines":[{"line_number":48,"context_line":"Set up cinder-volume node"},{"line_number":49,"context_line":"-------------------------"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"* Install Oracle Java 7 or later."},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"* Download the Infortrend storage CLI from the"},{"line_number":54,"context_line":"  `release page \u003chttps://github.com/infortrend-openstack/infortrend-cinder-driver/releases\u003e`__,"}],"source_content_type":"text/x-rst","patch_set":6,"id":"ff82abbf_0106cb21","line":51,"range":{"start_line":51,"start_character":10,"end_line":51,"end_character":21},"updated":"2017-12-01 06:56:33.000000000","message":"Will it work with OpenJDK?\nIf yes, just make it JRE 7 or later.","commit_id":"49bf7600461557298a262426c7eed54789c6cc5b"},{"author":{"_account_id":19191,"name":"JohnnyChou","email":"johnny800503.work@gmail.com","username":"JohnnyChou"},"change_message_id":"d26abc11e098404cf4504a84425430e14addecc4","unresolved":false,"context_lines":[{"line_number":48,"context_line":"Set up cinder-volume node"},{"line_number":49,"context_line":"-------------------------"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"* Install Oracle Java 7 or later."},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"* Download the Infortrend storage CLI from the"},{"line_number":54,"context_line":"  `release page \u003chttps://github.com/infortrend-openstack/infortrend-cinder-driver/releases\u003e`__,"}],"source_content_type":"text/x-rst","patch_set":6,"id":"ff82abbf_fe5ee5e7","line":51,"range":{"start_line":51,"start_character":10,"end_line":51,"end_character":21},"in_reply_to":"ff82abbf_0106cb21","updated":"2017-12-01 08:01:27.000000000","message":"Yes, I\u0027ll fix this.","commit_id":"49bf7600461557298a262426c7eed54789c6cc5b"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"525d83e9557d10ff214114c67c59413421c1f5ce","unresolved":false,"context_lines":[{"line_number":52,"context_line":""},{"line_number":53,"context_line":"* Download the Infortrend storage CLI from the"},{"line_number":54,"context_line":"  `release page \u003chttps://github.com/infortrend-openstack/infortrend-cinder-driver/releases\u003e`__,"},{"line_number":55,"context_line":"  and assign it to the default path ``/opt/bin/Infortrend/``."},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"Driver configuration"},{"line_number":58,"context_line":"~~~~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":21,"id":"7faddb67_1869bcf7","line":55,"updated":"2019-07-18 14:02:56.000000000","message":"Can you clarify what you require installed here?  The release page on github has .zip files that contain python code that is replacing what cinder installs.   If you mean that the .jar needs to be installed, then that should be stated here.","commit_id":"d7f1715552021344c72cc78e9f1026ad2b50ab62"},{"author":{"_account_id":29311,"name":"KuiRong","email":"Kuirong.Chen@infortrend.com","username":"Kuirong.Chen"},"change_message_id":"900a3be5c5900b6771216bce4ac4e63967d8fcc1","unresolved":false,"context_lines":[{"line_number":52,"context_line":""},{"line_number":53,"context_line":"* Download the Infortrend storage CLI from the"},{"line_number":54,"context_line":"  `release page \u003chttps://github.com/infortrend-openstack/infortrend-cinder-driver/releases\u003e`__,"},{"line_number":55,"context_line":"  and assign it to the default path ``/opt/bin/Infortrend/``."},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"Driver configuration"},{"line_number":58,"context_line":"~~~~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":21,"id":"7faddb67_f87e12ad","line":55,"in_reply_to":"7faddb67_1869bcf7","updated":"2019-07-19 08:38:38.000000000","message":"Done","commit_id":"d7f1715552021344c72cc78e9f1026ad2b50ab62"}],"doc/source/configuration/block-storage/volume-drivers.rst":[{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"41b933b7dea155a8c5fca781c85256e2957e7bef","unresolved":false,"context_lines":[{"line_number":51,"context_line":"   drivers/ibm-storage-volume-driver"},{"line_number":52,"context_line":"   drivers/ibm-storwize-svc-driver"},{"line_number":53,"context_line":"   drivers/infinidat-volume-driver"},{"line_number":54,"context_line":"    drivers/infortrend-volume-driver.rst"},{"line_number":55,"context_line":"   drivers/inspur-instorage-driver"},{"line_number":56,"context_line":"   drivers/itri-disco-driver"},{"line_number":57,"context_line":"   drivers/kaminario-driver"}],"source_content_type":"text/x-rst","patch_set":12,"id":"bf659307_c8f2029b","line":54,"updated":"2018-04-09 19:20:02.000000000","message":"Extra space","commit_id":"d21c405ae9e5174be025fb94b44ad436acb6e316"}],"releasenotes/notes/readd-infortrend-driver-d9b399b53a4355f8.yaml":[{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"93fa08d42243fdb168f421741ff4562b06c033ac","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Re-added Infortrend Cinder volume driver."},{"line_number":4,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":18,"id":"7faddb67_e4a1dd95","line":3,"updated":"2019-07-14 14:17:51.000000000","message":"I suggest being more specific:\n\nThe Infortrend driver, removed in Cinder 12.0.0 (Queens), has been restored in this release.","commit_id":"685b22a16d14392f6876fbcfeb6317525b2002e5"},{"author":{"_account_id":29311,"name":"KuiRong","email":"Kuirong.Chen@infortrend.com","username":"Kuirong.Chen"},"change_message_id":"be36c858ac584210386b498e183cfe3011df5bc1","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Re-added Infortrend Cinder volume driver."},{"line_number":4,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":18,"id":"7faddb67_3d06271e","line":3,"in_reply_to":"7faddb67_e4a1dd95","updated":"2019-07-15 09:43:52.000000000","message":"Done","commit_id":"685b22a16d14392f6876fbcfeb6317525b2002e5"}]}
