Replace PROC_QUEUE / SHM_QUEUE with ilist.h

From: Andres Freund <andres(at)anarazel(dot)de>
To: pgsql-hackers(at)postgresql(dot)org
Cc: Robert Haas <robertmhaas(at)gmail(dot)com>, Thomas Munro <thomas(dot)munro(at)gmail(dot)com>, Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>, Amit Langote <amitlangote09(at)gmail(dot)com>
Subject: Replace PROC_QUEUE / SHM_QUEUE with ilist.h
Date: 2022-11-20 05:59:30
Message-ID: 20221120055930.t6kl3tyivzhlrzu2@awork3.anarazel.de
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Hi,

In [1] Robert justifiably complained about the use of PROC_QUEUE. I've
previously been bothered by this in [2], but didn't get around to finishing
the patches.

One thing that made me hesitate was the naming of the function for a) checking
whether a dlist_node is a list, b) initializing and deleting nodes in a way to
allow for a). My patch adds dlist_node_init(), dlist_delete_thoroughly() /
dlist_delete_from_thoroughly() / dclist_delete_from_thoroughly() and
dlist_node_is_detached(). Thomas proposed dlist_delete_and_reinit() and
dlist_node_is_linked() instead.

Attached is a revised version of the patches from [2].

I left the naming of the detached / thoroughly as it was before, for
now. Another alternative could be to try to just get rid of needing the
detached state at all, although that likely would make the code changes
bigger.

I've switched the PROC_QUEUE uses to dclist, which we only got recently. The
prior version of the patchset contained a patch to remove the use of the size
field of PROC_QUEUE, as it's only needed in a few places. But it seems easier
to just replace it with dclist for now.

Robert had previously complained about the ilist.h patch constifying some
functions. I don't really understand the complaint in this case - none of the
cases should require constifying outside code. It just allows to replace
things like SHMQueueEmpty() which were const, because there's a few places
that get passed a const PGPROC. There's more that could be constified
(removing the need for one unconstify() in predicate.c - but that seems like a
lot more work with less clear benefit. Either way, I split the constification
into a separate patch.

Comments?

Greetings,

Andres Freund

[1] https://www.postgresql.org/message-id/20221117201304.vemjfsxaizmt3zbb%40awork3.anarazel.de
[2] https://www.postgresql.org/message-id/20200211042229.msv23badgqljrdg2%40alap3.anarazel.de

Attachment Content-Type Size
v2-0001-Add-detached-node-functions-to-ilist.patch text/x-diff 3.0 KB
v2-0002-Constify-some-ilist.h-functions.patch text/x-diff 4.4 KB
v2-0003-Use-dclist-instead-of-PROC_QUEUE-SHM_QUEUE-for-he.patch text/x-diff 42.9 KB
v2-0004-Use-dlist-for-syncrep-queue.patch text/x-diff 8.7 KB
v2-0005-Use-dlists-for-predicate-locking.patch text/x-diff 55.5 KB
v2-0006-Remove-now-unused-SHMQueue.patch text/x-diff 7.7 KB

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Nikolay Shaplov 2022-11-20 06:11:46 Re: [PATCH] New [relation] option engine
Previous Message vignesh C 2022-11-20 03:59:47 Re: Support logical replication of DDLs