[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v2 09/10] mirror: return mirror-specific information upon query
From: |
Fiona Ebner |
Subject: |
[PATCH v2 09/10] mirror: return mirror-specific information upon query |
Date: |
Mon, 9 Oct 2023 11:46:18 +0200 |
To start out, only actively-synced is returned.
For example, this is useful for jobs that started out in background
mode and switched to active mode. Once actively-synced is true, it's
clear that the mode switch has been completed. Note that completion of
the switch might happen much earlier, e.g. if the switch happens
before the job is ready, once all background operations have finished.
It's assumed that whether the disks are actively-synced or not is more
interesting than whether the mode switch completed. That information
can still be added if required in the future.
Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
---
Changes in v2:
* udpate QEMU version in QAPI
* update indentation in QAPI (like in a937b6aa73 ("qapi: Reformat
doc comments to conform to current conventions"))
block/mirror.c | 10 ++++++++++
qapi/block-core.json | 16 +++++++++++++++-
2 files changed, 25 insertions(+), 1 deletion(-)
diff --git a/block/mirror.c b/block/mirror.c
index 83aa4176c2..33b72ec5e5 100644
--- a/block/mirror.c
+++ b/block/mirror.c
@@ -1267,6 +1267,15 @@ static void mirror_change(BlockJob *job,
BlockJobChangeOptions *opts,
s->copy_mode = MIRROR_COPY_MODE_WRITE_BLOCKING;
}
+static void mirror_query(BlockJob *job, BlockJobInfo *info)
+{
+ MirrorBlockJob *s = container_of(job, MirrorBlockJob, common);
+
+ info->u.mirror = (BlockJobInfoMirror) {
+ .actively_synced = s->actively_synced,
+ };
+}
+
static const BlockJobDriver mirror_job_driver = {
.job_driver = {
.instance_size = sizeof(MirrorBlockJob),
@@ -1282,6 +1291,7 @@ static const BlockJobDriver mirror_job_driver = {
},
.drained_poll = mirror_drained_poll,
.change = mirror_change,
+ .query = mirror_query,
};
static const BlockJobDriver commit_active_job_driver = {
diff --git a/qapi/block-core.json b/qapi/block-core.json
index 950542b735..35d67410cc 100644
--- a/qapi/block-core.json
+++ b/qapi/block-core.json
@@ -1352,6 +1352,20 @@
{ 'enum': 'MirrorCopyMode',
'data': ['background', 'write-blocking'] }
+##
+# @BlockJobInfoMirror:
+#
+# Information specific to mirror block jobs.
+#
+# @actively-synced: Whether the source is actively synced to the
+# target, i.e. same data and new writes are done synchronously to
+# both.
+#
+# Since 8.2
+##
+{ 'struct': 'BlockJobInfoMirror',
+ 'data': { 'actively-synced': 'bool' } }
+
##
# @BlockJobInfo:
#
@@ -1403,7 +1417,7 @@
'auto-finalize': 'bool', 'auto-dismiss': 'bool',
'*error': 'str' },
'discriminator': 'type',
- 'data': {} }
+ 'data': { 'mirror': 'BlockJobInfoMirror' } }
##
# @query-block-jobs:
--
2.39.2
- [PATCH v2 04/10] block/mirror: determine copy_to_target only once, (continued)
- [PATCH v2 09/10] mirror: return mirror-specific information upon query,
Fiona Ebner <=
- [PATCH v2 07/10] qapi/block-core: turn BlockJobInfo into a union, Fiona Ebner, 2023/10/09
- [PATCH v2 10/10] iotests: adapt test output for new mirror query property, Fiona Ebner, 2023/10/09
- [PATCH v2 06/10] qapi/block-core: use JobType for BlockJobInfo's type, Fiona Ebner, 2023/10/09
- Re: [PATCH v2 00/10] mirror: allow switching from background to active mode, Vladimir Sementsov-Ogievskiy, 2023/10/10