[Devel] Log into /var/log/mesages large ghost files dumps

Submitted by Andrei Vagin on Aug. 4, 2017, 11:14 p.m.

Details

Message ID 20170804231404.4173-1-avagin@openvz.org
State New
Series "Log into /var/log/mesages large ghost files dumps"
Headers show

Commit Message

Andrei Vagin Aug. 4, 2017, 11:14 p.m.
From: Andrei Vagin <avagin@virtuozzo.com>

Introduce an internal CRIU limit (10Mb) and write a message to syslog.
This message is easily grep-able, so some time later we can grep our
reports from customers and find all those warnings and analyze them.

https://jira.sw.ru/browse/PSBM-68320
---
 criu/Makefile.crtools    |  1 +
 criu/files-reg.c         |  4 ++++
 criu/include/cr-syslog.h | 12 ++++++++++++
 criu/include/log.h       |  2 ++
 criu/syslog.c            | 19 +++++++++++++++++++
 5 files changed, 38 insertions(+)
 create mode 100644 criu/include/cr-syslog.h
 create mode 100644 criu/syslog.c

Patch hide | download patch | download mbox

diff --git a/criu/Makefile.crtools b/criu/Makefile.crtools
index e07c568..2e8785c 100644
--- a/criu/Makefile.crtools
+++ b/criu/Makefile.crtools
@@ -82,6 +82,7 @@  obj-y			+= path.o
 obj-y			+= autofs.o
 obj-y			+= fdstore.o
 obj-y			+= spfs.o
+obj-y			+= syslog.o
 
 ifeq ($(VDSO),y)
 obj-y			+= pie-util-vdso.o
diff --git a/criu/files-reg.c b/criu/files-reg.c
index e7cb566..f7426e9 100644
--- a/criu/files-reg.c
+++ b/criu/files-reg.c
@@ -880,6 +880,10 @@  static int dump_ghost_remap(char *path, const struct stat *st,
 {
 	pr_info("Dumping ghost file for fd %d id %#x\n", lfd, id);
 
+	if (st->st_size > (10 << 20)) {
+		pr_syslog("Dumping the ghost file %s (%"PRIu64" bytes)\n", path, st->st_size);
+	}
+
 	if (st->st_size > opts.ghost_limit) {
 		pr_err("Can't dump ghost file %s of %"PRIu64" size, increase limit\n",
 				path, st->st_size);
diff --git a/criu/include/cr-syslog.h b/criu/include/cr-syslog.h
new file mode 100644
index 0000000..c04b1ed
--- /dev/null
+++ b/criu/include/cr-syslog.h
@@ -0,0 +1,12 @@ 
+#ifndef __CR_SYSLOG_H__
+#define __CR_SYSLOG_H__
+
+/*
+ * pr_syslog can't be added into log.h, because LOG_* constants
+ * are defined in criu and in <syslog.h>.
+ */
+
+extern void pr_syslog(const char *format, ...);
+
+#endif
+
diff --git a/criu/include/log.h b/criu/include/log.h
index 9c4c283..f6b9ec2 100644
--- a/criu/include/log.h
+++ b/criu/include/log.h
@@ -3,6 +3,8 @@ 
 
 #include <inttypes.h>
 
+#include "cr-syslog.h"
+
 #ifndef CR_NOGLIBC
 
 #include <string.h>
diff --git a/criu/syslog.c b/criu/syslog.c
new file mode 100644
index 0000000..accefc2
--- /dev/null
+++ b/criu/syslog.c
@@ -0,0 +1,19 @@ 
+#include <syslog.h>
+#include <stdarg.h>
+
+#include "cr-syslog.h"
+
+void pr_syslog(const char *format, ...)
+{
+	static int open = 0;
+	va_list params;
+
+	if (!open) {
+		open = 1;
+		openlog("criu", LOG_PID, LOG_DAEMON);
+	}
+
+	va_start(params, format);
+	vsyslog(LOG_NOTICE, format, params);
+	va_end(params);
+}