diff options
author | Andres Freund <andres@anarazel.de> | 2017-06-18 18:48:22 -0700 |
---|---|---|
committer | Andres Freund <andres@anarazel.de> | 2017-06-18 19:12:56 -0700 |
commit | 3bdea167eb01491a4898e977d308508374e97bfa (patch) | |
tree | 8f1f4b527fca3c36448c11903c20540fb560526b /src/include/replication/reorderbuffer.h | |
parent | b4166a8df914f56b3b7d2dc1b74897e7525c5cea (diff) |
Fix leaking of small spilled subtransactions during logical decoding.
When, during logical decoding, a transaction gets too big, it's
contents get spilled to disk. Not just the top-transaction gets
spilled, but *also* all of its subtransactions, even if they're not
that large themselves. Unfortunately we didn't clean up
such small spilled subtransactions from disk.
Fix that, by keeping better track of whether a transaction has been
spilled to disk.
Author: Andres Freund
Reported-By: Dmitriy Sarafannikov, FabrÃzio de Royes Mello
Discussion:
https://postgr.es/m/1457621358.355011041@f382.i.mail.ru
https://postgr.es/m/CAFcNs+qNMhNYii4nxpO6gqsndiyxNDYV0S=JNq0v_sEE+9PHXg@mail.gmail.com
Backpatch: 9.4-, where logical decoding was introduced
Diffstat (limited to 'src/include/replication/reorderbuffer.h')
-rw-r--r-- | src/include/replication/reorderbuffer.h | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/src/include/replication/reorderbuffer.h b/src/include/replication/reorderbuffer.h index 17e47b385b7..8d8d418e8e3 100644 --- a/src/include/replication/reorderbuffer.h +++ b/src/include/replication/reorderbuffer.h @@ -213,6 +213,15 @@ typedef struct ReorderBufferTXN uint64 nentries_mem; /* + * Has this transaction been spilled to disk? It's not always possible to + * deduce that fact by comparing nentries with nentries_mem, because + * e.g. subtransactions of a large transaction might get serialized + * together with the parent - if they're restored to memory they'd have + * nentries_mem == nentries. + */ + bool serialized; + + /* * List of ReorderBufferChange structs, including new Snapshots and new * CommandIds */ |