qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
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 --]

  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).