Skip to content

Generic background jobs

Kevin Wolf qemu-devel 2 versions – Applied

Status from this message: Applied to the block branch.

Get series with b4
b4 am [email protected]

Versions newest first · linked by author and title

  1. v2 Latest40 patches 44 repliesApplied
  2. v142 patches 103 repliesSuperseded

Changes in v2 from the cover letter · 34 lines

- Already applied a small prefix of the series and rebased, so a few patches are missing compared to v1

- Fixed up forgotten renames of identifiers in comments (several patches all over the series) [Max]

- Patch 1 and 2 (new):
QAPI documentation improvements for existing block-job-* commands

- Patch 5 (was patch 10; 'job: Add JobDriver.job_type'):
Added 'const' to job_type()/job_type_str() parameter [Max]

- Patch 7 (was patch 12; 'job: Maintain a list of all jobs'):
block_job_next(NULL) doesn't rely on BlockJob.job being the first field any more [Eric]

- Patch 8 (was patch 13; 'job: Move state transitions to Job'):
Renamed JobVerb paramater from 'bv' to 'verb' [Eric]

- Patch 12 (was patch 17; 'job: Move defer_to_main_loop to Job'):
Added commit message [Max, Eric, John]
Removed stale comment [Max]

- Patch 26 (was patch 31; 'job: Move transactions to Job'):
job_event_pending() can keep returning void [Max]

- Patch 27 (was patch 32; 'job: Move completion and cancellation to Job') and patch 28 (new):
Added TODO in patch 27, and resolved it in patch 28 by moving the job_cancel_all() call out of bdrv_close_all() to the callers [Max]

- Patch 30 (was patch 34; 'job: Add job_dismiss()'):
Fixed uninitialised use of 'job' [Max]

- Patch 33 (was patch 37; 'job: Move progress fields to Job'):
Fixed documentation for job_progress_update/set_remaining() [Eric]

- Patch 34 (new):
Separate patch for adding qapi/job.json that just moves the three Job-related enums JobType, JobStatus and JobVerb (without any commands or events) [Max]

- Patch 35 (was patch 38; 'job: Add JOB_STATUS_CHANGE QMP event'):
Checking JOB_STATUS_CHANGE events more consistently in tests [Max] Updated qemu-iotests 094 reference output [Max]

- Patch 36 (was patch 39; 'job: Add lifecycle QMP commands'):
Removed 'force' option from 'job-cancel' and make force=true the only behaviour. This makes mirror behave the same as other jobs in the context of 'job-cancel'. [Max]
Fixed 'job-pause' documentation [Max]

- Patch 37 (was patch 40; 'job: Add query-jobs QMP command'):
QAPI documentation improvements [Max]

- Patch 38 (new):
Remove redundant BlockJob.driver [Max]

- Patch 40 (was patch 42; 'qemu-iotests: Test job-* with block jobs'):
Filtered out progress in 'query-jobs' immediately after the job is started because on tmpfs the first request will already have completed. [Max]

Patches in v2 Applied

