[libvirt] [RFC PATCH 09/12] virsh: Implement 'blockthreshold' command to call virDomainSetBlockThreshold

Peter Krempa pkrempa at redhat.com
Thu Feb 23 19:22:02 UTC 2017


Add a simple wrapper which will allow to set the threshold for
delivering the event.
---
 tools/virsh-domain.c | 63 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 tools/virsh.pod      |  8 +++++++
 2 files changed, 71 insertions(+)

diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c
index ee702f3c4..f70f61b72 100644
--- a/tools/virsh-domain.c
+++ b/tools/virsh-domain.c
@@ -7097,6 +7097,63 @@ cmdSetvcpu(vshControl *ctl, const vshCmd *cmd)


 /*
+ * "blockthreshold" command
+ */
+static const vshCmdInfo info_blockthreshold[] = {
+    {.name = "help",
+     .data = N_("attach/detach vcpu or groups of threads")
+    },
+    {.name = "desc",
+     .data = N_("Add or remove vcpus")
+    },
+    {.name = NULL}
+};
+
+static const vshCmdOptDef opts_blockthreshold[] = {
+    VIRSH_COMMON_OPT_DOMAIN_FULL,
+    {.name = "dev",
+     .type = VSH_OT_DATA,
+     .flags = VSH_OFLAG_REQ,
+     .help = N_("device to set threshold for")
+    },
+    {.name = "threshold",
+     .type = VSH_OT_INT,
+     .flags = VSH_OFLAG_REQ,
+     .help = N_("threshold as a scaled number (by default bytes)")
+    },
+    {.name = NULL}
+};
+
+static bool
+cmdBlockThreshold(vshControl *ctl, const vshCmd *cmd)
+{
+    unsigned long long threshold;
+    const char *dev = NULL;
+    virDomainPtr dom;
+    bool ret = false;
+
+    if (vshCommandOptStringReq(ctl, cmd, "dev", &dev))
+        return false;
+
+    if (vshCommandOptScaledInt(ctl, cmd, "threshold",
+                               &threshold, 1, ULLONG_MAX) < 0)
+        return false;
+
+    if (!(dom = virshCommandOptDomain(ctl, cmd, NULL)))
+        return false;
+
+    if (virDomainSetBlockThreshold(dom, dev, threshold, 0) < 0)
+        goto cleanup;
+
+    ret = true;
+
+ cleanup:
+    virDomainFree(dom);
+    return ret;
+}
+
+
+/*
  * "iothreadinfo" command
  */
 static const vshCmdInfo info_iothreadinfo[] = {
@@ -14060,5 +14117,11 @@ const vshCmdDef domManagementCmds[] = {
      .info = info_setvcpu,
      .flags = 0
     },
+    {.name = "blockthreshold",
+     .handler = cmdBlockThreshold,
+     .opts = opts_blockthreshold,
+     .info = info_blockthreshold,
+     .flags = 0
+    },
     {.name = NULL}
 };
diff --git a/tools/virsh.pod b/tools/virsh.pod
index 6c06ee029..102aefc0c 100644
--- a/tools/virsh.pod
+++ b/tools/virsh.pod
@@ -1265,6 +1265,14 @@ I<--bytes> with a scaled value allows to use finer granularity. A scaled value
 used without I<--bytes> will be rounded down to MiB/s. Note that the
 I<--bytes> may be unsupported by the hypervisor.

+
+=item B<blockthreshold> I<domain> I<dev> I<threshold>
+
+Set the threshold value for delivering the block-threshold event. I<dev>
+specifies the disk device target or backing chain element of given device using
+the 'target[1]' syntax. I<threshold> is a scaled value of the offset. If the
+block device should write beyond that offset the event will be delivered.
+
 =item B<blockresize> I<domain> I<path> I<size>

 Resize a block device of domain while the domain is running, I<path>
-- 
2.11.1




More information about the libvir-list mailing list