From: Kevin Wolf <kwolf@redhat.com>
To: Markus Armbruster <armbru@redhat.com>
Cc: Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru>,
Fiona Ebner <f.ebner@proxmox.com>,
qemu-devel@nongnu.org, qemu-block@nongnu.org, eblake@redhat.com,
hreitz@redhat.com, jsnow@redhat.com, den@virtuozzo.com,
t.lamprecht@proxmox.com, alexander.ivanov@virtuozzo.com
Subject: Re: [PATCH v2 00/10] mirror: allow switching from background to active mode
Date: Fri, 3 Nov 2023 12:54:36 +0100 [thread overview]
Message-ID: <ZUTffE0wfjLH2u+e@redhat.com> (raw)
In-Reply-To: <87o7gbyy8w.fsf@pond.sub.org>
Am 03.11.2023 um 10:36 hat Markus Armbruster geschrieben:
> Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru> writes:
>
> > On 11.10.23 13:18, Fiona Ebner wrote:
> >> Am 10.10.23 um 19:55 schrieb Vladimir Sementsov-Ogievskiy:
> >>> On 09.10.23 12:46, Fiona Ebner wrote:
> >>>>
> >>>> Initially, I tried to go for a more general 'job-change' command, but
> >>>> I couldn't figure out a way to avoid mutual inclusion between
> >>>> block-core.json and job.json.
> >>>>
> >>>
> >>> What is the problem with it? I still think that job-change would be better.
> >>>
> >> If going for job-change in job.json, the dependencies would be
> >> job-change -> JobChangeOptions -> JobChangeOptionsMirror -> MirrorCopyMode
> >> query-jobs -> JobInfo -> JobInfoMirror
> >> and we can't include block-core.json in job.json, because an inclusion
> >> loop gives a build error.
>
> Let me try to understand this.
>
> Command job-change needs its argument type JobChangeOptions.
>
> JobChangeOptions is a union, and JobChangeOptionsMirror is one of its
> branches.
>
> JobChangeOptionsMirror needs MirrorCopyMode from block-core.json.
>
> block-core.json needs job.json for JobType and JobStatus.
>
> >> Could be made to work by moving MirrorCopyMode (and
> >> JobChangeOptionsMirror, JobInfoMirror) to job.json or some place that
> >> can be included by both job.json and block-core.json. Moving the
> >> type-specific definitions to the general job.json didn't feel right to
> >> me. Including another file with type-specific definitions in job.json
> >> feels slightly less wrong, but still not quite right and I didn't want
> >> to create a new file just for MirrorCopyMode (and
> >> JobChangeOptionsMirror, JobInfoMirror).
> >> And going further and moving all mirror-related things to a separate
> >> file would require moving along things like NewImageMode with it or
> >> create yet another file for such general things used by multiple block-jobs.
> >> If preferred, I can try and go with some version of the above.
> >>
> >
> > OK, I see the problem. Seems, that all requires some good refactoring. But that's a preexisting big work, and should not hold up your series. I'm OK to proceed with block-job-change.
>
> Saving ourselves some internal refactoring is a poor excuse for
> undesirable external interfaces.
I'm not sure how undesirable it is. We have block-job-* commands for
pretty much every other operation, so it's only consistent to have
block-job-change, too.
Having job-change, too, might be nice in theory, but we don't have even
a potential user for it at this point (i.e. a job type that isn't a
block job, but for which changing options at runtime makes sense).
> We need to answer two questions before we do that:
>
> 1. How much work would the refactoring be?
>
> 2. Is the interface improvement this enables worth the work?
>
> Let's start with 1.
>
> An obvious solution is to split JobType and JobStatus off job.json to
> break the dependency of block-core.json on job.json.
>
> But I'd like us to investigate another one. block-core.json is *huge*.
> It's almost a quarter of the entire QAPI schema. Can we spin out block
> jobs into block-job.json? Moves the dependency on job.json from
> block-core.json to block-job.json.
It also makes job.json depend on block-job.json instead of
block-core.json, so you only moved the problem without solving it.
Kevin
next prev parent reply other threads:[~2023-11-03 11:55 UTC|newest]
Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-10-09 9:46 [PATCH v2 00/10] mirror: allow switching from background to active mode Fiona Ebner
2023-10-09 9:46 ` [PATCH v2 01/10] blockjob: introduce block-job-change QMP command Fiona Ebner
2023-10-10 18:04 ` Vladimir Sementsov-Ogievskiy
2023-10-09 9:46 ` [PATCH v2 02/10] block/mirror: set actively_synced even after the job is ready Fiona Ebner
2023-10-09 9:46 ` [PATCH v2 03/10] block/mirror: move dirty bitmap to filter Fiona Ebner
2023-10-10 19:10 ` Vladimir Sementsov-Ogievskiy
2023-10-09 9:46 ` [PATCH v2 04/10] block/mirror: determine copy_to_target only once Fiona Ebner
2023-10-10 19:23 ` Vladimir Sementsov-Ogievskiy
2023-10-09 9:46 ` [PATCH v2 05/10] mirror: implement mirror_change method Fiona Ebner
2023-10-10 19:37 ` Vladimir Sementsov-Ogievskiy
2023-10-11 11:22 ` Fiona Ebner
2023-10-12 13:54 ` Vladimir Sementsov-Ogievskiy
2023-10-09 9:46 ` [PATCH v2 06/10] qapi/block-core: use JobType for BlockJobInfo's type Fiona Ebner
2023-10-09 9:46 ` [PATCH v2 07/10] qapi/block-core: turn BlockJobInfo into a union Fiona Ebner
2023-10-09 9:46 ` [PATCH v2 08/10] blockjob: query driver-specific info via a new 'query' driver method Fiona Ebner
2023-10-10 19:51 ` Vladimir Sementsov-Ogievskiy
2023-10-09 9:46 ` [PATCH v2 09/10] mirror: return mirror-specific information upon query Fiona Ebner
2023-10-10 19:53 ` Vladimir Sementsov-Ogievskiy
2023-10-09 9:46 ` [PATCH v2 10/10] iotests: adapt test output for new mirror query property Fiona Ebner
2023-10-10 19:57 ` Vladimir Sementsov-Ogievskiy
2023-10-10 17:55 ` [PATCH v2 00/10] mirror: allow switching from background to active mode Vladimir Sementsov-Ogievskiy
2023-10-10 20:01 ` Vladimir Sementsov-Ogievskiy
2023-10-11 10:18 ` Fiona Ebner
2023-10-12 14:10 ` Vladimir Sementsov-Ogievskiy
2023-11-03 9:36 ` Markus Armbruster
2023-11-03 11:54 ` Kevin Wolf [this message]
2023-11-03 15:56 ` Markus Armbruster
2024-02-28 18:07 ` Vladimir Sementsov-Ogievskiy
2024-02-29 5:28 ` Markus Armbruster
2024-03-04 10:48 ` Kevin Wolf
2024-03-04 11:09 ` Peter Krempa
2024-03-07 19:42 ` Vladimir Sementsov-Ogievskiy
2024-03-08 8:21 ` Fiona Ebner
2024-03-08 8:52 ` Kevin Wolf
2024-03-11 15:15 ` Vladimir Sementsov-Ogievskiy
2024-03-12 13:44 ` Vladimir Sementsov-Ogievskiy
2024-03-12 15:49 ` Kevin Wolf
2024-03-12 18:52 ` Vladimir Sementsov-Ogievskiy
2024-03-10 21:07 ` Peter Krempa
2024-03-11 15:51 ` Vladimir Sementsov-Ogievskiy
2024-03-11 16:07 ` Peter Krempa
2024-03-04 12:27 ` Markus Armbruster
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=ZUTffE0wfjLH2u+e@redhat.com \
--to=kwolf@redhat.com \
--cc=alexander.ivanov@virtuozzo.com \
--cc=armbru@redhat.com \
--cc=den@virtuozzo.com \
--cc=eblake@redhat.com \
--cc=f.ebner@proxmox.com \
--cc=hreitz@redhat.com \
--cc=jsnow@redhat.com \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=t.lamprecht@proxmox.com \
--cc=vsementsov@yandex-team.ru \
/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.