Age Owner Branch data TLA Line data Source code
1 : : /*--------------------------------------------------------------------------
2 : : *
3 : : * test_checksums.c
4 : : * Test data checksums
5 : : *
6 : : * Copyright (c) 2026, PostgreSQL Global Development Group
7 : : *
8 : : * IDENTIFICATION
9 : : * src/test/modules/test_checksums/test_checksums.c
10 : : *
11 : : * -------------------------------------------------------------------------
12 : : */
13 : : #include "postgres.h"
14 : :
15 : : #include "funcapi.h"
16 : : #include "miscadmin.h"
17 : : #include "postmaster/datachecksum_state.h"
18 : : #include "storage/latch.h"
19 : : #include "utils/injection_point.h"
20 : : #include "utils/wait_event.h"
21 : :
32 dgustafsson@postgres 22 :GNC 2 : PG_MODULE_MAGIC;
23 : :
24 : : extern PGDLLEXPORT void dc_delay_barrier(const char *name, const void *private_data, void *arg);
25 : :
26 : : /*
27 : : * Test for delaying emission of procsignalbarriers.
28 : : */
29 : : void
32 dgustafsson@postgres 30 :UNC 0 : dc_delay_barrier(const char *name, const void *private_data, void *arg)
31 : : {
32 : : (void) name;
33 : : (void) private_data;
34 : :
35 : 0 : (void) WaitLatch(MyLatch,
36 : : WL_LATCH_SET | WL_TIMEOUT | WL_EXIT_ON_PM_DEATH,
37 : : (3 * 1000),
38 : : WAIT_EVENT_PG_SLEEP);
39 : 0 : }
40 : :
32 dgustafsson@postgres 41 :GNC 2 : PG_FUNCTION_INFO_V1(dcw_inject_delay_barrier);
42 : : Datum
32 dgustafsson@postgres 43 :UNC 0 : dcw_inject_delay_barrier(PG_FUNCTION_ARGS)
44 : : {
45 : : #ifdef USE_INJECTION_POINTS
46 : 0 : bool attach = PG_GETARG_BOOL(0);
47 : :
48 [ # # ]: 0 : if (attach)
49 : 0 : InjectionPointAttach("datachecksums-enable-checksums-delay",
50 : : "test_checksums",
51 : : "dc_delay_barrier",
52 : : NULL,
53 : : 0);
54 : : else
55 : 0 : InjectionPointDetach("datachecksums-enable-checksums-delay");
56 : : #else
57 : : elog(ERROR,
58 : : "test is not working as intended when injection points are disabled");
59 : : #endif
60 : 0 : PG_RETURN_VOID();
61 : : }
62 : :
32 dgustafsson@postgres 63 :GNC 2 : PG_FUNCTION_INFO_V1(dcw_inject_launcher_delay);
64 : : Datum
32 dgustafsson@postgres 65 :UNC 0 : dcw_inject_launcher_delay(PG_FUNCTION_ARGS)
66 : : {
67 : : #ifdef USE_INJECTION_POINTS
68 : 0 : bool attach = PG_GETARG_BOOL(0);
69 : :
70 [ # # ]: 0 : if (attach)
71 : 0 : InjectionPointAttach("datachecksumsworker-launcher-delay",
72 : : "test_checksums",
73 : : "dc_delay_barrier",
74 : : NULL,
75 : : 0);
76 : : else
77 : 0 : InjectionPointDetach("datachecksumsworker-launcher-delay");
78 : : #else
79 : : elog(ERROR,
80 : : "test is not working as intended when injection points are disabled");
81 : : #endif
82 : 0 : PG_RETURN_VOID();
83 : : }
84 : :
32 dgustafsson@postgres 85 :GNC 2 : PG_FUNCTION_INFO_V1(dcw_inject_startup_delay);
86 : : Datum
32 dgustafsson@postgres 87 :UNC 0 : dcw_inject_startup_delay(PG_FUNCTION_ARGS)
88 : : {
89 : : #ifdef USE_INJECTION_POINTS
90 : 0 : bool attach = PG_GETARG_BOOL(0);
91 : :
92 [ # # ]: 0 : if (attach)
93 : 0 : InjectionPointAttach("datachecksumsworker-startup-delay",
94 : : "test_checksums",
95 : : "dc_delay_barrier",
96 : : NULL,
97 : : 0);
98 : : else
99 : 0 : InjectionPointDetach("datachecksumsworker-startup-delay");
100 : : #else
101 : : elog(ERROR,
102 : : "test is not working as intended when injection points are disabled");
103 : : #endif
104 : 0 : PG_RETURN_VOID();
105 : : }
|