本文整理汇总了C++中pcp_write函数的典型用法代码示例。如果您正苦于以下问题:C++ pcp_write函数的具体用法?C++ pcp_write怎么用?C++ pcp_write使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了pcp_write函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: process_set_configration_parameter
static void
process_set_configration_parameter(PCP_CONNECTION *frontend,char *buf, int len)
{
char* param_name;
char* param_value;
int wsize;
char code[] = "CommandComplete";
param_name = buf;
if(param_name == NULL)
ereport(ERROR,
(errmsg("PCP: set configuration parameter failed"),
errdetail("invalid pcp packet received from client")));
param_value = (char *) memchr(buf, '\0', len);
if(param_value == NULL)
ereport(ERROR,
(errmsg("set configuration parameter failed"),
errdetail("invalid pcp packet received from client")));
param_value +=1;
ereport(LOG,
(errmsg("set configuration parameter, \"%s TO %s\"",param_name,param_value)));
if(strcasecmp(param_name, "client_min_messages") == 0)
{
const char *ordered_valid_values[] = {"debug5","debug4","debug3","debug2","debug1","log","commerror","info","notice","warning","error",NULL};
bool found = false;
int i;
for(i=0; ; i++)
{
char* valid_val = (char*)ordered_valid_values[i];
if(!valid_val)
break;
if (!strcasecmp(param_value, valid_val))
{
found = true;
pool_config->client_min_messages = i + 10;
ereport(DEBUG1,
(errmsg("PCP setting parameter \"%s\" to \"%s\"",param_name,param_value)));
break;
}
}
if (!found)
ereport(ERROR,
(errmsg("PCP: set configuration parameter failed"),
errdetail("invalid value \"%s\" for parameter \"%s\"",param_value,param_name)));
}
else
ereport(ERROR,
(errmsg("PCP: set configuration parameter failed"),
errdetail("invalid parameter \"%s\"",param_name)));
pcp_write(frontend, "a", 1);
wsize = htonl(sizeof(code) + sizeof(int));
pcp_write(frontend, &wsize, sizeof(int));
pcp_write(frontend, code, sizeof(code));
do_pcp_flush(frontend);
}
示例2: process_detach_node
static void
process_detach_node(PCP_CONNECTION *frontend,char *buf, char tos)
{
int node_id;
int wsize;
char code[] = "CommandComplete";
bool gracefully;
if (tos == 'D')
gracefully = false;
else
gracefully = true;
node_id = atoi(buf);
ereport(DEBUG1,
(errmsg("PCP: processing detach node"),
errdetail("detaching Node ID %d", node_id)));
pool_detach_node(node_id, gracefully);
pcp_write(frontend, "d", 1);
wsize = htonl(sizeof(code) + sizeof(int));
pcp_write(frontend, &wsize, sizeof(int));
pcp_write(frontend, code, sizeof(code));
do_pcp_flush(frontend);
}
示例3: process_authentication
static void
process_authentication(PCP_CONNECTION *frontend, char *buf, char* salt, int *random_salt)
{
int wsize;
int authenticated;
if (*random_salt)
{
authenticated = user_authenticate(buf, pcp_conf_file, salt, 4);
}
if (!*random_salt || !authenticated)
{
ereport(FATAL,
(errmsg("authentication failed"),
errdetail("username and/or password does not match")));
*random_salt = 0;
}
else
{
char code[] = "AuthenticationOK";
pcp_write(frontend, "r", 1);
wsize = htonl(sizeof(code) + sizeof(int));
pcp_write(frontend, &wsize, sizeof(int));
pcp_write(frontend, code, sizeof(code));
do_pcp_flush(frontend);
*random_salt = 0;
ereport(DEBUG1,
(errmsg("PCP: processing authentication request"),
errdetail("authentication OK")));
}
}
示例4: pcp_node_info
/* --------------------------------
* pcp_node_info - get information of node pointed by given argument
*
* return structure of node information on success, -1 otherwise
* --------------------------------
*/
PCPResultInfo *
pcp_node_info(PCPConnInfo* pcpConn, int nid)
{
int wsize;
char node_id[16];
if(PCPConnectionStatus(pcpConn) != PCP_CONNECTION_OK)
{
pcp_internal_error(pcpConn,
"invalid PCP connection");
return NULL;
}
snprintf(node_id, sizeof(node_id), "%d", nid);
pcp_write(pcpConn->pcpConn, "I", 1);
wsize = htonl(strlen(node_id)+1 + sizeof(int));
pcp_write(pcpConn->pcpConn, &wsize, sizeof(int));
pcp_write(pcpConn->pcpConn, node_id, strlen(node_id)+1);
if (PCPFlush(pcpConn) < 0)
return NULL;
if(pcpConn->Pfdebug)
fprintf(pcpConn->Pfdebug,"DEBUG: send: tos=\"I\", len=%d\n", ntohl(wsize));
return process_pcp_response(pcpConn,'I');
}
示例5: process_recovery_request
static void
process_recovery_request(PCP_CONNECTION *frontend,char *buf)
{
int wsize;
char code[] = "CommandComplete";
int node_id = atoi(buf);
if ( (node_id < 0) || (node_id >= pool_config->backend_desc->num_backends) )
ereport(ERROR,
(errmsg("process recovery request failed"),
errdetail("node id %d is not valid", node_id)));
if ((!REPLICATION &&
!(MASTER_SLAVE &&
!strcmp(pool_config->master_slave_sub_mode, MODE_STREAMREP))) ||
(MASTER_SLAVE &&
!strcmp(pool_config->master_slave_sub_mode, MODE_STREAMREP) &&
node_id == PRIMARY_NODE_ID))
{
if (MASTER_SLAVE && !strcmp(pool_config->master_slave_sub_mode, MODE_STREAMREP))
ereport(ERROR,
(errmsg("process recovery request failed"),
errdetail("primary server cannot be recovered by online recovery.")));
else
ereport(ERROR,
(errmsg("process recovery request failed"),
errdetail("recovery request is accepted only in replication mode or stereaming replication mode.")));
}
else
{
if (pcp_mark_recovery_in_progress() == false)
ereport(FATAL,
(errmsg("process recovery request failed"),
errdetail("pgpool-II is already processing another recovery request.")));
ereport(DEBUG1,
(errmsg("PCP: processing recovery request"),
errdetail("start online recovery")));
PG_TRY();
{
start_recovery(node_id);
finish_recovery();
pcp_write(frontend, "c", 1);
wsize = htonl(sizeof(code) + sizeof(int));
pcp_write(frontend, &wsize, sizeof(int));
pcp_write(frontend, code, sizeof(code));
do_pcp_flush(frontend);
pcp_mark_recovery_finished();
}
PG_CATCH();
{
finish_recovery();
pcp_mark_recovery_finished();
PG_RE_THROW();
}PG_END_TRY();
}
do_pcp_flush(frontend);
}
示例6: _pcp_promote_node
static PCPResultInfo *
_pcp_promote_node(PCPConnInfo* pcpConn,int nid, bool gracefully)
{
int wsize;
char node_id[16];
char *sendchar;
if(PCPConnectionStatus(pcpConn) != PCP_CONNECTION_OK)
{
pcp_internal_error(pcpConn,"invalid PCP connection");
return NULL;
}
snprintf(node_id, sizeof(node_id), "%d", nid);
if (gracefully)
sendchar = "j";
else
sendchar = "J";
pcp_write(pcpConn->pcpConn, sendchar, 1);
wsize = htonl(strlen(node_id)+1 + sizeof(int));
pcp_write(pcpConn->pcpConn, &wsize, sizeof(int));
pcp_write(pcpConn->pcpConn, node_id, strlen(node_id)+1);
if (PCPFlush(pcpConn) < 0)
return NULL;
if(pcpConn->Pfdebug)
fprintf(pcpConn->Pfdebug,"DEBUG: send: tos=\"E\", len=%d\n", ntohl(wsize));
return process_pcp_response(pcpConn, 'J');
}
示例7: pcp_terminate_pgpool
/* --------------------------------
* pcp_terminate_pgpool - send terminate packet
*
* return 0 on success, -1 otherwise
* --------------------------------
*/
int
pcp_terminate_pgpool(char mode)
{
int wsize;
if (pc == NULL)
{
if (debug) fprintf(stderr, "DEBUG: connection does not exist\n");
errorcode = NOCONNERR;
return -1;
}
pcp_write(pc, "T", 1);
wsize = htonl(sizeof(int) + sizeof(char));
pcp_write(pc, &wsize, sizeof(int));
pcp_write(pc, &mode, sizeof(char));
if (pcp_flush(pc) < 0)
{
if (debug) fprintf(stderr, "DEBUG: could not send data to backend\n");
return -1;
}
if (debug) fprintf(stderr, "DEBUG: send: tos=\"T\", len=%d\n", ntohl(wsize));
return 0;
}
示例8: send_md5salt
static void
send_md5salt(PCP_CONNECTION *frontend, char* salt)
{
int wsize;
ereport(DEBUG1,
(errmsg("PCP: sending md5 salt to client")));
pool_random_salt(salt);
pcp_write(frontend, "m", 1);
wsize = htonl(sizeof(int) + 4);
pcp_write(frontend, &wsize, sizeof(int));
pcp_write(frontend, salt, 4);
do_pcp_flush(frontend);
}
示例9: process_promote_node
static void
process_promote_node(PCP_CONNECTION *frontend, char *buf, char tos)
{
int node_id;
int wsize;
char code[] = "CommandComplete";
bool gracefully;
if (tos == 'J')
gracefully = false;
else
gracefully = true;
node_id = atoi(buf);
if ( (node_id < 0) || (node_id >= pool_config->backend_desc->num_backends) )
ereport(ERROR,
(errmsg("could not process recovery request"),
errdetail("node id %d is not valid", node_id)));
/* promoting node is reserved to Streaming Replication */
if (!MASTER_SLAVE || (strcmp(pool_config->master_slave_sub_mode, MODE_STREAMREP) != 0))
{
ereport(FATAL,
(errmsg("invalid pgpool mode for process recovery request"),
errdetail("not in streaming replication mode, can't promote node id %d", node_id)));
}
if (node_id == PRIMARY_NODE_ID)
{
ereport(FATAL,
(errmsg("invalid pgpool mode for process recovery request"),
errdetail("specified node is already primary node, can't promote node id %d", node_id)));
}
ereport(DEBUG1,
(errmsg("PCP: processing promote node"),
errdetail("promoting Node ID %d", node_id)));
pool_promote_node(node_id, gracefully);
pcp_write(frontend, "d", 1);
wsize = htonl(sizeof(code) + sizeof(int));
pcp_write(frontend, &wsize, sizeof(int));
pcp_write(frontend, code, sizeof(code));
do_pcp_flush(frontend);
}
示例10: inform_watchdog_info
static void
inform_watchdog_info(PCP_CONNECTION *frontend,char *buf)
{
int wd_index;
int json_data_len;
int wsize;
char code[] = "CommandComplete";
char* json_data;
if (!pool_config->use_watchdog)
ereport(ERROR,
(errmsg("PCP: informing watchdog info failed"),
errdetail("watcdhog is not enabled")));
wd_index = atoi(buf);
json_data = wd_get_watchdog_nodes(wd_index);
if (json_data == NULL)
ereport(ERROR,
(errmsg("PCP: informing watchdog info failed"),
errdetail("invalid watchdog index")));
ereport(DEBUG2,
(errmsg("PCP: informing watchdog info"),
errdetail("retrieved node information from IPC socket")));
/*
* This is the voilation of PCP protocol but I think
* in future we should shift to more adaptable protocol for
* data transmition.
*/
json_data_len = strlen(json_data);
wsize = htonl(sizeof(code) +
json_data_len+ 1 +
sizeof(int));
pcp_write(frontend, "w", 1);
pcp_write(frontend, &wsize, sizeof(int));
pcp_write(frontend, code, sizeof(code));
pcp_write(frontend, json_data, json_data_len +1);
do_pcp_flush(frontend);
pfree(json_data);
}
示例11: inform_process_count
static void
inform_process_count(PCP_CONNECTION *frontend)
{
int wsize;
int process_count;
char process_count_str[16];
int *process_list = NULL;
char code[] = "CommandComplete";
char *mesg = NULL;
int i;
int total_port_len = 0;
process_list = pool_get_process_list(&process_count);
mesg = (char *)palloc(6*process_count); /* port# is at most 5 characters long (MAX:65535) */
snprintf(process_count_str, sizeof(process_count_str), "%d", process_count);
for (i = 0; i < process_count; i++)
{
char port[6];
snprintf(port, sizeof(port), "%d", process_list[i]);
snprintf(mesg+total_port_len, strlen(port)+1, "%s", port);
total_port_len += strlen(port)+1;
}
pcp_write(frontend, "n", 1);
wsize = htonl(sizeof(code) +
strlen(process_count_str)+1 +
total_port_len +
sizeof(int));
pcp_write(frontend, &wsize, sizeof(int));
pcp_write(frontend, code, sizeof(code));
pcp_write(frontend, process_count_str, strlen(process_count_str)+1);
pcp_write(frontend, mesg, total_port_len);
do_pcp_flush(frontend);
pfree(process_list);
pfree(mesg);
ereport(DEBUG1,
(errmsg("PCP: informing process count"),
errdetail("%d process(es) found", process_count)));
}
示例12: send_to_pcp_frontend
int send_to_pcp_frontend(char* data, int len, bool flush)
{
int ret;
if (processType != PT_PCP_WORKER || pcp_frontend == NULL)
return -1;
ret = pcp_write(pcp_frontend, data, len);
if (flush && !ret)
ret = pcp_flush(pcp_frontend);
return ret;
}
示例13: process_shutown_request
static void
process_shutown_request(PCP_CONNECTION *frontend, char mode)
{
char code[] = "CommandComplete";
pid_t ppid = getppid();
int sig,len;
if (mode == 's')
{
ereport(DEBUG1,
(errmsg("PCP: processing shutdown request"),
errdetail("sending SIGTERM to the parent process with PID:%d", ppid)));
sig = SIGTERM;
}
else if (mode == 'f')
{
ereport(DEBUG1,
(errmsg("PCP: processing shutdown request"),
errdetail("sending SIGINT to the parent process with PID:%d", ppid)));
sig = SIGINT;
}
else if (mode == 'i')
{
ereport(DEBUG1,
(errmsg("PCP: processing shutdown request"),
errdetail("sending SIGQUIT to the parent process with PID:%d", ppid)));
sig = SIGQUIT;
}
else
{
ereport(ERROR,
(errmsg("PCP: error while processing shutdown request"),
errdetail("invalid shutdown mode \"%c\"", mode)));
}
pcp_write(frontend, "t", 1);
len = htonl(sizeof(code) + sizeof(int));
pcp_write(frontend, &len, sizeof(int));
pcp_write(frontend, code, sizeof(code));
do_pcp_flush(frontend);
pool_signal_parent(sig);
}
示例14: process_attach_node
static void
process_attach_node(PCP_CONNECTION *frontend,char *buf)
{
int node_id;
int wsize;
char code[] = "CommandComplete";
node_id = atoi(buf);
ereport(DEBUG1,
(errmsg("PCP: processing attach node"),
errdetail("attaching Node ID %d", node_id)));
send_failback_request(node_id,true);
pcp_write(frontend, "c", 1);
wsize = htonl(sizeof(code) + sizeof(int));
pcp_write(frontend, &wsize, sizeof(int));
pcp_write(frontend, code, sizeof(code));
do_pcp_flush(frontend);
}
示例15: pcp_pool_status
PCPResultInfo*
pcp_pool_status(PCPConnInfo *pcpConn)
{
int wsize;
if(PCPConnectionStatus(pcpConn) != PCP_CONNECTION_OK)
{
pcp_internal_error(pcpConn,"invalid PCP connection");
return NULL;
}
pcp_write(pcpConn->pcpConn, "B", 1);
wsize = htonl(sizeof(int));
pcp_write(pcpConn->pcpConn, &wsize, sizeof(int));
if (PCPFlush(pcpConn) < 0)
return NULL;
if (pcpConn->Pfdebug)
fprintf(pcpConn->Pfdebug, "DEBUG pcp_pool_status: send: tos=\"B\", len=%d\n", ntohl(wsize));
return process_pcp_response(pcpConn, 'B');
}