Thread: initdb: Improve error recovery.

initdb: Improve error recovery.

From
Mats Erik Andersson
Date:
Hello there,

I would like to improve error recovery of initdb when the
password file is empty. The present code declares "Error 0"
as the cause of failure. It suffices to use ferrer() since
fgets() returns NULL also at a premature EOF.

In addition, a minor case is the need of a line feed in
order to print the error message on a line of its own
seems desirable.

Best regards, Mats Erik Andersson



Re: initdb: Improve error recovery.

From
Robert Haas
Date:
On Thu, Nov 27, 2014 at 7:28 AM, Mats Erik Andersson <bsd@gisladisker.se> wrote:
> I would like to improve error recovery of initdb when the
> password file is empty. The present code declares "Error 0"
> as the cause of failure. It suffices to use ferrer() since
> fgets() returns NULL also at a premature EOF.
>
> In addition, a minor case is the need of a line feed in
> order to print the error message on a line of its own
> seems desirable.
>
> Best regards,
>   Mats Erik Andersson

Please add your patch here so that it doesn't get forgotten about:

https://commitfest.postgresql.org/action/commitfest_view/open

Also, note that the PostgreSQL project prefers for patches to be
attached rather than inline, as mailers have a tendency to mangle
them.

Thanks,

-- 
Robert Haas
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company



Re: initdb: Improve error recovery.

From
Heikki Linnakangas
Date:
On 11/27/2014 02:28 PM, Mats Erik Andersson wrote:
> Hello there,
>
> I would like to improve error recovery of initdb when the
> password file is empty. The present code declares "Error 0"
> as the cause of failure. It suffices to use ferrer() since
> fgets() returns NULL also at a premature EOF.

Thanks, committed.

> In addition, a minor case is the need of a line feed in
> order to print the error message on a line of its own
> seems desirable.

Hmm. If you've piped stdout somewhere else, that produces a spurious 
empty line in stderr:

$ bin/initdb -D data-foo > /dev/null

initdb: input file "/home/heikki/pgsql.master/share/postgres.bki" does 
not belong to PostgreSQL 9.5devel
Check your installation or specify the correct path using the option -L.
initdb: removing data directory "data-foo"

I think the newline needs to go to stdout instead.

But in any case, that's just one error out of many similar ones that can 
happen during initdb. If we care enough to fix this, we should fix them 
all. Not sure it's worth the churn, though, unless you can come up with 
some kind of a simple wholesale solution, rather than adding 
fprintf(stdout, "\n") calls to every error condition.
- Heikki