'Check if it is possible to execute live migration.
:param ctxt: security context
:param instance_ref: nova.db.sqlalchemy.models.Instance object
:param block_migration: if true, prepare for block migration
if None, calculate it from driver
:param disk_over_commit: if true, allow disk over commit'

def check_can_live_migrate_destination(self, ctxt, instance_ref, block_migration=False, disk_over_commit=False):

    dest_check_data = objects.XenapiLiveMigrateData()
    if (block_migration is None):
        src = instance_ref['host']
        try:
            self._ensure_host_in_aggregate(ctxt, src)
        except exception.MigrationPreCheckError:
            block_migration = True
        else:
            sr_ref = vm_utils.safe_find_sr(self._session)
            sr_rec = self._session.get_rec('SR', sr_ref)
            block_migration = (not sr_rec['shared'])
    if block_migration:
        dest_check_data.block_migration = True
        dest_check_data.migrate_send_data = self._migrate_receive(ctxt)
        dest_check_data.destination_sr_ref = vm_utils.safe_find_sr(self._session)
    else:
        dest_check_data.block_migration = False
        src = instance_ref['host']
        self._ensure_host_in_aggregate(ctxt, src)
    net_ref = self._get_network_ref()
    dest_check_data.vif_uuid_map = {'': net_ref}
    return dest_check_data
