[Pgpool-general] inconsistency when using two pgpool instances in warm standby?
Marcelo Martins
pglists at zeroaccess.org
Mon Dec 15 15:55:10 UTC 2008
Tatsuo,
I also have some online-recory scripts that I have been meaning to
post on the list that perhaps some could use it as another example
together with the ones you currently provide
Marcelo
PostgreSQL DBA
Linux/Solaris System Administrator
http://www.zeroaccess.org
On Dec 13, 2008, at 6:58 AM, Tatsuo Ishii wrote:
> [snip]
>
>> I can prepare ./contrib/ branch of heartbeat configuration
>> resources to the
>> 2.2 relese if you are interested in.
>
> Great. I'd like to include your contributions into 2.2 release. I
> will create ./contrib/heartbeat directory and will put files you
> provide under it. Please provide a tar ball along with README.
>
> I'm almost ready for 2.2. F.Y.I. here is the NEWS file of 2.2.
> ----------------------------------------------------------------------
> 2.2 (urukiboshi) 2008/12/?
> * Version 2.2
>
> This version enhances on line recovery and fixes important bugs
> in handling serializable transactions which could cause data
> inconsistency among DB nodes.
>
> * New features
>
> - Add client_idle_limit_in_recovery directive. This will
> prevent 2nd stage of on line recovery from not going forward
> by idle clients sitting forever(Tatsuo)
>
> - Allow to load balance DECLARE, FETCH and CLOSE(Tatsuo)
>
> * Bug fixes
>
> - Close all file descriptors when running in daemon mode.
> Otherwise we inherit sockets from apache when it's started by
> pgpoolAdmin. This results in that port 80 is occupied for
> example. Patch provided by Akio Ishida. Also add
> chdir("/"). This is always good for daemon programs(Tatsuo)
>
> - Allow MD5 authentication in raw mode as stated in
> docs(Tatsuo)
>
> - Check transaction serialization failure error in
> serializable mode and abort all nodes if so. Otherwise we
> allow data inconsistency among DB nodes(Tatsuo).
>
> See following scenario: (M:master, S:slave)
>
> M:S1:BEGIN;
> M:S2:BEGIN;
> S:S1:BEGIN;
> S:S2:BEGIN;
> M:S1:SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
> M:S2:SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
> S:S1:SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
> S:S2:SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
> M:S1:UPDATE t1 SET i = i + 1;
> S:S1:UPDATE t1 SET i = i + 1;
> M:S2:UPDATE t1 SET i = i + 1; <-- blocked
> S:S1:COMMIT;
> M:S1:COMMIT;
> M:S2:ERROR: could not serialize access due to concurrent update
> S:S2:UPDATE t1 SET i = i + 1; <-- success in UPDATE and data
> becomes inconsistent!
>
> - avoid kind mismatch error caused by "SET TRANSACTION
> ISOLATION LEVEL must be called before any query"(Tatsuo).
>
> This could happen in following scenario:
>
> M:S1:BEGIN;
> S:S1:BEGIN;
> M:S1:SELECT 1; <-- only sent to MASTER
> M:S1:SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
> S:S1:SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
> M: <-- error
> S: <-- ok since no previous SELECT is sent. kind mismatch error
> occurs!
>
> * Incompatible changes
>
> - Always fail over and restart all children. Before we do
> restart only if master has not been changed. This is
> wrong. If we have trouble with network cable or something,
> TCP/IP stack keeps on retrying for long time and the only
> way to prevent it is restarting process(Tatsuo)
> ----------------------------------------------------------------------
> --
> Tatsuo Ishii
> SRA OSS, Inc. Japan
> _______________________________________________
> Pgpool-general mailing list
> Pgpool-general at pgfoundry.org
> http://pgfoundry.org/mailman/listinfo/pgpool-general
More information about the Pgpool-general
mailing list