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 1wlSUx-000BVY-1T for pgsql-hackers@arkaria.postgresql.org; Sun, 19 Jul 2026 14:28: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 1wlSUu-0015L3-2Q for pgsql-hackers@arkaria.postgresql.org; Sun, 19 Jul 2026 14:28:04 +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 1wlSUu-0015Ku-15 for pgsql-hackers@lists.postgresql.org; Sun, 19 Jul 2026 14:28:04 +0000 Received: from mail-pj1-x102f.google.com ([2607:f8b0:4864:20::102f]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wlSUq-00000000yeh-3wt9 for pgsql-hackers@lists.postgresql.org; Sun, 19 Jul 2026 14:28:02 +0000 Received: by mail-pj1-x102f.google.com with SMTP id 98e67ed59e1d1-38511175ad3so7692029a91.2 for ; Sun, 19 Jul 2026 07:28:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1784471280; x=1785076080; darn=lists.postgresql.org; h=content-type:mime-version:message-id:date:subject:to:from:from:to :cc:subject:date:message-id:reply-to:content-type; bh=hK6oYRiVIgIjdNy+/iIRMNN32wN9Ce5/K8l825klQHQ=; b=iZFI9ZnEJUBlXuVU+cSVHS1QsABjL/DHsHXIjZZKI/HeCByhhc5ViRG1IAvwlakmt9 IkjWz0Pkv56lE6sJsz8Rt7Idt/2iLtRPTzPYAunJ8lqlHHZ4ssZbJUIsDVncwXTtps7Y kZ/py+H6NL0QDT8fFgkjRoUmZKKJaPt3+Qc3mfMh9T7HELBwizwiC4qdxJK9KkK37+ZJ Rt2K43NbDHwzPynmvlxjZU50LMQevfjEg621vrQETmkBAdRUFbtxq683vdCK99f4XQ7h tP9S7XbAMXrdJWzTq7VFpjKtnaY2jD2B8WUu90HMQN+FGOF9JgjlxetrsF8XZp22h6eX Qg5g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784471280; x=1785076080; h=content-type:mime-version:message-id:date:subject:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=hK6oYRiVIgIjdNy+/iIRMNN32wN9Ce5/K8l825klQHQ=; b=UU5Qi9i6goahSJzdQv5d2KCltWYhpYdCGgGVH9GJ1IxZVNRrT+GL3aVQlhsrq8xC5c wrULHUPU6DJRaAXk2F5NIm4KdmQlYFPKk5oLve08vdqNwTvoMEOu+JkzYyf4HCDbSSGm wUx7iaxKxpqmji2iS1arTn6tW+avIFvt6pKFOOuObstJyPP0HiIk48U4nrj/2KKV1wBq tqzUFZpCCit5gPdf2jJ1VHlvNPmri6SAMcGHGwSzpnl67rQZkjHPOvWCRYUdcgdvYDfD uWZ+BK9GFf/zTdDPZW1Q6IfBuf4NuaFLu2bk921D1h7TNo/obyG71Daa9y8a2JTL1ihM UbrA== X-Gm-Message-State: AOJu0Yxzw8kbZ788hKemTWRpVp+MOKcLNHkAQeVIQ58mqvUqkne/N+bE Fdy7dVeEYSYdNAuK6Ab+GSfyf4f+93xoEe3xPVJxbbWOQYsDY1xEzKEprC6Uu1C2fuA= X-Gm-Gg: AfdE7clJ8OayRiRTxiIPdXFDn716dOUSFdeJEvseyLY3QnK22jJT5SW/8oqScwcJ/Q0 Qsuq8d9ED2qsZU0XLF06oshU7pHOGa3r84+Wc2iWowKfUTZAYCHRdR8JzkCy9EwaFykx3Jt8H8M Sg0CIhyqTBZsEtPbwPRPHZFeHj1FqnZ4X9WQ72Jr6dkIrwbnJHZtAsGJlweewKJozrqUzxUsruB 8M7Xi9tpNqQpXumM/Y6N6hgSCV2nVvTWTVsQshYt8yCnQlhKczmqLIODjVks9X0ysJvFmj/Afmk p/uhxeBVHxYgofGY81RMBXBvUN8Lwx4u/hKclltvnJNLouG6BrqvWjonApdDppCXnOyW1t11NOW 04ozkFtyfXvs8stESI7EmLbZCEgsQFYrmrJpEgE9DqxkVj/McgmaZ/KOmkJ5HUEqz/Y48cmLn2l 2QynJfMyjz/8KDYRYYRwNwI5J9A5JpYdgpRHLTBO1+XlEIjjaOtT0cQ+FTGqAksbac0xNv4Pus8 vTPY1WDynKEZ+fnlgJtbg== X-Received: by 2002:a17:90a:d605:b0:38d:b36e:982d with SMTP id 98e67ed59e1d1-38e4b5442bemr11048692a91.29.1784471280347; Sun, 19 Jul 2026 07:28:00 -0700 (PDT) Received: from 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa ([220.93.92.66]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-38e60cc2ad5sm344396a91.4.2026.07.19.07.27.58 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 19 Jul 2026 07:27:58 -0700 (PDT) From: Paul Kim To: pgsql-hackers@lists.postgresql.org Subject: Restore vacuum_delay_point() in GIN posting-tree leaf vacuum Date: Sun, 19 Jul 2026 23:27:54 +0900 Message-ID: <178447127453.110.12276981925360691905@mail.gmail.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============6537667262090389949==" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --===============6537667262090389949== Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Hi, ginVacuumPostingTreeLeaves() sweeps the leaf pages of a GIN posting tree via their rightlinks, but that loop has no vacuum_delay_point() (and hence no CHECK_FOR_INTERRUPTS()), unlike the sibling loops in ginbulkdelete() and ginvacuumcleanup(). The call used to be there: it was dropped when fd83c83d094 rewrote this cleanup from a recursive walk into the current iterative sweep, and never re-added to the new loop. That commit was only about fixing a deadlock, so the removal looks inadvertent. A posting tree holds all TIDs for a single key, so for a common key it can span many leaf pages. While one such tree is being vacuumed, the operation now ignores vacuum_cost_delay and cannot be interrupted (query cancel, statement_timeout, or autovacuum cancellation when another backend wants a conflicting lock) until the whole sweep finishes; a corrupted rightlink forming a cycle turns it into an uninterruptible hang. The attached patch restores the call, placed where the buffer has already been released so no content lock is held across the delay. It is against master; on branches before 18 vacuum_delay_point() takes no argument (the is_analyze parameter was added by e5b0b0ce150), so the back-branch version is just "vacuum_delay_point();". I left the initial leftmost-descent loop in the same function as-is, since it mirrors the entry-tree descent in ginbulkdelete(), which likewise has no delay point. Thanks, Paul --===============6537667262090389949== Content-Type: text/x-patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="v1-0001-Restore-vacuum_delay_point-in-GIN-posting-tree-le.patch" MIME-Version: 1.0 RnJvbSBkOWI1ZGRiM2NiMGNmYjU1ZDQxOGEwOWY1NzFhNzhlZTA2OWViM2UxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQYXVsIEtpbSA8bW9rMDMxMjdAZ21haWwuY29tPgpEYXRlOiBT dW4sIDE5IEp1bCAyMDI2IDIzOjA4OjEyICswOTAwClN1YmplY3Q6IFtQQVRDSCB2MV0gUmVzdG9y ZSB2YWN1dW1fZGVsYXlfcG9pbnQoKSBpbiBHSU4gcG9zdGluZy10cmVlIGxlYWYKIHZhY3V1bQoK Q29tbWl0IGZkODNjODNkMDk0IHR1cm5lZCB0aGUgcmVjdXJzaXZlIHBvc3RpbmctdHJlZSBjbGVh bnVwIGluCmdpblZhY3V1bVBvc3RpbmdUcmVlTGVhdmVzKCkgaW50byBhbiBpdGVyYXRpdmUgc3dl ZXAgdGhhdCBmb2xsb3dzIHRoZQp0cmVlJ3MgbGVhZiBwYWdlcyB2aWEgdGhlaXIgcmlnaHRsaW5r cy4gIFRoZSByZWN1cnNpdmUgdmVyc2lvbiBjYWxsZWQKdmFjdXVtX2RlbGF5X3BvaW50KCkgd2hp bGUgcHJvY2Vzc2luZyB0aGUgdHJlZSwgYnV0IHRoYXQgY2FsbCB3YXMgcmVtb3ZlZAphbmQgbmV2 ZXIgcmUtYWRkZWQgdG8gdGhlIG5ldyBsb29wLiAgQXMgdGhhdCBjb21taXQgb25seSBzZXQgb3V0 IHRvIGZpeCBhCmRlYWRsb2NrLCB0aGUgcmVtb3ZhbCBhcHBlYXJzIHRvIGhhdmUgYmVlbiB1bmlu dGVudGlvbmFsLgoKQ29uc2VxdWVudGx5IHRoZSBsZWFmLXBhZ2Ugc3dlZXAgb2YgYSBzaW5nbGUg cG9zdGluZyB0cmVlIHJ1bnMgd2l0aCBubwp2YWN1dW1fZGVsYXlfcG9pbnQoKSwgYW5kIHRoZXJl Zm9yZSBubyBDSEVDS19GT1JfSU5URVJSVVBUUygpLiAgQSBwb3N0aW5nCnRyZWUgc3RvcmVzIGFs bCB0aGUgVElEcyBmb3Igb25lIGluZGV4ZWQga2V5LCBzbyBmb3IgYSBmcmVxdWVudGx5LW9jY3Vy cmluZwprZXkgaXQgY2FuIHNwYW4gYSBsYXJnZSBudW1iZXIgb2YgbGVhZiBwYWdlcy4gIFdoaWxl IHN1Y2ggYSB0cmVlIGlzIGJlaW5nCnZhY3V1bWVkIHRoZSBvcGVyYXRpb24gaWdub3JlcyB2YWN1 dW1fY29zdF9kZWxheSBhbmQgZG9lcyBub3QgcmVzcG9uZCB0bwpxdWVyeSBjYW5jZWxsYXRpb24g b3Igc3RhdGVtZW50X3RpbWVvdXQ7IGFuIGF1dG92YWN1dW0gd29ya2VyIGxpa2V3aXNlCmNhbm5v dCBiZSBpbnRlcnJ1cHRlZCBtaWQtc3dlZXAgd2hlbiBhbm90aGVyIGJhY2tlbmQgcmVxdWVzdHMg YSBjb25mbGljdGluZwpsb2NrLiAgQSBjb3JydXB0ZWQgcmlnaHRsaW5rIHRoYXQgZm9ybXMgYSBj eWNsZSBtYWtlcyB0aGUgbG9vcCBydW4KdW5pbnRlcnJ1cHRpYmx5IGZvcmV2ZXIuCgpSZXN0b3Jl IHRoZSBjYWxsLCBwbGFjZWQgYWZ0ZXIgdGhlIGN1cnJlbnQgcGFnZSBoYXMgYmVlbiB1bmxvY2tl ZCBhbmQKcmVsZWFzZWQgc28gdGhhdCBubyBidWZmZXIgY29udGVudCBsb2NrIGlzIGhlbGQgYWNy b3NzIGEgcG90ZW50aWFsIGRlbGF5CihjZi4gMjFjMjdhZjY1ZmIpLiAgVGhlIHNpYmxpbmcgbG9v cHMgaW4gZ2luYnVsa2RlbGV0ZSgpIGFuZApnaW52YWN1dW1jbGVhbnVwKCkgYWxyZWFkeSBjYWxs IHZhY3V1bV9kZWxheV9wb2ludCgpIG9uY2UgcGVyIHBhZ2UuCgpCYWNrLXBhdGNoIHRvIGFsbCBz dXBwb3J0ZWQgYnJhbmNoZXMsIHdoaWNoIGFsbCBjb250YWluIGZkODNjODNkMDk0LgotLS0KIHNy Yy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2ludmFjdXVtLmMgfCAyICsrCiAxIGZpbGUgY2hhbmdlZCwg MiBpbnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2dpbi9naW52 YWN1dW0uYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2ludmFjdXVtLmMKaW5kZXggODQwNTQz ZWI2NjQuLmEwYjgxYTIxNWE5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dp bnZhY3V1bS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2ludmFjdXVtLmMKQEAgLTQy OSw2ICs0MjksOCBAQCBnaW5WYWN1dW1Qb3N0aW5nVHJlZUxlYXZlcyhHaW5WYWN1dW1TdGF0ZSAq Z3ZzLCBCbG9ja051bWJlciBibGtubykKIAkJaWYgKGJsa25vID09IEludmFsaWRCbG9ja051bWJl cikKIAkJCWJyZWFrOwogCisJCXZhY3V1bV9kZWxheV9wb2ludChmYWxzZSk7CisKIAkJYnVmZmVy ID0gUmVhZEJ1ZmZlckV4dGVuZGVkKGd2cy0+aW5kZXgsIE1BSU5fRk9SS05VTSwgYmxrbm8sCiAJ CQkJCQkJCQlSQk1fTk9STUFMLCBndnMtPnN0cmF0ZWd5KTsKIAkJTG9ja0J1ZmZlcihidWZmZXIs IEdJTl9FWENMVVNJVkUpOwotLSAKMi41MC4xIChBcHBsZSBHaXQtMTU1KQoK --===============6537667262090389949==--