qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Xie Changlong <xiecl.fnst@cn.fujitsu.com>
To: zhanghailiang <zhang.zhanghailiang@huawei.com>,
	stefanha@redhat.com, qemu-devel@nongnu.org
Cc: qemu-block@nongnu.org, kwolf@redhat.com,
	zhangchen.fnst@cn.fujitsu.com,
	Wen Congyang <wency@cn.fujitsu.com>
Subject: Re: [Qemu-devel] [PATCH v4 2/6] replication: add shared-disk and shared-disk-id options
Date: Tue, 18 Apr 2017 13:59:33 +0800	[thread overview]
Message-ID: <58F5AB45.1050505@cn.fujitsu.com> (raw)
In-Reply-To: <1492005921-15664-3-git-send-email-zhang.zhanghailiang@huawei.com>



On 04/12/2017 10:05 PM, zhanghailiang wrote:
> We use these two options to identify which disk is
> shared
>
> Signed-off-by: zhanghailiang <zhang.zhanghailiang@huawei.com>
> Signed-off-by: Wen Congyang <wency@cn.fujitsu.com>
> Signed-off-by: Zhang Chen <zhangchen.fnst@cn.fujitsu.com>
> ---
> v4:
> - Add proper comment for primary_disk (Stefan)
> v2:
> - Move g_free(s->shared_disk_id) to the common fail process place (Stefan)
> - Fix comments for these two options
> ---
>   block/replication.c  | 43 +++++++++++++++++++++++++++++++++++++++++--
>   qapi/block-core.json | 10 +++++++++-
>   2 files changed, 50 insertions(+), 3 deletions(-)
>
> diff --git a/block/replication.c b/block/replication.c
> index bf3c395..418b81b 100644
> --- a/block/replication.c
> +++ b/block/replication.c
> @@ -25,9 +25,12 @@
>   typedef struct BDRVReplicationState {
>       ReplicationMode mode;
>       int replication_state;
> +    bool is_shared_disk;
> +    char *shared_disk_id;
>       BdrvChild *active_disk;
>       BdrvChild *hidden_disk;
>       BdrvChild *secondary_disk;
> +    BdrvChild *primary_disk;
>       char *top_id;
>       ReplicationState *rs;
>       Error *blocker;
> @@ -53,6 +56,9 @@ static void replication_stop(ReplicationState *rs, bool failover,
>   
>   #define REPLICATION_MODE        "mode"
>   #define REPLICATION_TOP_ID      "top-id"
> +#define REPLICATION_SHARED_DISK "shared-disk"
> +#define REPLICATION_SHARED_DISK_ID "shared-disk-id"
> +
>   static QemuOptsList replication_runtime_opts = {
>       .name = "replication",
>       .head = QTAILQ_HEAD_INITIALIZER(replication_runtime_opts.head),
> @@ -65,6 +71,14 @@ static QemuOptsList replication_runtime_opts = {
>               .name = REPLICATION_TOP_ID,
>               .type = QEMU_OPT_STRING,
>           },
> +        {
> +            .name = REPLICATION_SHARED_DISK_ID,
> +            .type = QEMU_OPT_STRING,
> +        },
> +        {
> +            .name = REPLICATION_SHARED_DISK,
> +            .type = QEMU_OPT_BOOL,
> +        },
>           { /* end of list */ }
>       },
>   };
> @@ -85,6 +99,9 @@ static int replication_open(BlockDriverState *bs, QDict *options,
>       QemuOpts *opts = NULL;
>       const char *mode;
>       const char *top_id;
> +    const char *shared_disk_id;
> +    BlockBackend *blk;
> +    BlockDriverState *tmp_bs;
>   
>       bs->file = bdrv_open_child(NULL, options, "file", bs, &child_file,
>                                  false, errp);
> @@ -125,12 +142,33 @@ static int replication_open(BlockDriverState *bs, QDict *options,
>                      "The option mode's value should be primary or secondary");
>           goto fail;
>       }
> +    s->is_shared_disk = qemu_opt_get_bool(opts, REPLICATION_SHARED_DISK,
> +

What If secondary side is supplied with 'REPLICATION_SHARED_DISK_ID'? 
Pls refer f4f2539bc to pefect the logical.
>                                          false);
> +    if (s->is_shared_disk && (s->mode == REPLICATION_MODE_PRIMARY)) {
> +        shared_disk_id = qemu_opt_get(opts, REPLICATION_SHARED_DISK_ID);
> +        if (!shared_disk_id) {
> +            error_setg(&local_err, "Missing shared disk blk option");
> +            goto fail;
> +        }
> +        s->shared_disk_id = g_strdup(shared_disk_id);
> +        blk = blk_by_name(s->shared_disk_id);
> +        if (!blk) {
> +            error_setg(&local_err, "There is no %s block", s->shared_disk_id);
> +            goto fail;
> +        }
> +        /* We have a BlockBackend for the primary disk but use BdrvChild for
> +         * consistency - active_disk, secondary_disk, etc are also BdrvChild.
> +         */
> +        tmp_bs = blk_bs(blk);
> +        s->primary_disk = QLIST_FIRST(&tmp_bs->parents);
> +    }
>   
>       s->rs = replication_new(bs, &replication_ops);
>   
> -    ret = 0;
> -
> +    qemu_opts_del(opts);
> +    return 0;
>   fail:
> +    g_free(s->shared_disk_id);
>       qemu_opts_del(opts);
>       error_propagate(errp, local_err);
>   
> @@ -141,6 +179,7 @@ static void replication_close(BlockDriverState *bs)
>   {
>       BDRVReplicationState *s = bs->opaque;
>   
> +    g_free(s->shared_disk_id);
>       if (s->replication_state == BLOCK_REPLICATION_RUNNING) {
>           replication_stop(s->rs, false, NULL);
>       }
> diff --git a/qapi/block-core.json b/qapi/block-core.json
> index 033457c..361c932 100644
> --- a/qapi/block-core.json
> +++ b/qapi/block-core.json
> @@ -2661,12 +2661,20 @@
>   #          node who owns the replication node chain. Must not be given in
>   #          primary mode.
>   #
> +# @shared-disk-id: Id of shared disk while is replication mode, if @shared-disk
> +#                  is true, this option is required (Since: 2.10)
> +#
Further explanations:

For @shared-disk-id, it must/only be given when @shared-disk enable on
Primary side.

> +# @shared-disk: To indicate whether or not a disk is shared by primary VM
> +#               and secondary VM. (The default is false) (Since: 2.10)
> +#
Further explanations:

For @shared-disk, it must be given or not-given on both side at the same 
time.

>   # Since: 2.9
>   ##
>   { 'struct': 'BlockdevOptionsReplication',
>     'base': 'BlockdevOptionsGenericFormat',
>     'data': { 'mode': 'ReplicationMode',
> -            '*top-id': 'str' } }
> +            '*top-id': 'str',
> +            '*shared-disk-id': 'str',
> +            '*shared-disk': 'bool' } }
>   
>   ##
>   # @NFSTransport:

  parent reply	other threads:[~2017-04-18  5:56 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-04-12 14:05 [Qemu-devel] [PATCH v4 0/6] COLO block replication supports shared disk case zhanghailiang
2017-04-12 14:05 ` [Qemu-devel] [PATCH v4 1/6] docs/block-replication: Add description for shared-disk case zhanghailiang
2017-04-12 14:05 ` [Qemu-devel] [PATCH v4 2/6] replication: add shared-disk and shared-disk-id options zhanghailiang
2017-04-12 14:28   ` Eric Blake
2017-04-17  6:31     ` Hailiang Zhang
2017-04-18  5:59   ` Xie Changlong [this message]
2017-05-12  6:25     ` Hailiang Zhang
2017-05-11 19:08   ` [Qemu-devel] [Qemu-block] " Stefan Hajnoczi
2017-05-12  6:28     ` Hailiang Zhang
2017-04-12 14:05 ` [Qemu-devel] [PATCH v4 3/6] replication: Split out backup_do_checkpoint() from secondary_do_checkpoint() zhanghailiang
2017-04-12 14:05 ` [Qemu-devel] [PATCH v4 4/6] replication: fix code logic with the new shared_disk option zhanghailiang
2017-04-12 14:05 ` [Qemu-devel] [PATCH v4 5/6] replication: Implement block replication for shared disk case zhanghailiang
2017-05-11 19:15   ` Stefan Hajnoczi
2017-05-12  7:03     ` Hailiang Zhang
2017-04-12 14:05 ` [Qemu-devel] [PATCH v4 6/6] nbd/replication: implement .bdrv_get_info() for nbd and replication driver zhanghailiang
2017-05-11 19:17 ` [Qemu-devel] [Qemu-block] [PATCH v4 0/6] COLO block replication supports shared disk case Stefan Hajnoczi
2017-05-12  7:26   ` Hailiang Zhang
2017-05-16 10:41 ` [Qemu-devel] " 吴志勇

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=58F5AB45.1050505@cn.fujitsu.com \
    --to=xiecl.fnst@cn.fujitsu.com \
    --cc=kwolf@redhat.com \
    --cc=qemu-block@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    --cc=stefanha@redhat.com \
    --cc=wency@cn.fujitsu.com \
    --cc=zhang.zhanghailiang@huawei.com \
    --cc=zhangchen.fnst@cn.fujitsu.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).