'Check if it is possible to execute live migration.
This checks if the live migration can succeed, based on the
results from check_can_live_migrate_destination.
:param ctxt: security context
:param instance: dict of instance data
:param dest_check_data: result of check_can_live_migrate_destination
:returns: a dict containing migration info'

@wrap_exception()
@wrap_instance_event(prefix='compute')
@wrap_instance_fault
def check_can_live_migrate_source(self, ctxt, instance, dest_check_data):

    is_volume_backed = compute_utils.is_volume_backed_instance(ctxt, instance)
    got_migrate_data_object = isinstance(dest_check_data, migrate_data_obj.LiveMigrateData)
    if (not got_migrate_data_object):
        dest_check_data = migrate_data_obj.LiveMigrateData.detect_implementation(dest_check_data)
    dest_check_data.is_volume_backed = is_volume_backed
    block_device_info = self._get_instance_block_device_info(ctxt, instance, refresh_conn_info=False)
    result = self.driver.check_can_live_migrate_source(ctxt, instance, dest_check_data, block_device_info)
    if (not got_migrate_data_object):
        result = result.to_legacy_dict()
    LOG.debug('source    check    data    is    %s', result)
    return result
