[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH 10/10 V7] libxl: network buffering cmdline switch
From: Shriram Rajagopalan <rshriram@xxxxxxxxx> Command line switch to 'xl remus' command, to enable network buffering. Pass on this flag to libxl so that it can act accordingly. Also update man pages to reflect the addition of a new option to 'xl remus' command. Note: the network buffering is enabled as default. If you want to disable it, please use -n option. Signed-off-by: Shriram Rajagopalan <rshriram@xxxxxxxxx> Signed-off-by: Lai Jiangshan <laijs@xxxxxxxxxxxxxx> Reviewed-by: Wen Congyang <wency@xxxxxxxxxxxxxx> --- docs/man/xl.conf.pod.5 | 6 ++++++ docs/man/xl.pod.1 | 11 ++++++++++- tools/libxl/xl.c | 4 ++++ tools/libxl/xl.h | 1 + tools/libxl/xl_cmdimpl.c | 28 ++++++++++++++++++++++------ tools/libxl/xl_cmdtable.c | 3 +++ 6 files changed, 46 insertions(+), 7 deletions(-) diff --git a/docs/man/xl.conf.pod.5 b/docs/man/xl.conf.pod.5 index 7c43bde..8ae19bb 100644 --- a/docs/man/xl.conf.pod.5 +++ b/docs/man/xl.conf.pod.5 @@ -105,6 +105,12 @@ Configures the default gateway device to set for virtual network devices. Default: C<None> +=item B<remus.default.netbufscript="PATH"> + +Configures the default script used by Remus to setup network buffering. + +Default: C</etc/xen/scripts/remus-netbuf-setup> + =item B<output_format="json|sxp"> Configures the default output format used by xl when printing "machine diff --git a/docs/man/xl.pod.1 b/docs/man/xl.pod.1 index e7b9de2..3c5f246 100644 --- a/docs/man/xl.pod.1 +++ b/docs/man/xl.pod.1 @@ -399,7 +399,7 @@ Enable Remus HA for domain. By default B<xl> relies on ssh as a transport mechanism between the two hosts. N.B: Remus support in xl is still in experimental (proof-of-concept) phase. - There is no support for network or disk buffering at the moment. + There is no support for disk buffering at the moment. B<OPTIONS> @@ -418,6 +418,15 @@ Generally useful for debugging. Disable memory checkpoint compression. +=item B<-n> + +Disable network output buffering. + +=item B<-N> I<netbufscript> + +Use <netbufscript> to setup network buffering instead of the instead of +the default (/etc/xen/scripts/remus-netbuf-setup). + =item B<-s> I<sshcommand> Use <sshcommand> instead of ssh. String will be passed to sh. diff --git a/tools/libxl/xl.c b/tools/libxl/xl.c index 657610b..e02a618 100644 --- a/tools/libxl/xl.c +++ b/tools/libxl/xl.c @@ -46,6 +46,7 @@ char *default_vifscript = NULL; char *default_bridge = NULL; char *default_gatewaydev = NULL; char *default_vifbackend = NULL; +char *default_remus_netbufscript = NULL; enum output_format default_output_format = OUTPUT_FORMAT_JSON; int claim_mode = 1; @@ -177,6 +178,9 @@ static void parse_global_config(const char *configfile, if (!xlu_cfg_get_long (config, "claim_mode", &l, 0)) claim_mode = l; + xlu_cfg_replace_string (config, "remus.default.netbufscript", + &default_remus_netbufscript, 0); + xlu_cfg_destroy(config); } diff --git a/tools/libxl/xl.h b/tools/libxl/xl.h index c876a33..d991fd3 100644 --- a/tools/libxl/xl.h +++ b/tools/libxl/xl.h @@ -153,6 +153,7 @@ extern char *default_vifscript; extern char *default_bridge; extern char *default_gatewaydev; extern char *default_vifbackend; +extern char *default_remus_netbufscript; extern char *blkdev_start; enum output_format { diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c index aff6f90..6d41775 100644 --- a/tools/libxl/xl_cmdimpl.c +++ b/tools/libxl/xl_cmdimpl.c @@ -7265,8 +7265,9 @@ int main_remus(int argc, char **argv) r_info.interval = 200; r_info.blackhole = 0; r_info.compression = 1; + r_info.netbuf = 1; - SWITCH_FOREACH_OPT(opt, "bui:s:e", NULL, "remus", 2) { + SWITCH_FOREACH_OPT(opt, "buni:s:N:e", NULL, "remus", 2) { case 'i': r_info.interval = atoi(optarg); break; @@ -7276,6 +7277,12 @@ int main_remus(int argc, char **argv) case 'u': r_info.compression = 0; break; + case 'n': + r_info.netbuf = 0; + break; + case 'N': + r_info.netbufscript = optarg; + break; case 's': ssh_command = optarg; break; @@ -7287,6 +7294,9 @@ int main_remus(int argc, char **argv) domid = find_domain(argv[optind]); host = argv[optind + 1]; + if(!r_info.netbufscript) + r_info.netbufscript = default_remus_netbufscript; + if (r_info.blackhole) { send_fd = open("/dev/null", O_RDWR, 0644); if (send_fd < 0) { @@ -7324,13 +7334,19 @@ int main_remus(int argc, char **argv) /* Point of no return */ rc = libxl_domain_remus_start(ctx, &r_info, domid, send_fd, recv_fd, 0); - /* If we are here, it means backup has failed/domain suspend failed. - * Try to resume the domain and exit gracefully. - * TODO: Split-Brain check. + /* check if the domain exists. User may have xl destroyed the + * domain to force failover */ - fprintf(stderr, "remus sender: libxl_domain_suspend failed" - " (rc=%d)\n", rc); + if (libxl_domain_info(ctx, 0, domid)) { + fprintf(stderr, "Remus: Primary domain has been destroyed.\n"); + close(send_fd); + return 0; + } + /* If we are here, it means remus setup/domain suspend/backup has + * failed. Try to resume the domain and exit gracefully. + * TODO: Split-Brain check. + */ if (rc == ERROR_GUEST_TIMEDOUT) fprintf(stderr, "Failed to suspend domain at primary.\n"); else { diff --git a/tools/libxl/xl_cmdtable.c b/tools/libxl/xl_cmdtable.c index ebe0220..9b7104c 100644 --- a/tools/libxl/xl_cmdtable.c +++ b/tools/libxl/xl_cmdtable.c @@ -481,6 +481,9 @@ struct cmd_spec cmd_table[] = { "-i MS Checkpoint domain memory every MS milliseconds (def. 200ms).\n" "-b Replicate memory checkpoints to /dev/null (blackhole)\n" "-u Disable memory checkpoint compression.\n" + "-n Disable network output buffering.\n" + "-N <netbufscript> Use netbufscript to setup network buffering instead of the\n" + " instead of the default (/etc/xen/scripts/remus-netbuf-setup).\n" "-s <sshcommand> Use <sshcommand> instead of ssh. String will be passed\n" " to sh. If empty, run <host> instead of \n" " ssh <host> xl migrate-receive -r [-e]\n" -- 1.7.1 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |