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

alexl at redhat.com alexl at redhat.com
Thu Aug 26 06:20:46 PDT 2010


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
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



More information about the Spice-devel mailing list