pgsql: Fix failure to delete spill files of aborted transactions

From: Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>
To: pgsql-committers(at)postgresql(dot)org
Subject: pgsql: Fix failure to delete spill files of aborted transactions
Date: 2018-01-05 15:17:49
Message-ID: E1eXTkj-00055Z-LV@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Fix failure to delete spill files of aborted transactions

Logical decoding's reorderbuffer.c may spill transaction files to disk
when transactions are large. These are supposed to be removed when they
become "too old" by xid; but file removal requires the boundary LSNs of
the transaction to be known. The final_lsn is only set when we see the
commit or abort record for the transaction, but nothing sets the value
for transactions that crash, so the removal code misbehaves -- in
assertion-enabled builds, it crashes by a failed assertion.

To fix, modify the final_lsn of transactions that don't have a value
set, to the LSN of the very latest change in the transaction. This
causes the spilled files to be removed appropriately.

Author: Atsushi Torikoshi
Reviewed-by: Kyotaro HORIGUCHI, Craig Ringer, Masahiko Sawada
Discussion: https://postgr.es/m/54e4e488-186b-a056-6628-50628e4e4ebc@lab.ntt.co.jp

Branch
------
REL9_4_STABLE

Details
-------
https://git.postgresql.org/pg/commitdiff/f68c49f86aea271a083f26147a8648ac74ed2e76

Modified Files
--------------
src/backend/replication/logical/reorderbuffer.c | 19 +++++++++++++++++--
src/include/replication/reorderbuffer.h | 2 ++
2 files changed, 19 insertions(+), 2 deletions(-)

Browse pgsql-committers by date

  From Date Subject
Next Message Alvaro Herrera 2018-01-05 17:56:27 Re: pgsql: Implement channel binding tls-server-end-point for SCRAM
Previous Message Peter Eisentraut 2018-01-05 14:56:37 Re: pgsql: Implement channel binding tls-server-end-point for SCRAM