postgres.git / summary / log / commit / refs

commit    8bca4476f9f9b364506f20973f9a3635101bbbb0
Author:   Michael Paquier <michael@paquier.xyz>
Date:     Fri Jul 04 06:10:25 2025 +0000
First released in: 13.22, 14.19, 15.14, 16.10, 17.6, 18.0

    Disable commit timestamps during bootstrap
    
    Attempting to use commit timestamps during bootstrapping leads to an
    assertion failure, that can be reached for example with an initdb -c
    that enables track_commit_timestamp.  It makes little sense to register
    a commit timestamp for a BootstrapTransactionId, so let's disable the
    activation of the module in this case.
    
    This problem has been independently reported once by each author of this
    commit.  Each author has proposed basically the same patch, relying on
    IsBootstrapProcessingMode() to skip the use of commit_ts during
    bootstrap.  The test addition is a suggestion by me, and is applied down
    to v16.
    
    Author: Hayato Kuroda <kuroda.hayato@fujitsu.com>
    Author: Andy Fan <zhihuifan1213@163.com>
    Reviewed-by: Bertrand Drouvot <bertranddrouvot.pg@gmail.com>
    Reviewed-by: Fujii Masao <masao.fujii@oss.nttdata.com>
    Reviewed-by: Michael Paquier <michael@paquier.xyz>
    Discussion: https://postgr.es/m/OSCPR01MB14966FF9E4C4145F37B937E52F5102@OSCPR01MB14966.jpnprd01.prod.outlook.com
    Discussion: https://postgr.es/m/87plejmnpy.fsf@163.com
    Backpatch-through: 13


src/backend/access/transam/commit_ts.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/backend/access/transam/commit_ts.c b/src/backend/access/transam/commit_ts.c index 31b66425647..21b8116d798 100644 --- a/src/backend/access/transam/commit_ts.c +++ b/src/backend/access/transam/commit_ts.c @@ -637,6 +637,13 @@ ActivateCommitTs(void) TransactionId xid; int pageno; + /* + * During bootstrap, we should not register commit timestamps so skip the + * activation in this case. + */ + if (IsBootstrapProcessingMode()) + return; + /* If we've done this already, there's nothing to do */ LWLockAcquire(CommitTsLock, LW_EXCLUSIVE); if (commitTsShared->commitTsActive) [parent: f9ba071cc5bd]