]> xenbits.xensource.com Git - libvirt.git/commitdiff
logging: support truncation of logfiles when opening
authorDaniel P. Berrange <berrange@redhat.com>
Mon, 29 Feb 2016 12:26:02 +0000 (12:26 +0000)
committerDaniel P. Berrange <berrange@redhat.com>
Thu, 10 Mar 2016 15:41:52 +0000 (15:41 +0000)
The virtlogd daemon currently opens all files for append, but
in some cases the user may wish to discard existing data. Define
a new flag to indicate that logfiles should be truncated when
opening.

src/logging/log_daemon_dispatch.c
src/logging/log_handler.c
src/logging/log_handler.h
src/logging/log_manager.h
src/logging/log_protocol.x

index a5fa7f0c760b5c5c90e534fc92ba0778fc7ad6cd..b00cee2b8165cf5bbe4a485b104c6509d59fd608 100644 (file)
@@ -50,13 +50,14 @@ virLogManagerProtocolDispatchDomainOpenLogFile(virNetServerPtr server ATTRIBUTE_
     int rv = -1;
     off_t offset;
     ino_t inode;
+    bool trunc = args->flags & VIR_LOG_MANAGER_PROTOCOL_DOMAIN_OPEN_LOG_FILE_TRUNCATE;
 
     if ((fd = virLogHandlerDomainOpenLogFile(virLogDaemonGetHandler(logDaemon),
                                              args->driver,
                                              (unsigned char *)args->dom.uuid,
                                              args->dom.name,
                                              args->path,
-                                             args->flags,
+                                             trunc,
                                              &inode, &offset)) < 0)
         goto cleanup;
 
index 92cff503c4fe25246ccae82b2c204f6d3b72a0a1..4c082238201faaf3b73361040a3c98dfda3099b1 100644 (file)
@@ -357,7 +357,7 @@ virLogHandlerDomainOpenLogFile(virLogHandlerPtr handler,
                                const unsigned char *domuuid,
                                const char *domname,
                                const char *path,
-                               unsigned int flags,
+                               bool trunc,
                                ino_t *inode,
                                off_t *offset)
 {
@@ -365,8 +365,6 @@ virLogHandlerDomainOpenLogFile(virLogHandlerPtr handler,
     virLogHandlerLogFilePtr file = NULL;
     int pipefd[2] = { -1, -1 };
 
-    virCheckFlags(0, -1);
-
     virObjectLock(handler);
 
     handler->inhibitor(true, handler->opaque);
@@ -400,7 +398,7 @@ virLogHandlerDomainOpenLogFile(virLogHandlerPtr handler,
     if ((file->file = virRotatingFileWriterNew(path,
                                                DEFAULT_FILE_SIZE,
                                                DEFAULT_MAX_BACKUP,
-                                               false,
+                                               trunc,
                                                DEFAULT_MODE)) == NULL)
         goto error;
 
index e61f32d4d4d9fc6030d8285836183c5c7fdc07fe..54a9cd9288eeaab4ed3a7ba52bef82a75d7e68b4 100644 (file)
@@ -48,7 +48,7 @@ int virLogHandlerDomainOpenLogFile(virLogHandlerPtr handler,
                                    const unsigned char *domuuid,
                                    const char *domname,
                                    const char *path,
-                                   unsigned int flags,
+                                   bool trunc,
                                    ino_t *inode,
                                    off_t *offset);
 
index d3b9d29e10c20b32e60556474031438729989096..7deaba77f292a8da03e22593ed3b2c0b498e4993 100644 (file)
@@ -26,6 +26,8 @@
 
 # include "internal.h"
 
+# include "logging/log_protocol.h"
+
 typedef struct _virLogManager virLogManager;
 typedef virLogManager *virLogManagerPtr;
 
index b0ac31bce4e84820e633c149e17d4e6f9ad012b5..0363c756c8e031169ffbbe4aa6d8c9316a53c850 100644 (file)
@@ -30,6 +30,10 @@ struct virLogManagerProtocolLogFilePosition {
 };
 typedef struct virLogManagerProtocolLogFilePosition virLogManagerProtocolLogFilePosition;
 
+enum virLogManagerProtocolDomainOpenLogFileFlags {
+    VIR_LOG_MANAGER_PROTOCOL_DOMAIN_OPEN_LOG_FILE_TRUNCATE = 1
+};
+
 /* Obtain a file handle suitable for writing to a
  * log file for a domain
  */