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.
Files changed (393) hide show
  1. data/.gitignore +4 -0
  2. data/Gemfile +2 -0
  3. data/Gemfile.lock +20 -0
  4. data/LICENSE +202 -0
  5. data/NOTICE +22 -0
  6. data/README.md +217 -0
  7. data/Rakefile +13 -0
  8. data/VERSION +1 -0
  9. data/bin/prestogres +254 -0
  10. data/config/pcp.conf.sample +28 -0
  11. data/config/pgpool.conf +678 -0
  12. data/config/pool_hba.conf +84 -0
  13. data/config/pool_passwd +0 -0
  14. data/config/postgresql.conf +2 -0
  15. data/ext/.gitignore +6 -0
  16. data/ext/depend +26 -0
  17. data/ext/extconf.rb +4 -0
  18. data/ext/prestogres_config.c +12 -0
  19. data/pgpool2/.gitignore +36 -0
  20. data/pgpool2/AUTHORS +4 -0
  21. data/pgpool2/COPYING +12 -0
  22. data/pgpool2/ChangeLog +1 -0
  23. data/pgpool2/INSTALL +1 -0
  24. data/pgpool2/Makefile.am +159 -0
  25. data/pgpool2/Makefile.in +1187 -0
  26. data/pgpool2/NEWS +4960 -0
  27. data/pgpool2/README +1 -0
  28. data/pgpool2/README.euc_jp +1 -0
  29. data/pgpool2/README.online-recovery +62 -0
  30. data/pgpool2/TODO +103 -0
  31. data/pgpool2/ac_func_accept_argtypes.m4 +85 -0
  32. data/pgpool2/aclocal.m4 +1088 -0
  33. data/pgpool2/c-compiler.m4 +134 -0
  34. data/pgpool2/c-library.m4 +325 -0
  35. data/pgpool2/child.c +2097 -0
  36. data/pgpool2/config.guess +1532 -0
  37. data/pgpool2/config.h.in +332 -0
  38. data/pgpool2/config.sub +1640 -0
  39. data/pgpool2/configure +15752 -0
  40. data/pgpool2/configure.in +392 -0
  41. data/pgpool2/depcomp +522 -0
  42. data/pgpool2/doc/basebackup.sh +17 -0
  43. data/pgpool2/doc/pgpool-de.html +4220 -0
  44. data/pgpool2/doc/pgpool-en.html +5738 -0
  45. data/pgpool2/doc/pgpool-fr.html +4118 -0
  46. data/pgpool2/doc/pgpool-ja.css +198 -0
  47. data/pgpool2/doc/pgpool-ja.html +11279 -0
  48. data/pgpool2/doc/pgpool-zh_cn.html +4445 -0
  49. data/pgpool2/doc/pgpool.css +280 -0
  50. data/pgpool2/doc/pgpool_remote_start +13 -0
  51. data/pgpool2/doc/recovery.conf.sample +117 -0
  52. data/pgpool2/doc/tutorial-en.html +707 -0
  53. data/pgpool2/doc/tutorial-ja.html +422 -0
  54. data/pgpool2/doc/tutorial-memqcache-en.html +325 -0
  55. data/pgpool2/doc/tutorial-memqcache-ja.html +370 -0
  56. data/pgpool2/doc/tutorial-memqcache-zh_cn.html +322 -0
  57. data/pgpool2/doc/tutorial-watchdog-en.html +306 -0
  58. data/pgpool2/doc/tutorial-watchdog-ja.html +343 -0
  59. data/pgpool2/doc/tutorial-watchdog-zh_cn.html +301 -0
  60. data/pgpool2/doc/tutorial-zh_cn.html +537 -0
  61. data/pgpool2/doc/watchdog.png +0 -0
  62. data/pgpool2/doc/wd-en.html +236 -0
  63. data/pgpool2/doc/wd-en.jpg +0 -0
  64. data/pgpool2/doc/wd-ja.html +219 -0
  65. data/pgpool2/doc/wd-ja.jpg +0 -0
  66. data/pgpool2/doc/wd-zh_cn.html +201 -0
  67. data/pgpool2/doc/where_to_send_queries.odg +0 -0
  68. data/pgpool2/doc/where_to_send_queries.pdf +0 -0
  69. data/pgpool2/general.m4 +166 -0
  70. data/pgpool2/getopt_long.c +200 -0
  71. data/pgpool2/getopt_long.h +44 -0
  72. data/pgpool2/install-sh +251 -0
  73. data/pgpool2/ltmain.sh +8406 -0
  74. data/pgpool2/m4/libtool.m4 +7360 -0
  75. data/pgpool2/m4/ltoptions.m4 +368 -0
  76. data/pgpool2/m4/ltsugar.m4 +123 -0
  77. data/pgpool2/m4/ltversion.m4 +23 -0
  78. data/pgpool2/m4/lt~obsolete.m4 +92 -0
  79. data/pgpool2/main.c +2971 -0
  80. data/pgpool2/md5.c +444 -0
  81. data/pgpool2/md5.h +28 -0
  82. data/pgpool2/missing +360 -0
  83. data/pgpool2/mkinstalldirs +40 -0
  84. data/pgpool2/parser/Makefile.am +50 -0
  85. data/pgpool2/parser/Makefile.in +559 -0
  86. data/pgpool2/parser/copyfuncs.c +3310 -0
  87. data/pgpool2/parser/gram.c +39100 -0
  88. data/pgpool2/parser/gram.h +940 -0
  89. data/pgpool2/parser/gram.y +13408 -0
  90. data/pgpool2/parser/gramparse.h +74 -0
  91. data/pgpool2/parser/keywords.c +32 -0
  92. data/pgpool2/parser/keywords.h +39 -0
  93. data/pgpool2/parser/kwlist.h +425 -0
  94. data/pgpool2/parser/kwlookup.c +88 -0
  95. data/pgpool2/parser/list.c +1156 -0
  96. data/pgpool2/parser/makefuncs.c +518 -0
  97. data/pgpool2/parser/makefuncs.h +83 -0
  98. data/pgpool2/parser/memnodes.h +79 -0
  99. data/pgpool2/parser/nodes.c +29 -0
  100. data/pgpool2/parser/nodes.h +609 -0
  101. data/pgpool2/parser/outfuncs.c +5790 -0
  102. data/pgpool2/parser/parsenodes.h +2615 -0
  103. data/pgpool2/parser/parser.c +262 -0
  104. data/pgpool2/parser/parser.h +46 -0
  105. data/pgpool2/parser/pg_class.h +158 -0
  106. data/pgpool2/parser/pg_config_manual.h +273 -0
  107. data/pgpool2/parser/pg_list.h +352 -0
  108. data/pgpool2/parser/pg_trigger.h +147 -0
  109. data/pgpool2/parser/pg_wchar.h +492 -0
  110. data/pgpool2/parser/pool_memory.c +342 -0
  111. data/pgpool2/parser/pool_memory.h +77 -0
  112. data/pgpool2/parser/pool_parser.h +222 -0
  113. data/pgpool2/parser/pool_string.c +121 -0
  114. data/pgpool2/parser/pool_string.h +37 -0
  115. data/pgpool2/parser/primnodes.h +1280 -0
  116. data/pgpool2/parser/scan.c +4094 -0
  117. data/pgpool2/parser/scan.l +1451 -0
  118. data/pgpool2/parser/scanner.h +120 -0
  119. data/pgpool2/parser/scansup.c +221 -0
  120. data/pgpool2/parser/scansup.h +28 -0
  121. data/pgpool2/parser/snprintf.c +1102 -0
  122. data/pgpool2/parser/stringinfo.c +294 -0
  123. data/pgpool2/parser/stringinfo.h +178 -0
  124. data/pgpool2/parser/value.c +78 -0
  125. data/pgpool2/parser/value.h +62 -0
  126. data/pgpool2/parser/wchar.c +2048 -0
  127. data/pgpool2/pcp.conf.sample +28 -0
  128. data/pgpool2/pcp/Makefile.am +40 -0
  129. data/pgpool2/pcp/Makefile.in +771 -0
  130. data/pgpool2/pcp/libpcp_ext.h +250 -0
  131. data/pgpool2/pcp/md5.c +444 -0
  132. data/pgpool2/pcp/md5.h +28 -0
  133. data/pgpool2/pcp/pcp.c +1652 -0
  134. data/pgpool2/pcp/pcp.h +61 -0
  135. data/pgpool2/pcp/pcp_attach_node.c +172 -0
  136. data/pgpool2/pcp/pcp_detach_node.c +185 -0
  137. data/pgpool2/pcp/pcp_error.c +87 -0
  138. data/pgpool2/pcp/pcp_node_count.c +160 -0
  139. data/pgpool2/pcp/pcp_node_info.c +198 -0
  140. data/pgpool2/pcp/pcp_pool_status.c +166 -0
  141. data/pgpool2/pcp/pcp_proc_count.c +166 -0
  142. data/pgpool2/pcp/pcp_proc_info.c +261 -0
  143. data/pgpool2/pcp/pcp_promote_node.c +185 -0
  144. data/pgpool2/pcp/pcp_recovery_node.c +172 -0
  145. data/pgpool2/pcp/pcp_stop_pgpool.c +179 -0
  146. data/pgpool2/pcp/pcp_stream.c +385 -0
  147. data/pgpool2/pcp/pcp_stream.h +52 -0
  148. data/pgpool2/pcp/pcp_systemdb_info.c +194 -0
  149. data/pgpool2/pcp/pcp_watchdog_info.c +211 -0
  150. data/pgpool2/pcp_child.c +1493 -0
  151. data/pgpool2/pg_md5.c +305 -0
  152. data/pgpool2/pgpool.8.in +121 -0
  153. data/pgpool2/pgpool.conf +553 -0
  154. data/pgpool2/pgpool.conf.sample +666 -0
  155. data/pgpool2/pgpool.conf.sample-master-slave +665 -0
  156. data/pgpool2/pgpool.conf.sample-replication +664 -0
  157. data/pgpool2/pgpool.conf.sample-stream +664 -0
  158. data/pgpool2/pgpool.spec +264 -0
  159. data/pgpool2/pgpool_adm/TODO +7 -0
  160. data/pgpool2/pgpool_adm/pgpool_adm--1.0.sql +85 -0
  161. data/pgpool2/pgpool_adm/pgpool_adm.c +558 -0
  162. data/pgpool2/pgpool_adm/pgpool_adm.control +5 -0
  163. data/pgpool2/pgpool_adm/pgpool_adm.h +46 -0
  164. data/pgpool2/pgpool_adm/pgpool_adm.sql.in +85 -0
  165. data/pgpool2/pool.h +655 -0
  166. data/pgpool2/pool_auth.c +1390 -0
  167. data/pgpool2/pool_config.c +5007 -0
  168. data/pgpool2/pool_config.h +284 -0
  169. data/pgpool2/pool_config.l +3281 -0
  170. data/pgpool2/pool_config_md5.c +29 -0
  171. data/pgpool2/pool_connection_pool.c +812 -0
  172. data/pgpool2/pool_error.c +242 -0
  173. data/pgpool2/pool_globals.c +27 -0
  174. data/pgpool2/pool_hba.c +1723 -0
  175. data/pgpool2/pool_hba.conf.sample +67 -0
  176. data/pgpool2/pool_ip.c +567 -0
  177. data/pgpool2/pool_ip.h +65 -0
  178. data/pgpool2/pool_ipc.h +38 -0
  179. data/pgpool2/pool_lobj.c +242 -0
  180. data/pgpool2/pool_lobj.h +32 -0
  181. data/pgpool2/pool_memqcache.c +3818 -0
  182. data/pgpool2/pool_memqcache.h +268 -0
  183. data/pgpool2/pool_params.c +163 -0
  184. data/pgpool2/pool_passwd.c +249 -0
  185. data/pgpool2/pool_passwd.h +41 -0
  186. data/pgpool2/pool_path.c +193 -0
  187. data/pgpool2/pool_path.h +81 -0
  188. data/pgpool2/pool_process_context.c +247 -0
  189. data/pgpool2/pool_process_context.h +62 -0
  190. data/pgpool2/pool_process_query.c +5001 -0
  191. data/pgpool2/pool_process_reporting.c +1671 -0
  192. data/pgpool2/pool_process_reporting.h +44 -0
  193. data/pgpool2/pool_proto2.c +671 -0
  194. data/pgpool2/pool_proto_modules.c +3524 -0
  195. data/pgpool2/pool_proto_modules.h +185 -0
  196. data/pgpool2/pool_query_cache.c +1020 -0
  197. data/pgpool2/pool_query_context.c +1871 -0
  198. data/pgpool2/pool_query_context.h +105 -0
  199. data/pgpool2/pool_relcache.c +284 -0
  200. data/pgpool2/pool_relcache.h +78 -0
  201. data/pgpool2/pool_rewrite_outfuncs.c +9060 -0
  202. data/pgpool2/pool_rewrite_query.c +715 -0
  203. data/pgpool2/pool_rewrite_query.h +192 -0
  204. data/pgpool2/pool_select_walker.c +1150 -0
  205. data/pgpool2/pool_select_walker.h +68 -0
  206. data/pgpool2/pool_sema.c +161 -0
  207. data/pgpool2/pool_session_context.c +952 -0
  208. data/pgpool2/pool_session_context.h +203 -0
  209. data/pgpool2/pool_shmem.c +185 -0
  210. data/pgpool2/pool_signal.c +158 -0
  211. data/pgpool2/pool_signal.h +61 -0
  212. data/pgpool2/pool_ssl.c +339 -0
  213. data/pgpool2/pool_stream.c +962 -0
  214. data/pgpool2/pool_stream.h +61 -0
  215. data/pgpool2/pool_system.c +659 -0
  216. data/pgpool2/pool_timestamp.c +1215 -0
  217. data/pgpool2/pool_timestamp.h +38 -0
  218. data/pgpool2/pool_type.h +171 -0
  219. data/pgpool2/pool_worker_child.c +384 -0
  220. data/pgpool2/ps_status.c +404 -0
  221. data/pgpool2/recovery.c +435 -0
  222. data/pgpool2/redhat/pgpool.conf.sample.patch +52 -0
  223. data/pgpool2/redhat/pgpool.init +201 -0
  224. data/pgpool2/redhat/pgpool.sysconfig +7 -0
  225. data/pgpool2/redhat/rpm_installer/basebackup-replication.sh +53 -0
  226. data/pgpool2/redhat/rpm_installer/basebackup-stream.sh +55 -0
  227. data/pgpool2/redhat/rpm_installer/config_for_script +17 -0
  228. data/pgpool2/redhat/rpm_installer/failover.sh +64 -0
  229. data/pgpool2/redhat/rpm_installer/getsources.sh +141 -0
  230. data/pgpool2/redhat/rpm_installer/install.sh +1363 -0
  231. data/pgpool2/redhat/rpm_installer/pgpool_recovery_pitr +47 -0
  232. data/pgpool2/redhat/rpm_installer/pgpool_remote_start +15 -0
  233. data/pgpool2/redhat/rpm_installer/recovery.conf +4 -0
  234. data/pgpool2/redhat/rpm_installer/uninstall.sh +57 -0
  235. data/pgpool2/sample/dist_def_pgbench.sql +73 -0
  236. data/pgpool2/sample/pgpool.pam +3 -0
  237. data/pgpool2/sample/pgpool_recovery +20 -0
  238. data/pgpool2/sample/pgpool_recovery_pitr +19 -0
  239. data/pgpool2/sample/pgpool_remote_start +13 -0
  240. data/pgpool2/sample/replicate_def_pgbench.sql +18 -0
  241. data/pgpool2/sql/insert_lock.sql +15 -0
  242. data/pgpool2/sql/pgpool-recovery/pgpool-recovery.c +280 -0
  243. data/pgpool2/sql/pgpool-recovery/pgpool-recovery.sql.in +19 -0
  244. data/pgpool2/sql/pgpool-recovery/pgpool_recovery--1.0.sql +24 -0
  245. data/pgpool2/sql/pgpool-recovery/pgpool_recovery.control +5 -0
  246. data/pgpool2/sql/pgpool-recovery/uninstall_pgpool-recovery.sql +3 -0
  247. data/pgpool2/sql/pgpool-regclass/pgpool-regclass.c +206 -0
  248. data/pgpool2/sql/pgpool-regclass/pgpool-regclass.sql.in +4 -0
  249. data/pgpool2/sql/pgpool-regclass/pgpool_regclass--1.0.sql +7 -0
  250. data/pgpool2/sql/pgpool-regclass/pgpool_regclass.control +5 -0
  251. data/pgpool2/sql/pgpool-regclass/uninstall_pgpool-regclass.sql +1 -0
  252. data/pgpool2/sql/system_db.sql +38 -0
  253. data/pgpool2/strlcpy.c +85 -0
  254. data/pgpool2/test/C/test_extended.c +98 -0
  255. data/pgpool2/test/jdbc/.cvsignore +2 -0
  256. data/pgpool2/test/jdbc/AutoCommitTest.java +45 -0
  257. data/pgpool2/test/jdbc/BatchTest.java +55 -0
  258. data/pgpool2/test/jdbc/ColumnTest.java +60 -0
  259. data/pgpool2/test/jdbc/CreateTempTableTest.java +48 -0
  260. data/pgpool2/test/jdbc/InsertTest.java +34 -0
  261. data/pgpool2/test/jdbc/LockTest.java +36 -0
  262. data/pgpool2/test/jdbc/PgpoolTest.java +75 -0
  263. data/pgpool2/test/jdbc/README.euc_jp +73 -0
  264. data/pgpool2/test/jdbc/RunTest.java +83 -0
  265. data/pgpool2/test/jdbc/SelectTest.java +37 -0
  266. data/pgpool2/test/jdbc/UpdateTest.java +32 -0
  267. data/pgpool2/test/jdbc/expected/CreateTempTable +1 -0
  268. data/pgpool2/test/jdbc/expected/autocommit +10 -0
  269. data/pgpool2/test/jdbc/expected/batch +1 -0
  270. data/pgpool2/test/jdbc/expected/column +100 -0
  271. data/pgpool2/test/jdbc/expected/insert +1 -0
  272. data/pgpool2/test/jdbc/expected/lock +100 -0
  273. data/pgpool2/test/jdbc/expected/select +2 -0
  274. data/pgpool2/test/jdbc/expected/update +1 -0
  275. data/pgpool2/test/jdbc/pgpool.properties +7 -0
  276. data/pgpool2/test/jdbc/prepare.sql +54 -0
  277. data/pgpool2/test/jdbc/run.sh +6 -0
  278. data/pgpool2/test/parser/.cvsignore +6 -0
  279. data/pgpool2/test/parser/README +32 -0
  280. data/pgpool2/test/parser/expected/copy.out +17 -0
  281. data/pgpool2/test/parser/expected/create.out +64 -0
  282. data/pgpool2/test/parser/expected/cursor.out +37 -0
  283. data/pgpool2/test/parser/expected/delete.out +10 -0
  284. data/pgpool2/test/parser/expected/drop.out +12 -0
  285. data/pgpool2/test/parser/expected/insert.out +13 -0
  286. data/pgpool2/test/parser/expected/misc.out +28 -0
  287. data/pgpool2/test/parser/expected/prepare.out +4 -0
  288. data/pgpool2/test/parser/expected/privileges.out +31 -0
  289. data/pgpool2/test/parser/expected/scanner.out +30 -0
  290. data/pgpool2/test/parser/expected/select.out +89 -0
  291. data/pgpool2/test/parser/expected/transaction.out +38 -0
  292. data/pgpool2/test/parser/expected/update.out +11 -0
  293. data/pgpool2/test/parser/expected/v84.out +37 -0
  294. data/pgpool2/test/parser/expected/v90.out +25 -0
  295. data/pgpool2/test/parser/expected/var.out +22 -0
  296. data/pgpool2/test/parser/input/alter.sql +2 -0
  297. data/pgpool2/test/parser/input/copy.sql +17 -0
  298. data/pgpool2/test/parser/input/create.sql +64 -0
  299. data/pgpool2/test/parser/input/cursor.sql +37 -0
  300. data/pgpool2/test/parser/input/delete.sql +10 -0
  301. data/pgpool2/test/parser/input/drop.sql +12 -0
  302. data/pgpool2/test/parser/input/insert.sql +13 -0
  303. data/pgpool2/test/parser/input/misc.sql +28 -0
  304. data/pgpool2/test/parser/input/prepare.sql +4 -0
  305. data/pgpool2/test/parser/input/privileges.sql +31 -0
  306. data/pgpool2/test/parser/input/scanner.sql +34 -0
  307. data/pgpool2/test/parser/input/select.sql +89 -0
  308. data/pgpool2/test/parser/input/transaction.sql +38 -0
  309. data/pgpool2/test/parser/input/update.sql +11 -0
  310. data/pgpool2/test/parser/input/v84.sql +37 -0
  311. data/pgpool2/test/parser/input/v90.sql +38 -0
  312. data/pgpool2/test/parser/input/var.sql +22 -0
  313. data/pgpool2/test/parser/main.c +96 -0
  314. data/pgpool2/test/parser/parse_schedule +16 -0
  315. data/pgpool2/test/parser/pool.h +13 -0
  316. data/pgpool2/test/parser/run-test +62 -0
  317. data/pgpool2/test/pdo-test/README.euc_jp +58 -0
  318. data/pgpool2/test/pdo-test/SQLlist/test1.sql +3 -0
  319. data/pgpool2/test/pdo-test/SQLlist/test2.sql +3 -0
  320. data/pgpool2/test/pdo-test/collections.inc +11 -0
  321. data/pgpool2/test/pdo-test/def.inc +7 -0
  322. data/pgpool2/test/pdo-test/log.txt +0 -0
  323. data/pgpool2/test/pdo-test/mod/database.inc +36 -0
  324. data/pgpool2/test/pdo-test/mod/def.inc +0 -0
  325. data/pgpool2/test/pdo-test/mod/errorhandler.inc +27 -0
  326. data/pgpool2/test/pdo-test/pdotest.php +11 -0
  327. data/pgpool2/test/pdo-test/regsql.inc +56 -0
  328. data/pgpool2/test/pgpool_setup +898 -0
  329. data/pgpool2/test/regression/README +39 -0
  330. data/pgpool2/test/regression/clean.sh +21 -0
  331. data/pgpool2/test/regression/libs.sh +16 -0
  332. data/pgpool2/test/regression/regress.sh +166 -0
  333. data/pgpool2/test/regression/tests/001.load_balance/test.sh +128 -0
  334. data/pgpool2/test/regression/tests/002.native_replication/PgTester.java +47 -0
  335. data/pgpool2/test/regression/tests/002.native_replication/create.sql +6 -0
  336. data/pgpool2/test/regression/tests/002.native_replication/test.sh +71 -0
  337. data/pgpool2/test/regression/tests/003.failover/expected.r +6 -0
  338. data/pgpool2/test/regression/tests/003.failover/expected.s +6 -0
  339. data/pgpool2/test/regression/tests/003.failover/test.sh +45 -0
  340. data/pgpool2/test/regression/tests/004.watchdog/master.conf +12 -0
  341. data/pgpool2/test/regression/tests/004.watchdog/standby.conf +19 -0
  342. data/pgpool2/test/regression/tests/004.watchdog/test.sh +52 -0
  343. data/pgpool2/test/regression/tests/050.bug58/test.sh +50 -0
  344. data/pgpool2/test/regression/tests/051.bug60/bug.sql +12 -0
  345. data/pgpool2/test/regression/tests/051.bug60/database-clean.sql +6 -0
  346. data/pgpool2/test/regression/tests/051.bug60/database-setup.sql +28 -0
  347. data/pgpool2/test/regression/tests/051.bug60/test.sh +79 -0
  348. data/pgpool2/test/regression/tests/052.do_query/test.sh +44 -0
  349. data/pgpool2/test/regression/tests/053.insert_lock_hangs/test.sh +81 -0
  350. data/pgpool2/test/regression/tests/054.postgres_fdw/test.sh +67 -0
  351. data/pgpool2/test/regression/tests/055.backend_all_down/test.sh +52 -0
  352. data/pgpool2/test/regression/tests/056.bug63/jdbctest2.java +66 -0
  353. data/pgpool2/test/regression/tests/056.bug63/test.sh +47 -0
  354. data/pgpool2/test/regression/tests/057.bug61/test.sh +40 -0
  355. data/pgpool2/test/regression/tests/058.bug68/jdbctest3.java +45 -0
  356. data/pgpool2/test/regression/tests/058.bug68/test.sh +47 -0
  357. data/pgpool2/test/timestamp/expected/insert.out +16 -0
  358. data/pgpool2/test/timestamp/expected/misc.out +3 -0
  359. data/pgpool2/test/timestamp/expected/update.out +6 -0
  360. data/pgpool2/test/timestamp/input/insert.sql +16 -0
  361. data/pgpool2/test/timestamp/input/misc.sql +3 -0
  362. data/pgpool2/test/timestamp/input/update.sql +6 -0
  363. data/pgpool2/test/timestamp/main.c +129 -0
  364. data/pgpool2/test/timestamp/parse_schedule +3 -0
  365. data/pgpool2/test/timestamp/run-test +69 -0
  366. data/pgpool2/version.h +1 -0
  367. data/pgpool2/watchdog/Makefile.am +17 -0
  368. data/pgpool2/watchdog/Makefile.in +505 -0
  369. data/pgpool2/watchdog/test/stab.c +266 -0
  370. data/pgpool2/watchdog/test/test.c +85 -0
  371. data/pgpool2/watchdog/test/wd_child_t.c +87 -0
  372. data/pgpool2/watchdog/test/wd_lifecheck_t.c +87 -0
  373. data/pgpool2/watchdog/test/wd_packet_t.c +87 -0
  374. data/pgpool2/watchdog/test/wd_ping_t.c +20 -0
  375. data/pgpool2/watchdog/watchdog.c +408 -0
  376. data/pgpool2/watchdog/watchdog.h +209 -0
  377. data/pgpool2/watchdog/wd_child.c +444 -0
  378. data/pgpool2/watchdog/wd_ext.h +123 -0
  379. data/pgpool2/watchdog/wd_heartbeat.c +577 -0
  380. data/pgpool2/watchdog/wd_if.c +216 -0
  381. data/pgpool2/watchdog/wd_init.c +126 -0
  382. data/pgpool2/watchdog/wd_interlock.c +347 -0
  383. data/pgpool2/watchdog/wd_lifecheck.c +512 -0
  384. data/pgpool2/watchdog/wd_list.c +429 -0
  385. data/pgpool2/watchdog/wd_packet.c +1159 -0
  386. data/pgpool2/watchdog/wd_ping.c +330 -0
  387. data/pgpool2/ylwrap +223 -0
  388. data/pgsql/presto_client.py +346 -0
  389. data/pgsql/prestogres.py +156 -0
  390. data/pgsql/setup_functions.sql +21 -0
  391. data/pgsql/setup_language.sql +3 -0
  392. data/prestogres.gemspec +23 -0
  393. metadata +496 -0
