'Check if it is possible to execute live migration.
This runs checks on the destination host, and then calls
back to the source host to check the results.
:param context: security context
:param instance: nova.db.sqlalchemy.models.Instance
:param block_migration: if true, prepare for block migration
:param disk_over_commit: if true, allow disk over commit
:returns: a LibvirtLiveMigrateData object'

def check_can_live_migrate_destination(self, context, instance, src_compute_info, dst_compute_info, block_migration=False, disk_over_commit=False):

    disk_available_gb = dst_compute_info['disk_available_least']
    disk_available_mb = ((disk_available_gb * units.Ki) - CONF.reserved_host_disk_mb)
    if ((not instance.vcpu_model) or (not instance.vcpu_model.model)):
        source_cpu_info = src_compute_info['cpu_info']
        self._compare_cpu(None, source_cpu_info, instance)
    else:
        self._compare_cpu(instance.vcpu_model, None, instance)
    filename = self._create_shared_storage_test_file(instance)
    data = objects.LibvirtLiveMigrateData()
    data.filename = filename
    data.image_type = CONF.libvirt.images_type
    data.graphics_listen_addr_vnc = CONF.vnc.vncserver_listen
    data.graphics_listen_addr_spice = CONF.spice.server_listen
    if CONF.serial_console.enabled:
        data.serial_listen_addr = CONF.serial_console.proxyclient_address
    else:
        data.serial_listen_addr = None
    if (block_migration is not None):
        data.block_migration = block_migration
    if (disk_over_commit is not None):
        data.disk_over_commit = disk_over_commit
    data.disk_available_mb = disk_available_mb
    return data