#Subject and filesSizeRepliesApplied
1/40blockjob: Update block-job-pause/resume documentationqapi/block-core.json+2 -32 replies
2/40blockjob: Improve BlockJobInfo.offset/len documentationqapi/block-core.json+6 -32 replies
3/40job: Create Job, JobDriver and job_create()MAINTAINERS Makefile.objs block/backup.c +11 more+169 -440 replies
4/40job: Rename BlockJobType into JobTypeblock/backup.c block/commit.c block/mirror.c +4 more+16 -160 replies
5/40job: Add JobDriver.job_typeblock/backup.c block/commit.c block/mirror.c +5 more+33 -170 replies
6/40job: Add job_delete()blockjob.c include/qemu/job.h job.c+10 -20 replies
7/40job: Maintain a list of all jobsblockjob.c include/block/blockjob.h include/qemu/job.h +1 more+74 -250 replies
8/40job: Move state transitions to Jobblock/trace-events blockjob.c include/block/blockjob.h +5 more+123 -1121 reply
9/40job: Add reference countingblock/backup.c block/commit.c block/mirror.c +10 more+76 -580 replies
10/40job: Move cancelled to Jobblock/backup.c block/commit.c block/mirror.c +8 more+50 -520 replies
11/40job: Add Job.aio_contextblockjob.c include/qemu/job.h job.c+13 -30 replies
12/40job: Move defer_to_main_loop to Jobblock/backup.c block/commit.c block/mirror.c +9 more+97 -1101 reply
13/40job: Move coroutine and related code to Jobblock/backup.c block/commit.c block/mirror.c +11 more+305 -2991 reply
14/40job: Add job_sleep_ns()block/backup.c block/commit.c block/mirror.c +8 more+61 -500 replies
15/40job: Move pause/resume functions to Jobblock/backup.c block/commit.c block/mirror.c +10 more+133 -1020 replies
16/40job: Replace BlockJob.completed with job_is_completed()blockjob.c include/block/blockjob.h include/qemu/job.h +2 more+34 -140 replies
17/40job: Move BlockJobCreateFlags to Jobblock/commit.c block/mirror.c block/replication.c +10 more+53 -573 replies
18/40blockjob: Split block_job_event_pending()blockjob.c+18 -90 replies
19/40job: Add job_event_*()blockjob.c include/block/blockjob.h include/qemu/job.h +1 more+73 -140 replies
20/40job: Move single job finalisation to Jobblock/backup.c block/commit.c block/mirror.c +7 more+194 -1841 reply
21/40job: Convert block_job_cancel_async() to Jobblock/mirror.c blockjob.c include/block/blockjob.h +1 more+21 -2010 replies
22/40job: Add job_drain()block/backup.c block/commit.c block/mirror.c +8 more+55 -100 replies
23/40job: Move .complete callback to Jobblock/mirror.c blockdev.c blockjob.c +6 more+43 -480 replies
24/40job: Move job_finish_sync() to Jobblock/commit.c blockjob.c include/qemu/job.h +1 more+49 -490 replies
25/40job: Switch transactions to JobTxnblock/backup.c blockdev.c blockjob.c +5 more+54 -480 replies
26/40job: Move transactions to Jobblockdev.c blockjob.c include/block/blockjob.h +5 more+303 -3240 replies
27/40job: Move completion and cancellation to Jobblock.c block/backup.c block/commit.c +15 more+171 -2090 replies
28/40block: Cancel job in bdrv_close_all() callersblock.c qemu-nbd.c vl.c+9 -40 replies
29/40job: Add job_yield()block/backup.c block/mirror.c blockjob.c +4 more+28 -310 replies
30/40job: Add job_dismiss()blockdev.c blockjob.c include/block/blockjob.h +3 more+28 -300 replies
31/40job: Add job_is_ready()blockjob.c include/block/blockjob.h include/qemu/job.h +3 more+28 -94 replies
32/40job: Add job_transition_to_ready()block/mirror.c blockjob.c include/block/blockjob.h +5 more+45 -340 replies
33/40job: Move progress fields to Jobblock/backup.c block/commit.c block/mirror.c +6 more+62 -550 replies
34/40job: Introduce qapi/job.jsonMakefile Makefile.objs qapi/block-core.json +2 more+109 -892 replies
35/40job: Add JOB_STATUS_CHANGE QMP eventjob.c qapi/job.json tests/qemu-iotests/030 +20 more+449 -446 replies
36/40job: Add lifecycle QMP commandsMAINTAINERS Makefile.objs job-qmp.c +2 more+244 -03 replies
37/40job: Add query-jobs QMP commandinclude/qemu/job.h job-qmp.c job.c +1 more+103 -13 replies
38/40blockjob: Remove BlockJob.driverblockjob.c include/block/blockjob.h+10 -100 replies
39/40iotests: Move qmp_to_opts() to VMtests/qemu-iotests/041 tests/qemu-iotests/155 tests/qemu-iotests/iotests.py+27 -260 replies
40/40qemu-iotests: Test job-* with block jobstests/qemu-iotests/219 tests/qemu-iotests/219.out tests/qemu-iotests/group+537 -00 replies

Reviews trailers per patch

34 of 40 patches have a Reviewed-by or Acked-by.

