24 #if defined(UNDEFINED) 35 #include <sys/types.h> 49 #include <sys/socket.h> 50 #include <netinet/in.h> 51 #include <arpa/inet.h> 70 #define ADMIN_ERR_MSG_SIZE BROKER_PATH_MAX * 2 74 #if !defined(WINDOWS) && !defined(LINUX) 87 int broker_check_loop_count = 30;
88 char err_flag =
FALSE;
91 char port_env_str[PATH_MAX];
92 char appl_name_env_str[32];
93 char master_shm_key_env_str[32];
94 char appl_server_shm_key_env_str[32];
95 char proxy_shm_key_env_str[32];
96 char error_log_lock_env_file[128];
97 const char *broker_exe_name;
110 #if !defined(WINDOWS) 117 #if !defined(WINDOWS) 118 signal (SIGCHLD, SIG_IGN);
121 #if !defined(WINDOWS) 122 if ((pid = fork ()) < 0)
132 #if !defined(WINDOWS) 135 signal (SIGCHLD, SIG_DFL);
139 #if defined(V3_ADMIN_D) 140 if (admin_clt_sock_fd > 0)
142 if (admin_srv_sock_fd > 0)
150 for (i = 0; i < env_num; i++)
159 putenv (port_env_str);
160 putenv (master_shm_key_env_str);
161 putenv (appl_server_shm_key_env_str);
162 putenv (proxy_shm_key_env_str);
176 broker_exe_name = NAME_CAS_BROKER2;
180 sprintf (appl_name_env_str,
"%s=%s", APPL_NAME_ENV_STR, broker_exe_name);
181 putenv (appl_name_env_str);
183 sprintf (error_log_lock_env_file,
"%s=%s.log.lock", ERROR_LOG_LOCK_FILE_ENV_STR, br_info_p->
name);
184 putenv (error_log_lock_env_file);
187 pid = run_child (broker_exe_name);
189 if (execle (broker_exe_name, broker_exe_name,
NULL,
environ) < 0)
191 perror (broker_exe_name);
205 for (i = 0; i < broker_check_loop_count; i++)
223 if (i == broker_check_loop_count)
246 time_t cur_time = time (
NULL);
248 char cmd_buf[BUFSIZ];
253 if (localtime_r (&cur_time, &ct) ==
NULL)
267 if (shm_as_p ==
NULL)
274 if (shm_proxy_p ==
NULL)
280 for (proxy_index = 0; proxy_index < shm_proxy_p->
num_proxy; proxy_index++)
284 shard_proxy_inactivate (br_info_p, proxy_info_p, shm_as_p);
289 sprintf (cmd_buf,
"%s.%02d%02d%02d.%02d%02d", br_info_p->
error_log_file, ct.tm_year, ct.tm_mon + 1, ct.tm_mday,
290 ct.tm_hour, ct.tm_min);
303 #if defined (WINDOWS) 304 MAKE_ACL_SEM_NAME (sem_name, br_info_p->
name);
328 int pid = 0,
i, env_num;
332 char port_env_str[PATH_MAX];
334 char access_log_env_str[256];
336 char as_shm_id_env_str[32];
337 char proxy_shm_id_env_str[32];
338 char proxy_id_env_str[32];
340 char dirname[PATH_MAX];
341 #if !defined (WINDOWS) 342 char process_name[128];
353 if (proxy_info_p ==
NULL)
360 shard_info_p = shard_shm_get_first_shard_info (proxy_info_p);
361 if (shard_info_p ==
NULL)
370 "max_client %d is greater than %d [%s]\n\n" "please check your $CUBRID/conf/shard.conf\n\n" "[%%%s]\n" 380 #if !defined(WINDOWS) 386 #if !defined(WINDOWS) 387 if ((pid = fork ()) < 0)
403 #if !defined(WINDOWS) 404 signal (SIGCHLD, SIG_DFL);
409 for (i = 0; i < env_num; i++)
417 snprintf (proxy_shm_id_env_str,
sizeof (proxy_shm_id_env_str),
"%s=%d",
PROXY_SHM_KEY_STR, proxy_shm_id);
418 snprintf (proxy_id_env_str,
sizeof (proxy_id_env_str),
"%s=%d",
PROXY_ID_ENV_STR, proxy_id);
420 putenv (port_env_str);
421 putenv (as_shm_id_env_str);
422 putenv (proxy_id_env_str);
423 putenv (proxy_shm_id_env_str);
426 putenv (access_log_env_str);
429 #if !defined(WINDOWS) 430 snprintf (process_name,
sizeof (process_name) - 1,
"%s_%s_%d", shm_as_p->
broker_name, proxy_exe_name,
436 pid = run_child (proxy_exe_name);
439 if (execle (proxy_exe_name, process_name,
NULL,
environ) < 0)
441 perror (process_name);
459 int shard_index, as_index;
465 if (proxy_info_p->
pid > 0)
467 SHARD_ERR (
"<KILL PROXY> PID:[%d]\n", proxy_info_p->
pid);
470 proxy_info_p->
pid = 0;
475 for (shard_index = 0; shard_index < proxy_info_p->
num_shard_conn; shard_index++)
479 for (as_index = 0; as_index < shard_info_p->
max_appl_server; as_index++)
484 shard_as_inactivate (br_info_p, as_info_p, proxy_info_p->
proxy_id, shard_info_p->
shard_id, as_index);
493 shard_as_activate (
int as_shm_id,
int proxy_id,
int shard_id,
int as_id,
T_SHM_APPL_SERVER * shm_as_p,
499 char port_env_str[PATH_MAX];
500 char appl_name_env_str[64];
501 char appl_server_shm_key_env_str[32];
502 char error_log_env_str[256];
503 char error_log_lock_env_file[128];
505 char proxy_id_env_str[32];
506 char shard_id_env_str[32];
507 char shard_cas_id_env_str[32];
508 char as_id_env_str[32];
512 char port_name[PATH_MAX], dirname[PATH_MAX];
514 #if !defined(WINDOWS) 515 char process_name[128];
525 if (proxy_info_p ==
NULL)
531 if (as_info_p ==
NULL)
541 snprintf (port_name,
sizeof (port_name) - 1,
"%s/%s.%d", dirname, br_info_p->
name, as_id);
542 #if !defined(WINDOWS) 554 as_info_p->pdh_pid = 0;
555 as_info_p->pdh_workset = 0;
556 as_info_p->pdh_pct_cpu = 0;
577 for (i = 0; i < env_num; i++)
585 sprintf (appl_name_env_str,
"%s=%s", APPL_NAME_ENV_STR, appl_name);
587 sprintf (error_log_env_str,
"%s=%s", ERROR_LOG_ENV_STR, shm_as_p->
error_log_file);
589 sprintf (error_log_lock_env_file,
"%s=%s.log.lock", ERROR_LOG_LOCK_FILE_ENV_STR, shm_as_p->
broker_name);
591 snprintf (proxy_id_env_str,
sizeof (proxy_id_env_str),
"%s=%d",
PROXY_ID_ENV_STR, proxy_id);
592 snprintf (shard_id_env_str,
sizeof (shard_id_env_str),
"%s=%d", SHARD_ID_ENV_STR, shard_id);
593 snprintf (shard_cas_id_env_str,
sizeof (shard_cas_id_env_str),
"%s=%d", SHARD_CAS_ID_ENV_STR, as_id);
594 snprintf (as_id_env_str,
sizeof (as_id_env_str),
"%s=%d",
AS_ID_ENV_STR,
597 putenv (port_env_str);
598 putenv (appl_server_shm_key_env_str);
599 putenv (appl_name_env_str);
600 putenv (error_log_env_str);
601 putenv (error_log_lock_env_file);
603 putenv (proxy_id_env_str);
604 putenv (shard_id_env_str);
605 putenv (shard_cas_id_env_str);
606 putenv (as_id_env_str);
608 #if !defined(WINDOWS) 609 snprintf (process_name,
sizeof (process_name) - 1,
"%s_%s_%d_%d_%d", shm_as_p->
broker_name, appl_name,
610 proxy_id + 1, shard_id, as_id + 1);
613 SHARD_ERR (
"<START AS> process_name:[%s|%s]\n", appl_name, process_name);
616 pid = run_child (appl_name);
618 if (execle (appl_name, process_name,
NULL,
environ) < 0)
621 SHARD_ERR (
"<START AS> failed. process_name:[%s|%s]\n", appl_name, process_name);
635 as_info_p->graceful_down_flag = 1;
646 if (as_info_p->
pid > 0)
687 assert (master_shm_id > 0);
693 error = shard_broker_activate (master_shm_id, br_info_p, shm_as_p);
700 for (i = 0; i < shm_proxy_p->
num_proxy; i++)
706 error = shard_proxy_activate (br_info_p->
proxy_shm_id, i, shm_as_p, shm_proxy_p);
723 shm_as_p, shm_proxy_p);
726 SHARD_ERR (
"<AS START FAILED> PROXY:[%d], SHARD:[%d], AS:[%d].\n", proxy_info_p->
proxy_id,
734 for (i = 0; i < shm_proxy_p->
num_proxy; i++)
748 "failed to connect database. [%s]\n\n" 749 "please check your $CUBRID/conf/shard.conf or database status.\n\n" "[%%%s]\n" "%-20s = %s\n" 750 "%-20s = %s\n", br_info_p->
name, br_info_p->
name,
"SHARD_DB_NAME",
762 shard_process_inactivate (br_info_p);
771 shard_broker_inactivate (br_info_p);
#define SLEEP_MILISEC(sec, msec)
char * dirname(const char *path)
char db_name[MAX_DBNAME_LENGTH]
T_SHARD_INFO * shard_shm_find_shard_info(T_PROXY_INFO *proxy_info_p, int shard_id)
char error_log_file[CONF_LOG_FILE_LEN]
T_PROXY_INFO * shard_shm_find_proxy_info(T_SHM_PROXY *proxy_p, int proxy_id)
char port_name[SHM_APPL_SERVER_NAME_MAX]
bool ut_is_appl_server_ready(int pid, char *ready_flag)
static T_BROKER_INFO * br_info_p
#define SHARD_ERR(f, a...)
#define MASTER_SHM_KEY_ENV_STR
static T_SHM_PROXY * shm_proxy_p
#define APPL_SERVER_SHM_KEY_STR
INT64 num_queries_processed
T_SHARD_INFO shard_info[SHARD_INFO_SIZE_LIMIT]
char broker_name[BROKER_NAME_LEN]
T_APPL_SERVER_INFO * shard_shm_get_as_info(T_PROXY_INFO *proxy_info_p, T_SHM_APPL_SERVER *shm_as_p, int shard_id, int as_id)
char db_user[SRV_CON_DBUSER_SIZE]
#define PORT_NUMBER_ENV_STR
char * get_cubrid_file(T_CUBRID_FILE_ID fid, char *buf, size_t len)
#define UTS_STATUS_CON_WAIT
#define CON_STATUS_LOCK_INIT(AS_INFO)
const char * uw_get_error_message(int error_code, int os_error_code)
#define PORT_NAME_ENV_STR
void uw_shm_detach(void *p)
int uw_shm_destroy(int shm_key)
char source_env[CONF_LOG_FILE_LEN]
INT64 num_transactions_processed
static char ** make_env(char *env_file, int *env_num)
#define CON_STATUS_LOCK_DESTROY(AS_INFO)
char admin_err_msg[ADMIN_ERR_MSG_SIZE]
T_PROXY_INFO * proxy_info_p
static void error(const char *msg)
int ut_kill_process(int pid)
#define IS_APPL_SERVER_TYPE_CAS(x)
INT64 num_requests_received
#define PROXY_SHM_KEY_STR
char name[BROKER_NAME_LEN]
char error_log_file[CONF_LOG_FILE_LEN]
#define ADMIN_ERR_MSG_SIZE
char appl_server_name[APPL_SERVER_NAME_MAX_SIZE]
T_APPL_SERVER_INFO as_info[APPL_SERVER_NUM_LIMIT]
char port_name[SHM_PROXY_NAME_MAX]
#define APPL_SERVER_NAME_MAX_SIZE
char source_env[CONF_LOG_FILE_LEN]
T_SHM_APPL_SERVER * shm_as_p
void * uw_shm_open(int shm_key, int which_shm, T_SHM_MODE shm_mode)
T_SHARD_CONN_INFO shard_conn_info[SHARD_INFO_SIZE_LIMIT]
int uw_sem_destroy(sem_t *sem)
static void free_env(char **env, int env_num)