[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH v6 06/18] tools/libxl: introduce enum type libxl_checkpointed_stream



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@xxxxxxxxxxxx>
> Signed-off-by: Wen Congyang <wency@xxxxxxxxxxxxxx>
> ---
>  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@xxxxxxxxxxxxx
> http://lists.xen.org/xen-devel

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.