pgpool2.git / summary / log / commit / refs

commit    d4d25994626ba2dbd3b2cc81f11598003e8ba997
Author:   Tatsuo Ishii <ishii at sraoss.co.jp>
Date:     Thu Apr 22 08:10:38 2010 +0000

    Fix compiler warnings. Patch contributed by Takahiro Itagaki.


main.c | 4 +- parser/copyfuncs.c | 2 +- parser/gram.c | 2 +- parser/gram.y | 2 +- parser/makefuncs.c | 6 +-- parser/outfuncs.c | 10 ++++ pcp/pcp.c | 4 +- pool_connection_pool.c | 4 +- pool_ip.c | 1 + pool_lobj.c | 6 +-- pool_process_query.c | 121 +++++++++++++++++++++++++++++++++++++------------ 11 files changed, 117 insertions(+), 45 deletions(-) diff --git a/main.c b/main.c index e4ba9e17e..c285db9c6 100644 --- a/main.c +++ b/main.c @@ -979,7 +979,7 @@ static int create_inet_domain_socket(const char *hostname, const int port) } memset((char *) &addr, 0, sizeof(addr)); - ((struct sockaddr *)&addr)->sa_family = AF_INET; + addr.sin_family = AF_INET; if (strcmp(hostname, "*")==0) { @@ -1043,7 +1043,7 @@ static int create_unix_domain_socket(struct sockaddr_un un_addr_tmp) myexit(1); } memset((char *) &addr, 0, sizeof(addr)); - ((struct sockaddr *)&addr)->sa_family = AF_UNIX; + addr.sun_family = AF_UNIX; snprintf(addr.sun_path, sizeof(addr.sun_path), un_addr_tmp.sun_path); len = sizeof(struct sockaddr_un); status = bind(fd, (struct sockaddr *)&addr, len); diff --git a/parser/copyfuncs.c b/parser/copyfuncs.c index 070a8a807..54cf74c0b 100644 --- a/parser/copyfuncs.c +++ b/parser/copyfuncs.c @@ -27,7 +27,7 @@ #include <stddef.h> #include "pool_memory.h" #include "parsenodes.h" -#define Assert +#define Assert(expr) ((void) 0) /* diff --git a/parser/gram.c b/parser/gram.c index 653a309e9..57181693a 100644 --- a/parser/gram.c +++ b/parser/gram.c @@ -986,7 +986,7 @@ typedef enum #define base_yylex filtered_base_yylex #define ereport(a,b) yyerror("") -#define Assert +#define Assert(expr) ((void) 0) List *parsetree; /* final parse result is delivered here */ static bool QueryIsRule = FALSE; diff --git a/parser/gram.y b/parser/gram.y index 473d99e54..be3e39a05 100644 --- a/parser/gram.y +++ b/parser/gram.y @@ -99,7 +99,7 @@ typedef enum #define base_yylex filtered_base_yylex #define ereport(a,b) yyerror("") -#define Assert +#define Assert(expr) ((void) 0) List *parsetree; /* final parse result is delivered here */ static bool QueryIsRule = FALSE; diff --git a/parser/makefuncs.c b/parser/makefuncs.c index a12e7322f..6613c0afa 100644 --- a/parser/makefuncs.c +++ b/parser/makefuncs.c @@ -21,9 +21,9 @@ #include <stdlib.h> #include <string.h> -#define Assert -#define ereport(a,b) -#define elog(a,b) +#define Assert(expr) ((void) 0) +#define ereport(a,b) ((void) 0) +#define elog(a,b) ((void) 0) #define BOOLOID 16 /* XXX */ diff --git a/parser/outfuncs.c b/parser/outfuncs.c index 045974c98..2acaf2a66 100644 --- a/parser/outfuncs.c +++ b/parser/outfuncs.c @@ -3525,6 +3525,16 @@ _outGrantStmt(String *str, GrantStmt *node) string_append_char(str, "TABLESPACE "); _outIdList(str, node->objects); break; + + case ACL_OBJECT_FDW: + string_append_char(str, "FOREIGN DATA WRAPPER "); + _outIdList(str, node->objects); + break; + + case ACL_OBJECT_FOREIGN_SERVER: + string_append_char(str, "FOREIGN SERVER "); + _outIdList(str, node->objects); + break; } if (node->is_grant == true) diff --git a/pcp/pcp.c b/pcp/pcp.c index 95e16f559..e252bae03 100644 --- a/pcp/pcp.c +++ b/pcp/pcp.c @@ -127,7 +127,7 @@ pcp_connect(char *hostname, int port, char *username, char *password) } memset((char *) &addr, 0, sizeof(addr)); - ((struct sockaddr *) &addr)->sa_family = AF_INET; + addr.sin_family = AF_INET; hp = gethostbyname(hostname); if ((hp == NULL) || (hp->h_addrtype != AF_INET)) { @@ -293,7 +293,7 @@ pcp_disconnect(void) { /* backend had closed connection already */ } - if (debug) fprintf(stderr, "DEBUG: send: tos=\"X\", len=%d\n", sizeof(int)); + if (debug) fprintf(stderr, "DEBUG: send: tos=\"X\", len=%d\n", (int) sizeof(int)); pcp_close(pc); pc = NULL; diff --git a/pool_connection_pool.c b/pool_connection_pool.c index 82d748c9b..53605d71f 100644 --- a/pool_connection_pool.c +++ b/pool_connection_pool.c @@ -453,7 +453,7 @@ int connect_unix_domain_socket_by_port(int port, char *socket_dir, bool retry) } memset((char *) &addr, 0, sizeof(addr)); - ((struct sockaddr *)&addr)->sa_family = AF_UNIX; + addr.sun_family = AF_UNIX; snprintf(addr.sun_path, sizeof(addr.sun_path), "%s/.s.PGSQL.%d", socket_dir, port); len = sizeof(struct sockaddr_un); @@ -510,7 +510,7 @@ int connect_inet_domain_socket_by_port(char *host, int port, bool retry) } memset((char *) &addr, 0, sizeof(addr)); - ((struct sockaddr *)&addr)->sa_family = AF_INET; + addr.sin_family = AF_INET; addr.sin_port = htons(port); len = sizeof(struct sockaddr_in); diff --git a/pool_ip.c b/pool_ip.c index b6bc571c2..40771d517 100644 --- a/pool_ip.c +++ b/pool_ip.c @@ -451,6 +451,7 @@ SockAddr_cidr_mask(struct sockaddr_storage * mask, char *numbits, int family) & 0xffffffffUL; else maskl = 0; + memset(&mask4, 0, sizeof(mask4)); mask4.sin_addr.s_addr = htonl(maskl); memcpy(mask, &mask4, sizeof(mask4)); break; diff --git a/pool_lobj.c b/pool_lobj.c index 3e9ec3f41..68213564f 100644 --- a/pool_lobj.c +++ b/pool_lobj.c @@ -101,9 +101,9 @@ char *pool_rewrite_lo_creat(char kind, char *packet, int packet_len, } /* - * Get lo_crea oid + * Get lo_creat oid */ - lo_creat_oid = (int)pool_search_relcache(relcache_lo_creat, backend, "pg_proc"); + lo_creat_oid = (int)(intptr_t)pool_search_relcache(relcache_lo_creat, backend, "pg_proc"); memmove(&orig_fcall_oid, packet, sizeof(int32)); orig_fcall_oid = ntohl(orig_fcall_oid); @@ -132,7 +132,7 @@ char *pool_rewrite_lo_creat(char kind, char *packet, int packet_len, /* * Get lo_create oid */ - lo_create_oid = (int)pool_search_relcache(relcache_lo_create, backend, "pg_proc"); + lo_create_oid = (int)(intptr_t)pool_search_relcache(relcache_lo_create, backend, "pg_proc"); pool_debug("pool_check_lo_creat: lo_creat_oid: %d lo_create_oid: %d", lo_creat_oid, lo_create_oid); diff --git a/pool_process_query.c b/pool_process_query.c index a3e93f5df..f7180c204 100644 --- a/pool_process_query.c +++ b/pool_process_query.c @@ -2650,19 +2650,25 @@ POOL_STATUS do_error_command(POOL_CONNECTION *backend, int major) } /* - * Send invalid portal execution to abort transaction. - * We need to sync transaction status in transaction block. - * SELECT query is sent to master only. - * If SELECT is error, we must abort transaction on other nodes. + * Send invalid portal execution to specified DB node to abort current + * transaction. Pgpool-II sends a SELECT query to master node only in + * load balance mode. Problem is, if the query failed, master node + * goes to abort status while other nodes remain normal status. To + * sync transaction status in each node, we send error query to other + * than master node to ket them go into abort status. */ static POOL_STATUS do_error_execute_command(POOL_CONNECTION_POOL *backend, int node_id, int major) { int status; char kind; char *string; - char msg[1024] = "pgpoool_error_portal"; /* large enough */ + char msg[1024] = "pgpool_error_portal"; /* large enough */ int len = strlen(msg); + char buf[8192]; /* memory space is large enough */ + char *p; + int readlen = 0; + p = buf; memset(msg + len, 0, sizeof(int)); if (send_execute_message(backend, node_id, len + 5, msg)) { @@ -2670,34 +2676,89 @@ static POOL_STATUS do_error_execute_command(POOL_CONNECTION_POOL *backend, int n } /* - * Expecting ErrorResponse + * Discard responses from backend until ErrorResponse received. + * Note that we need to preserve non-error responses + * (i.e. ReadyForQuery) and put back them using pool_unread(). + * Otherwise, ReadyForQuery response of DEALLOCATE. This could + * happen if PHP PDO used. (2010/04/21) */ - status = pool_read(CONNECTION(backend, node_id), &kind, sizeof(kind)); - if (status < 0) - { - pool_error("do_error_execute_command: error while reading message kind"); - return POOL_END; - } - - /* - * read command tag of CommandComplete response - */ - if (major == PROTO_MAJOR_V3) - { - if (pool_read(CONNECTION(backend, node_id), &len, sizeof(len)) < 0) - return POOL_END; - len = ntohl(len) - 4; - string = pool_read2(CONNECTION(backend, node_id), len); - if (string == NULL) + do { + status = pool_read(CONNECTION(backend, node_id), &kind, sizeof(kind)); + if (status < 0) + { + pool_error("do_error_execute_command: error while reading message kind"); return POOL_END; - pool_debug("command tag: %s", string); - } - else - { - string = pool_read_string(CONNECTION(backend, node_id), &len, 0); - if (string == NULL) + } + + /* + * read command tag of CommandComplete response + */ + if (kind != 'E') + { + readlen += sizeof(kind); + memcpy(p, &kind, sizeof(kind)); + p += sizeof(kind); + } + + if (major == PROTO_MAJOR_V3) + { + if (pool_read(CONNECTION(backend, node_id), &len, sizeof(len)) < 0) + return POOL_END; + + if (kind != 'E') + { + readlen += sizeof(len); + memcpy(p, &len, sizeof(len)); + p += sizeof(len); + } + + len = ntohl(len) - 4; + string = pool_read2(CONNECTION(backend, node_id), len); + if (string == NULL) + return POOL_END; + pool_debug("command tag: %s", string); + + if (kind != 'E') + { + readlen += len; + if (readlen >= sizeof(buf)) + { + pool_error("do_error_execute_command: not enough buffer space"); + return POOL_END; + } + memcpy(p, string, len); + p += sizeof(len); + } + } + else + { + string = pool_read_string(CONNECTION(backend, node_id), &len, 0); + if (string == NULL) + return POOL_END; + + if (kind != 'E') + { + readlen += len; + if (readlen >= sizeof(buf)) + { + pool_error("do_error_execute_command: not enough buffer space"); + return POOL_END; + } + memcpy(p, string, len); + p += sizeof(len); + } + } + } while (kind != 'E'); + + if (readlen > 0) + { + /* put messages back to read buffer */ + if (pool_unread(CONNECTION(backend, node_id), buf, readlen) != 0) + { + pool_error("do_error_execute_command: pool_unread failed"); return POOL_END; - } + } + } return POOL_CONTINUE; } [parent: a0c7a1bbf1f8]