From: Kevin Wolf <kwolf@redhat.com>
To: Max Reitz <mreitz@redhat.com>
Cc: qemu-block@nongnu.org, eblake@redhat.com, jsnow@redhat.com,
armbru@redhat.com, jcody@redhat.com, qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH 39/42] job: Add lifecycle QMP commands
Date: Tue, 15 May 2018 16:08:50 +0200 [thread overview]
Message-ID: <20180515140850.GE4442@localhost.localdomain> (raw)
In-Reply-To: <1212f284-2af7-e586-ec95-18e77a53d13a@redhat.com>
[-- Attachment #1: Type: text/plain, Size: 4804 bytes --]
Am 15.05.2018 um 00:31 hat Max Reitz geschrieben:
> On 2018-05-09 18:26, Kevin Wolf wrote:
> > This adds QMP commands that control the transition between states of the
> > job lifecycle.
> >
> > Signed-off-by: Kevin Wolf <kwolf@redhat.com>
> > ---
> > qapi/job.json | 112 ++++++++++++++++++++++++++++++++++++++++++++++
> > job-qmp.c | 140 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> > MAINTAINERS | 1 +
> > Makefile.objs | 2 +-
> > trace-events | 9 ++++
> > 5 files changed, 263 insertions(+), 1 deletion(-)
> > create mode 100644 job-qmp.c
> >
> > diff --git a/qapi/job.json b/qapi/job.json
> > index bd88a358d0..7b84158292 100644
> > --- a/qapi/job.json
> > +++ b/qapi/job.json
> > @@ -63,3 +63,115 @@
> > { 'event': 'JOB_STATUS_CHANGE',
> > 'data': { 'id': 'str',
> > 'status': 'JobStatus' } }
> > +
> > +##
> > +# @job-pause:
> > +#
> > +# Pause an active job.
> > +#
> > +# This command returns immediately after marking the active job for pausing.
> > +# Pausing an already paused job has no cumulative effect; a single job-resume
> > +# command will resume the job.
>
> Pausing an already paused job is, in fact, an error.
>
> (Which should be noted here instead of making it appear like it'd be
> idempotent.)
Aye. Interestingly, I managed to fix it below in job-resume, but missed
it here. I should also stick in a patch somewhere early in the series
that fixes the documentation of block-job-pause/resume.
> > +##
> > +# @job-cancel:
> > +#
> > +# Instruct an active background job to cancel at the next opportunity.
> > +# This command returns immediately after marking the active job for
> > +# cancellation.
> > +#
> > +# The job will cancel as soon as possible and then emit a JOB_STATUS_CHANGE
> > +# event. Usually, the status will change to ABORTING, but it is possible that
> > +# a job successfully completes (e.g. because it was almost done and there was
> > +# no opportunity to cancel earlier than completing the job) and transitions to
> > +# PENDING instead.
> > +#
> > +# Note that if you issue 'job-cancel' after a mirror block job has indicated
> > +# (via the event BLOCK_JOB_READY, and by transitioning into the READY state)
> > +# that the source and destination are synchronized, then the job always
> > +# completes successfully and transitions to PENDING as well as triggering the
> > +# event 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.
> > +#
> > +# @id: The job identifier.
> > +#
> > +# @force: If true, and the job is already in the READY state, abandon the job
> > +# immediately (even if it is paused) instead of waiting for the
> > +# destination to complete its final synchronization
>
> The note on "final synchronization" is extremely mirror-specific. I see
> three choices here:
>
> (1) If mirror stays the only job with this special cancel semantics,
> then we are free to note that this is a mirror-specific flag here.
>
> (2) Even if some other job might come along at some point where use of
> @force may make sense, that doesn't stop us from now noting that only
> mirror supports this, which helps readers understand what "destination"
> and "final synchronization" mean.
>
> (Yes, so (1) and (2) are basically the same.)
>
> (3) We try to find some general description and drop the last part.
> Like "If a job would normally decide to complete instead of actually
> aborting, this flag can be used to convince it otherwise." But that's
> so handwavy, I'd rather just mark it as a special mirror flag for now.
Or how about this one?
(4) Mirror is really abusing cancel for a second completion mode and we
don't want to have this kind of ugliness in job-cancel. Remove
@force from the schema and internally always use force=true. For
now, block-job-cancel does the job (no pun intended) for mirror, and
maybe we can later introduce a way to select completion mode with
job-complete.
This would also get us rid of that whole long paragraph above that
explains how mirror jobs have an exceptional behaviour.
> > diff --git a/Makefile.objs b/Makefile.objs
> > index 3df8d58e49..253e0356f3 100644
> > --- a/Makefile.objs
> > +++ b/Makefile.objs
> > @@ -66,7 +66,7 @@ chardev-obj-y = chardev/
> > # block-obj-y is code used by both qemu system emulation and qemu-img
> >
> > block-obj-y += nbd/
> > -block-obj-y += block.o blockjob.o job.o
> > +block-obj-y += block.o blockjob.o job.o job-qmp.o
>
> Shouldn't this be in common-obj-y like blockdev?
Seems to build with that change, so it can't be wrong...
Kevin
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 801 bytes --]
next prev parent reply other threads:[~2018-05-15 14:09 UTC|newest]
Thread overview: 146+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-05-09 16:25 [Qemu-devel] [PATCH 00/42] Generic background jobs Kevin Wolf
2018-05-09 16:25 ` [Qemu-devel] [PATCH 01/42] blockjob: Fix assertion in block_job_finalize() Kevin Wolf
2018-05-09 17:28 ` Eric Blake
2018-05-11 21:55 ` Max Reitz
2018-05-11 22:29 ` John Snow
2018-05-09 16:25 ` [Qemu-devel] [PATCH 02/42] blockjob: Wrappers for progress counter access Kevin Wolf
2018-05-11 22:12 ` Max Reitz
2018-05-14 10:16 ` Kevin Wolf
2018-05-14 19:14 ` John Snow
2018-05-09 16:25 ` [Qemu-devel] [PATCH 03/42] blockjob: Move RateLimit to BlockJob Kevin Wolf
2018-05-11 22:14 ` Max Reitz
2018-05-14 19:19 ` John Snow
2018-05-09 16:25 ` [Qemu-devel] [PATCH 04/42] blockjob: Implement block_job_set_speed() centrally Kevin Wolf
2018-05-11 22:19 ` Max Reitz
2018-05-14 19:27 ` John Snow
2018-05-09 16:26 ` [Qemu-devel] [PATCH 05/42] blockjob: Introduce block_job_ratelimit_get_delay() Kevin Wolf
2018-05-11 22:25 ` Max Reitz
2018-05-14 19:36 ` John Snow
2018-05-09 16:26 ` [Qemu-devel] [PATCH 06/42] blockjob: Add block_job_driver() Kevin Wolf
2018-05-11 22:28 ` Max Reitz
2018-05-14 19:43 ` John Snow
2018-05-09 16:26 ` [Qemu-devel] [PATCH 07/42] blockjob: Remove block_job_pause/resume_all() Kevin Wolf
2018-05-09 17:30 ` Eric Blake
2018-05-11 22:30 ` Max Reitz
2018-05-14 19:44 ` John Snow
2018-05-14 19:45 ` Eric Blake
2018-05-09 16:26 ` [Qemu-devel] [PATCH 08/42] job: Create Job, JobDriver and job_create() Kevin Wolf
2018-05-11 22:46 ` Max Reitz
2018-05-14 12:58 ` Kevin Wolf
2018-05-14 19:57 ` John Snow
2018-05-09 16:26 ` [Qemu-devel] [PATCH 09/42] job: Rename BlockJobType into JobType Kevin Wolf
2018-05-11 22:48 ` Max Reitz
2018-05-14 20:05 ` John Snow
2018-05-09 16:26 ` [Qemu-devel] [PATCH 10/42] job: Add JobDriver.job_type Kevin Wolf
2018-05-11 22:53 ` Max Reitz
2018-05-14 11:31 ` Kevin Wolf
2018-05-14 20:12 ` John Snow
2018-05-09 16:26 ` [Qemu-devel] [PATCH 11/42] job: Add job_delete() Kevin Wolf
2018-05-11 22:56 ` Max Reitz
2018-05-14 20:15 ` John Snow
2018-05-16 17:54 ` Eric Blake
2018-05-09 16:26 ` [Qemu-devel] [PATCH 12/42] job: Maintain a list of all jobs Kevin Wolf
2018-05-14 13:59 ` Max Reitz
2018-05-14 20:42 ` John Snow
2018-05-16 18:03 ` Eric Blake
2018-05-09 16:26 ` [Qemu-devel] [PATCH 13/42] job: Move state transitions to Job Kevin Wolf
2018-05-14 14:20 ` Max Reitz
2018-05-14 20:58 ` John Snow
2018-05-16 18:11 ` Eric Blake
2018-05-09 16:26 ` [Qemu-devel] [PATCH 14/42] job: Add reference counting Kevin Wolf
2018-05-14 14:29 ` Max Reitz
2018-05-14 21:34 ` John Snow
2018-05-15 9:06 ` Kevin Wolf
2018-05-16 18:17 ` Eric Blake
2018-05-16 20:56 ` Kevin Wolf
2018-05-16 21:25 ` Eric Blake
2018-05-09 16:26 ` [Qemu-devel] [PATCH 15/42] job: Move cancelled to Job Kevin Wolf
2018-05-14 14:39 ` Max Reitz
2018-05-14 21:53 ` John Snow
2018-05-09 16:26 ` [Qemu-devel] [PATCH 16/42] job: Add Job.aio_context Kevin Wolf
2018-05-14 15:20 ` Max Reitz
2018-05-14 22:02 ` John Snow
2018-05-09 16:26 ` [Qemu-devel] [PATCH 17/42] job: Move defer_to_main_loop to Job Kevin Wolf
2018-05-14 15:52 ` Max Reitz
2018-05-15 12:17 ` Kevin Wolf
2018-05-16 10:51 ` Max Reitz
2018-05-16 18:32 ` Eric Blake
2018-05-14 22:33 ` John Snow
2018-05-15 12:22 ` Kevin Wolf
2018-05-16 18:37 ` Eric Blake
2018-05-09 16:26 ` [Qemu-devel] [PATCH 18/42] job: Move coroutine and related code " Kevin Wolf
2018-05-14 16:47 ` Max Reitz
2018-05-14 23:02 ` John Snow
2018-05-16 16:50 ` Kevin Wolf
2018-05-16 17:38 ` John Snow
2018-05-09 16:26 ` [Qemu-devel] [PATCH 19/42] job: Add job_sleep_ns() Kevin Wolf
2018-05-14 16:57 ` Max Reitz
2018-05-14 23:10 ` John Snow
2018-05-09 16:26 ` [Qemu-devel] [PATCH 20/42] job: Move pause/resume functions to Job Kevin Wolf
2018-05-14 17:13 ` Max Reitz
2018-05-14 23:23 ` John Snow
2018-05-09 16:26 ` [Qemu-devel] [PATCH 21/42] job: Replace BlockJob.completed with job_is_completed() Kevin Wolf
2018-05-14 17:33 ` Max Reitz
2018-05-14 23:43 ` John Snow
2018-05-09 16:26 ` [Qemu-devel] [PATCH 22/42] job: Move BlockJobCreateFlags to Job Kevin Wolf
2018-05-14 17:50 ` Max Reitz
2018-05-16 19:13 ` Eric Blake
2018-05-16 20:53 ` Kevin Wolf
2018-05-09 16:26 ` [Qemu-devel] [PATCH 23/42] blockjob: Split block_job_event_pending() Kevin Wolf
2018-05-14 17:56 ` Max Reitz
2018-05-16 19:15 ` Eric Blake
2018-05-09 16:26 ` [Qemu-devel] [PATCH 24/42] job: Add job_event_*() Kevin Wolf
2018-05-14 18:09 ` Max Reitz
2018-05-09 16:26 ` [Qemu-devel] [PATCH 25/42] job: Move single job finalisation to Job Kevin Wolf
2018-05-14 18:46 ` Max Reitz
2018-05-09 16:26 ` [Qemu-devel] [PATCH 26/42] job: Convert block_job_cancel_async() " Kevin Wolf
2018-05-14 19:00 ` Max Reitz
2018-05-09 16:26 ` [Qemu-devel] [PATCH 27/42] job: Add job_drain() Kevin Wolf
2018-05-14 19:26 ` Max Reitz
2018-05-09 16:26 ` [Qemu-devel] [PATCH 28/42] job: Move .complete callback to Job Kevin Wolf
2018-05-14 19:37 ` Max Reitz
2018-05-09 16:26 ` [Qemu-devel] [PATCH 29/42] job: Move job_finish_sync() " Kevin Wolf
2018-05-14 19:49 ` Max Reitz
2018-05-09 16:26 ` [Qemu-devel] [PATCH 30/42] job: Switch transactions to JobTxn Kevin Wolf
2018-05-14 20:00 ` Max Reitz
2018-05-09 16:26 ` [Qemu-devel] [PATCH 31/42] job: Move transactions to Job Kevin Wolf
2018-05-14 20:28 ` Max Reitz
2018-05-14 21:17 ` Max Reitz
2018-05-09 16:26 ` [Qemu-devel] [PATCH 32/42] job: Move completion and cancellation " Kevin Wolf
2018-05-14 20:53 ` Max Reitz
2018-05-15 12:59 ` Kevin Wolf
2018-05-16 10:52 ` Max Reitz
2018-05-09 16:26 ` [Qemu-devel] [PATCH 33/42] job: Add job_yield() Kevin Wolf
2018-05-14 20:59 ` Max Reitz
2018-05-09 16:26 ` [Qemu-devel] [PATCH 34/42] job: Add job_dismiss() Kevin Wolf
2018-05-14 21:06 ` Max Reitz
2018-05-14 22:26 ` Max Reitz
2018-05-09 16:26 ` [Qemu-devel] [PATCH 35/42] job: Add job_is_ready() Kevin Wolf
2018-05-14 21:11 ` Max Reitz
2018-05-09 16:26 ` [Qemu-devel] [PATCH 36/42] job: Add job_transition_to_ready() Kevin Wolf
2018-05-14 21:22 ` Max Reitz
2018-05-09 16:26 ` [Qemu-devel] [PATCH 37/42] job: Move progress fields to Job Kevin Wolf
2018-05-14 21:33 ` Max Reitz
2018-05-16 21:23 ` Eric Blake
2018-05-09 16:26 ` [Qemu-devel] [PATCH 38/42] job: Add JOB_STATUS_CHANGE QMP event Kevin Wolf
2018-05-14 22:11 ` Max Reitz
2018-05-16 16:15 ` Kevin Wolf
2018-05-16 19:26 ` Eric Blake
2018-05-16 20:46 ` Kevin Wolf
2018-05-16 20:53 ` Eric Blake
2018-05-09 16:26 ` [Qemu-devel] [PATCH 39/42] job: Add lifecycle QMP commands Kevin Wolf
2018-05-14 22:31 ` Max Reitz
2018-05-15 14:08 ` Kevin Wolf [this message]
2018-05-16 10:54 ` Max Reitz
2018-05-09 16:26 ` [Qemu-devel] [PATCH 40/42] job: Add query-jobs QMP command Kevin Wolf
2018-05-14 23:09 ` Max Reitz
2018-05-16 11:21 ` Kevin Wolf
2018-05-16 11:27 ` Max Reitz
2018-05-09 16:26 ` [Qemu-devel] [PATCH 41/42] iotests: Move qmp_to_opts() to VM Kevin Wolf
2018-05-14 23:11 ` Max Reitz
2018-05-09 16:26 ` [Qemu-devel] [PATCH 42/42] qemu-iotests: Test job-* with block jobs Kevin Wolf
2018-05-14 23:44 ` Max Reitz
2018-05-17 13:50 ` Kevin Wolf
2018-05-28 13:07 ` Max Reitz
2018-05-15 14:15 ` [Qemu-devel] [PATCH 00/42] Generic background jobs Kevin Wolf
2018-05-15 14:43 ` Eric Blake
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=20180515140850.GE4442@localhost.localdomain \
--to=kwolf@redhat.com \
--cc=armbru@redhat.com \
--cc=eblake@redhat.com \
--cc=jcody@redhat.com \
--cc=jsnow@redhat.com \
--cc=mreitz@redhat.com \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
/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).