pgpool2.git / summary / log / commit / refs

commit    e45ef50363809c8a864b412dc77ece0b3fdd0b82
Author:   Tatsuo Ishii <ishii at sraoss.co.jp>
Date:     Sun Feb 28 12:39:02 2010 +0000

    Internal document for online recovery


README.online-recovery | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) diff --git a/README.online-recovery b/README.online-recovery new file mode 100644 index 000000000..efdc3dcb0 --- /dev/null +++ b/README.online-recovery @@ -0,0 +1,62 @@ +/* + * $Header$ + * + * pgpool: a language independent connection pool server for PostgreSQL + * written by Tatsuo Ishii + * + * Copyright (c) 2003-2010 PgPool Global Development Group + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose and without fee is hereby + * granted, provided that the above copyright notice appear in all + * copies and that both that copyright notice and this permission + * notice appear in supporting documentation, and that the name of the + * author not be used in advertising or publicity pertaining to + * distribution of the software without specific, written prior + * permission. The author makes no representations about the + * suitability of this software for any purpose. It is provided "as + * is" without express or implied warranty. + * + */ + +How does online reconvery work? + +pcp_recovery_node calls pcp_recovery_node() API + +pcp_recovery_node(int node_id) does: + + pcp_recovery_node sends "O" to pcp_child process requesting online + recovery + + pcp_child calls start_recovery() and waits for its completion + + start_recovery() sets Req_info->kind to NODE_RECOVERY_REQUEST + start_recovery calls execute_checkpoint() execute CHEKPOINT + command + start_recovery calls exec_recovery + exec_recovery executes SELECT pgpool_recovery() + execute 1st stage command + + /* start 2nd stage */ + sets InRecovery to 1 + wait_connection_closed() to wait for all frontend exits + calls execute_checkpoint() execute CHEKPOINT + calls exec_recovery to execute 2nd stage script + calls exec_remote_start to start postmaster + calls check_postmaster_started to wait for postmaster starts + up + set pcp_wakeup request to 0 + calls send_failback_request() + waits for failback completion every 1 second until + pcp_wakeup_request becomes non 0. + set pcp_wakeup request to 0 + + start_recovery calls finish_recovery() + finish_recovery sets InRecovery to 0 + sends SIGUSR2 signal to parent + + Upon receiving SIGUSR2 pgpool parent calls + kill_all_children() which sends SIGUSR2 to all pgpool + children + + child pgpool processes wake up from pause() \ No newline at end of file [parent: 5a701c0fe533]