Re: Transactions involving multiple postgres foreign servers, take 2 - Mailing list pgsql-hackers
From | Kyotaro Horiguchi |
---|---|
Subject | Re: Transactions involving multiple postgres foreign servers, take 2 |
Date | |
Msg-id | 20210608.170958.105249341385152946.horikyota.ntt@gmail.com Whole thread Raw |
In response to | RE: Transactions involving multiple postgres foreign servers, take 2 ("tsunakawa.takay@fujitsu.com" <tsunakawa.takay@fujitsu.com>) |
Responses |
RE: Transactions involving multiple postgres foreign servers, take 2
|
List | pgsql-hackers |
(I have caught up here. Sorry in advance for possible pointless discussion by me..) At Tue, 8 Jun 2021 00:47:08 +0000, "tsunakawa.takay@fujitsu.com" <tsunakawa.takay@fujitsu.com> wrote in > From: Masahiko Sawada <sawada.mshk@gmail.com> > > I think we should not reinterpret the severity of the error and lower > > it. Especially, in this case, any kind of errors can be thrown. It > > could be such a serious error that FDW developer wants to report to > > the client. Do we lower even PANIC to a lower severity such as > > WARNING? That's definitely a bad idea. If we don’t lower PANIC whereas > > lowering ERROR (and FATAL) to WARNING, why do we regard only them as > > non-error? > > Why does the client have to know the error on a remote server, whereas the global transaction itself is destined to commit? I think the discussion is based the behavior that any process that is responsible for finishing the 2pc-commit continue retrying remote commits until all of the remote-commits succeed. Maybe in most cases the errors duing remote-prepared-commit could be retry-able but as Sawada-san says I'm also not sure it's always the case. On the other hand, it could be said that we have no other way than retrying the remote-commits if we want to get over, say, instant network failures automatically. It is somewhat similar to WAL-restoration that continues complaining for recovery_commands failure without exiting. > FYI, the tx_commit() in the X/Open TX interface and the UserTransaction.commit() in JTA don't return such an error, IIRC. Do TX_FAIL and SystemException serve such a purpose? I don't feel like that. I'm not sure about how JTA works in detail, but doesn't UserTransaction.commit() return HeuristicMixedExcpetion when some of relevant updates have been committed but other not? Isn't it the same state with the case where some of the remote servers failed on remote-commit while others are succeeded? (I guess that UserTransaction.commit() would throw RollbackException if remote-prepare has been failed for any of the remotes.) > [Tuxedo manual (Japanese)] > https://docs.oracle.com/cd/F25597_01/document/products/tuxedo/tux80j/atmi/rf3c91.htm > > > [JTA] > public interface javax.transaction.UserTransaction > public void commit() > throws RollbackException, HeuristicMixedException, > HeuristicRollbackException, SecurityException, > IllegalStateException, SystemException > > Throws: RollbackException > Thrown to indicate that the transaction has been rolled back rather than committed. > > Throws: HeuristicMixedException > Thrown to indicate that a heuristic decision was made and that some relevant updates have been > committed while others have been rolled back. > > Throws: HeuristicRollbackException > Thrown to indicate that a heuristic decision was made and that all relevant updates have been rolled > back. > > Throws: SecurityException > Thrown to indicate that the thread is not allowed to commit the transaction. > > Throws: IllegalStateException > Thrown if the current thread is not associated with a transaction. > > Throws: SystemException > Thrown if the transaction manager encounters an unexpected error condition. > > > Regards > Takayuki Tsunakawa -- Kyotaro Horiguchi NTT Open Source Software Center
pgsql-hackers by date: