RE: Transactions involving multiple postgres foreign servers, take 2
От | tsunakawa.takay@fujitsu.com |
---|---|
Тема | RE: Transactions involving multiple postgres foreign servers, take 2 |
Дата | |
Msg-id | TYAPR01MB2990C47FBDE9C3D15DB671D3FE210@TYAPR01MB2990.jpnprd01.prod.outlook.com обсуждение исходный текст |
Ответ на | Re: Transactions involving multiple postgres foreign servers, take 2 (Masahiko Sawada <masahiko.sawada@2ndquadrant.com>) |
Ответы |
Re: Transactions involving multiple postgres foreign servers, take 2
|
Список | pgsql-hackers |
From: Masahiko Sawada <masahiko.sawada@2ndquadrant.com> > > If so, can't we stipulate that the FDW implementor should ensure that the > commit function always returns control to the caller? > > How can the FDW implementor ensure that? Since even palloc could call > ereport(ERROR) I guess it's hard to require that to all FDW > implementors. I think the what FDW commit routine will do is to just call xa_commit(), or PQexec("COMMIT PREPARED") in postgres_fdw. > It's still a rough idea but I think we can use TMASYNC flag and > xa_complete explained in the XA specification. The core transaction > manager call prepare, commit, rollback APIs with the flag, requiring > to execute the operation asynchronously and to return a handler (e.g., > a socket taken by PQsocket in postgres_fdw case) to the transaction > manager. Then the transaction manager continues polling the handler > until it becomes readable and testing the completion using by > xa_complete() with no wait, until all foreign servers return OK on > xa_complete check. Unfortunately, even Oracle and Db2 don't support XA asynchronous execution for years. Our DBMS Symfoware doesn't, either. I don't expect other DBMSs support it. Hmm, I'm afraid this may be one of the FDW's intractable walls for a serious scale-out DBMS. If we define asynchronous FDWroutines for 2PC, postgres_fdw would be able to implement them by using libpq asynchronous functions. But other DBMSscan't ... > > Maybe we can consider VOLATILE functions update data. That may be > overreaction, though. > > Sorry I don't understand that. The volatile functions are not pushed > down to the foreign servers in the first place, no? Ah, you're right. Then, the choices are twofold: (1) trust users in that their functions don't update data or the user'sclaim (specification) about it, and (2) get notification through FE/BE protocol that the remote transaction may haveupdated data. Regards Takayuki Tsunakawa
В списке pgsql-hackers по дате отправления: