Re: [HACKERS] logical decoding of two-phase transactions
Andres Freund <andres@anarazel.de>
On 2018-08-06 21:06:13 +0300, Arseny Sher wrote: > Hello, > > I have looked through the patches. I will first describe relativaly > serious issues I see and then proceed with small nitpicking. > > - On decoding of aborted xacts. The idea to throw an error once we > detect the abort is appealing, however I think you will have problems > with subxacts in the current implementation. What if subxact issues > DDL and then aborted, but main transaction successfully committed? I don't see a fundamental issue here. I've not reviewed the current patchset meaningfully, however. Do you see a fundamental issue here? > - Decoding transactions at PREPARE record changes rules of the "we ship > all commits after lsn 'x'" game. Namely, it will break initial > tablesync: what if consistent snapshot was formed *after* PREPARE, but > before COMMIT PREPARED, and the plugin decides to employ 2pc? Instead > of getting inital contents + continious stream of changes the receiver > will miss the prepared xact contents and raise 'prepared xact doesn't > exist' error. I think the starting point to address this is to forbid > two-phase decoding of xacts with lsn of PREPARE less than > snapbuilder's start_decoding_at. > Yea, that sounds like it need to be addressed. > - Currently we will call abort_prepared cb even if we failed to actually > prepare xact due to concurrent abort. I think it is confusing for > users. We should either handle this by remembering not to invoke > abort_prepared in these cases or at least document this behaviour, > leaving this problem to the receiver side. What precisely do you mean by "concurrent abort"? > - I find it suspicious that DecodePrepare completely ignores actions of > SnapBuildCommitTxn. For example, to execute invalidations, the latter > sets base snapshot if our xact (or subxacts) did DDL and the snapshot > not set yet. My fantasy doesn't hint me the concrete example > where this would burn at the moment, but it should be considered. Yea, I think this need to mirror the actions (and thus generalize the code to avoid duplication) > Now, the bikeshedding. > > First patch: > - I am one of those people upthread who don't think that converting > flags to bitmask is beneficial -- especially given that many of them > are mutually exclusive, e.g. xact can't be committed and aborted at > the same time. Apparently you have left this to the committer though. Similar. - Andres
Commits
-
Add prepare API support for streaming transactions in logical replication.
- 63cf61cdeb7b 15.0 landed
-
Doc: minor improvements for logical replication protocol documentation.
- a5cb4f9829fb 15.0 cited
-
Fix test failure in 021_twophase.pl.
- eaf5321c3524 15.0 landed
-
Refactor to make common functions in proto.c and worker.c.
- 91f9861242cd 15.0 landed
-
Unify PostgresNode's new() and get_new_node() methods
- 201a76183e20 15.0 cited
-
Fix potential buffer overruns in proto.c.
- 01c3adcdd85f 15.0 landed
-
Add support for prepared transactions to built-in logical replication.
- a8fd13cab0ba 15.0 cited
-
Refactor function parse_subscription_options.
- 8aafb0261675 15.0 cited
-
Allow enabling two-phase option via replication protocol.
- cda03cfed6b8 15.0 cited
-
Don't use Asserts to check for violations of replication protocol.
- fe6a20ce54cb 14.0 cited
-
Improve psql tab completion for options of subcriptions and publications
- d08237b5b494 14.0 cited
-
Rearrange logrep worker's snapshot handling some more.
- 3a09d75b4f6c 14.0 cited
-
doc: Update information of new messages for logical replication.
- 15c1a9d9cb76 14.0 cited
-
ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION
- 82ed7748b710 14.0 cited
-
Allow pgoutput to send logical decoding messages.
- ac4645c0157f 14.0 cited
-
Refactor function parse_output_parameters.
- 531737ddad21 14.0 cited
-
Avoid repeated decoding of prepared transactions after a restart.
- 8bdb1332eb51 14.0 cited
-
Fix an oversight in ReorderBufferFinishPrepared.
- ade89ba5f408 14.0 landed
-
Allow multiple xacts during table sync in logical replication.
- ce0fdbfe9722 14.0 cited
-
Fix replication of in-progress transactions in tablesync worker.
- 0926e96c4934 14.0 cited
-
Fix 'skip-empty-xacts' option in test_decoding for streaming mode.
- 9653f24ad830 14.0 cited
-
Use Enum for top level logical replication message types.
- 644f0d7cc9c2 14.0 cited
-
Add support for streaming to built-in logical replication.
- 464824323e57 14.0 cited
-
Fix the logical streaming test.
- 82a0ba7707e0 14.0 cited
-
Implement streaming mode in ReorderBuffer.
- 7259736a6e5b 14.0 cited
-
Extend the logical decoding output plugin API with stream methods.
- 45fdc9738b36 14.0 cited
-
Store 2PC GID in commit/abort WAL recs for logical decoding
- 1eb6d6527aae 11.0 cited