Hannu Krosing <hannu@tm.ee> wrote:
> > I think a precommit-vote-commit phase of 2PC can be implemented in
> > command-lavel or protocol-level.
> >
> > In command-level 2PC, an user application (or application programmer)
> > must know the DBMS is clustered or not (to use PRECOMMIT command).
> >
> > In protocol-layer 2PC, no new SQL command is required.
> > A precommit-vote-commit phase will be called implicitly. It means an
> > user application can be used without any modification. An application
> > can use a traditional way (BEGIN...COMMIT).
>
> If application continues to use just BEGIN/COMMIT, then the protocol
> level must parse command stream and recognize COMMIT in order to replace
> it with PRECOMMIT, COMMIT.
>
> If the communication library has to do that anyway, it could still do
> the replacement without affecting wire protocol, no ?
In my implementation, 'the extended(2PC) FE/BE protocol' is used only in
the communication between the master and slave server(s), not between a
client app and the master server.
libpq <--Normal FE/BE--> (master)postgres <--Extended(2PC)FE/BE--> (slave)postgres
<--Extended(2PC)FE/BE--> (slave)postgres <--Extended(2PC)FE/BE-->
(slave)postgres
A client application and client's libpq can work continuously without
any modification. This is very important. And protocol modification
between master and slave server(s) is not so serious issue (I think).
--
NAGAYASU Satoshi <snaga@snaga.org>