[Spice-devel] [PATCH 1/1] Add API to turn on backwards compatibility mode

Alon Levy alevy at redhat.com
Thu Aug 26 06:26:37 PDT 2010


----- alexl at redhat.com wrote:

> From: Alexander Larsson <alexl at redhat.com>
> 
> When upgrading a cluster of machines you typically do this by
> upgrading a set of machines at a time, making the new machines run
> the new software version, but in a fashion compatible with the old
> versions (in terms of e.g. migration). Then when all machines are

missing word here: migrated?

> any new features in the new version can be enabled.
> 
> This API allows qemu to limit the set of features that spice uses to
> those compatible with an older version, in order to do an upgrade
> like
> this. Right now it doesn't really do much, since we don't keep compat
> with 0.4.0 atm (although that may be added later).
> 
> There is no guarantee that any future version of spice support
> being compatible with any previous version. However, we will always
> support compatibility with the previous major version so that
> clusters
> can be upgraded step by step.
> ---
>  server/reds.c  |   20 ++++++++++++++++++++
>  server/spice.h |   13 +++++++++++++
>  2 files changed, 33 insertions(+), 0 deletions(-)
> 
> diff --git a/server/reds.c b/server/reds.c
> index b7c6ce7..68e0bc2 100644
> --- a/server/reds.c
> +++ b/server/reds.c
> @@ -3736,6 +3736,26 @@ __visible__ void
> spice_server_destroy(SpiceServer *s)
>      reds_exit();
>  }
>  
> +__visible__ spice_compat_version_t
> spice_get_current_compat_version(void)
> +{
> +    return SPICE_COMPAT_VERSION_CURRENT;
> +}
> +
> +__visible__ int spice_server_set_compat_version(SpiceServer *s,
> +                                               
> spice_compat_version_t version)
> +{
> +    if (version < SPICE_COMPAT_VERSION_0_6) {
> +        /* We don't support 0.4 compat mode atm */
> +        return -1;
> +    }
> +
> +    if (version > SPICE_COMPAT_VERSION_CURRENT) {
> +        /* Not compatible with future versions */
> +        return -1;
> +    }
> +    return 0;
> +}
> +
>  __visible__ int spice_server_set_port(SpiceServer *s, int port)
>  {
>      ASSERT(reds == s);
> diff --git a/server/spice.h b/server/spice.h
> index fc7d5b5..bb1f828 100644
> --- a/server/spice.h
> +++ b/server/spice.h
> @@ -307,6 +307,17 @@ uint32_t
> spice_server_record_get_samples(SpiceRecordInstance *sin,
>  
>  /* spice server setup */
>  
> +/* Don't use features incompatible with a specific spice
> +   version, so that migration to/from that version works. */
> +typedef enum {
> +    SPICE_COMPAT_VERSION_0_4 = 0,
> +    SPICE_COMPAT_VERSION_0_6 = 1,
> +} spice_compat_version_t;
> +
> +#define SPICE_COMPAT_VERSION_CURRENT SPICE_COMPAT_VERSION_0_6
> +
> +spice_compat_version_t spice_get_current_compat_version(void);
> +
>  typedef struct RedsState SpiceServer;
>  SpiceServer *spice_server_new(void);
>  int spice_server_init(SpiceServer *s, SpiceCoreInterface *core);
> @@ -315,6 +326,8 @@ void spice_server_destroy(SpiceServer *s);
>  #define SPICE_ADDR_FLAG_IPV4_ONLY (1 << 0)
>  #define SPICE_ADDR_FLAG_IPV6_ONLY (1 << 1)
>  
> +int spice_server_set_compat_version(SpiceServer *s,
> +                                    spice_compat_version_t version);
>  int spice_server_set_port(SpiceServer *s, int port);
>  void spice_server_set_addr(SpiceServer *s, const char *addr, int
> flags);
>  int spice_server_set_noauth(SpiceServer *s);
> -- 
> 1.7.0.1
> 

ACK

> _______________________________________________
> Spice-devel mailing list
> Spice-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/spice-devel


More information about the Spice-devel mailing list