Message ID | 1451442548-26974-7-git-send-email-wency@cn.fujitsu.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
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 --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; }