Skip to contentSkip to conversation

pseudo: quiet diagnostics during startup for pseudo -d

PATCH In review Robert Yang 2 participants 4 messages Sep 29, 2016

lore
Share & tools
lore
#0 lore raw

v2 cover pseudo: quiet diagnostics during startup for pseudo -d

* V2
- Backport Peter's patches, thanks Peter.
- Drop adding prefix for pseudo log after talked with Peter, we don't need that since the log should go into pseudo.log.

* V1
- pseudo: add prefix for log and make log consistent

// Robert

The following changes since commit cdaafc3729700778d95afc2413553d7b41c1317b:

oeqa/sstatetests: Ensure we cover deb packaging backend for sstate test (2016-09-28 10:15:55 +0100)

are available in the git repository at:

git://git.openembedded.org/openembedded-core-contrib rbt/pseudo
http://cgit.openembedded.org/cgit.cgi/openembedded-core-contrib/log/?h=rbt/pseudo

Robert Yang (1):
pseudo: quiet diagnostics during startup for pseudo -d

 ...t-diagnostics-during-startup-for-pseudo-d.patch | 54 ++++++++++++++
 ...er.c-add-prefix-for-log-and-make-log-cons.patch | 83 ++++++++++++++++++++++
 .../files/0002-Use-correct-file-descriptor.patch   | 53 ++++++++++++++
 meta/recipes-devtools/pseudo/pseudo_1.8.1.bb       |  2 +
 4 files changed, 192 insertions(+)
 create mode 100644 meta/recipes-devtools/pseudo/files/0001-Quiet-diagnostics-during-startup-for-pseudo-d.patch
 create mode 100644 meta/recipes-devtools/pseudo/files/0001-pseudo_server.c-add-prefix-for-log-and-make-log-cons.patch
 create mode 100644 meta/recipes-devtools/pseudo/files/0002-Use-correct-file-descriptor.patch
Signature · 1 line
2.9.0
#1 lore raw

PATCH v2 1/1 pseudo: quiet diagnostics during startup for pseudo -d

When the client spawns a pseudo server, it starts out sending diagnostics to stderr. This can be spammy in some cases with races during startup; everything resolves, but we get scary-looking diagnostics. So shove those into a log file.

---
 ...t-diagnostics-during-startup-for-pseudo-d.patch | 54 ++++++++++++++
 ...er.c-add-prefix-for-log-and-make-log-cons.patch | 83 ++++++++++++++++++++++
 .../files/0002-Use-correct-file-descriptor.patch   | 53 ++++++++++++++
 meta/recipes-devtools/pseudo/pseudo_1.8.1.bb       |  2 +
 4 files changed, 192 insertions(+)
 create mode 100644 meta/recipes-devtools/pseudo/files/0001-Quiet-diagnostics-during-startup-for-pseudo-d.patch
 create mode 100644 meta/recipes-devtools/pseudo/files/0001-pseudo_server.c-add-prefix-for-log-and-make-log-cons.patch
 create mode 100644 meta/recipes-devtools/pseudo/files/0002-Use-correct-file-descriptor.patch
