diff mbox

[v6,06/18] tools/libxl: introduce enum type libxl_checkpointed_stream

Message ID 1451442548-26974-7-git-send-email-wency@cn.fujitsu.com (mailing list archive)
State New, archived
Headers show

Commit Message

Wen Congyang Dec. 30, 2015, 2:28 a.m. UTC
introduce enum type libxl_checkpointed_stream in IDL.
rename the last argument of migrate_receive from "remus" to
"checkpointed" since the semantics of this parameter has
changed.

NOTE:
 libxl_domain_restore_params isn't changed here,
 checkpointed_stream is still an int.

Signed-off-by: Yang Hongyang <hongyang.yang@easystack.cn>
Signed-off-by: Wen Congyang <wency@cn.fujitsu.com>
---
 tools/libxl/libxl.h             |  7 +++++++
 tools/libxl/libxl_create.c      |  8 ++++++--
 tools/libxl/libxl_stream_read.c |  7 +++++--
 tools/libxl/libxl_types.idl     |  5 +++++
 tools/libxl/xl_cmdimpl.c        | 18 ++++++++++++------
 5 files changed, 35 insertions(+), 10 deletions(-)

Comments

Konrad Rzeszutek Wilk Jan. 25, 2016, 6:30 p.m. UTC | #1
On Wed, Dec 30, 2015 at 10:28:56AM +0800, Wen Congyang wrote:
> introduce enum type libxl_checkpointed_stream in IDL.

s/introduce/Introduce/
> rename the last argument of migrate_receive from "remus" to
> "checkpointed" since the semantics of this parameter has
> changed.
> 
> NOTE:
>  libxl_domain_restore_params isn't changed here,
>  checkpointed_stream is still an int.

Why? This enum looks so much nicer. Is the reason you do not want to
change it to an enum is because struct domain_create
seems to only have basic types such as 'int' and 'const char' ?

