From: Hailiang Zhang <zhang.zhanghailiang@huawei.com>
To: xiechanglong.d@gmail.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: Fri, 12 May 2017 14:25:10 +0800 [thread overview]
Message-ID: <59155546.1080109@huawei.com> (raw)
In-Reply-To: <58F5AB45.1050505@cn.fujitsu.com>
On 2017/4/18 13:59, Xie Changlong wrote:
>
> 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.
Hmm, we should not configure it for secondary side, i'll fix it in next version.
>> 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.
OK.
>> +# @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.
OK, will fix it, thanks.
>> # Since: 2.9
>> ##
>> { 'struct': 'BlockdevOptionsReplication',
>> 'base': 'BlockdevOptionsGenericFormat',
>> 'data': { 'mode': 'ReplicationMode',
>> - '*top-id': 'str' } }
>> + '*top-id': 'str',
>> + '*shared-disk-id': 'str',
>> + '*shared-disk': 'bool' } }
>>
>> ##
>> # @NFSTransport:
>
>
>
> .
>
next prev parent reply other threads:[~2017-05-12 6:25 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
2017-05-12 6:25 ` Hailiang Zhang [this message]
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=59155546.1080109@huawei.com \
--to=zhang.zhanghailiang@huawei.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=xiechanglong.d@gmail.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).