All of lore.kernel.org
 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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.