> On 28 Jan 2024, at 23:17, Andrey M. Borodin <x4...@yandex-team.ru> wrote:
> 
> 
>> Perhaps a test to make the code reach the usleep(1000) can be written
>> using injection points (49cd2b93d7db)?
> 
> I've tried to prototype something like that. But interesting point between 
> GetNewMultiXactId() and RecordNewMultiXact() is a critical section, and we 
> cannot have injection points in critical sections...
> Also, to implement such a test we need "wait" type of injection points, see 
> step 2 in attachment. With this type of injection points I can stop a backend 
> amidst entering information about new MultiXact.

Here's the test draft. This test reliably reproduces sleep on CV when waiting 
next multixact to be filled into "members" SLRU.
Cost of having this test:
1. We need a new injection point type "wait" (in addition to "error" and 
"notice"). It cannot be avoided, because we need to sync at least 3 processed 
to observe condition we want.
2. We need new way to declare injection point that can happen inside critical 
section. I've called it "prepared injection point".

Complexity of having this test is higher than complexity of CV-sleep patch 
itself. Do we want it? If so I can produce cleaner version, currently all 
multixact tests are int injection_points test module.


Best regards, Andrey Borodin.

Attachment: v2-0003-Test-multixact-CV-sleep.patch
Description: Binary data

Attachment: v2-0002-Add-wait-type-for-injection-points.patch
Description: Binary data

Attachment: v2-0001-Add-conditional-variable-to-wait-for-next-MultXac.patch
Description: Binary data

Reply via email to