mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-24 22:55:23 +00:00
qemu: monitor: Implement support for 'JOB_STATUS_CHANGE' event
This new event is a superset of the BLOCK_JOB* events and also covers jobs which don't bind to a VM disk. In this patch the monitor part is implemented. Signed-off-by: Peter Krempa <pkrempa@redhat.com> Reviewed-by: Ján Tomko <jtomko@redhat.com>
This commit is contained in:
parent
ed56851f1b
commit
587c0ed12a
@ -1503,6 +1503,19 @@ qemuMonitorEmitBlockJob(qemuMonitorPtr mon,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int
|
||||||
|
qemuMonitorEmitJobStatusChange(qemuMonitorPtr mon,
|
||||||
|
const char *jobname,
|
||||||
|
qemuMonitorJobStatus status)
|
||||||
|
{
|
||||||
|
int ret = -1;
|
||||||
|
VIR_DEBUG("mon=%p", mon);
|
||||||
|
|
||||||
|
QEMU_MONITOR_CALLBACK(mon, ret, jobStatusChange, mon->vm, jobname, status);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
int
|
int
|
||||||
qemuMonitorEmitBalloonChange(qemuMonitorPtr mon,
|
qemuMonitorEmitBalloonChange(qemuMonitorPtr mon,
|
||||||
unsigned long long actual)
|
unsigned long long actual)
|
||||||
|
@ -230,6 +230,11 @@ typedef int (*qemuMonitorDomainBlockJobCallback)(qemuMonitorPtr mon,
|
|||||||
int status,
|
int status,
|
||||||
const char *error,
|
const char *error,
|
||||||
void *opaque);
|
void *opaque);
|
||||||
|
typedef int (*qemuMonitorDomainJobStatusChangeCallback)(qemuMonitorPtr mon,
|
||||||
|
virDomainObjPtr vm,
|
||||||
|
const char *jobname,
|
||||||
|
int status,
|
||||||
|
void *opaque);
|
||||||
typedef int (*qemuMonitorDomainTrayChangeCallback)(qemuMonitorPtr mon,
|
typedef int (*qemuMonitorDomainTrayChangeCallback)(qemuMonitorPtr mon,
|
||||||
virDomainObjPtr vm,
|
virDomainObjPtr vm,
|
||||||
const char *devAlias,
|
const char *devAlias,
|
||||||
@ -357,6 +362,7 @@ struct _qemuMonitorCallbacks {
|
|||||||
qemuMonitorDomainIOErrorCallback domainIOError;
|
qemuMonitorDomainIOErrorCallback domainIOError;
|
||||||
qemuMonitorDomainGraphicsCallback domainGraphics;
|
qemuMonitorDomainGraphicsCallback domainGraphics;
|
||||||
qemuMonitorDomainBlockJobCallback domainBlockJob;
|
qemuMonitorDomainBlockJobCallback domainBlockJob;
|
||||||
|
qemuMonitorDomainJobStatusChangeCallback jobStatusChange;
|
||||||
qemuMonitorDomainTrayChangeCallback domainTrayChange;
|
qemuMonitorDomainTrayChangeCallback domainTrayChange;
|
||||||
qemuMonitorDomainPMWakeupCallback domainPMWakeup;
|
qemuMonitorDomainPMWakeupCallback domainPMWakeup;
|
||||||
qemuMonitorDomainPMSuspendCallback domainPMSuspend;
|
qemuMonitorDomainPMSuspendCallback domainPMSuspend;
|
||||||
@ -467,6 +473,9 @@ int qemuMonitorEmitBlockJob(qemuMonitorPtr mon,
|
|||||||
int type,
|
int type,
|
||||||
int status,
|
int status,
|
||||||
const char *error);
|
const char *error);
|
||||||
|
int qemuMonitorEmitJobStatusChange(qemuMonitorPtr mon,
|
||||||
|
const char *jobname,
|
||||||
|
qemuMonitorJobStatus status);
|
||||||
int qemuMonitorEmitBalloonChange(qemuMonitorPtr mon,
|
int qemuMonitorEmitBalloonChange(qemuMonitorPtr mon,
|
||||||
unsigned long long actual);
|
unsigned long long actual);
|
||||||
int qemuMonitorEmitPMSuspendDisk(qemuMonitorPtr mon);
|
int qemuMonitorEmitPMSuspendDisk(qemuMonitorPtr mon);
|
||||||
|
@ -100,6 +100,7 @@ static void qemuMonitorJSONHandlePMSuspend(qemuMonitorPtr mon, virJSONValuePtr d
|
|||||||
static void qemuMonitorJSONHandleBlockJobCompleted(qemuMonitorPtr mon, virJSONValuePtr data);
|
static void qemuMonitorJSONHandleBlockJobCompleted(qemuMonitorPtr mon, virJSONValuePtr data);
|
||||||
static void qemuMonitorJSONHandleBlockJobCanceled(qemuMonitorPtr mon, virJSONValuePtr data);
|
static void qemuMonitorJSONHandleBlockJobCanceled(qemuMonitorPtr mon, virJSONValuePtr data);
|
||||||
static void qemuMonitorJSONHandleBlockJobReady(qemuMonitorPtr mon, virJSONValuePtr data);
|
static void qemuMonitorJSONHandleBlockJobReady(qemuMonitorPtr mon, virJSONValuePtr data);
|
||||||
|
static void qemuMonitorJSONHandleJobStatusChange(qemuMonitorPtr mon, virJSONValuePtr data);
|
||||||
static void qemuMonitorJSONHandleBalloonChange(qemuMonitorPtr mon, virJSONValuePtr data);
|
static void qemuMonitorJSONHandleBalloonChange(qemuMonitorPtr mon, virJSONValuePtr data);
|
||||||
static void qemuMonitorJSONHandlePMSuspendDisk(qemuMonitorPtr mon, virJSONValuePtr data);
|
static void qemuMonitorJSONHandlePMSuspendDisk(qemuMonitorPtr mon, virJSONValuePtr data);
|
||||||
static void qemuMonitorJSONHandleGuestPanic(qemuMonitorPtr mon, virJSONValuePtr data);
|
static void qemuMonitorJSONHandleGuestPanic(qemuMonitorPtr mon, virJSONValuePtr data);
|
||||||
@ -132,6 +133,7 @@ static qemuEventHandler eventHandlers[] = {
|
|||||||
{ "DEVICE_TRAY_MOVED", qemuMonitorJSONHandleTrayChange, },
|
{ "DEVICE_TRAY_MOVED", qemuMonitorJSONHandleTrayChange, },
|
||||||
{ "DUMP_COMPLETED", qemuMonitorJSONHandleDumpCompleted, },
|
{ "DUMP_COMPLETED", qemuMonitorJSONHandleDumpCompleted, },
|
||||||
{ "GUEST_PANICKED", qemuMonitorJSONHandleGuestPanic, },
|
{ "GUEST_PANICKED", qemuMonitorJSONHandleGuestPanic, },
|
||||||
|
{ "JOB_STATUS_CHANGE", qemuMonitorJSONHandleJobStatusChange, },
|
||||||
{ "MIGRATION", qemuMonitorJSONHandleMigrationStatus, },
|
{ "MIGRATION", qemuMonitorJSONHandleMigrationStatus, },
|
||||||
{ "MIGRATION_PASS", qemuMonitorJSONHandleMigrationPass, },
|
{ "MIGRATION_PASS", qemuMonitorJSONHandleMigrationPass, },
|
||||||
{ "NIC_RX_FILTER_CHANGED", qemuMonitorJSONHandleNicRxFilterChanged, },
|
{ "NIC_RX_FILTER_CHANGED", qemuMonitorJSONHandleNicRxFilterChanged, },
|
||||||
@ -1172,6 +1174,30 @@ qemuMonitorJSONHandleBlockJobImpl(qemuMonitorPtr mon,
|
|||||||
qemuMonitorEmitBlockJob(mon, device, type, event, error);
|
qemuMonitorEmitBlockJob(mon, device, type, event, error);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void
|
||||||
|
qemuMonitorJSONHandleJobStatusChange(qemuMonitorPtr mon,
|
||||||
|
virJSONValuePtr data)
|
||||||
|
{
|
||||||
|
const char *jobname = virJSONValueObjectGetString(data, "id");
|
||||||
|
const char *statusstr = virJSONValueObjectGetString(data, "status");
|
||||||
|
int status;
|
||||||
|
|
||||||
|
if (!jobname) {
|
||||||
|
VIR_WARN("missing job name in JOB_STATUS_CHANGE event");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((status = qemuMonitorJobStatusTypeFromString(statusstr)) < 0) {
|
||||||
|
VIR_WARN("unknown job status '%s' for job '%s' in JOB_STATUS_CHANGE event",
|
||||||
|
statusstr, jobname);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
qemuMonitorEmitJobStatusChange(mon, jobname, status);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
qemuMonitorJSONHandleTrayChange(qemuMonitorPtr mon,
|
qemuMonitorJSONHandleTrayChange(qemuMonitorPtr mon,
|
||||||
virJSONValuePtr data)
|
virJSONValuePtr data)
|
||||||
|
Loading…
Reference in New Issue
Block a user