Re: 2PC support for pglogical

Поиск
Список
Период
Сортировка
От Craig Ringer
Тема Re: 2PC support for pglogical
Дата
Msg-id CAMsr+YGyDDjn=oMPDDsVdrMb3E_Vx_ek8zA3Tn+RFiGep7Yh-Q@mail.gmail.com
обсуждение исходный текст
Ответ на 2PC support for pglogical  (Stas Kelvich <s.kelvich@postgrespro.ru>)
Ответы Re: 2PC support for pglogical  (Robert Haas <robertmhaas@gmail.com>)
Список pgsql-hackers
On 10 March 2016 at 22:50, Stas Kelvich <s.kelvich@postgrespro.ru> wrote:
Hi.

Here is proof-of-concept version of two phase commit support for logical replication.

I missed this when you posted it, so sorry for the late response.

I've read through this but not tested it yet. I really appreciate you doing it, it's been on my wishlist/backburner for ages.

On reading through the patch I noticed that there doesn't seem to be any consideration of locking. The prepared xact can still hold strong locks on catalogs. How's that handled? I think Robert's group locking stuff is what we'll want here - for a prepared xact we can join the prepared xact as a group lock member so we inherit its locks. Right now if you try DDL in a prepared xact I suspect it'll break.

On a more minor note, I think the pglogical_output and pglogical changes should be a separate patch to the patch to core PostgreSQL. Keep them separate. "git format-patch" on a tree is good for this.




A few misc comments on my first read-through:

Shouldn't PGLOGICAL_COMMIT etc be an enum { } ?


+/*
+ * ParsePrepareRecord
+ */

isn't a super-helpful comment.

Not sure what this means:

+ /* Ignoring abortrels? */
+ bufptr += MAXALIGN(hdr->nabortrels * sizeof(RelFileNode));


typo:

+ ... shortcut for coomiting bare xact ...



DecodePrepare seems to be mostly a copy of DecodeCommit. Can that be done with less duplication?

Not sure I understand the rationale of "bare xact" as terminology/naming, e.g. ReorderBufferCommitBareXact . I guess you're getting at the fact that it's just a commit or rollback, not data. Phase2 ? 2PC?
 
* Seems that only reliable way to get GID during replay of commit/rollback prepared is to force postgres to write GID in corresponding records, otherwise we can lose correspondence between xid and gid  if we are replaying data from wal sender while transaction was commited some time ago. So i’ve changed postgres to write gid’s not only on prepare, but also on commit/rollback prepared. That should be done only in logical level, but now I just want to here some other opinions on that.

That sounds sensible.
 
* Abort prepared xlog record also lack database information. Normally logical decoding just cleans reorder buffer when facing abort, but in case of 2PC we should send it to callbacks anyway. So I’ve added that info to abort records.

I was wondering what that was. Again, seems sensible, though I'm not totally convinced of the naming.

--
 Craig Ringer                   http://www.2ndQuadrant.com/
 PostgreSQL Development, 24x7 Support, Training & Services

В списке pgsql-hackers по дате отправления:

Предыдущее
От: Tatsuo Ishii
Дата:
Сообщение: Re: multivariate statistics v14
Следующее
От: Michael Paquier
Дата:
Сообщение: Re: Some messages of pg_rewind --debug not getting translated