> On 19 Feb 2024, at 09:01, Michael Paquier <mich...@paquier.xyz> wrote:
> 
> Thoughts and comments are welcome.

Hi Michael,

thanks for your work on injection points! I want to test a bunch of stuff using 
this facility.

I have a wishlist of functionality that I'd like to see in injection points. I 
hope you will find some of these ideas useful to improve the feature.
1. injection_points_wake() will wake all of waiters. But it's not suitable for 
complex tests. I think there must be a way to wake only specific waiter by 
injection point name.
2. Alexander Korotkov's stopevents could be used in isolation tests. This kind 
of tests is perfect for describing complex race conditions. (as a side note, 
I'd be happy if we could have primary\standby in isolation tests too)
3. Can we have some Perl function for this?
+# Wait until the checkpointer is in the middle of the restart point
+# processing, relying on the custom wait event generated in the
+# wait callback used in the injection point previously attached.
+ok( $node_standby->poll_query_until(
+               'postgres',
+               qq[SELECT count(*) FROM pg_stat_activity
+           WHERE backend_type = 'checkpointer' AND wait_event = 
'injection_wait' ;],
+               '1'),
+       'checkpointer is waiting in restart point'
+) or die "Timed out while waiting for checkpointer to run restart point";

Perhaps something like
$node->do_a_query_and_wait_for_injection_point_observed(sql,injection_point_name);
4. Maybe I missed it, but I'd like to see a guideline on how to name injection 
points.
5. In many cases we need to have injection point under critical section. I 
propose to have a "prepared injection point". See [0] for example in 
v2-0003-Test-multixact-CV-sleep.patch
+   INJECTION_POINT_PREPARE("GetNewMultiXactId-done");
+
    START_CRIT_SECTION();
 
+   INJECTION_POINT_RUN_PREPARED();
6. Currently our codebase have files injection_point.c and injection_points.c. 
It's very difficult to remember which is where...
7. This is extremely distant, but some DBMSs allow to enable injection points 
by placing files on the filesystem. That would allow to test something during 
recovery when no SQL interface is present.

Let's test all the neat stuff! Thank you!


Best regards, Andrey Borodin.

[0] 
https://www.postgresql.org/message-id/0925f9a9-4d53-4b27-a87e-3d83a757b...@yandex-team.ru

Reply via email to