[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-block] [PATCH RFC 5/7] replication: fix code logic with the new sh
From: |
zhanghailiang |
Subject: |
[Qemu-block] [PATCH RFC 5/7] replication: fix code logic with the new shared_disk option |
Date: |
Thu, 20 Oct 2016 21:57:38 +0800 |
Some code logic only be needed in non-shared disk, here
we adjust these codes to prepare for shared disk scenario.
Signed-off-by: zhanghailiang <address@hidden>
---
block/replication.c | 44 ++++++++++++++++++++++++++------------------
1 file changed, 26 insertions(+), 18 deletions(-)
diff --git a/block/replication.c b/block/replication.c
index d687ffc..39c616d 100644
--- a/block/replication.c
+++ b/block/replication.c
@@ -517,15 +517,21 @@ static void replication_start(ReplicationState *rs,
ReplicationMode mode,
bdrv_op_block_all(top_bs, s->blocker);
bdrv_op_unblock(top_bs, BLOCK_OP_TYPE_DATAPLANE, s->blocker);
- backup_start("replication-backup", s->secondary_disk->bs,
- s->hidden_disk->bs, 0, MIRROR_SYNC_MODE_NONE, NULL, false,
- BLOCKDEV_ON_ERROR_REPORT, BLOCKDEV_ON_ERROR_REPORT,
- backup_job_completed, s, NULL, &local_err);
- if (local_err) {
- error_propagate(errp, local_err);
- backup_job_cleanup(s);
- aio_context_release(aio_context);
- return;
+ /*
+ * Only in the case of non-shared disk,
+ * the backup job is in the Slave side
+ */
+ if (!s->is_shared_disk) {
+ backup_start("replication-backup", s->secondary_disk->bs,
+ s->hidden_disk->bs, 0, MIRROR_SYNC_MODE_NONE, NULL, false,
+ BLOCKDEV_ON_ERROR_REPORT, BLOCKDEV_ON_ERROR_REPORT,
+ backup_job_completed, s, NULL, &local_err);
+ if (local_err) {
+ error_propagate(errp, local_err);
+ backup_job_cleanup(s);
+ aio_context_release(aio_context);
+ return;
+ }
}
secondary_do_checkpoint(s, errp);
@@ -556,14 +562,16 @@ static void replication_do_checkpoint(ReplicationState
*rs, Error **errp)
case REPLICATION_MODE_PRIMARY:
break;
case REPLICATION_MODE_SECONDARY:
- if (!s->secondary_disk->bs->job) {
- error_setg(errp, "Backup job was cancelled unexpectedly");
- break;
- }
- backup_do_checkpoint(s->secondary_disk->bs->job, &local_err);
- if (local_err) {
- error_propagate(errp, local_err);
- break;
+ if (!s->is_shared_disk) {
+ if (!s->secondary_disk->bs->job) {
+ error_setg(errp, "Backup job was cancelled unexpectedly");
+ break;
+ }
+ backup_do_checkpoint(s->secondary_disk->bs->job, &local_err);
+ if (local_err) {
+ error_propagate(errp, local_err);
+ break;
+ }
}
secondary_do_checkpoint(s, errp);
break;
@@ -644,7 +652,7 @@ static void replication_stop(ReplicationState *rs, bool
failover, Error **errp)
* before the BDS is closed, because we will access hidden
* disk, secondary disk in backup_job_completed().
*/
- if (s->secondary_disk->bs->job) {
+ if (!s->is_shared_disk && s->secondary_disk->bs->job) {
block_job_cancel_sync(s->secondary_disk->bs->job);
}
--
1.8.3.1
- [Qemu-block] [PATCH RFC 0/7] COLO block replication supports shared disk case, zhanghailiang, 2016/10/20
- [Qemu-block] [PATCH RFC 3/7] replication: add shared-disk and shared-disk-id options, zhanghailiang, 2016/10/20
- [Qemu-block] [PATCH RFC 2/7] block-backend: Introduce blk_root() helper, zhanghailiang, 2016/10/20
- [Qemu-block] [PATCH RFC 6/7] replication: Implement block replication for shared disk case, zhanghailiang, 2016/10/20
- [Qemu-block] [PATCH RFC 5/7] replication: fix code logic with the new shared_disk option,
zhanghailiang <=
- [Qemu-block] [PATCH RFC 1/7] docs/block-replication: Add description for shared-disk case, zhanghailiang, 2016/10/20
- [Qemu-block] [PATCH RFC 7/7] nbd/replication: implement .bdrv_get_info() for nbd and replication driver, zhanghailiang, 2016/10/20
- [Qemu-block] [PATCH RFC 4/7] replication: Split out backup_do_checkpoint() from secondary_do_checkpoint(), zhanghailiang, 2016/10/20
- Re: [Qemu-block] [PATCH RFC 0/7] COLO block replication supports shared disk case, Changlong Xie, 2016/10/25