From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
To: Lukas Straub <lukasstraub2@web.de>, kwolf@redhat.com, mreitz@redhat.com
Cc: Zhang Chen <chen.zhang@intel.com>,
Jason Wang <jasowang@redhat.com>,
Xie Changlong <xiechanglong.d@gmail.com>,
qemu-devel <qemu-devel@nongnu.org>,
Wen Congyang <wencongyang2@huawei.com>
Subject: Re: [Qemu-devel] [PATCH v2 1/3] Replication: Ignore requests after failover
Date: Thu, 15 Aug 2019 19:51:18 +0100 [thread overview]
Message-ID: <20190815185118.GB2883@work-vm> (raw)
In-Reply-To: <20190815200823.3de1bd14@luklap>
* Lukas Straub (lukasstraub2@web.de) wrote:
> After failover the Secondary side of replication shouldn't change state, because
> it now functions as our primary disk.
>
> In replication_start, replication_do_checkpoint, replication_stop, ignore
> the request if current state is BLOCK_REPLICATION_DONE (sucessful failover) or
> BLOCK_REPLICATION_FAILOVER (failover in progres i.e. currently merging active
> and hidden images into the base image).
>
> Signed-off-by: Lukas Straub <lukasstraub2@web.de>
We should add some block people to this one to review it; cc'ing in
Kevin and Max.
Dave
> ---
> block/replication.c | 38 +++++++++++++++++++++++++++++++++++---
> 1 file changed, 35 insertions(+), 3 deletions(-)
>
> diff --git a/block/replication.c b/block/replication.c
> index 3d4dedddfc..97cc65c0cf 100644
> --- a/block/replication.c
> +++ b/block/replication.c
> @@ -454,6 +454,17 @@ static void replication_start(ReplicationState *rs, ReplicationMode mode,
> aio_context_acquire(aio_context);
> s = bs->opaque;
>
> + if (s->stage == BLOCK_REPLICATION_DONE ||
> + s->stage == BLOCK_REPLICATION_FAILOVER) {
> + /*
> + * This case happens when a secondary is promoted to primary.
> + * Ignore the request because the secondary side of replication
> + * doesn't have to do anything anymore.
> + */
> + aio_context_release(aio_context);
> + return;
> + }
> +
> if (s->stage != BLOCK_REPLICATION_NONE) {
> error_setg(errp, "Block replication is running or done");
> aio_context_release(aio_context);
> @@ -529,8 +540,7 @@ static void replication_start(ReplicationState *rs, ReplicationMode mode,
> "Block device is in use by internal backup job");
>
> top_bs = bdrv_lookup_bs(s->top_id, s->top_id, NULL);
> - if (!top_bs || !bdrv_is_root_node(top_bs) ||
> - !check_top_bs(top_bs, bs)) {
> + if (!top_bs || !check_top_bs(top_bs, bs)) {
> error_setg(errp, "No top_bs or it is invalid");
> reopen_backing_file(bs, false, NULL);
> aio_context_release(aio_context);
> @@ -577,6 +587,17 @@ static void replication_do_checkpoint(ReplicationState *rs, Error **errp)
> aio_context_acquire(aio_context);
> s = bs->opaque;
>
> + if (s->stage == BLOCK_REPLICATION_DONE ||
> + s->stage == BLOCK_REPLICATION_FAILOVER) {
> + /*
> + * This case happens when a secondary was promoted to primary.
> + * Ignore the request because the secondary side of replication
> + * doesn't have to do anything anymore.
> + */
> + aio_context_release(aio_context);
> + return;
> + }
> +
> if (s->mode == REPLICATION_MODE_SECONDARY) {
> secondary_do_checkpoint(s, errp);
> }
> @@ -593,7 +614,7 @@ static void replication_get_error(ReplicationState *rs, Error **errp)
> aio_context_acquire(aio_context);
> s = bs->opaque;
>
> - if (s->stage != BLOCK_REPLICATION_RUNNING) {
> + if (s->stage == BLOCK_REPLICATION_NONE) {
> error_setg(errp, "Block replication is not running");
> aio_context_release(aio_context);
> return;
> @@ -635,6 +656,17 @@ static void replication_stop(ReplicationState *rs, bool failover, Error **errp)
> aio_context_acquire(aio_context);
> s = bs->opaque;
>
> + if (s->stage == BLOCK_REPLICATION_DONE ||
> + s->stage == BLOCK_REPLICATION_FAILOVER) {
> + /*
> + * This case happens when a secondary was promoted to primary.
> + * Ignore the request because the secondary side of replication
> + * doesn't have to do anything anymore.
> + */
> + aio_context_release(aio_context);
> + return;
> + }
> +
> if (s->stage != BLOCK_REPLICATION_RUNNING) {
> error_setg(errp, "Block replication is not running");
> aio_context_release(aio_context);
> --
> 2.20.1
>
>
--
Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK
next prev parent reply other threads:[~2019-08-15 19:00 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <cover.1565892399.git.lukasstraub2@web.de>
2019-08-15 18:08 ` [Qemu-devel] [PATCH v2 1/3] Replication: Ignore requests after failover Lukas Straub
2019-08-15 18:51 ` Dr. David Alan Gilbert [this message]
2019-08-15 18:08 ` [Qemu-devel] [PATCH v2 2/3] net/filter.c: Add Options to insert filters anywhere in the filter list Lukas Straub
2019-08-15 18:08 ` [Qemu-devel] [PATCH v2 3/3] Update Documentation Lukas Straub
2019-08-15 18:48 [Qemu-devel] [PATCH v2 0/3] colo: Add support for continious replication Lukas Straub
2019-08-15 18:48 ` [Qemu-devel] [PATCH v2 1/3] Replication: Ignore requests after failover Lukas Straub
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=20190815185118.GB2883@work-vm \
--to=dgilbert@redhat.com \
--cc=chen.zhang@intel.com \
--cc=jasowang@redhat.com \
--cc=kwolf@redhat.com \
--cc=lukasstraub2@web.de \
--cc=mreitz@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=wencongyang2@huawei.com \
--cc=xiechanglong.d@gmail.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.