pgpool2.git / summary / log / commit / refs
commit adafd895463fbc400e010858d14aba0f69cf5f23
Author: Tatsuo Ishii <ishii at sraoss.co.jp>
Date: Sun Jun 05 23:03:06 2011 +0000
Refactor ReadyForQuery(). Create close_standby_transactions() mainly
for cosmetic reason.
pool_proto_modules.c | 53 ++++++++++++++++++++++++++++++++++------------------
1 file changed, 35 insertions(+), 18 deletions(-)
diff --git a/pool_proto_modules.c b/pool_proto_modules.c
index 7025a13bd..ec9c0b5e0 100644
--- a/pool_proto_modules.c
+++ b/pool_proto_modules.c
@@ -91,6 +91,8 @@ static POOL_STATUS parse_before_bind(POOL_CONNECTION *frontend,
POOL_SENT_MESSAGE *message);
static int* find_victim_nodes(int *ntuples, int nmembers, int master_node, int *number_of_nodes);
static int extract_ntuples(char *message);
+static POOL_STATUS close_standby_transactions(POOL_CONNECTION *frontend,
+ POOL_CONNECTION_POOL *backend);
/*
* Process Query('Q') message
@@ -1314,27 +1316,15 @@ POOL_STATUS ReadyForQuery(POOL_CONNECTION *frontend,
}
/*
- * If 2PC commands, automatically close transaction on standbys since
- * 2PC commands close transaction on primary.
+ * If 2PC commands has been executed, automatically close
+ * transactions on standbys if there is any open
+ * transaction since 2PC commands close transaction on
+ * primary.
*/
else if (is_2pc_transaction_query(node, query))
{
- for (i=0;i<NUM_BACKENDS;i++)
- {
- if (CONNECTION_SLOT(backend, i) &&
- TSTATE(backend, i) == 'T' &&
- BACKEND_INFO(i).backend_status == CON_UP &&
- (MASTER_SLAVE ? PRIMARY_NODE_ID : REAL_MASTER_NODE_ID) != i)
- {
- per_node_statement_log(backend, i, "COMMIT");
- if (do_command(frontend, CONNECTION(backend, i), "COMMIT", MAJOR(backend),
- MASTER_CONNECTION(backend)->pid,
- MASTER_CONNECTION(backend)->key, 0) != POOL_CONTINUE)
- {
- return POOL_END;
- }
- }
- }
+ if (close_standby_transactions(frontend, backend) != POOL_CONTINUE)
+ return POOL_END;
}
/*
@@ -1367,6 +1357,33 @@ POOL_STATUS ReadyForQuery(POOL_CONNECTION *frontend,
return POOL_CONTINUE;
}
+/*
+ * Close running transactions on standbys.
+ */
+static POOL_STATUS close_standby_transactions(POOL_CONNECTION *frontend,
+ POOL_CONNECTION_POOL *backend)
+{
+ int i;
+
+ for (i=0;i<NUM_BACKENDS;i++)
+ {
+ if (CONNECTION_SLOT(backend, i) &&
+ TSTATE(backend, i) == 'T' &&
+ BACKEND_INFO(i).backend_status == CON_UP &&
+ (MASTER_SLAVE ? PRIMARY_NODE_ID : REAL_MASTER_NODE_ID) != i)
+ {
+ per_node_statement_log(backend, i, "COMMIT");
+ if (do_command(frontend, CONNECTION(backend, i), "COMMIT", MAJOR(backend),
+ MASTER_CONNECTION(backend)->pid,
+ MASTER_CONNECTION(backend)->key, 0) != POOL_CONTINUE)
+ {
+ return POOL_END;
+ }
+ }
+ }
+ return POOL_CONTINUE;
+}
+
POOL_STATUS ParseComplete(POOL_CONNECTION *frontend, POOL_CONNECTION_POOL *backend)
{
POOL_SESSION_CONTEXT *session_context;
[parent: e300a063a2ab]