static int contact_sched( int cmd) /* I */ { int sock; char tmpLine[1024]; char EMsg[1024]; char *id = "contact_sched"; /* connect to the Scheduler */ #if 0 /* don't check if scheduler runs on same node as server */ if (!addr_ok(pbs_scheduler_addr)) { pbs_errno = EHOSTDOWN; return -1; } #endif sock = client_to_svr(pbs_scheduler_addr, pbs_scheduler_port, 1, EMsg); if (sock < 0) { /* FAILURE */ bad_node_warning(pbs_scheduler_addr); #if 0 sprintf(tmpLine, "%s - port %d %s", msg_sched_nocall, pbs_scheduler_port, EMsg); log_ext(errno,id,tmpLine,LOG_ALERT); #endif return(-1); } add_conn( sock, FromClientDIS, pbs_scheduler_addr, pbs_scheduler_port, PBS_SOCK_INET, process_request); svr_conn[sock].cn_authen = PBS_NET_CONN_FROM_PRIVIL; net_add_close_func(sock, scheduler_close); /* send command to Scheduler */ if (put_4byte(sock, cmd) < 0) { sprintf(tmpLine, "%s - port %d", msg_sched_nocall, pbs_scheduler_port); log_ext(errno,id,tmpLine,LOG_ALERT); close_conn(sock); return(-1); } sprintf(log_buffer, msg_sched_called, (cmd != SCH_ERROR) ? PSchedCmdType[cmd] : "ERROR"); log_event( PBSEVENT_SCHED, PBS_EVENTCLASS_SERVER, server_name, log_buffer); return (sock); } /* END contact_sched() */
static int contact_listener( int l_idx) /* I */ { int sock; char tmpLine[1024]; char EMsg[1024]; char *id = "contact_listener"; /* If this is the first time contacting the scheduler for * this listener set the cmd */ if(listener_conns[l_idx].first_time) listener_command = SCH_SCHEDULE_FIRST; /* connect to the Listener */ sock = client_to_svr(listener_conns[l_idx].address, listener_conns[l_idx].port, 1, EMsg); if (sock < 0) { /* FAILURE */ bad_node_warning(listener_conns[l_idx].address); sprintf(tmpLine, "%s %d - port %d %s", msg_listnr_nocall, l_idx, listener_conns[l_idx].port, EMsg); /* we lost contact with the scheduler. reset*/ listener_conns[l_idx].first_time = 1; log_err(errno, id, tmpLine); return(-1); } listener_conns[l_idx].first_time = 0; add_conn( sock, FromClientDIS, listener_conns[l_idx].address, listener_conns[l_idx].port, PBS_SOCK_INET, process_request); svr_conn[sock].cn_authen = PBS_NET_CONN_FROM_PRIVIL; net_add_close_func(sock, listener_close); /* send command to Listener */ if (put_4byte(sock, listener_command) < 0) { sprintf(tmpLine, "%s %d - port %d", msg_listnr_nocall, l_idx + 1, listener_conns[l_idx].port); log_err(errno, id, tmpLine); close_conn(sock); return(-1); } sprintf(log_buffer, msg_listnr_called, l_idx + 1, (listener_command != SCH_ERROR) ? PSchedCmdType[listener_command] : "ERROR"); log_event( PBSEVENT_SCHED, PBS_EVENTCLASS_SERVER, server_name, log_buffer); return (sock); } /* END contact_listener() */
void *contact_sched( void *new_cmd) /* I */ { int sock; char tmpLine[1024]; char EMsg[1024]; char log_buf[LOCAL_LOG_BUF_SIZE]; int cmd = *(int *)new_cmd; free(new_cmd); /* connect to the Scheduler */ sock = client_to_svr(pbs_scheduler_addr, pbs_scheduler_port, 1, EMsg); if (sock < 0) { /* Thread exit */ return(NULL); } add_scheduler_conn( sock, FromClientDIS, pbs_scheduler_addr, pbs_scheduler_port, PBS_SOCK_INET, NULL); pthread_mutex_lock(scheduler_sock_jobct_mutex); scheduler_sock = sock; pthread_mutex_unlock(scheduler_sock_jobct_mutex); pthread_mutex_lock(svr_conn[sock].cn_mutex); svr_conn[sock].cn_authen = PBS_NET_CONN_FROM_PRIVIL; pthread_mutex_unlock(svr_conn[sock].cn_mutex); /* send command to Scheduler */ if (put_4byte(sock, cmd) < 0) { sprintf(tmpLine, "%s - port %d", msg_sched_nocall, pbs_scheduler_port); log_ext(errno, __func__, tmpLine, LOG_ALERT); close_conn(sock, FALSE); /* Thread exit */ return(NULL); } /* * call process_pbs_server_port_scheduler which will * handle 1 or more batch requests that may be received * from the scheduler. */ process_pbs_server_port_scheduler(&sock); sprintf(log_buf, msg_sched_called, (cmd != SCH_ERROR) ? PSchedCmdType[cmd] : "ERROR"); log_event(PBSEVENT_SCHED,PBS_EVENTCLASS_SERVER,server_name,log_buf); /* Thread exit */ return(NULL); } /* END contact_sched() */