Re: Cluster name in ps output

From: Thomas Munro <munro(at)ip9(dot)org>
To: Andres Freund <andres(at)2ndquadrant(dot)com>
Cc: "pgsql-hackers(at)postgresql(dot)org" <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: Cluster name in ps output
Date: 2014-05-05 10:49:19
Message-ID: CADLWmXUqsNxM0rmqzZ4tbcJmsnKN5Cu4SmgRk-bfgmRV-R3vdg@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On 5 May 2014 10:10, Andres Freund <andres(at)2ndquadrant(dot)com> wrote:

> Hi,
>
> On 2014-05-05 10:00:34 +0000, Thomas Munro wrote:
> > When running more than one cluster I often find myself looking at
> > the output of 'iotop' or other tools wondering which
> > cluster's "wal receiver process" or "checkpointer process" etc
> > I'm seeing.
>
> I wonder about that pretty regularly. To the point that I've a hacky
> version of this locally. So +1 for me for the idea in general.

Thanks! (Do you have a write up/diff somewhere showing the local
modifications you're running?)

> > If cluster_name is not set, it defaults to the empty string and
> > the ps output is unchanged. If it's set to 'foox' the ps output
> > includes that string in square brackets:
> >
> > postgres: [foox] checkpointer process
> > postgres: [foox] writer process
> > postgres: [foox] wal writer process
> > postgres: [foox] autovacuum launcher process
> > postgres: [foox] stats collector process
> > postgres: [foox] munro foodb [local] idle
>
> "postgres: [foox] ..." should rather be "postgres[foox]: ..." imo ;)
>
>
Hah -- I agree, but on systems using setproctitle, the program name and ":
" are provided already, so the end result would have to be different on
those systems and I figured it should be the same everywhere if possible.
(BTW I also tried to tidy up the way that is handled, so that instead of a
different snprintf statement being selected by the preprocessor, a macro
PROGRAM_NAME_PREFIX is defined to be empty on those systems).

> I guess the question is where this should be available as well. At the
> very least I'd want to reference it in log_line_prefix as well?
>

Good idea, I will look into that.

> > + if (*cluster_name == '\0')
> > + {
> > + snprintf(ps_buffer, ps_buffer_size,
> > + PROGRAM_NAME_PREFIX "%s %s %s ",
> > + username, dbname, host_info);
> > + }
> > + else
> > + {
> > + snprintf(ps_buffer, ps_buffer_size,
> > + PROGRAM_NAME_PREFIX "[%s] %s %s %s ",
> > + cluster_name, username, dbname,
> host_info);
> > + }
> > +
> > ps_buffer_cur_len = ps_buffer_fixed_size = strlen(ps_buffer);
>
> Aren't you potentially dereferencing a NULL pointer here?
>

Hmm -- I thought the GUC machinery would make sure cluster_name either
pointed to the default I provided, an empty string, or a string read from
the configuration file. Perhaps I need to go and read up on how GUCs work.

Thomas Munro

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Craig Ringer 2014-05-05 10:53:23 Re: Cluster name in ps output
Previous Message Heikki Linnakangas 2014-05-05 10:41:00 Re: Race condition between PREPARE TRANSACTION and COMMIT PREPARED (was Re: Problem with txid_snapshot_in/out() functionality)