[pgpool-committers: 6788] pgpool: Add new clustering mode "snapshot isolation mode".

Tatsuo Ishii ishii at sraoss.co.jp
Fri Jun 19 14:03:30 JST 2020


Add new clustering mode "snapshot isolation mode".

Here's the first cut to introduce the Pangea algorythm [1].  I deicded
to add new clustering mode called "snapshot isolation mode" for
this.

[1] http://www.vldb.org/pvldb/vol2/vldb09-694.pdf

What I have done in this commit are:

- Implement Pangea algorythm for r/w transactions.
- Create docs for the new clustering mode.

Please note that to use the new clustering mode, PostgreSQL's default
transaction isolation mode must be "REPEATABLE READ" (not READ
COMMITTED nor SERIALIZABLE). At this point I tend to think that the
new feature should be marked as "experimental" since I am not
convinced that the new mode does not have any defect at the when 4.2
is released.

BTW, I have added new section "Bibliography" to give a credit to
Pangea. However it seems the rendering of it is different from what
PostgreSQL has. Can someone please help?

"Takeshi Mishima and Hiroshi Nakamura, "Pangea: An Eager Database
Replication Middleware guaranteeing Snapshot Isolation without
modification of Database Servers", Proc. VLDB Conference, Aug. 2009."

I was expecting something like this:

"[mishima2009] Pangea: An Eager Database Replication Middleware
guaranteeing Snapshot Isolation without modification of Database
Servers", "Takeshi Mishima and Hiroshi Nakamura, Proc. VLDB
Conference, Aug. 2009."

What I have not done are:

(1) Check if the transaction is read only and if so, then load balance
    it.

(2) regression test

(3) How to deal with SERIAL/sequence.

(4) Deal with extended query protocol

For (1), maybe we could have following rules:

- If it's a read only SELECT and it's not inside an explicit
  transaction, we can load balance it.

- If it's a read only SELECT and it's inside an explicit transaction,
  we can not load balance it.

The latter is different from native replication mode.

For (2) maybe we need new testing framework to give a control the
timing to give queries to backend. If you have an idea, please let me
know.

For (3) I have no idea. Please help.

Discussion: https://www.pgpool.net/pipermail/pgpool-hackers/2020-April/003580.html

Branch
------
master

Details
-------
https://git.postgresql.org/gitweb?p=pgpool2.git;a=commitdiff;h=22930861c4006d230361be3779a84da3d0d24b66

Modified Files
--------------
doc.ja/src/sgml/biblio.sgml                | 547 ++---------------------------
doc.ja/src/sgml/connection-settings.sgml   |  77 ++++
doc.ja/src/sgml/filelist.sgml              |   1 +
doc.ja/src/sgml/pgpool.sgml                |   1 +
doc.ja/src/sgml/ref/pgpool_setup.sgml      |   4 +-
doc.ja/src/sgml/runtime.sgml               |  33 +-
doc/src/sgml/biblio.sgml                   |  34 ++
doc/src/sgml/connection-settings.sgml      |  86 +++++
doc/src/sgml/filelist.sgml                 |   1 +
doc/src/sgml/pgpool.sgml                   |   1 +
doc/src/sgml/ref/pgpool_setup.sgml         |   6 +-
doc/src/sgml/runtime.sgml                  |  42 ++-
src/config/pool_config_variables.c         |   1 +
src/context/pool_session_context.c         |   5 +-
src/include/context/pool_session_context.h |  12 +-
src/include/pool.h                         |  24 +-
src/include/pool_config.h                  |   3 +-
src/include/protocol/pool_pg_utils.h       |   7 +
src/main/pgpool_main.c                     |  13 +
src/protocol/child.c                       |   6 +
src/protocol/pool_pg_utils.c               | 224 ++++++++++++
src/protocol/pool_proto_modules.c          |  73 +++-
src/sample/pgpool.conf.sample-logical      |   2 +-
src/sample/pgpool.conf.sample-raw          |   2 +-
src/sample/pgpool.conf.sample-replication  |   2 +-
src/sample/pgpool.conf.sample-slony        |   2 +-
src/sample/pgpool.conf.sample-stream       |   2 +-
src/test/pgpool_setup                      |  15 +-
28 files changed, 667 insertions(+), 559 deletions(-)



More information about the pgpool-committers mailing list