xen-devel.lists.xenproject.org archive mirror
 help / color / mirror / Atom feed
From: Changlong Xie <xiecl.fnst@cn.fujitsu.com>
To: xen devel <xen-devel@lists.xen.org>,
	Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>,
	Andrew Cooper <andrew.cooper3@citrix.com>,
	Ian Campbell <ian.campbell@citrix.com>,
	Ian Jackson <ian.jackson@eu.citrix.com>,
	Wei Liu <wei.liu2@citrix.com>
Cc: Lars Kurth <lars.kurth@citrix.com>,
	Wen Congyang <wency@cn.fujitsu.com>,
	Li Zhijian <lizhijian@cn.fujitsu.com>,
	Gui Jianfeng <guijianfeng@cn.fujitsu.com>,
	Jiang Yunhong <yunhong.jiang@intel.com>,
	Dong Eddie <eddie.dong@intel.com>,
	Anthony Perard <anthony.perard@citrix.com>,
	Shriram Rajagopalan <rshriram@cs.ubc.ca>,
	Yang Hongyang <hongyang.yang@easystack.cn>
Subject: [PATCH v13.1 26/26] cmdline switches and config vars to control colo-proxy
Date: Mon, 28 Mar 2016 11:47:49 +0800	[thread overview]
Message-ID: <56F8A965.6080905@cn.fujitsu.com> (raw)
In-Reply-To: <1458888273-7469-27-git-send-email-xiecl.fnst@cn.fujitsu.com>

 From 1bfd14622455635c6cae6130396250996e49facc Mon Sep 17 00:00:00 2001
From: Wen Congyang <wency@cn.fujitsu.com>
Date: Wed, 15 Jul 2015 17:18:56 +0800
Subject: [PATCH v13.1 26/26] cmdline switches and config vars to control 
colo-proxy

Add cmdline switches to 'xl migrate-receive' command to specify
a domain-specific hotplug script to setup COLO proxy.

Add a new config var 'colo.default.agentscript' to xl.conf, that
allows the user to override the default global script used to
setup COLO proxy.

Signed-off-by: Yang Hongyang <hongyang.yang@easystack.cn>
Signed-off-by: Wen Congyang <wency@cn.fujitsu.com>
Signed-off-by: Changlong Xie <xiecl.fnst@cn.fujitsu.com>
---
  docs/man/xl.conf.pod.5           |  6 +++++
  docs/man/xl.pod.1                |  7 ++++--
  tools/libxl/libxl.c              |  6 +++++
  tools/libxl/libxl_colo_restore.c |  5 +++++
  tools/libxl/libxl_create.c       |  9 ++++++--
  tools/libxl/libxl_types.idl      |  1 +
  tools/libxl/xl.c                 |  3 +++
  tools/libxl/xl.h                 |  1 +
  tools/libxl/xl_cmdimpl.c         | 47 
+++++++++++++++++++++++++++++++---------
  9 files changed, 71 insertions(+), 14 deletions(-)

diff --git a/docs/man/xl.conf.pod.5 b/docs/man/xl.conf.pod.5
index 8ae19bb..8f7fd28 100644
--- a/docs/man/xl.conf.pod.5
+++ b/docs/man/xl.conf.pod.5
@@ -111,6 +111,12 @@ Configures the default script used by Remus to 
setup network buffering.

  Default: C</etc/xen/scripts/remus-netbuf-setup>

+=item B<colo.default.proxyscript="PATH">
+
+Configures the default script used by COLO to setup colo-proxy.
+
+Default: C</etc/xen/scripts/colo-proxy-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 2664402..9df3302 100644
--- a/docs/man/xl.pod.1
+++ b/docs/man/xl.pod.1
@@ -458,8 +458,6 @@ Remus support in xl is still in experimental 
(proof-of-concept) phase.
  Disk replication support is limited to DRBD disks.

  COLO support in xl is still in experimental (proof-of-concept) phase.
-There is no support for network, so the guest will confuse its network
-peers at the moment.

  =back

@@ -483,6 +481,11 @@ and it's used by secondary.
  =item B<hidden-disk>    :Primary's modified contents will be buffered 
in this
  disk, and it's used by secondary.

+(b) An example for COLO network configuration: vif =[ 
'...,forwarddev=xxx,...']
+
+=item B<forwarddev>     :Forward devices for primary and secondary, 
there are
+directly connected.
+
  Note that the COLO configuration settings should be considered 
unstable. They
  may change incompatibly in future versions of Xen.

