qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Kevin Wolf <kwolf@redhat.com>
To: Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru>
Cc: Peter Krempa <pkrempa@redhat.com>,
	Markus Armbruster <armbru@redhat.com>,
	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: Tue, 12 Mar 2024 16:49:53 +0100	[thread overview]
Message-ID: <ZfB5oaFgYJ8SuSm1@redhat.com> (raw)
In-Reply-To: <1d6ba74e-b1d8-4292-9825-ea53d9bc77af@yandex-team.ru>

Am 12.03.2024 um 14:44 hat Vladimir Sementsov-Ogievskiy geschrieben:
> On 11.03.24 18:15, Vladimir Sementsov-Ogievskiy wrote:
> > On 08.03.24 11:52, Kevin Wolf wrote:
> > > Am 07.03.2024 um 20:42 hat Vladimir Sementsov-Ogievskiy geschrieben:
> > > > On 04.03.24 14:09, Peter Krempa wrote:
> > > > > On Mon, Mar 04, 2024 at 11:48:54 +0100, Kevin Wolf wrote:
> > > > > > Am 28.02.2024 um 19:07 hat Vladimir Sementsov-Ogievskiy geschrieben:
> > > > > > > On 03.11.23 18:56, Markus Armbruster wrote:
> > > > > > > > Kevin Wolf<kwolf@redhat.com>  writes:
> > > > > 
> > > > > [...]
> > > > > 
> > > > > > > > Is the job abstraction a failure?
> > > > > > > > 
> > > > > > > > We have
> > > > > > > > 
> > > > > > > >        block-job- command      since   job- command    since
> > > > > > > >        -----------------------------------------------------
> > > > > > > >        block-job-set-speed     1.1
> > > > > > > >        block-job-cancel        1.1     job-cancel      3.0
> > > > > > > >        block-job-pause         1.3     job-pause       3.0
> > > > > > > >        block-job-resume        1.3     job-resume      3.0
> > > > > > > >        block-job-complete      1.3     job-complete    3.0
> > > > > > > >        block-job-dismiss       2.12    job-dismiss     3.0
> > > > > > > >        block-job-finalize      2.12    job-finalize    3.0
> > > > > > > >        block-job-change        8.2
> > > > > > > >        query-block-jobs        1.1     query-jobs
> > > > > 
> > > > > [...]
> > > > > 
> > > > > > I consider these strictly optional. We don't really have strong reasons
> > > > > > to deprecate these commands (they are just thin wrappers), and I think
> > > > > > libvirt still uses block-job-* in some places.
> > > > > 
> > > > > Libvirt uses 'block-job-cancel' because it has different semantics from
> > > > > 'job-cancel' which libvirt documented as the behaviour of the API that
> > > > > uses it. (Semantics regarding the expectation of what is written to the
> > > > > destination node at the point when the job is cancelled).
> > > > > 
> > > > 
> > > > That's the following semantics:
> > > > 
> > > >    # Note that if you issue 'block-job-cancel' after 'drive-mirror' has
> > > >    # indicated (via the event BLOCK_JOB_READY) that the source and
> > > >    # destination are synchronized, then the event triggered by this
> > > >    # command changes to BLOCK_JOB_COMPLETED, to indicate that the
> > > >    # mirroring has ended and the destination now has a point-in-time copy
> > > >    # tied to the time of the cancellation.
> > > > 
> > > > Hmm. Looking at this, it looks for me, that should probably a
> > > > 'block-job-complete" command (as leading to BLOCK_JOB_COMPLETED).
> > > 
> > > Yes, it's just a different completion mode.
> > > 
> > > > Actually, what is the difference between block-job-complete and
> > > > block-job-cancel(force=false) for mirror in ready state?
> > > > 
> > > > I only see the following differencies:
> > > > 
> > > > 1. block-job-complete documents that it completes the job
> > > >     synchronously.. But looking at mirror code I see it just set
> > > >     s->should_complete = true, which will be then handled
> > > >     asynchronously..  So I doubt that documentation is correct.
> > > > 
> > > > 2. block-job-complete will trigger final graph changes.
> > > >     block-job-cancel will not.
> > > > 
> > > > Is [2] really useful? Seems yes: in case of some failure before
> > > > starting migration target, we'd like to continue executing source. So,
> > > > no reason to break block-graph in source, better keep it unchanged.
> > > > 
> > > > But I think, such behavior better be setup by mirror-job start
> > > > parameter, rather then by special option for cancel (or even
> > > > compelete) command, useful only for mirror.
> > > 
> > > I'm not sure, having the option on the complete command makes more sense
> > > to me than having it in blockdev-mirror.
> > > 
> > > I do see the challenge of representing this meaningfully in QAPI,
> > > though. Semantically it should be a union with job-specific options and
> > > only mirror adds the graph-changes option. But the union variant
> > > can't be directly selected from another option - instead we have a job
> > > ID, and the variant is the job type of the job with this ID.
> > 
> > We already have such command: block-job-change. Which has id and type parameters, so user have to pass both, to identify the job itself and pick corresponding variant of the union type.
> > 
> > That would be good to somehow teach QAPI to get the type automatically from the job itself...
> 
> 
> Seems, that's easy enough to implement such a possibility, I'll try. At least now I have a prototype, which compiles
> 
> diff --git a/qapi/block-core.json b/qapi/block-core.json
> index 0ae8ae62dc..332de67e52 100644
> --- a/qapi/block-core.json
> +++ b/qapi/block-core.json
> @@ -3116,13 +3116,11 @@
>  #
>  # @id: The job identifier
>  #
> -# @type: The job type
> -#
>  # Since: 8.2
>  ##
>  { 'union': 'BlockJobChangeOptions',
> -  'base': { 'id': 'str', 'type': 'JobType' },
> -  'discriminator': 'type',
> +  'base': { 'id': 'str' },
> +  'discriminator': 'JobType',
>    'data': { 'mirror': 'BlockJobChangeOptionsMirror' } }

We probably need some different syntax because I think in theory we
could get conflicts between option names and type names. But I'll leave
this discussion to Markus. I hope you can figure out something that he
is willing to accept, getting the variant from a callback looks like
useful functionality.

For output, your implementation is probably not optimal because you're
going to look up things the calling code already knows, but it's
probably not the end of the world.

Kevin



  reply	other threads:[~2024-03-12 15:50 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
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 [this message]
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=ZfB5oaFgYJ8SuSm1@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=pkrempa@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 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).