*
* poolcomm.h
*
* Definitions for the Pooler-Seesion communications.
*
*
* Portions Copyright (c) 1996-2011, PostgreSQL Global Development Group
* Portions Copyright (c) 2010-2012 Postgres-XC Development Group
*
* src/include/pgxc/pool_comm.h
*
* -------------------------------------------------------------------------
*/
#ifndef POOLCOMM_H
#define POOLCOMM_H
#include "postgres.h"
#include "knl/knl_variable.h"
#include "lib/stringinfo.h"
#include "libcomm/libcomm.h"
#define POOL_BUFFER_SIZE 1024
#define Socket(port) (port).fdsock
typedef struct pg_conn NODE_CONNECTION;
typedef struct pg_cancel NODE_CANCEL;
typedef struct {
int fdsock;
int RecvLength;
int RecvPointer;
char RecvBuffer[POOL_BUFFER_SIZE];
int SendPointer;
char SendBuffer[POOL_BUFFER_SIZE];
} PoolPort;
typedef struct PGXCNodePoolSlot {
char* user_name;
char* pgoptions;
char* session_params;
bool need_validate;
Oid userid;
Oid nodeOid;
struct timeval released;
NODE_CONNECTION* conn;
NODE_CANCEL* xc_cancelConn;
pthread_mutex_t slot_lock;
union {
uint32 node_count;
uint32 used_count;
};
struct PGXCNodePoolSlot* next;
} PGXCNodePoolSlot;
typedef struct {
int* fds;
int fdsCnt;
gsocket* gsock;
PoolConnInfo* connInfos;
NODE_CONNECTION** pgConn;
int pgConnCnt;
int waitCreateCount;
} PoolConnDef;
typedef struct databasepool {
char* database;
char* user_name;
Oid userId;
char* pgoptions;
HTAB* nodePools;
pthread_mutex_t nodePoolsLock;
MemoryContext mcxt;
struct databasepool* next;
} DatabasePool;
* Agent of client session (Pool Manager side)
* Acts as a session manager, grouping connections together
* and managing session parameters
*/
typedef struct PoolAgent {
ThreadId pid;
PoolPort port;
DatabasePool* pool;
char* user_name;
char* pgoptions;
bool has_check_params;
bool is_thread_pool_session;
uint64 session_id;
MemoryContext mcxt;
int num_dn_connections;
int num_coord_connections;
int params_set;
int localParamsSet;
int reuse;
Oid* dn_conn_oids;
Oid* coord_conn_oids;
Oid* dn_connecting_oids;
int dn_connecting_cnt;
Oid* coord_connecting_oids;
int coord_connecting_cnt;
PGXCNodePoolSlot** dn_connections;
PGXCNodePoolSlot** coord_connections;
PoolConnDef* coor_conndef_for_validate;
PoolConnDef* dn_conndef_for_validate;
char* session_params;
char* local_params;
char* temp_namespace;
List* params_list;
List* localParamsList;
pthread_mutex_t lock;
} PoolAgent;
typedef PoolAgent PoolHandle;
extern int pool_listen(unsigned short port, const char* unixSocketName);
extern int pool_connect(unsigned short port, const char* unixSocketName);
extern int pool_getbyte(PoolPort* port);
extern int pool_pollbyte(PoolPort* port);
extern int pool_getmessage(PoolPort* port, StringInfo s, int maxlen);
extern int pool_getbytes(PoolPort* port, char* s, size_t len);
extern int pool_putmessage(PoolPort* port, char msgtype, const char* s, size_t len);
extern int pool_putbytes(PoolPort* port, const char* s, size_t len);
extern int pool_flush(PoolPort* port);
extern int pool_sendconnDefs(PoolPort* port, PoolConnDef* connDef, int count);
extern int pool_recvconnDefs(PoolPort* port, PoolConnDef* connDef, int count);
extern int pool_sendres(PoolPort* port, int res);
extern int pool_recvres(PoolPort* port);
extern int pool_sendpids(PoolPort* port, ThreadId* pids, int count);
extern int pool_recvpids(PoolPort* port, ThreadId** pids);
#endif