]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
qemu: monitor: Add support for 'job-cancel' command
authorPeter Krempa <pkrempa@redhat.com>
Thu, 16 Aug 2018 09:48:41 +0000 (11:48 +0200)
committerPeter Krempa <pkrempa@redhat.com>
Thu, 18 Jul 2019 15:59:33 +0000 (17:59 +0200)
This belongs to the new job management API which can manage also
non-block based jobs. Since we'll need to be able to attempt to cancel
jobs which potentially were not started (during reconnect) the 'quiet'
flag allows to suppress errors reported.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
src/qemu/qemu_monitor.c
src/qemu/qemu_monitor.h
src/qemu/qemu_monitor_json.c
src/qemu/qemu_monitor_json.h
tests/qemumonitorjsontest.c

index d9196434ba0711101b8bb6de9d7ad9827e8c1753..2b9a5426b8c931b1cacb1e7fc89b7d09a25149b2 100644 (file)
@@ -3475,6 +3475,19 @@ qemuMonitorJobDismiss(qemuMonitorPtr mon,
 }
 
 
+int
+qemuMonitorJobCancel(qemuMonitorPtr mon,
+                     const char *jobname,
+                     bool quiet)
+{
+    VIR_DEBUG("jobname='%s' quiet=%d", jobname, quiet);
+
+    QEMU_CHECK_MONITOR(mon);
+
+    return qemuMonitorJSONJobCancel(mon, jobname, quiet);
+}
+
+
 int
 qemuMonitorSetBlockIoThrottle(qemuMonitorPtr mon,
                               const char *drivealias,
index 56c68683f50e018c21e726a2cbfeaddfa0446f34..bed15aea0f064d24e72eaf6e7be96dd1e0f36dd7 100644 (file)
@@ -991,6 +991,11 @@ int qemuMonitorJobDismiss(qemuMonitorPtr mon,
                           const char *jobname)
     ATTRIBUTE_NONNULL(2);
 
+int qemuMonitorJobCancel(qemuMonitorPtr mon,
+                         const char *jobname,
+                         bool quiet)
+    ATTRIBUTE_NONNULL(2);
+
 int qemuMonitorOpenGraphics(qemuMonitorPtr mon,
                             const char *protocol,
                             int fd,
index 2ef2299a680614822a798cee4a738d531ca3dfa5..c318f1620b4c434bd04fb62d4213f1564b748e93 100644 (file)
@@ -5088,6 +5088,34 @@ qemuMonitorJSONJobDismiss(qemuMonitorPtr mon,
 }
 
 
+int
+qemuMonitorJSONJobCancel(qemuMonitorPtr mon,
+                         const char *jobname,
+                         bool quiet)
+{
+    VIR_AUTOPTR(virJSONValue) cmd = NULL;
+    VIR_AUTOPTR(virJSONValue) reply = NULL;
+
+    if (!(cmd = qemuMonitorJSONMakeCommand("job-cancel",
+                                           "s:id", jobname,
+                                           NULL)))
+        return -1;
+
+    if (qemuMonitorJSONCommand(mon, cmd, &reply) < 0)
+        return -1;
+
+    if (quiet) {
+        if (virJSONValueObjectHasKey(reply, "error") != 0)
+            return -1;
+    } else {
+        if (qemuMonitorJSONBlockJobError(cmd, reply, jobname) < 0)
+            return -1;
+    }
+
+    return 0;
+}
+
+
 int qemuMonitorJSONOpenGraphics(qemuMonitorPtr mon,
                                 const char *protocol,
                                 const char *fdname,
index 1719509ec8996392ae205574d30eba5ffc95224a..453c2e1af6fda31e9be46d815b6ebdf34996467c 100644 (file)
@@ -332,6 +332,11 @@ int qemuMonitorJSONJobDismiss(qemuMonitorPtr mon,
                               const char *jobname)
     ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
 
+int qemuMonitorJSONJobCancel(qemuMonitorPtr mon,
+                             const char *jobname,
+                             bool quiet)
+    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
+
 int qemuMonitorJSONSetLink(qemuMonitorPtr mon,
                            const char *name,
                            virDomainNetInterfaceLinkState state);
index e872f93490c77330238157f86fb999b5abdd6f34..88dc84a1f1457a929a7bc1ae6edc7ea8d7c10897 100644 (file)
@@ -1341,6 +1341,7 @@ GEN_TEST_FUNC(qemuMonitorJSONAddBitmap, "node", "bitmap", true)
 GEN_TEST_FUNC(qemuMonitorJSONEnableBitmap, "node", "bitmap")
 GEN_TEST_FUNC(qemuMonitorJSONDeleteBitmap, "node", "bitmap")
 GEN_TEST_FUNC(qemuMonitorJSONJobDismiss, "jobname")
+GEN_TEST_FUNC(qemuMonitorJSONJobCancel, "jobname", false)
 
 static int
 testQemuMonitorJSONqemuMonitorJSONNBDServerStart(const void *opaque)
@@ -3059,6 +3060,7 @@ mymain(void)
     DO_TEST_GEN(qemuMonitorJSONEnableBitmap);
     DO_TEST_GEN(qemuMonitorJSONDeleteBitmap);
     DO_TEST_GEN(qemuMonitorJSONJobDismiss);
+    DO_TEST_GEN(qemuMonitorJSONJobCancel);
     DO_TEST(qemuMonitorJSONGetBalloonInfo);
     DO_TEST(qemuMonitorJSONGetBlockInfo);
     DO_TEST(qemuMonitorJSONGetAllBlockStatsInfo);