| From: | Bertrand Drouvot <bertranddrouvot(dot)pg(at)gmail(dot)com> |
|---|---|
| To: | Nathan Bossart <nathandbossart(at)gmail(dot)com> |
| Cc: | Heikki Linnakangas <hlinnaka(at)iki(dot)fi>, Andres Freund <andres(at)anarazel(dot)de>, "pgsql-hackers(at)postgresql(dot)org" <pgsql-hackers(at)postgresql(dot)org> |
| Subject: | Re: Add backendType to PGPROC, replacing isRegularBackend |
| Date: | 2026-02-04 07:17:47 |
| Message-ID: | aYLymwUfw2dEUB4o@ip-10-97-1-34.eu-west-3.compute.internal |
| Views: | Whole Thread | Raw Message | Download mbox | Resend email |
| Thread: | |
| Lists: | pgsql-hackers |
Hi,
On Tue, Feb 03, 2026 at 03:04:41PM -0600, Nathan Bossart wrote:
> On Tue, Feb 03, 2026 at 10:55:20PM +0200, Heikki Linnakangas wrote:
> > I propose a little refactoring, attached, to replace the "isRegularBackend"
> > field in PGPROC with full "backendType".
> >
> > Andres briefly suggested this a while back [1]:
> >
> > On Fri, 22 Nov 2024 at 22:13, Andres Freund <andres(at)anarazel(dot)de>
> > wrote:
> >> Or we could have a copy of the backend type in PGPROC.
> >
> > but we didn't follow up on that approach. I don't see why, it seems so much
> > simpler than what we ended up doing. Am I missing something?
>
> At a glance, it looks reasonable to me. I don't recall whether I explored
> this approach, but at the very least I'm unaware of any reason it wouldn't
> work.
>
> > @@ -684,7 +684,7 @@ InitAuxiliaryProcess(void)
> > MyProc->databaseId = InvalidOid;
> > MyProc->roleId = InvalidOid;
> > MyProc->tempNamespaceId = InvalidOid;
> > - MyProc->isRegularBackend = false;
> > + MyProc->backendType = B_INVALID;
> > MyProc->delayChkptFlags = 0;
> > MyProc->statusFlags = 0;
> > MyProc->lwWaiting = LW_WS_NOT_WAITING;
>
> Hm. So for auxiliary processes, this would always be unset? That appears
> to be alright for today's use-cases, but it could be a problem down the
> road.
Yeah, and that would contradict what their associated "Main" functions set.
For example, for the checkpointer we now have:
(gdb) p MyProc->backendType
$1 = B_INVALID
(gdb) p MyBackendType
$2 = B_CHECKPOINTER <---- set by CheckpointerMain()
Also one point to notice:
- bool isRegularBackend; /* true if it's a regular backend. */
+ BackendType backendType; /* what kind of process is this? */
we're going from 1 byte to 4 bytes and that does not change the struct size (thanks
to the padding): still 832 bytes. I guess that's good that it is still a multiple
of 64.
Regards,
--
Bertrand Drouvot
PostgreSQL Contributors Team
RDS Open Source Databases
Amazon Web Services: https://aws.amazon.com
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Chao Li | 2026-02-04 07:21:32 | Re: Improve logical replication usability when tables lack primary keys |
| Previous Message | Michał Kłeczek | 2026-02-04 07:13:11 | Re: New access method for b-tree. |