if (mismatch_ntuples)
{
char msgbuf[128];
+ POOL_MEMORY_POOL *old_context = pool_memory;
+
+ if (session_context->query_context)
+ pool_memory = session_context->query_context->memory_context;
+ else
+ pool_memory = session_context->memory_context;
String *msg = init_string("pgpool detected difference of the number of inserted, updated or deleted tuples. Possible last query was: \"");
string_append_char(msg, query_string_buffer);
pool_log("%s", msg->data);
free_string(msg);
+ pool_memory = old_context;
+
/*
* Remember that we have different number of UPDATE/DELETE
* affcted tuples in backends.
*/
static char *get_insert_command_table_name(InsertStmt *node)
{
+ POOL_SESSION_CONTEXT *session_context;
+ POOL_MEMORY_POOL *old_context = pool_memory;
+
+ session_context = pool_get_session_context();
+ if (!session_context)
+ return NULL;
+
+ if (session_context->query_context)
+ pool_memory = session_context->query_context->memory_context;
+ else
+ pool_memory = session_context->memory_context;
+
char *table = nodeToString(node->relation);
+ pool_memory = old_context;
+
pool_debug("get_insert_command_table_name: extracted table name: %s", table);
return table;
}
MASTER_NODE_ID, &number_of_nodes);
if (victim_nodes)
{
- String *msg = init_string("ReadyForQuery: Degenerate backends:");
int i;
+ String *msg;
+ POOL_MEMORY_POOL *old_context = pool_memory;
+
+ if (session_context->query_context)
+ pool_memory = session_context->query_context->memory_context;
+ else
+ pool_memory = session_context->memory_context;
+
+ msg = init_string("ReadyForQuery: Degenerate backends:");
for (i=0;i<number_of_nodes;i++)
{
pool_log("%s", msg->data);
free_string(msg);
+ pool_memory = old_context;
+
degenerate_backend_set(victim_nodes, number_of_nodes);
child_exit(1);
}
static void generate_error_message(char *prefix, int specific_error, char *query)
{
+ POOL_SESSION_CONTEXT *session_context;
+ POOL_MEMORY_POOL *old_context = pool_memory;
+
+ session_context = pool_get_session_context();
+ if (!session_context)
+ return;
+
static char *error_messages[] = {
"received deadlock error message from master node. query: %s",
"received serialization failure error message from master node. query: %s",
specific_error--;
+ if (session_context->query_context)
+ pool_memory = session_context->query_context->memory_context;
+ else
+ pool_memory = session_context->memory_context;
+
msg = init_string(prefix);
string_append_char(msg, error_messages[specific_error]);
pool_error(msg->data, query);
free_string(msg);
+
+ pool_memory = old_context;
}
/*
if (!strcmp(pool_config->master_slave_sub_mode, MODE_STREAMREP))
{
POOL_DEST dest;
+ POOL_MEMORY_POOL *old_context = pool_memory;
+ pool_memory = query_context->memory_context;
dest = send_to_where(node, query);
+ pool_memory = old_context;
+
pool_debug("send_to_where: %d query: %s", dest, query);
/* Should be sent to primary only? */