All of lore.kernel.org
 help / color / mirror / Atom feed
From: Hailiang Zhang <zhang.zhanghailiang@huawei.com>
To: Markus Armbruster <armbru@redhat.com>
Cc: lizhijian@cn.fujitsu.com, quintela@redhat.com,
	yunhong.jiang@intel.com, eddie.dong@intel.com,
	peter.huangpeng@huawei.com, qemu-devel@nongnu.org,
	arei.gonglei@huawei.com, stefanha@redhat.com,
	amit.shah@redhat.com, Luiz Capitulino <lcapitulino@redhat.com>,
	dgilbert@redhat.com, hongyang.yang@easystack.cn
Subject: Re: [Qemu-devel] [PATCH COLO-Frame v12 21/38] COLO failover: Introduce a new command to trigger a failover
Date: Tue, 22 Dec 2015 21:50:07 +0800	[thread overview]
Message-ID: <5679550F.3000908@huawei.com> (raw)
In-Reply-To: <87d1u2pylo.fsf@blackfin.pond.sub.org>

On 2015/12/19 17:38, Markus Armbruster wrote:
> zhanghailiang <zhang.zhanghailiang@huawei.com> writes:
>
>> We leave users to choose whatever heartbeat solution they want, if the heartbeat
>> is lost, or other errors they detect, they can use experimental command
>> 'x_colo_lost_heartbeat' to tell COLO to do failover, COLO will do operations
>> accordingly.
>>
>> For example, if the command is sent to the PVM, the Primary side will
>> exit COLO mode and take over operation. If sent to the Secondary, the
>> secondary will run failover work, then take over server operation to
>> become the new Primary.
>>
>> Cc: Luiz Capitulino <lcapitulino@redhat.com>
>> Cc: Eric Blake <eblake@redhat.com>
>> Cc: Markus Armbruster <armbru@redhat.com>
>> Signed-off-by: zhanghailiang <zhang.zhanghailiang@huawei.com>
>> Signed-off-by: Li Zhijian <lizhijian@cn.fujitsu.com>
>> ---
>> v11:
>> - Add more comments for x-colo-lost-heartbeat command (Eric's suggestion)
>> - Return 'enum' instead of 'int' for get_colo_mode() (Eric's suggestion)
>> v10:
>> - Rename command colo_lost_hearbeat to experimental 'x_colo_lost_heartbeat'
>>
>> Signed-off-by: zhanghailiang <zhang.zhanghailiang@huawei.com>
>> ---
>>   hmp-commands.hx              | 15 +++++++++++++++
>>   hmp.c                        |  8 ++++++++
>>   hmp.h                        |  1 +
>>   include/migration/colo.h     |  3 +++
>>   include/migration/failover.h | 20 ++++++++++++++++++++
>>   migration/Makefile.objs      |  2 +-
>>   migration/colo-comm.c        | 11 +++++++++++
>>   migration/colo-failover.c    | 41 +++++++++++++++++++++++++++++++++++++++++
>>   migration/colo.c             |  1 +
>>   qapi-schema.json             | 29 +++++++++++++++++++++++++++++
>>   qmp-commands.hx              | 19 +++++++++++++++++++
>>   stubs/migration-colo.c       |  8 ++++++++
>>   12 files changed, 157 insertions(+), 1 deletion(-)
>>   create mode 100644 include/migration/failover.h
>>   create mode 100644 migration/colo-failover.c
>>
>> diff --git a/hmp-commands.hx b/hmp-commands.hx
>> index bb52e4d..a381b0b 100644
>> --- a/hmp-commands.hx
>> +++ b/hmp-commands.hx
>> @@ -1039,6 +1039,21 @@ migration (or once already in postcopy).
>>   ETEXI
>>
>>       {
>> +        .name       = "x_colo_lost_heartbeat",
>> +        .args_type  = "",
>> +        .params     = "",
>> +        .help       = "Tell COLO that heartbeat is lost,\n\t\t\t"
>> +                      "a failover or takeover is needed.",
>> +        .mhandler.cmd = hmp_x_colo_lost_heartbeat,
>> +    },
>> +
>> +STEXI
>> +@item x_colo_lost_heartbeat
>> +@findex x_colo_lost_heartbeat
>> +Tell COLO that heartbeat is lost, a failover or takeover is needed.
>> +ETEXI
>> +
>> +    {
>>           .name       = "client_migrate_info",
>>           .args_type  = "protocol:s,hostname:s,port:i?,tls-port:i?,cert-subject:s?",
>>           .params     = "protocol hostname port tls-port cert-subject",
>> diff --git a/hmp.c b/hmp.c
>> index ee87d38..dc6dc30 100644
>> --- a/hmp.c
>> +++ b/hmp.c
>> @@ -1310,6 +1310,14 @@ void hmp_migrate_start_postcopy(Monitor *mon, const QDict *qdict)
>>       hmp_handle_error(mon, &err);
>>   }
>>
>> +void hmp_x_colo_lost_heartbeat(Monitor *mon, const QDict *qdict)
>> +{
>> +    Error *err = NULL;
>> +
>> +    qmp_x_colo_lost_heartbeat(&err);
>> +    hmp_handle_error(mon, &err);
>> +}
>> +
>>   void hmp_set_password(Monitor *mon, const QDict *qdict)
>>   {
>>       const char *protocol  = qdict_get_str(qdict, "protocol");
>> diff --git a/hmp.h b/hmp.h
>> index a8c5b5a..864a300 100644
>> --- a/hmp.h
>> +++ b/hmp.h
>> @@ -70,6 +70,7 @@ void hmp_migrate_set_parameter(Monitor *mon, const QDict *qdict);
>>   void hmp_migrate_set_cache_size(Monitor *mon, const QDict *qdict);
>>   void hmp_client_migrate_info(Monitor *mon, const QDict *qdict);
>>   void hmp_migrate_start_postcopy(Monitor *mon, const QDict *qdict);
>> +void hmp_x_colo_lost_heartbeat(Monitor *mon, const QDict *qdict);
>>   void hmp_set_password(Monitor *mon, const QDict *qdict);
>>   void hmp_expire_password(Monitor *mon, const QDict *qdict);
>>   void hmp_eject(Monitor *mon, const QDict *qdict);
>> diff --git a/include/migration/colo.h b/include/migration/colo.h
>> index 2676c4a..ba27719 100644
>> --- a/include/migration/colo.h
>> +++ b/include/migration/colo.h
>> @@ -17,6 +17,7 @@
>>   #include "migration/migration.h"
>>   #include "qemu/coroutine_int.h"
>>   #include "qemu/thread.h"
>> +#include "qemu/main-loop.h"
>>
>>   bool colo_supported(void);
>>   void colo_info_mig_init(void);
>> @@ -29,4 +30,6 @@ bool migration_incoming_enable_colo(void);
>>   void migration_incoming_exit_colo(void);
>>   void *colo_process_incoming_thread(void *opaque);
>>   bool migration_incoming_in_colo_state(void);
>> +
>> +COLOMode get_colo_mode(void);
>>   #endif
>> diff --git a/include/migration/failover.h b/include/migration/failover.h
>> new file mode 100644
>> index 0000000..1785b52
>> --- /dev/null
>> +++ b/include/migration/failover.h
>> @@ -0,0 +1,20 @@
>> +/*
>> + *  COarse-grain LOck-stepping Virtual Machines for Non-stop Service (COLO)
>> + *  (a.k.a. Fault Tolerance or Continuous Replication)
>> + *
>> + * Copyright (c) 2015 HUAWEI TECHNOLOGIES CO.,LTD.
>> + * Copyright (c) 2015 FUJITSU LIMITED
>> + * Copyright (c) 2015 Intel Corporation
>> + *
>> + * This work is licensed under the terms of the GNU GPL, version 2 or
>> + * later.  See the COPYING file in the top-level directory.
>> + */
>> +
>> +#ifndef QEMU_FAILOVER_H
>> +#define QEMU_FAILOVER_H
>> +
>> +#include "qemu-common.h"
>> +
>> +void failover_request_active(Error **errp);
>> +
>> +#endif
>> diff --git a/migration/Makefile.objs b/migration/Makefile.objs
>> index 81b5713..920d1e7 100644
>> --- a/migration/Makefile.objs
>> +++ b/migration/Makefile.objs
>> @@ -1,6 +1,6 @@
>>   common-obj-y += migration.o tcp.o
>> -common-obj-$(CONFIG_COLO) += colo.o
>>   common-obj-y += colo-comm.o
>> +common-obj-$(CONFIG_COLO) += colo.o colo-failover.o
>>   common-obj-y += vmstate.o
>>   common-obj-y += qemu-file.o qemu-file-buf.o qemu-file-unix.o qemu-file-stdio.o
>>   common-obj-y += xbzrle.o postcopy-ram.o
>> diff --git a/migration/colo-comm.c b/migration/colo-comm.c
>> index 30df3d3..58a6488 100644
>> --- a/migration/colo-comm.c
>> +++ b/migration/colo-comm.c
>> @@ -20,6 +20,17 @@ typedef struct {
>>
>>   static COLOInfo colo_info;
>>
>> +COLOMode get_colo_mode(void)
>> +{
>> +    if (migration_in_colo_state()) {
>> +        return COLO_MODE_PRIMARY;
>> +    } else if (migration_incoming_in_colo_state()) {
>> +        return COLO_MODE_SECONDARY;
>> +    } else {
>> +        return COLO_MODE_UNKNOWN;
>> +    }
>> +}
>> +
>>   static void colo_info_pre_save(void *opaque)
>>   {
>>       COLOInfo *s = opaque;
>> diff --git a/migration/colo-failover.c b/migration/colo-failover.c
>> new file mode 100644
>> index 0000000..e3897c6
>> --- /dev/null
>> +++ b/migration/colo-failover.c
>> @@ -0,0 +1,41 @@
>> +/*
>> + * COarse-grain LOck-stepping Virtual Machines for Non-stop Service (COLO)
>> + * (a.k.a. Fault Tolerance or Continuous Replication)
>> + *
>> + * Copyright (c) 2015 HUAWEI TECHNOLOGIES CO., LTD.
>> + * Copyright (c) 2015 FUJITSU LIMITED
>> + * Copyright (c) 2015 Intel Corporation
>> + *
>> + * This work is licensed under the terms of the GNU GPL, version 2 or
>> + * later.  See the COPYING file in the top-level directory.
>> + */
>> +
>> +#include "migration/colo.h"
>> +#include "migration/failover.h"
>> +#include "qmp-commands.h"
>> +#include "qapi/qmp/qerror.h"
>> +
>> +static QEMUBH *failover_bh;
>> +
>> +static void colo_failover_bh(void *opaque)
>> +{
>> +    qemu_bh_delete(failover_bh);
>> +    failover_bh = NULL;
>> +    /*TODO: Do failover work */
>> +}
>> +
>> +void failover_request_active(Error **errp)
>> +{
>> +    failover_bh = qemu_bh_new(colo_failover_bh, NULL);
>> +    qemu_bh_schedule(failover_bh);
>> +}
>> +
>> +void qmp_x_colo_lost_heartbeat(Error **errp)
>> +{
>> +    if (get_colo_mode() == COLO_MODE_UNKNOWN) {
>> +        error_setg(errp, QERR_FEATURE_DISABLED, "colo");
>> +        return;
>> +    }
>> +
>> +    failover_request_active(errp);
>> +}
>> diff --git a/migration/colo.c b/migration/colo.c
>> index ca5df44..7098497 100644
>> --- a/migration/colo.c
>> +++ b/migration/colo.c
>> @@ -17,6 +17,7 @@
>>   #include "trace.h"
>>   #include "qemu/error-report.h"
>>   #include "qemu/sockets.h"
>> +#include "migration/failover.h"
>>
>>   /* colo buffer */
>>   #define COLO_BUFFER_BASE_SIZE (4 * 1024 * 1024)
>> diff --git a/qapi-schema.json b/qapi-schema.json
>> index a5699a7..feb7d53 100644
>> --- a/qapi-schema.json
>> +++ b/qapi-schema.json
>> @@ -761,6 +761,35 @@
>>               'vmstate-send', 'vmstate-size','vmstate-received',
>>               'vmstate-loaded' ] }
>>
>> +##
>> +# @COLOMode
>> +#
>> +# The colo mode
>
> This is rather terse for an ignorant reader like me.
>

Hmm, this is used to distinguish Primary and Secondary sides, I will
add more comments.

>> +#
>> +# @unknown: unknown mode
>
> What does "unknown mode" mean, and how can it happen?
>

It will never happen, i will remove it. :)

>> +#
>> +# @primary: master side
>> +#
>> +# @secondary: slave side
>> +#
>> +# Since: 2.6
>> +##
>> +{ 'enum': 'COLOMode',
>> +  'data': [ 'unknown', 'primary', 'secondary'] }
>> +
>> +##
>> +# @x-colo-lost-heartbeat
>> +#
>> +# Tell qemu that heartbeat is lost, request it to do takeover procedures.
>> +# If this command is sent to the PVM, the Primary side will exit COLO mode.
>> +# If sent to the Secondary, the Secondary side will run failover work,
>> +# then takes over server operation to become the service VM.
>> +#
>> +# Since: 2.6
>> +##
>> +{ 'command': 'x-colo-lost-heartbeat' }
>> +
>> +##
>>   # @MouseInfo:
>>   #
>>   # Information about a mouse device.
>> diff --git a/qmp-commands.hx b/qmp-commands.hx
>> index 89756c9..76ad208 100644
>> --- a/qmp-commands.hx
>> +++ b/qmp-commands.hx
>> @@ -805,6 +805,25 @@ Example:
>>   EQMP
>>
>>       {
>> +        .name       = "x-colo-lost-heartbeat",
>> +        .args_type  = "",
>> +        .mhandler.cmd_new = qmp_marshal_x_colo_lost_heartbeat,
>> +    },
>> +
>> +SQMP
>> +x-colo-lost-heartbeat
>> +--------------------
>> +
>> +Tell COLO that heartbeat is lost, a failover or takeover is needed.
>> +
>> +Example:
>> +
>> +-> { "execute": "x-colo-lost-heartbeat" }
>> +<- { "return": {} }
>> +
>> +EQMP
>> +
>> +    {
>>           .name       = "client_migrate_info",
>>           .args_type  = "protocol:s,hostname:s,port:i?,tls-port:i?,cert-subject:s?",
>>           .params     = "protocol hostname port tls-port cert-subject",
>> diff --git a/stubs/migration-colo.c b/stubs/migration-colo.c
>> index c12516e..5028f63 100644
>> --- a/stubs/migration-colo.c
>> +++ b/stubs/migration-colo.c
>> @@ -11,6 +11,7 @@
>>    */
>>
>>   #include "migration/colo.h"
>> +#include "qmp-commands.h"
>>
>>   bool colo_supported(void)
>>   {
>> @@ -35,3 +36,10 @@ void *colo_process_incoming_thread(void *opaque)
>>   {
>>       return NULL;
>>   }
>> +
>> +void qmp_x_colo_lost_heartbeat(Error **errp)
>> +{
>> +    error_setg(errp, "COLO is not supported, please rerun configure"
>> +                     " with --enable-colo option in order to support"
>> +                     " COLO feature");
>> +}
>
> .
>

  reply	other threads:[~2015-12-22 13:50 UTC|newest]

Thread overview: 94+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-12-15  8:22 [Qemu-devel] [PATCH COLO-Frame v12 00/38] COarse-grain LOck-stepping(COLO) Virtual Machines for Non-stop Service (FT) zhanghailiang
2015-12-15  8:22 ` [Qemu-devel] [PATCH COLO-Frame v12 01/38] configure: Add parameter for configure to enable/disable COLO support zhanghailiang
2015-12-15  9:46   ` Wen Congyang
2015-12-15 11:19     ` Hailiang Zhang
2015-12-15 11:31     ` Hailiang Zhang
2015-12-15  8:22 ` [Qemu-devel] [PATCH COLO-Frame v12 02/38] migration: Introduce capability 'x-colo' to migration zhanghailiang
2015-12-15  8:22 ` [Qemu-devel] [PATCH COLO-Frame v12 03/38] COLO: migrate colo related info to secondary node zhanghailiang
2015-12-15  8:22 ` [Qemu-devel] [PATCH COLO-Frame v12 04/38] migration: Export migrate_set_state() zhanghailiang
2015-12-15  8:22 ` [Qemu-devel] [PATCH COLO-Frame v12 05/38] migration: Add state records for migration incoming zhanghailiang
2015-12-15 17:36   ` Dr. David Alan Gilbert
2015-12-16  5:37     ` Hailiang Zhang
2015-12-15  8:22 ` [Qemu-devel] [PATCH COLO-Frame v12 06/38] migration: Integrate COLO checkpoint process into migration zhanghailiang
2015-12-15  8:22 ` [Qemu-devel] [PATCH COLO-Frame v12 07/38] migration: Integrate COLO checkpoint process into loadvm zhanghailiang
2015-12-15  8:22 ` [Qemu-devel] [PATCH COLO-Frame v12 08/38] migration: Rename the'file' member of MigrationState zhanghailiang
2015-12-15  8:22 ` [Qemu-devel] [PATCH COLO-Frame v12 09/38] COLO/migration: Create a new communication path from destination to source zhanghailiang
2015-12-15  8:22 ` [Qemu-devel] [PATCH COLO-Frame v12 10/38] COLO: Implement colo checkpoint protocol zhanghailiang
2015-12-18 14:52   ` Dr. David Alan Gilbert
2015-12-28  7:34     ` Hailiang Zhang
2015-12-19  8:54   ` Markus Armbruster
2015-12-22  7:00     ` Hailiang Zhang
2016-01-11 12:47       ` Markus Armbruster
2016-01-12 12:57         ` Hailiang Zhang
2015-12-15  8:22 ` [Qemu-devel] [PATCH COLO-Frame v12 11/38] COLO: Add a new RunState RUN_STATE_COLO zhanghailiang
2015-12-19  9:27   ` Markus Armbruster
2015-12-22 13:32     ` Hailiang Zhang
2016-01-11 13:16       ` Markus Armbruster
2016-01-12 12:54         ` Hailiang Zhang
2015-12-15  8:22 ` [Qemu-devel] [PATCH COLO-Frame v12 12/38] QEMUSizedBuffer: Introduce two help functions for qsb zhanghailiang
2015-12-15  8:22 ` [Qemu-devel] [PATCH COLO-Frame v12 13/38] COLO: Save PVM state to secondary side when do checkpoint zhanghailiang
2015-12-15  8:22 ` [Qemu-devel] [PATCH COLO-Frame v12 14/38] ram: Split host_from_stream_offset() into two helper functions zhanghailiang
2015-12-18 15:18   ` Dr. David Alan Gilbert
2015-12-15  8:22 ` [Qemu-devel] [PATCH COLO-Frame v12 15/38] COLO: Load PVM's dirty pages into SVM's RAM cache temporarily zhanghailiang
2015-12-15  8:22 ` [Qemu-devel] [PATCH COLO-Frame v12 16/38] ram/COLO: Record the dirty pages that SVM received zhanghailiang
2015-12-15  8:22 ` [Qemu-devel] [PATCH COLO-Frame v12 17/38] COLO: Load VMState into qsb before restore it zhanghailiang
2015-12-15  8:22 ` [Qemu-devel] [PATCH COLO-Frame v12 18/38] COLO: Flush PVM's cached RAM into SVM's memory zhanghailiang
2015-12-15 11:07   ` Changlong Xie
2015-12-25  3:03     ` Hailiang Zhang
2015-12-15  8:22 ` [Qemu-devel] [PATCH COLO-Frame v12 19/38] COLO: Add checkpoint-delay parameter for migrate-set-parameters zhanghailiang
2015-12-19  9:33   ` Markus Armbruster
2015-12-22 13:43     ` Hailiang Zhang
2015-12-15  8:22 ` [Qemu-devel] [PATCH COLO-Frame v12 20/38] COLO: synchronize PVM's state to SVM periodically zhanghailiang
2015-12-15  8:22 ` [Qemu-devel] [PATCH COLO-Frame v12 21/38] COLO failover: Introduce a new command to trigger a failover zhanghailiang
2015-12-18 15:27   ` Dr. David Alan Gilbert
2015-12-19  9:38   ` Markus Armbruster
2015-12-22 13:50     ` Hailiang Zhang [this message]
2015-12-25  2:27       ` Hailiang Zhang
2015-12-15  8:22 ` [Qemu-devel] [PATCH COLO-Frame v12 22/38] COLO failover: Introduce state to record failover process zhanghailiang
2015-12-15  8:22 ` [Qemu-devel] [PATCH COLO-Frame v12 23/38] COLO: Implement failover work for Primary VM zhanghailiang
2015-12-18 15:35   ` Dr. David Alan Gilbert
2015-12-28  7:39     ` Hailiang Zhang
2015-12-15  8:22 ` [Qemu-devel] [PATCH COLO-Frame v12 24/38] COLO: Implement failover work for Secondary VM zhanghailiang
2015-12-15  8:22 ` [Qemu-devel] [PATCH COLO-Frame v12 25/38] qmp event: Add event notification for COLO error zhanghailiang
2015-12-18 16:03   ` Eric Blake
2015-12-23  1:55     ` Hailiang Zhang
2015-12-19 10:02   ` Markus Armbruster
2015-12-21 21:14     ` [Qemu-devel] [Qemu-block] " John Snow
2015-12-23  3:14       ` Hailiang Zhang
2015-12-23  1:24     ` [Qemu-devel] " Wen Congyang
2016-01-05 19:21       ` [Qemu-devel] [Qemu-block] " John Snow
2015-12-23  3:10     ` [Qemu-devel] " Hailiang Zhang
2016-01-11 13:24       ` Markus Armbruster
2015-12-15  8:22 ` [Qemu-devel] [PATCH COLO-Frame v12 26/38] COLO failover: Shutdown related socket fd when do failover zhanghailiang
2015-12-15  9:44   ` Dr. David Alan Gilbert
2015-12-15 10:23   ` Dr. David Alan Gilbert
2015-12-16  5:58     ` Hailiang Zhang
2015-12-15  8:22 ` [Qemu-devel] [PATCH COLO-Frame v12 27/38] COLO failover: Don't do failover during loading VM's state zhanghailiang
2015-12-15 10:21   ` Dr. David Alan Gilbert
2015-12-25  1:02     ` Hailiang Zhang
2015-12-15  8:22 ` [Qemu-devel] [PATCH COLO-Frame v12 28/38] COLO: Process shutdown command for VM in COLO state zhanghailiang
2015-12-15 11:31   ` Dr. David Alan Gilbert
2015-12-25  6:13     ` Hailiang Zhang
2015-12-15  8:22 ` [Qemu-devel] [PATCH COLO-Frame v12 29/38] COLO: Update the global runstate after going into colo state zhanghailiang
2015-12-15 11:52   ` Dr. David Alan Gilbert
2015-12-15  8:22 ` [Qemu-devel] [PATCH COLO-Frame v12 30/38] savevm: Split load vm state function qemu_loadvm_state zhanghailiang
2015-12-15 12:08   ` Dr. David Alan Gilbert
2015-12-25  6:37     ` Hailiang Zhang
2015-12-15  8:22 ` [Qemu-devel] [PATCH COLO-Frame v12 31/38] COLO: Separate the process of saving/loading ram and device state zhanghailiang
2015-12-18 10:53   ` Dr. David Alan Gilbert
2015-12-28  3:46     ` Hailiang Zhang
2015-12-15  8:22 ` [Qemu-devel] [PATCH COLO-Frame v12 32/38] COLO: Split qemu_savevm_state_begin out of checkpoint process zhanghailiang
2015-12-18 12:01   ` Dr. David Alan Gilbert
2015-12-28  7:29     ` Hailiang Zhang
2015-12-15  8:22 ` [Qemu-devel] [PATCH COLO-Frame v12 33/38] net/filter-buffer: Add default filter-buffer for each netdev zhanghailiang
2015-12-15  8:22 ` [Qemu-devel] [PATCH COLO-Frame v12 34/38] filter-buffer: Accept zero interval zhanghailiang
2015-12-15  8:22 ` [Qemu-devel] [PATCH COLO-Frame v12 35/38] filter-buffer: Introduce a helper function to enable/disable default filter zhanghailiang
2015-12-15  8:22 ` [Qemu-devel] [PATCH COLO-Frame v12 36/38] filter-buffer: Introduce a helper function to release packets zhanghailiang
2015-12-15  8:22 ` [Qemu-devel] [PATCH COLO-Frame v12 37/38] colo: Use default buffer-filter to buffer and " zhanghailiang
2015-12-15  8:22 ` [Qemu-devel] [PATCH COLO-Frame v12 38/38] COLO: Add block replication into colo process zhanghailiang
2015-12-15 12:14 ` [Qemu-devel] [PATCH COLO-Frame v12 00/38] COarse-grain LOck-stepping(COLO) Virtual Machines for Non-stop Service (FT) Dr. David Alan Gilbert
2015-12-15 12:41   ` Hailiang Zhang
2015-12-17 10:52     ` Dr. David Alan Gilbert
2015-12-18  1:10       ` Hailiang Zhang
2015-12-18 15:47         ` Dr. David Alan Gilbert
2015-12-23  1:24           ` Hailiang Zhang

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=5679550F.3000908@huawei.com \
    --to=zhang.zhanghailiang@huawei.com \
    --cc=amit.shah@redhat.com \
    --cc=arei.gonglei@huawei.com \
    --cc=armbru@redhat.com \
    --cc=dgilbert@redhat.com \
    --cc=eddie.dong@intel.com \
    --cc=hongyang.yang@easystack.cn \
    --cc=lcapitulino@redhat.com \
    --cc=lizhijian@cn.fujitsu.com \
    --cc=peter.huangpeng@huawei.com \
    --cc=qemu-devel@nongnu.org \
    --cc=quintela@redhat.com \
    --cc=stefanha@redhat.com \
    --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.