]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
Fix stale comment in parallel_vacuum_main(). master github/master
authorMasahiko Sawada <msawada@postgresql.org>
Wed, 29 Jul 2026 16:52:07 +0000 (09:52 -0700)
committerMasahiko Sawada <msawada@postgresql.org>
Wed, 29 Jul 2026 16:52:07 +0000 (09:52 -0700)
The comment claimed that a parallel vacuum worker has only the
PROC_IN_VACUUM flag because parallel vacuum is not supported for
autovacuum, but commit 1ff3180ca01 allowed autovacuum to use parallel
vacuum workers.

The assertion itself still holds: the leader, whether a backend
running VACUUM or an autovacuum worker, sets PROC_IN_VACUUM before
taking its snapshot, and a parallel worker inherits the flag when
importing the leader's snapshot. The leader's other flags don't reach
the worker, since the snapshot import copies only the PROC_XMIN_FLAGS
bits and PROC_IS_AUTOVACUUM is never set on parallel workers, which
run as regular background workers. Reword the comment to explain that.

Oversight in commit 1ff3180ca01.

Author: Bharath Rupireddy <bharath.rupireddyforpostgres@gmail.com>
Reviewed-by: Masahiko Sawada <sawada.mshk@gmail.com>
Reviewed-by: Chao Li <li.evan.chao@gmail.com>
Discussion: https://postgr.es/m/CALj2ACVwQ4WABqq8Lnf+VZEJ45jcTFhyFLFr_ctfS4=QLL-r5w@mail.gmail.com
Backpatch-through: 19

src/backend/commands/vacuumparallel.c

index 41cefcfde54fed40b0f9738484ca2e05f2187616..dd355a3d246c075f3551779446b41a246f86d610 100644 (file)
@@ -1209,8 +1209,16 @@ parallel_vacuum_main(dsm_segment *seg, shm_toc *toc)
        ErrorContextCallback errcallback;
 
        /*
-        * A parallel vacuum worker must have only PROC_IN_VACUUM flag since we
-        * don't support parallel vacuum for autovacuum as of now.
+        * A parallel vacuum worker carries only the PROC_IN_VACUUM flag. The
+        * leader, whether it's a backend running a VACUUM command or an
+        * autovacuum worker, sets PROC_IN_VACUUM when it starts vacuuming the
+        * table, and the worker inherits the flag by importing the leader's
+        * snapshot (see ProcArrayInstallRestoredXmin). The leader's other flags
+        * don't reach the worker: the snapshot import copies only the
+        * PROC_XMIN_FLAGS bits, so PROC_VACUUM_FOR_WRAPAROUND isn't carried
+        * over, and PROC_IS_AUTOVACUUM is never set on the worker in the first
+        * place since parallel workers run as regular background workers, not
+        * autovacuum workers.
         */
        Assert(MyProc->statusFlags == PROC_IN_VACUUM);