diff --git a/tools/libxl/libxl.c b/tools/libxl/libxl.c
index 63fbe16..aabf3a7 100644
--- a/tools/libxl/libxl.c
+++ b/tools/libxl/libxl.c
@@ -3378,6 +3378,11 @@ void libxl__device_nic_add(libxl__egc *egc, 
uint32_t domid,
          flexarray_append(back, nic->ifname);
      }

+    if (nic->coloft_forwarddev) {
+        flexarray_append(back, "forwarddev");
+        flexarray_append(back, nic->coloft_forwarddev);
+    }
+
      flexarray_append(back, "mac");
      flexarray_append(back,GCSPRINTF(LIBXL_MAC_FMT, 
LIBXL_MAC_BYTES(nic->mac)));
      if (nic->ip) {
@@ -3500,6 +3505,7 @@ static int libxl__device_nic_from_xs_be(libxl__gc *gc,
      nic->ip = READ_BACKEND(NOGC, "ip");
      nic->bridge = READ_BACKEND(NOGC, "bridge");
      nic->script = READ_BACKEND(NOGC, "script");
+    nic->coloft_forwarddev = READ_BACKEND(NOGC, "forwarddev");

      /* vif_ioemu nics use the same xenstore entries as vif interfaces */
      tmp = READ_BACKEND(gc, "type");
diff --git a/tools/libxl/libxl_colo_restore.c 
b/tools/libxl/libxl_colo_restore.c
index c8ad796..3483f39 100644
--- a/tools/libxl/libxl_colo_restore.c
+++ b/tools/libxl/libxl_colo_restore.c
@@ -233,6 +233,11 @@ void libxl__colo_restore_setup(libxl__egc *egc,
      crcs->crs = crs;
      crs->qdisk_setuped = false;
      crs->qdisk_used = false;
+    if (dcs->colo_proxy_script)
+        crs->colo_proxy_script = libxl__strdup(gc, dcs->colo_proxy_script);
+    else
+        crs->colo_proxy_script = GCSPRINTF("%s/colo-proxy-setup",
+                                           libxl__xen_script_dir_path());

      /* setup dsps */
      crcs->dsps.ao = ao;
diff --git a/tools/libxl/libxl_create.c b/tools/libxl/libxl_create.c
index e2ec25c..d6028aa 100644
--- a/tools/libxl/libxl_create.c
+++ b/tools/libxl/libxl_create.c
@@ -1690,6 +1690,7 @@ static void domain_create_cb(libxl__egc *egc,
  static int do_domain_create(libxl_ctx *ctx, libxl_domain_config *d_config,
                              uint32_t *domid, int restore_fd, int 
send_back_fd,
                              const libxl_domain_restore_params *params,
+                            const char *colo_proxy_script,
                              const libxl_asyncop_how *ao_how,
                              const libxl_asyncprogress_how 
*aop_console_how)
  {
@@ -1713,6 +1714,7 @@ static int do_domain_create(libxl_ctx *ctx, 
libxl_domain_config *d_config,
      }
      cdcs->dcs.callback = domain_create_cb;
      cdcs->dcs.domid_soft_reset = INVALID_DOMID;
+    cdcs->dcs.colo_proxy_script = colo_proxy_script;
      libxl__ao_progress_gethow(&cdcs->dcs.aop_console_how, 
aop_console_how);
      cdcs->domid_out = domid;

@@ -1900,7 +1902,7 @@ int libxl_domain_create_new(libxl_ctx *ctx, 
libxl_domain_config *d_config,
                              const libxl_asyncprogress_how 
*aop_console_how)
  {
      unset_disk_colo_restore(d_config);
-    return do_domain_create(ctx, d_config, domid, -1, -1, NULL,
+    return do_domain_create(ctx, d_config, domid, -1, -1, NULL, NULL,
                              ao_how, aop_console_how);
  }

@@ -1911,14 +1913,17 @@ int libxl_domain_create_restore(libxl_ctx *ctx, 
libxl_domain_config *d_config,
                                  const libxl_asyncop_how *ao_how,
                                  const libxl_asyncprogress_how 
*aop_console_how)
  {
+    char *colo_proxy_script = NULL;
+
      if (params->checkpointed_stream == LIBXL_CHECKPOINTED_STREAM_COLO) {
+        colo_proxy_script = params->colo_proxy_script;
          set_disk_colo_restore(d_config);
      } else {
          unset_disk_colo_restore(d_config);
      }

      return do_domain_create(ctx, d_config, domid, restore_fd, 
send_back_fd,
-                            params, ao_how, aop_console_how);
+                            params, colo_proxy_script, ao_how, 
aop_console_how);
  }

  int libxl_domain_soft_reset(libxl_ctx *ctx,
diff --git a/tools/libxl/libxl_types.idl b/tools/libxl/libxl_types.idl
index f88fae0..165b788 100644
--- a/tools/libxl/libxl_types.idl
+++ b/tools/libxl/libxl_types.idl
@@ -386,6 +386,7 @@ libxl_domain_create_info = Struct("domain_create_info",[
  libxl_domain_restore_params = Struct("domain_restore_params", [
      ("checkpointed_stream", integer),
      ("stream_version", uint32, {'init_val': '1'}),
+    ("colo_proxy_script", string),
      ])

  libxl_domain_sched_params = Struct("domain_sched_params",[
diff --git a/tools/libxl/xl.c b/tools/libxl/xl.c
index dfae84a..a272258 100644
--- a/tools/libxl/xl.c
+++ b/tools/libxl/xl.c
@@ -45,6 +45,7 @@ char *default_bridge = NULL;
  char *default_gatewaydev = NULL;
  char *default_vifbackend = NULL;
  char *default_remus_netbufscript = NULL;
+char *default_colo_proxy_script = NULL;
  enum output_format default_output_format = OUTPUT_FORMAT_JSON;
  int claim_mode = 1;
  bool progress_use_cr = 0;
@@ -179,6 +180,8 @@ static void parse_global_config(const char *configfile,

      xlu_cfg_replace_string (config, "remus.default.netbufscript",
          &default_remus_netbufscript, 0);
+    xlu_cfg_replace_string (config, "colo.default.proxyscript",
+        &default_colo_proxy_script, 0);

      xlu_cfg_destroy(config);
  }
diff --git a/tools/libxl/xl.h b/tools/libxl/xl.h
index 309627a..e601ca1 100644
--- a/tools/libxl/xl.h
+++ b/tools/libxl/xl.h
@@ -194,6 +194,7 @@ extern char *default_bridge;
  extern char *default_gatewaydev;
  extern char *default_vifbackend;
  extern char *default_remus_netbufscript;
+extern char *default_colo_proxy_script;
  extern char *blkdev_start;

  enum output_format {
diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c
index 25bd81a..91dcb63 100644
--- a/tools/libxl/xl_cmdimpl.c
+++ b/tools/libxl/xl_cmdimpl.c
@@ -158,6 +158,7 @@ struct domain_create {
      const char *config_file;
      char *extra_config; /* extra config string */
      const char *restore_file;
+    char *colo_proxy_script;
      int migrate_fd; /* -1 means none */
      int send_back_fd; /* -1 means none */
      char **migration_domname_r; /* from malloc */
@@ -1053,6 +1054,8 @@ static int parse_nic_config(libxl_device_nic *nic, 
XLU_Config **config, char *to
          replace_string(&nic->model, oparg);
      } else if (MATCH_OPTION("rate", token, oparg)) {
          parse_vif_rate(config, oparg, nic);
+    } else if (MATCH_OPTION("forwarddev", token, oparg)) {
+        replace_string(&nic->coloft_forwarddev, oparg);
      } else if (MATCH_OPTION("accel", token, oparg)) {
          fprintf(stderr, "the accel parameter for vifs is currently not 
supported\n");
      } else {
@@ -3001,6 +3004,7 @@ start:
          params.checkpointed_stream = dom_info->checkpointed_stream;
          params.stream_version =
              (hdr.mandatory_flags & XL_MANDATORY_FLAG_STREAMv2) ? 2 : 1;
+        params.colo_proxy_script = dom_info->colo_proxy_script;

          ret = libxl_domain_create_restore(ctx, &d_config,
                                            &domid, restore_fd,
@@ -4733,7 +4737,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,
-                            libxl_checkpointed_stream checkpointed)
+                            libxl_checkpointed_stream checkpointed,
+                            char *colo_proxy_script)
  {
      uint32_t domid;
      int rc, rc2;
@@ -4762,6 +4767,7 @@ static void migrate_receive(int debug, int 
daemonize, int monitor,
      dom_info.send_back_fd = send_fd;
      dom_info.migration_domname_r = &migration_domname;
      dom_info.checkpointed_stream = checkpointed;
+    dom_info.colo_proxy_script = colo_proxy_script;

      rc = create_domain(&dom_info);
      if (rc < 0) {
@@ -4955,8 +4961,11 @@ int main_migrate_receive(int argc, char **argv)
      int debug = 0, daemonize = 1, monitor = 1;
      libxl_checkpointed_stream checkpointed = 
LIBXL_CHECKPOINTED_STREAM_NONE;
      int opt;
+    char *script = NULL;
      static struct option opts[] = {
          {"colo", 0, 0, 0x100},
+        /* It is a shame that the management code for disk is not here. */
+        {"coloft-script", 1, 0, 0x200},
          COMMON_LONG_OPTS
      };

@@ -4977,6 +4986,9 @@ int main_migrate_receive(int argc, char **argv)
      case 0x100:
          checkpointed = LIBXL_CHECKPOINTED_STREAM_COLO;
          break;
+    case 0x200:
+        script = optarg;
+        break;
      }

      if (argc-optind != 0) {
@@ -4985,7 +4997,7 @@ int main_migrate_receive(int argc, char **argv)
      }
      migrate_receive(debug, daemonize, monitor,
                      STDOUT_FILENO, STDIN_FILENO,
-                    checkpointed);
+                    checkpointed, script);

      return 0;
  }
@@ -8395,8 +8407,10 @@ int main_remus(int argc, char **argv)
          r_info.interval = 200;

      if (libxl_defbool_val(r_info.colo)) {
-        if (r_info.interval || libxl_defbool_val(r_info.blackhole)) {
-            perror("Option -c conflicts with -i or -b");
+        if (r_info.interval || libxl_defbool_val(r_info.blackhole) ||
+            !libxl_defbool_is_default(r_info.netbuf) ||
+            !libxl_defbool_is_default(r_info.diskbuf)) {
+            perror("option -c is conflict with -i, -d, -n or -b");
              exit(-1);
          }

@@ -8407,8 +8421,12 @@ int main_remus(int argc, char **argv)
          }
      }

-    if (!r_info.netbufscript)
-        r_info.netbufscript = default_remus_netbufscript;
+    if (!r_info.netbufscript) {
+        if (libxl_defbool_val(r_info.colo))
+            r_info.netbufscript = default_colo_proxy_script;
+        else
+            r_info.netbufscript = default_remus_netbufscript;
+    }

      if (libxl_defbool_val(r_info.blackhole)) {
          send_fd = open("/dev/null", O_RDWR, 0644);
@@ -8421,10 +8439,19 @@ int main_remus(int argc, char **argv)
          if (!ssh_command[0]) {
              rune = host;
          } else {
-            xasprintf(&rune, "exec %s %s xl migrate-receive %s %s",
-                      ssh_command, host,
-                      libxl_defbool_val(r_info.colo) ? "-c" : "-r",
-                      daemonize ? "" : " -e");
+            if (!libxl_defbool_val(r_info.colo)) {
+                xasprintf(&rune, "exec %s %s xl migrate-receive %s %s",
+                          ssh_command, host,
+                          "-r",
+                          daemonize ? "" : " -e");
+            } else {
+                xasprintf(&rune, "exec %s %s xl migrate-receive %s %s 
%s %s",
+                          ssh_command, host,
+                          "--colo",
+                          r_info.netbufscript ? "--coloft-script" : "",
+                          r_info.netbufscript ? r_info.netbufscript : "",
+                          daemonize ? "" : " -e");
+            }
          }

          save_domain_core_begin(domid, NULL, &config_data, &config_len);
-- 
1.9.3




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

  reply	other threads:[~2016-03-28  3:47 UTC|newest]

Thread overview: 55+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-03-25  6:44 [PATCH v13 00/26] COarse-grain LOck-stepping Virtual Machines for Non-stop Service Changlong Xie
2016-03-25  6:44 ` [PATCH v13 01/26] tools/libxl: introduction of libxl__qmp_restore to load qemu state Changlong Xie
2016-03-25  6:44 ` [PATCH v13 02/26] tools/libxl: introduce libxl__domain_common_switch_qemu_logdirty() Changlong Xie
2016-03-25  6:44 ` [PATCH v13 03/26] tools/libxl: Add back channel to allow migration target send data back Changlong Xie
2016-04-04 12:07   ` Olaf Hering
2016-04-04 13:02     ` Wei Liu
2016-04-04 15:29       ` Olaf Hering
2016-03-25  6:44 ` [PATCH v13 04/26] tools/libxl: Introduce new helper function dup_fd_helper() Changlong Xie
2016-03-25  6:44 ` [PATCH v13 05/26] tools/libx{l, c}: add back channel to libxc Changlong Xie
2016-03-25  6:44 ` [PATCH v13 06/26] docs: add colo readme Changlong Xie
2016-03-25  6:44 ` [PATCH v13 07/26] docs/libxl: Introduce CHECKPOINT_CONTEXT to support migration v2 colo streams Changlong Xie
2016-03-25  6:44 ` [PATCH v13 08/26] libxc/migration: Specification update for DIRTY_PFN_LIST records Changlong Xie
2016-03-25  6:44 ` [PATCH v13 09/26] libxc/migration: export read_record for common use Changlong Xie
2016-03-25  6:44 ` [PATCH v13 10/26] tools/libxl: add back channel support to write stream Changlong Xie
2016-03-25  6:44 ` [PATCH v13 11/26] tools/libxl: add back channel support to read stream Changlong Xie
2016-03-25  6:44 ` [PATCH v13 12/26] secondary vm suspend/resume/checkpoint code Changlong Xie
2016-03-30 14:07   ` Ian Jackson
2016-03-25  6:44 ` [PATCH v13 13/26] libxl_internal: move stream read manipulations to right place Changlong Xie
2016-03-25  6:44 ` [PATCH v13 14/26] primary vm suspend/resume/checkpoint code Changlong Xie
2016-03-30 14:10   ` Ian Jackson
2016-03-25  6:44 ` [PATCH v13 15/26] libxc/restore: support COLO restore Changlong Xie
2016-03-25  6:44 ` [PATCH v13 16/26] libxc/save: support COLO save Changlong Xie
2016-03-25  6:44 ` [PATCH v13 17/26] implement the cmdline for COLO Changlong Xie
2016-03-25  6:44 ` [PATCH v13 18/26] COLO: introduce new API to prepare/start/do/get_error/stop replication Changlong Xie
2016-03-25  6:44 ` [PATCH v13 19/26] Introduce COLO mode and refactor relevant function Changlong Xie
2016-03-25  6:44 ` [PATCH v13 20/26] Support colo mode for qemu disk Changlong Xie
2016-03-28  3:46   ` [PATCH v13.1 " Changlong Xie
2016-03-30 14:17     ` Ian Jackson
2016-03-30 14:36     ` Ian Jackson
2016-03-25  6:44 ` [PATCH v13 21/26] COLO: use qemu block replication Changlong Xie
2016-03-25  6:44 ` [PATCH v13 22/26] COLO proxy: implement setup/teardown/preresume/postresume/checkpoint Changlong Xie
2016-03-25  6:44 ` [PATCH v13 23/26] COLO nic: implement COLO nic subkind Changlong Xie
2016-03-25 12:56   ` Wei Liu
2016-03-28  3:46   ` [PATCH v13.1 " Changlong Xie
2016-03-30 14:22     ` Ian Jackson
2016-03-30 14:38     ` Ian Jackson
2016-03-30 14:40       ` Ian Jackson
2016-03-25  6:44 ` [PATCH v13 24/26] setup and control colo proxy on primary side Changlong Xie
2016-03-25  6:44 ` [PATCH v13 25/26] setup and control colo proxy on secondary side Changlong Xie
2016-03-30 14:24   ` Ian Jackson
2016-03-31  2:19     ` Changlong Xie
2016-03-25  6:44 ` [PATCH v13 26/26] cmdline switches and config vars to control colo-proxy Changlong Xie
2016-03-28  3:47   ` Changlong Xie [this message]
2016-03-30 14:28     ` [PATCH v13.1 " Ian Jackson
2016-03-30 14:42     ` Ian Jackson
2016-03-25 15:51 ` [PATCH v13 00/26] COarse-grain LOck-stepping Virtual Machines for Non-stop Service Wei Liu
2016-03-28  3:52   ` Changlong Xie
2016-03-30 14:52     ` Ian Jackson
2016-03-30 14:50 ` Ian Jackson
2016-03-31  1:26   ` Wen Congyang
2016-03-31  2:28 ` Changlong Xie
2016-03-31 14:22   ` Wei Liu
2016-04-01  1:59     ` Changlong Xie
2016-04-01 13:47       ` Ian Jackson
2016-04-01 14:37         ` Changlong Xie

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=56F8A965.6080905@cn.fujitsu.com \
    --to=xiecl.fnst@cn.fujitsu.com \
    --cc=andrew.cooper3@citrix.com \
    --cc=anthony.perard@citrix.com \
    --cc=eddie.dong@intel.com \
    --cc=guijianfeng@cn.fujitsu.com \
    --cc=hongyang.yang@easystack.cn \
    --cc=ian.campbell@citrix.com \
    --cc=ian.jackson@eu.citrix.com \
    --cc=konrad.wilk@oracle.com \
    --cc=lars.kurth@citrix.com \
    --cc=lizhijian@cn.fujitsu.com \
    --cc=rshriram@cs.ubc.ca \
    --cc=wei.liu2@citrix.com \
    --cc=wency@cn.fujitsu.com \
    --cc=xen-devel@lists.xen.org \
    --cc=yunhong.jiang@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).