/* child.c */
extern POOL_CONNECTION_POOL_SLOT *make_persistent_db_connection(
- char *hostname, int port, char *dbname, char *user, char *password, bool retry);
+ int db_node_id, char *hostname, int port, char *dbname, char *user, char *password, bool retry);
extern POOL_CONNECTION_POOL_SLOT *make_persistent_db_connection_noerror(
- char *hostname, int port, char *dbname, char *user, char *password, bool retry);
+ int db_node_id, char *hostname, int port, char *dbname, char *user, char *password, bool retry);
extern void discard_persistent_db_connection(POOL_CONNECTION_POOL_SLOT *cp);
/* define pool_system.c */
* pgpool: a language independent connection pool server for PostgreSQL
* written by Tatsuo Ishii
*
- * Copyright (c) 2003-2013 PgPool Global Development Group
+ * Copyright (c) 2003-2017 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 int pool_stacklen(POOL_CONNECTION *cp);
extern void pool_set_nonblock(int fd);
extern void pool_unset_nonblock(int fd);
+extern void pool_set_db_node_id(POOL_CONNECTION *con, int db_node_id);
#endif /* POOL_STREAM_H */
ereport(DEBUG1,
(errmsg("Trying to make persistent DB connection to backend node %d having status %d", i, bkinfo->backend_status)));
- slot = make_persistent_db_connection(bkinfo->backend_hostname,
+ slot = make_persistent_db_connection(i, bkinfo->backend_hostname,
bkinfo->backend_port,
dbname,
pool_config->health_check_user,
*is_standby = false;
- s = make_persistent_db_connection_noerror(bkinfo->backend_hostname,
+ s = make_persistent_db_connection_noerror(backend_no, bkinfo->backend_hostname,
bkinfo->backend_port,
"postgres",
pool_config->sr_check_user,
if (con == NULL)
return;
+ pool_set_db_node_id(con, i);
+
len = htonl(sizeof(len) + sizeof(CancelPacket));
pool_write(con, &len, sizeof(len));
{
/* set DB node id */
- CONNECTION(backend, i)->db_node_id = i;
+ pool_set_db_node_id(CONNECTION(backend, i), i);
/* mark this is a backend connection */
CONNECTION(backend, i)->isbackend = 1;
* create a persistent connection
*/
POOL_CONNECTION_POOL_SLOT *make_persistent_db_connection(
- char *hostname, int port, char *dbname, char *user, char *password, bool retry)
+ int db_node_id, char *hostname, int port, char *dbname, char *user, char *password, bool retry)
{
POOL_CONNECTION_POOL_SLOT *cp;
int fd;
cp->con = pool_open(fd,true);
cp->closetime = 0;
cp->con->isbackend = 1;
+ pool_set_db_node_id(cp->con, db_node_id);
+
pool_ssl_negotiate_clientserver(cp->con);
/*
* make_persistent_db_connection() which does not ereports in case of an error
*/
POOL_CONNECTION_POOL_SLOT *make_persistent_db_connection_noerror(
- char *hostname, int port, char *dbname, char *user, char *password, bool retry)
+ int db_node_id, char *hostname, int port, char *dbname, char *user, char *password, bool retry)
{
POOL_CONNECTION_POOL_SLOT *slot = NULL;
MemoryContext oldContext = CurrentMemoryContext;
PG_TRY();
{
- slot = make_persistent_db_connection(hostname,
- port,
- dbname,
- user,
- password, retry);
+ slot = make_persistent_db_connection(db_node_id,
+ hostname,
+ port,
+ dbname,
+ user,
+ password, retry);
}
PG_CATCH();
{
}
- system_db_info->connection = make_persistent_db_connection(pool_config->system_db_hostname,
+ system_db_info->connection = make_persistent_db_connection(-1, pool_config->system_db_hostname,
pool_config->system_db_port,
pool_config->system_db_dbname,
pool_config->system_db_user,
if (slots[i] == NULL)
{
bkinfo = pool_get_node_info(i);
- slots[i] = make_persistent_db_connection_noerror(bkinfo->backend_hostname,
+ slots[i] = make_persistent_db_connection_noerror(i, bkinfo->backend_hostname,
bkinfo->backend_port,
"postgres",
pool_config->sr_check_user,
return cp->sbuf;
}
+/*
+ * Set db node id to connection.
+ */
+void pool_set_db_node_id(POOL_CONNECTION *con, int db_node_id)
+{
+ if (!con)
+ return;
+ con->db_node_id = db_node_id;
+}
+
/*
* returns the byte length of str, including \0, no more than upper.
* if encountered \0, flag is set to non 0.