CUBRID Engine  latest
shard_admin_pub.c
Go to the documentation of this file.
1 /*
2  * Copyright 2008 Search Solution Corporation
3  * Copyright 2016 CUBRID Corporation
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  */
18 
19 
20 /*
21  * shard_admin_pub.c -
22  */
23 
24 #if defined(UNDEFINED)
25 #ident "$Id$"
26 
27 #if defined(WINDOWS)
28 #include <winsock2.h>
29 #include <windows.h>
30 #endif /* WINDOWS */
31 
32 #include <stdio.h>
33 #include <stdlib.h>
34 #include <string.h>
35 #include <sys/types.h>
36 #include <sys/stat.h>
37 #include <signal.h>
38 #include <time.h>
39 #include <errno.h>
40 #include <assert.h>
41 
42 #if defined(WINDOWS)
43 #include <direct.h>
44 #include <process.h>
45 #include <io.h>
46 #else /* WINDOWS */
47 #include <unistd.h>
48 #include <sys/time.h>
49 #include <sys/socket.h>
50 #include <netinet/in.h>
51 #include <arpa/inet.h>
52 #include <netdb.h>
53 #endif /* WINDOWS */
54 
55 #include "porting.h"
56 #include "cas_common.h"
57 #include "broker_shm.h"
58 #include "broker_util.h"
59 #include "broker_env_def.h"
60 #include "broker_process_size.h"
61 #include "broker_admin_pub.h"
62 #include "broker_filename.h"
63 #include "broker_error.h"
64 #include "cas_sql_log2.h"
65 #include "shard_proxy_common.h"
66 #include "shard_shm.h"
67 #include "shard_metadata.h"
68 #include "shard_admin_pub.h"
69 
70 #define ADMIN_ERR_MSG_SIZE BROKER_PATH_MAX * 2
71 
73 
74 #if !defined(WINDOWS) && !defined(LINUX)
75 extern char **environ;
76 #endif
77 
78 static int shard_proxy_activate (int proxy_shm_id, int proxy_id, T_SHM_APPL_SERVER * shm_as_p,
80 static void shard_proxy_inactivate (T_BROKER_INFO * br_info_p, T_PROXY_INFO * proxy_info_p,
82 
83 int
84 shard_broker_activate (int master_shm_id, T_BROKER_INFO * br_info_p, T_SHM_APPL_SERVER * shm_as_p)
85 {
86  int pid, i, env_num;
87  int broker_check_loop_count = 30;
88  char err_flag = FALSE;
89  char **env = NULL;
90 
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;
98 
99  char dirname[PATH_MAX];
100 
101  /* "shard/shard_broker_admin_pub.c" 2787 */
102  br_info_p->err_code = UW_ER_NO_ERROR + 1;
103  br_info_p->os_err_code = 0;
104  br_info_p->num_busy_count = 0;
105  br_info_p->reject_client_count = 0;
106 
107  /* SHARD TODO : move this code to shard_shm.[ch] */
108  get_cubrid_file (FID_SOCK_DIR, dirname, PATH_MAX);
109  snprintf (shm_as_p->port_name, sizeof (shm_as_p->port_name) - 1, "%s/%s.B", dirname, br_info_p->name);
110 #if !defined(WINDOWS)
111  unlink (shm_as_p->port_name);
112 #endif /* !WINDOWS */
113  shm_as_p->monitor_hang_flag = br_info_p->monitor_hang_flag;
114 
115  env = make_env (br_info_p->source_env, &env_num);
116 
117 #if !defined(WINDOWS)
118  signal (SIGCHLD, SIG_IGN);
119 #endif
120 
121 #if !defined(WINDOWS)
122  if ((pid = fork ()) < 0)
123  {
124  strcpy (admin_err_msg, "fork error");
125 
126  free_env (env, env_num);
127  return -1;
128  }
129 #endif /* WINDOWS */
130 
131  br_info_p->ready_to_service = false;
132 #if !defined(WINDOWS)
133  if (pid == 0)
134  {
135  signal (SIGCHLD, SIG_DFL);
136 
137  /* SHARD TODO : not implemented yet */
138 #if 0
139 #if defined(V3_ADMIN_D)
140  if (admin_clt_sock_fd > 0)
141  CLOSE_SOCKET (admin_clt_sock_fd);
142  if (admin_srv_sock_fd > 0)
143  CLOSE_SOCKET (admin_srv_sock_fd);
144 #endif /* V3_ADMIN_D */
145 #endif
146 #endif /* WINDOWS */
147 
148  if (env != NULL)
149  {
150  for (i = 0; i < env_num; i++)
151  putenv (env[i]);
152  }
153 
154  sprintf (port_env_str, "%s=%d", PORT_NUMBER_ENV_STR, br_info_p->port);
155  sprintf (master_shm_key_env_str, "%s=%d", MASTER_SHM_KEY_ENV_STR, master_shm_id);
156  sprintf (appl_server_shm_key_env_str, "%s=%d", APPL_SERVER_SHM_KEY_STR, br_info_p->appl_server_shm_id);
157  sprintf (proxy_shm_key_env_str, "%s=%d", PROXY_SHM_KEY_STR, br_info_p->proxy_shm_id);
158 
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);
163 
164  if (IS_APPL_SERVER_TYPE_CAS (br_info_p->appl_server))
165  {
166  broker_exe_name = NAME_CAS_BROKER;
167  }
168  else
169  {
170  broker_exe_name = NAME_BROKER;
171  }
172 
173 #if defined(WINDOWS)
174  if (IS_APPL_SERVER_TYPE_CAS (br_info_p->appl_server) && br_info_p->appl_server_port < 0)
175  {
176  broker_exe_name = NAME_CAS_BROKER2;
177  }
178 #endif /* WINDOWS */
179 
180  sprintf (appl_name_env_str, "%s=%s", APPL_NAME_ENV_STR, broker_exe_name);
181  putenv (appl_name_env_str);
182 
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);
185 
186 #if defined(WINDOWS)
187  pid = run_child (broker_exe_name);
188 #else /* WINDOWS */
189  if (execle (broker_exe_name, broker_exe_name, NULL, environ) < 0)
190  {
191  perror (broker_exe_name);
192  exit (0);
193  }
194  exit (0);
195  }
196 #endif /* WINDOWS */
197 
198  SLEEP_MILISEC (0, 200);
199 
200  br_info_p->pid = pid;
201 
202  br_info_p->ready_to_service = true;
203  br_info_p->service_flag = ON;
204 
205  for (i = 0; i < broker_check_loop_count; i++)
206  {
207  if (br_info_p->err_code > 0)
208  {
209  SLEEP_MILISEC (0, 100);
210  }
211  else
212  {
213  if (br_info_p->err_code < 0)
214  {
215  sprintf (admin_err_msg, "%s: %s", br_info_p->name,
216  uw_get_error_message (br_info_p->err_code, br_info_p->os_err_code));
217  err_flag = TRUE;
218  }
219  break;
220  }
221  }
222 
223  if (i == broker_check_loop_count)
224  {
225  sprintf (admin_err_msg, "%s: unknown error", br_info_p->name);
226  err_flag = TRUE;
227  }
228 
229  if (err_flag)
230  {
231  free_env (env, env_num);
232  return -1;
233  }
234 
235  free_env (env, env_num);
236  return 0;
237 }
238 
239 void
240 shard_broker_inactivate (T_BROKER_INFO * br_info_p)
241 {
242  int proxy_index;
243  T_SHM_APPL_SERVER *shm_as_p = NULL;
246  time_t cur_time = time (NULL);
247  struct tm ct;
248  char cmd_buf[BUFSIZ];
249 #if defined(WINDOWS)
250  char sem_name[BROKER_NAME_LEN];
251 #endif
252 
253  if (localtime_r (&cur_time, &ct) == NULL)
254  {
255  return;
256  }
257  ct.tm_year += 1900;
258 
259  if (br_info_p->pid)
260  {
261  SHARD_ERR ("<KILL BROKER> PID:[%d]\n", br_info_p->pid);
263  SLEEP_MILISEC (1, 0);
264  }
265 
267  if (shm_as_p == NULL)
268  {
269  SHARD_ERR ("failed to uw_shm_open. (shmid:%08x).\n", br_info_p->appl_server_shm_id);
270  goto end;
271  }
272 
273  shm_proxy_p = (T_SHM_PROXY *) uw_shm_open (br_info_p->proxy_shm_id, SHM_PROXY, SHM_MODE_ADMIN);
274  if (shm_proxy_p == NULL)
275  {
276  SHARD_ERR ("failed to uw_shm_open. (shmid:%08x).\n", br_info_p->proxy_shm_id);
277  goto end;
278  }
279 
280  for (proxy_index = 0; proxy_index < shm_proxy_p->num_proxy; proxy_index++)
281  {
282  proxy_info_p = shard_shm_find_proxy_info (shm_proxy_p, proxy_index);
283 
284  shard_proxy_inactivate (br_info_p, proxy_info_p, shm_as_p);
285  }
286 
287  if (br_info_p->log_backup == ON)
288  {
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);
291  rename (br_info_p->error_log_file, cmd_buf);
292  }
293  else
294  {
295  unlink (br_info_p->error_log_file);
296  }
297 
298 end:
299  br_info_p->appl_server_num = br_info_p->appl_server_min_num;
300  br_info_p->num_busy_count = 0;
301  br_info_p->service_flag = OFF;
302 
303 #if defined (WINDOWS)
304  MAKE_ACL_SEM_NAME (sem_name, br_info_p->name);
305  uw_sem_destroy (sem_name);
306 #else
307  uw_sem_destroy (&shm_as_p->acl_sem);
308 #endif
309 
310  if (shm_as_p)
311  {
312  uw_shm_detach (shm_as_p);
313  }
314  if (shm_proxy_p)
315  {
316  uw_shm_detach (shm_proxy_p);
317  }
318 
319  uw_shm_destroy (br_info_p->appl_server_shm_id);
320  uw_shm_destroy (br_info_p->proxy_shm_id);
321 
322  return;
323 }
324 
325 static int
326 shard_proxy_activate (int proxy_shm_id, int proxy_id, T_SHM_APPL_SERVER * shm_as_p, T_SHM_PROXY * shm_proxy_p)
327 {
328  int pid = 0, i, env_num;
329  int fd_cnt;
330  char **env = NULL;
331  const char *proxy_exe_name = NAME_PROXY;
332  char port_env_str[PATH_MAX];
333 #if 0
334  char access_log_env_str[256];
335 #endif
336  char as_shm_id_env_str[32];
337  char proxy_shm_id_env_str[32];
338  char proxy_id_env_str[32];
339 
340  char dirname[PATH_MAX];
341 #if !defined (WINDOWS)
342  char process_name[128];
343 #endif
344 
345  T_PROXY_INFO *proxy_info_p = NULL;
346  T_SHARD_INFO *shard_info_p = NULL;
347 
348  assert (proxy_id >= 0);
349  assert (shm_as_p);
350  assert (shm_proxy_p);
351 
352  proxy_info_p = shard_shm_find_proxy_info (shm_proxy_p, proxy_id);
353  if (proxy_info_p == NULL)
354  {
355  return -1;
356  }
357 
358  proxy_info_p->cur_client = 0;
359 
360  shard_info_p = shard_shm_get_first_shard_info (proxy_info_p);
361  if (shard_info_p == NULL)
362  {
363  return -1;
364  }
365 
366  /* max_context should be GE max_client */
367  if (proxy_info_p->max_context < proxy_info_p->max_client)
368  {
369  sprintf (admin_err_msg,
370  "max_client %d is greater than %d [%s]\n\n" "please check your $CUBRID/conf/shard.conf\n\n" "[%%%s]\n"
371  "%-20s = %d\n" "%-20s = %d * %d\n", proxy_info_p->max_client, proxy_info_p->max_context,
372  shm_as_p->broker_name, shm_as_p->broker_name, "MAX_CLIENT", proxy_info_p->max_client,
373  "MAX_NUM_APPL_SERVER", shard_info_p->max_appl_server, proxy_info_p->max_shard);
374  return -1;
375  }
376 
377  get_cubrid_file (FID_SOCK_DIR, dirname, PATH_MAX);
378  snprintf (proxy_info_p->port_name, sizeof (proxy_info_p->port_name) - 1, "%s/%s.P%d", dirname, shm_as_p->broker_name,
379  proxy_id + 1);
380 #if !defined(WINDOWS)
381  unlink (proxy_info_p->port_name);
382 #endif /* !WINDOWS */
383 
384  env = make_env (shm_as_p->source_env, &env_num);
385 
386 #if !defined(WINDOWS)
387  if ((pid = fork ()) < 0)
388  {
389  strcpy (admin_err_msg, "fork error");
390 
391  /* SHARD TODO : will delete */
392 #if 0
393  uw_shm_detach (shm_as_p);
394  uw_shm_destroy (br_info_p->appl_server_shm_id);
395 #endif
396  free_env (env, env_num);
397  return -1;
398  }
399 #endif /* WINDOWS */
400 
401  if (pid == 0)
402  {
403 #if !defined(WINDOWS)
404  signal (SIGCHLD, SIG_DFL);
405 #endif /* !WINDOWS */
406 
407  if (env != NULL)
408  {
409  for (i = 0; i < env_num; i++)
410  {
411  putenv (env[i]);
412  }
413  }
414  sprintf (port_env_str, "%s=%s", PORT_NAME_ENV_STR, shm_as_p->port_name);
415  snprintf (as_shm_id_env_str, sizeof (as_shm_id_env_str), "%s=%d", APPL_SERVER_SHM_KEY_STR,
416  proxy_info_p->appl_server_shm_id);
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);
419 
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);
424  /* SHARD TODO : will delete */
425 #if 0
426  putenv (access_log_env_str);
427 #endif
428 
429 #if !defined(WINDOWS)
430  snprintf (process_name, sizeof (process_name) - 1, "%s_%s_%d", shm_as_p->broker_name, proxy_exe_name,
431  proxy_id + 1);
432 #endif /* !WINDOWS */
433 
434 
435 #if defined(WINDOWS)
436  pid = run_child (proxy_exe_name);
437  }
438 #else /* WINDOWS */
439  if (execle (proxy_exe_name, process_name, NULL, environ) < 0)
440  {
441  perror (process_name);
442  exit (0);
443  }
444  exit (0);
445  }
446 #endif /* WINDOWS */
447 
448  SLEEP_MILISEC (0, 200);
449 
450  proxy_info_p->pid = pid;
451  free_env (env, env_num);
452 
453  return 0;
454 }
455 
456 static void
457 shard_proxy_inactivate (T_BROKER_INFO * br_info_p, T_PROXY_INFO * proxy_info_p, T_SHM_APPL_SERVER * shm_as_p)
458 {
459  int shard_index, as_index;
460  T_SHARD_INFO *shard_info_p;
461  T_APPL_SERVER_INFO *as_info_p;
462 
463  assert (proxy_info_p);
464 
465  if (proxy_info_p->pid > 0)
466  {
467  SHARD_ERR ("<KILL PROXY> PID:[%d]\n", proxy_info_p->pid);
468  ut_kill_process (proxy_info_p->pid, br_info_p->name, proxy_info_p->proxy_id, SHARD_INVALID_ID, CAS_INVALID_ID);
469  }
470  proxy_info_p->pid = 0;
471  proxy_info_p->cur_client = 0;
472 
473  /* SHARD TODO : backup or remove access log file */
474 
475  for (shard_index = 0; shard_index < proxy_info_p->num_shard_conn; shard_index++)
476  {
477  shard_info_p = shard_shm_find_shard_info (proxy_info_p, shard_index);
478 
479  for (as_index = 0; as_index < shard_info_p->max_appl_server; as_index++)
480  {
481  as_info_p = &(shm_as_p->as_info[as_index + shard_info_p->as_info_index_base]);
482  if (as_info_p->pid)
483  {
484  shard_as_inactivate (br_info_p, as_info_p, proxy_info_p->proxy_id, shard_info_p->shard_id, as_index);
485  }
486  }
487  }
488 
489  return;
490 }
491 
492 int
493 shard_as_activate (int as_shm_id, int proxy_id, int shard_id, int as_id, T_SHM_APPL_SERVER * shm_as_p,
494  T_SHM_PROXY * shm_proxy_p)
495 {
496  /* as_activate() "shard/shard_broker_admin_pub.c" 2790 */
497  int pid, i, env_num;
498  char **env = NULL;
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];
504 
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];
509 
510  char appl_name[APPL_SERVER_NAME_MAX_SIZE];
511 #if 0
512  char port_name[PATH_MAX], dirname[PATH_MAX];
513 #endif
514 #if !defined(WINDOWS)
515  char process_name[128];
516 #endif /* !WINDOWS */
517 
518  T_PROXY_INFO *proxy_info_p = NULL;
519  T_APPL_SERVER_INFO *as_info_p = NULL;
520 
521  assert (shm_as_p);
522  assert (shm_proxy_p);
523 
524  proxy_info_p = shard_shm_find_proxy_info (shm_proxy_p, proxy_id);
525  if (proxy_info_p == NULL)
526  {
527  return -1;
528  }
529 
530  as_info_p = shard_shm_get_as_info (proxy_info_p, shm_as_p, shard_id, as_id);
531  if (as_info_p == NULL)
532  {
533  return -1;
534  }
535 
536  env = make_env (shm_as_p->source_env, &env_num);
537 
538  /* SHARD TODO : will delete, not used */
539 #if 0
540  get_cubrid_file (FID_SOCK_DIR, dirname);
541  snprintf (port_name, sizeof (port_name) - 1, "%s/%s.%d", dirname, br_info_p->name, as_id);
542 #if !defined(WINDOWS)
543  unlink (port_name);
544 #endif /* !WINDOWS */
545 #endif
546 
547  as_info_p->num_request = 0;
548  as_info_p->uts_status = UTS_STATUS_START;
549  as_info_p->reset_flag = FALSE;
550  as_info_p->cur_sql_log_mode = shm_as_p->sql_log_mode;
551  as_info_p->cur_slow_log_mode = shm_as_p->slow_log_mode;
552 
553 #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;
557 #endif /* WINDOWS */
558 
559  as_info_p->service_ready_flag = FALSE;
560 
561  CON_STATUS_LOCK_INIT (as_info_p);
562 
563 #if defined(WINDOWS)
564  pid = 0;
565 #else /* WINDOWS */
566  pid = fork ();
567  if (pid < 0)
568  {
569  perror ("fork");
570  }
571 #endif /* !WINDOWS */
572 
573  if (pid == 0)
574  {
575  if (env != NULL)
576  {
577  for (i = 0; i < env_num; i++)
578  putenv (env[i]);
579  }
580 
581  strcpy (appl_name, shm_as_p->appl_server_name);
582 
583  sprintf (port_env_str, "%s=%s", PORT_NAME_ENV_STR, proxy_info_p->port_name);
584  sprintf (appl_server_shm_key_env_str, "%s=%d", APPL_SERVER_SHM_KEY_STR, as_shm_id);
585  sprintf (appl_name_env_str, "%s=%s", APPL_NAME_ENV_STR, appl_name);
586 
587  sprintf (error_log_env_str, "%s=%s", ERROR_LOG_ENV_STR, shm_as_p->error_log_file);
588 
589  sprintf (error_log_lock_env_file, "%s=%s.log.lock", ERROR_LOG_LOCK_FILE_ENV_STR, shm_as_p->broker_name);
590 
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,
595  proxy_info_p->shard_info[shard_id].as_info_index_base + as_id);
596 
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);
602 
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);
607 
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);
611 #endif /* !WINDOWS */
612 
613  SHARD_ERR ("<START AS> process_name:[%s|%s]\n", appl_name, process_name);
614 
615 #if defined(WINDOWS)
616  pid = run_child (appl_name);
617 #else /* WINDOWS */
618  if (execle (appl_name, process_name, NULL, environ) < 0)
619  {
620  perror (appl_name);
621  SHARD_ERR ("<START AS> failed. process_name:[%s|%s]\n", appl_name, process_name);
622  }
623  exit (0);
624 #endif /* WINDOWS */
625  }
626 
627  as_info_p->pid = pid;
628  as_info_p->last_access_time = time (NULL);
629  as_info_p->psize_time = time (NULL);
630  as_info_p->psize = getsize (as_info_p->pid);
631  as_info_p->uts_status = UTS_STATUS_CON_WAIT;
632  as_info_p->service_flag = SERVICE_ON;
633  if (as_id >= proxy_info_p->shard_info[shard_id].min_appl_server)
634  {
635  as_info_p->graceful_down_flag = 1;
636  }
637 
638  free_env (env, env_num);
639  return 0;
640 }
641 
642 void
643 shard_as_inactivate (T_BROKER_INFO * br_info_p, T_APPL_SERVER_INFO * as_info_p, int proxy_index, int shard_index,
644  int as_index)
645 {
646  if (as_info_p->pid > 0)
647  {
648  SHARD_ERR ("<KILL AS> PID:[%d]\n", as_info_p->pid);
649  ut_kill_process (as_info_p->pid, br_info_p->name, proxy_index, shard_index, as_index);
650  }
651  as_info_p->pid = 0;
652  as_info_p->last_access_time = time (0);
653  as_info_p->service_flag = SERVICE_OFF;
654  as_info_p->service_ready_flag = FALSE;
655 
656  /* initialize statistics */
657  as_info_p->num_request = 0;
658  as_info_p->num_requests_received = 0;
659  as_info_p->num_transactions_processed = 0;
660  as_info_p->num_queries_processed = 0;
661  as_info_p->num_long_queries = 0;
662  as_info_p->num_error_queries = 0;
663 
664  /* initialize con / uts status */
665  as_info_p->uts_status = UTS_STATUS_IDLE;
666  as_info_p->con_status = CON_STATUS_CLOSE;
667 
668  CON_STATUS_LOCK_DESTROY (as_info_p);
669 
670  /*
671  * shard_cas does not have unix-domain socket and pid lock file.
672  * so, we need not delete socket and lock file.
673  */
674 
675  return;
676 }
677 
678 int
679 shard_process_activate (int master_shm_id, T_BROKER_INFO * br_info_p, T_SHM_APPL_SERVER * shm_as_p,
680  T_SHM_PROXY * shm_proxy_p)
681 {
682  int i, j, k, error;
683  T_PROXY_INFO *proxy_info_p = NULL;
684  T_SHARD_INFO *shard_info_p = NULL;
685  T_APPL_SERVER_INFO *as_info_p = NULL;
686 
687  assert (master_shm_id > 0);
688  assert (br_info_p);
689  assert (shm_as_p);
690  assert (shm_proxy_p);
691 
692  /* start broker */
693  error = shard_broker_activate (master_shm_id, br_info_p, shm_as_p);
694  if (error)
695  {
696  goto error_return;
697  }
698 
699  /* start proxy */
700  for (i = 0; i < shm_proxy_p->num_proxy; i++)
701  {
702  proxy_info_p = shard_shm_find_proxy_info (shm_proxy_p, i);
703 
704  proxy_info_p->cur_proxy_log_mode = br_info_p->proxy_log_mode;
705 
706  error = shard_proxy_activate (br_info_p->proxy_shm_id, i, shm_as_p, shm_proxy_p);
707  if (error)
708  {
709  SHARD_ERR ("<PROXY START FAILED> PROXY:[%d].\n", proxy_info_p->proxy_id);
710  goto error_return;
711  }
712 
713  for (j = 0; j < proxy_info_p->num_shard_conn; j++)
714  {
715  shard_info_p = shard_shm_find_shard_info (proxy_info_p, j);
716  /* start shard (c)as */
717  /* SHARD TODO : min_appl_server? num_appl_server? */
718  for (k = 0; k < shard_info_p->num_appl_server; k++)
719  {
720  error = shard_as_activate (br_info_p->appl_server_shm_id, proxy_info_p->proxy_id /* proxy_id */ ,
721  shard_info_p->shard_id /* shard_id */ ,
722  k /* as_index */ ,
723  shm_as_p, shm_proxy_p);
724  if (error)
725  {
726  SHARD_ERR ("<AS START FAILED> PROXY:[%d], SHARD:[%d], AS:[%d].\n", proxy_info_p->proxy_id,
727  shard_info_p->shard_id, k);
728  goto error_return;
729  }
730  }
731  }
732  }
733 
734  for (i = 0; i < shm_proxy_p->num_proxy; i++)
735  {
736  proxy_info_p = shard_shm_find_proxy_info (shm_proxy_p, i);
737 
738  for (j = 0; j < proxy_info_p->num_shard_conn; j++)
739  {
740  shard_info_p = shard_shm_find_shard_info (proxy_info_p, j);
741 
742  for (k = 0; k < shard_info_p->num_appl_server; k++)
743  {
744  as_info_p = &shm_as_p->as_info[k + shard_info_p->as_info_index_base];
745  if (ut_is_appl_server_ready (as_info_p->pid, &as_info_p->service_ready_flag) == false)
746  {
747  sprintf (admin_err_msg,
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",
751  shm_as_p->shard_conn_info[j].db_name, "SHARD_DB_USER", shm_as_p->shard_conn_info[j].db_user);
752  goto error_return;
753  }
754  }
755  }
756  }
757 
758  return 0;
759 
760 error_return:
761 
762  shard_process_inactivate (br_info_p);
763  return -1;
764 }
765 
766 void
767 shard_process_inactivate (T_BROKER_INFO * br_info_p)
768 {
769  assert (br_info_p);
770 
771  shard_broker_inactivate (br_info_p);
772 
773  return;
774 }
775 #endif /* UNDEFINED */
int proxy_shm_id
Definition: shard_proxy.c:46
#define SLEEP_MILISEC(sec, msec)
Definition: util_func.h:40
char monitor_hang_flag
#define SHARD_INVALID_ID
Definition: broker_util.h:44
#define TRUE
Definition: broker_admin.c:49
char * dirname(const char *path)
Definition: porting.c:1066
char db_name[MAX_DBNAME_LENGTH]
Definition: broker_shm.h:219
T_SHARD_INFO * shard_shm_find_shard_info(T_PROXY_INFO *proxy_info_p, int shard_id)
Definition: shard_shm.c:433
char error_log_file[CONF_LOG_FILE_LEN]
Definition: broker_shm.h:599
T_PROXY_INFO * shard_shm_find_proxy_info(T_SHM_PROXY *proxy_p, int proxy_id)
Definition: shard_shm.c:419
char port_name[SHM_APPL_SERVER_NAME_MAX]
Definition: broker_shm.h:601
bool ut_is_appl_server_ready(int pid, char *ready_flag)
Definition: broker_util.c:498
time_t last_access_time
Definition: broker_shm.h:317
static T_BROKER_INFO * br_info_p
Definition: broker.c:312
#define SHARD_ERR(f, a...)
#define SHM_PROXY
Definition: broker_shm.h:65
#define MASTER_SHM_KEY_ENV_STR
static T_SHM_PROXY * shm_proxy_p
Definition: broker.c:313
char ** environ
#define NAME_BROKER
#define NAME_CAS_BROKER
#define APPL_SERVER_SHM_KEY_STR
#define UTS_STATUS_START
Definition: broker_shm.h:48
INT64 num_queries_processed
Definition: broker_shm.h:345
T_SHARD_INFO shard_info[SHARD_INFO_SIZE_LIMIT]
Definition: broker_shm.h:520
char broker_name[BROKER_NAME_LEN]
Definition: broker_shm.h:588
int max_appl_server
Definition: broker_shm.h:416
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)
Definition: shard_shm.c:671
char db_user[SRV_CON_DBUSER_SIZE]
Definition: broker_shm.h:221
#define UTS_STATUS_IDLE
Definition: broker_shm.h:46
#define PORT_NUMBER_ENV_STR
char * get_cubrid_file(T_CUBRID_FILE_ID fid, char *buf, size_t len)
int min_appl_server
Definition: broker_shm.h:415
#define UTS_STATUS_CON_WAIT
Definition: broker_shm.h:52
#define assert(x)
#define CON_STATUS_LOCK_INIT(AS_INFO)
Definition: broker_shm.h:100
#define NAME_PROXY
int proxy_id
Definition: shard_proxy.c:45
const char * uw_get_error_message(int error_code, int os_error_code)
Definition: broker_error.c:109
int as_info_index_base
Definition: broker_shm.h:422
#define PORT_NAME_ENV_STR
#define PROXY_ID_ENV_STR
int num_shard_conn
Definition: broker_shm.h:514
void uw_shm_detach(void *p)
Definition: broker_shm.c:700
int uw_shm_destroy(int shm_key)
Definition: broker_shm.c:391
#define NULL
Definition: freelistheap.h:34
int appl_server_shm_id
Definition: broker_shm.h:516
#define BROKER_NAME_LEN
Definition: broker_config.h:87
pid_t pid
Definition: dynamic_load.c:955
char source_env[CONF_LOG_FILE_LEN]
Definition: broker_shm.h:598
INT64 num_transactions_processed
Definition: broker_shm.h:344
static char ** make_env(char *env_file, int *env_num)
#define CON_STATUS_LOCK_DESTROY(AS_INFO)
Definition: broker_shm.h:103
char admin_err_msg[ADMIN_ERR_MSG_SIZE]
T_PROXY_INFO * proxy_info_p
Definition: shard_proxy.c:48
static void error(const char *msg)
Definition: gencat.c:331
int ut_kill_process(int pid)
Definition: broker_util.c:195
#define IS_APPL_SERVER_TYPE_CAS(x)
Definition: broker_config.h:39
INT64 num_requests_received
Definition: broker_shm.h:343
#define UW_ER_NO_ERROR
Definition: broker_error.h:31
#define PROXY_SHM_KEY_STR
char name[BROKER_NAME_LEN]
#define FALSE
Definition: broker_admin.c:50
#define CLOSE_SOCKET(X)
Definition: cas_common.h:85
char error_log_file[CONF_LOG_FILE_LEN]
#define ADMIN_ERR_MSG_SIZE
Definition: broker_acl.c:35
char appl_server_name[APPL_SERVER_NAME_MAX_SIZE]
Definition: broker_shm.h:589
#define CAS_INVALID_ID
Definition: broker_util.h:45
T_APPL_SERVER_INFO as_info[APPL_SERVER_NUM_LIMIT]
Definition: broker_shm.h:641
int num_appl_server
Definition: broker_shm.h:417
int i
Definition: dynamic_load.c:954
char port_name[SHM_PROXY_NAME_MAX]
Definition: broker_shm.h:488
int getsize(int pid)
#define APPL_SERVER_NAME_MAX_SIZE
Definition: broker_shm.h:120
#define PROXY_INVALID_ID
Definition: broker_util.h:35
char source_env[CONF_LOG_FILE_LEN]
T_SHM_APPL_SERVER * shm_as_p
Definition: shard_proxy.c:43
void * uw_shm_open(int shm_key, int which_shm, T_SHM_MODE shm_mode)
Definition: broker_shm.c:139
#define AS_ID_ENV_STR
T_SHARD_CONN_INFO shard_conn_info[SHARD_INFO_SIZE_LIMIT]
Definition: broker_shm.h:639
int uw_sem_destroy(sem_t *sem)
Definition: broker_shm.c:919
static void free_env(char **env, int env_num)
int cur_proxy_log_mode
Definition: broker_shm.h:464
#define SHM_APPL_SERVER
Definition: broker_shm.h:63