@@ -0,0 +1,87 @@
1
+ #include <stdio.h>
2
+ #include <string.h>
3
+ #include <stdarg.h>
4
+ #include <sys/types.h>
5
+ #include <unistd.h>
6
+ #include <stdlib.h>
7
+
8
+ #include "pool.h"
9
+ #include "pool_config.h"
10
+ #include "watchdog.h"
11
+ #include "wd_ext.h"
12
+
13
+ pid_t mypid;
14
+ WdInfo * WD_List = NULL; /* watchdog server list */
15
+
16
+ static void wdlist_dump(void);
17
+ extern void wd_exit(int exit_signo);
18
+
19
+ int
20
+ main(int argc, char * argv[])
21
+ {
22
+ int rtn;
23
+
24
+ signal(SIGCHLD, SIG_DFL);
25
+ signal(SIGHUP, SIG_IGN);
26
+ signal(SIGINT, wd_exit);
27
+ signal(SIGQUIT, wd_exit);
28
+ signal(SIGTERM, wd_exit);
29
+ signal(SIGPIPE, SIG_IGN);
30
+
31
+ mypid = getpid();
32
+ rtn = pool_init_config();
33
+
34
+ pool_config->recovery_user = "mitani";
35
+ pool_config->trusted_servers = "paris";
36
+ pool_config->delegate_IP = "192.168.100.99";
37
+ pool_config->pgpool2_hostname = "vm1";
38
+ pool_config->port = 5432;
39
+ pool_config->wd_port = 9999;
40
+ pool_config->other_wd->num_wd = 2;
41
+ strcpy(pool_config->other_wd->wd_info[0].hostname ,"vm2");
42
+ pool_config->other_wd->wd_info[0].pgpool_port = 5432;
43
+ pool_config->other_wd->wd_info[0].wd_port = 9999;
44
+ pool_config->other_wd->wd_info[0].status = WD_INIT;
45
+ strcpy(pool_config->other_wd->wd_info[1].hostname ,"paris");
46
+ pool_config->other_wd->wd_info[1].pgpool_port = 5432;
47
+ pool_config->other_wd->wd_info[1].wd_port = 9999;
48
+ pool_config->other_wd->wd_info[1].status = WD_INIT;
49
+ pool_config->ping_path = "/bin";
50
+ pool_config->ifconfig_path = "/sbin";
51
+ pool_config->if_up_cmd = "ifconfig eth0:0 inet $_IP_$ netmask 255.255.255.0";
52
+ pool_config->if_down_cmd = "ifconfig eth0:0 down";
53
+ pool_config->wd_interval = 3;
54
+ pool_config->wd_life_point = 1;
55
+
56
+ wd_init();
57
+
58
+ for (;;)
59
+ {
60
+ wdlist_dump();
61
+ sleep(5);
62
+ wd_lifecheck();
63
+ }
64
+ wd_exit(15);
65
+
66
+ }
67
+
68
+
69
+ static void
70
+ wdlist_dump(void)
71
+ {
72
+ int i;
73
+ WdInfo * p = WD_List;
74
+
75
+ i = 0;
76
+ while (p->status != WD_END)
77
+ {
78
+ printf("%d:s[%d] ts[%d] tu[%d] h[%s] pp[%d] wp[%d]\n",
79
+ i,p->status,
80
+ p->tv.tv_sec, p->tv.tv_usec,
81
+ p->hostname,
82
+ p->pgpool_port,
83
+ p->wd_port);
84
+ p++;
85
+ i++;
86
+ }
87
+ }
@@ -0,0 +1,20 @@
1
+ #include <stdio.h>
2
+ #include "watchdog.h"
3
+
4
+ extern int wd_is_upper_ok(char * server_list);
5
+
6
+ int
7
+ main(int argc,char * argv[])
8
+ {
9
+ int rtn;
10
+ rtn = wd_is_upper_ok(argv[1]);
11
+ if (rtn == WD_OK)
12
+ {
13
+ printf("%s is ok",argv[1]);
14
+ }
15
+ else
16
+ {
17
+ printf("%s is ng",argv[1]);
18
+ }
19
+ return 0;
20
+ }
@@ -0,0 +1,408 @@
1
+ /*
2
+ * $Header$
3
+ *
4
+ * Handles watchdog connection, and protocol communication with pgpool-II
5
+ *
6
+ * pgpool: a language independent connection pool server for PostgreSQL
7
+ * written by Tatsuo Ishii
8
+ *
9
+ * Copyright (c) 2003-2012 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
+ */
23
+
24
+ #include <stdio.h>
25
+ #include <string.h>
26
+ #include <stdlib.h>
27
+ #include <signal.h>
28
+ #include <ctype.h>
29
+ #include <sys/un.h>
30
+ #include <sys/types.h>
31
+ #include <sys/stat.h>
32
+ #include <unistd.h>
33
+ #include <sys/wait.h>
34
+ #include <errno.h>
35
+
36
+ #include "pool.h"
37
+ #include "pool_config.h"
38
+ #include "watchdog.h"
39
+ #include "wd_ext.h"
40
+
41
+ WdInfo * WD_List = NULL; /* watchdog server list */
42
+ unsigned char * WD_Node_List = NULL; /* node list */
43
+
44
+ pid_t wd_ppid = 0;
45
+ static pid_t lifecheck_pid;
46
+ static pid_t child_pid;
47
+ static pid_t hb_receiver_pid[WD_MAX_IF_NUM];
48
+ static pid_t hb_sender_pid[WD_MAX_IF_NUM];
49
+
50
+ pid_t wd_main(int fork_wait_time);
51
+ void wd_kill_watchdog(int sig);
52
+ int wd_reaper_watchdog(pid_t pid, int status);
53
+ int wd_chk_setuid(void);
54
+
55
+ static pid_t fork_a_lifecheck(int fork_wait_time);
56
+ static void wd_exit(int exit_status);
57
+ static int wd_check_config(void);
58
+ static int has_setuid_bit(char * path);
59
+
60
+ static void
61
+ wd_exit(int exit_signo)
62
+ {
63
+ sigset_t mask;
64
+
65
+ sigemptyset(&mask);
66
+ sigaddset(&mask, SIGTERM);
67
+ sigaddset(&mask, SIGINT);
68
+ sigaddset(&mask, SIGQUIT);
69
+ sigaddset(&mask, SIGCHLD);
70
+ sigprocmask(SIG_BLOCK, &mask, NULL);
71
+
72
+ wd_notice_server_down();
73
+
74
+ exit(0);
75
+ }
76
+
77
+ /* send signal specified by sig to watchdog processes */
78
+ void
79
+ wd_kill_watchdog(int sig)
80
+ {
81
+ int i;
82
+
83
+ kill (lifecheck_pid, sig);
84
+ kill (child_pid, sig);
85
+
86
+ if (!strcmp(pool_config->wd_lifecheck_method, MODE_HEARTBEAT))
87
+ {
88
+ for (i = 0; i < pool_config->num_hb_if; i++)
89
+ {
90
+ kill (hb_receiver_pid[i], sig);
91
+ kill (hb_sender_pid[i], sig);
92
+ }
93
+ }
94
+ }
95
+
96
+ static int
97
+ wd_check_config(void)
98
+ {
99
+ int status = WD_OK;
100
+
101
+ if (pool_config->other_wd->num_wd == 0)
102
+ {
103
+ pool_error("wd_check_config: there is no other pgpools setting.");
104
+ status = WD_NG;
105
+ }
106
+
107
+ if (strlen(pool_config->wd_authkey) > MAX_PASSWORD_SIZE)
108
+ {
109
+ pool_error("wd_check_config: wd_authkey length can't be larger than %d",
110
+ MAX_PASSWORD_SIZE);
111
+ status = WD_NG;
112
+ }
113
+
114
+ return status;
115
+ }
116
+
117
+ pid_t
118
+ wd_main(int fork_wait_time)
119
+ {
120
+ int status = WD_INIT;
121
+ int i;
122
+
123
+ if (!pool_config->use_watchdog)
124
+ {
125
+ return 0;
126
+ }
127
+
128
+ /* check pool_config data */
129
+ status = wd_check_config();
130
+ if (status != WD_OK)
131
+ {
132
+ pool_error("watchdog: wd_check_config failed");
133
+ return 0;
134
+ }
135
+
136
+ /* initialize */
137
+ status = wd_init();
138
+ if (status != WD_OK)
139
+ {
140
+ pool_error("watchdog: wd_init failed");
141
+ return 0;
142
+ }
143
+
144
+ wd_ppid = getpid();
145
+
146
+ /* launch child process */
147
+ child_pid = wd_child(1);
148
+ if (child_pid < 0 )
149
+ {
150
+ pool_error("launch wd_child failed");
151
+ return 0;
152
+ }
153
+
154
+ if (!strcmp(pool_config->wd_lifecheck_method, MODE_HEARTBEAT))
155
+ {
156
+ for (i = 0; i < pool_config->num_hb_if; i++)
157
+ {
158
+ /* heartbeat receiver process */
159
+ hb_receiver_pid[i] = wd_hb_receiver(1, &(pool_config->hb_if[i]));
160
+ if (hb_receiver_pid[i] < 0 )
161
+ {
162
+ pool_error("launch wd_hb_receiver failed");
163
+ return hb_receiver_pid[i];
164
+ }
165
+
166
+ /* heartbeat sender process */
167
+ hb_sender_pid[i] = wd_hb_sender(1, &(pool_config->hb_if[i]));
168
+ if (hb_sender_pid[i] < 0 )
169
+ {
170
+ pool_error("launch wd_hb_sender failed");
171
+ return hb_sender_pid[i];
172
+ }
173
+ }
174
+ }
175
+
176
+ /* fork lifecheck process*/
177
+ lifecheck_pid = fork_a_lifecheck(fork_wait_time);
178
+ if (lifecheck_pid < 0 )
179
+ {
180
+ pool_error("launch lifecheck process failed");
181
+ return 0;
182
+ }
183
+
184
+ return lifecheck_pid;
185
+ }
186
+
187
+
188
+ /* fork lifecheck process*/
189
+ static pid_t
190
+ fork_a_lifecheck(int fork_wait_time)
191
+ {
192
+ pid_t pid;
193
+
194
+ pid = fork();
195
+ if (pid != 0)
196
+ {
197
+ if (pid == -1)
198
+ pool_error("fork_a_lifecheck: fork() failed.");
199
+
200
+ return pid;
201
+ }
202
+
203
+ if (fork_wait_time > 0) {
204
+ sleep(fork_wait_time);
205
+ }
206
+
207
+ myargv = save_ps_display_args(myargc, myargv);
208
+
209
+ POOL_SETMASK(&UnBlockSig);
210
+
211
+ init_ps_display("", "", "", "");
212
+
213
+ signal(SIGTERM, wd_exit);
214
+ signal(SIGINT, wd_exit);
215
+ signal(SIGQUIT, wd_exit);
216
+ signal(SIGCHLD, SIG_DFL);
217
+ signal(SIGHUP, SIG_IGN);
218
+ signal(SIGPIPE, SIG_IGN);
219
+
220
+ set_ps_display("lifecheck",false);
221
+
222
+ /* wait until ready to go */
223
+ while (WD_OK != is_wd_lifecheck_ready())
224
+ {
225
+ sleep(pool_config->wd_interval * 10);
226
+ }
227
+
228
+ pool_log("watchdog: lifecheck started");
229
+
230
+ /* watchdog loop */
231
+ for (;;)
232
+ {
233
+ /* pgpool life check */
234
+ wd_lifecheck();
235
+ sleep(pool_config->wd_interval);
236
+ }
237
+
238
+ return pid;
239
+ }
240
+
241
+ /* if pid is for one of watchdog processes return 1, othewize return 0 */
242
+ int
243
+ wd_is_watchdog_pid(pid_t pid)
244
+ {
245
+ int i;
246
+
247
+ if (pid == lifecheck_pid || pid == child_pid)
248
+ {
249
+ return 1;
250
+ }
251
+
252
+ for (i = 0; i < pool_config->num_hb_if; i++)
253
+ {
254
+ if (pid == hb_receiver_pid[i] || pid == hb_sender_pid[i])
255
+ {
256
+ return 1;
257
+ }
258
+ }
259
+
260
+ return 0;
261
+ }
262
+
263
+ /* restart watchdog process specified by pid */
264
+ int
265
+ wd_reaper_watchdog(pid_t pid, int status)
266
+ {
267
+ int i;
268
+
269
+ /* watchdog lifecheck process exits */
270
+ if (pid == lifecheck_pid)
271
+ {
272
+ if (WIFSIGNALED(status))
273
+ pool_debug("watchdog lifecheck process %d exits with status %d by signal %d",
274
+ pid, status, WTERMSIG(status));
275
+ else
276
+ pool_debug("watchdog lifecheck process %d exits with status %d", pid, status);
277
+
278
+ lifecheck_pid = fork_a_lifecheck(1);
279
+
280
+ if (lifecheck_pid < 0)
281
+ {
282
+ pool_error("wd_reaper: fork a watchdog lifecheck process failed");
283
+ return 0;
284
+ }
285
+
286
+ pool_log("fork a new watchdog lifecheck pid %d", lifecheck_pid);
287
+ }
288
+
289
+ /* watchdog child process exits */
290
+ else if (pid == child_pid)
291
+ {
292
+ if (WIFSIGNALED(status))
293
+ pool_debug("watchdog child process %d exits with status %d by signal %d",
294
+ pid, status, WTERMSIG(status));
295
+ else
296
+ pool_debug("watchdog child process %d exits with status %d", pid, status);
297
+
298
+ child_pid = wd_child(1);
299
+
300
+ if (child_pid < 0)
301
+ {
302
+ pool_error("wd_reaper: fork a watchdog child process failed");
303
+ return 0;
304
+ }
305
+
306
+ pool_log("fork a new watchdog child pid %d", child_pid);
307
+ }
308
+
309
+ /* receiver/sender process exits */
310
+ else
311
+ {
312
+ for (i = 0; i < pool_config->num_hb_if; i++)
313
+ {
314
+ if (pid == hb_receiver_pid[i])
315
+ {
316
+ if (WIFSIGNALED(status))
317
+ pool_debug("watchdog heartbeat receiver process %d exits with status %d by signal %d",
318
+ pid, status, WTERMSIG(status));
319
+ else
320
+ pool_debug("watchdog heartbeat receiver process %d exits with status %d", pid, status);
321
+
322
+ hb_receiver_pid[i] = wd_hb_receiver(1, &(pool_config->hb_if[i]));
323
+
324
+ if (hb_receiver_pid[i] < 0)
325
+ {
326
+ pool_error("wd_reaper: fork a watchdog heartbeat receiver process failed");
327
+ return 0;
328
+ }
329
+
330
+ pool_log("fork a new watchdog heartbeat receiver: pid %d", hb_receiver_pid[i]);
331
+ break;
332
+ }
333
+
334
+ else if (pid == hb_sender_pid[i])
335
+ {
336
+ if (WIFSIGNALED(status))
337
+ pool_debug("watchdog heartbeat sender process %d exits with status %d by signal %d",
338
+ pid, status, WTERMSIG(status));
339
+ else
340
+ pool_debug("watchdog heartbeat sender process %d exits with status %d", pid, status);
341
+
342
+ hb_sender_pid[i] = wd_hb_sender(1, &(pool_config->hb_if[i]));
343
+
344
+ if (hb_sender_pid[i] < 0)
345
+ {
346
+ pool_error("wd_reaper: fork a watchdog heartbeat sender process failed");
347
+ return 0;
348
+ }
349
+
350
+ pool_log("fork a new watchdog heartbeat sender: pid %d", hb_sender_pid[i]);
351
+ break;
352
+ }
353
+ }
354
+ }
355
+
356
+ return 1;
357
+ }
358
+
359
+ int
360
+ wd_chk_setuid(void)
361
+ {
362
+ char path[128];
363
+ char cmd[128];
364
+
365
+ /* check setuid bit of ifup command */
366
+ wd_get_cmd(cmd, pool_config->if_up_cmd);
367
+ snprintf(path, sizeof(path), "%s/%s", pool_config->ifconfig_path, cmd);
368
+ if (! has_setuid_bit(path))
369
+ {
370
+ pool_log("wd_chk_setuid: ifup[%s] doesn't have setuid bit", path);
371
+ return 0;
372
+ }
373
+
374
+ /* check setuid bit of ifdown command */
375
+ wd_get_cmd(cmd, pool_config->if_down_cmd);
376
+ snprintf(path, sizeof(path), "%s/%s", pool_config->ifconfig_path, cmd);
377
+ if (! has_setuid_bit(path))
378
+ {
379
+ pool_log("wd_chk_setuid: ifdown[%s] doesn't have setuid bit", path);
380
+ return 0;
381
+ }
382
+
383
+ /* check setuid bit of arping command */
384
+ wd_get_cmd(cmd, pool_config->arping_cmd);
385
+ snprintf(path, sizeof(path), "%s/%s", pool_config->arping_path, cmd);
386
+ if (! has_setuid_bit(path))
387
+ {
388
+ pool_log("wd_chk_setuid: arping[%s] doesn't have setuid bit", path);
389
+ return 0;
390
+ }
391
+
392
+ pool_log("wd_chk_setuid all commands have setuid bit");
393
+ return 1;
394
+ }
395
+
396
+ /* if the file has setuid bit and the owner is root, it returns 1, otherwise returns 0 */
397
+ static int
398
+ has_setuid_bit(char * path)
399
+ {
400
+ struct stat buf;
401
+ if (stat(path,&buf) < 0)
402
+ {
403
+ pool_error("has_setuid_bit: %s: no such a command", path);
404
+ pool_shmem_exit(1);
405
+ exit(1);
406
+ }
407
+ return ((buf.st_uid == 0) && (S_ISREG(buf.st_mode)) && (buf.st_mode & S_ISUID))?1:0;
408
+ }