Re: Confused about TransactionIdSetTreeStatus - Mailing list pgsql-hackers

From Heikki Linnakangas
Subject Re: Confused about TransactionIdSetTreeStatus
Date
Msg-id 8eaf673a-b434-54c8-c31f-8c624b9b5fb3@iki.fi
Whole thread Raw
In response to Confused about TransactionIdSetTreeStatus  (Japin Li <japinli@hotmail.com>)
Responses Re: Confused about TransactionIdSetTreeStatus  (Japin Li <japinli@hotmail.com>)
List pgsql-hackers
On 25/10/2022 12:02, Japin Li wrote:
> I'm a bit confused about TransactionIdSetTreeStatus, the comment says if
> subtransactions cross multiple CLOG pages, it will mark the subxids, that
> are on the same page as the main transaction, as sub-committed, and then
> set main transaction and subtransactions to committed (step 2).
> 
>   * Example:
>   *      TransactionId t commits and has subxids t1, t2, t3, t4
>   *      t is on page p1, t1 is also on p1, t2 and t3 are on p2, t4 is on p3
>   *      1. update pages2-3:
>   *                  page2: set t2,t3 as sub-committed
>   *                  page3: set t4 as sub-committed
>   *      2. update page1:
>   *                  set t1 as sub-committed,
>   *                  then set t as committed,
>                      then set t1 as committed
>   *      3. update pages2-3:
>   *                  page2: set t2,t3 as committed
>   *                  page3: set t4 as committed
> 
> However, the code marks the main transaction and subtransactions directly
> to the committed.

Hmm, yeah, step 2 in this example doesn't match reality. We actually set 
t and t1 directly as committed. The explanation above that comment is 
correct, but the example is not. It used to work the way the example 
says, but that was changed in commit 
06da3c570f21394003fc392d80f54862f7dec19f. Ironically, that commit also 
added the outdated comment.

The correct example would be:

TransactionId t commits and has subxids t1, t2, t3, t4 t is on page p1, 
t1 is also on p1, t2 and t3 are on p2, t4 is on p3
1. update pages2-3:
       page2: set t2,t3 as sub-committed
       page3: set t4 as sub-committed
2. update page1:
       page1: set t,t1 as committed,
3. update pages2-3:
       page2: set t2,t3 as committed
       page3: set t4 as committed

- Heikki




pgsql-hackers by date:

Previous
From: Andrew Dunstan
Date:
Subject: Re: [PATCH] Add `verify-system` sslmode to use system CA pool for server cert
Next
From: David Christensen
Date:
Subject: Re: [PATCHES] Post-special page storage TDE support