]> xenbits.xensource.com Git - libvirt.git/commitdiff
Ensure logfile isn't truncated by shutdown message.
authorDaniel P. Berrange <berrange@redhat.com>
Mon, 22 Nov 2010 13:36:14 +0000 (13:36 +0000)
committerDaniel P. Berrange <berrange@redhat.com>
Tue, 23 Nov 2010 14:10:05 +0000 (14:10 +0000)
When running non-root, the QEMU log file is usually opened with
truncation, since there is no logrotate for non-root usage.
This means that when libvirt logs the shutdown timestamp, the
log is accidentally truncated

* src/qemu/qemu_driver.c: Never truncate log file with shutdown
  message

src/qemu/qemu_driver.c

index 04cca432972557d0fd05107dffc1e0539c746fd3..0dac75e5363b08f1678e01d1d0c6165d60a2a0af 100644 (file)
@@ -741,7 +741,7 @@ static int qemuCgroupControllerActive(struct qemud_driver *driver,
 }
 
 static int
-qemudLogFD(struct qemud_driver *driver, const char* name)
+qemudLogFD(struct qemud_driver *driver, const char* name, bool append)
 {
     char logfile[PATH_MAX];
     mode_t logmode;
@@ -756,7 +756,7 @@ qemudLogFD(struct qemud_driver *driver, const char* name)
 
     logmode = O_CREAT | O_WRONLY;
     /* Only logrotate files in /var/log, so only append if running privileged */
-    if (driver->privileged)
+    if (driver->privileged || append)
         logmode |= O_APPEND;
     else
         logmode |= O_TRUNC;
@@ -3976,7 +3976,7 @@ static int qemudStartVMDaemon(virConnectPtr conn,
     }
 
     DEBUG0("Creating domain log file");
-    if ((logfile = qemudLogFD(driver, vm->def->name)) < 0)
+    if ((logfile = qemudLogFD(driver, vm->def->name, false)) < 0)
         goto cleanup;
 
     emulator = vm->def->emulator;
@@ -4271,7 +4271,7 @@ static void qemudShutdownVMDaemon(struct qemud_driver *driver,
     VIR_DEBUG("Shutting down VM '%s' pid=%d migrated=%d",
               vm->def->name, vm->pid, migrated);
 
-    if ((logfile = qemudLogFD(driver, vm->def->name)) < 0) {
+    if ((logfile = qemudLogFD(driver, vm->def->name, true)) < 0) {
         /* To not break the normal domain shutdown process, skip the
          * timestamp log writing if failed on opening log file. */
         VIR_WARN("Unable to open logfile: %s",