prestogres 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +4 -0
- data/Gemfile +2 -0
- data/Gemfile.lock +20 -0
- data/LICENSE +202 -0
- data/NOTICE +22 -0
- data/README.md +217 -0
- data/Rakefile +13 -0
- data/VERSION +1 -0
- data/bin/prestogres +254 -0
- data/config/pcp.conf.sample +28 -0
- data/config/pgpool.conf +678 -0
- data/config/pool_hba.conf +84 -0
- data/config/pool_passwd +0 -0
- data/config/postgresql.conf +2 -0
- data/ext/.gitignore +6 -0
- data/ext/depend +26 -0
- data/ext/extconf.rb +4 -0
- data/ext/prestogres_config.c +12 -0
- data/pgpool2/.gitignore +36 -0
- data/pgpool2/AUTHORS +4 -0
- data/pgpool2/COPYING +12 -0
- data/pgpool2/ChangeLog +1 -0
- data/pgpool2/INSTALL +1 -0
- data/pgpool2/Makefile.am +159 -0
- data/pgpool2/Makefile.in +1187 -0
- data/pgpool2/NEWS +4960 -0
- data/pgpool2/README +1 -0
- data/pgpool2/README.euc_jp +1 -0
- data/pgpool2/README.online-recovery +62 -0
- data/pgpool2/TODO +103 -0
- data/pgpool2/ac_func_accept_argtypes.m4 +85 -0
- data/pgpool2/aclocal.m4 +1088 -0
- data/pgpool2/c-compiler.m4 +134 -0
- data/pgpool2/c-library.m4 +325 -0
- data/pgpool2/child.c +2097 -0
- data/pgpool2/config.guess +1532 -0
- data/pgpool2/config.h.in +332 -0
- data/pgpool2/config.sub +1640 -0
- data/pgpool2/configure +15752 -0
- data/pgpool2/configure.in +392 -0
- data/pgpool2/depcomp +522 -0
- data/pgpool2/doc/basebackup.sh +17 -0
- data/pgpool2/doc/pgpool-de.html +4220 -0
- data/pgpool2/doc/pgpool-en.html +5738 -0
- data/pgpool2/doc/pgpool-fr.html +4118 -0
- data/pgpool2/doc/pgpool-ja.css +198 -0
- data/pgpool2/doc/pgpool-ja.html +11279 -0
- data/pgpool2/doc/pgpool-zh_cn.html +4445 -0
- data/pgpool2/doc/pgpool.css +280 -0
- data/pgpool2/doc/pgpool_remote_start +13 -0
- data/pgpool2/doc/recovery.conf.sample +117 -0
- data/pgpool2/doc/tutorial-en.html +707 -0
- data/pgpool2/doc/tutorial-ja.html +422 -0
- data/pgpool2/doc/tutorial-memqcache-en.html +325 -0
- data/pgpool2/doc/tutorial-memqcache-ja.html +370 -0
- data/pgpool2/doc/tutorial-memqcache-zh_cn.html +322 -0
- data/pgpool2/doc/tutorial-watchdog-en.html +306 -0
- data/pgpool2/doc/tutorial-watchdog-ja.html +343 -0
- data/pgpool2/doc/tutorial-watchdog-zh_cn.html +301 -0
- data/pgpool2/doc/tutorial-zh_cn.html +537 -0
- data/pgpool2/doc/watchdog.png +0 -0
- data/pgpool2/doc/wd-en.html +236 -0
- data/pgpool2/doc/wd-en.jpg +0 -0
- data/pgpool2/doc/wd-ja.html +219 -0
- data/pgpool2/doc/wd-ja.jpg +0 -0
- data/pgpool2/doc/wd-zh_cn.html +201 -0
- data/pgpool2/doc/where_to_send_queries.odg +0 -0
- data/pgpool2/doc/where_to_send_queries.pdf +0 -0
- data/pgpool2/general.m4 +166 -0
- data/pgpool2/getopt_long.c +200 -0
- data/pgpool2/getopt_long.h +44 -0
- data/pgpool2/install-sh +251 -0
- data/pgpool2/ltmain.sh +8406 -0
- data/pgpool2/m4/libtool.m4 +7360 -0
- data/pgpool2/m4/ltoptions.m4 +368 -0
- data/pgpool2/m4/ltsugar.m4 +123 -0
- data/pgpool2/m4/ltversion.m4 +23 -0
- data/pgpool2/m4/lt~obsolete.m4 +92 -0
- data/pgpool2/main.c +2971 -0
- data/pgpool2/md5.c +444 -0
- data/pgpool2/md5.h +28 -0
- data/pgpool2/missing +360 -0
- data/pgpool2/mkinstalldirs +40 -0
- data/pgpool2/parser/Makefile.am +50 -0
- data/pgpool2/parser/Makefile.in +559 -0
- data/pgpool2/parser/copyfuncs.c +3310 -0
- data/pgpool2/parser/gram.c +39100 -0
- data/pgpool2/parser/gram.h +940 -0
- data/pgpool2/parser/gram.y +13408 -0
- data/pgpool2/parser/gramparse.h +74 -0
- data/pgpool2/parser/keywords.c +32 -0
- data/pgpool2/parser/keywords.h +39 -0
- data/pgpool2/parser/kwlist.h +425 -0
- data/pgpool2/parser/kwlookup.c +88 -0
- data/pgpool2/parser/list.c +1156 -0
- data/pgpool2/parser/makefuncs.c +518 -0
- data/pgpool2/parser/makefuncs.h +83 -0
- data/pgpool2/parser/memnodes.h +79 -0
- data/pgpool2/parser/nodes.c +29 -0
- data/pgpool2/parser/nodes.h +609 -0
- data/pgpool2/parser/outfuncs.c +5790 -0
- data/pgpool2/parser/parsenodes.h +2615 -0
- data/pgpool2/parser/parser.c +262 -0
- data/pgpool2/parser/parser.h +46 -0
- data/pgpool2/parser/pg_class.h +158 -0
- data/pgpool2/parser/pg_config_manual.h +273 -0
- data/pgpool2/parser/pg_list.h +352 -0
- data/pgpool2/parser/pg_trigger.h +147 -0
- data/pgpool2/parser/pg_wchar.h +492 -0
- data/pgpool2/parser/pool_memory.c +342 -0
- data/pgpool2/parser/pool_memory.h +77 -0
- data/pgpool2/parser/pool_parser.h +222 -0
- data/pgpool2/parser/pool_string.c +121 -0
- data/pgpool2/parser/pool_string.h +37 -0
- data/pgpool2/parser/primnodes.h +1280 -0
- data/pgpool2/parser/scan.c +4094 -0
- data/pgpool2/parser/scan.l +1451 -0
- data/pgpool2/parser/scanner.h +120 -0
- data/pgpool2/parser/scansup.c +221 -0
- data/pgpool2/parser/scansup.h +28 -0
- data/pgpool2/parser/snprintf.c +1102 -0
- data/pgpool2/parser/stringinfo.c +294 -0
- data/pgpool2/parser/stringinfo.h +178 -0
- data/pgpool2/parser/value.c +78 -0
- data/pgpool2/parser/value.h +62 -0
- data/pgpool2/parser/wchar.c +2048 -0
- data/pgpool2/pcp.conf.sample +28 -0
- data/pgpool2/pcp/Makefile.am +40 -0
- data/pgpool2/pcp/Makefile.in +771 -0
- data/pgpool2/pcp/libpcp_ext.h +250 -0
- data/pgpool2/pcp/md5.c +444 -0
- data/pgpool2/pcp/md5.h +28 -0
- data/pgpool2/pcp/pcp.c +1652 -0
- data/pgpool2/pcp/pcp.h +61 -0
- data/pgpool2/pcp/pcp_attach_node.c +172 -0
- data/pgpool2/pcp/pcp_detach_node.c +185 -0
- data/pgpool2/pcp/pcp_error.c +87 -0
- data/pgpool2/pcp/pcp_node_count.c +160 -0
- data/pgpool2/pcp/pcp_node_info.c +198 -0
- data/pgpool2/pcp/pcp_pool_status.c +166 -0
- data/pgpool2/pcp/pcp_proc_count.c +166 -0
- data/pgpool2/pcp/pcp_proc_info.c +261 -0
- data/pgpool2/pcp/pcp_promote_node.c +185 -0
- data/pgpool2/pcp/pcp_recovery_node.c +172 -0
- data/pgpool2/pcp/pcp_stop_pgpool.c +179 -0
- data/pgpool2/pcp/pcp_stream.c +385 -0
- data/pgpool2/pcp/pcp_stream.h +52 -0
- data/pgpool2/pcp/pcp_systemdb_info.c +194 -0
- data/pgpool2/pcp/pcp_watchdog_info.c +211 -0
- data/pgpool2/pcp_child.c +1493 -0
- data/pgpool2/pg_md5.c +305 -0
- data/pgpool2/pgpool.8.in +121 -0
- data/pgpool2/pgpool.conf +553 -0
- data/pgpool2/pgpool.conf.sample +666 -0
- data/pgpool2/pgpool.conf.sample-master-slave +665 -0
- data/pgpool2/pgpool.conf.sample-replication +664 -0
- data/pgpool2/pgpool.conf.sample-stream +664 -0
- data/pgpool2/pgpool.spec +264 -0
- data/pgpool2/pgpool_adm/TODO +7 -0
- data/pgpool2/pgpool_adm/pgpool_adm--1.0.sql +85 -0
- data/pgpool2/pgpool_adm/pgpool_adm.c +558 -0
- data/pgpool2/pgpool_adm/pgpool_adm.control +5 -0
- data/pgpool2/pgpool_adm/pgpool_adm.h +46 -0
- data/pgpool2/pgpool_adm/pgpool_adm.sql.in +85 -0
- data/pgpool2/pool.h +655 -0
- data/pgpool2/pool_auth.c +1390 -0
- data/pgpool2/pool_config.c +5007 -0
- data/pgpool2/pool_config.h +284 -0
- data/pgpool2/pool_config.l +3281 -0
- data/pgpool2/pool_config_md5.c +29 -0
- data/pgpool2/pool_connection_pool.c +812 -0
- data/pgpool2/pool_error.c +242 -0
- data/pgpool2/pool_globals.c +27 -0
- data/pgpool2/pool_hba.c +1723 -0
- data/pgpool2/pool_hba.conf.sample +67 -0
- data/pgpool2/pool_ip.c +567 -0
- data/pgpool2/pool_ip.h +65 -0
- data/pgpool2/pool_ipc.h +38 -0
- data/pgpool2/pool_lobj.c +242 -0
- data/pgpool2/pool_lobj.h +32 -0
- data/pgpool2/pool_memqcache.c +3818 -0
- data/pgpool2/pool_memqcache.h +268 -0
- data/pgpool2/pool_params.c +163 -0
- data/pgpool2/pool_passwd.c +249 -0
- data/pgpool2/pool_passwd.h +41 -0
- data/pgpool2/pool_path.c +193 -0
- data/pgpool2/pool_path.h +81 -0
- data/pgpool2/pool_process_context.c +247 -0
- data/pgpool2/pool_process_context.h +62 -0
- data/pgpool2/pool_process_query.c +5001 -0
- data/pgpool2/pool_process_reporting.c +1671 -0
- data/pgpool2/pool_process_reporting.h +44 -0
- data/pgpool2/pool_proto2.c +671 -0
- data/pgpool2/pool_proto_modules.c +3524 -0
- data/pgpool2/pool_proto_modules.h +185 -0
- data/pgpool2/pool_query_cache.c +1020 -0
- data/pgpool2/pool_query_context.c +1871 -0
- data/pgpool2/pool_query_context.h +105 -0
- data/pgpool2/pool_relcache.c +284 -0
- data/pgpool2/pool_relcache.h +78 -0
- data/pgpool2/pool_rewrite_outfuncs.c +9060 -0
- data/pgpool2/pool_rewrite_query.c +715 -0
- data/pgpool2/pool_rewrite_query.h +192 -0
- data/pgpool2/pool_select_walker.c +1150 -0
- data/pgpool2/pool_select_walker.h +68 -0
- data/pgpool2/pool_sema.c +161 -0
- data/pgpool2/pool_session_context.c +952 -0
- data/pgpool2/pool_session_context.h +203 -0
- data/pgpool2/pool_shmem.c +185 -0
- data/pgpool2/pool_signal.c +158 -0
- data/pgpool2/pool_signal.h +61 -0
- data/pgpool2/pool_ssl.c +339 -0
- data/pgpool2/pool_stream.c +962 -0
- data/pgpool2/pool_stream.h +61 -0
- data/pgpool2/pool_system.c +659 -0
- data/pgpool2/pool_timestamp.c +1215 -0
- data/pgpool2/pool_timestamp.h +38 -0
- data/pgpool2/pool_type.h +171 -0
- data/pgpool2/pool_worker_child.c +384 -0
- data/pgpool2/ps_status.c +404 -0
- data/pgpool2/recovery.c +435 -0
- data/pgpool2/redhat/pgpool.conf.sample.patch +52 -0
- data/pgpool2/redhat/pgpool.init +201 -0
- data/pgpool2/redhat/pgpool.sysconfig +7 -0
- data/pgpool2/redhat/rpm_installer/basebackup-replication.sh +53 -0
- data/pgpool2/redhat/rpm_installer/basebackup-stream.sh +55 -0
- data/pgpool2/redhat/rpm_installer/config_for_script +17 -0
- data/pgpool2/redhat/rpm_installer/failover.sh +64 -0
- data/pgpool2/redhat/rpm_installer/getsources.sh +141 -0
- data/pgpool2/redhat/rpm_installer/install.sh +1363 -0
- data/pgpool2/redhat/rpm_installer/pgpool_recovery_pitr +47 -0
- data/pgpool2/redhat/rpm_installer/pgpool_remote_start +15 -0
- data/pgpool2/redhat/rpm_installer/recovery.conf +4 -0
- data/pgpool2/redhat/rpm_installer/uninstall.sh +57 -0
- data/pgpool2/sample/dist_def_pgbench.sql +73 -0
- data/pgpool2/sample/pgpool.pam +3 -0
- data/pgpool2/sample/pgpool_recovery +20 -0
- data/pgpool2/sample/pgpool_recovery_pitr +19 -0
- data/pgpool2/sample/pgpool_remote_start +13 -0
- data/pgpool2/sample/replicate_def_pgbench.sql +18 -0
- data/pgpool2/sql/insert_lock.sql +15 -0
- data/pgpool2/sql/pgpool-recovery/pgpool-recovery.c +280 -0
- data/pgpool2/sql/pgpool-recovery/pgpool-recovery.sql.in +19 -0
- data/pgpool2/sql/pgpool-recovery/pgpool_recovery--1.0.sql +24 -0
- data/pgpool2/sql/pgpool-recovery/pgpool_recovery.control +5 -0
- data/pgpool2/sql/pgpool-recovery/uninstall_pgpool-recovery.sql +3 -0
- data/pgpool2/sql/pgpool-regclass/pgpool-regclass.c +206 -0
- data/pgpool2/sql/pgpool-regclass/pgpool-regclass.sql.in +4 -0
- data/pgpool2/sql/pgpool-regclass/pgpool_regclass--1.0.sql +7 -0
- data/pgpool2/sql/pgpool-regclass/pgpool_regclass.control +5 -0
- data/pgpool2/sql/pgpool-regclass/uninstall_pgpool-regclass.sql +1 -0
- data/pgpool2/sql/system_db.sql +38 -0
- data/pgpool2/strlcpy.c +85 -0
- data/pgpool2/test/C/test_extended.c +98 -0
- data/pgpool2/test/jdbc/.cvsignore +2 -0
- data/pgpool2/test/jdbc/AutoCommitTest.java +45 -0
- data/pgpool2/test/jdbc/BatchTest.java +55 -0
- data/pgpool2/test/jdbc/ColumnTest.java +60 -0
- data/pgpool2/test/jdbc/CreateTempTableTest.java +48 -0
- data/pgpool2/test/jdbc/InsertTest.java +34 -0
- data/pgpool2/test/jdbc/LockTest.java +36 -0
- data/pgpool2/test/jdbc/PgpoolTest.java +75 -0
- data/pgpool2/test/jdbc/README.euc_jp +73 -0
- data/pgpool2/test/jdbc/RunTest.java +83 -0
- data/pgpool2/test/jdbc/SelectTest.java +37 -0
- data/pgpool2/test/jdbc/UpdateTest.java +32 -0
- data/pgpool2/test/jdbc/expected/CreateTempTable +1 -0
- data/pgpool2/test/jdbc/expected/autocommit +10 -0
- data/pgpool2/test/jdbc/expected/batch +1 -0
- data/pgpool2/test/jdbc/expected/column +100 -0
- data/pgpool2/test/jdbc/expected/insert +1 -0
- data/pgpool2/test/jdbc/expected/lock +100 -0
- data/pgpool2/test/jdbc/expected/select +2 -0
- data/pgpool2/test/jdbc/expected/update +1 -0
- data/pgpool2/test/jdbc/pgpool.properties +7 -0
- data/pgpool2/test/jdbc/prepare.sql +54 -0
- data/pgpool2/test/jdbc/run.sh +6 -0
- data/pgpool2/test/parser/.cvsignore +6 -0
- data/pgpool2/test/parser/README +32 -0
- data/pgpool2/test/parser/expected/copy.out +17 -0
- data/pgpool2/test/parser/expected/create.out +64 -0
- data/pgpool2/test/parser/expected/cursor.out +37 -0
- data/pgpool2/test/parser/expected/delete.out +10 -0
- data/pgpool2/test/parser/expected/drop.out +12 -0
- data/pgpool2/test/parser/expected/insert.out +13 -0
- data/pgpool2/test/parser/expected/misc.out +28 -0
- data/pgpool2/test/parser/expected/prepare.out +4 -0
- data/pgpool2/test/parser/expected/privileges.out +31 -0
- data/pgpool2/test/parser/expected/scanner.out +30 -0
- data/pgpool2/test/parser/expected/select.out +89 -0
- data/pgpool2/test/parser/expected/transaction.out +38 -0
- data/pgpool2/test/parser/expected/update.out +11 -0
- data/pgpool2/test/parser/expected/v84.out +37 -0
- data/pgpool2/test/parser/expected/v90.out +25 -0
- data/pgpool2/test/parser/expected/var.out +22 -0
- data/pgpool2/test/parser/input/alter.sql +2 -0
- data/pgpool2/test/parser/input/copy.sql +17 -0
- data/pgpool2/test/parser/input/create.sql +64 -0
- data/pgpool2/test/parser/input/cursor.sql +37 -0
- data/pgpool2/test/parser/input/delete.sql +10 -0
- data/pgpool2/test/parser/input/drop.sql +12 -0
- data/pgpool2/test/parser/input/insert.sql +13 -0
- data/pgpool2/test/parser/input/misc.sql +28 -0
- data/pgpool2/test/parser/input/prepare.sql +4 -0
- data/pgpool2/test/parser/input/privileges.sql +31 -0
- data/pgpool2/test/parser/input/scanner.sql +34 -0
- data/pgpool2/test/parser/input/select.sql +89 -0
- data/pgpool2/test/parser/input/transaction.sql +38 -0
- data/pgpool2/test/parser/input/update.sql +11 -0
- data/pgpool2/test/parser/input/v84.sql +37 -0
- data/pgpool2/test/parser/input/v90.sql +38 -0
- data/pgpool2/test/parser/input/var.sql +22 -0
- data/pgpool2/test/parser/main.c +96 -0
- data/pgpool2/test/parser/parse_schedule +16 -0
- data/pgpool2/test/parser/pool.h +13 -0
- data/pgpool2/test/parser/run-test +62 -0
- data/pgpool2/test/pdo-test/README.euc_jp +58 -0
- data/pgpool2/test/pdo-test/SQLlist/test1.sql +3 -0
- data/pgpool2/test/pdo-test/SQLlist/test2.sql +3 -0
- data/pgpool2/test/pdo-test/collections.inc +11 -0
- data/pgpool2/test/pdo-test/def.inc +7 -0
- data/pgpool2/test/pdo-test/log.txt +0 -0
- data/pgpool2/test/pdo-test/mod/database.inc +36 -0
- data/pgpool2/test/pdo-test/mod/def.inc +0 -0
- data/pgpool2/test/pdo-test/mod/errorhandler.inc +27 -0
- data/pgpool2/test/pdo-test/pdotest.php +11 -0
- data/pgpool2/test/pdo-test/regsql.inc +56 -0
- data/pgpool2/test/pgpool_setup +898 -0
- data/pgpool2/test/regression/README +39 -0
- data/pgpool2/test/regression/clean.sh +21 -0
- data/pgpool2/test/regression/libs.sh +16 -0
- data/pgpool2/test/regression/regress.sh +166 -0
- data/pgpool2/test/regression/tests/001.load_balance/test.sh +128 -0
- data/pgpool2/test/regression/tests/002.native_replication/PgTester.java +47 -0
- data/pgpool2/test/regression/tests/002.native_replication/create.sql +6 -0
- data/pgpool2/test/regression/tests/002.native_replication/test.sh +71 -0
- data/pgpool2/test/regression/tests/003.failover/expected.r +6 -0
- data/pgpool2/test/regression/tests/003.failover/expected.s +6 -0
- data/pgpool2/test/regression/tests/003.failover/test.sh +45 -0
- data/pgpool2/test/regression/tests/004.watchdog/master.conf +12 -0
- data/pgpool2/test/regression/tests/004.watchdog/standby.conf +19 -0
- data/pgpool2/test/regression/tests/004.watchdog/test.sh +52 -0
- data/pgpool2/test/regression/tests/050.bug58/test.sh +50 -0
- data/pgpool2/test/regression/tests/051.bug60/bug.sql +12 -0
- data/pgpool2/test/regression/tests/051.bug60/database-clean.sql +6 -0
- data/pgpool2/test/regression/tests/051.bug60/database-setup.sql +28 -0
- data/pgpool2/test/regression/tests/051.bug60/test.sh +79 -0
- data/pgpool2/test/regression/tests/052.do_query/test.sh +44 -0
- data/pgpool2/test/regression/tests/053.insert_lock_hangs/test.sh +81 -0
- data/pgpool2/test/regression/tests/054.postgres_fdw/test.sh +67 -0
- data/pgpool2/test/regression/tests/055.backend_all_down/test.sh +52 -0
- data/pgpool2/test/regression/tests/056.bug63/jdbctest2.java +66 -0
- data/pgpool2/test/regression/tests/056.bug63/test.sh +47 -0
- data/pgpool2/test/regression/tests/057.bug61/test.sh +40 -0
- data/pgpool2/test/regression/tests/058.bug68/jdbctest3.java +45 -0
- data/pgpool2/test/regression/tests/058.bug68/test.sh +47 -0
- data/pgpool2/test/timestamp/expected/insert.out +16 -0
- data/pgpool2/test/timestamp/expected/misc.out +3 -0
- data/pgpool2/test/timestamp/expected/update.out +6 -0
- data/pgpool2/test/timestamp/input/insert.sql +16 -0
- data/pgpool2/test/timestamp/input/misc.sql +3 -0
- data/pgpool2/test/timestamp/input/update.sql +6 -0
- data/pgpool2/test/timestamp/main.c +129 -0
- data/pgpool2/test/timestamp/parse_schedule +3 -0
- data/pgpool2/test/timestamp/run-test +69 -0
- data/pgpool2/version.h +1 -0
- data/pgpool2/watchdog/Makefile.am +17 -0
- data/pgpool2/watchdog/Makefile.in +505 -0
- data/pgpool2/watchdog/test/stab.c +266 -0
- data/pgpool2/watchdog/test/test.c +85 -0
- data/pgpool2/watchdog/test/wd_child_t.c +87 -0
- data/pgpool2/watchdog/test/wd_lifecheck_t.c +87 -0
- data/pgpool2/watchdog/test/wd_packet_t.c +87 -0
- data/pgpool2/watchdog/test/wd_ping_t.c +20 -0
- data/pgpool2/watchdog/watchdog.c +408 -0
- data/pgpool2/watchdog/watchdog.h +209 -0
- data/pgpool2/watchdog/wd_child.c +444 -0
- data/pgpool2/watchdog/wd_ext.h +123 -0
- data/pgpool2/watchdog/wd_heartbeat.c +577 -0
- data/pgpool2/watchdog/wd_if.c +216 -0
- data/pgpool2/watchdog/wd_init.c +126 -0
- data/pgpool2/watchdog/wd_interlock.c +347 -0
- data/pgpool2/watchdog/wd_lifecheck.c +512 -0
- data/pgpool2/watchdog/wd_list.c +429 -0
- data/pgpool2/watchdog/wd_packet.c +1159 -0
- data/pgpool2/watchdog/wd_ping.c +330 -0
- data/pgpool2/ylwrap +223 -0
- data/pgsql/presto_client.py +346 -0
- data/pgsql/prestogres.py +156 -0
- data/pgsql/setup_functions.sql +21 -0
- data/pgsql/setup_language.sql +3 -0
- data/prestogres.gemspec +23 -0
- metadata +496 -0
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
/* -*-pgsql-c-*- */
|
|
2
|
+
/*
|
|
3
|
+
*
|
|
4
|
+
* $Header$
|
|
5
|
+
*
|
|
6
|
+
* pgpool: a language independent connection pool server for PostgreSQL
|
|
7
|
+
* written by Tatsuo Ishii
|
|
8
|
+
*
|
|
9
|
+
* Copyright (c) 2003-2011 PgPool Global Development Group
|
|
10
|
+
*
|
|
11
|
+
* Permission to use, copy, modify, and distribute this software and
|
|
12
|
+
* its documentation for any purpose and without fee is hereby
|
|
13
|
+
* granted, provided that the above copyright notice appear in all
|
|
14
|
+
* copies and that both that copyright notice and this permission
|
|
15
|
+
* notice appear in supporting documentation, and that the name of the
|
|
16
|
+
* author not be used in advertising or publicity pertaining to
|
|
17
|
+
* distribution of the software without specific, written prior
|
|
18
|
+
* permission. The author makes no representations about the
|
|
19
|
+
* suitability of this software for any purpose. It is provided "as
|
|
20
|
+
* is" without express or implied warranty.
|
|
21
|
+
*
|
|
22
|
+
* pool_process_context.h.: process context information
|
|
23
|
+
*
|
|
24
|
+
*/
|
|
25
|
+
|
|
26
|
+
#ifndef POOL_SESSION_CONTEXT_H
|
|
27
|
+
#define POOL_SESSION_CONTEXT_H
|
|
28
|
+
#define INIT_LIST_SIZE 8
|
|
29
|
+
|
|
30
|
+
#include "pool.h"
|
|
31
|
+
#include "pool_process_context.h"
|
|
32
|
+
#include "pool_session_context.h"
|
|
33
|
+
#include "pool_query_context.h"
|
|
34
|
+
#include "parser/pool_memory.h"
|
|
35
|
+
#include "pool_memqcache.h"
|
|
36
|
+
|
|
37
|
+
/*
|
|
38
|
+
* Transaction isolation mode
|
|
39
|
+
*/
|
|
40
|
+
typedef enum {
|
|
41
|
+
POOL_UNKNOWN, /* Unknown. Need to ask backend */
|
|
42
|
+
POOL_READ_UNCOMMITTED, /* Read uncommitted */
|
|
43
|
+
POOL_READ_COMMITTED, /* Read committed */
|
|
44
|
+
POOL_REPEATABLE_READ, /* Rpeatable read */
|
|
45
|
+
POOL_SERIALIZABLE /* Serializable */
|
|
46
|
+
} POOL_TRANSACTION_ISOLATION;
|
|
47
|
+
|
|
48
|
+
/*
|
|
49
|
+
* Message content of extended query
|
|
50
|
+
*/
|
|
51
|
+
typedef struct {
|
|
52
|
+
char kind; /* one of 'P':Parse, 'B':Bind or 'Q':Query(PREPARE) */
|
|
53
|
+
int len; /* in host byte order */
|
|
54
|
+
char *contents;
|
|
55
|
+
int num_tsparams;
|
|
56
|
+
char *name; /* object name of prepared statement or portal */
|
|
57
|
+
POOL_QUERY_CONTEXT *query_context;
|
|
58
|
+
/*
|
|
59
|
+
* Following members are only used when memcache is enabled.
|
|
60
|
+
*/
|
|
61
|
+
bool is_cache_safe; /* true if the query can be cached */
|
|
62
|
+
int param_offset; /* Offset from contents where actual bind
|
|
63
|
+
* parameters are stored.
|
|
64
|
+
* This is meaningful only when is_cache_safe is true.
|
|
65
|
+
*/
|
|
66
|
+
} POOL_SENT_MESSAGE;
|
|
67
|
+
|
|
68
|
+
/*
|
|
69
|
+
* List of POOL_SENT_MESSAGE
|
|
70
|
+
*/
|
|
71
|
+
typedef struct {
|
|
72
|
+
int capacity; /* capacity of list */
|
|
73
|
+
int size; /* number of elements */
|
|
74
|
+
POOL_SENT_MESSAGE **sent_messages;
|
|
75
|
+
} POOL_SENT_MESSAGE_LIST;
|
|
76
|
+
|
|
77
|
+
/*
|
|
78
|
+
* Per session context:
|
|
79
|
+
*/
|
|
80
|
+
typedef struct {
|
|
81
|
+
POOL_PROCESS_CONTEXT *process_context; /* belonging process */
|
|
82
|
+
POOL_CONNECTION *frontend; /* connection to frontend */
|
|
83
|
+
POOL_CONNECTION_POOL *backend; /* connection to backends */
|
|
84
|
+
|
|
85
|
+
/* If true, we are waiting for backend response. For SELECT this
|
|
86
|
+
* flags should be kept until all responses are returned from
|
|
87
|
+
* backend. i.e. until "Read for Query" packet.
|
|
88
|
+
*/
|
|
89
|
+
bool in_progress;
|
|
90
|
+
|
|
91
|
+
/* If true, we are doing extended query message */
|
|
92
|
+
bool doing_extended_query_message;
|
|
93
|
+
|
|
94
|
+
/* If true, the command in progress has finished successfully. */
|
|
95
|
+
bool command_success;
|
|
96
|
+
|
|
97
|
+
/* If true, write query has been appeared in this transaction */
|
|
98
|
+
bool writing_transaction;
|
|
99
|
+
|
|
100
|
+
/* If true, error occurred in this transaction */
|
|
101
|
+
bool failed_transaction;
|
|
102
|
+
|
|
103
|
+
/* If true, we skip reading from backends */
|
|
104
|
+
bool skip_reading_from_backends;
|
|
105
|
+
|
|
106
|
+
/* ignore any command until Sync message */
|
|
107
|
+
bool ignore_till_sync;
|
|
108
|
+
|
|
109
|
+
/*
|
|
110
|
+
* Transaction isolation mode.
|
|
111
|
+
*/
|
|
112
|
+
POOL_TRANSACTION_ISOLATION transaction_isolation;
|
|
113
|
+
|
|
114
|
+
/*
|
|
115
|
+
* Associated query context, only used for non-extended
|
|
116
|
+
* protocol. In extended protocol, the query context resides in
|
|
117
|
+
* "PreparedStatementList *pstmt_list" (see below).
|
|
118
|
+
*/
|
|
119
|
+
POOL_QUERY_CONTEXT *query_context;
|
|
120
|
+
#ifdef NOT_USED
|
|
121
|
+
/* where to send map for PREPARE/EXECUTE/DEALLOCATE */
|
|
122
|
+
POOL_PREPARED_SEND_MAP prep_where;
|
|
123
|
+
#endif /* NOT_USED */
|
|
124
|
+
POOL_MEMORY_POOL *memory_context; /* memory context for session */
|
|
125
|
+
|
|
126
|
+
/* message which doesn't receive complete message */
|
|
127
|
+
POOL_SENT_MESSAGE *uncompleted_message;
|
|
128
|
+
|
|
129
|
+
POOL_SENT_MESSAGE_LIST message_list;
|
|
130
|
+
|
|
131
|
+
int load_balance_node_id; /* selected load balance node id */
|
|
132
|
+
|
|
133
|
+
/*
|
|
134
|
+
* If true, UPDATE/DELETE caused difference in number of affected
|
|
135
|
+
* tuples in backends.
|
|
136
|
+
*/
|
|
137
|
+
bool mismatch_ntuples;
|
|
138
|
+
|
|
139
|
+
/*
|
|
140
|
+
* If mismatch_ntuples true, this array holds the number of
|
|
141
|
+
* affected tuples of each node.
|
|
142
|
+
* -1 for down nodes.
|
|
143
|
+
*/
|
|
144
|
+
int ntuples[MAX_NUM_BACKENDS];
|
|
145
|
+
|
|
146
|
+
/*
|
|
147
|
+
* If true, we are executing reset query list.
|
|
148
|
+
*/
|
|
149
|
+
bool reset_context;
|
|
150
|
+
|
|
151
|
+
/*
|
|
152
|
+
* Query cache management area
|
|
153
|
+
*/
|
|
154
|
+
POOL_QUERY_CACHE_ARRAY *query_cache_array; /* pending SELECT results */
|
|
155
|
+
long long int num_selects; /* number of successful SELECTs in this transaction */
|
|
156
|
+
} POOL_SESSION_CONTEXT;
|
|
157
|
+
|
|
158
|
+
extern void pool_init_session_context(POOL_CONNECTION *frontend, POOL_CONNECTION_POOL *backend);
|
|
159
|
+
extern void pool_session_context_destroy(void);
|
|
160
|
+
extern POOL_SESSION_CONTEXT *pool_get_session_context(void);
|
|
161
|
+
extern int pool_get_local_session_id(void);
|
|
162
|
+
extern bool pool_is_query_in_progress(void);
|
|
163
|
+
extern void pool_set_query_in_progress(void);
|
|
164
|
+
extern void pool_unset_query_in_progress(void);
|
|
165
|
+
extern bool pool_is_skip_reading_from_backends(void);
|
|
166
|
+
extern void pool_set_skip_reading_from_backends(void);
|
|
167
|
+
extern void pool_unset_skip_reading_from_backends(void);
|
|
168
|
+
extern bool pool_is_doing_extended_query_message(void);
|
|
169
|
+
extern void pool_set_doing_extended_query_message(void);
|
|
170
|
+
extern void pool_unset_doing_extended_query_message(void);
|
|
171
|
+
extern bool pool_is_ignore_till_sync(void);
|
|
172
|
+
extern void pool_set_ignore_till_sync(void);
|
|
173
|
+
extern void pool_unset_ignore_till_sync(void);
|
|
174
|
+
extern POOL_SENT_MESSAGE *pool_create_sent_message(char kind, int len, char *contents,
|
|
175
|
+
int num_tsparams, const char *name,
|
|
176
|
+
POOL_QUERY_CONTEXT *query_context);
|
|
177
|
+
extern void pool_add_sent_message(POOL_SENT_MESSAGE *message);
|
|
178
|
+
extern bool pool_remove_sent_message(char kind, const char *name);
|
|
179
|
+
extern void pool_remove_sent_messages(char kind);
|
|
180
|
+
extern void pool_clear_sent_message_list(void);
|
|
181
|
+
extern void pool_sent_message_destroy(POOL_SENT_MESSAGE *message);
|
|
182
|
+
extern POOL_SENT_MESSAGE *pool_get_sent_message(char kind, const char *name);
|
|
183
|
+
extern void pool_unset_writing_transaction(void);
|
|
184
|
+
extern void pool_set_writing_transaction(void);
|
|
185
|
+
extern bool pool_is_writing_transaction(void);
|
|
186
|
+
extern void pool_unset_failed_transaction(void);
|
|
187
|
+
extern void pool_set_failed_transaction(void);
|
|
188
|
+
extern bool pool_is_failed_transaction(void);
|
|
189
|
+
extern void pool_unset_transaction_isolation(void);
|
|
190
|
+
extern void pool_set_transaction_isolation(POOL_TRANSACTION_ISOLATION isolation_level);
|
|
191
|
+
extern POOL_TRANSACTION_ISOLATION pool_get_transaction_isolation(void);
|
|
192
|
+
extern void pool_unset_command_success(void);
|
|
193
|
+
extern void pool_set_command_success(void);
|
|
194
|
+
extern bool pool_is_command_success(void);
|
|
195
|
+
extern void pool_copy_prep_where(bool *src, bool *dest);
|
|
196
|
+
extern bool can_query_context_destroy(POOL_QUERY_CONTEXT *qc);
|
|
197
|
+
|
|
198
|
+
#ifdef NOT_USED
|
|
199
|
+
extern void pool_add_prep_where(char *name, bool *map);
|
|
200
|
+
extern bool *pool_get_prep_where(char *name);
|
|
201
|
+
extern void pool_delete_prep_where(char *name);
|
|
202
|
+
#endif /* NOT_USED */
|
|
203
|
+
#endif /* POOL_SESSION_CONTEXT_H */
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
/* -*-pgsql-c-*- */
|
|
2
|
+
/*
|
|
3
|
+
* $Header$
|
|
4
|
+
*
|
|
5
|
+
* pgpool: a language independent connection pool server for PostgreSQL
|
|
6
|
+
* written by Tatsuo Ishii
|
|
7
|
+
*
|
|
8
|
+
* Portions Copyright (c) 2003-2013, PgPool Global Development Group
|
|
9
|
+
* Portions Copyright (c) 2003-2004, PostgreSQL Global Development Group
|
|
10
|
+
*
|
|
11
|
+
* Permission to use, copy, modify, and distribute this software and
|
|
12
|
+
* its documentation for any purpose and without fee is hereby
|
|
13
|
+
* granted, provided that the above copyright notice appear in all
|
|
14
|
+
* copies and that both that copyright notice and this permission
|
|
15
|
+
* notice appear in supporting documentation, and that the name of the
|
|
16
|
+
* author not be used in advertising or publicity pertaining to
|
|
17
|
+
* distribution of the software without specific, written prior
|
|
18
|
+
* permission. The author makes no representations about the
|
|
19
|
+
* suitability of this software for any purpose. It is provided "as
|
|
20
|
+
* is" without express or implied warranty.
|
|
21
|
+
*
|
|
22
|
+
*/
|
|
23
|
+
#include "pool.h"
|
|
24
|
+
|
|
25
|
+
#include <errno.h>
|
|
26
|
+
#include <string.h>
|
|
27
|
+
#include <sys/shm.h>
|
|
28
|
+
|
|
29
|
+
#include "pool_ipc.h"
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
#ifdef SHM_SHARE_MMU /* use intimate shared memory on Solaris */
|
|
33
|
+
#define PG_SHMAT_FLAGS SHM_SHARE_MMU
|
|
34
|
+
#else
|
|
35
|
+
#define PG_SHMAT_FLAGS 0
|
|
36
|
+
#endif
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
#define MAX_ON_EXITS 64
|
|
40
|
+
|
|
41
|
+
static struct ONEXIT
|
|
42
|
+
{
|
|
43
|
+
void (*function) (int code, Datum arg);
|
|
44
|
+
Datum arg;
|
|
45
|
+
} on_shmem_exit_list[MAX_ON_EXITS];
|
|
46
|
+
|
|
47
|
+
static int on_shmem_exit_index;
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
static void IpcMemoryDetach(int status, Datum shmaddr);
|
|
51
|
+
static void IpcMemoryDelete(int status, Datum shmId);
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
/*
|
|
55
|
+
* Create a shared memory segment of the given size and initialize. Also,
|
|
56
|
+
* register an on_shmem_exit callback to release the storage.
|
|
57
|
+
*/
|
|
58
|
+
void *
|
|
59
|
+
pool_shared_memory_create(size_t size)
|
|
60
|
+
{
|
|
61
|
+
int shmid;
|
|
62
|
+
void *memAddress;
|
|
63
|
+
|
|
64
|
+
/* Try to create new segment */
|
|
65
|
+
shmid = shmget(IPC_PRIVATE, size, IPC_CREAT | IPC_EXCL | IPCProtection);
|
|
66
|
+
|
|
67
|
+
if (shmid < 0)
|
|
68
|
+
{
|
|
69
|
+
pool_error("could not create shared memory segment: %s",
|
|
70
|
+
strerror(errno));
|
|
71
|
+
return NULL;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/* Register on-exit routine to delete the new segment */
|
|
75
|
+
on_shmem_exit(IpcMemoryDelete, shmid);
|
|
76
|
+
|
|
77
|
+
/* OK, should be able to attach to the segment */
|
|
78
|
+
memAddress = shmat(shmid, NULL, PG_SHMAT_FLAGS);
|
|
79
|
+
|
|
80
|
+
if (memAddress == (void *) -1)
|
|
81
|
+
{
|
|
82
|
+
pool_error("shmat(id=%d) failed: %s", shmid, strerror(errno));
|
|
83
|
+
return NULL;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/* Register on-exit routine to detach new segment before deleting */
|
|
87
|
+
on_shmem_exit(IpcMemoryDetach, (Datum) memAddress);
|
|
88
|
+
|
|
89
|
+
return memAddress;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/*
|
|
93
|
+
* Removes a shared memory segment from process' address spaceq (called as
|
|
94
|
+
* an on_shmem_exit callback, hence funny argument list)
|
|
95
|
+
*/
|
|
96
|
+
static void
|
|
97
|
+
IpcMemoryDetach(int status, Datum shmaddr)
|
|
98
|
+
{
|
|
99
|
+
if (shmdt((void *) shmaddr) < 0)
|
|
100
|
+
pool_log("shmdt(%p) failed: %s", (void *) shmaddr, strerror(errno));
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/*
|
|
104
|
+
* Deletes a shared memory segment (called as an on_shmem_exit callback,
|
|
105
|
+
* hence funny argument list)
|
|
106
|
+
*/
|
|
107
|
+
static void
|
|
108
|
+
IpcMemoryDelete(int status, Datum shmId)
|
|
109
|
+
{
|
|
110
|
+
struct shmid_ds shmStat;
|
|
111
|
+
|
|
112
|
+
/*
|
|
113
|
+
* Is a previously-existing shmem segment still existing and in use?
|
|
114
|
+
*/
|
|
115
|
+
if (shmctl(shmId, IPC_STAT, &shmStat) < 0
|
|
116
|
+
&& (errno == EINVAL || errno == EACCES))
|
|
117
|
+
return;
|
|
118
|
+
else if (shmStat.shm_nattch != 0)
|
|
119
|
+
return;
|
|
120
|
+
|
|
121
|
+
if (shmctl(shmId, IPC_RMID, NULL) < 0)
|
|
122
|
+
pool_log("shmctl(%lu, %d, 0) failed: %s",
|
|
123
|
+
shmId, IPC_RMID, strerror(errno));
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
void
|
|
127
|
+
pool_shmem_exit(int code)
|
|
128
|
+
{
|
|
129
|
+
shmem_exit(code);
|
|
130
|
+
/* Close syslog connection here as this function is always called on exit */
|
|
131
|
+
closelog();
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
/*
|
|
135
|
+
* Run all of the on_shmem_exit routines --- but don't actually exit. This
|
|
136
|
+
* is used by the postmaster to re-initialize shared memory and semaphores
|
|
137
|
+
* after a backend dies horribly.
|
|
138
|
+
*/
|
|
139
|
+
void
|
|
140
|
+
shmem_exit(int code)
|
|
141
|
+
{
|
|
142
|
+
pool_debug("shmem_exit(%d)", code);
|
|
143
|
+
|
|
144
|
+
/*
|
|
145
|
+
* Call all the registered callbacks.
|
|
146
|
+
*
|
|
147
|
+
* As with proc_exit(), we remove each callback from the list before
|
|
148
|
+
* calling it, to avoid infinite loop in case of error.
|
|
149
|
+
*/
|
|
150
|
+
while (--on_shmem_exit_index >= 0)
|
|
151
|
+
(*on_shmem_exit_list[on_shmem_exit_index].function) (code,
|
|
152
|
+
on_shmem_exit_list[on_shmem_exit_index].arg);
|
|
153
|
+
|
|
154
|
+
on_shmem_exit_index = 0;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
/*
|
|
158
|
+
* This function adds a callback function to the list of functions invoked
|
|
159
|
+
* by shmem_exit().
|
|
160
|
+
*/
|
|
161
|
+
void
|
|
162
|
+
on_shmem_exit(void (*function) (int code, Datum arg), Datum arg)
|
|
163
|
+
{
|
|
164
|
+
if (on_shmem_exit_index >= MAX_ON_EXITS)
|
|
165
|
+
pool_error("out of on_shmem_exit slots");
|
|
166
|
+
else
|
|
167
|
+
{
|
|
168
|
+
on_shmem_exit_list[on_shmem_exit_index].function = function;
|
|
169
|
+
on_shmem_exit_list[on_shmem_exit_index].arg = arg;
|
|
170
|
+
|
|
171
|
+
++on_shmem_exit_index;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
/*
|
|
176
|
+
* This function clears all on_proc_exit() and on_shmem_exit() registered
|
|
177
|
+
* functions. This is used just after forking a backend, so that the
|
|
178
|
+
* backend doesn't believe it should call the postmaster's on-exit routines
|
|
179
|
+
* when it exits...
|
|
180
|
+
*/
|
|
181
|
+
void
|
|
182
|
+
on_exit_reset(void)
|
|
183
|
+
{
|
|
184
|
+
on_shmem_exit_index = 0;
|
|
185
|
+
}
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
/* -*-pgsql-c-*- */
|
|
2
|
+
/*
|
|
3
|
+
* $Header$
|
|
4
|
+
*
|
|
5
|
+
* pgpool: a language independent connection pool server for PostgreSQL
|
|
6
|
+
* written by Tatsuo Ishii
|
|
7
|
+
*
|
|
8
|
+
* Portions Copyright (c) 2003-2008, PgPool Global Development Group
|
|
9
|
+
* Portions Copyright (c) 2003-2004, PostgreSQL Global Development Group
|
|
10
|
+
*
|
|
11
|
+
* Permission to use, copy, modify, and distribute this software and
|
|
12
|
+
* its documentation for any purpose and without fee is hereby
|
|
13
|
+
* granted, provided that the above copyright notice appear in all
|
|
14
|
+
* copies and that both that copyright notice and this permission
|
|
15
|
+
* notice appear in supporting documentation, and that the name of the
|
|
16
|
+
* author not be used in advertising or publicity pertaining to
|
|
17
|
+
* distribution of the software without specific, written prior
|
|
18
|
+
* permission. The author makes no representations about the
|
|
19
|
+
* suitability of this software for any purpose. It is provided "as
|
|
20
|
+
* is" without express or implied warranty.
|
|
21
|
+
*/
|
|
22
|
+
|
|
23
|
+
/*
|
|
24
|
+
* Signal stuff. Stolen from PostgreSQL source code.
|
|
25
|
+
*/
|
|
26
|
+
|
|
27
|
+
#include "config.h"
|
|
28
|
+
#include "pool_signal.h"
|
|
29
|
+
#include <signal.h>
|
|
30
|
+
|
|
31
|
+
#ifdef HAVE_SIGPROCMASK
|
|
32
|
+
sigset_t UnBlockSig,
|
|
33
|
+
BlockSig,
|
|
34
|
+
AuthBlockSig;
|
|
35
|
+
|
|
36
|
+
#else
|
|
37
|
+
int UnBlockSig,
|
|
38
|
+
BlockSig,
|
|
39
|
+
AuthBlockSig;
|
|
40
|
+
#endif
|
|
41
|
+
|
|
42
|
+
/*
|
|
43
|
+
* Initialize BlockSig, UnBlockSig, and AuthBlockSig.
|
|
44
|
+
*
|
|
45
|
+
* BlockSig is the set of signals to block when we are trying to block
|
|
46
|
+
* signals. This includes all signals we normally expect to get, but NOT
|
|
47
|
+
* signals that should never be turned off.
|
|
48
|
+
*
|
|
49
|
+
* AuthBlockSig is the set of signals to block during authentication;
|
|
50
|
+
* it's essentially BlockSig minus SIGTERM, SIGQUIT, SIGALRM.
|
|
51
|
+
*
|
|
52
|
+
* UnBlockSig is the set of signals to block when we don't want to block
|
|
53
|
+
* signals (is this ever nonzero??)
|
|
54
|
+
*/
|
|
55
|
+
void
|
|
56
|
+
poolinitmask(void)
|
|
57
|
+
{
|
|
58
|
+
#ifdef HAVE_SIGPROCMASK
|
|
59
|
+
sigemptyset(&UnBlockSig);
|
|
60
|
+
sigfillset(&BlockSig);
|
|
61
|
+
sigfillset(&AuthBlockSig);
|
|
62
|
+
|
|
63
|
+
/*
|
|
64
|
+
* Unmark those signals that should never be blocked. Some of these
|
|
65
|
+
* signal names don't exist on all platforms. Most do, but might as
|
|
66
|
+
* well ifdef them all for consistency...
|
|
67
|
+
*/
|
|
68
|
+
#ifdef SIGTRAP
|
|
69
|
+
sigdelset(&BlockSig, SIGTRAP);
|
|
70
|
+
sigdelset(&AuthBlockSig, SIGTRAP);
|
|
71
|
+
#endif
|
|
72
|
+
#ifdef SIGABRT
|
|
73
|
+
sigdelset(&BlockSig, SIGABRT);
|
|
74
|
+
sigdelset(&AuthBlockSig, SIGABRT);
|
|
75
|
+
#endif
|
|
76
|
+
#ifdef SIGILL
|
|
77
|
+
sigdelset(&BlockSig, SIGILL);
|
|
78
|
+
sigdelset(&AuthBlockSig, SIGILL);
|
|
79
|
+
#endif
|
|
80
|
+
#ifdef SIGFPE
|
|
81
|
+
sigdelset(&BlockSig, SIGFPE);
|
|
82
|
+
sigdelset(&AuthBlockSig, SIGFPE);
|
|
83
|
+
#endif
|
|
84
|
+
#ifdef SIGSEGV
|
|
85
|
+
sigdelset(&BlockSig, SIGSEGV);
|
|
86
|
+
sigdelset(&AuthBlockSig, SIGSEGV);
|
|
87
|
+
#endif
|
|
88
|
+
#ifdef SIGBUS
|
|
89
|
+
sigdelset(&BlockSig, SIGBUS);
|
|
90
|
+
sigdelset(&AuthBlockSig, SIGBUS);
|
|
91
|
+
#endif
|
|
92
|
+
#ifdef SIGSYS
|
|
93
|
+
sigdelset(&BlockSig, SIGSYS);
|
|
94
|
+
sigdelset(&AuthBlockSig, SIGSYS);
|
|
95
|
+
#endif
|
|
96
|
+
#ifdef SIGCONT
|
|
97
|
+
sigdelset(&BlockSig, SIGCONT);
|
|
98
|
+
sigdelset(&AuthBlockSig, SIGCONT);
|
|
99
|
+
#endif
|
|
100
|
+
#ifdef SIGTERM
|
|
101
|
+
sigdelset(&AuthBlockSig, SIGTERM);
|
|
102
|
+
#endif
|
|
103
|
+
#ifdef SIGQUIT
|
|
104
|
+
sigdelset(&AuthBlockSig, SIGQUIT);
|
|
105
|
+
#endif
|
|
106
|
+
#ifdef SIGALRM
|
|
107
|
+
sigdelset(&AuthBlockSig, SIGALRM);
|
|
108
|
+
#endif
|
|
109
|
+
#else
|
|
110
|
+
UnBlockSig = 0;
|
|
111
|
+
BlockSig = sigmask(SIGHUP) | sigmask(SIGQUIT) |
|
|
112
|
+
sigmask(SIGTERM) | sigmask(SIGALRM) |
|
|
113
|
+
sigmask(SIGINT) | sigmask(SIGUSR1) |
|
|
114
|
+
sigmask(SIGUSR2) | sigmask(SIGCHLD) |
|
|
115
|
+
sigmask(SIGWINCH) | sigmask(SIGFPE);
|
|
116
|
+
AuthBlockSig = sigmask(SIGHUP) |
|
|
117
|
+
sigmask(SIGINT) | sigmask(SIGUSR1) |
|
|
118
|
+
sigmask(SIGUSR2) | sigmask(SIGCHLD) |
|
|
119
|
+
sigmask(SIGWINCH) | sigmask(SIGFPE);
|
|
120
|
+
#endif
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
/* Win32 signal handling is in backend/port/win32/signal.c */
|
|
125
|
+
#ifndef WIN32
|
|
126
|
+
|
|
127
|
+
/*
|
|
128
|
+
* We need to check actually the system has the posix signals or not, but...
|
|
129
|
+
*/
|
|
130
|
+
#define HAVE_POSIX_SIGNALS
|
|
131
|
+
/*
|
|
132
|
+
* Set up a signal handler
|
|
133
|
+
*/
|
|
134
|
+
pool_sighandler_t
|
|
135
|
+
pool_signal(int signo, pool_sighandler_t func)
|
|
136
|
+
{
|
|
137
|
+
#if !defined(HAVE_POSIX_SIGNALS)
|
|
138
|
+
return signal(signo, func);
|
|
139
|
+
#else
|
|
140
|
+
struct sigaction act,
|
|
141
|
+
oact;
|
|
142
|
+
|
|
143
|
+
act.sa_handler = func;
|
|
144
|
+
sigemptyset(&act.sa_mask);
|
|
145
|
+
act.sa_flags = 0;
|
|
146
|
+
if (signo != SIGALRM)
|
|
147
|
+
act.sa_flags |= SA_RESTART;
|
|
148
|
+
#ifdef SA_NOCLDSTOP
|
|
149
|
+
if (signo == SIGCHLD)
|
|
150
|
+
act.sa_flags |= SA_NOCLDSTOP;
|
|
151
|
+
#endif
|
|
152
|
+
if (sigaction(signo, &act, &oact) < 0)
|
|
153
|
+
return SIG_ERR;
|
|
154
|
+
return oact.sa_handler;
|
|
155
|
+
#endif /* !HAVE_POSIX_SIGNALS */
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
#endif /* WIN32 */
|