Use WaitLatch() instead of pg_usleep() at the end of backups
authorMichael Paquier <michael@paquier.xyz>
Mon, 5 Jul 2021 23:10:59 +0000 (08:10 +0900)
committerMichael Paquier <michael@paquier.xyz>
Mon, 5 Jul 2021 23:10:59 +0000 (08:10 +0900)
This concerns pg_stop_backup() and BASE_BACKUP, when waiting for the
WAL segments required for a backup to be archived.  This simplifies a
bit the handling of the wait event used in this code path.

Author: Bharath Rupireddy
Reviewed-by: Michael Paquier, Stephen Frost
Discussion: https://postgr.es/m/CALj2ACU4AdPCq6NLfcA-ZGwX7pPCK5FgEj-CAU0xCKzkASSy_A@mail.gmail.com

src/backend/access/transam/xlog.c

index 7890e13d7a1375fb836a53fa0dd5df0cd975b531..c7c928f50bd94368ad9b4d4d31434912b3e5fba6 100644 (file)
@@ -11638,9 +11638,11 @@ do_pg_stop_backup(char *labelfile, bool waitforarchive, TimeLineID *stoptli_p)
                                reported_waiting = true;
                        }
 
-                       pgstat_report_wait_start(WAIT_EVENT_BACKUP_WAIT_WAL_ARCHIVE);
-                       pg_usleep(1000000L);
-                       pgstat_report_wait_end();
+                       (void) WaitLatch(MyLatch,
+                                                        WL_LATCH_SET | WL_TIMEOUT | WL_EXIT_ON_PM_DEATH,
+                                                        1000L,
+                                                        WAIT_EVENT_BACKUP_WAIT_WAL_ARCHIVE);
+                       ResetLatch(MyLatch);
 
                        if (++waits >= seconds_before_warning)
                        {