Re: BUG #16931: source code problem about commit_ts

Fujii Masao <masao.fujii@oss.nttdata.com>

From: Fujii Masao <masao.fujii@oss.nttdata.com>
To: zoulx1982@163.com, pgsql-bugs@lists.postgresql.org
Date: 2021-03-18T10:19:10Z
Lists: pgsql-bugs

Commits

Same data as JSON: GET /api/v1/messages/:b64id/commits the thread's linked commits as JSON, with link sources. API reference →
  1. Remove leftover dead code from commit_ts.h.

  2. Remove COMMIT_TS_SETTS record.

  3. Fix bug in WAL replay of COMMIT_TS_SETTS record.

Attachments


On 2021/03/18 13:36, PG Bug reporting form wrote:
> The following bug has been logged on the website:
> 
> Bug reference:      16931
> Logged by:          lx zou
> Email address:      zoulx1982@163.com
> PostgreSQL version: 13.2
> Operating system:   Linux
> Description:
> 
> Hi,
> recently i am reading commit ts code, and i have a problem about it.
> i found commit_ts_redo call TransactionTreeSetCommitTsData with last param
> `write_xlog`  true,
> but RecordTransactionCommitPrepared and RecordTransactionCommit call
> TransactionTreeSetCommitTsData
> with `write_xlog` false, which cause there are never xlog with commit_ts -
> COMMIT_TS_SETTS type.
> thanks for your time.

I guess that TransactionTreeSetCommitTsData(write_xlog=true) is basically
used by some extensions using commit_ts.

IIUC commit_ts_redo() is called during recovery. So it's strange that
commit_ts_redo() calls TransactionTreeSetCommitTsData() with write_xlog=true
because no new WAL can be generated during recovery. Probably this is a bug,
and it should be called with write_xlog=false, instead. Patch attached.

Also one problem is that there is no test for WAL replay of COMMIT_TS_SETTS
for now. Maybe this is why we could not find that bug.

Regards,

-- 
Fujii Masao
Advanced Computing Technology Center
Research and Development Headquarters
NTT DATA CORPORATION