postgres.git / summary / log / commit / refs

commit    09cb8512ff11bd2c58b3d28bce9501e76bd12eff
Author:   Fujii Masao <fujii@postgresql.org>
Date:     Thu Mar 25 02:23:30 2021 +0000
First released in: 14.0, 9.6.22, 10.17, 11.12, 12.7, 13.3

    Fix bug in WAL replay of COMMIT_TS_SETTS record.
    
    Previously the WAL replay of COMMIT_TS_SETTS record called
    TransactionTreeSetCommitTsData() with the argument write_xlog=true,
    which generated and wrote new COMMIT_TS_SETTS record.
    This should not be acceptable because it's during recovery.
    
    This commit fixes the WAL replay of COMMIT_TS_SETTS record
    so that it calls TransactionTreeSetCommitTsData() with write_xlog=false
    and doesn't generate new WAL during recovery.
    
    Back-patch to all supported branches.
    
    Reported-by: lx zou <zoulx1982@163.com>
    Author: Fujii Masao
    Reviewed-by: Alvaro Herrera
    Discussion: https://postgr.es/m/16931-620d0f2fdc6108f1@postgresql.org


src/backend/access/transam/commit_ts.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/backend/access/transam/commit_ts.c b/src/backend/access/transam/commit_ts.c index b54b3e1a5f3..030740fcf34 100644 --- a/src/backend/access/transam/commit_ts.c +++ b/src/backend/access/transam/commit_ts.c @@ -1024,7 +1024,7 @@ commit_ts_redo(XLogReaderState *record) subxids = NULL; TransactionTreeSetCommitTsData(setts->mainxid, nsubxids, subxids, - setts->timestamp, setts->nodeid, true); + setts->timestamp, setts->nodeid, false); if (subxids) pfree(subxids); } [parent: d75edab42c66]