summaryrefslogtreecommitdiff
path: root/src/include
diff options
context:
space:
mode:
authorAlvaro Herrera2018-01-05 15:17:10 +0000
committerAlvaro Herrera2018-01-05 15:17:10 +0000
commitf68c49f86aea271a083f26147a8648ac74ed2e76 (patch)
treeb1f70a9f60121363ab201d90f47b84583eb40848 /src/include
parent2d03daa7b8b1b8061afa80bdec85da5d761e1023 (diff)
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
Diffstat (limited to 'src/include')
-rw-r--r--src/include/replication/reorderbuffer.h2
1 files changed, 2 insertions, 0 deletions
diff --git a/src/include/replication/reorderbuffer.h b/src/include/replication/reorderbuffer.h
index 2ce2c2189f6..17fe811d6e2 100644
--- a/src/include/replication/reorderbuffer.h
+++ b/src/include/replication/reorderbuffer.h
@@ -153,6 +153,8 @@ typedef struct ReorderBufferTXN
* * plain abort record
* * prepared transaction abort
* * error during decoding
+ * * for a crashed transaction, the LSN of the last change, regardless of
+ * what it was.
* ----
*/
XLogRecPtr final_lsn;