'Migrate volume to another backend.
Optimize the migration if the destination is on the same server.
If the specified host is another back-end on the same server, and
the volume is not attached, we can do the migration locally without
going through iSCSI.
Storage-assisted migration...'

@proxy._trace_time
def migrate_volume(self, context, volume, host):

    false_ret = (False, None)
    if ('location_info' not in host['capabilities']):
        return false_ret
    info = host['capabilities']['location_info']
    try:
        (dest, dest_host, dest_pool) = info.split(':')
    except ValueError:
        return false_ret
    volume_host = volume.host.split('_')[1]
    if ((dest != strings.XIV_BACKEND_PREFIX) or (dest_host != volume_host)):
        return false_ret
    if (volume.attach_status == 'attached'):
        LOG.info('Storage-assisted    volume    migration:    Volume    %(volume)s    is    attached', {'volume': volume.id})
    try:
        self._call_xiv_xcli('vol_move', vol=volume.name, pool=dest_pool)
    except errors.XCLIError as e:
        error = (_('Fatal    error    in    vol_move:    %(details)s') % {'details': self._get_code_and_status_or_message(e)})
        LOG.error(error)
        raise self._get_exception()(error)
    return (True, None)
