3.0.7 (umiyameboshi) 2012/04/23 * Version 3.0.7 This is a bugfix release against pgpool-II 3.0.6. * Bug fixes - Add m4 files. This should prevent compiling problem on older OS's. (Tatsuo Ishii) - Fix bug that the process exits before unlocking semaphore by a signal interrupt. (Tatsuo Ishii) - Fix a memory leak in case of reset_query. (Tatsuo Ishii) - Fix SimpleQuery() so that it restores parser memory context when: 1) Builtin show commands are used 2) Parallel query mode 3) Query cache is used (Tatsuo Ishii) - Fix pool_ssl_read() to deal with large data reading. (Tatsuo Ishii) Original complain is here: http://www.pgpool.net/pipermail/pgpool-general/2012-March/000299.html - Fix hangup when PREPARE statement causes error. (Toshihiro Kitagawa) This issue was reported by Tomonari Katsumata: Subject: [pgpool-general: 121] question of pgpool's behavior 3.0.6 (umiyameboshi) 2012/01/31 * Version 3.0.6 This version fixes various bugs since 3.0.5. - Fix infinite loop reported in this thread (Tatsuo Ishii): http://www.pgpool.net/pipermail/pgpool-general/2011-December/000099.html It was not considered the case that, when received buffer in primary was empty but the one in a standby was not, the standby spontaneously sent packet to pgpool. This could happen when, for example, reloading postgresql.conf. The fix is that such buffer in standby is discarded. 3.0.5 (umiyameboshi) 2011/10/31 * Version 3.0.5 This version fixes various bugs since 3.0.4. * Bug fixes - Fix bug with the handling of empty queries. The empty queries come to be handled the same as SELECT queries. This fix allows load-balance after the empty query(Kitagawa) - Fix insert_lock so that it works correctly even if the column definition such as "DEFAULT nextval(('"x_seq"'::text)::regclass)" (Kitagawa) - Fix log message which is emitted when pgpool-II cannot parse the query in the extended query protocol so that it shows the query (Kitagawa) - Fix description about backend_weight inpgpool-II manual. It can be changed by reloading pgpool.conf(Tatsuo) - Fix bug which does not update the node status when reattaching the node in raw mode(Guillaume Lelarge) - Fix bug that SELECTs which have subquery with FOR SHARE/UPDATE clause are sent to slave/standby(Tatsuo) - Fix bug which rewriting timestamp of default value fails in PREPARE statements. This used to work but was broken in 3.0(Kitagawa) - Fix crash of pgpool child when frontend connects if in raw mode, enable_hba is off and more than 2 backends(Kitagawa) - Fix some memory leaks(Kitagawa) * Enhancements - Allow time stamp rewriting to work with arbitrary expression in default value of a column. Before we detected anything including now() then simply replaced it to now(). This will lead to wrong rewriting of default value. for example, timezone('utc'::text, now()). Note that, however, this only adopts to simple queries. Extended protocols(for example Java, PHP PDO) or SQL "PREPARE" still remain same(Tatsuo) - Change error message "do_md5: read_password_packet failed" into debug level(Kitagawa) 3.0.4 (umiyameboshi) 2011/06/01 * Version 3.0.4 This version fixes various bugs since 3.0.3. * Incompatible changes - In streaming replication, if delay_threshold is 0 or health checking is disabled, the delay checking is not performed. This is the behaviour according to a description of the pgpool-II manual. But, so far the delay checking was performed even if health checking was disabled(Guillaume Lelarge) * Bug fixes - Fix pgpool-regclass() to be compiled in PostgreSQL 8.0 or later. 7.4 still produces errors(Tatsuo) - Fix possible hangup when using /*NO LOAD BALANCE*/ comment in streaming replication(Kitagawa) - Fix hangup when received Flush(H) message or CloseComplete(C) message(Kitagawa) - Fix possible hangup that happen for the receiving timing of ReadyForQuery(Z) message after pgpool-II connects to backends(Kitagawa) - Add description about parameters for recovery_1st_stage_command and recovery_2nd_stage_command(Tatsuo) - Increase size of the internal system catalog cache from 32 to 128. This has the effect of reducing "unnamed prepared statement does not exist" error(Tatsuo, Kitagawa) - Fix bug with pcp_connect() which causes double free. Patch contributed by Jehan-Guillaume (ioguix) de Rorthais(Tatsuo) - Fix bug with start_recoery() which is apparently wrong usage of PQfinish()(Tatsuo) - Fix incorrect error message which is sent to the frontend when client idle time reached client_idle_limit(Tatsuo) - Fix "backend status" variable name correctly in pool_status. Replace the space with a '_'(Guillaume Lelarge) - Fix hangup when using md5 authentication method and running as daemon. Patch contributed by Nicolas Thauvin(Tatsuo) - Fix log_per_node_statement so that it prints statements in the extended query protocol. This used to work but was broken in 3.0 (Kitagawa) * Enhancements - Add currval() and lastval() to black_function_list of sample configuration files. If they are load balanced, currval() or lastval() may be called before the result of nextval() or setval() is propagated to slaves(Tatsuo) 3.0.3 (umiyameboshi) 2011/02/23 * Version 3.0.3 This version fixes various bugs since 3.0.1. Please note that 3.0.2 was canceled due to a packaging problem. * Incompatible changes - Now installing C function "pgpool_walrecrunning()" is recommended if you plan to use streaming replication mode. This is necessary for better use of online recovery in the mode. Also new variable "%P" can be used in the online recovery script. If you do not install the function, these functionalities cannot be used(Tatsuo). - In raw mode if there's only one DB node and if a problem arises with the DB node, it will be brought to down status. However if the DB node goes into good condition again, you can use the DB node without restarting pgpool. This change has been included in 3.0, but did not work(Tatsuo, Kitagawa) * Bug fixes - Fix non portable code in password authentication. Bug report from a FreeBSD user(Tatsuo) - Fix bug that insert_lock locks all rows in user table (Tatsuo, Kitagawa) - Fix bug with password authentication. If user name is 32 bytes long, pgpool child segfaults.(Tatsuo) - Fix bug with md5 authentication. If raw mode or number of backend is 1, pgpool child segfaults. Patch contributed by Rob Shepherd(Tatsuo) - Fix long standing bug with timestamp rewriting against array and complex types. Patch contributed by Akio Ishida(Tatsuo) - Fix bug that debug_level directive doesn't work. Patch contributed by Gilles Darold(Tatsuo) - Fix possible crash of pgpool child while doing failover(Kitagawa) - Fix white/black_function_list so that it works correctly when user calls function with schema name(Tatsuo) - Fix bug that DROP DATABASE fails by connection cache(Kitagawa) - Fix bug that failover fails in raw mode(Kitagawa) - Fix possible termination of pgpool child when both simple query protocol and extended query protocol are used in one session (Kitagawa) - Fix possible hang up when an error occurs while using extended query protocol(Kitagawa) - Fix pgpool-regclass() so that it doesn't use PG_TRY/CATCH. It appeared that using PG_TRY/CATCH is not safe, sometimes backend dies with PANIC: ERRORDATA_STACK_SIZE exceeded.(Tatsuo) - Fix bug that select query isn't sent to master node when it meets the following conditions(Kitagawa) - in MASTER/SLAVE mode - use extended query protocol - started transaction explicitly - after write queries - Fix bug with load_balance that JDBC driver sends BEGIN to master node many times(Kitagawa) - Fix pool_status so that failback_command and fail_over_on_backend_error show correct values(Kitagawa) - Remove parameters from pool_status: recovery_password, system_db_password(Kitagawa) - Fix online recovery problem in the streaming replication mode(Tatsuo). Consider following scenario. Suppose node 0 is the initial primary server and 1 is the initial standby server. 1) Node 0 going down and node 1 promotes to new primary. 2) Recover node 0 as new standby. 3) pgpool-II assumes that node 0 is the new primary. This problem happens because pgpool-II regarded unconditionally the youngest node to be the primary. pgpool-II 3.0.3 now checks each node by using pgpool_walrecrunning() to see if it is a actually primary or not and is able to avoid the problem and regards node as standby correctly. Also you can use new variable "%P" to be used in the recovery script. If you do not install the function, the above problem is not resolved. - Fix backend complaining "unexpected EOF on client connection" while doing failover in streaming replication mode(Tatsuo) - Fix pgpool crashes when all backends go down(Tatsuo) - Fix replication delay checking so that it does not keep persistent connection to backends. Because the persistent connection may become bogus if a node down and then wake up between replication delay checking period(Tatsuo) - Rewrite and review english document(Marc Cousin, Gleu) * Enhancements - Emit log if particular backend is down status while reading the status file(Tatsuo) - Emit error message if an error occurred by the query that pgpool executed(Tatsuo) - Add sql directories main Makefile(Tatsuo) 3.0.1 (umiyameboshi) 2010/10/19 * Version 3.0.1 This version fixes various bug in 3.0. * Bug fixes - Fix bug with md5 auth. If there's more than 1 servers to be authenticated, it segfaults(Tatsuo) - Fix bug that a child process crashes when clients execute a query contains syntax error in extended query protocol(Kitagawa) - Fix bug with handling of portal information, it terminates a child process(Kitagawa) - Fix hungup when a query sent to one node caused an error in extended query protocol(Kitagawa) - Fix typo in English doc. Patch contributed by Asaf Ohaion(Tatsuo) 3.0 (umiyameboshi) 2010/09/10 * Version 3.0 This is the first version of pgpool-II 3.0 series. That is, a "major version up" from 2.2 or 2.3 series. The biggest news is, this version adapts to PostgreSQL 9.0's new feature: Streaming Replication/Hot Standby. Streaming replication can be used as a sub mode of master slave mode. Master slave mode itself heavily enhanced: - SELECTs in explicit transactions can be load balanced - In extended protocol, PARSE/BIND/DESCRIBE messages are sent to the node which execute EXECUTE message, not all node. This will reduce lock contentions. - Auto start of transaction happens only when it needed. - Temporary tables can be used safely. - SELECT which calls functions possibly write to database executes on master(primary) Also many new features are added and major refactoring has been made to the internal structure of pgpool-II. For example, in replication mode, SELECTs calling functions possibly write to database will not allow to load balance. * New features - Online recovery can be used with master/slave/streaming replication mode(Tatsuo) - New directive "delay_threshold" is added to monitor replication delay in master/slave/streaming replication mode. If replication delay is too much, SELECTs are not load balanced(Tatsuo) - show pool_status shows replication delay in master/slave/streaming replication mode(Tatsuo) - New directive "log_standby_delay" is added to control logging of replication delay in master/slave/streaming replication mode(Tatsuo) - When insert_lock is enabled and the table includes SERIAL data type, issue row lock on the sequence table. Before we issues table lock. Problem is, the table lock conflicts with auto vacuum and sometimes caused excessive lock waiting(Tatsuo) - Add support for more "SHOW" commands: pool_nodes, pool_processes, pool_pools, and pool_version(Guillaume Lelarge) - Backend process id and whether frontend connects to this connection pool or not are added to pcp_proc_info's output(Tatsuo) - "Gracefuly detach" option is added to pcp_detatch_node. With this option, pcp_detatch_node waits until all frontends disconnected(Tatsuo) - New directive "white_function_list" and "black_function_list" are added to register functions those do not or do write to database(Tatsuo) - In master/slave mode, SELECTs to system catalogs executes only on master/primary(Tatsuo) - In master/slave mode, SELECTs to temporary table executes only on master/primary(Tatsuo) - In master/slave mode, write queries outside of explicit transactions no longer trigger to start internal transaction(Tatsuo) - In master/slave mode, SELECTs inside explicit transactions are load balanced(Tatsuo, Kitagawa) - In master/slave mode, commands are no longer sent to all DB nodes. This will prevent unnecessary locking(Tatsuo, Kitagawa) - New command option adds to ignore the status file when starting up(Tatsuo) - Supports PostgreSQL 9.0's new VACUUM syntax(Tatsuo) - New directive "failover_if_affected_tuples_mismatch" controls the behavior when number of result rows of INSERT/UPDATE/DELETE are differ(Tatsuo) - When number of result rows of INSERT/UPDATE/DELETE are differ, each number are logged(Tatsuo) - md5 authentication is supported in replication mode and master/slave mode(Tatsuo) - Allow to force to move to online recovery second stage even there are connecting frontends(Tatsuo) - If there's only one DB node and it triggers failover, pgpool-II will automatically connects if the DB node coming up(Tatsuo) - Pcp commands supports long options(Guillaume Lelarge) - New directive "debug_level" added to control the debug message logging(Tatsuo) - Allow to use various boolean representations as PostgreSQL in pgpool.conf(Kitagawa) - New C language function pgpool_switch_xlog for online recovery added(Kitagawa) - New C language function pgpool_regclass added to avoid a trouble about handling of duplicate table names in different schema(Tatsuo) * Bug fixes - Do not rewrite statement which accesses columns having now() etc. as the default value but the data type are not timestamp etc. Otherwise we have an error in DMLs(Tatsuo) - Fix timestamp rewriting not to omit schema qualification(Tatsuo) - Fix bug with timeout handling in pcp commands(Tatsuo) - Fix SSL hang when large amount of data transfered(Tatsuo) - Fix failover when there's only one DB node(Tatsuo) - Fix bug with postmaster start check in online recovery. Before it continued infinitely to try to connect to postmaster if the first attempt failed(Tatsuo) 2.3.3 (tomiteboshi) 2010/04/23 * Version 2.3.3 This version fixes various bugs since 2.3.2.2. * Incompatible changes - Please note that this version of pgpool consumes more shared memory than before. If you encounter problems when starting up pgpool, please look into pgpool log. If you find messages something like "could not create shared memory segment: Cannot allocate memory", please increase the shared memory on your system. - Now parallel mode requires replication mode turned on. parallel mode without replication mode turned on has been broken since pgpool-II was born anyway(Kitagawa) - Change default value for insert_lock to false since there's no point in turning this on in master/slave mode. Fix suggested by Fujii Masao(Tatsuo) * Newly added documents - README.online-recovery, which is an internal document of online recovery, added(Tatsuo) * Bug fixes - Fix long standing bug since pgpool-II 1.0 which causes segfault of pgpool child process. This was caused by miscalculation of shmem size in pgpool parent. Bug analysis by Kitagawa patch created by Tatsuo - Add restriction for parallel mode(Kitagawa) - The Natural Join is not supported - The USING CLAUSE is converted to ON CLAUSE by query rewrite process - Fix possible crash during rewriting JOIN syntax that have USING in parallel query mode(Kitagawa) This fix is supporting such as following JOIN syntax. example: - SELECT * FROM a JOIN b USING (aid) JOIN c USING (cid); - SELECT * FROM a JOIN b USING (aid) JOIN c USING (cid) JOIN d USING (did) - Fix parallel query so that it can parse INSERT statements that have current_time before a partitioning key column(Kitagawa) - Fix SimpleForwardToBackend() so that pgpool doesn't keep waiting for reply from a backend, when clients using the extended query protocol cause a command error such as bind error. This bug occur in master/slave, raw, and connection pool mode. This fix is, sending SYNC message to recover error after command error(Kiatagawa) - Fix SIGINT/SIGQUIT is ignored if pgpool child is in select(). In this case pgpool retries select() thus the signal is ignored(Tatsuo) - Fix connect_inet_domain_socket_by_port/ connect_unix_domain_socket_by_port so that they check if SIGTERM/SIGINT/SIGQUIT signal has been delivered. Per bug report from Daniel Codina(Tatsuo) - Fix possible crash during creating "kind mismatch" error message. This used to work but was broken in 2.3.2(Tatsuo) - Fix bug with healh checking. If a network problem such as unplugged wire happens while calling connect(), health checking does not work since connect_unix_domain_socket()/connect_inet_domain_socket() do retry if connect() is interrupted by ALARM signal. Added new retry argument which controls the retrying behavior to those functions. Per bug report and problem analysis by Daniel Codina(Tatsuo) - Fix enbug in 2.3.2.2 with time stamp rewriting in SimpleForwardToBackend. Per bug report from Bugtrack #1010771. Report from Peter Pramberge(Tatsuo) - Fix rewriting "*" in paralell query. Patch conributed by sho-san(Kitagawa) - Fix connect_inet_domain_socket_by_port() so that it print out error message by using hstrerror(), rather than strerror()(Tatsuo) 2.3.2.2 (tomiteboshi) 2010/02/22 * Version 2.3.2.2 This version fixes various bug in 2.3.x. - When rewriting timestamp in extended query, it allocated less than what it actually needed. This causes random problematic behavior, typically "message: invalid string in message" error in backend(Tatsuo). - In extended query, if one of parameters contains NULL, ppool crashes(Tatsuo). - If in previous status file all nodes were marked down status, it is regarded that this file is bogus. This will prevent "all node down" syndrome(Tatsuo). 2.3.2.1 (tomiteboshi) 2010/02/11 * Version 2.3.2.1 This version fixes bug in 2.3.x. It is identfied that pgpool-II 2.3.x has a problem with erroneous query processing(Akio Ishida). 2.3.2 (tomiteboshi) 2010/02/07 * Version 2.3.2 This version includes various fixes for bugs in 2.3.1 or before. All 2.3.x users are encouraged to upgrade to 2.3.2 as soon as possible. Also this version enables long awaited SSL support and large object replication support. * Enhancements - SSL support(Sean Finney) - Large object replication support. You need PostgreSQL 8.1 or later, however(Tatsuo) - Emit statement log when error or notice message comes from query parsing process. This is usefull because PostgreSQL does not log particular statement if the error was detected *before* raw parser get executed. This typlically happens when encoding error was found(Tatsuo) - Display original query to log if kind mismatch error was caused by DEALLOCATE(Tatsuo) - While health checking and recovery use postgres database if possible. If postgres database does not exist, use template1 as it stands now. While connecting template1, certain commands, for example DROP DATABASE cannot used. Using postgres database allows to use these commands while recovery(Tatsuo) * Bug fixes - Fix errors in timestamp rewriting which occasionaly cause broken packet sentto slave nodes(Tatsuo) - Fix errors when timestamp rewriting is used with V2 protocol(Toshihiro Kitagawa) - Propagate Bind, Describe and Close messages to only master node if running in master/slave and in transaction (Tatsuo) - Fix do_child() so that check_stop_request() exits immediately when smart shutdown signal has been sent. This has been used to work in 2.2(Toshihiro Kitagawa) - Fix ProcessFrontendResponse not to accept invalid frotend packet(Xavier Noguer) - Use %dz for sizeof in fprintf for more portability(Tatsuo) - Fix compiler warnings(Tatsuo) - Do not force replication of DEALLOCATE if operated in master/slave mode. Now that pgpool do not execute PARSE in all nodes, this was pointless and caused problem (kind mismatch when executing DEALLOCATE)(Tatuso) 2.3.1 (tomiteboshi) 2009/12/18 * Version 2.3.1 This version includes various fixes for bugs in 2.3 or before. All 2.3 users are encouraged to upgrade to 2.3.1 as soon as possible. * Bug fixes - If all of following conditions met, incorrect data is written to DB(Tatsuo) - pgpool is running in replication mode - pgpool is running on 64bit OS - INSERT or UPDATE are used which explicitly include now(), - CURRENT_TIMESTAMP, CURRENT_DATE, CURRENT_TIME. Or the target - Table's default value use above functions - The SQL statement inclludes out of 32bit integer value(-2147483648 to 2147483647 in decimal) Example SQL: INSERT INTO t1(id, regdate) VALUES(98887776655, NOW()); - Fix crush in case of more than 18 DB nodes are used(Tatsuo) - Enhance kind mismatch error message. If kind is ERROR or NOTICE, the error or notice message from PostgreSQL will be printed(Tatsuo) 2.3 (tomiteboshi) 2009/12/07 * Version 2.3 This version enhances replication, especially CURRENT_TIMESTAMP, CURRENT_DATE, now() etc. now can be properly replicated. Also perforance of replication when num_init_children == 1 is enhanced. Pgpool-II now records the status of down nodes, and remember when it restarts to ensure that keep the node status as before. Also some logs are enhanced and more fine fail over controls are added. Please note that pgpool-II 2.3 includes all of enhancements and fixes of pgpool-II 2.2.1 to 2.2.6. * Incompatibilities from 2.2.x - pgpool_status file is created under logdir. So you need to give write permission to the directory so that pgpool-II can read/write pgpool_status file. * Enhancements - Enable proper replication of results of temporal functions (CURRENT_TIMESTAMP, CURRENT_DATE, now() etc.). Now applications can execute INSERT/UPDATE tables which include defaut values using those temporal functions. There are small limitations. See restriction sections of docs for more details (Akio Ishida) - Use PostgreSQL 8.4's SQL parser(Akio Ishida) - Enhance the performance 20% to 100% of replication when num_init_children == 1(Tatsuo) - Add new directive log_per_node_statement which is similar to log_statement except that prints info for each DB node to make it easier which query is sent to which DB node(Tatsuo) - Add new directive fail_over_on_backend_error to control the behaviro of fail over(Tatsuo) - Record DB node status and remember when pgpool-II restarts(Tatsuo) - EXPLAIN and EXPLAIN ANALYZE for SELECT query are now load balanced. This will prevent unwanted kind mismatch errors when EXPLAIN produces slightly different plan(Tatsuo) - Enhance CSS of pgpool-ja.html(Tatsuo) - Add sample configuration file for replication mode and master/slave mode(Tatsuo) - Add test for temporal data(Akio Ishida) 2.2.6 (urukiboshi) 2009/12/01 * Version 2.2.6 This version enhances handling of backend weight. Also it allows to use temp tables in master/slave mode. It includes various fixes for bugs in 2.2.5 or before as usual. * Bug fixes - Do not allow to load balance DECLARE, CLOSE, FETCH and MOVE. If data gets updated and CLOSE issued after transaction commit(i.e. holdbale cursor), this will cause data inconsistency since CLOSE is executed one of the severs, rather than all(Tatsuo) - In master/slave mode, execute Parse message on only master node. In previous versions Parse executed on all nodes, which grabbed unneccessary lock(Tatsuo) - Remove init script from all runlevels before uninstall(Devrim) - Fix pgpoo.spec(Devrim) - Do not execute REINDEX DATABASE or SYSTEM, CREATE/DROP TABLE SPACE inside a transaction block(Tatsuo) * Enhancements - Allow to change weight by reloading pgool.conf. This will take effect for next client sessions(Tatsuo) - Reply with usefull error messages, rather than "server closed the connection unexpectedly" when authentication fails(Glyn Astill) - Add info to logs when writing to sockets falis to know if it was for backend or frontend(Tatsuo) - Do not complain when writing to socket of frontend fails(Tatsuo) - Allow to use temp tables in master/slave mode. INSERT/UPDATE/DELETE will automatically be sent to master only. Still SELECT you need to add /*NO LOAD BALANCE*/ comment(Tatsuo) - Add temp table test to test/jdbc(Tatsuo) 2.2.5 (urukiboshi) 2009/10/4 * Version 2.2.5 This version fixes various bugs in 2.2.4 or before. * Bug fixes - Fix connection_count_down(). It decrements the connection counter too much in some corner cases and causes online recover never completes(Tatsuo) - Detect frontend exiting while waiting for commands complete in other cases such as internal locks are issued and Parse (Tatsuo) - Fix inifinit loop in reset_backend(Xavier Noguer, Tatsuo) - Fix Parse() to print actual query when it detects kind mismatch error(Tatsuo) - Document enhancements(Tatsuo) 2.2.4 (urukiboshi) 2009/8/24 * Version 2.2.4 This version fixes various bugs in 2.2.3 or before. * Bug fixes - Fix possible bug introduced in pgpool-II 2.2.2. Load balance control variables may remain not be restored and subsequent DML/DDL call might sent to only master node(Tatsuo) - Send NOTICE message to frontend periodically if V2 protocol is used. This is ifdef out since it affectes visible change to applications. 2.2.3 unconditionaly sends param packet to client even it uses version 2 protocol, which is apparentlt wrong. Also tweak checking period from 1 second to 30 seconds since 1 second seems too aggressive(Tatsuo) - Block signals before forking children rather after. Otherwise parent will be killed by failover signal if it receives a signal before establishing signal handler(Tatsuo) - Remove unnecessary spaces and tabs at the end of line(Jun Kuriyama) 2.2.3 (urukiboshi) 2009/8/11 * Version 2.2.3 This version fixes various bugs in 2.2.2 or before. * Bug fixes - Fix child process death if one of backends is not available(Tatsuo). - Fix various parallel query bugs(Yoshiharu Mori) - Fix message corruption for kid mismatch error(Akio Ishida) - Now stetmemt_time works(Tatsuo) - Enhance health checking to detect postmaster stopping by SIGSTOP(Tatsuo) - Detect frontend abnormal exiting while waiting for reply from backend. This only works with V3 protocol(Tatsuo) - Do not start internal transaction if command is CLUSTER without arguments(Tatsuo) - Fix bug with COPY FROM in that backend process remains after COPY failed(Tatsuo) * Enhancements - Show last query for extended protocol(Akio Ishida) - Allow to compile sql/pgpool-recovery/pgpool-recovery.c with PostgreSQL 8.4(Tatsuo) 2.2.2 (urukiboshi) 2009/5/5 * Version 2.2.2 This version fixes various bugs in 2.2.1 or before. Please note that an importan fix is made to avoid data incositency risk, which could happen when client does not exit gracely(without sending "X" packet) while pgpool is trying to send data to it. This could happen with all version of pgpool-II. * Bug fixes - Ignore write error on frontend connection. This is needed to continue processing with backend, otherwise we risk data incositency(Tatsuo) - Fix bug introduced in 2.2.1 (In master slave mode, sometimes DEALLOCATE fails). If prepared statement reused, pgpool hangs(Toshihiro) - Fix pgpool crash when SQL command PREPARE and protocol level EXECUTE are mixed. The bug was introduced in 2.2(Tatsuo) - Avoid "unexpected EOF on client connection" error in PostgreSQL when reset query fails(Tatsuo) 2.2.1 (urukiboshi) 2009/4/25 * Version 2.2.1 This version fixes various bugs in 2.2. * Bug fixes - In master slave mode, sometimes DEALLOCATE fails. This is caused by that the first PREPARE was not executed on the slave(Toshihiro) - Update pgpool.spec along with related files(Devrim) - Fix inser_lock so that it is ignored when protocol version is 2(Tatsuo) - Remove excessive log messages regarding parameter change notice(Tatsuo) - Add missing files to doc(Tatsuo) 2.2 (urukiboshi) 2009/2/28 * Version 2.2 This version enhances SERIAL data type handling and on line recovery. Also an important bug, serializable transactions could cause data inconsistency among DB nodes, is fixed. Query cancelation, which never worked since pgpool-II was born, is finally fixed. * New features/enhancements - With insert_lock, now a table is locked only if it has SERIAL data type and now the default value for insert_lock is true(Tatsuo) - Start internal transaction other than INSERT, UPDATE, DELETE and SELECT to keep node consistency(Tatsuo) - 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) - Add pid_file_name directive which specifies a path to the file containing pgpool process id. "logdir" is no more used(Tatsuo) - Allow to load balance DECLARE, FETCH and CLOSE(Tatsuo) - Add -d option to pcp commands(Jun Kuriyama) - Enahnce kind mismatch error message to include originarl query string(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! - Process status display has extra space on FreeeBSD(Jun Kuriyama) - Fix incorrect kind mismatch detection case. e.g: BEGIN; BEGIN; (Tatsuo) - If PostgreSQL sends lots of DEBUG message, sometimes pgpool complains: 2008-11-08 22:41:53 ERROR: pid 23744: do_command: backend does not return ReadyForQuery. This due to a wrong assumption for the client/server protocol(Tatsuo) - Fix the case when sending an erronous query to abort transaction. It assumed that after sending an error query, always ReadyForQuery came right after that. If some debugging or logging verboseness is set, PostgreSQL might sends NOTICE before ReadyForQuery(Tatsuo) - Query cancelation now works. It never worked since pgpool-II was born(Tatsuo) - Fix online recovery to wait for failback done before allowing to accept connections from clients. It was supposed to work like this but actually was not since the day 0 when online recovery was born. Without the fix there could be potential data inconsistency among DB nodes(Tatsuo) - Fix pgpool-II crash after on line recovery. This happens after the failback process adds a recovered node which has no connection to the node(Tatsuo) - Fix pgpool-II errors when postgresql.conf is reloaded. This was caused by parameter status packet sent asynchronously from backend, which indicates the internal setting of backend has been changed(Tatsuo) * 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) - "logdir" is no more used. Instead use "pid_file_name"(Tatsuo) - Default value for insert_lock is now true(Tatsuo) 2.1 (inamiboshi) 2008/7/25 * Version 2.1 * New feature - Add '%m' format to failover_command and failback_command to obtain new master node ID. (Yoshiyuki) - Add '%m' format to failover_command and failback_command to obtain old master node ID. (Yoshiyuki) - Add new directive "recovery_timeout" to specify recovery timeout in second. (Taiki) - Add optino '-v' to print pgpool version. (Yoshiyuki) * Incompatibility - Restrict pgpool_recovery() and pgpool_remote_start() functions to superusers. (Yoshiyuki) - Do not create a connection pool to standby node in raw mode. (Yoshiyuki) - Remove "replication_timeout" parameter. (Yoshiyuki) - This enabled if replication_strict was false. However, replication_strict was already removed. - Ignore timeout argument of pcp commands. (Taiki) - Do not replicate "COPY TO STDOUT" when replicate_select is false. (Yoshiyuki) * Bug fix ** General - Fix crash when CloseComplete message was received. (Yoshiyuki) - Improve network I/O routine. (Yoshiyuki) - Fix compile errors on Solaris 10. (Yoshiyuki) - Improve log messages of health check and recovery. (Tatsuo) - Change error level of the "failed to read kind from frontend" message from ERROR to LOG. (Yoshiyuki) - Fix failover failure in raw mode. (Taiki) - Fix zombie process bug. (Yoshiyuki) - Fix health_check_timeout to work correctly. (Kenichi Sawada) - Support ps status on FreeBSD. (ISHIDA Akio) - Improve bind(2) failure report. (Jun Kuriyama) - Improve error message when client authentication failed. (Tatsuo) ** Replication - Fix replicate_select to work correctly. (Tatsuo) - Fix a wrong rollback bug with extended query. (Yoshiyuki) - Fix a bug with asynchronous query. (Yoshiyuki) - Fix hint clause handling like /*REPLICATION*/ with extended query. (Yoshiyuki) - Fix crash of "DEALLOCATE ALL". (Yoshiyuki) - Fix hang up when a backend node does immediate shutdown. (Yoshiyuki) - Fix hang up online recovery in high load. (Yoshiyuki) - Fix hang up with extended query protocol when SELECT is failed inside a transaction block. (Yoshiyuki) ** Master Slave - Fix load balancing to work correctly. (Yoshiyuki) - Fix crash if SET, PREPARE or DEALLOCATE is executed inside a transaction block. (Yoshiyuki) ** Parallel query - Fix INSERT failure. (Yoshiharu) - Fix syntax error when a query contains "AS" in FROM clause. (sho) - Fix Hung up when two or more statment was executed in parallel mode (Yoshiharu) - Fix Query rewriting of Join Expression and DISTINCT ON (Yoshiharu) 2.0.1 (hikitsuboshi) 2007/11/21 * Version 2.0.1 * Fix process down with UPDATE or DELETE query.(Yoshiyuki) * Send a syntax query only to a master node if master_slave is true.(Yoshiyuki) 2.0 (hikitsuboshi) 2007/11/16 * Version 2.0 * Incompatibility since pgpool-II 1.x - the default value for ignore_leading_white_space is now true(Yoshiyuki) - replicate_strict is removed. The value is always true(Yoshiyuki) * General - Allow to reload pgpool.conf(Yoshiyuki) - The paraser is now compatible with PostgreSQL 8.3(Yoshiyuki) - Add new directive "failover_command" to specify command when a node is detached(Yoshiyuki) - Add new directive "client_idle_limit" to specify the time out since the last command is arrived from a client(Tatsuo) * Replication - Always start a new transaction even if the query is not in an explicit transaction to enhance the reliabilty of replication(Yoshiyuki) - Enhance the performance of replication for write queries. Now the worst case is 1/2 compared with single DB node regardless the number of DB nodes. Previous release tends to degrade according to the numer of DB nodes(Yoshiyuki) - Add "online recovery" which allows to add a DB node and sync with other DB nodes without stopping the pgpool server(Yoshiyuki) - Abort a transaction if INSERT, UPDATE and DELETE reports different number of result rows(Yoshiyuki) x=# update t set a = a + 1; ERROR: pgpool detected difference of the number of update tuples HINT: check data consistency between master and other db node - If the results from DB nodes do not match, select the possible correct result by "decide by majority". Previous release always trust the result of the master DB node(Yoshiyuki) - Allow load balance in V2 frontend/backend protocol(Yoshiyuki) * Parallel query - Allow "partial replication" to enhance the performance of the parallel query(Yoshiharu) 1.3 (sohiboshi) 2007/10/23 * Version 1.3 * Add new "authentication_timeout" directive, being the default value is 60. (Yoshiyuki) - Maximum time in seconds to complete client authentication. * Reject a connection when startup packet length is greater than 10,000 byte. (Yoshiyuki) * Fix invalid memory access when pgpool processed DEALLOCATE statement. (Yoshiyuki) * Fix hang up in load balance mode. (Yoshiyuki) - This was introduced in V1.2. * Fix segmentation fault in 64-bit environment when query cache is enable. (Yoshiyuki) 1.2.1 (tomoboshi) 2007/09/28 * Version 1.2.1 * Fix deadlock while processing Parse message. (Yoshiyuki) * Fix memory leak in reset_prepared_list(). (Yoshiyuki) * Fix compile error on FreeBSD 4.11. (Yoshiyuki) * SET, PREPARE and DEALLOCATE statements are replicated in master/slave mode. (Yoshiyuki) 1.2 (tomoboshi) 2007/08/01 * Version 1.2 * Add new "replicate_select" directive, being the default value is false. (Yoshiyuki) - If it is true, SELECT query is replicated. This behavior is same as V3.2 or earlier. * Improve signal handling. (Yoshiyuki) - Occasionaly, zombie processes were remained. Or processes were unstable. * Fix hang up when SELECT was error inside a transaction block. The bug was introduced in V3.3. (Yoshiyuki) * Fix PREPARE/EXECUTE handling in master slave mode. (Yoshiyuki) * Fix "kind mismatch error" when deadlock error * Fix hang up and SEGV in extended query protocol when a warning SQL like "SELECT '\'';" executed. (Yoshiyuki) * Fix hang up when postmaster did fast or immediate shutdown. (Yoshiyuki) * Fix memory leak when connection cache was full. (Yoshiyuki) * Load balancing node is selected when a session starts. (Yoshiyuki) * Fix buffer overrun if connection_life_time was set. (Yoshiyuki) 1.1.1 (amiboshi) 2007/6/15 * Version 1.1.1 * Fix "kind mismatch" bug when load_balance_mode is true introduced in 1.1 (Yoshiyuki) * Fix deadlock with extended query protocol(Yoshiyuki) * Fix numerous bugs with protocol V2(Yoshiyuki) 1.1 (amiboshi) 2007/5/25 * Version 1.1 * Support HBA authentication(Taiki) * Support log_connections(Taiki) * Support log_hostname(Taiki) * Show pgpool status in ps command(Taiki) * Fix compile error on MacOS X(Yoshiyuki) * Allow load balancing with extended protocol(Yoshiyuki) * Improve replication. SELECT nextval() and SELECT setval() are now replicated. (Yoshiyuki) * Change SELECT query is only sent to the master node. (Yoshiyuki) - Use /*REPLICATION*/ comment to repliate a SELECT query. * Fix unexpected failover error due to receiving an interrupt signal while connecting to the backend. (Yoshiyuki) * Add "pgpool.pam" file, for PAM configuration file, to be installed under "$PREFIX/share/pgpool-II/". (Taiki) * Fix core dump when executing large SQL. (Yoshiyuki) 1.0.2 (suboshi) 2007/02/12 * Version 1.0.2 * Fix bug when executing large SQL to prevent pgpool goes into infinite loop(Yoshiyuki) * Fix bug with extended protocol handling(Yoshiyuki) * Enhance log for failover and failback(Tatsuo) * Add backend status info to show pool_status(Tatsuo) * Fix UPDATE/DELETE returns wrong number of rows(Tatsuo) * Fix configure fails to link libpq when used with older version of gcc(Yoshiyuki) * Fix DEALLOCATE treatment when used with PHP:PDO DBD-Pg(Yoshiyuki) * Do not load balance SELECT FOR UPDATE, SELECT INTO and SELECT with comments. This behavior is compatible with pgpool-I(Yoshiyuki) * Obtain path to libpq using pg_config. --with-pgsql will be removed in next version(Yoshiyuki) * When reusing connection pool, reconnect to backend if the socket is broken(Yoshiyuki) * Fix error with configure when used with PostgreSQL 7.4(Yoshiyuki) 1.0.1 (suboshi) 2006/09/22 * Version 1.0.1 * This version fixes bugs including master/slave not being working, deadlock problem in COPY FROM STDIN. Also documents are improved. 1.0.0 (suboshi) 2006/09/08 * Initial release Local Variables: mode: outline End: