Generic background jobs
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
- v2 Latest40 patches 44 repliesApplied
- 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 files | Size | Replies | Applied |
|---|---|---|---|---|
| 1/40 | blockjob: Update block-job-pause/resume documentationqapi/ | +2 | 2 replies | |
| 2/40 | blockjob: Improve BlockJobInfo.offset/len documentationqapi/ | +6 | 2 replies | |
| 3/40 | job: Create Job, JobDriver and job_create()MAINTAINERS Makefile.objs block/ +11 more | +169 | 0 replies | |
| 4/40 | job: Rename BlockJobType into JobTypeblock/ block/ block/ +4 more | +16 | 0 replies | |
| 5/40 | job: Add JobDriver.job_typeblock/ block/ block/ +5 more | +33 | 0 replies | |
| 6/40 | job: Add job_delete()blockjob.c include/ job.c | +10 | 0 replies | |
| 7/40 | job: Maintain a list of all jobsblockjob.c include/ include/ +1 more | +74 | 0 replies | |
| 8/40 | job: Move state transitions to Jobblock/ blockjob.c include/ +5 more | +123 | 1 reply | |
| 9/40 | job: Add reference countingblock/ block/ block/ +10 more | +76 | 0 replies | |
| 10/40 | job: Move cancelled to Jobblock/ block/ block/ +8 more | +50 | 0 replies | |
| 11/40 | job: Add Job.aio_contextblockjob.c include/ job.c | +13 | 0 replies | |
| 12/40 | job: Move defer_to_main_loop to Jobblock/ block/ block/ +9 more | +97 | 1 reply | |
| 13/40 | job: Move coroutine and related code to Jobblock/ block/ block/ +11 more | +305 | 1 reply | |
| 14/40 | job: Add job_sleep_ns()block/ block/ block/ +8 more | +61 | 0 replies | |
| 15/40 | job: Move pause/resume functions to Jobblock/ block/ block/ +10 more | +133 | 0 replies | |
| 16/40 | job: Replace BlockJob.completed with job_is_completed()blockjob.c include/ include/ +2 more | +34 | 0 replies | |
| 17/40 | job: Move BlockJobCreateFlags to Jobblock/ block/ block/ +10 more | +53 | 3 replies | |
| 18/40 | blockjob: Split block_job_event_pending()blockjob.c | +18 | 0 replies | |
| 19/40 | job: Add job_event_*()blockjob.c include/ include/ +1 more | +73 | 0 replies | |
| 20/40 | job: Move single job finalisation to Jobblock/ block/ block/ +7 more | +194 | 1 reply | |
| 21/40 | job: Convert block_job_cancel_async() to Jobblock/ blockjob.c include/ +1 more | +21 | 10 replies | |
| 22/40 | job: Add job_drain()block/ block/ block/ +8 more | +55 | 0 replies | |
| 23/40 | job: Move .complete callback to Jobblock/ blockdev.c blockjob.c +6 more | +43 | 0 replies | |
| 24/40 | job: Move job_finish_sync() to Jobblock/ blockjob.c include/ +1 more | +49 | 0 replies | |
| 25/40 | job: Switch transactions to JobTxnblock/ blockdev.c blockjob.c +5 more | +54 | 0 replies | |
| 26/40 | job: Move transactions to Jobblockdev.c blockjob.c include/ +5 more | +303 | 0 replies | |
| 27/40 | job: Move completion and cancellation to Jobblock.c block/ block/ +15 more | +171 | 0 replies | |
| 28/40 | block: Cancel job in bdrv_close_all() callersblock.c qemu-nbd.c vl.c | +9 | 0 replies | |
| 29/40 | job: Add job_yield()block/ block/ blockjob.c +4 more | +28 | 0 replies | |
| 30/40 | job: Add job_dismiss()blockdev.c blockjob.c include/ +3 more | +28 | 0 replies | |
| 31/40 | job: Add job_is_ready()blockjob.c include/ include/ +3 more | +28 | 4 replies | |
| 32/40 | job: Add job_transition_to_ready()block/ blockjob.c include/ +5 more | +45 | 0 replies | |
| 33/40 | job: Move progress fields to Jobblock/ block/ block/ +6 more | +62 | 0 replies | |
| 34/40 | job: Introduce qapi/job.jsonMakefile Makefile.objs qapi/ +2 more | +109 | 2 replies | |
| 35/40 | job: Add JOB_STATUS_CHANGE QMP eventjob.c qapi/ tests/ +20 more | +449 | 6 replies | |
| 36/40 | job: Add lifecycle QMP commandsMAINTAINERS Makefile.objs job-qmp.c +2 more | +244 | 3 replies | |
| 37/40 | job: Add query-jobs QMP commandinclude/ job-qmp.c job.c +1 more | +103 | 3 replies | |
| 38/40 | blockjob: Remove BlockJob.driverblockjob.c include/ | +10 | 0 replies | |
| 39/40 | iotests: Move qmp_to_opts() to VMtests/ tests/ tests/ | +27 | 0 replies | |
| 40/40 | qemu-iotests: Test job-* with block jobstests/ tests/ tests/ | +537 | 0 replies |
Reviews trailers per patch
34 of 40 patches have a Reviewed-by or Acked-by.
| Patch | Eric Blake | Max Reitz | John Snow |
|---|---|---|---|
| 1/40 | R-b | R-b | |
| 2/40 | R-b | R-b | |
| 3/40 | R-b | R-b | |
| 4/40 | R-b | R-b | R-b |
| 5/40 | R-b | R-b | |
| 6/40 | R-b | R-b | |
| 7/40 | R-b | R-b | |
| 8/40 | R-b | R-b | R-b |
| 9/40 | R-b | R-b | |
| 10/40 | R-b | R-b | |
| 11/40 | R-b | R-b | |
| 12/40 | R-b | R-b | |
| 13/40 | R-b | ||
| 14/40 | R-b | R-b | |
| 15/40 | R-b | R-b | |
| 16/40 | R-b | R-b | |
| 17/40 | R-b | ||
| 18/40 | R-b | ||
| 19/40 | R-b | ||
| 20/40 | R-b | ||
| 21/40 | R-b | ||
| 22/40 | R-b | ||
| 23/40 | R-b | ||
| 24/40 | R-b | ||
| 25/40 | R-b | ||
| 26/40 | R-b | ||
| 27/40 | |||
| 28/40 | |||
| 29/40 | R-b | ||
| 30/40 | R-b | ||
| 31/40 | R-b | ||
| 32/40 | R-b | ||
| 33/40 | R-b | ||
| 34/40 | R-b | ||
| 35/40 | R-b | ||
| 36/40 | |||
| 37/40 | |||
| 38/40 | |||
| 39/40 | R-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.
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