Re: Weird test mixup
Michael Paquier <michael@paquier.xyz>
From: Michael Paquier <michael@paquier.xyz>
To: Noah Misch <noah@leadboat.com>
Cc: Heikki Linnakangas <hlinnaka@iki.fi>, Tom Lane <tgl@sss.pgh.pa.us>, pgsql-hackers <pgsql-hackers@postgresql.org>
Date: 2024-05-09T07:40:43Z
Lists: pgsql-hackers
Attachments
- v3-0001-Add-chunk-area-for-injection-points.patch (text/x-diff) patch v3-0001
On Thu, May 09, 2024 at 01:47:45PM +0900, Michael Paquier wrote: > That sounds fine to do that at the end.. I'm not sure how large this > chunk area added to each InjectionPointEntry should be, though. 128B > stored in each InjectionPointEntry would be more than enough I guess? > Or more like 1024? The in-core module does not need much currently, > but larger is likely better for pluggability. Actually, this is leading to simplifications in the module, giving me the attached: 4 files changed, 117 insertions(+), 134 deletions(-) So I like your suggestion. This version closes the race window between the shmem exit detach in backend A and a concurrent backend B running a point local to A so as B will never run the local point of A. However, it can cause a failure in the shmem exit callback of backend A if backend B does a detach of a point local to A because A tracks its local points with a static list in its TopMemoryContext, at least in the attached. The second case could be solved by tracking the list of local points in the module's InjectionPointSharedState, but is this case really worth the complications it adds in the module knowing that the first case would be solid enough? Perhaps not. Another idea I have for the second case is to make InjectionPointDetach() a bit "softer", by returning a boolean status rather than fail if the detach cannot be done, so as the shmem exit callback can still loop through the entries it has in store. It could always be possible that a concurrent backend does a detach followed by an attach with the same name, causing the shmem exit callback to drop a point it should not, but that's not really a plausible case IMO :) This stuff can be adjusted in subtle ways depending on the cases you are most interested in. What do you think? -- Michael
Commits
-
injection_points: Store runtime conditions in private area
- 267d41dc4f41 17.0 landed
-
Introduce private data area for injection points
- 33181b48fd0e 17.0 landed
-
injection_points: Fix incorrect spinlock acquisition
- 597f66942d0b 17.0 landed
-
Make GIN tests using injection points concurrent-safe
- 5105c9079681 17.0 landed
-
injection_points: Fix race condition with local injection point tests
- f4083c497510 17.0 landed
-
injection_points: Introduce runtime conditions
- f587338dec87 17.0 landed
-
Make GIN test using injection points repeatable
- 997db123c054 17.0 landed
-
Fix backstop in gin test if injection point is not reached
- d802ff06d021 17.0 landed
-
Try to unbreak injection-fault tests in the buildfarm
- 85f65d7a26fc 17.0 landed
-
Disable tests using injection points in installcheck
- e2e3b8ae9ed7 17.0 landed