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 1vup0W-008FBM-2Y for pgsql-hackers@arkaria.postgresql.org; Tue, 24 Feb 2026 09:47:08 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vup0V-000PVc-2H for pgsql-hackers@arkaria.postgresql.org; Tue, 24 Feb 2026 09:47:07 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vup0V-000PVT-0m for pgsql-hackers@lists.postgresql.org; Tue, 24 Feb 2026 09:47:07 +0000 Received: from mail-yw1-x1134.google.com ([2607:f8b0:4864:20::1134]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1vup0R-00000000wF0-367S for pgsql-hackers@postgresql.org; Tue, 24 Feb 2026 09:47:05 +0000 Received: by mail-yw1-x1134.google.com with SMTP id 00721157ae682-79827d28fc4so27675067b3.1 for ; Tue, 24 Feb 2026 01:47:04 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1771926424; cv=none; d=google.com; s=arc-20240605; b=dtG+nojkjMkHM7JCAc1GfZQEITtxHb9rntcGHGNjBNk8v3ZXmJTj58UdVSAKGq4uPW epRLhPEZa/wYoT5Ubktoko/lqIbnkioFi8Ly8s8cJzaJQqwxHoimqdDRZF9tZXF5zqAJ QVj3Atw2/mOGMqNGf4Q67aH6Ogzlq1Yyc3Ji9trShvoNyj+aLYlvN9HqNVQgWXT2MiJB xcBnepVk7z01qzlyOV2sbn98EgSzjh0/x8i4+uTt0sILo02/TrDThRWQf6USp7qfxt9i 9TF5Qe/yhFPlHm2261RcqqbV6+8hbKvnTMjiVbOYIp4MK3Z3Z8Dbe+X3FvyDL8xsCv4W Zx9A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :dkim-signature; bh=wiXvxb0nemiI0gJfx886CMhBvM1945gmgc315nZkmhY=; fh=waPnKahtqrjL6e5lDHONXgAYWW+1/EnTYqDmUsP0vmM=; b=bN3czqcJ7BHhwk3Y19odwvp7o2Z4Y1uIJ6cAZru0cCMCUickLphN2Tw22vCNDjyRzc His1D6t2BpkRm9KSCOwYwFP4qnKLgMez5ZsRm4RMTIcsc96J4ooNaoVvNJto0B3gzySb hm6k8gE9sDiOZMzWnfk/6fJtaPFcy4D+G6kNa0rydCaFeLF/UjkEn/CavyhIBpmZ56Rm ijv5hoighUovtKdoyKobKUTHeUnvXoNLJQ0F2NLnroRvfDCEnbk9SoNUhius8brN8mdE OhakfWEGpiBSKUDECk3y8g6+rmLSz+Z4p8Y+LKybLLGZSJkMrTOgcmU7XeA72gqBbc2U /CYw==; darn=postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=datadoghq.com; s=google; t=1771926424; x=1772531224; darn=postgresql.org; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :from:to:cc:subject:date:message-id:reply-to; bh=wiXvxb0nemiI0gJfx886CMhBvM1945gmgc315nZkmhY=; b=IrEVGmsoxJ7tuSq+jhtO3vLIX0YSvspv4JrJufDskW5TJEeLJYyj2lU8asPi4j14uH MIVql1UKjKb3YU0CEznpfjG9ZveK5lnNqecQp5Hfg8uJNmiVYWzJ3go2AT1dDfz45jYq 37gO+XW2XPI6ZXfNOl5KRoKHenKJRl/5UgAgI= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771926424; x=1772531224; h=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=wiXvxb0nemiI0gJfx886CMhBvM1945gmgc315nZkmhY=; b=BbVqfosfiq4jPxBqofyuQazGEgwcogosuzi1Md6XrSpEk4+egjXivXowKhzHwgFn6f oyK9JaIiSTH7EIQaGjB6kUcn3flamoa7Tb7vptccnZelBp/2GBo9btobDtubCCM6td5n 1TlJi3J0Z6fOT7VjH3wlaDhDC7gn39dkDdTUny02sPzqXDlRZKUO1lvL5g8D1VPT0HCL uE/rkpv27ApI7k0y+Klv6cZqEx6ChWMIdTxtxw2/uGdFC3MwYX981XfZg6TrpBx7jQme BnZ1RBDYVGHg+QwyNGR4QviYygMnKRv+vW0P2BP8CXAQyXI0TKtFdZmFyOyiC9+9fdWQ hOGg== X-Gm-Message-State: AOJu0YxNYbznFpDgt2XaoEfY7Zt7NIDzMURr3hUcIw7/K/c4M8JJesVr yjQrWauedO89A14KdBGp66DDg8M5teHd1HKOziAiWs8MYIc2rx7dtCQ4uYwNF85ydNcdAggwYvy 2pbm0VjNjqqFQIPy9jvARQmRiICzvQTu6kNG0AGg+m6FuhWrxeYILaQqC1A== X-Gm-Gg: ATEYQzwwIQYBdvOL2/LKqmQUZ4I2z225CVI2hrkOLrt/WU9C/SGzyjkbgBu1sLd/L85 lDodi5BtsxTkesZNUXBHTKWw3SiDAjQEw6eYNZfte7QqlYtzq4TYmcahHlTiNpq3kb/MBPNciA8 W+JpOK77wgMT07rYzs2pwllTXC+MiJEbRiU/zrhTo3RP/Jsn1ptexNjcGJ5glDDKXE81DRAn3wI NO8L+nvOOPP5r+TTRW8OhfEyrv616UGW+kPBhv0udctN+Wc3SQKJGYcaPHcmEdf0yX7FtQB0t6t /ugBkw== X-Received: by 2002:a05:690c:4806:b0:78f:a616:7b99 with SMTP id 00721157ae682-798290172b5mr94581877b3.49.1771926423255; Tue, 24 Feb 2026 01:47:03 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: From: Anthonin Bonnefoy Date: Tue, 24 Feb 2026 10:46:51 +0100 X-Gm-Features: AaiRm51C1fxJlShYrX9JH6NEo3CsKnzH7QOzqKWdshFc24qPd4FzSA52utFizRw Message-ID: Subject: Re: Shutdown indefinitely stuck due to unflushed FPI_FOR_HINT record To: PostgreSQL Hackers Content-Type: multipart/mixed; boundary="000000000000075e64064b8ec5bc" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000075e64064b8ec5bc Content-Type: text/plain; charset="UTF-8" Some additional informations: XLogSendLogical is stuck in the following infinite loop: - It attempt to read the next record with XLogReadAhead + XLogDecodeNextRecord - The page with the record header is read - It has the record header, it goes back to XLogDecodeNextRecord - tot_len > len, the record needs to be reassembled - The next page containing the rest of the record is read with ReadPageInternal. It fails since this page was never written. - It jumps to the err label, XLogReaderInvalReadState(state) is called and reset the reader state - It goes back to the start of WalSndLoop's loop There are some attempts done by the walsender to flush the WAL using XLogBackgroundFlush: /* * If we're shutting down, trigger pending WAL to be written out, * otherwise we'd possibly end up waiting for WAL that never gets * written, because walwriter has shut down already. */ if (got_STOPPING) XLogBackgroundFlush(); However, XLogBackgroundFlush only writes completed blocks or the latest async xact known. With the issue triggered, I have the following state: XLogCtl->LogwrtRqst: (Write = 39128056, Flush = 39124992) LogwrtResult: (Write = 39124992, Flush = 39124992) XLogCtl->asyncXactLSN: 39119776 There are 3064 bytes (39128056 - 39124992) that contain the next page with the rest of the cont record that still needs to be written. However, XLogBackgroundFlush backs off to the previous page boundary: /* back off to last completed page boundary */ WriteRqst.Write -= WriteRqst.Write % XLOG_BLCKSZ; Meaning WriteRqst.Write will be 39124992, which is already written and flushed and asyncXactLSN is behind both write and flush. So, it looks like the root issue is more that the async LSN isn't updated when a transaction without xid is rollbacked. When going through CommitTransaction, such a transaction would still go through XLogSetAsyncXactLSN. I've updated the patch with this new approach: XLogSetAsyncXactLSN is now called in RecordTransactionAbort even when a xid wasn't assigned. With this, the logical walsender is able to force the flush of the last partial page using XLogBackgroundFlush. --000000000000075e64064b8ec5bc Content-Type: application/octet-stream; name="v2-0001-Fix-stuck-shutdown-due-to-unflushed-records.patch" Content-Disposition: attachment; filename="v2-0001-Fix-stuck-shutdown-due-to-unflushed-records.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mm0efy7d0 RnJvbSAyOGY1NTJiOWNjYjA3NjYyN2QyNTc3YjdkYWViMjNhOTNhMWU1MGVmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbnRob25pbiBCb25uZWZveSA8YW50aG9uaW4uYm9ubmVmb3lA ZGF0YWRvZ2hxLmNvbT4KRGF0ZTogVHVlLCAyNCBGZWIgMjAyNiAwOToyNDo0OCArMDEwMApTdWJq ZWN0OiBGaXggc3R1Y2sgc2h1dGRvd24gZHVlIHRvIHVuZmx1c2hlZCByZWNvcmRzCgpTaHV0ZG93 biBzZXF1ZW5jZSBtYXkgYmUgc3R1Y2sgaW5kZWZpbml0ZWx5IHVuZGVyIHRoZSBmb2xsb3dpbmcK Y2lyY3Vtc3RhbmNlczoKLSBEYXRhIGNoZWNrc3VtcyBpcyBlbmFibGVkCi0gQSBsb2dpY2FsIHJl cGxpY2F0aW9uIHdhbHNlbmRlciBpcyBydW5uaW5nCi0gQSBzZWxlY3QgaW4gYW4gZXhwbGljaXQg dHJhbnNhY3Rpb24gdHJpZXMgdG8gcHJ1bmUgYSBmdWxsIGhlYXAgcGFnZSwKICB3cm90ZSBhIEZQ SV9GT1JfSElOVCByZWNvcmQgd2hpY2ggY3Jvc3NlcyB0aGUgcGFnZSBib3VuZGFyeQotIFRoZSBz ZWxlY3QgaXMgcm9sbGJhY2tlZCAob3Iga2lsbGVkKQotICdwZ19jdGwgc3RvcCcgaXMgc2VudAoK VGhlIEZQSV9GT1JfSElOVCByZWNvcmQgaXMgbGlrZWx5IGdvaW5nIHRvIGJlIGEgY29udHJlY29y ZCBhbmQgc3RhcnRzIGEKbmV3IHBhZ2UuIEhvd2V2ZXIsIGFzIHRoZSBzZWxlY3QgaXMgcm9sbGJh Y2tlZCwgWExvZ1NldEFzeW5jWGFjdExTTgppc24ndCBjYWxsZWQgdG8gYWR2YW5jZSB0aGUgTFNO IHRvIGluY2x1ZGUgdGhpcyByZWNvcmQuCgpXaGVuIHRoZSBjaGVja3BvaW50ZXIgc3RhcnRzIFNo dXRkb3duWExPRygpLCBhbGwgd2Fsc2VuZGVycyB3aWxsIGJlCm5vdGlmaWVkIHRvIHN0b3AuIEhv d2V2ZXIsIHRoZSBsb2dpY2FsIHJlcGxpY2F0aW9uIHdhbHNlbmRlciB3aWxsIGJlCnN0dWNrIGlu IHRoZSBmb2xsb3dpbmcgaW5maW5pdGUgbG9vcDoKLSBUcmllcyB0byByZWFkIHRoZSBsYXN0IEZQ SV9GT1JfSElOVCByZWNvcmQKLSBUaGUgcGFnZSB3aXRoIHRoZSByZWNvcmQgaGVhZGVyIGlzIHJl YWQKLSB0b3RfbGVuID4gbGVuLCB0aGUgcmVjb3JkIG5lZWRzIHRvIGJlIHJlYXNzZW1ibGVkCi0g VHJpZXMgdG8gcmVhZCB0aGUgbmV4dCBwYWdlIGNvbnRhaW5pbmcgdGhlIHJlc3Qgb2YgdGhlIHJl Y29yZC4gSXQgZmFpbHMgc2luY2UgdGhpcyBwYWdlIHdhcyBuZXZlciB3cml0dGVuLgotIHhsb2cg cmVhZGVyIHN0YXRlIGlzIHJlc2V0IHdpdGggWExvZ1JlYWRlckludmFsUmVhZFN0YXRlCi0gSXQg Z29lcyBiYWNrIHRvIHRoZSBzdGFydCBvZiBXYWxTbmRMb29wJ3MgbG9vcAoKVGhlcmUgYXJlIHNv bWUgYXR0ZW1wdHMgZG9uZSBieSB0aGUgd2Fsc2VuZGVyIHRvIGZsdXNoIHRoZSBXQUwgdXNpbmcK WExvZ0JhY2tncm91bmRGbHVzaC4gSG93ZXZlciwgWExvZ0JhY2tncm91bmRGbHVzaCBvbmx5IHdy aXRlcyBjb21wbGV0ZWQKYmxvY2tzLCBvciB1cCB0byB0aGUgbGF0ZXN0IGtub3duIGFzeW5jIGxz bi4KClNpbmNlIHRoZSBzZWxlY3Qgd2FzIHJvbGxiYWNrZWQsIFhMb2dCYWNrZ3JvdW5kRmx1c2gg ZG9lc24ndCBmbHVzaCB0aGUKbmV4dCBwYXJ0aWFsIHBhZ2UuCgpUaGlzIHBhdGNoIGZpeGVzIHRo ZSBpc3N1ZSBieSBhZHZhbmNpbmcgdGhlIGFzeW5jIExTTiwgZXZlbiB3aGVuIHRoZQp0cmFuc2Fj dGlvbiBkb2Vzbid0IGhhdmUgYW4gYXNzaWduZWQgeGlkLiBUaGlzIGFsbG93cwpYTG9nQmFja2dy b3VuZEZsdXNoIHRvIHdyaXRlIHRoZSBuZWNlc3NhcnkgcGFydGlhbCBwYWdlIHdoZW4gY2FsbGVk IGJ5CnRoZSB3YWxzZW5kZXIuCi0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGFjdC5j IHwgMTEgKysrKysrKysrKysKIDEgZmlsZSBjaGFuZ2VkLCAxMSBpbnNlcnRpb25zKCspCgpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGFjdC5jIGIvc3JjL2JhY2tlbmQv YWNjZXNzL3RyYW5zYW0veGFjdC5jCmluZGV4IGViYTRmMDYzMTY4Li4wYTQ5ZDViNjAzYyAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGFjdC5jCisrKyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy90cmFuc2FtL3hhY3QuYwpAQCAtMTc4Nyw3ICsxNzg3LDE4IEBAIFJlY29yZFRy YW5zYWN0aW9uQWJvcnQoYm9vbCBpc1N1YlhhY3QpCiAJewogCQkvKiBSZXNldCBYYWN0TGFzdFJl Y0VuZCB1bnRpbCB0aGUgbmV4dCB0cmFuc2FjdGlvbiB3cml0ZXMgc29tZXRoaW5nICovCiAJCWlm ICghaXNTdWJYYWN0KQorCQl7CisJCQkvKgorCQkJICogRXZlbiBpZiBubyB4aWQgd2FzIGFzc2ln bmVkLCBzb21lIHJlY29yZHMgbWF5IGhhdmUgYmVlbiB3cml0dGVuCisJCQkgKiBpbiB0aGUgV0FM LiBSZXBvcnQgdGhlIGxhdGVzdCBhc3luYyBMU04sIHNvIHRoYXQgdGhlIFdBTCB3cml0ZXIKKwkJ CSAqIGtub3dzIHRvIGZsdXNoIHRob3NlIHJlY29yZHMuIFRoaXMgaXMgaW1wb3J0YW50IHdoZW4g c2h1dHRpbmcKKwkJCSAqIGRvd24sIHdhbHNlbmRlciBtYXkgdXNlIFhMb2dCYWNrZ3JvdW5kRmx1 c2ggdG8gdHJpZ2dlciBwZW5kaW5nCisJCQkgKiBXQUwgdG8gYmUgd3JpdHRlbiBvdXQuIElmIHRo ZXkncmUgbm90IHRyYWNrZWQgYnkgYXN5bmMgeGFjdAorCQkJICogbHNuLCB0aGV5IHdvbid0IGJl IHdyaXR0ZW4gYnkgWExvZ0JhY2tncm91bmRGbHVzaC4KKwkJCSAqLworCQkJWExvZ1NldEFzeW5j WGFjdExTTihYYWN0TGFzdFJlY0VuZCk7CiAJCQlYYWN0TGFzdFJlY0VuZCA9IDA7CisJCX0KIAkJ cmV0dXJuIEludmFsaWRUcmFuc2FjdGlvbklkOwogCX0KIAotLSAKMi41Mi4wCgo= --000000000000075e64064b8ec5bc--