[libvirt] [PATCH 3/6] Added new public API virDomainMigrateStartPostCopy

Jiri Denemark jdenemar at redhat.com
Wed Sep 24 12:45:02 UTC 2014


On Tue, Sep 23, 2014 at 16:09:58 +0200, Cristian Klein wrote:
> The user first start migration using the `VIR_MIGRATE_POSTCOPY` flag,
> then calls `virDomainMigrateStartPostCopy` asynchronously to switch from
> pre-copy to post-copy.
> 
> Signed-off-by: Cristian Klein <cristian.klein at cs.umu.se>
> ---
>  include/libvirt/libvirt.h.in |  2 ++
>  src/driver.h                 |  4 ++++
>  src/libvirt.c                | 37 +++++++++++++++++++++++++++++++++++++
>  src/libvirt_public.syms      |  5 +++++
>  4 files changed, 48 insertions(+)
> 
> diff --git a/include/libvirt/libvirt.h.in b/include/libvirt/libvirt.h.in
> index bdc33c6..eabedfa 100644
> --- a/include/libvirt/libvirt.h.in
> +++ b/include/libvirt/libvirt.h.in
> @@ -1346,6 +1346,8 @@ int virDomainMigrateToURI3(virDomainPtr domain,
>                             unsigned int nparams,
>                             unsigned int flags);
>  
> +int virDomainMigrateStartPostCopy (virDomainPtr domain);
> +
>  int virDomainMigrateSetMaxDowntime (virDomainPtr domain,
>                                      unsigned long long downtime,
>                                      unsigned int flags);
> diff --git a/src/driver.h b/src/driver.h
> index bb748c4..6866ccd 100644
> --- a/src/driver.h
> +++ b/src/driver.h
> @@ -1212,6 +1212,9 @@ typedef int
>                                    virDomainStatsRecordPtr **retStats,
>                                    unsigned int flags);
>  
> +typedef int
> +(*virDrvDomainMigrateStartPostCopy)(virDomainPtr domain);
> +
>  typedef struct _virDriver virDriver;
>  typedef virDriver *virDriverPtr;
>  
> @@ -1435,6 +1438,7 @@ struct _virDriver {
>      virDrvNodeGetFreePages nodeGetFreePages;
>      virDrvConnectGetDomainCapabilities connectGetDomainCapabilities;
>      virDrvConnectGetAllDomainStats connectGetAllDomainStats;
> +    virDrvDomainMigrateStartPostCopy domainMigrateStartPostCopy;
>  };
>  
>  
> diff --git a/src/libvirt.c b/src/libvirt.c
> index 33aeafa..e685da2 100644
> --- a/src/libvirt.c
> +++ b/src/libvirt.c
> @@ -17803,6 +17803,43 @@ virDomainMigrateSetCompressionCache(virDomainPtr domain,
>  
>  
>  /**
> + * virDomainMigrateStartPostCopy:
> + * @domain: a domain object
> + *
> + * Starts post-copy migration. This function has to be called while
> + * migration (initially pre-copy) is in progress. The migration operation
> + * must be called with the VIR_MIGRATE_POSTCOPY flag.
> + *
> + * Returns 0 in case of success, -1 otherwise.
> + */
> +int
> +virDomainMigrateStartPostCopy(virDomainPtr domain)
> +{
> +    virConnectPtr conn;
> +
> +    VIR_DOMAIN_DEBUG(domain);
> +
> +    virResetLastError();
> +
> +    virCheckDomainReturn(domain, -1);
> +    conn = domain->conn;
> +
> +    virCheckReadOnlyGoto(conn->flags, error);
> +
> +    if (conn->driver->domainMigrateStartPostCopy) {
> +        if (conn->driver->domainMigrateStartPostCopy(domain) < 0)
> +            goto error;
> +        return 0;
> +    }
> +
> +    virReportUnsupportedError();
> + error:
> +    virDispatchError(conn);
> +    return -1;
> +}
> +
> +
> +/**
>   * virDomainMigrateSetMaxSpeed:
>   * @domain: a domain object
>   * @bandwidth: migration bandwidth limit in MiB/s
> diff --git a/src/libvirt_public.syms b/src/libvirt_public.syms
> index e1f013f..ea17a07 100644
> --- a/src/libvirt_public.syms
> +++ b/src/libvirt_public.syms
> @@ -679,4 +679,9 @@ LIBVIRT_1.2.8 {
>          virDomainStatsRecordListFree;
>  } LIBVIRT_1.2.7;
>  
> +LIBVIRT_1.2.9 {
> +    global:
> +        virDomainMigrateStartPostCopy;
> +} LIBVIRT_1.2.8;
> +

You will need to change this section since post-copy won't make it in
1.2.9 (which freezes tomorrow)... Looks good otherwise.

Jirka




More information about the libvir-list mailing list