File shard_admin_pub.c¶
File List > broker > shard_admin_pub.c
Go to the documentation of this file
/*
* Copyright 2008 Search Solution Corporation
* Copyright 2016 CUBRID Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
/*
* shard_admin_pub.c -
*/
#if defined(UNDEFINED)
#ident "$Id$"
#if defined(WINDOWS)
#include <winsock2.h>
#include <windows.h>
#endif /* WINDOWS */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <signal.h>
#include <time.h>
#include <errno.h>
#include <assert.h>
#if defined(WINDOWS)
#include <direct.h>
#include <process.h>
#include <io.h>
#else /* WINDOWS */
#include <unistd.h>
#include <sys/time.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#endif /* WINDOWS */
#include "porting.h"
#include "cas_common.h"
#include "broker_shm.h"
#include "broker_util.h"
#include "broker_env_def.h"
#include "broker_process_size.h"
#include "broker_admin_pub.h"
#include "broker_filename.h"
#include "broker_error.h"
#include "cas_sql_log2.h"
#include "shard_proxy_common.h"
#include "shard_shm.h"
#include "shard_metadata.h"
#include "shard_admin_pub.h"
#define ADMIN_ERR_MSG_SIZE BROKER_PATH_MAX * 2
char admin_err_msg[ADMIN_ERR_MSG_SIZE];
#if !defined(WINDOWS) && !defined(LINUX)
extern char **environ;
#endif
static int shard_proxy_activate (int proxy_shm_id, int proxy_id, T_SHM_APPL_SERVER * shm_as_p,
T_SHM_PROXY * shm_proxy_p);
static void shard_proxy_inactivate (T_BROKER_INFO * br_info_p, T_PROXY_INFO * proxy_info_p,
T_SHM_APPL_SERVER * shm_as_p);
int
shard_broker_activate (int master_shm_id, T_BROKER_INFO * br_info_p, T_SHM_APPL_SERVER * shm_as_p)
{
int pid, i, env_num;
int broker_check_loop_count = 30;
char err_flag = FALSE;
char **env = NULL;
char port_env_str[PATH_MAX];
char appl_name_env_str[32];
char master_shm_key_env_str[32];
char appl_server_shm_key_env_str[32];
char proxy_shm_key_env_str[32];
char error_log_lock_env_file[128];
const char *broker_exe_name;
char dirname[PATH_MAX];
/* "shard/shard_broker_admin_pub.c" 2787 */
br_info_p->err_code = UW_ER_NO_ERROR + 1;
br_info_p->os_err_code = 0;
br_info_p->num_busy_count = 0;
br_info_p->reject_client_count = 0;
/* SHARD TODO : move this code to shard_shm.[ch] */
get_cubrid_file (FID_SOCK_DIR, dirname, PATH_MAX);
snprintf (shm_as_p->port_name, sizeof (shm_as_p->port_name) - 1, "%s/%s.B", dirname, br_info_p->name);
#if !defined(WINDOWS)
unlink (shm_as_p->port_name);
#endif /* !WINDOWS */
shm_as_p->monitor_hang_flag = br_info_p->monitor_hang_flag;
env = make_env (br_info_p->source_env, &env_num);
#if !defined(WINDOWS)
signal (SIGCHLD, SIG_IGN);
#endif
#if !defined(WINDOWS)
if ((pid = fork ()) < 0)
{
strcpy (admin_err_msg, "fork error");
free_env (env, env_num);
return -1;
}
#endif /* WINDOWS */
br_info_p->ready_to_service = false;
#if !defined(WINDOWS)
if (pid == 0)
{
signal (SIGCHLD, SIG_DFL);
/* SHARD TODO : not implemented yet */
#if 0
#if defined(V3_ADMIN_D)
if (admin_clt_sock_fd > 0)
CLOSE_SOCKET (admin_clt_sock_fd);
if (admin_srv_sock_fd > 0)
CLOSE_SOCKET (admin_srv_sock_fd);
#endif /* V3_ADMIN_D */
#endif
#endif /* WINDOWS */
if (env != NULL)
{
for (i = 0; i < env_num; i++)
putenv (env[i]);
}
sprintf (port_env_str, "%s=%d", PORT_NUMBER_ENV_STR, br_info_p->port);
sprintf (master_shm_key_env_str, "%s=%d", MASTER_SHM_KEY_ENV_STR, master_shm_id);
sprintf (appl_server_shm_key_env_str, "%s=%d", APPL_SERVER_SHM_KEY_STR, br_info_p->appl_server_shm_id);
sprintf (proxy_shm_key_env_str, "%s=%d", PROXY_SHM_KEY_STR, br_info_p->proxy_shm_id);
putenv (port_env_str);
putenv (master_shm_key_env_str);
putenv (appl_server_shm_key_env_str);
putenv (proxy_shm_key_env_str);
if (IS_APPL_SERVER_TYPE_CAS (br_info_p->appl_server))
{
broker_exe_name = NAME_CAS_BROKER;
}
else
{
broker_exe_name = NAME_BROKER;
}
#if defined(WINDOWS)
if (IS_APPL_SERVER_TYPE_CAS (br_info_p->appl_server) && br_info_p->appl_server_port < 0)
{
broker_exe_name = NAME_CAS_BROKER2;
}
#endif /* WINDOWS */
sprintf (appl_name_env_str, "%s=%s", APPL_NAME_ENV_STR, broker_exe_name);
putenv (appl_name_env_str);
sprintf (error_log_lock_env_file, "%s=%s.log.lock", ERROR_LOG_LOCK_FILE_ENV_STR, br_info_p->name);
putenv (error_log_lock_env_file);
#if defined(WINDOWS)
pid = run_child (broker_exe_name);
#else /* WINDOWS */
if (execle (broker_exe_name, broker_exe_name, NULL, environ) < 0)
{
perror (broker_exe_name);
exit (0);
}
exit (0);
}
#endif /* WINDOWS */
SLEEP_MILISEC (0, 200);
br_info_p->pid = pid;
br_info_p->ready_to_service = true;
br_info_p->service_flag = ON;
for (i = 0; i < broker_check_loop_count; i++)
{
if (br_info_p->err_code > 0)
{
SLEEP_MILISEC (0, 100);
}
else
{
if (br_info_p->err_code < 0)
{
sprintf (admin_err_msg, "%s: %s", br_info_p->name,
uw_get_error_message (br_info_p->err_code, br_info_p->os_err_code));
err_flag = TRUE;
}
break;
}
}
if (i == broker_check_loop_count)
{
sprintf (admin_err_msg, "%s: unknown error", br_info_p->name);
err_flag = TRUE;
}
if (err_flag)
{
free_env (env, env_num);
return -1;
}
free_env (env, env_num);
return 0;
}
void
shard_broker_inactivate (T_BROKER_INFO * br_info_p)
{
int proxy_index;
T_SHM_APPL_SERVER *shm_as_p = NULL;
T_SHM_PROXY *shm_proxy_p = NULL;
T_PROXY_INFO *proxy_info_p = NULL;
time_t cur_time = time (NULL);
struct tm ct;
char cmd_buf[BUFSIZ];
#if defined(WINDOWS)
char sem_name[BROKER_NAME_LEN];
#endif
if (localtime_r (&cur_time, &ct) == NULL)
{
return;
}
ct.tm_year += 1900;
if (br_info_p->pid)
{
SHARD_ERR ("<KILL BROKER> PID:[%d]\n", br_info_p->pid);
ut_kill_process (br_info_p->pid, br_info_p->name, PROXY_INVALID_ID, SHARD_INVALID_ID, CAS_INVALID_ID);
SLEEP_MILISEC (1, 0);
}
shm_as_p = (T_SHM_APPL_SERVER *) uw_shm_open (br_info_p->appl_server_shm_id, SHM_APPL_SERVER, SHM_MODE_ADMIN);
if (shm_as_p == NULL)
{
SHARD_ERR ("failed to uw_shm_open. (shmid:%08x).\n", br_info_p->appl_server_shm_id);
goto end;
}
shm_proxy_p = (T_SHM_PROXY *) uw_shm_open (br_info_p->proxy_shm_id, SHM_PROXY, SHM_MODE_ADMIN);
if (shm_proxy_p == NULL)
{
SHARD_ERR ("failed to uw_shm_open. (shmid:%08x).\n", br_info_p->proxy_shm_id);
goto end;
}
for (proxy_index = 0; proxy_index < shm_proxy_p->num_proxy; proxy_index++)
{
proxy_info_p = shard_shm_find_proxy_info (shm_proxy_p, proxy_index);
shard_proxy_inactivate (br_info_p, proxy_info_p, shm_as_p);
}
if (br_info_p->log_backup == ON)
{
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,
ct.tm_hour, ct.tm_min);
rename (br_info_p->error_log_file, cmd_buf);
}
else
{
unlink (br_info_p->error_log_file);
}
end:
br_info_p->appl_server_num = br_info_p->appl_server_min_num;
br_info_p->num_busy_count = 0;
br_info_p->service_flag = OFF;
#if defined (WINDOWS)
MAKE_ACL_SEM_NAME (sem_name, br_info_p->name);
uw_sem_destroy (sem_name);
#else
uw_sem_destroy (&shm_as_p->acl_sem);
#endif
if (shm_as_p)
{
uw_shm_detach (shm_as_p);
}
if (shm_proxy_p)
{
uw_shm_detach (shm_proxy_p);
}
uw_shm_destroy (br_info_p->appl_server_shm_id);
uw_shm_destroy (br_info_p->proxy_shm_id);
return;
}
static int
shard_proxy_activate (int proxy_shm_id, int proxy_id, T_SHM_APPL_SERVER * shm_as_p, T_SHM_PROXY * shm_proxy_p)
{
int pid = 0, i, env_num;
int fd_cnt;
char **env = NULL;
const char *proxy_exe_name = NAME_PROXY;
char port_env_str[PATH_MAX];
#if 0
char access_log_env_str[256];
#endif
char as_shm_id_env_str[32];
char proxy_shm_id_env_str[32];
char proxy_id_env_str[32];
char dirname[PATH_MAX];
#if !defined (WINDOWS)
char process_name[128];
#endif
T_PROXY_INFO *proxy_info_p = NULL;
T_SHARD_INFO *shard_info_p = NULL;
assert (proxy_id >= 0);
assert (shm_as_p);
assert (shm_proxy_p);
proxy_info_p = shard_shm_find_proxy_info (shm_proxy_p, proxy_id);
if (proxy_info_p == NULL)
{
return -1;
}
proxy_info_p->cur_client = 0;
shard_info_p = shard_shm_get_first_shard_info (proxy_info_p);
if (shard_info_p == NULL)
{
return -1;
}
/* max_context should be GE max_client */
if (proxy_info_p->max_context < proxy_info_p->max_client)
{
sprintf (admin_err_msg,
"max_client %d is greater than %d [%s]\n\n" "please check your $CUBRID/conf/shard.conf\n\n" "[%%%s]\n"
"%-20s = %d\n" "%-20s = %d * %d\n", proxy_info_p->max_client, proxy_info_p->max_context,
shm_as_p->broker_name, shm_as_p->broker_name, "MAX_CLIENT", proxy_info_p->max_client,
"MAX_NUM_APPL_SERVER", shard_info_p->max_appl_server, proxy_info_p->max_shard);
return -1;
}
get_cubrid_file (FID_SOCK_DIR, dirname, PATH_MAX);
snprintf (proxy_info_p->port_name, sizeof (proxy_info_p->port_name) - 1, "%s/%s.P%d", dirname, shm_as_p->broker_name,
proxy_id + 1);
#if !defined(WINDOWS)
unlink (proxy_info_p->port_name);
#endif /* !WINDOWS */
env = make_env (shm_as_p->source_env, &env_num);
#if !defined(WINDOWS)
if ((pid = fork ()) < 0)
{
strcpy (admin_err_msg, "fork error");
/* SHARD TODO : will delete */
#if 0
uw_shm_detach (shm_as_p);
uw_shm_destroy (br_info_p->appl_server_shm_id);
#endif
free_env (env, env_num);
return -1;
}
#endif /* WINDOWS */
if (pid == 0)
{
#if !defined(WINDOWS)
signal (SIGCHLD, SIG_DFL);
#endif /* !WINDOWS */
if (env != NULL)
{
for (i = 0; i < env_num; i++)
{
putenv (env[i]);
}
}
sprintf (port_env_str, "%s=%s", PORT_NAME_ENV_STR, shm_as_p->port_name);
snprintf (as_shm_id_env_str, sizeof (as_shm_id_env_str), "%s=%d", APPL_SERVER_SHM_KEY_STR,
proxy_info_p->appl_server_shm_id);
snprintf (proxy_shm_id_env_str, sizeof (proxy_shm_id_env_str), "%s=%d", PROXY_SHM_KEY_STR, proxy_shm_id);
snprintf (proxy_id_env_str, sizeof (proxy_id_env_str), "%s=%d", PROXY_ID_ENV_STR, proxy_id);
putenv (port_env_str);
putenv (as_shm_id_env_str);
putenv (proxy_id_env_str);
putenv (proxy_shm_id_env_str);
/* SHARD TODO : will delete */
#if 0
putenv (access_log_env_str);
#endif
#if !defined(WINDOWS)
snprintf (process_name, sizeof (process_name) - 1, "%s_%s_%d", shm_as_p->broker_name, proxy_exe_name,
proxy_id + 1);
#endif /* !WINDOWS */
#if defined(WINDOWS)
pid = run_child (proxy_exe_name);
}
#else /* WINDOWS */
if (execle (proxy_exe_name, process_name, NULL, environ) < 0)
{
perror (process_name);
exit (0);
}
exit (0);
}
#endif /* WINDOWS */
SLEEP_MILISEC (0, 200);
proxy_info_p->pid = pid;
free_env (env, env_num);
return 0;
}
static void
shard_proxy_inactivate (T_BROKER_INFO * br_info_p, T_PROXY_INFO * proxy_info_p, T_SHM_APPL_SERVER * shm_as_p)
{
int shard_index, as_index;
T_SHARD_INFO *shard_info_p;
T_APPL_SERVER_INFO *as_info_p;
assert (proxy_info_p);
if (proxy_info_p->pid > 0)
{
SHARD_ERR ("<KILL PROXY> PID:[%d]\n", proxy_info_p->pid);
ut_kill_process (proxy_info_p->pid, br_info_p->name, proxy_info_p->proxy_id, SHARD_INVALID_ID, CAS_INVALID_ID);
}
proxy_info_p->pid = 0;
proxy_info_p->cur_client = 0;
/* SHARD TODO : backup or remove access log file */
for (shard_index = 0; shard_index < proxy_info_p->num_shard_conn; shard_index++)
{
shard_info_p = shard_shm_find_shard_info (proxy_info_p, shard_index);
for (as_index = 0; as_index < shard_info_p->max_appl_server; as_index++)
{
as_info_p = &(shm_as_p->as_info[as_index + shard_info_p->as_info_index_base]);
if (as_info_p->pid)
{
shard_as_inactivate (br_info_p, as_info_p, proxy_info_p->proxy_id, shard_info_p->shard_id, as_index);
}
}
}
return;
}
int
shard_as_activate (int as_shm_id, int proxy_id, int shard_id, int as_id, T_SHM_APPL_SERVER * shm_as_p,
T_SHM_PROXY * shm_proxy_p)
{
/* as_activate() "shard/shard_broker_admin_pub.c" 2790 */
int pid, i, env_num;
char **env = NULL;
char port_env_str[PATH_MAX];
char appl_name_env_str[64];
char appl_server_shm_key_env_str[32];
char error_log_env_str[256];
char error_log_lock_env_file[128];
char proxy_id_env_str[32];
char shard_id_env_str[32];
char shard_cas_id_env_str[32];
char as_id_env_str[32];
char appl_name[APPL_SERVER_NAME_MAX_SIZE];
#if 0
char port_name[PATH_MAX], dirname[PATH_MAX];
#endif
#if !defined(WINDOWS)
char process_name[128];
#endif /* !WINDOWS */
T_PROXY_INFO *proxy_info_p = NULL;
T_APPL_SERVER_INFO *as_info_p = NULL;
assert (shm_as_p);
assert (shm_proxy_p);
proxy_info_p = shard_shm_find_proxy_info (shm_proxy_p, proxy_id);
if (proxy_info_p == NULL)
{
return -1;
}
as_info_p = shard_shm_get_as_info (proxy_info_p, shm_as_p, shard_id, as_id);
if (as_info_p == NULL)
{
return -1;
}
env = make_env (shm_as_p->source_env, &env_num);
/* SHARD TODO : will delete, not used */
#if 0
get_cubrid_file (FID_SOCK_DIR, dirname);
snprintf (port_name, sizeof (port_name) - 1, "%s/%s.%d", dirname, br_info_p->name, as_id);
#if !defined(WINDOWS)
unlink (port_name);
#endif /* !WINDOWS */
#endif
as_info_p->num_request = 0;
as_info_p->uts_status = UTS_STATUS_START;
as_info_p->reset_flag = FALSE;
as_info_p->cur_sql_log_mode = shm_as_p->sql_log_mode;
as_info_p->cur_slow_log_mode = shm_as_p->slow_log_mode;
#if defined(WINDOWS)
as_info_p->pdh_pid = 0;
as_info_p->pdh_workset = 0;
as_info_p->pdh_pct_cpu = 0;
#endif /* WINDOWS */
as_info_p->service_ready_flag = FALSE;
CON_STATUS_LOCK_INIT (as_info_p);
#if defined(WINDOWS)
pid = 0;
#else /* WINDOWS */
pid = fork ();
if (pid < 0)
{
perror ("fork");
}
#endif /* !WINDOWS */
if (pid == 0)
{
if (env != NULL)
{
for (i = 0; i < env_num; i++)
putenv (env[i]);
}
strcpy (appl_name, shm_as_p->appl_server_name);
sprintf (port_env_str, "%s=%s", PORT_NAME_ENV_STR, proxy_info_p->port_name);
sprintf (appl_server_shm_key_env_str, "%s=%d", APPL_SERVER_SHM_KEY_STR, as_shm_id);
sprintf (appl_name_env_str, "%s=%s", APPL_NAME_ENV_STR, appl_name);
sprintf (error_log_env_str, "%s=%s", ERROR_LOG_ENV_STR, shm_as_p->error_log_file);
sprintf (error_log_lock_env_file, "%s=%s.log.lock", ERROR_LOG_LOCK_FILE_ENV_STR, shm_as_p->broker_name);
snprintf (proxy_id_env_str, sizeof (proxy_id_env_str), "%s=%d", PROXY_ID_ENV_STR, proxy_id);
snprintf (shard_id_env_str, sizeof (shard_id_env_str), "%s=%d", SHARD_ID_ENV_STR, shard_id);
snprintf (shard_cas_id_env_str, sizeof (shard_cas_id_env_str), "%s=%d", SHARD_CAS_ID_ENV_STR, as_id);
snprintf (as_id_env_str, sizeof (as_id_env_str), "%s=%d", AS_ID_ENV_STR,
proxy_info_p->shard_info[shard_id].as_info_index_base + as_id);
putenv (port_env_str);
putenv (appl_server_shm_key_env_str);
putenv (appl_name_env_str);
putenv (error_log_env_str);
putenv (error_log_lock_env_file);
putenv (proxy_id_env_str);
putenv (shard_id_env_str);
putenv (shard_cas_id_env_str);
putenv (as_id_env_str);
#if !defined(WINDOWS)
snprintf (process_name, sizeof (process_name) - 1, "%s_%s_%d_%d_%d", shm_as_p->broker_name, appl_name,
proxy_id + 1, shard_id, as_id + 1);
#endif /* !WINDOWS */
SHARD_ERR ("<START AS> process_name:[%s|%s]\n", appl_name, process_name);
#if defined(WINDOWS)
pid = run_child (appl_name);
#else /* WINDOWS */
if (execle (appl_name, process_name, NULL, environ) < 0)
{
perror (appl_name);
SHARD_ERR ("<START AS> failed. process_name:[%s|%s]\n", appl_name, process_name);
}
exit (0);
#endif /* WINDOWS */
}
as_info_p->pid = pid;
as_info_p->last_access_time = time (NULL);
as_info_p->psize_time = time (NULL);
as_info_p->psize = getsize (as_info_p->pid);
as_info_p->uts_status = UTS_STATUS_CON_WAIT;
as_info_p->service_flag = SERVICE_ON;
if (as_id >= proxy_info_p->shard_info[shard_id].min_appl_server)
{
as_info_p->graceful_down_flag = 1;
}
free_env (env, env_num);
return 0;
}
void
shard_as_inactivate (T_BROKER_INFO * br_info_p, T_APPL_SERVER_INFO * as_info_p, int proxy_index, int shard_index,
int as_index)
{
if (as_info_p->pid > 0)
{
SHARD_ERR ("<KILL AS> PID:[%d]\n", as_info_p->pid);
ut_kill_process (as_info_p->pid, br_info_p->name, proxy_index, shard_index, as_index);
}
as_info_p->pid = 0;
as_info_p->last_access_time = time (0);
as_info_p->service_flag = SERVICE_OFF;
as_info_p->service_ready_flag = FALSE;
/* initialize statistics */
as_info_p->num_request = 0;
as_info_p->num_requests_received = 0;
as_info_p->num_transactions_processed = 0;
as_info_p->num_queries_processed = 0;
as_info_p->num_long_queries = 0;
as_info_p->num_error_queries = 0;
/* initialize con / uts status */
as_info_p->uts_status = UTS_STATUS_IDLE;
as_info_p->con_status = CON_STATUS_CLOSE;
CON_STATUS_LOCK_DESTROY (as_info_p);
/*
* shard_cas does not have unix-domain socket and pid lock file.
* so, we need not delete socket and lock file.
*/
return;
}
int
shard_process_activate (int master_shm_id, T_BROKER_INFO * br_info_p, T_SHM_APPL_SERVER * shm_as_p,
T_SHM_PROXY * shm_proxy_p)
{
int i, j, k, error;
T_PROXY_INFO *proxy_info_p = NULL;
T_SHARD_INFO *shard_info_p = NULL;
T_APPL_SERVER_INFO *as_info_p = NULL;
assert (master_shm_id > 0);
assert (br_info_p);
assert (shm_as_p);
assert (shm_proxy_p);
/* start broker */
error = shard_broker_activate (master_shm_id, br_info_p, shm_as_p);
if (error)
{
goto error_return;
}
/* start proxy */
for (i = 0; i < shm_proxy_p->num_proxy; i++)
{
proxy_info_p = shard_shm_find_proxy_info (shm_proxy_p, i);
proxy_info_p->cur_proxy_log_mode = br_info_p->proxy_log_mode;
error = shard_proxy_activate (br_info_p->proxy_shm_id, i, shm_as_p, shm_proxy_p);
if (error)
{
SHARD_ERR ("<PROXY START FAILED> PROXY:[%d].\n", proxy_info_p->proxy_id);
goto error_return;
}
for (j = 0; j < proxy_info_p->num_shard_conn; j++)
{
shard_info_p = shard_shm_find_shard_info (proxy_info_p, j);
/* start shard (c)as */
/* SHARD TODO : min_appl_server? num_appl_server? */
for (k = 0; k < shard_info_p->num_appl_server; k++)
{
error = shard_as_activate (br_info_p->appl_server_shm_id, proxy_info_p->proxy_id /* proxy_id */ ,
shard_info_p->shard_id /* shard_id */ ,
k /* as_index */ ,
shm_as_p, shm_proxy_p);
if (error)
{
SHARD_ERR ("<AS START FAILED> PROXY:[%d], SHARD:[%d], AS:[%d].\n", proxy_info_p->proxy_id,
shard_info_p->shard_id, k);
goto error_return;
}
}
}
}
for (i = 0; i < shm_proxy_p->num_proxy; i++)
{
proxy_info_p = shard_shm_find_proxy_info (shm_proxy_p, i);
for (j = 0; j < proxy_info_p->num_shard_conn; j++)
{
shard_info_p = shard_shm_find_shard_info (proxy_info_p, j);
for (k = 0; k < shard_info_p->num_appl_server; k++)
{
as_info_p = &shm_as_p->as_info[k + shard_info_p->as_info_index_base];
if (ut_is_appl_server_ready (as_info_p->pid, &as_info_p->service_ready_flag) == false)
{
sprintf (admin_err_msg,
"failed to connect database. [%s]\n\n"
"please check your $CUBRID/conf/shard.conf or database status.\n\n" "[%%%s]\n" "%-20s = %s\n"
"%-20s = %s\n", br_info_p->name, br_info_p->name, "SHARD_DB_NAME",
shm_as_p->shard_conn_info[j].db_name, "SHARD_DB_USER", shm_as_p->shard_conn_info[j].db_user);
goto error_return;
}
}
}
}
return 0;
error_return:
shard_process_inactivate (br_info_p);
return -1;
}
void
shard_process_inactivate (T_BROKER_INFO * br_info_p)
{
assert (br_info_p);
shard_broker_inactivate (br_info_p);
return;
}
#endif /* UNDEFINED */