PatchEric BlakeMax ReitzJohn Snow
1/40R-b R-b
2/40R-b R-b
3/40R-b R-b
4/40R-b R-b R-b
5/40R-b R-b
6/40R-b R-b
7/40R-b R-b
8/40R-b R-b R-b
9/40R-b R-b
10/40R-b R-b
11/40R-b R-b
12/40R-b R-b
13/40R-b
14/40R-b R-b
15/40R-b R-b
16/40R-b R-b
17/40R-b
18/40R-b
19/40R-b
20/40R-b
21/40R-b
22/40R-b
23/40R-b
24/40R-b
25/40R-b
26/40R-b
27/40
28/40
29/40R-b
30/40R-b
31/40R-b
32/40R-b
33/40R-b
34/40R-b
35/40R-b
36/40
37/40
38/40
39/40R-b
40/40

Trailers given in replies are filled; those carried in the patches from earlier versions are outlined with dashes. Scroll the table sideways for all 3 reviewers.

Read the v2 thread

Cover letter [Qemu-devel] [PATCH v2 00/40] Generic background jobs

Before we can make x-blockdev-create a background job, we need to generalise the job infrastructure so that it can be used without any associated block node.

This series extracts a Job object from the block job infrastructure, which should contain everything related to jobs that doesn't require the block layer to be involved.

Job creation with a centralised job-create command (if we even want this) as well as the actual conversion of x-blockdev-create to Job is left for another series.

v2:
- Already applied a small prefix of the series and rebased, so a few patches are missing compared to v1

- Fixed up forgotten renames of identifiers in comments (several patches all over the series) [Max]

- Patch 1 and 2 (new):
QAPI documentation improvements for existing block-job-* commands

- Patch 5 (was patch 10; 'job: Add JobDriver.job_type'):
Added 'const' to job_type()/job_type_str() parameter [Max]

- Patch 7 (was patch 12; 'job: Maintain a list of all jobs'):
block_job_next(NULL) doesn't rely on BlockJob.job being the first field any more [Eric]

- Patch 8 (was patch 13; 'job: Move state transitions to Job'):
Renamed JobVerb paramater from 'bv' to 'verb' [Eric]

- Patch 12 (was patch 17; 'job: Move defer_to_main_loop to Job'):
Added commit message [Max, Eric, John]
Removed stale comment [Max]

- Patch 26 (was patch 31; 'job: Move transactions to Job'):
job_event_pending() can keep returning void [Max]

- Patch 27 (was patch 32; 'job: Move completion and cancellation to Job') and patch 28 (new):
Added TODO in patch 27, and resolved it in patch 28 by moving the job_cancel_all() call out of bdrv_close_all() to the callers [Max]

- Patch 30 (was patch 34; 'job: Add job_dismiss()'):
Fixed uninitialised use of 'job' [Max]

- Patch 33 (was patch 37; 'job: Move progress fields to Job'):
Fixed documentation for job_progress_update/set_remaining() [Eric]

- Patch 34 (new):
Separate patch for adding qapi/job.json that just moves the three Job-related enums JobType, JobStatus and JobVerb (without any commands or events) [Max]

- Patch 35 (was patch 38; 'job: Add JOB_STATUS_CHANGE QMP event'):
Checking JOB_STATUS_CHANGE events more consistently in tests [Max] Updated qemu-iotests 094 reference output [Max]

- Patch 36 (was patch 39; 'job: Add lifecycle QMP commands'):
Removed 'force' option from 'job-cancel' and make force=true the only behaviour. This makes mirror behave the same as other jobs in the context of 'job-cancel'. [Max]
Fixed 'job-pause' documentation [Max]

- Patch 37 (was patch 40; 'job: Add query-jobs QMP command'):
QAPI documentation improvements [Max]

- Patch 38 (new):
Remove redundant BlockJob.driver [Max]

- Patch 40 (was patch 42; 'qemu-iotests: Test job-* with block jobs'):
Filtered out progress in 'query-jobs' immediately after the job is started because on tmpfs the first request will already have completed. [Max]

