[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

[libvirt] [PATCH] Don't log qemu monitor output from blockStats



The attached patch changes the qemu driver blockStats command to not log
qemu monitor output. virt-manager offers an option to continually poll
VM disk stats, and if the app is left running for a while with many VMs,
this can make the logs huge, for little benefit (a user reported 100 MB
with virt-manager left running overnight).

The output from the command is still printed with a DEBUG call, so the
info isn't completely lost.

Thanks,
Cole
diff --git a/src/qemu_driver.c b/src/qemu_driver.c
index 3b9b08a..b3bfd51 100644
--- a/src/qemu_driver.c
+++ b/src/qemu_driver.c
@@ -115,11 +115,15 @@ static int qemudDomainGetMaxVcpus(virDomainPtr dom);
 static int qemudMonitorCommand(const virDomainObjPtr vm,
                                const char *cmd,
                                char **reply);
+static int qemudMonitorCommandNoLog(const virDomainObjPtr vm,
+                                    const char *cmd,
+                                    char **reply);
 static int qemudMonitorCommandExtra(const virDomainObjPtr vm,
                                     const char *cmd,
                                     const char *extra,
                                     const char *extraPrompt,
-                                    char **reply);
+                                    char **reply,
+                                    int doLog);
 
 static struct qemud_driver *qemu_driver = NULL;
 
@@ -1083,7 +1087,8 @@ qemudInitPasswords(virConnectPtr conn,
                                      vm->def->graphics->data.vnc.passwd :
                                      driver->vncPassword,
                                      QEMU_PASSWD_PROMPT,
-                                     &info) < 0) {
+                                     &info,
+                                     1) < 0) {
             qemudReportError(conn, NULL, NULL, VIR_ERR_INTERNAL_ERROR,
                              "%s", _("setting VNC password failed"));
             return -1;
@@ -1428,7 +1433,8 @@ qemudMonitorCommandExtra(const virDomainObjPtr vm,
                          const char *cmd,
                          const char *extra,
                          const char *extraPrompt,
-                         char **reply) {
+                         char **reply,
+                         int doLog) {
     int size = 0;
     char *buf = NULL;
     size_t cmdlen = strlen(cmd);
@@ -1507,7 +1513,7 @@ qemudMonitorCommandExtra(const virDomainObjPtr vm,
     }
 
     /* Log, but ignore failures to write logfile for VM */
-    if (safewrite(vm->logfile, buf, strlen(buf)) < 0) {
+    if (doLog && safewrite(vm->logfile, buf, strlen(buf)) < 0) {
         char ebuf[1024];
         qemudLog(QEMUD_WARN, _("Unable to log VM console data: %s\n"),
                  virStrerror(errno, ebuf, sizeof ebuf));
@@ -1533,9 +1539,15 @@ static int
 qemudMonitorCommand(const virDomainObjPtr vm,
                     const char *cmd,
                     char **reply) {
-    return qemudMonitorCommandExtra(vm, cmd, NULL, NULL, reply);
+    return qemudMonitorCommandExtra(vm, cmd, NULL, NULL, reply, 1);
 }
 
+static int
+qemudMonitorCommandNoLog(const virDomainObjPtr vm,
+                         const char *cmd,
+                         char **reply) {
+    return qemudMonitorCommandExtra(vm, cmd, NULL, NULL, reply, 0);
+}
 
 /**
  * qemudProbe:
@@ -3774,7 +3786,10 @@ qemudDomainBlockStats (virDomainPtr dom,
         goto cleanup;
     len = strlen (qemu_dev_name);
 
-    if (qemudMonitorCommand (vm, "info blockstats", &info) < 0) {
+    /* Specifically don't log the command output, since regular polling
+     * will create huuuuge logs.
+     */
+    if (qemudMonitorCommandNoLog (vm, "info blockstats", &info) < 0) {
         qemudReportError (dom->conn, dom, NULL, VIR_ERR_OPERATION_FAILED,
                           "%s", _("'info blockstats' command failed"));
         goto cleanup;

[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]