Uninformative messages from pg_ctl

Started by Simon Riggsover 18 years ago8 messageshackers
Jump to latest
#1Simon Riggs
simon@2ndQuadrant.com

These messages from pg_ctl are not useful

$ pg_ctl -D nonexistent stop
pg_ctl: PID file "nonexistent/postmaster.pid" does not exist
Is server running?

The message should say
pg_ctl: Data Directory "nonexistent" does not exist

$ pg_ctl -D nonexistent start
postgres cannot access the server configuration file
"/usr/local/pgsql/nonexistent/postgresql.conf": No such file or
directory
server starting

The message should say
pg_ctl: Data Directory "nonexistent" does not exist

and should not say "server starting" at all.

Any objections to changing them?

--
Simon Riggs
2ndQuadrant http://www.2ndQuadrant.com

#2Peter Eisentraut
peter_e@gmx.net
In reply to: Simon Riggs (#1)
Re: Uninformative messages from pg_ctl

Am Dienstag, 9. Oktober 2007 schrieb Simon Riggs:

These messages from pg_ctl are not useful

$ pg_ctl -D nonexistent stop
pg_ctl: PID file "nonexistent/postmaster.pid" does not exist
Is server running?

The message should say
pg_ctl: Data Directory "nonexistent" does not exist

Well, this objection could apply to any place where a file is being opened.
I'm curious how you plan to sort out the difference, considering that open()
simply returns ENOENT in both cases.

--
Peter Eisentraut
http://developer.postgresql.org/~petere/

#3Magnus Hagander
magnus@hagander.net
In reply to: Peter Eisentraut (#2)
Re: Uninformative messages from pg_ctl

On Tue, Oct 09, 2007 at 01:09:19PM +0200, Peter Eisentraut wrote:

Am Dienstag, 9. Oktober 2007 schrieb Simon Riggs:

These messages from pg_ctl are not useful

$ pg_ctl -D nonexistent stop
pg_ctl: PID file "nonexistent/postmaster.pid" does not exist
Is server running?

The message should say
pg_ctl: Data Directory "nonexistent" does not exist

Well, this objection could apply to any place where a file is being opened.
I'm curious how you plan to sort out the difference, considering that open()
simply returns ENOENT in both cases.

You'd do opendir() on the directory part fisrt, I assume.

A question I had about it is, where are we wrt translations? When do we
plan string freeze?

//Magnus

#4Simon Riggs
simon@2ndQuadrant.com
In reply to: Magnus Hagander (#3)
Re: Uninformative messages from pg_ctl

On Tue, 2007-10-09 at 13:20 +0200, Magnus Hagander wrote:

On Tue, Oct 09, 2007 at 01:09:19PM +0200, Peter Eisentraut wrote:

Am Dienstag, 9. Oktober 2007 schrieb Simon Riggs:

These messages from pg_ctl are not useful

$ pg_ctl -D nonexistent stop
pg_ctl: PID file "nonexistent/postmaster.pid" does not exist
Is server running?

The message should say
pg_ctl: Data Directory "nonexistent" does not exist

Well, this objection could apply to any place where a file is being opened.
I'm curious how you plan to sort out the difference, considering that open()
simply returns ENOENT in both cases.

You'd do opendir() on the directory part fisrt, I assume.

Yes, so we catch the real error.

A question I had about it is, where are we wrt translations? When do we
plan string freeze?

Not one day after Beta1, I presume.

We would keep the "pid does not exist" error because it still might be
true that we have a data directory, but no pid file.

--
Simon Riggs
2ndQuadrant http://www.2ndQuadrant.com

#5Peter Eisentraut
peter_e@gmx.net
In reply to: Simon Riggs (#4)
Re: Uninformative messages from pg_ctl

Am Dienstag, 9. Oktober 2007 schrieb Simon Riggs:

On Tue, 2007-10-09 at 13:20 +0200, Magnus Hagander wrote:

On Tue, Oct 09, 2007 at 01:09:19PM +0200, Peter Eisentraut wrote:

Well, this objection could apply to any place where a file is being
opened. I'm curious how you plan to sort out the difference,
considering that open() simply returns ENOENT in both cases.

You'd do opendir() on the directory part fisrt, I assume.

Yes, so we catch the real error.

Note that opendir() requires different permissions than reading or writing a
file in that directory. So you might in fact be catching the wrong error.
stat() might work better, but I'm not sure.

You would also have to cope with the directory structure changing as you
traverse it.

Also consider the effort required to slice apart directory names in a portable
way and iterate and catch all these problems. This could at best be used in
a limited number of places where pilot errors are common.

I believe, however, that this approach is wrong. The "real error", as you put
it, is the one reported by the kernel -- by definition. Everything else is
at best a "hint".

--
Peter Eisentraut
http://developer.postgresql.org/~petere/

#6Simon Riggs
simon@2ndQuadrant.com
In reply to: Peter Eisentraut (#5)
Re: Uninformative messages from pg_ctl

On Tue, 2007-10-09 at 14:25 +0200, Peter Eisentraut wrote:

Am Dienstag, 9. Oktober 2007 schrieb Simon Riggs:

On Tue, 2007-10-09 at 13:20 +0200, Magnus Hagander wrote:

On Tue, Oct 09, 2007 at 01:09:19PM +0200, Peter Eisentraut wrote:

Well, this objection could apply to any place where a file is being
opened. I'm curious how you plan to sort out the difference,
considering that open() simply returns ENOENT in both cases.

You'd do opendir() on the directory part fisrt, I assume.

Yes, so we catch the real error.

Note that opendir() requires different permissions than reading or writing a
file in that directory. So you might in fact be catching the wrong error.
stat() might work better, but I'm not sure.

Yeh, I presumed he was speaking Windows

You would also have to cope with the directory structure changing as you
traverse it.

No directory. pid file is in data directory root

We'll still fail with the old error if anything changes

Also consider the effort required to slice apart directory names in a portable
way and iterate and catch all these problems. This could at best be used in
a limited number of places where pilot errors are common.

Nothing to do. The -D option supplies the data dir name, we add the pid
file name on top, so no munging required.

I believe, however, that this approach is wrong. The "real error", as you put
it, is the one reported by the kernel -- by definition. Everything else is
at best a "hint".

--
Simon Riggs
2ndQuadrant http://www.2ndQuadrant.com

#7Simon Riggs
simon@2ndQuadrant.com
In reply to: Peter Eisentraut (#5)
Re: Uninformative messages from pg_ctl

On Tue, 2007-10-09 at 14:25 +0200, Peter Eisentraut wrote:

I believe, however, that this approach is wrong. The "real error", as you put
it, is the one reported by the kernel -- by definition. Everything else is
at best a "hint".

Are you objecting to making the wording of the hint/error clearer?

--
Simon Riggs
2ndQuadrant http://www.2ndQuadrant.com

#8Peter Eisentraut
peter_e@gmx.net
In reply to: Simon Riggs (#7)
Re: Uninformative messages from pg_ctl

Am Dienstag, 9. Oktober 2007 schrieb Simon Riggs:

On Tue, 2007-10-09 at 14:25 +0200, Peter Eisentraut wrote:

I believe, however, that this approach is wrong. The "real error", as
you put it, is the one reported by the kernel -- by definition.
Everything else is at best a "hint".

Are you objecting to making the wording of the hint/error clearer?

Not at all. I'm just trying to point out that it's not quite as obvious as it
may seem. Let's see a patch.

--
Peter Eisentraut
http://developer.postgresql.org/~petere/