return NULL;
}
+/*
+ * Get target backend id from pending message assuming that the destination for
+ * the pending message is one of primary or standby node.
+ */
+int pool_pending_message_get_target_backend_id(POOL_PENDING_MESSAGE *msg)
+{
+ int backend_id = -1;
+
+ if (msg->node_ids[0] != -1)
+ backend_id = msg->node_ids[0];
+ else if (msg->node_ids[1] != -1)
+ backend_id = msg->node_ids[1];
+ else
+ ereport(ERROR,
+ (errmsg("pool_pending_message_get_target_backend_id: no target backend id found")));
+
+ return backend_id;
+}
+
/*
* Dump whole pending message list
*/
* pgpool: a language independent connection pool server for PostgreSQL
* written by Tatsuo Ishii
*
- * Copyright (c) 2003-2017 PgPool Global Development Group
+ * Copyright (c) 2003-2018 PgPool Global Development Group
*
* Permission to use, copy, modify, and distribute this software and
* its documentation for any purpose and without fee is hereby
extern POOL_PENDING_MESSAGE *pool_pending_message_create(char kind, int len, char *contents);
extern void pool_pending_message_free_pending_message(POOL_PENDING_MESSAGE *message);
extern void pool_pending_message_dest_set(POOL_PENDING_MESSAGE* message, POOL_QUERY_CONTEXT *query_context);
-void pool_pending_message_query_context_dest_set(POOL_PENDING_MESSAGE* message, POOL_QUERY_CONTEXT *query_context);
+extern void pool_pending_message_query_context_dest_set(POOL_PENDING_MESSAGE* message, POOL_QUERY_CONTEXT *query_context);
extern void pool_pending_message_query_set(POOL_PENDING_MESSAGE* message, POOL_QUERY_CONTEXT *query_context);
extern void pool_pending_message_add(POOL_PENDING_MESSAGE* message);
extern POOL_PENDING_MESSAGE *pool_pending_message_head_message(void);
extern const char *pool_pending_message_type_to_string(POOL_MESSAGE_TYPE type);
extern void pool_check_pending_message_and_reply(POOL_MESSAGE_TYPE type, char kind);
extern POOL_PENDING_MESSAGE *pool_pending_message_find_lastest_by_query_context(POOL_QUERY_CONTEXT *qc);
+extern int pool_pending_message_get_target_backend_id(POOL_PENDING_MESSAGE *msg);
extern void dump_pending_message(void);
extern void pool_set_major_version(int major);
extern void pool_set_minor_version(int minor);
* pgpool: a language independent connection pool server for PostgreSQL
* written by Tatsuo Ishii
*
- * Copyright (c) 2003-2017 PgPool Global Development Group
+ * Copyright (c) 2003-2018 PgPool Global Development Group
*
* Permission to use, copy, modify, and distribute this software and
* its documentation for any purpose and without fee is hereby
msg = pool_pending_message_find_lastest_by_query_context(query_context);
if (msg)
+ {
+ /*
+ * If pending message found, we should extract target backend from it
+ */
+ int backend_id;
+
+ backend_id = pool_pending_message_get_target_backend_id(msg);
+ backend = CONNECTION(session_context->backend, backend_id);
timeout = -1;
+ }
else
timeout = 0;