[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v7 06/18] tools/libxl: introduce enum type libxl_checkpointed_stream
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 and domain_create aren't changed here, checkpointed_stream is still an int. Because we will pass the value from libxl to libxc. 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 fa87f53..6225db1 100644 --- a/tools/libxl/libxl.h +++ b/tools/libxl/libxl.h @@ -876,6 +876,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 91c78e5..0d20c2d 100644 --- a/tools/libxl/libxl_create.c +++ b/tools/libxl/libxl_create.c @@ -1024,9 +1024,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 dac134e..f4781eb 100644 --- a/tools/libxl/libxl_stream_read.c +++ b/tools/libxl/libxl_stream_read.c @@ -794,19 +794,22 @@ 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 from primary. Domain state is currently at a * consistent checkpoint, complete the stream, and call * stream->completion_callback() to resume the guest. */ 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 9ad7eba..b8fb22f 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 25507c7..04cbcf3 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
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |