From: Eric Blake <eblake@redhat.com>
To: Kevin Wolf <kwolf@redhat.com>, qemu-block@nongnu.org
Cc: mreitz@redhat.com, jsnow@redhat.com, armbru@redhat.com,
jcody@redhat.com, qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH 37/42] job: Move progress fields to Job
Date: Wed, 16 May 2018 16:23:18 -0500 [thread overview]
Message-ID: <a94c9b72-ea9b-11e1-30db-197cd5a4eb63@redhat.com> (raw)
In-Reply-To: <20180509162637.15575-38-kwolf@redhat.com>
On 05/09/2018 11:26 AM, Kevin Wolf wrote:
> BlockJob has fields .offset and .len, which are actually misnomers today
> because they are no longer tied to block device sizes, but just progress
> counters. As such they make a lot of sense in generic Jobs.
>
> This patch moves the fields to Job and renames them to .progress_current
> and .progress_total to describe their function better.
>
> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
> ---
> +++ b/include/qemu/job.h
> @@ -114,6 +114,16 @@ typedef struct Job {
> /** True if this job should automatically dismiss itself */
> bool auto_dismiss;
>
> + /**
> + * Current progress. The unit is arbitrary as long as the ratio between
> + * progress_current and progress_total represents the estimated percentage
> + * of work already done.
> + */
> + int64_t progress_current;
> +
> + /** Estimated progress_current value at the completion of the job */
> + int64_t progress_total;
> +
> /** ret code passed to block_job_completed. */
> int ret;
>
> @@ -304,6 +314,23 @@ void job_ref(Job *job);
> */
> void job_unref(Job *job);
>
> +/**
> + * @job: The job that has made progress
> + * @done: How much progress the job made
> + *
> + * Updates the progress counter of the job.
Which progress counter? It might be worth calling out that this
specifically updates the progress_current counter. Also, it might be
worth mentioning that the value is added to the current value of
progress_counter, rather than directly assigned.
> + */
> +void job_progress_update(Job *job, uint64_t done);
> +
> +/**
> + * @job: The job whose expected progress end value is set
> + * @remaining: Expected end value of the progress counter of the job
> + *
> + * Sets the expected end value of the progress counter of a job so that a
> + * completion percentage can be calculated when the progress is updated.
> + */
> +void job_progress_set_remaining(Job *job, uint64_t remaining);
The name 'remaining' sounds like this is a delta (that progress_total is
computed by summing the current progress_current + remaining) rather
than directly the new value of progress_total. Is that intended?
> +++ b/job.c
> @@ -364,6 +364,16 @@ void job_unref(Job *job)
> }
> }
>
> +void job_progress_update(Job *job, uint64_t done)
> +{
> + job->progress_current += done;
> +}
> +
> +void job_progress_set_remaining(Job *job, uint64_t remaining)
> +{
> + job->progress_total = job->progress_current + remaining;
Okay, so implementation-wise, both functions ARE taking a delta, rather
than directly assigning the internal field. The delta can only be
positive, but job->progress_total can still shrink over time as needed.
--
Eric Blake, Principal Software Engineer
Red Hat, Inc. +1-919-301-3266
Virtualization: qemu.org | libvirt.org
next prev parent reply other threads:[~2018-05-16 21:23 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 [this message]
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
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=a94c9b72-ea9b-11e1-30db-197cd5a4eb63@redhat.com \
--to=eblake@redhat.com \
--cc=armbru@redhat.com \
--cc=jcody@redhat.com \
--cc=jsnow@redhat.com \
--cc=kwolf@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).