Kevin Wolf (40):
blockjob: Update block-job-pause/resume documentation
blockjob: Improve BlockJobInfo.offset/len documentation
job: Create Job, JobDriver and job_create()
job: Rename BlockJobType into JobType
job: Add JobDriver.job_type
job: Add job_delete()
job: Maintain a list of all jobs
job: Move state transitions to Job
job: Add reference counting
job: Move cancelled to Job
job: Add Job.aio_context
job: Move defer_to_main_loop to Job
job: Move coroutine and related code to Job
job: Add job_sleep_ns()
job: Move pause/resume functions to Job
job: Replace BlockJob.completed with job_is_completed()
job: Move BlockJobCreateFlags to Job
blockjob: Split block_job_event_pending()
job: Add job_event_*()
job: Move single job finalisation to Job
job: Convert block_job_cancel_async() to Job
job: Add job_drain()
job: Move .complete callback to Job
job: Move job_finish_sync() to Job
job: Switch transactions to JobTxn
job: Move transactions to Job
job: Move completion and cancellation to Job
block: Cancel job in bdrv_close_all() callers
job: Add job_yield()
job: Add job_dismiss()
job: Add job_is_ready()
job: Add job_transition_to_ready()
job: Move progress fields to Job
job: Introduce qapi/job.json
job: Add JOB_STATUS_CHANGE QMP event
job: Add lifecycle QMP commands
job: Add query-jobs QMP command
blockjob: Remove BlockJob.driver
iotests: Move qmp_to_opts() to VM
qemu-iotests: Test job-* with block jobs

 qapi/block-core.json          |  116 +----
 qapi/job.json                 |  252 ++++++++++
 qapi/qapi-schema.json         |    1 +
 include/block/block_int.h     |    2 +-
 include/block/blockjob.h      |  324 +-----------
 include/block/blockjob_int.h  |  176 +------
 include/qemu/job.h            |  562 +++++++++++++++++++++
 block.c                       |    2 +-
 block/backup.c                |   59 ++-
 block/commit.c                |   44 +-
 block/mirror.c                |  113 +++--
 block/replication.c           |   10 +-
 block/stream.c                |   39 +-
 blockdev.c                    |   68 +--
 blockjob.c                    | 1094 ++++++-----------------------------------
 job-qmp.c                     |  188 +++++++
 job.c                         | 1000 +++++++++++++++++++++++++++++++++++++
 qemu-img.c                    |   22 +-
 qemu-nbd.c                    |    8 +-
 tests/test-bdrv-drain.c       |   63 +--
 tests/test-blockjob-txn.c     |   74 +--
 tests/test-blockjob.c         |  141 +++---
 vl.c                          |    1 +
 MAINTAINERS                   |    3 +
 Makefile                      |    9 +
 Makefile.objs                 |    7 +-
 block/trace-events            |    5 -
 tests/qemu-iotests/030        |   17 +-
 tests/qemu-iotests/040        |    2 +
 tests/qemu-iotests/041        |   23 +-
 tests/qemu-iotests/094.out    |    7 +
 tests/qemu-iotests/095        |    2 +-
 tests/qemu-iotests/095.out    |    6 +
 tests/qemu-iotests/109        |    2 +-
 tests/qemu-iotests/109.out    |  178 ++++++-
 tests/qemu-iotests/124        |    8 +
 tests/qemu-iotests/127.out    |    7 +
 tests/qemu-iotests/141        |   13 +-
 tests/qemu-iotests/141.out    |   29 ++
 tests/qemu-iotests/144        |    2 +-
 tests/qemu-iotests/144.out    |    7 +
 tests/qemu-iotests/155        |    2 +-
 tests/qemu-iotests/156        |    2 +-
 tests/qemu-iotests/156.out    |    7 +
 tests/qemu-iotests/185        |   12 +-
 tests/qemu-iotests/185.out    |   10 +
 tests/qemu-iotests/191        |    4 +-
 tests/qemu-iotests/191.out    |  132 +++++
 tests/qemu-iotests/219        |  209 ++++++++
 tests/qemu-iotests/219.out    |  327 ++++++++++++
 tests/qemu-iotests/group      |    1 +
 tests/qemu-iotests/iotests.py |   50 +-
 trace-events                  |   14 +
 53 files changed, 3578 insertions(+), 1878 deletions(-)
 create mode 100644 qapi/job.json
 create mode 100644 include/qemu/job.h
 create mode 100644 job-qmp.c
 create mode 100644 job.c
 create mode 100755 tests/qemu-iotests/219
 create mode 100644 tests/qemu-iotests/219.out
Signature · 1 line
2.13.6