On Fri, 8 Dec 2023 at 15:17, Kartyshov Ivan <i.kartys...@postgrespro.ru> wrote: > > Should rise disscusion on separate utility statement or find > case where procedure version is failed. > > 1) Classic (wait_classic_v3.patch) > https://www.postgresql.org/message-id/3cc883048264c2e9af022033925ff8db%40postgrespro.ru > ========== > advantages: multiple wait events, separate WAIT FOR statement > disadvantages: new words in grammar > > > > WAIT FOR [ANY | ALL] event [, ...] > BEGIN [ WORK | TRANSACTION ] [ transaction_mode [, ...] ] > [ WAIT FOR [ANY | ALL] event [, ...]] > event: > LSN value > TIMEOUT number_of_milliseconds > timestamp > > > > 2) After style: Kyotaro and Freund (wait_after_within_v2.patch) > https://www.postgresql.org/message-id/d3ff2e363af60b345f82396992595a03%40postgrespro.ru > ========== > advantages: no new words in grammar > disadvantages: a little harder to understand > > > > AFTER lsn_event [ WITHIN delay_milliseconds ] [, ...] > BEGIN [ WORK | TRANSACTION ] [ transaction_mode [, ...] ] > [ AFTER lsn_event [ WITHIN delay_milliseconds ]] > START [ WORK | TRANSACTION ] [ transaction_mode [, ...] ] > [ AFTER lsn_event [ WITHIN delay_milliseconds ]] > > > > 3) Procedure style: Tom Lane and Kyotaro (wait_proc_v7.patch) > https://www.postgresql.org/message-id/27171.1586439221%40sss.pgh.pa.us > https://www.postgresql.org/message-id/20210121.173009.235021120161403875.horikyota.ntt%40gmail.com > ========== > advantages: no new words in grammar,like it made in > pg_last_wal_replay_lsn > disadvantages: use snapshot xmin trick > SELECT pg_waitlsn(‘LSN’, timeout); > SELECT pg_waitlsn_infinite(‘LSN’); > SELECT pg_waitlsn_no_wait(‘LSN’);
Few of the tests have aborted at [1] in CFBot with: 0000058`9c7ff550 00007ff6`5bdff1f4 postgres!pg_atomic_compare_exchange_u64_impl( struct pg_atomic_uint64 * ptr = 0x00000000`00000008, unsigned int64 * expected = 0x00000058`9c7ff5a0, unsigned int64 newval = 0)+0x34 [c:\cirrus\src\include\port\atomics\generic-msvc.h @ 83] 00000058`9c7ff580 00007ff6`5bdff256 postgres!pg_atomic_read_u64_impl( struct pg_atomic_uint64 * ptr = 0x00000000`00000008)+0x24 [c:\cirrus\src\include\port\atomics\generic.h @ 323] 00000058`9c7ff5c0 00007ff6`5bdfef67 postgres!pg_atomic_read_u64( struct pg_atomic_uint64 * ptr = 0x00000000`00000008)+0x46 [c:\cirrus\src\include\port\atomics.h @ 430] 00000058`9c7ff5f0 00007ff6`5bc98fc3 postgres!GetMinWaitedLSN(void)+0x17 [c:\cirrus\src\backend\commands\wait.c @ 176] 00000058`9c7ff620 00007ff6`5bc82fb9 postgres!PerformWalRecovery(void)+0x4c3 [c:\cirrus\src\backend\access\transam\xlogrecovery.c @ 1788] 00000058`9c7ff6e0 00007ff6`5bffc651 postgres!StartupXLOG(void)+0x989 [c:\cirrus\src\backend\access\transam\xlog.c @ 5562] 00000058`9c7ff870 00007ff6`5bfed38b postgres!StartupProcessMain(void)+0xd1 [c:\cirrus\src\backend\postmaster\startup.c @ 288] 00000058`9c7ff8a0 00007ff6`5bff49fd postgres!AuxiliaryProcessMain( AuxProcType auxtype = StartupProcess (0n0))+0x1fb [c:\cirrus\src\backend\postmaster\auxprocess.c @ 139] 00000058`9c7ff8e0 00007ff6`5beb7674 postgres!SubPostmasterMain( More details are available at [2]. [1] - https://cirrus-ci.com/task/5618308515364864 [2] - https://api.cirrus-ci.com/v1/artifact/task/5618308515364864/crashlog/crashlog-postgres.exe_0008_2023-12-08_07-48-37-722.txt Regards, Vignesh