diff options
author | Gaurav Kumar Garg <garg.gaurav52@gmail.com> | 2015-12-01 14:23:08 +0530 |
---|---|---|
committer | Niels de Vos <ndevos@redhat.com> | 2016-02-04 13:51:53 -0800 |
commit | 8fdfa0c17cf492f39e675f7502596754f6e5aeb4 (patch) | |
tree | 39ce7366bf439e27988682e21e595ada24cd00b3 | |
parent | f6c5024eb3f37b2c4e5a3bea5136987affb19aa7 (diff) |
libglusterfs: close & open cmd_history.log on log rotate
Post log rotate, cmd_history.log is not refreshed (closed & opened back)
due to which new commands still land up in the log rotated file.
Fix is to close and open cmd_history.log file upon log rotation
Change-Id: Ie6990c9d55b0afa544bc5c84de3db49ff4b1299b
BUG: 1286959
Signed-off-by: Gaurav Kumar Garg <ggarg@redhat.com>
Reviewed-on: http://review.gluster.org/12832
Smoke: Gluster Build System <jenkins@build.gluster.com>
CentOS-regression: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Niels de Vos <ndevos@redhat.com>
NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org>
-rw-r--r-- | libglusterfs/src/logging.c | 37 | ||||
-rw-r--r-- | libglusterfs/src/logging.h | 1 |
2 files changed, 36 insertions, 2 deletions
diff --git a/libglusterfs/src/logging.c b/libglusterfs/src/logging.c index 03f5ff89733..1d7ac4c785b 100644 --- a/libglusterfs/src/logging.c +++ b/libglusterfs/src/logging.c @@ -87,8 +87,10 @@ gf_log_logrotate (int signum) ctx = THIS->ctx; - if (ctx) + if (ctx) { ctx->log.logrotate = 1; + ctx->log.cmd_history_logrotate = 1; + } } void @@ -2379,6 +2381,7 @@ gf_cmd_log (const char *domain, const char *fmt, ...) char *msg = NULL; size_t len = 0; int ret = 0; + int fd = -1; glusterfs_ctx_t *ctx = NULL; ctx = THIS->ctx; @@ -2427,6 +2430,36 @@ gf_cmd_log (const char *domain, const char *fmt, ...) strcpy (msg, str1); strcpy (msg + len, str2); + /* close and reopen cmdlogfile fd for in case of log rotate*/ + if (ctx->log.cmd_history_logrotate) { + ctx->log.cmd_history_logrotate = 0; + + if (ctx->log.cmdlogfile) { + fclose (ctx->log.cmdlogfile); + ctx->log.cmdlogfile = NULL; + } + + fd = open (ctx->log.cmd_log_filename, + O_CREAT | O_RDONLY, S_IRUSR | S_IWUSR); + if (fd < 0) { + gf_msg (THIS->name, GF_LOG_CRITICAL, errno, + LG_MSG_FILE_OP_FAILED, "failed to open " + "logfile \"%s\" \n", ctx->log.cmd_log_filename); + ret = -1; + goto out; + } + + ctx->log.cmdlogfile = fdopen (fd, "a"); + if (!ctx->log.cmdlogfile) { + gf_msg (THIS->name, GF_LOG_CRITICAL, errno, + LG_MSG_FILE_OP_FAILED, + "failed to open logfile \"%s\"" + " \n", ctx->log.cmd_log_filename); + ret = -1; + goto out; + } + } + fprintf (ctx->log.cmdlogfile, "%s\n", msg); fflush (ctx->log.cmdlogfile); @@ -2437,5 +2470,5 @@ out: FREE (str2); - return (0); + return ret; } diff --git a/libglusterfs/src/logging.h b/libglusterfs/src/logging.h index 515b4372e8a..25a9e42d71c 100644 --- a/libglusterfs/src/logging.h +++ b/libglusterfs/src/logging.h @@ -95,6 +95,7 @@ typedef enum { typedef struct gf_log_handle_ { pthread_mutex_t logfile_mutex; uint8_t logrotate; + uint8_t cmd_history_logrotate; gf_loglevel_t loglevel; int gf_log_syslog; gf_loglevel_t sys_log_level; |