Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wDHC3-002ny2-2C for pgsql-hackers@arkaria.postgresql.org; Thu, 16 Apr 2026 07:31:20 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wDHC2-004cDK-1M for pgsql-hackers@arkaria.postgresql.org; Thu, 16 Apr 2026 07:31:18 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wDHC2-004cDB-0T for pgsql-hackers@lists.postgresql.org; Thu, 16 Apr 2026 07:31:18 +0000 Received: from mail-ot1-x332.google.com ([2607:f8b0:4864:20::332]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wDHBz-00000001Muv-3L5L for pgsql-hackers@lists.postgresql.org; Thu, 16 Apr 2026 07:31:17 +0000 Received: by mail-ot1-x332.google.com with SMTP id 46e09a7af769-7dbff06e4a6so7349343a34.1 for ; Thu, 16 Apr 2026 00:31:15 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1776324673; cv=none; d=google.com; s=arc-20240605; b=SaXy2ZpgGwKlehc59bQ0ZUWLZeUKkE4t5QwwjhK+X1N8aMKXtE46CCxiXiB78NtszE +vmUvM5CH++srVCgGyN9A4VZQTHvxZTf/kiNr83i+ZU1uBpNaksTR+iYth9ix/7LEVCH D6T+eDzKFLmosh9CbtM4wdmpNuLQVVRLfKrmn9/umIzP+6zt3NzylRX+S64y59zrdKh8 APrKs/tW+HPUed7fv7zcUx/IZan2jA4OBpSdA//fmx8SndyzAk8VF7YUcyRopgzs3Nde r/a3ntpueiYjy8++SqKH+54FPAnQeYNgI+ge1FBpNlZUkf4nFt2q5yFPQOTEGhM1Jb6K njYA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:dkim-signature; bh=zXyGmZwCEqll/X0LRlMj5Pfc7Z1/1z1PYm0nBAWZvyk=; fh=PDhzRmLFhJQgKl2kpY6iqaoiggk+rKjB8rXL7ERgOws=; b=JVC4cqBa0LE4MpeZkAAJzzrNzWosSnyY5dJU7MZ7u1Ic+Oa7lvroz+g5dWTnuM4kwG tF2hPmeztXnljbkZlPTm9jELgDDgnQPcenQsRJZkHIAG4M8l8nlMj9UVMpjtHP5FaJaf Sn3v0Vj5SppkeZ7VuADjtRDL/yM8zb4C6VCv7N/s8ufj0h7cZ74fPVJNK2wCN913gLo+ UQwMapVOUivBn2T8ngdBjNP6FY89eIDDzM1ApO/6rE/yKxBCHsfQPnRkuxoHAlJTi0gq Jf5FiLiKPgFI3V0qopZZC4xdN8QPsC1MfWgr1E7HcS6ZcrQEqvCO85zSG3FfzHdOSg5+ +Kjg==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1776324673; x=1776929473; darn=lists.postgresql.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=zXyGmZwCEqll/X0LRlMj5Pfc7Z1/1z1PYm0nBAWZvyk=; b=PB5BVxDWm1Q9l55EMhTOrOHxLiONsouwCeHZHCnCTcoA6SN3+SiJxlqsmNjZn0WyMK 0d4mhhrbucUZF49bKRyELcj2oe6xUJT8XJ2Oi6PaYZfikb8D+3N5pCm7F7Ohje4V4Uph xxRevDHy/tdwVvA07IRrUtRV03byp1AyIFiDv70VfVZXAfl/WmbI6MhKbkd4UP3dgeZG ByTivhSSuh+BeSn7MVRtfJt2rEbukZHmVAqwT8zKWP/pqcnvRVyGveaKCqG1fOCmcpU/ lu8qj2mfc4mwfeDubAYWYZrMEesj4yzmaIWue/qZSL+6oj+nQjhh/9ypRQsRQ85BSpKc lQyg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776324673; x=1776929473; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=zXyGmZwCEqll/X0LRlMj5Pfc7Z1/1z1PYm0nBAWZvyk=; b=mzBxD8y/3dnn8uWLKhjbznDwNhv2+73rZkIQsuwWqZBMrm5qgtdJSQ9vnuqKrNf3MC MTNjTHDYlsXJnDCFTMQL0F3URptulTdAFIXQDUpwnL2Lv6XzB8wero3rXvG4vzCMS/dU rOyqyRBoR4CP3MJz3rziyquKeDTTjKosj4SCSclEJB4Axy46GKMF+CT4BsW8ynMGkgJD sum6x+OVTjbaBShfnVRKueB16BxRR2kV55LwzNmdHh8sYSi4V4alBlPIMdkivHisZpDz oBOASOP8Fm9m/MHHDs9iCU0yJMGxVb5lMPn1qYDXOw+ng1l2rsdBytGX3/dx1dpDB0HQ CHyg== X-Gm-Message-State: AOJu0YyC+hmcTBqR5xGve2aDRC9EbuQr6bfSlFEsPVcZy5nG/8r+vvn8 3C9bkkp4SYAguEZ6VNQVUDEj2eEg3dMruCDZ3N0oE8NbOwPXAmKHym9T9ZujScfuaAMFNitM0x3 VAH3ETDld6YIfzUKA9k+heQ4p2iRM10o= X-Gm-Gg: AeBDietCw9uS7E5VDUcprnZnpwiMPwyJrC4rRUKM/EGA2x03hB+FGeZq+cQW/fcVW5m BSjrkXWQjKf79QKVmemihh1Prjr6f6cj0Ba8pPd2CGXsEWUgswDgpZsI5GW6gxdqDAKMFKMojzW qUrplcaNQMZroSoTY8+1rrQpY6S+AAZNUUHEdatb8ud1l4U/dtpsdjOiBs58dv9FSNMCa5O6xEt 13lNdeqN8SD3y4hqApPWjI4N1UJFSrDUlKvZZyOVuXvBtTpOlAmVWRX7xV+Jpa71D+u8i04D2VH q26Q5r2k7UOeOLDhWAhm2j/56PLaM+6dg38K3MolVZ3ehwzvL3waNDxxM/jQ0sv0NnDJxsYB6uk 6TAPIW4Y= X-Received: by 2002:a05:6820:6709:b0:67e:3648:a916 with SMTP id 006d021491bc7-68be80e0380mr8974020eaf.34.1776324673188; Thu, 16 Apr 2026 00:31:13 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Alexander Korotkov Date: Thu, 16 Apr 2026 10:31:01 +0300 X-Gm-Features: AQROBzBgAX-HVqoUHX62mVRPQtt0YUnfskd07_XoyMYu0HN1x_Jw1sUVmNLH8M0 Message-ID: Subject: Re: [PATCH] Fix WAIT FOR LSN standby_write/standby_flush for archive recovery cases To: SATYANARAYANA NARLAPURAM Cc: PostgreSQL Hackers Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk Hi, Satyanarayana! On Wed, Apr 15, 2026 at 9:44=E2=80=AFAM SATYANARAYANA NARLAPURAM wrote: > GetCurrentLSNForWaitType() for WAIT_LSN_TYPE_STANDBY_WRITE and > WAIT_LSN_TYPE_STANDBY_FLUSH previously relied on the WAL receiver's > tracked write/flush positions (GetWalRcvWriteRecPtr/GetWalRcvFlushRecPtr)= . > There are two scenarios where WAIT FOR LSN queries can be stalled though > replay is making progress. Breaking it down to two to give clarity on set= ups but > the underlying problem is the same. > > There are two scenarios here: > > (1). When the standby is disconnected from the primary and switched to WA= L > archive mode, it continues to be in that mode until no more WAL is availa= ble to replay > and then switch to streaming mode. Until then WAIT FOR LSN calls get stuc= k on the > standby though replay catches up beyond the stale WAL receiver position. = Switching > XLog source from archive to streaming is separately tracked in [1]. > > (2). In the case of Archive recovery, no WAL receiver process exists, so = these > functions return InvalidXLogRecPtr (0/0). WAIT FOR LSN with standby_flush= or > standby_write modes would always time out, even for WAL that has been > fully replayed. > > Fix by falling back to the replay LSN (GetXLogReplayRecPtr) when the WAL > receiver position is invalid or behind replay. This is correct because an= y > WAL that has been replayed has necessarily already been written and flush= ed > to disk. Attached the repro test case. Please, check, similar patch is already posted here. https://www.postgresql.org/message-id/CABPTF7Ukk8iJF7TpnK2mFOaboNJgWL1csfXu= 4e3J4GT0o7x0GQ%40mail.gmail.com ------ Regards, Alexander Korotkov Supabase