meta/recipes-devtools/pseudo/files/0001-Quiet-diagnostics-during-startup-for-pseudo-d.patch new file +54 -0
new file mode 100644
index 0000000..d4b9f6a
@@ -0,0 +1,54 @@
+From eead8a505245a292c43f070c0e836cdfeb7bd7bd Mon Sep 17 00:00:00 2001
+From: Seebs <[email protected]>
+Date: Wed, 28 Sep 2016 17:05:17 -0500
+Subject: [PATCH 1/2] Quiet diagnostics during startup for pseudo -d
+
+When the client spawns a pseudo server, it starts out sending diagnostics
+to stderr. This can be spammy in some cases with races during startup;
+everything resolves, but we get scary-looking diagnostics. So shove
+those into a log file.
+
+Signed-off-by: Seebs <[email protected]>
+
+Upstream-Status: Backport
+Signed-off-by: Robert Yang <[email protected]>
+---
+ ChangeLog.txt   | 5 +++++
+ pseudo_server.c | 4 +++-
+ 2 files changed, 8 insertions(+), 1 deletion(-)
+
+diff --git a/ChangeLog.txt b/ChangeLog.txt
+index d6359ca..4cc24de 100644
+--- a/ChangeLog.txt
++++ b/ChangeLog.txt
+@@ -1,3 +1,8 @@
++2016-09-28:
++	* (seebs) Send errors to log when daemonizing, but do that a lot
++	  sooner to prevent startup messages which can show up spuriously
++	  with multiple clients.
++
+ 2016-07-28:
+ 	* (seebs) Fix performance issue on deletion with xattr changes.
+ 
+diff --git a/pseudo_server.c b/pseudo_server.c
+index 8731d20..7c2db2f 100644
+--- a/pseudo_server.c
++++ b/pseudo_server.c
+@@ -162,6 +162,9 @@ pseudo_server_start(int daemonize) {
+ 	 * SIGUSR1, or until too much time has passed. */
+ 	if (daemonize) {
+ 		int child;
++
++		/* make startup messages go away when invoked-as-daemon */
++		pseudo_debug_logfile(PSEUDO_LOGFILE, 2);
+ 		child = fork();
+ 		if (child == -1) {
+ 			pseudo_diag("Couldn't fork child process: %s\n",
+@@ -231,7 +234,6 @@ pseudo_server_start(int daemonize) {
+ 			setsid();
+ 			fclose(stdin);
+ 			fclose(stdout);
+-			pseudo_debug_logfile(PSEUDO_LOGFILE, 2);
+ 			/* and then just execute the server code normally.  */
+ 			/* Any logging will presumably go to logfile, but
+ 			 * exit status will make it back to the parent for
meta/recipes-devtools/pseudo/files/0001-pseudo_server.c-add-prefix-for-log-and-make-log-cons.patch new file +83 -0

83 lines not on this page · raw message

meta/recipes-devtools/pseudo/files/0002-Use-correct-file-descriptor.patch new file +53 -0

53 lines not on this page · raw message

meta/recipes-devtools/pseudo/pseudo_1.8.1.bb +2 -0
index cec2149..67eb298 100644
@@ -7,6 +7,8 @@ SRC_URI = "http://downloads.yoctoproject.org/releases/pseudo/${BPN}-${PV}.tar.bz
            file://moreretries.patch \
            file://Fix-xattr-performance.patch \
            file://0001-Don-t-send-SIGUSR1-to-init.patch \
+           file://0001-Quiet-diagnostics-during-startup-for-pseudo-d.patch \
+           file://0002-Use-correct-file-descriptor.patch \
            "
 
 SRC_URI[md5sum] = "ee38e4fb62ff88ad067b1a5a3825bac7"
Signature · 1 line
2.9.0
#2 lore raw
Quoted 9 lines · Robert Yang

When the client spawns a pseudo server, it starts out sending diagnostics to stderr. This can be spammy in some cases with races during startup; everything resolves, but we get scary-looking diagnostics. So shove those into a log file.

---
 ...t-diagnostics-during-startup-for-pseudo-d.patch | 54 ++++++++++++++
 ...er.c-add-prefix-for-log-and-make-log-cons.patch | 83 ++++++++++++++++++++++

Sorry, added an unused patch which had made by me, removed it from the repo.

// Robert

Quoted 229 lines
 .../files/0002-Use-correct-file-descriptor.patch   | 53 ++++++++++++++
 meta/recipes-devtools/pseudo/pseudo_1.8.1.bb       |  2 +
 4 files changed, 192 insertions(+)
 create mode 100644 meta/recipes-devtools/pseudo/files/0001-Quiet-diagnostics-during-startup-for-pseudo-d.patch
 create mode 100644 meta/recipes-devtools/pseudo/files/0001-pseudo_server.c-add-prefix-for-log-and-make-log-cons.patch
 create mode 100644 meta/recipes-devtools/pseudo/files/0002-Use-correct-file-descriptor.patch
meta/recipes-devtools/pseudo/files/0001-Quiet-diagnostics-during-startup-for-pseudo-d.patch new file +54 -0
new file mode 100644
index 0000000..d4b9f6a
@@ -0,0 +1,54 @@
+From eead8a505245a292c43f070c0e836cdfeb7bd7bd Mon Sep 17 00:00:00 2001
+From: Seebs <[email protected]>
+Date: Wed, 28 Sep 2016 17:05:17 -0500
+Subject: [PATCH 1/2] Quiet diagnostics during startup for pseudo -d
+
+When the client spawns a pseudo server, it starts out sending diagnostics
+to stderr. This can be spammy in some cases with races during startup;
+everything resolves, but we get scary-looking diagnostics. So shove
+those into a log file.
+
+Signed-off-by: Seebs <[email protected]>
+
+Upstream-Status: Backport
+Signed-off-by: Robert Yang <[email protected]>
+---
+ ChangeLog.txt   | 5 +++++
+ pseudo_server.c | 4 +++-
+ 2 files changed, 8 insertions(+), 1 deletion(-)
+
+diff --git a/ChangeLog.txt b/ChangeLog.txt
+index d6359ca..4cc24de 100644
+--- a/ChangeLog.txt
++++ b/ChangeLog.txt
+@@ -1,3 +1,8 @@
++2016-09-28:
++	* (seebs) Send errors to log when daemonizing, but do that a lot
++	  sooner to prevent startup messages which can show up spuriously
++	  with multiple clients.
++
+ 2016-07-28:
+ 	* (seebs) Fix performance issue on deletion with xattr changes.
+
+diff --git a/pseudo_server.c b/pseudo_server.c
+index 8731d20..7c2db2f 100644
+--- a/pseudo_server.c
++++ b/pseudo_server.c
+@@ -162,6 +162,9 @@ pseudo_server_start(int daemonize) {
+ 	 * SIGUSR1, or until too much time has passed. */
+ 	if (daemonize) {
+ 		int child;
++
++		/* make startup messages go away when invoked-as-daemon */
++		pseudo_debug_logfile(PSEUDO_LOGFILE, 2);
+ 		child = fork();
+ 		if (child == -1) {
+ 			pseudo_diag("Couldn't fork child process: %s\n",
+@@ -231,7 +234,6 @@ pseudo_server_start(int daemonize) {
+ 			setsid();
+ 			fclose(stdin);
+ 			fclose(stdout);
+-			pseudo_debug_logfile(PSEUDO_LOGFILE, 2);
+ 			/* and then just execute the server code normally.  */
+ 			/* Any logging will presumably go to logfile, but
+ 			 * exit status will make it back to the parent for
meta/recipes-devtools/pseudo/files/0001-pseudo_server.c-add-prefix-for-log-and-make-log-cons.patch new file +83 -0
new file mode 100644
index 0000000..e9cf3ba
@@ -0,0 +1,83 @@
+From 505ea70ff63da3645243a7f3e4359432b11c3dd9 Mon Sep 17 00:00:00 2001
+From: Robert Yang <[email protected]>
+Date: Tue, 27 Sep 2016 19:39:03 -0700
+Subject: [PATCH] pseudo_server.c: add prefix for log and make log consistent
+
+The log messages might not be consistent when the same error happens,
+part of the log messages go to terminial, and part of them go to
+pseudo.log, and these code use multiprocesses, which makes it very hard
+to understand, for example:
+$ kill -9 `ps aux | grep /usr/bin/pseud | awk '{print $2}'`
+$ /path/to/usr/bin/pseudo & /path/to/usr/bin/pseudo
+
+Messages printed to terminal:
+  Child process exit status 4: lock_held
+Messages printed to pseudo.log:
+  pseudo: lock already held by existing pid 34028.
+  pseudo: Couldn't obtain lock: Resource temporarily unavailable.
+
+They are messages for one error, so that they should be consistent, this
+patch fixes the problem, they will go into pseudo.log now.
+
+This patch also adds log prefix "pseudo: " for the message to show where
+they are from.
+
+Upstream-Status: Pending
+
+Signed-off-by: Robert Yang <[email protected]>
+---
+ pseudo_server.c | 9 ++++++---
+ pseudo_util.c   | 3 +++
+ 2 files changed, 9 insertions(+), 3 deletions(-)
+
+diff --git a/pseudo_server.c b/pseudo_server.c
+index 8731d20..31e7b0a 100644
+--- a/pseudo_server.c
++++ b/pseudo_server.c
+@@ -168,6 +168,12 @@ pseudo_server_start(int daemonize) {
+ 				strerror(errno));
+ 			exit(PSEUDO_EXIT_FORK_FAILED);
+ 		}
++
++		/* log messages will go into pseudo.log from here */
++		fclose(stdin);
++		fclose(stdout);
++		pseudo_debug_logfile(PSEUDO_LOGFILE, 2);
++
+ 		if (child) {
+ 			int status;
+ 			int rc;
+@@ -229,9 +235,6 @@ pseudo_server_start(int daemonize) {
+ 		} else {
+ 			/* detach from parent session */
+ 			setsid();
+-			fclose(stdin);
+-			fclose(stdout);
+-			pseudo_debug_logfile(PSEUDO_LOGFILE, 2);
+ 			/* and then just execute the server code normally.  */
+ 			/* Any logging will presumably go to logfile, but
+ 			 * exit status will make it back to the parent for
+diff --git a/pseudo_util.c b/pseudo_util.c
+index 0c156cf..3948c93 100644
+--- a/pseudo_util.c
++++ b/pseudo_util.c
+@@ -494,6 +494,8 @@ pseudo_diag(char *fmt, ...) {
+ 	va_list ap;
+ 	char debuff[8192];
+ 	int len;
++	/* log prefix */
++	char *pseudo_log_prefix = "pseudo: ";
+ 	/* gcc on Ubuntu 8.10 requires that you examine the return from
+ 	 * write(), and won't let you cast it to void.  Of course, if you
+ 	 * can't print error messages, there's nothing to do.
+@@ -507,6 +509,7 @@ pseudo_diag(char *fmt, ...) {
+ 	if (len > 8192)
+ 		len = 8192;
+
++	wrote += write(pseudo_util_debug_fd, pseudo_log_prefix, strlen(pseudo_log_prefix));
+ 	if (debugged_newline && (pseudo_util_debug_flags & PDBGF_PID)) {
+ 		wrote += write(pseudo_util_debug_fd, pid_text, pid_len);
+ 	}
+--
+2.9.0
+
meta/recipes-devtools/pseudo/files/0002-Use-correct-file-descriptor.patch new file +53 -0
new file mode 100644
index 0000000..dd6fd87
@@ -0,0 +1,53 @@
+From 7a0632cad851826d804db0540d9a59773e6bf29c Mon Sep 17 00:00:00 2001
+From: Seebs <[email protected]>
+Date: Wed, 28 Sep 2016 22:12:29 -0500
+Subject: [PATCH 2/2] Use correct file descriptor
+
+So it turns out that pseudo_logfile() was returning 0 or -1, and
+pseudo_debug_logfile() was expecting it to be the correct file descriptor
+to use. And it's basically a mystery that any of that ever worked.
+
+Signed-off-by: Seebs <[email protected]>
+
+Upstream-Status: Backport
+Signed-off-by: Robert Yang <[email protected]>
+---
+ ChangeLog.txt | 3 +++
+ pseudo_util.c | 3 ++-
+ 2 files changed, 5 insertions(+), 1 deletion(-)
+
+diff --git a/ChangeLog.txt b/ChangeLog.txt
+index 4cc24de..49a6c36 100644
+--- a/ChangeLog.txt
++++ b/ChangeLog.txt
+@@ -2,6 +2,9 @@
+ 	* (seebs) Send errors to log when daemonizing, but do that a lot
+ 	  sooner to prevent startup messages which can show up spuriously
+ 	  with multiple clients.
++	* (seebs) return file descriptor from pseudo_logfile, so we set
++	  pseudo_util_debug_fd to the right value instead of to stdin.
++	  Nice bug.
+
+ 2016-07-28:
+ 	* (seebs) Fix performance issue on deletion with xattr changes.
+diff --git a/pseudo_util.c b/pseudo_util.c
+index 0c156cf..a60c74b 100644
+--- a/pseudo_util.c
++++ b/pseudo_util.c
+@@ -1569,7 +1569,7 @@ pseudo_logfile(char *filename, char *defname, int prefer_fd) {
+ 	if (fd == -1)
+ 		return -1;
+ 	else
+-		return 0;
++		return fd;
+ }
+
+ int
+@@ -1579,6 +1579,7 @@ pseudo_debug_logfile(char *defname, int prefer_fd) {
+
+ 	fd = pseudo_logfile(filename, defname, prefer_fd);
+ 	if (fd > -1) {
++		pseudo_diag("debug_logfile: fd %d\n", fd);
+ 		pseudo_util_debug_fd = fd;
+ 		return 0;
+ 	}
meta/recipes-devtools/pseudo/pseudo_1.8.1.bb +2 -0
index cec2149..67eb298 100644
@@ -7,6 +7,8 @@ SRC_URI = "http://downloads.yoctoproject.org/releases/pseudo/${BPN}-${PV}.tar.bz
            file://moreretries.patch \
            file://Fix-xattr-performance.patch \
            file://0001-Don-t-send-SIGUSR1-to-init.patch \
+           file://0001-Quiet-diagnostics-during-startup-for-pseudo-d.patch \
+           file://0002-Use-correct-file-descriptor.patch \
            "
 
 SRC_URI[md5sum] = "ee38e4fb62ff88ad067b1a5a3825bac7"
#3 lore raw
In reply to Robert Yang
Quoted 7 lines · Robert Yang
 ...t-diagnostics-during-startup-for-pseudo-d.patch | 54 
++++++++++++++
 ...er.c-add-prefix-for-log-and-make-log-cons.patch | 83 
++++++++++++++++++++++
 .../files/0002-Use-correct-file-descriptor.patch   | 53 
++++++++++++++
 meta/recipes-devtools/pseudo/pseudo_1.8.1.bb       |  2 +

The second line in the diffstat seems not to be present, but that's fine, since I don't think we need it.

These are both pretty simple patches, honestly if the second patch hadn't been needed due to a bug that has somehow escaped detection for ages, the first would have been Obviously Correct and worked. So I'm pretty comfortable with these.

-s