pg_basebackup: Missing newlines in some error messages

Started by Michael Banckalmost 8 years ago8 messages
#1Michael Banck
michael.banck@credativ.de
1 attachment(s)

Hi,

while working on something else, I noticed that some error messages in
pg_basebackup do not have a "\n" at the end, resulting in output like:

|pg_basebackup: could not get COPY data stream: pg_basebackup: removing
|data directory "data2"

Patch attached.

Michael

--
Michael Banck
Projektleiter / Senior Berater
Tel.: +49 2166 9901-171
Fax: +49 2166 9901-100
Email: michael.banck@credativ.de

credativ GmbH, HRB Mönchengladbach 12080
USt-ID-Nummer: DE204566209
Trompeterallee 108, 41189 Mönchengladbach
Geschäftsführung: Dr. Michael Meskes, Jörg Folz, Sascha Heuer

Attachments:

pg_basebackup_stderr_nl.patchtext/x-patch; charset=UTF-8; name=pg_basebackup_stderr_nl.patchDownload
diff --git a/src/bin/pg_basebackup/pg_basebackup.c b/src/bin/pg_basebackup/pg_basebackup.c
index 1b32592063..51afc5647b 100644
--- a/src/bin/pg_basebackup/pg_basebackup.c
+++ b/src/bin/pg_basebackup/pg_basebackup.c
@@ -1087,7 +1080,7 @@ ReceiveTarFile(PGconn *conn, PGresult *res, int rownum)
 	res = PQgetResult(conn);
 	if (PQresultStatus(res) != PGRES_COPY_OUT)
 	{
-		fprintf(stderr, _("%s: could not get COPY data stream: %s"),
+		fprintf(stderr, _("%s: could not get COPY data stream: %s\n"),
 				progname, PQerrorMessage(conn));
 		disconnect_and_exit(1);
 	}
@@ -1168,7 +1161,7 @@ ReceiveTarFile(PGconn *conn, PGresult *res, int rownum)
 		}
 		else if (r == -2)
 		{
-			fprintf(stderr, _("%s: could not read COPY data: %s"),
+			fprintf(stderr, _("%s: could not read COPY data: %s\n"),
 					progname, PQerrorMessage(conn));
 			disconnect_and_exit(1);
 		}
@@ -1360,7 +1353,7 @@ ReceiveAndUnpackTarFile(PGconn *conn, PGresult *res, int rownum)
 	res = PQgetResult(conn);
 	if (PQresultStatus(res) != PGRES_COPY_OUT)
 	{
-		fprintf(stderr, _("%s: could not get COPY data stream: %s"),
+		fprintf(stderr, _("%s: could not get COPY data stream: %d\n"),
 				progname, PQerrorMessage(conn));
 		disconnect_and_exit(1);
 	}
@@ -1389,7 +1382,7 @@ ReceiveAndUnpackTarFile(PGconn *conn, PGresult *res, int rownum)
 		}
 		else if (r == -2)
 		{
-			fprintf(stderr, _("%s: could not read COPY data: %s"),
+			fprintf(stderr, _("%s: could not read COPY data: %s\n"),
 					progname, PQerrorMessage(conn));
 			disconnect_and_exit(1);
 		}
#2Daniel Gustafsson
daniel@yesql.se
In reply to: Michael Banck (#1)
Re: pg_basebackup: Missing newlines in some error messages

On 21 Mar 2018, at 13:12, Michael Banck <michael.banck@credativ.de> wrote:

while working on something else, I noticed that some error messages in
pg_basebackup do not have a "\n" at the end, resulting in output like:

|pg_basebackup: could not get COPY data stream: pg_basebackup: removing
|data directory “data2"

There seems to be a few more in the other files, for example this (and more) in
receivelog.c:

-               fprintf(stderr, _("%s: could not send feedback packet: %s"),
+               fprintf(stderr, _("%s: could not send feedback packet: %s\n"),

Should they get newlines appended as well?

cheers ./daniel

#3Alvaro Herrera
alvherre@alvh.no-ip.org
In reply to: Daniel Gustafsson (#2)
Re: pg_basebackup: Missing newlines in some error messages

Daniel Gustafsson wrote:

On 21 Mar 2018, at 13:12, Michael Banck <michael.banck@credativ.de> wrote:

while working on something else, I noticed that some error messages in
pg_basebackup do not have a "\n" at the end, resulting in output like:

|pg_basebackup: could not get COPY data stream: pg_basebackup: removing
|data directory “data2"

There seems to be a few more in the other files, for example this (and more) in
receivelog.c:

-               fprintf(stderr, _("%s: could not send feedback packet: %s"),
+               fprintf(stderr, _("%s: could not send feedback packet: %s\n"),

Should they get newlines appended as well?

Note that PQerrorMessage already appends a newline, so if the %s at the
end comes from that, the newline is purposely missing.

--
Álvaro Herrera https://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

#4Michael Banck
michael.banck@credativ.de
In reply to: Alvaro Herrera (#3)
Re: pg_basebackup: Missing newlines in some error messages

Hi,

Am Mittwoch, den 21.03.2018, 09:46 -0300 schrieb Alvaro Herrera:

Daniel Gustafsson wrote:

On 21 Mar 2018, at 13:12, Michael Banck <michael.banck@credativ.de> wrote:
while working on something else, I noticed that some error messages in
pg_basebackup do not have a "\n" at the end, resulting in output like:

pg_basebackup: could not get COPY data stream: pg_basebackup: removing
data directory “data2"

There seems to be a few more in the other files, for example this (and more) in
receivelog.c:

-               fprintf(stderr, _("%s: could not send feedback packet: %s"),
+               fprintf(stderr, _("%s: could not send feedback packet: %s\n"),

Should they get newlines appended as well?

Note that PQerrorMessage already appends a newline, so if the %s at the
end comes from that, the newline is purposely missing.

Ah, I see, in that case my patch no longer makes sense.

I apparently managed to screw up so badly that no PQerrorMessage was
set, so saw the above (which indeed has no error message after the
colon).

Michael

--
Michael Banck
Projektleiter / Senior Berater
Tel.: +49 2166 9901-171
Fax: +49 2166 9901-100
Email: michael.banck@credativ.de

credativ GmbH, HRB Mönchengladbach 12080
USt-ID-Nummer: DE204566209
Trompeterallee 108, 41189 Mönchengladbach
Geschäftsführung: Dr. Michael Meskes, Jörg Folz, Sascha Heuer

#5Alvaro Herrera
alvherre@alvh.no-ip.org
In reply to: Michael Banck (#4)
Re: pg_basebackup: Missing newlines in some error messages

Hi

Michael Banck wrote:

I apparently managed to screw up so badly that no PQerrorMessage was
set, so saw the above (which indeed has no error message after the
colon).

Well, maybe that's a different bug, then: maybe we should print
something other than PQerrorMessage (or maybe PQerrorMessage should not
return empty!). Can you reproduce the problem?

--
�lvaro Herrera https://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

#6Alvaro Herrera
alvherre@alvh.no-ip.org
In reply to: Alvaro Herrera (#5)
Re: pg_basebackup: Missing newlines in some error messages

Alvaro Herrera wrote:

Hi

Michael Banck wrote:

I apparently managed to screw up so badly that no PQerrorMessage was
set, so saw the above (which indeed has no error message after the
colon).

Well, maybe that's a different bug, then: maybe we should print
something other than PQerrorMessage (or maybe PQerrorMessage should not
return empty!). Can you reproduce the problem?

The code does look a bit weird,

/*
* Get the COPY data
*/
res = PQgetResult(conn);
if (PQresultStatus(res) != PGRES_COPY_OUT)
{
fprintf(stderr, _("%s: could not get COPY data stream: %s"),
progname, PQerrorMessage(conn));

Note that noplace we check that there is actually an error. So maybe
the conn got a result status other than COPY_OUT that's not an error ...

--
�lvaro Herrera https://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

#7Michael Banck
michael.banck@credativ.de
In reply to: Alvaro Herrera (#5)
Re: pg_basebackup: Missing newlines in some error messages

Hi,

Am Mittwoch, den 21.03.2018, 09:54 -0300 schrieb Alvaro Herrera:

Michael Banck wrote:

I apparently managed to screw up so badly that no PQerrorMessage was
set, so saw the above (which indeed has no error message after the
colon).

Well, maybe that's a different bug, then: maybe we should print
something other than PQerrorMessage (or maybe PQerrorMessage should not
return empty!). Can you reproduce the problem?

It was while I was hacking on the code and mistyped something, so I
think this is entirely my fault and not a valid concern. From what I
could tell, I got PGRES_FATAL_ERROR back (I printed the int value, which
was 7), so that could explain why there was no PQerrorMessage?

Michael

--
Michael Banck
Projektleiter / Senior Berater
Tel.: +49 2166 9901-171
Fax: +49 2166 9901-100
Email: michael.banck@credativ.de

credativ GmbH, HRB Mönchengladbach 12080
USt-ID-Nummer: DE204566209
Trompeterallee 108, 41189 Mönchengladbach
Geschäftsführung: Dr. Michael Meskes, Jörg Folz, Sascha Heuer

#8Alvaro Herrera
alvherre@alvh.no-ip.org
In reply to: Michael Banck (#7)
Re: pg_basebackup: Missing newlines in some error messages

Michael Banck wrote:

Hi,

Am Mittwoch, den 21.03.2018, 09:54 -0300 schrieb Alvaro Herrera:

Michael Banck wrote:

I apparently managed to screw up so badly that no PQerrorMessage was
set, so saw the above (which indeed has no error message after the
colon).

Well, maybe that's a different bug, then: maybe we should print
something other than PQerrorMessage (or maybe PQerrorMessage should not
return empty!). Can you reproduce the problem?

It was while I was hacking on the code and mistyped something, so I
think this is entirely my fault and not a valid concern. From what I
could tell, I got PGRES_FATAL_ERROR back (I printed the int value, which
was 7), so that could explain why there was no PQerrorMessage?

If the PGresult passed to PQerrorMessage was NULL, then there's nowhere
to stuff a fabricated error message either, so it all sounds good to me.

--
�lvaro Herrera https://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services