This series refactors how libvirt stores block job data and handles block job events in general. This is done in preparation for -blockdev support where we'll need to add support for the 'blockdev-create' job which is not associated to any frontend 'disk' in some cases. This series introduces a new structure and table of blockjobs currently running and implements handlers for the new even "JOB_STATUS_CHANGE". RFC status excuses: - the series needs much more testing than I did - the last few patches are true RFC - I didn't port/refactor the rest of the blockjob finishing code that I have for the individual job types after the big refactor so there aren't any examples for the -blockdev case yet. I'll post the link to a repo containing the patches some time later. Peter Krempa (51): qemu: blockjob: Extract emitting of libvirt events qemu: blockjob: Emit VIR_DOMAIN_EVENT_ID_BLOCK_JOB only for local disks qemu: processBlockJobEvent: Use qemuBlockJobUpdate to process block job events qemu: blockjob: Unexport qemuBlockJobEventProcess qemu: blockjob: Rename public APIs qemu: blockjob: Remove header dependency on qemu_domain.h qemu: Consolidate disk blockjob variables into a structure qemu: process: Consolidate error paths in qemuProcessHandleBlockJob qemu: blockjob: Rename qemuBlockJobEventProcess to qemuBlockJobEventProcessLegacy qemu: blockjob: Split out handling of comlpleted jobs qemu: migration: Properly note that non-shared-storage migration uses a blockjob qemu: process: refresh block jobs on reconnect qemu: driver: Remove block job status reprobing from qemuDomainBlockPivot qemu: migration: Simplify cancellation of migration blockjobs qemu: blockjob: Turn struct qemuBlockJobData into a virObject qemu: blockjob: Clarify that job 'status' field contains new state qemu: migration: Separate startup of disk mirror from migration logic qemu: blockjob: Add functions for block job state control qemu: blockjob: Drop unnecessary calls to qemuBlockJobSyncEndDisk qemu: blockjob: Add reference to disk into struct qemuBlockJobData qemu: blockjob: Record job type when starting the job qemu: blockjob: Pass in job to qemuBlockJobEventProcessLegacy qemu: blockjob: Convert qemuBlockJobSyncBeginDisk to work with the job qemu: blockjob: Track current state of blockjob qemu: migration: Extract reporting of disk migration error qemu: blockjob: Remove error propagation from qemuBlockJobUpdateDisk qemu: blockjob: Consume new block job state in the processing function qemu: blockjob: Pass job into qemuBlockJobUpdateDisk and rename it qemu: Allocate diskPriv->blockjob only when there's a blockjob qemu: migration: Don't call qemuBlockJobSyncEndDisk when block job has terminated qemu: blockjob: Convert qemuBlockJobSyncEndDisk to take job instead of disk qemu: blockjob: Add job name into the data qemu: domain: Add global table of blockjobs qemu: blockjob: Register new and running blockjobs in the global table qemu: blockjob: Add string convertors for blockjob type and state enums qemu: domain: Store blockjob data in the status XML tests: qemustatusxml2xml: Add test case for block job tracking qemu: monitor: Add new fields for 'block-stream' command qemu: monitor: Add new fields for 'block-commit' command qemu: monitor: Add new fields for 'blockdev-mirror' command qemu: monitor: Add support for 'job-dismiss' command qemu: monitor: Add support for 'job-cancel' command qemu: monitor: Add support for 'job-complete' command qemu: monitor: Add infrastructure for 'query-jobs' qemu: blockjob: Add 'concluded' state for a block job qemu: monitor: Implement support for 'JOB_STATUS_CHANGE' event qemu: process: Don't trigger BLOCK_JOB* events with -blockdev qemu: blockjob: Add helper to convert monitor job status to internal state qemu: Add handler for job state change event qemu: blockjob: Add modern block job event handler qemu: process: Refresh -blockdev based blockjobs on reconnect to qemu src/qemu/qemu_blockjob.c | 687 ++++++++++++++---- src/qemu/qemu_blockjob.h | 111 ++- src/qemu/qemu_domain.c | 123 +++- src/qemu/qemu_domain.h | 13 +- src/qemu/qemu_driver.c | 114 ++- src/qemu/qemu_migration.c | 233 +++--- src/qemu/qemu_monitor.c | 120 ++- src/qemu/qemu_monitor.h | 82 ++- src/qemu/qemu_monitor_json.c | 239 +++++- src/qemu/qemu_monitor_json.h | 28 +- src/qemu/qemu_process.c | 179 ++++- .../query-jobs-create.json | 20 + .../query-jobs-create.result | 11 + .../qemumonitorjsondata/query-jobs-empty.json | 1 + .../query-jobs-empty.result | 0 tests/qemumonitorjsontest.c | 101 ++- .../blockjob-blockdev-in.xml | 364 ++++++++++ .../blockjob-blockdev-out.xml | 1 + tests/qemuxml2xmltest.c | 2 + 19 files changed, 2097 insertions(+), 332 deletions(-) create mode 100644 tests/qemumonitorjsondata/query-jobs-create.json create mode 100644 tests/qemumonitorjsondata/query-jobs-create.result create mode 100644 tests/qemumonitorjsondata/query-jobs-empty.json create mode 100644 tests/qemumonitorjsondata/query-jobs-empty.result create mode 100644 tests/qemustatusxml2xmldata/blockjob-blockdev-in.xml create mode 120000 tests/qemustatusxml2xmldata/blockjob-blockdev-out.xml -- 2.19.2 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list