Thanks.
> 
> Signed-off-by: Yang Hongyang <hongyang.yang@easystack.cn>
> Signed-off-by: Wen Congyang <wency@cn.fujitsu.com>
> ---
>  tools/libxl/libxl.h             |  7 +++++++
>  tools/libxl/libxl_create.c      |  8 ++++++--
>  tools/libxl/libxl_stream_read.c |  7 +++++--
>  tools/libxl/libxl_types.idl     |  5 +++++
>  tools/libxl/xl_cmdimpl.c        | 18 ++++++++++++------
>  5 files changed, 35 insertions(+), 10 deletions(-)
> 
> diff --git a/tools/libxl/libxl.h b/tools/libxl/libxl.h
> index 05606a7..a01e448 100644
> --- a/tools/libxl/libxl.h
> +++ b/tools/libxl/libxl.h
> @@ -867,6 +867,13 @@ void libxl_mac_copy(libxl_ctx *ctx, libxl_mac *dst, libxl_mac *src);
>   */
>  #define LIBXL_HAVE_DEVICE_MODEL_VERSION_NONE 1
>  
> +/*
> + * LIBXL_HAVE_CHECKPOINTED_STREAM
> + *
> + * If this is defined, then libxl_checkpointed_stream exists.
> + */
> +#define LIBXL_HAVE_CHECKPOINTED_STREAM 1
> +
>  typedef char **libxl_string_list;
>  void libxl_string_list_dispose(libxl_string_list *sl);
>  int libxl_string_list_length(const libxl_string_list *sl);
> diff --git a/tools/libxl/libxl_create.c b/tools/libxl/libxl_create.c
> index bfa0552..8d3896f 100644
> --- a/tools/libxl/libxl_create.c
> +++ b/tools/libxl/libxl_create.c
> @@ -1015,9 +1015,13 @@ static void domcreate_bootloader_done(libxl__egc *egc,
>      dcs->srs.completion_callback = domcreate_stream_done;
>  
>      if (restore_fd >= 0) {
> -        if (checkpointed_stream)
> +        switch (checkpointed_stream) {
> +        case LIBXL_CHECKPOINTED_STREAM_REMUS:
>              libxl__remus_restore_setup(egc, dcs);
> -        libxl__stream_read_start(egc, &dcs->srs);
> +            /* fall through */
> +        case LIBXL_CHECKPOINTED_STREAM_NONE:
> +            libxl__stream_read_start(egc, &dcs->srs);
> +        }
>          return;
>      }
>  
> diff --git a/tools/libxl/libxl_stream_read.c b/tools/libxl/libxl_stream_read.c
> index 42c087f..6ad2a27 100644
> --- a/tools/libxl/libxl_stream_read.c
> +++ b/tools/libxl/libxl_stream_read.c
> @@ -780,15 +780,18 @@ void libxl__xc_domain_restore_done(libxl__egc *egc, void *dcs_void,
>       * If the stream is not still alive, we must not continue any work.
>       */
>      if (libxl__stream_read_inuse(stream)) {
> -        if (checkpointed_stream) {
> +        switch (checkpointed_stream) {
> +        case LIBXL_CHECKPOINTED_STREAM_REMUS:
>              /* failover */
>              stream_complete(egc, stream, 0);
> -        } else {
> +            break;
> +        case LIBXL_CHECKPOINTED_STREAM_NONE:
>              /*
>               * Libxc has indicated that it is done with the stream.
>               * Resume reading libxl records from it.
>               */
>              stream_continue(egc, stream);
> +            break;
>          }
>      }
>  }
> diff --git a/tools/libxl/libxl_types.idl b/tools/libxl/libxl_types.idl
> index 9658356..3ef11aa 100644
> --- a/tools/libxl/libxl_types.idl
> +++ b/tools/libxl/libxl_types.idl
> @@ -228,6 +228,11 @@ libxl_hdtype = Enumeration("hdtype", [
>      (2, "AHCI"),
>      ], init_val = "LIBXL_HDTYPE_IDE")
>  
> +libxl_checkpointed_stream = Enumeration("checkpointed_stream", [
> +    (0, "NONE"),
> +    (1, "REMUS"),
> +    ])
> +
>  #
>  # Complex libxl types
>  #
> diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c
> index f9933cb..c1cd696 100644
> --- a/tools/libxl/xl_cmdimpl.c
> +++ b/tools/libxl/xl_cmdimpl.c
> @@ -4424,7 +4424,8 @@ static void migrate_domain(uint32_t domid, const char *rune, int debug,
>  }
>  
>  static void migrate_receive(int debug, int daemonize, int monitor,
> -                            int send_fd, int recv_fd, int remus)
> +                            int send_fd, int recv_fd,
> +                            libxl_checkpointed_stream checkpointed)
>  {
>      uint32_t domid;
>      int rc, rc2;
> @@ -4449,7 +4450,7 @@ static void migrate_receive(int debug, int daemonize, int monitor,
>      dom_info.paused = 1;
>      dom_info.migrate_fd = recv_fd;
>      dom_info.migration_domname_r = &migration_domname;
> -    dom_info.checkpointed_stream = remus;
> +    dom_info.checkpointed_stream = checkpointed;
>  
>      rc = create_domain(&dom_info);
>      if (rc < 0) {
> @@ -4460,7 +4461,8 @@ static void migrate_receive(int debug, int daemonize, int monitor,
>  
>      domid = rc;
>  
> -    if (remus) {
> +    switch (checkpointed) {
> +    case LIBXL_CHECKPOINTED_STREAM_REMUS:
>          /* If we are here, it means that the sender (primary) has crashed.
>           * TODO: Split-Brain Check.
>           */
> @@ -4493,6 +4495,9 @@ static void migrate_receive(int debug, int daemonize, int monitor,
>                      common_domname, domid, rc);
>  
>          exit(rc ? -ERROR_FAIL: 0);
> +    default:
> +        /* do nothing */
> +        break;
>      }
>  
>      fprintf(stderr, "migration target: Transfer complete,"
> @@ -4630,7 +4635,8 @@ int main_restore(int argc, char **argv)
>  
>  int main_migrate_receive(int argc, char **argv)
>  {
> -    int debug = 0, daemonize = 1, monitor = 1, remus = 0;
> +    int debug = 0, daemonize = 1, monitor = 1;
> +    libxl_checkpointed_stream checkpointed = LIBXL_CHECKPOINTED_STREAM_NONE;
>      int opt;
>  
>      SWITCH_FOREACH_OPT(opt, "Fedr", NULL, "migrate-receive", 0) {
> @@ -4645,7 +4651,7 @@ int main_migrate_receive(int argc, char **argv)
>          debug = 1;
>          break;
>      case 'r':
> -        remus = 1;
> +        checkpointed = LIBXL_CHECKPOINTED_STREAM_REMUS;
>          break;
>      }
>  
> @@ -4655,7 +4661,7 @@ int main_migrate_receive(int argc, char **argv)
>      }
>      migrate_receive(debug, daemonize, monitor,
>                      STDOUT_FILENO, STDIN_FILENO,
> -                    remus);
> +                    checkpointed);
>  
>      return 0;
>  }
> -- 
> 2.5.0
> 
> 
> 
> 
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@lists.xen.org
> http://lists.xen.org/xen-devel
diff mbox

Patch

diff --git a/tools/libxl/libxl.h b/tools/libxl/libxl.h
index 05606a7..a01e448 100644
--- a/tools/libxl/libxl.h
+++ b/tools/libxl/libxl.h
@@ -867,6 +867,13 @@  void libxl_mac_copy(libxl_ctx *ctx, libxl_mac *dst, libxl_mac *src);
  */
 #define LIBXL_HAVE_DEVICE_MODEL_VERSION_NONE 1
 
+/*
+ * LIBXL_HAVE_CHECKPOINTED_STREAM
+ *
+ * If this is defined, then libxl_checkpointed_stream exists.
+ */
+#define LIBXL_HAVE_CHECKPOINTED_STREAM 1
+
 typedef char **libxl_string_list;
 void libxl_string_list_dispose(libxl_string_list *sl);
 int libxl_string_list_length(const libxl_string_list *sl);
diff --git a/tools/libxl/libxl_create.c b/tools/libxl/libxl_create.c
index bfa0552..8d3896f 100644
--- a/tools/libxl/libxl_create.c
+++ b/tools/libxl/libxl_create.c
@@ -1015,9 +1015,13 @@  static void domcreate_bootloader_done(libxl__egc *egc,
     dcs->srs.completion_callback = domcreate_stream_done;
 
     if (restore_fd >= 0) {
-        if (checkpointed_stream)
+        switch (checkpointed_stream) {
+        case LIBXL_CHECKPOINTED_STREAM_REMUS:
             libxl__remus_restore_setup(egc, dcs);
-        libxl__stream_read_start(egc, &dcs->srs);
+            /* fall through */
+        case LIBXL_CHECKPOINTED_STREAM_NONE:
+            libxl__stream_read_start(egc, &dcs->srs);
+        }
         return;
     }
 
diff --git a/tools/libxl/libxl_stream_read.c b/tools/libxl/libxl_stream_read.c
index 42c087f..6ad2a27 100644
--- a/tools/libxl/libxl_stream_read.c
+++ b/tools/libxl/libxl_stream_read.c
@@ -780,15 +780,18 @@  void libxl__xc_domain_restore_done(libxl__egc *egc, void *dcs_void,
      * If the stream is not still alive, we must not continue any work.
      */
     if (libxl__stream_read_inuse(stream)) {
-        if (checkpointed_stream) {
+        switch (checkpointed_stream) {
+        case LIBXL_CHECKPOINTED_STREAM_REMUS:
             /* failover */
             stream_complete(egc, stream, 0);
-        } else {
+            break;
+        case LIBXL_CHECKPOINTED_STREAM_NONE:
             /*
              * Libxc has indicated that it is done with the stream.
              * Resume reading libxl records from it.
              */
             stream_continue(egc, stream);
+            break;
         }
     }
 }
diff --git a/tools/libxl/libxl_types.idl b/tools/libxl/libxl_types.idl
index 9658356..3ef11aa 100644
--- a/tools/libxl/libxl_types.idl
+++ b/tools/libxl/libxl_types.idl
@@ -228,6 +228,11 @@  libxl_hdtype = Enumeration("hdtype", [
     (2, "AHCI"),
     ], init_val = "LIBXL_HDTYPE_IDE")
 
+libxl_checkpointed_stream = Enumeration("checkpointed_stream", [
+    (0, "NONE"),
+    (1, "REMUS"),
+    ])
+
 #
 # Complex libxl types
 #
diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c
index f9933cb..c1cd696 100644
--- a/tools/libxl/xl_cmdimpl.c
+++ b/tools/libxl/xl_cmdimpl.c
@@ -4424,7 +4424,8 @@  static void migrate_domain(uint32_t domid, const char *rune, int debug,
 }
 
 static void migrate_receive(int debug, int daemonize, int monitor,
-                            int send_fd, int recv_fd, int remus)
+                            int send_fd, int recv_fd,
+                            libxl_checkpointed_stream checkpointed)
 {
     uint32_t domid;
     int rc, rc2;
@@ -4449,7 +4450,7 @@  static void migrate_receive(int debug, int daemonize, int monitor,
     dom_info.paused = 1;
     dom_info.migrate_fd = recv_fd;
     dom_info.migration_domname_r = &migration_domname;
-    dom_info.checkpointed_stream = remus;
+    dom_info.checkpointed_stream = checkpointed;
 
     rc = create_domain(&dom_info);
     if (rc < 0) {
@@ -4460,7 +4461,8 @@  static void migrate_receive(int debug, int daemonize, int monitor,
 
     domid = rc;
 
-    if (remus) {
+    switch (checkpointed) {
+    case LIBXL_CHECKPOINTED_STREAM_REMUS:
         /* If we are here, it means that the sender (primary) has crashed.
          * TODO: Split-Brain Check.
          */
@@ -4493,6 +4495,9 @@  static void migrate_receive(int debug, int daemonize, int monitor,
                     common_domname, domid, rc);
 
         exit(rc ? -ERROR_FAIL: 0);
+    default:
+        /* do nothing */
+        break;
     }
 
     fprintf(stderr, "migration target: Transfer complete,"
@@ -4630,7 +4635,8 @@  int main_restore(int argc, char **argv)
 
 int main_migrate_receive(int argc, char **argv)
 {
-    int debug = 0, daemonize = 1, monitor = 1, remus = 0;
+    int debug = 0, daemonize = 1, monitor = 1;
+    libxl_checkpointed_stream checkpointed = LIBXL_CHECKPOINTED_STREAM_NONE;
     int opt;
 
     SWITCH_FOREACH_OPT(opt, "Fedr", NULL, "migrate-receive", 0) {
@@ -4645,7 +4651,7 @@  int main_migrate_receive(int argc, char **argv)
         debug = 1;
         break;
     case 'r':
-        remus = 1;
+        checkpointed = LIBXL_CHECKPOINTED_STREAM_REMUS;
         break;
     }
 
@@ -4655,7 +4661,7 @@  int main_migrate_receive(int argc, char **argv)
     }
     migrate_receive(debug, daemonize, monitor,
                     STDOUT_FILENO, STDIN_FILENO,
-                    remus);
+                    checkpointed);
 
     return 0;
 }