On Sun, Jul 26, 2020 at 01:54:27PM -0500, Justin Pryzby wrote:
> +            <row>
> +             <entry><literal>%P</literal></entry>
> +             <entry>For a parallel worker, this is the Process ID of its 
> leader
> +             process.
> +             </entry>
> +             <entry>no</entry>
> +            </row>

Let's be a maximum simple and consistent with surrounding descriptions
here and what we have for pg_stat_activity, say:
"Process ID of the parallel group leader, if this process is a
parallel query worker."

> +            case 'P':
> +                if (MyProc)
> +                {
> +                    PGPROC *leader = MyProc->lockGroupLeader;
> +                    if (leader == NULL || leader->pid == MyProcPid)
> +                        /* padding only */
> +                        appendStringInfoSpaces(buf,
> +                                padding > 0 ? padding : -padding);
> +                    else if (padding != 0)
> +                        appendStringInfo(buf, "%*d", padding, leader->pid);
> +                    else
> +                        appendStringInfo(buf, "%d", leader->pid);

It seems to me we should document here that the check on MyProcPid
ensures that this only prints the leader PID only for parallel workers
and discards the leader.

> +    appendStringInfoChar(&buf, ',');
> +
> +    /* leader PID */
> +    if (MyProc)
> +    {
> +        PGPROC *leader = MyProc->lockGroupLeader;
> +        if (leader && leader->pid != MyProcPid)
> +            appendStringInfo(&buf, "%d", leader->pid);
> +    }
> +

Same here.

Except for those nits, I have tested the patch and things behave as we
want (including padding and docs), so this looks good to me.
--
Michael

Attachment: signature.asc
Description: PGP signature

Reply via email to