'Migrate directly if source and dest are managed by same storage.
:param volume: A dictionary describing the volume to migrate
:param host: A dictionary describing the host to migrate to, where
host[\'host\'] is its name, and host[\'capabilities\'] is a
dictionary of its reported capabilities.
:returns: (False, None) if the driver does not support migration,
(True, None) if successful'

def migrate_volume(self, volume, host):

    false_ret = (False, None)
    if (volume['attach_status'] == fields.VolumeAttachStatus.ATTACHED):
        return false_ret
    if ('location_info' not in host['capabilities']):
        return false_ret
    info = host['capabilities']['location_info']
    try:
        (dest_type, dest_id, dest_back_name, dest_owner) = info.split(':')
    except ValueError:
        return false_ret
    if (not ((dest_type == 'DotHillVolumeDriver') and (dest_id == self.serialNumber) and (dest_owner == self.owner))):
        return false_ret
    if volume['name_id']:
        source_name = self._get_vol_name(volume['name_id'])
    else:
        source_name = self._get_vol_name(volume['id'])
    dest_name = ('m%s' % source_name[1:])
    self.client_login()
    try:
        self.client.copy_volume(source_name, dest_name, dest_back_name, self.backend_type)
        self.client.delete_volume(source_name)
        self.client.modify_volume_name(dest_name, source_name)
        return (True, None)
    except exception.DotHillRequestError as ex:
        LOG.exception('Error    migrating    volume:    %s', source_name)
        raise exception.Invalid(ex)
    finally:
        self.client_logout()
