qemu_monitor: introduce qemuMonitorJobFinalize

Upcoming snapshot deletion code will require that multiple commit jobs
are finished in sync. To allow aborting then if one fails we will need
to use manual finalization of the jobs.

This commit implements the monitor code for `job-finalize`.

Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
This commit is contained in:
Pavel Hrdina 2022-06-21 15:22:15 +02:00
parent 9a0ce66503
commit 07b54c3d5a
5 changed files with 46 additions and 0 deletions

View File

@ -2932,6 +2932,18 @@ qemuMonitorJobDismiss(qemuMonitor *mon,
}
int
qemuMonitorJobFinalize(qemuMonitor *mon,
const char *jobname)
{
VIR_DEBUG("jobname=%s", jobname);
QEMU_CHECK_MONITOR(mon);
return qemuMonitorJSONJobFinalize(mon, jobname);
}
int
qemuMonitorJobComplete(qemuMonitor *mon,
const char *jobname)

View File

@ -1029,6 +1029,11 @@ int qemuMonitorJobDismiss(qemuMonitor *mon,
const char *jobname)
ATTRIBUTE_NONNULL(2);
int
qemuMonitorJobFinalize(qemuMonitor *mon,
const char *jobname)
ATTRIBUTE_NONNULL(2);
int qemuMonitorJobComplete(qemuMonitor *mon,
const char *jobname)
ATTRIBUTE_NONNULL(2);

View File

@ -4405,6 +4405,28 @@ qemuMonitorJSONJobDismiss(qemuMonitor *mon,
}
int
qemuMonitorJSONJobFinalize(qemuMonitor *mon,
const char *jobname)
{
g_autoptr(virJSONValue) cmd = NULL;
g_autoptr(virJSONValue) reply = NULL;
if (!(cmd = qemuMonitorJSONMakeCommand("job-finalize",
"s:id", jobname,
NULL)))
return -1;
if (qemuMonitorJSONCommand(mon, cmd, &reply) < 0)
return -1;
if (qemuMonitorJSONBlockJobError(cmd, reply, jobname) < 0)
return -1;
return 0;
}
int
qemuMonitorJSONJobComplete(qemuMonitor *mon,
const char *jobname)

View File

@ -377,6 +377,11 @@ qemuMonitorJSONJobDismiss(qemuMonitor *mon,
const char *jobname)
ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
int
qemuMonitorJSONJobFinalize(qemuMonitor *mon,
const char *jobname)
ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
int
qemuMonitorJSONJobComplete(qemuMonitor *mon,
const char *jobname)

View File

@ -1223,6 +1223,7 @@ GEN_TEST_FUNC(qemuMonitorJSONBlockdevMediumInsert, "foodev", "newnode")
GEN_TEST_FUNC(qemuMonitorJSONBitmapRemove, "foodev", "newnode")
GEN_TEST_FUNC(qemuMonitorJSONJobDismiss, "jobname")
GEN_TEST_FUNC(qemuMonitorJSONJobComplete, "jobname")
GEN_TEST_FUNC(qemuMonitorJSONJobFinalize, "jobname")
GEN_TEST_FUNC(qemuMonitorJSONBlockJobCancel, "jobname", true)
GEN_TEST_FUNC(qemuMonitorJSONSetAction,
QEMU_MONITOR_ACTION_SHUTDOWN_PAUSE,
@ -2921,6 +2922,7 @@ mymain(void)
DO_TEST_GEN(qemuMonitorJSONBitmapRemove);
DO_TEST_GEN(qemuMonitorJSONJobDismiss);
DO_TEST_GEN(qemuMonitorJSONJobComplete);
DO_TEST_GEN(qemuMonitorJSONJobFinalize);
DO_TEST_GEN(qemuMonitorJSONBlockJobCancel);
DO_TEST_GEN(qemuMonitorJSONSetAction);
DO_TEST_GEN(qemuMonitorJSONSetLaunchSecurityState);