CUBRID Engine  latest
broker_config.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  * broker_config.c - broker configuration utilities
22  */
23 
24 #ident "$Id$"
25 
26 #include "config.h"
27 
28 #include <stdio.h>
29 #include <stdlib.h>
30 #include <string.h>
31 #include <ctype.h>
32 
33 #if defined (WINDOWS)
34 #include <io.h>
35 #include <direct.h>
36 #else
37 #include <unistd.h>
38 #endif
39 #include <sys/types.h>
40 #include <sys/stat.h>
41 #include <assert.h>
42 
43 #include "porting.h"
44 #include "cas_common.h"
45 #include "broker_config.h"
46 #include "broker_shm.h"
47 #include "broker_filename.h"
48 #include "broker_util.h"
49 #include "cas_sql_log2.h"
50 #include "shard_shm.h"
51 #include "shard_metadata.h"
52 #include "util_func.h"
53 
54 #include "ini_parser.h"
55 
56 #define DEFAULT_ADMIN_LOG_FILE "log/broker/cubrid_broker.log"
57 #define DEFAULT_SESSION_TIMEOUT "5min"
58 #define DEFAULT_MAX_QUERY_TIMEOUT "0"
59 #define DEFAULT_MYSQL_READ_TIMEOUT "0"
60 #define DEFAULT_MYSQL_KEEPALIVE_INTERVAL "1800" /* 30m */
61 #define DEFAULT_JOB_QUEUE_SIZE 1024
62 #define DEFAULT_APPL_SERVER "CAS"
63 #define DEFAULT_EMPTY_STRING "\0"
64 #define DEFAULT_FILE_UPLOAD_DELIMITER "^^"
65 #define DEFAULT_SQL_LOG_MODE "ALL"
66 #define DEFAULT_KEEP_CONNECTION "AUTO"
67 #define DEFAULT_JDBC_CACHE_LIFE_TIME 1000
68 #define DEFAULT_PROXY_MAX_PREPARED_STMT_COUNT 10000
69 #define DEFAULT_CAS_MAX_PREPARED_STMT_COUNT 2000
70 #define DEFAULT_MONITOR_HANG_INTERVAL 60
71 #define DEFAULT_HANG_TIMEOUT 60
72 #define DEFAULT_RECONNECT_TIME "600s"
73 
74 #define DEFAULT_SHARD_PROXY_LOG_MODE "ERROR"
75 #define DEFAULT_SHARD_KEY_MODULAR 256
76 #define DEFAULT_SHARD_PROXY_TIMEOUT "30s"
77 #define DEFAULT_SHARD_PROXY_CONN_WAIT_TIMEOUT "8h"
78 
79 #define PORT_NUM_LIMIT (USHRT_MAX) /* 65535 */
80 
81 #define TRUE 1
82 #define FALSE 0
83 
84 typedef struct t_conf_table T_CONF_TABLE;
86 {
87  const char *conf_str;
89 };
90 
91 enum
95 };
96 
97 static void conf_file_has_been_loaded (const char *conf_path);
98 static int check_port_number (T_BROKER_INFO * br_info, int num_brs);
99 static int get_conf_value (const char *string, T_CONF_TABLE * conf_table);
100 static const char *get_conf_string (int value, T_CONF_TABLE * conf_table);
101 
107  {NULL, 0}
108 };
109 
111  {"ON", ON},
112  {"OFF", OFF},
113  {NULL, 0}
114 };
115 
117  {"ALL", SQL_LOG_MODE_ALL},
118  {"ON", SQL_LOG_MODE_ALL},
119  {"NOTICE", SQL_LOG_MODE_NOTICE},
120  {"TIMEOUT", SQL_LOG_MODE_TIMEOUT},
121  {"ERROR", SQL_LOG_MODE_ERROR},
122  {"NONE", SQL_LOG_MODE_NONE},
123  {"OFF", SQL_LOG_MODE_NONE},
124  {NULL, 0}
125 };
126 
128  {"ON", KEEP_CON_ON},
129  {"AUTO", KEEP_CON_AUTO},
130  {NULL, 0}
131 };
132 
134  {"RW", READ_WRITE_ACCESS_MODE},
135  {"RO", READ_ONLY_ACCESS_MODE},
136  {"SO", SLAVE_ONLY_ACCESS_MODE},
137  {NULL, 0}
138 };
139 
141  {"SEQ", CONNECT_ORDER_SEQ},
142  {"RANDOM", CONNECT_ORDER_RANDOM},
143  {NULL, 0}
144 };
145 
147  {"ALL", PROXY_LOG_MODE_ALL},
148  {"ON", PROXY_LOG_MODE_ALL},
149  {"SHARD", PROXY_LOG_MODE_SHARD_DETAIL},
150  {"SCHEDULE", PROXY_LOG_MODE_SCHEDULE_DETAIL},
151  {"NOTICE", PROXY_LOG_MODE_NOTICE},
152  {"TIMEOUT", PROXY_LOG_MODE_TIMEOUT},
153  {"ERROR", PROXY_LOG_MODE_ERROR},
154  {"NONE", PROXY_LOG_MODE_NONE},
155  {"OFF", PROXY_LOG_MODE_NONE},
156  {NULL, 0}
157 };
158 
159 static const char SECTION_NAME[] = "broker";
160 
161 static const char *tbl_conf_err_msg[] = {
162  "",
163  "Cannot find any section in conf file.",
164  "Value type does not match parameter type.",
165  "Value is out of range.",
166  "Section name is too long. Section name must be less than 64."
167 };
168 
169 /* conf files that have been loaded */
170 #define MAX_NUM_OF_CONF_FILE_LOADED 5
172 
173 /* The order of keywords is based on the manual. */
174 const char *broker_keywords[] = {
175  "ACCESS_CONTROL",
176  "ACCESS_CONTROL_FILE",
177  "ADMIN_LOG_FILE",
178  "MASTER_SHM_ID",
179  "ACCESS_LIST",
180  "ACCESS_MODE",
181  "BROKER_PORT",
182  "CONNECT_ORDER",
183  "ENABLE_MONITOR_HANG",
184  "KEEP_CONNECTION",
185  "MAX_NUM_DELAYED_HOSTS_LOOKUP",
186  "PREFERRED_HOSTS",
187  "RECONNECT_TIME",
188  "REPLICA_ONLY",
189  "APPL_SERVER_MAX_SIZE",
190  "APPL_SERVER_MAX_SIZE_HARD_LIMIT",
191  "APPL_SERVER_PORT",
192  "APPL_SERVER_SHM_ID",
193  "AUTO_ADD_APPL_SERVER",
194  "MAX_NUM_APPL_SERVER",
195  "MIN_NUM_APPL_SERVER",
196  "TIME_TO_KILL",
197  "CCI_DEFAULT_AUTOCOMMIT",
198  "LONG_QUERY_TIME",
199  "LONG_TRANSACTION_TIME",
200  "MAX_PREPARED_STMT_COUNT",
201  "MAX_QUERY_TIMEOUT",
202  "SESSION_TIMEOUT",
203  "STATEMENT_POOLING",
204  "JDBC_CACHE",
205  "JDBC_CACHE_HINT_ONLY",
206  "JDBC_CACHE_LIFE_TIME",
207  "TRIGGER_ACTION",
208  "ACCESS_LOG",
209  "ACCESS_LOG_DIR",
210  "ACCESS_LOG_MAX_SIZE",
211  "ERROR_LOG_DIR",
212  "LOG_DIR",
213  "SLOW_LOG",
214  "SLOW_LOG_DIR",
215  "SQL_LOG",
216  "SQL_LOG_MAX_SIZE",
217  "SERVICE",
218  "SSL",
219  "SOURCE_ENV",
220  /* Below is a keyword referenced from the source code, although it is not in the manual. */
221  "APPL_SERVER",
222  "CACHE_USER_INFO",
223  "CCI_PCONNECT",
224  "DATABASES_CONNECTION_FILE",
225  "ENABLE_MONITOR_SERVER",
226  "JOB_QUEUE_SIZE",
227  "LOG_BACKUP",
228  "MAX_STRING_LENGTH",
229  "READ_ONLY_BROKER",
230  "STRIPPED_COLUMN_NAME",
231  /* Below is a list of reserved keywords for shard extension in the future */
232  "DEFAULT_SHARD_NUM_PROXY",
233  "DEFAULT_SHARD_PROXY_LOG_DIR",
234  "DEFAULT_SHARD_PROXY_LOG_MAX_SIZE",
235  "DEFAULT_SHARD_PROXY_LOG_MODE",
236  "SHARD_CONNECTION_FILE",
237  "SHARD_DB_NAME",
238  "SHARD_DB_PASSWORD",
239  "SHARD_DB_USER",
240  "SHARD_IGNORE_HINT",
241  "SHARD_KEY_FILE",
242  "SHARD_KEY_FUNCTION_NAME",
243  "SHARD_KEY_LIBRARY_NAME",
244  "SHARD_KEY_MODULAR",
245  "SHARD_MAX_CLIENTS",
246  "SHARD_MAX_PREPARED_STMT_COUNT",
247  "SHARD_PROXY_CONN_WAIT_TIMEOUT",
248  "SHARD_PROXY_LOG_MAX_SIZE",
249  "SHARD_PROXY_SHM_ID",
250  "SHARD_PROXY_TIMEOUT",
251  "SHARD_NUM_PROXY",
252  "SHARD_PROXY_LOG",
253  "SHARD_PROXY_LOG_DIR",
254  /* For backword compatibility */
255  "SQL_LOG2",
256  "SHARD"
257 };
258 
259 int broker_keywords_size = sizeof (broker_keywords) / sizeof (char *);
260 
261 /*
262  * conf_file_has_been_loaded - record the file path that has been loaded
263  * return: none
264  * conf_path(in): path of the conf file to be recorded
265  */
266 static void
268 {
269  int i;
270  assert (conf_path != NULL);
271 
272  for (i = 0; i < MAX_NUM_OF_CONF_FILE_LOADED; i++)
273  {
274  if (conf_file_loaded[i] == NULL)
275  {
276  conf_file_loaded[i] = strdup (conf_path);
277  return;
278  }
279  }
280 }
281 
282 /*
283  * check_port_number - Check broker's port number
284  * return: 0 or -1 if duplicated
285  * br_info(in):
286  * num_brs(in):
287  */
288 static int
289 check_port_number (T_BROKER_INFO * br_info, int num_brs)
290 {
291  int i, j;
292  int error_flag = FALSE;
293 
294  for (i = 0; i < num_brs; i++)
295  {
296  for (j = i + 1; j < num_brs; j++)
297  {
298  if (br_info[i].port == br_info[j].port)
299  {
300 #if !defined (WINDOWS)
301  printf ("duplicated port number %d\n", br_info[i].port);
302 #endif
303  error_flag = TRUE;
304  }
305  }
306  }
307 
308  if (error_flag == TRUE)
309  {
310  return -1;
311  }
312  return 0;
313 }
314 
315 /*
316  * dir_repath - Fix path to absolute path
317  * return: void
318  * path(in/out):
319  */
320 void
321 dir_repath (char *path, size_t path_len)
322 {
323  char tmp_str[BROKER_PATH_MAX];
324 
325  trim (path);
326 
327  if (IS_ABS_PATH (path))
328  {
329  return;
330  }
331 
332  strncpy_bufsize (tmp_str, path);
333  if (snprintf (path, path_len, "%s/%s", get_cubrid_home (), tmp_str) < 0)
334  {
335  assert (false);
336  path[0] = '\0';
337  }
338 }
339 
340 /*
341  * get_conf_value_table - get value from table
342  * return: table value or -1 if fail
343  * value(in):
344  * conf_table(in):
345  */
346 static int
347 get_conf_value (const char *string, T_CONF_TABLE * conf_table)
348 {
349  int i;
350 
351  for (i = 0; conf_table[i].conf_str != NULL; i++)
352  {
353  if (strcasecmp (string, conf_table[i].conf_str) == 0)
354  return conf_table[i].conf_value;
355  }
356  return -1;
357 }
358 
359 static const char *
360 get_conf_string (int value, T_CONF_TABLE * conf_table)
361 {
362  int i;
363 
364  for (i = 0; conf_table[i].conf_str != NULL; i++)
365  {
366  if (conf_table[i].conf_value == value)
367  {
368  return conf_table[i].conf_str;
369  }
370  }
371  return NULL;
372 }
373 
374 /*
375  * broker_config_read_internal - read and parse broker configurations
376  * return: 0 or -1 if fail
377  * br_info(in/out):
378  * num_broker(out):
379  * br_shm_id(out):
380  * admin_log_file(out):
381  * admin_flag(in):
382  * admin_err_msg(in):
383  */
384 static int
385 broker_config_read_internal (const char *conf_file, T_BROKER_INFO * br_info, int *num_broker, int *br_shm_id,
386  char *admin_log_file, char admin_flag, bool * acl_flag, char *acl_file,
387  char *admin_err_msg)
388 {
389 #if defined (_UC_ADMIN_SO_)
390 #define PRINTERROR(...) sprintf(admin_err_msg, __VA_ARGS__)
391 #else /* _UC_ADMIN_SO_ */
392 #define PRINTERROR(...) \
393  do {\
394  PRINT_AND_LOG_ERR_MSG(__VA_ARGS__); \
395  } \
396  while (0)
397 
398 #endif /* !_UC_ADMIN_SO_ */
399  int num_brs = 0;
400  int i, j;
401  int master_shm_id = 0;
402  int error_flag;
403 #if defined (WINDOWS)
404  char appl_server_port_assigned[MAX_BROKER_NUM];
405 #endif
406  INI_TABLE *ini;
407  int tmp_int;
408  float tmp_float;
409  int lineno = 0;
410  int errcode = 0;
411  const char *ini_string;
412  char library_name[BROKER_PATH_MAX];
413  char size_str[LINE_MAX];
414  char time_str[LINE_MAX];
415 
416  ini = ini_parser_load (conf_file);
417  if (ini == NULL)
418  {
419  PRINTERROR ("cannot open conf file %s\n", conf_file);
420  return -1;
421  }
422 
423 #if defined (WINDOWS)
424  memset (appl_server_port_assigned, 0, sizeof (appl_server_port_assigned));
425 #endif
426 
427  if (ini->nsec < 1)
428  {
429  errcode = PARAM_INVAL_SEC;
430  goto conf_error;
431  }
432 
433  /* get [broker] section vars */
434  if (!ini_findsec (ini, SECTION_NAME))
435  {
436  PRINTERROR ("cannot find [%s] section in conf file %s\n", SECTION_NAME, conf_file);
437  ini_parser_free (ini);
438  return -1;
439  }
440 
441  /* Validate broker keywords, if keyword is not in list terminate */
442  for (i = 0; i < ini->size; i++)
443  {
444  char *key;
445  bool found = false;
446 
447  if (ini->key[i] == NULL)
448  {
449  continue;
450  }
451 
452  key = strchr (ini->key[i], ':');
453  if (key == NULL)
454  {
455  continue;
456  }
457 
458  key++;
459  for (j = 0; j < broker_keywords_size; j++)
460  {
461  if (strcasecmp (key, broker_keywords[j]) == 0)
462  {
463  found = true;
464  break;
465  }
466  }
467 
468  if (!found)
469  {
470  PRINTERROR ("cubrid_broker.conf: invalid keyword '%s' (%d)\n", key, ini->lineno[i]);
471  ini_parser_free (ini);
472  return -1;
473  }
474  }
475 
476  master_shm_id = ini_gethex (ini, SECTION_NAME, "MASTER_SHM_ID", 0, &lineno);
477  if (admin_log_file != NULL)
478  {
479  ini_string = ini_getstr (ini, SECTION_NAME, "ADMIN_LOG_FILE", DEFAULT_ADMIN_LOG_FILE, &lineno);
480  MAKE_FILEPATH (admin_log_file, ini_string, BROKER_PATH_MAX);
481  }
482 
483  if (acl_flag != NULL)
484  {
485  tmp_int = conf_get_value_table_on_off (ini_getstr (ini, SECTION_NAME, "ACCESS_CONTROL", "OFF", &lineno));
486  if (tmp_int < 0)
487  {
488  errcode = PARAM_BAD_RANGE;
489  goto conf_error;
490  }
491  *acl_flag = tmp_int;
492  }
493 
494  if (acl_file != NULL)
495  {
496  ini_string = ini_getstr (ini, SECTION_NAME, "ACCESS_CONTROL_FILE", "", &lineno);
497  MAKE_FILEPATH (acl_file, ini_string, BROKER_PATH_MAX);
498  }
499 
500  for (i = 0; i < ini->nsec; i++)
501  {
502  char *sec_name;
503 
504  sec_name = ini_getsecname (ini, i, &lineno);
505  if (sec_name == NULL || strcasecmp (sec_name, SECTION_NAME) == 0 || sec_name[0] != '%')
506  {
507  continue;
508  }
509 
510  /* sec_name : %broker_name */
511  if ((strlen (sec_name)) > BROKER_NAME_LEN)
512  {
513  errcode = SECTION_NAME_TOO_LONG;
514  goto conf_error;
515  }
516 
517  if (num_brs >= MAX_BROKER_NUM)
518  {
519  errcode = PARAM_BAD_RANGE;
520  goto conf_error;
521  }
522 
523  strcpy (br_info[num_brs].name, sec_name + 1);
524 
525  br_info[num_brs].cci_default_autocommit =
526  conf_get_value_table_on_off (ini_getstr (ini, sec_name, "CCI_DEFAULT_AUTOCOMMIT", "ON", &lineno));
527  if (br_info[num_brs].cci_default_autocommit < 0)
528  {
529  errcode = PARAM_BAD_VALUE;
530  goto conf_error;
531  }
532 
533  br_info[num_brs].port = ini_getint (ini, sec_name, "BROKER_PORT", 0, &lineno);
534 
535  br_info[num_brs].service_flag =
536  conf_get_value_table_on_off (ini_getstr (ini, sec_name, "SERVICE", "ON", &lineno));
537  if (br_info[num_brs].service_flag < 0)
538  {
539  errcode = PARAM_BAD_VALUE;
540  goto conf_error;
541  }
542 
543  br_info[num_brs].use_SSL =
544  conf_get_value_table_on_off (ini_getstr (ini, sec_name, "SSL", DEFAULT_SSL_MODE, &lineno));
545  if (br_info[num_brs].use_SSL < 0)
546  {
547  errcode = PARAM_BAD_VALUE;
548  goto conf_error;
549  }
550 
551  br_info[num_brs].appl_server =
552  get_conf_value (ini_getstr (ini, sec_name, "APPL_SERVER", DEFAULT_APPL_SERVER, &lineno), tbl_appl_server);
553  if (br_info[num_brs].appl_server < 0)
554  {
555  errcode = PARAM_BAD_VALUE;
556  goto conf_error;
557  }
558 
559  br_info[num_brs].appl_server_min_num =
560  ini_getuint (ini, sec_name, "MIN_NUM_APPL_SERVER", DEFAULT_AS_MIN_NUM, &lineno);
561  br_info[num_brs].appl_server_num = br_info[num_brs].appl_server_min_num;
562  if (br_info[num_brs].appl_server_min_num > APPL_SERVER_NUM_LIMIT)
563  {
564  errcode = PARAM_BAD_VALUE;
565  goto conf_error;
566  }
567 
568 
569  br_info[num_brs].appl_server_max_num =
570  ini_getuint (ini, sec_name, "MAX_NUM_APPL_SERVER", DEFAULT_AS_MAX_NUM, &lineno);
571  if (br_info[num_brs].appl_server_max_num > APPL_SERVER_NUM_LIMIT)
572  {
573  errcode = PARAM_BAD_VALUE;
574  goto conf_error;
575  }
576 
577 #if defined (WINDOWS)
578  tmp_int = ini_getint (ini, sec_name, "APPL_SERVER_PORT", -1, &lineno);
579  if (tmp_int < 0)
580  {
581  br_info[num_brs].appl_server_port = 0; /* default value */
582  }
583  else
584  {
585  br_info[num_brs].appl_server_port = tmp_int;
586  appl_server_port_assigned[num_brs] = TRUE;
587  }
588 #endif
589 
590  br_info[num_brs].appl_server_shm_id = ini_gethex (ini, sec_name, "APPL_SERVER_SHM_ID", 0, &lineno);
591 
592  strncpy_bufsize (size_str, ini_getstr (ini, sec_name, "APPL_SERVER_MAX_SIZE", DEFAULT_SERVER_MAX_SIZE, &lineno));
593  br_info[num_brs].appl_server_max_size = (int) ut_size_string_to_kbyte (size_str, "M");
594  if (br_info[num_brs].appl_server_max_size < 0)
595  {
596  errcode = PARAM_BAD_VALUE;
597  goto conf_error;
598  }
599 
600  strncpy_bufsize (size_str, ini_getstr (ini, sec_name, "APPL_SERVER_MAX_SIZE_HARD_LIMIT",
601  DEFAULT_SERVER_HARD_LIMIT, &lineno));
602  br_info[num_brs].appl_server_hard_limit = (int) ut_size_string_to_kbyte (size_str, "M");
603  if (br_info[num_brs].appl_server_hard_limit <= 0)
604  {
605  errcode = PARAM_BAD_VALUE;
606  goto conf_error;
607  }
608 
609  strncpy_bufsize (time_str, ini_getstr (ini, sec_name, "SESSION_TIMEOUT", DEFAULT_SESSION_TIMEOUT, &lineno));
610  br_info[num_brs].session_timeout = (int) ut_time_string_to_sec (time_str, "sec");
611  if (br_info[num_brs].session_timeout < 0)
612  {
613  errcode = PARAM_BAD_VALUE;
614  goto conf_error;
615  }
616 
617  ini_string = ini_getstr (ini, sec_name, "LOG_DIR", DEFAULT_LOG_DIR, &lineno);
618  MAKE_FILEPATH (br_info[num_brs].log_dir, ini_string, CONF_LOG_FILE_LEN);
619  ini_string = ini_getstr (ini, sec_name, "SLOW_LOG_DIR", DEFAULT_SLOW_LOG_DIR, &lineno);
620  MAKE_FILEPATH (br_info[num_brs].slow_log_dir, ini_string, CONF_LOG_FILE_LEN);
621  ini_string = ini_getstr (ini, sec_name, "ERROR_LOG_DIR", DEFAULT_ERR_DIR, &lineno);
622  MAKE_FILEPATH (br_info[num_brs].err_log_dir, ini_string, CONF_LOG_FILE_LEN);
623 
624  ini_string = ini_getstr (ini, sec_name, "ACCESS_LOG_DIR", DEFAULT_ACCESS_LOG_DIR, &lineno);
625  MAKE_FILEPATH (br_info[num_brs].access_log_dir, ini_string, CONF_LOG_FILE_LEN);
626  ini_string = ini_getstr (ini, sec_name, "DATABASES_CONNECTION_FILE", DEFAULT_EMPTY_STRING, &lineno);
627  MAKE_FILEPATH (br_info[num_brs].db_connection_file, ini_string, BROKER_INFO_PATH_MAX);
628 
629  strcpy (br_info[num_brs].access_log_file, br_info[num_brs].access_log_dir);
630  strcpy (br_info[num_brs].error_log_file, CUBRID_BASE_DIR);
631 
632  br_info[num_brs].max_prepared_stmt_count =
633  ini_getint (ini, sec_name, "MAX_PREPARED_STMT_COUNT", DEFAULT_CAS_MAX_PREPARED_STMT_COUNT, &lineno);
634  if (br_info[num_brs].max_prepared_stmt_count < 1)
635  {
636  errcode = PARAM_BAD_VALUE;
637  goto conf_error;
638  }
639 
640  br_info[num_brs].log_backup =
641  conf_get_value_table_on_off (ini_getstr (ini, sec_name, "LOG_BACKUP", "OFF", &lineno));
642  if (br_info[num_brs].log_backup < 0)
643  {
644  errcode = PARAM_BAD_VALUE;
645  goto conf_error;
646  }
647 
648  strcpy (br_info[num_brs].source_env, ini_getstr (ini, sec_name, "SOURCE_ENV", DEFAULT_EMPTY_STRING, &lineno));
649 
650  br_info[num_brs].sql_log_mode =
651  conf_get_value_sql_log_mode (ini_getstr (ini, sec_name, "SQL_LOG", DEFAULT_SQL_LOG_MODE, &lineno));
652  if (br_info[num_brs].sql_log_mode < 0)
653  {
654  errcode = PARAM_BAD_VALUE;
655  goto conf_error;
656  }
657 
658  br_info[num_brs].slow_log_mode =
659  conf_get_value_table_on_off (ini_getstr (ini, sec_name, "SLOW_LOG", "ON", &lineno));
660  if (br_info[num_brs].slow_log_mode < 0)
661  {
662  errcode = PARAM_BAD_VALUE;
663  goto conf_error;
664  }
665 
666 #if !defined (WINDOWS)
667  br_info[num_brs].sql_log2 = ini_getuint_max (ini, sec_name, "SQL_LOG2", SQL_LOG2_NONE, SQL_LOG2_MAX, &lineno);
668 #endif
669 
670  strncpy_bufsize (size_str, ini_getstr (ini, sec_name, "SQL_LOG_MAX_SIZE", DEFAULT_SQL_LOG_MAX_SIZE, &lineno));
671  br_info[num_brs].sql_log_max_size = (int) ut_size_string_to_kbyte (size_str, "K");
672  if (br_info[num_brs].sql_log_max_size < 0)
673  {
674  errcode = PARAM_BAD_VALUE;
675  goto conf_error;
676  }
677  else if (br_info[num_brs].sql_log_max_size > MAX_SQL_LOG_MAX_SIZE)
678  {
679  errcode = PARAM_BAD_RANGE;
680  goto conf_error;
681  }
682 
683  strncpy_bufsize (time_str, ini_getstr (ini, sec_name, "LONG_QUERY_TIME", DEFAULT_LONG_QUERY_TIME, &lineno));
684  tmp_float = (float) ut_time_string_to_sec (time_str, "sec");
685  if (tmp_float < 0 || tmp_float > LONG_QUERY_TIME_LIMIT)
686  {
687  errcode = PARAM_BAD_VALUE;
688  goto conf_error;
689  }
690  /* change float to msec */
691  br_info[num_brs].long_query_time = (int) (tmp_float * 1000.0);
692 
693  strncpy_bufsize (time_str, ini_getstr (ini, sec_name, "LONG_TRANSACTION_TIME", DEFAULT_LONG_TRANSACTION_TIME,
694  &lineno));
695  tmp_float = (float) ut_time_string_to_sec (time_str, "sec");
696  if (tmp_float < 0 || tmp_float > LONG_TRANSACTION_TIME_LIMIT)
697  {
698  errcode = PARAM_BAD_VALUE;
699  goto conf_error;
700  }
701  /* change float to msec */
702  br_info[num_brs].long_transaction_time = (int) (tmp_float * 1000.0);
703 
704  br_info[num_brs].auto_add_appl_server =
705  conf_get_value_table_on_off (ini_getstr (ini, sec_name, "AUTO_ADD_APPL_SERVER", "ON", &lineno));
706  if (br_info[num_brs].auto_add_appl_server < 0)
707  {
708  errcode = PARAM_BAD_VALUE;
709  goto conf_error;
710  }
711 
712  br_info[num_brs].job_queue_size =
713  ini_getuint_max (ini, sec_name, "JOB_QUEUE_SIZE", DEFAULT_JOB_QUEUE_SIZE, JOB_QUEUE_MAX_SIZE, &lineno);
714 
715  strncpy_bufsize (time_str, ini_getstr (ini, sec_name, "TIME_TO_KILL", DEFAULT_TIME_TO_KILL, &lineno));
716  br_info[num_brs].time_to_kill = (int) ut_time_string_to_sec (time_str, "sec");
717  if (br_info[num_brs].time_to_kill < 0)
718  {
719  errcode = PARAM_BAD_VALUE;
720  goto conf_error;
721  }
722 
723  br_info[num_brs].access_log =
724  conf_get_value_table_on_off (ini_getstr (ini, sec_name, "ACCESS_LOG", "OFF", &lineno));
725  if (br_info[num_brs].access_log < 0)
726  {
727  errcode = PARAM_BAD_VALUE;
728  goto conf_error;
729  }
730 
731  strncpy_bufsize (size_str, ini_getstr (ini, sec_name, "ACCESS_LOG_MAX_SIZE", DEFAULT_ACCESS_LOG_MAX_SIZE,
732  &lineno));
733  br_info[num_brs].access_log_max_size = (int) ut_size_string_to_kbyte (size_str, "K");
734 
735  if (br_info[num_brs].access_log_max_size < 0)
736  {
737  errcode = PARAM_BAD_VALUE;
738  goto conf_error;
739  }
740  else if (br_info[num_brs].access_log_max_size > MAX_ACCESS_LOG_MAX_SIZE)
741  {
742  errcode = PARAM_BAD_RANGE;
743  goto conf_error;
744  }
745 
746  ini_string = ini_getstr (ini, sec_name, "ACCESS_LIST", DEFAULT_EMPTY_STRING, &lineno);
747  MAKE_FILEPATH (br_info[num_brs].acl_file, ini_string, CONF_LOG_FILE_LEN);
748 
749  br_info[num_brs].max_string_length = ini_getint (ini, sec_name, "MAX_STRING_LENGTH", -1, &lineno);
750 
751  br_info[num_brs].stripped_column_name =
752  conf_get_value_table_on_off (ini_getstr (ini, sec_name, "STRIPPED_COLUMN_NAME", "ON", &lineno));
753  if (br_info[num_brs].stripped_column_name < 0)
754  {
755  errcode = PARAM_BAD_VALUE;
756  goto conf_error;
757  }
758 
759  br_info[num_brs].keep_connection =
760  conf_get_value_keep_con (ini_getstr (ini, sec_name, "KEEP_CONNECTION", DEFAULT_KEEP_CONNECTION, &lineno));
761  if (br_info[num_brs].keep_connection < 0)
762  {
763  errcode = PARAM_BAD_VALUE;
764  goto conf_error;
765  }
766 
767  br_info[num_brs].cache_user_info =
768  conf_get_value_table_on_off (ini_getstr (ini, sec_name, "CACHE_USER_INFO", "OFF", &lineno));
769  if (br_info[num_brs].cache_user_info < 0)
770  {
771  errcode = PARAM_BAD_VALUE;
772  goto conf_error;
773  }
774 
775  br_info[num_brs].statement_pooling =
776  conf_get_value_table_on_off (ini_getstr (ini, sec_name, "STATEMENT_POOLING", "ON", &lineno));
777  if (br_info[num_brs].statement_pooling < 0)
778  {
779  errcode = PARAM_BAD_VALUE;
780  goto conf_error;
781  }
782 
783  br_info[num_brs].jdbc_cache =
784  conf_get_value_table_on_off (ini_getstr (ini, sec_name, "JDBC_CACHE", "OFF", &lineno));
785  if (br_info[num_brs].jdbc_cache < 0)
786  {
787  errcode = PARAM_BAD_VALUE;
788  goto conf_error;
789  }
790 
791  br_info[num_brs].jdbc_cache_only_hint =
792  conf_get_value_table_on_off (ini_getstr (ini, sec_name, "JDBC_CACHE_HINT_ONLY", "OFF", &lineno));
793  if (br_info[num_brs].jdbc_cache_only_hint < 0)
794  {
795  errcode = PARAM_BAD_VALUE;
796  goto conf_error;
797  }
798 
799  br_info[num_brs].jdbc_cache_life_time =
800  ini_getint (ini, sec_name, "JDBC_CACHE_LIFE_TIME", DEFAULT_JDBC_CACHE_LIFE_TIME, &lineno);
801 
802  br_info[num_brs].cci_pconnect =
803  conf_get_value_table_on_off (ini_getstr (ini, sec_name, "CCI_PCONNECT", "OFF", &lineno));
804  if (br_info[num_brs].cci_pconnect < 0)
805  {
806  errcode = PARAM_BAD_VALUE;
807  goto conf_error;
808  }
809 
810  tmp_int = conf_get_value_table_on_off (ini_getstr (ini, sec_name, "READ_ONLY_BROKER", "OFF", &lineno));
811  if (tmp_int < 0)
812  {
813  errcode = PARAM_BAD_VALUE;
814  goto conf_error;
815  }
816  else if (tmp_int == ON)
817  {
818  br_info[num_brs].access_mode =
819  get_conf_value (ini_getstr (ini, sec_name, "ACCESS_MODE", "RO", &lineno), tbl_access_mode);
820  }
821  else
822  {
823  br_info[num_brs].access_mode =
824  get_conf_value (ini_getstr (ini, sec_name, "ACCESS_MODE", "RW", &lineno), tbl_access_mode);
825  }
826  if (br_info[num_brs].access_mode < 0)
827  {
828  errcode = PARAM_BAD_VALUE;
829  goto conf_error;
830  }
831 
832  br_info[num_brs].replica_only_flag =
833  conf_get_value_table_on_off (ini_getstr (ini, sec_name, "REPLICA_ONLY", "OFF", &lineno));
834  if (br_info[num_brs].replica_only_flag < 0)
835  {
836  errcode = PARAM_BAD_VALUE;
837  goto conf_error;
838  }
839 
840  strcpy (br_info[num_brs].preferred_hosts,
841  ini_getstr (ini, sec_name, "PREFERRED_HOSTS", DEFAULT_EMPTY_STRING, &lineno));
842 
843  br_info[num_brs].connect_order =
844  conf_get_value_connect_order (ini_getstr (ini, sec_name, "CONNECT_ORDER", "SEQ", &lineno));
845  if (br_info[num_brs].connect_order < 0)
846  {
847  errcode = PARAM_BAD_VALUE;
848  goto conf_error;
849  }
850 
851  br_info[num_brs].max_num_delayed_hosts_lookup =
852  ini_getint (ini, sec_name, "MAX_NUM_DELAYED_HOSTS_LOOKUP", DEFAULT_MAX_NUM_DELAYED_HOSTS_LOOKUP, &lineno);
853  if (br_info[num_brs].max_num_delayed_hosts_lookup < DEFAULT_MAX_NUM_DELAYED_HOSTS_LOOKUP)
854  {
855  errcode = PARAM_BAD_VALUE;
856  goto conf_error;
857  }
858 
859  strncpy_bufsize (time_str, ini_getstr (ini, sec_name, "RECONNECT_TIME", DEFAULT_RECONNECT_TIME, &lineno));
860  br_info[num_brs].cas_rctime = (int) ut_time_string_to_sec (time_str, "sec");
861  if (br_info[num_brs].cas_rctime < 0)
862  {
863  errcode = PARAM_BAD_VALUE;
864  goto conf_error;
865  }
866 
867  strncpy_bufsize (time_str, ini_getstr (ini, sec_name, "MAX_QUERY_TIMEOUT", DEFAULT_MAX_QUERY_TIMEOUT, &lineno));
868  br_info[num_brs].query_timeout = (int) ut_time_string_to_sec (time_str, "sec");
869  if (br_info[num_brs].query_timeout < 0)
870  {
871  errcode = PARAM_BAD_VALUE;
872  goto conf_error;
873  }
874  else if (br_info[num_brs].query_timeout > MAX_QUERY_TIMEOUT_LIMIT)
875  {
876  errcode = PARAM_BAD_RANGE;
877  goto conf_error;
878  }
879 
880  strncpy_bufsize (time_str, ini_getstr (ini, sec_name, "MYSQL_READ_TIMEOUT", DEFAULT_MYSQL_READ_TIMEOUT, &lineno));
881  br_info[num_brs].mysql_read_timeout = (int) ut_time_string_to_sec (time_str, "sec");
882  if (br_info[num_brs].mysql_read_timeout < 0)
883  {
884  errcode = PARAM_BAD_VALUE;
885  goto conf_error;
886  }
887  else if (br_info[num_brs].mysql_read_timeout > MAX_QUERY_TIMEOUT_LIMIT)
888  {
889  errcode = PARAM_BAD_RANGE;
890  goto conf_error;
891  }
892 
893  strncpy_bufsize (time_str, ini_getstr (ini, sec_name, "MYSQL_KEEPALIVE_INTERVAL",
895  br_info[num_brs].mysql_keepalive_interval = (int) ut_time_string_to_sec (time_str, "sec");
896  if (br_info[num_brs].mysql_keepalive_interval < MIN_MYSQL_KEEPALIVE_INTERVAL)
897  {
898  errcode = PARAM_BAD_VALUE;
899  goto conf_error;
900  }
901 
902  /* parameters related to checking hanging cas */
903  br_info[num_brs].reject_client_flag = false;
904  tmp_int = conf_get_value_table_on_off (ini_getstr (ini, sec_name, "ENABLE_MONITOR_HANG", "OFF", &lineno));
905  if (tmp_int < 0)
906  {
907  errcode = PARAM_BAD_VALUE;
908  goto conf_error;
909  }
910  else
911  {
912  br_info[num_brs].monitor_hang_flag = tmp_int;
914  br_info[num_brs].hang_timeout = DEFAULT_HANG_TIMEOUT;
915  }
916 
917  br_info[num_brs].trigger_action_flag =
918  conf_get_value_table_on_off (ini_getstr (ini, sec_name, "TRIGGER_ACTION", "ON", &lineno));
919  if (br_info[num_brs].trigger_action_flag < 0)
920  {
921  errcode = PARAM_BAD_VALUE;
922  goto conf_error;
923  }
924 
925  tmp_int = conf_get_value_table_on_off (ini_getstr (ini, sec_name, "ENABLE_MONITOR_SERVER", "ON", &lineno));
926  if (tmp_int < 0)
927  {
928  errcode = PARAM_BAD_VALUE;
929  goto conf_error;
930  }
931  else
932  {
933  br_info[num_brs].monitor_server_flag = tmp_int;
934  }
935 
936  br_info[num_brs].shard_flag = conf_get_value_table_on_off (ini_getstr (ini, sec_name, "SHARD", "OFF", &lineno));
937  if (br_info[num_brs].shard_flag < 0)
938  {
939  errcode = PARAM_BAD_VALUE;
940  goto conf_error;
941  }
942 
943  /* SHARD PHASE0 */
944  br_info[num_brs].proxy_shm_id = ini_gethex (ini, sec_name, "SHARD_PROXY_SHM_ID", 0, &lineno);
945 
946  strncpy_bufsize (br_info[num_brs].shard_db_name, ini_getstr (ini, sec_name, "SHARD_DB_NAME", DEFAULT_EMPTY_STRING,
947  &lineno));
948 
949  strncpy_bufsize (br_info[num_brs].shard_db_user, ini_getstr (ini, sec_name, "SHARD_DB_USER", DEFAULT_EMPTY_STRING,
950  &lineno));
951 
952  strncpy_bufsize (br_info[num_brs].shard_db_password, ini_getstr (ini, sec_name, "SHARD_DB_PASSWORD",
953  DEFAULT_EMPTY_STRING, &lineno));
954 
955  br_info[num_brs].num_proxy = ini_getuint (ini, sec_name, "SHARD_NUM_PROXY", DEFAULT_SHARD_NUM_PROXY, &lineno);
956 
957  if (br_info[num_brs].num_proxy > MAX_PROXY_NUM)
958  {
959  errcode = PARAM_BAD_VALUE;
960  goto conf_error;
961  }
962 
963  strcpy (br_info[num_brs].proxy_log_dir,
964  ini_getstr (ini, sec_name, "SHARD_PROXY_LOG_DIR", DEFAULT_SHARD_PROXY_LOG_DIR, &lineno));
965 
966  br_info[num_brs].proxy_log_mode =
968  (ini, sec_name, "SHARD_PROXY_LOG", DEFAULT_SHARD_PROXY_LOG_MODE, &lineno));
969  if (br_info[num_brs].proxy_log_mode < 0)
970  {
971  errcode = PARAM_BAD_VALUE;
972  goto conf_error;
973  }
974 
975  br_info[num_brs].max_client =
976  ini_getuint (ini, sec_name, "SHARD_MAX_CLIENTS", DEFAULT_SHARD_MAX_CLIENTS, &lineno);
977  if (br_info[num_brs].max_client > CLIENT_INFO_SIZE_LIMIT * br_info[num_brs].num_proxy)
978  {
979  errcode = PARAM_BAD_VALUE;
980  goto conf_error;
981  }
982 
983  strncpy_bufsize (br_info[num_brs].shard_connection_file, ini_getstr (ini, sec_name, "SHARD_CONNECTION_FILE",
984  "shard_connection.txt", &lineno));
985  if (br_info[num_brs].shard_connection_file[0] == '\0')
986  {
987  errcode = PARAM_BAD_VALUE;
988  goto conf_error;
989  }
990 
991  strncpy_bufsize (br_info[num_brs].shard_key_file, ini_getstr (ini, sec_name, "SHARD_KEY_FILE", "shard_key.txt",
992  &lineno));
993  if (br_info[num_brs].shard_key_file[0] == '\0')
994  {
995  errcode = PARAM_BAD_VALUE;
996  goto conf_error;
997  }
998 
999  br_info[num_brs].shard_key_modular =
1000  ini_getuint (ini, sec_name, "SHARD_KEY_MODULAR", DEFAULT_SHARD_KEY_MODULAR, &lineno);
1001  if (br_info[num_brs].shard_key_modular < 0)
1002  {
1003  errcode = PARAM_BAD_VALUE;
1004  goto conf_error;
1005  }
1006  strcpy (library_name, ini_getstr (ini, sec_name, "SHARD_KEY_LIBRARY_NAME", DEFAULT_EMPTY_STRING, &lineno));
1007 
1008  if (library_name[0] != 0 && !IS_ABS_PATH (library_name))
1009  {
1010  envvar_libdir_file (br_info[num_brs].shard_key_library_name, BROKER_PATH_MAX, library_name);
1011  }
1012  else
1013  {
1014  snprintf (br_info[num_brs].shard_key_library_name, BROKER_PATH_MAX, "%s", library_name);
1015  }
1016 
1017  strcpy (br_info[num_brs].shard_key_function_name,
1018  ini_getstr (ini, sec_name, "SHARD_KEY_FUNCTION_NAME", DEFAULT_EMPTY_STRING, &lineno));
1019 
1020  strncpy_bufsize (size_str, ini_getstr (ini, sec_name, "SHARD_PROXY_LOG_MAX_SIZE",
1022  br_info[num_brs].proxy_log_max_size = (int) ut_size_string_to_kbyte (size_str, "K");
1023  if (br_info[num_brs].proxy_log_max_size < 0)
1024  {
1025  errcode = PARAM_BAD_VALUE;
1026  goto conf_error;
1027  }
1028  else if (br_info[num_brs].proxy_log_max_size > MAX_PROXY_LOG_MAX_SIZE)
1029  {
1030  errcode = PARAM_BAD_RANGE;
1031  goto conf_error;
1032  }
1033 
1034  br_info[num_brs].proxy_max_prepared_stmt_count =
1035  ini_getint (ini, sec_name, "SHARD_MAX_PREPARED_STMT_COUNT", DEFAULT_PROXY_MAX_PREPARED_STMT_COUNT, &lineno);
1036  if (br_info[num_brs].proxy_max_prepared_stmt_count < 1)
1037  {
1038  errcode = PARAM_BAD_VALUE;
1039  goto conf_error;
1040  }
1041 
1042  br_info[num_brs].ignore_shard_hint =
1043  conf_get_value_table_on_off (ini_getstr (ini, sec_name, "SHARD_IGNORE_HINT", "OFF", &lineno));
1044  if (br_info[num_brs].ignore_shard_hint < 0)
1045  {
1046  errcode = PARAM_BAD_VALUE;
1047  goto conf_error;
1048  }
1049 
1050  strncpy_bufsize (time_str, ini_getstr (ini, sec_name, "SHARD_PROXY_TIMEOUT", DEFAULT_SHARD_PROXY_TIMEOUT,
1051  &lineno));
1052  br_info[num_brs].proxy_timeout = (int) ut_time_string_to_sec (time_str, "sec");
1053  if (br_info[num_brs].proxy_timeout < 0)
1054  {
1055  errcode = PARAM_BAD_VALUE;
1056  goto conf_error;
1057  }
1058  else if (br_info[num_brs].proxy_timeout > MAX_PROXY_TIMEOUT_LIMIT)
1059  {
1060  errcode = PARAM_BAD_RANGE;
1061  goto conf_error;
1062  }
1063 
1064  strncpy_bufsize (time_str, ini_getstr (ini, sec_name, "SHARD_PROXY_CONN_WAIT_TIMEOUT",
1066  br_info[num_brs].proxy_conn_wait_timeout = (int) ut_time_string_to_sec (time_str, "sec");
1067  if (br_info[num_brs].proxy_conn_wait_timeout < 0)
1068  {
1069  errcode = PARAM_BAD_VALUE;
1070  goto conf_error;
1071  }
1072  else if (br_info[num_brs].proxy_conn_wait_timeout > MAX_PROXY_TIMEOUT_LIMIT)
1073  {
1074  errcode = PARAM_BAD_RANGE;
1075  goto conf_error;
1076  }
1077 
1078  num_brs++;
1079  }
1080 
1081  ini_parser_free (ini);
1082  ini = NULL;
1083 
1084  if (master_shm_id <= 0)
1085  {
1086  PRINTERROR ("config error, invalid MASTER_SHM_ID\n");
1087  error_flag = TRUE;
1088  }
1089  else
1090  {
1091  error_flag = FALSE;
1092  }
1093 
1094  if (admin_flag)
1095  {
1096  for (i = 0; i < num_brs; i++)
1097  {
1098  if (master_shm_id == br_info[i].appl_server_shm_id)
1099  {
1100  PRINTERROR ("config error, MASTER_SHM_ID = broker %s APPL_SERVER_SHM_ID\n", br_info[i].name);
1101  error_flag = TRUE;
1102  }
1103  for (j = i + 1; j < num_brs; j++)
1104  {
1105  if (strcmp (br_info[i].name, br_info[j].name) == 0)
1106  {
1107  PRINTERROR ("duplicated broker name : %s\n", br_info[i].name);
1108  error_flag = TRUE;
1109  }
1110  if (br_info[i].appl_server_shm_id == br_info[j].appl_server_shm_id)
1111  {
1112  PRINTERROR ("duplicated APPL_SERVER_SHM_ID (broker %s, %s)\n", br_info[i].name, br_info[j].name);
1113  error_flag = TRUE;
1114  }
1115  }
1116  } /* end for (i) */
1117 
1118  for (i = 0; i < num_brs; i++)
1119  {
1120  if (br_info[i].port <= 0 || br_info[i].port > PORT_NUM_LIMIT)
1121  {
1122  PRINTERROR ("config error, %s, BROKER_PORT\n", br_info[i].name);
1123  error_flag = TRUE;
1124  }
1125  if (br_info[i].appl_server_min_num > br_info[i].appl_server_max_num)
1126  {
1127  br_info[i].appl_server_max_num = br_info[i].appl_server_min_num;
1128  }
1129  if (br_info[i].appl_server_shm_id <= 0)
1130  {
1131  PRINTERROR ("config error, %s, APPL_SHM_ID\n", br_info[i].name);
1132  error_flag = TRUE;
1133 #if defined (_UC_ADMIN_SO_)
1134  break;
1135 #endif
1136  }
1137 
1138  if (br_info[i].shard_flag == ON)
1139  {
1140  if (br_info[i].proxy_shm_id <= 0)
1141  {
1142  PRINTERROR ("config error, %s, SHARD_PROXY_SHM_ID\n", br_info[i].name);
1143  error_flag = TRUE;
1144  }
1145  if (br_info[i].shard_db_name[0] == '\0')
1146  {
1147  PRINTERROR ("config error, %s, SHARD_DB_NAME\n", br_info[i].name);
1148  error_flag = TRUE;
1149  }
1150  }
1151  } /* end for (i) */
1152  } /* end if (admin_flag) */
1153  if (error_flag == TRUE)
1154  {
1155  return -1;
1156  }
1157 
1158  if (admin_flag)
1159  {
1160  if (check_port_number (br_info, num_brs) < 0)
1161  {
1162  return -1;
1163  }
1164 
1165  for (i = 0; i < num_brs; i++)
1166  {
1167  dir_repath (br_info[i].access_log_file, CONF_LOG_FILE_LEN);
1168  dir_repath (br_info[i].error_log_file, CONF_LOG_FILE_LEN);
1169  if (br_info[i].source_env[0] != '\0')
1170  {
1171  dir_repath (br_info[i].source_env, CONF_LOG_FILE_LEN);
1172  }
1173  if (br_info[i].acl_file[0] != '\0')
1174  {
1175  dir_repath (br_info[i].acl_file, CONF_LOG_FILE_LEN);
1176  }
1177  if (br_info[i].proxy_log_dir[0] != '\0')
1178  {
1179  dir_repath (br_info[i].proxy_log_dir, CONF_LOG_FILE_LEN);
1180  }
1181  }
1182  if (admin_log_file != NULL)
1183  {
1184  dir_repath (admin_log_file, CONF_LOG_FILE_LEN);
1185  }
1186  }
1187 
1188 #if defined (WINDOWS)
1189  for (i = 0; i < num_brs; i++)
1190  {
1191  if (appl_server_port_assigned[i] == FALSE)
1192  {
1193  br_info[i].appl_server_port = br_info[i].port + 1;
1194  }
1195  }
1196 #endif
1197 
1198  *num_broker = num_brs;
1199  *br_shm_id = master_shm_id;
1200 
1201  conf_file_has_been_loaded (conf_file);
1202 
1203  return 0;
1204 
1205 conf_error:
1206 #if !defined (_UC_ADMIN_SO_)
1207  PRINTERROR ("Line %d in config file %s : %s\n", lineno, conf_file, tbl_conf_err_msg[errcode]);
1208 #endif
1209  if (ini)
1210  {
1211  ini_parser_free (ini);
1212  }
1213 
1214  return -1;
1215 }
1216 
1217 /*
1218  * broker_config_read - read and parse broker configurations
1219  * return: 0 or -1 if fail
1220  * br_info(in/out):
1221  * num_broker(out):
1222  * br_shm_id(out):
1223  * admin_log_file(out):
1224  * admin_flag(in):
1225  * admin_err_msg(in):
1226  */
1227 int
1228 broker_config_read (const char *conf_file, T_BROKER_INFO * br_info, int *num_broker, int *br_shm_id,
1229  char *admin_log_file, char admin_flag, bool * acl_flag, char *acl_file, char *admin_err_msg)
1230 {
1231  int err = 0;
1232  bool is_conf_found = false;
1233  char default_conf_file_path[BROKER_PATH_MAX], file_name[BROKER_PATH_MAX], file_being_dealt_with[BROKER_PATH_MAX];
1234  struct stat stat_buf;
1235 
1236 #if !defined (_UC_ADMIN_SO_)
1237  admin_flag = 1;
1238  admin_err_msg = NULL;
1239 #endif /* !_UC_ADMIN_SO_ */
1240 
1241  memset (br_info, 0, sizeof (T_BROKER_INFO) * MAX_BROKER_NUM);
1242 
1243  get_cubrid_file (FID_CUBRID_BROKER_CONF, default_conf_file_path, BROKER_PATH_MAX);
1244 
1245  basename_r (default_conf_file_path, file_name, BROKER_PATH_MAX);
1246 
1247  if (conf_file == NULL)
1248  {
1249  /* use environment variable's value if exist */
1250  conf_file = envvar_get ("BROKER_CONF_FILE");
1251 
1252  if (conf_file != NULL && *conf_file == '\0')
1253  {
1254  conf_file = NULL;
1255  }
1256  }
1257 
1258  if (conf_file != NULL)
1259  {
1260  strcpy (file_being_dealt_with, conf_file);
1261  }
1262  else
1263  {
1264  /* $CUBRID/conf/cubrid_broker.conf */
1265  strcpy (file_being_dealt_with, default_conf_file_path);
1266  }
1267  if (stat (file_being_dealt_with, &stat_buf) == 0)
1268  {
1269  is_conf_found = true;
1270  err =
1271  broker_config_read_internal (file_being_dealt_with, br_info, num_broker, br_shm_id, admin_log_file, admin_flag,
1272  acl_flag, acl_file, admin_err_msg);
1273  }
1274 
1275  if (!is_conf_found)
1276  {
1277  err = -1;
1278  PRINT_AND_LOG_ERR_MSG ("Error: can't find %s\n", (conf_file == NULL) ? default_conf_file_path : conf_file);
1279  }
1280 
1281  return err;
1282 }
1283 
1284 /*
1285  * broker_config_dump - print out current broker configurations
1286  * return: none
1287  * fp(in):
1288  */
1289 void
1290 broker_config_dump (FILE * fp, const T_BROKER_INFO * br_info, int num_broker, int br_shm_id)
1291 {
1292  int i;
1293  const char *tmp_str;
1294 
1295  if (br_info == NULL || num_broker <= 0 || num_broker > MAX_BROKER_NUM || br_shm_id <= 0)
1296  return;
1297 
1298  fprintf (fp, "#\n# cubrid_broker.conf\n#\n\n");
1299  fprintf (fp, "# broker parameters were loaded from the files\n");
1300 
1301  for (i = 0; i < MAX_NUM_OF_CONF_FILE_LOADED; i++)
1302  {
1303  if (conf_file_loaded[i] != NULL)
1304  {
1305  fprintf (fp, "# %s\n", conf_file_loaded[i]);
1306  }
1307  }
1308 
1309  fprintf (fp, "\n# broker parameters\n");
1310 
1311  fprintf (fp, "[broker]\n");
1312  fprintf (fp, "MASTER_SHM_ID\t=%x\n\n", br_shm_id);
1313 
1314  for (i = 0; i < num_broker; i++)
1315  {
1316  fprintf (fp, "[%%%s]\n", br_info[i].name);
1317  tmp_str = get_conf_string (br_info[i].service_flag, tbl_on_off);
1318  if (tmp_str)
1319  {
1320  fprintf (fp, "SERVICE\t\t\t=%s\n", tmp_str);
1321  }
1322  tmp_str = get_conf_string (br_info[i].appl_server, tbl_appl_server);
1323  if (tmp_str)
1324  {
1325  fprintf (fp, "APPL_SERVER\t\t=%s\n", tmp_str);
1326  }
1327  fprintf (fp, "MIN_NUM_APPL_SERVER\t=%d\n", br_info[i].appl_server_min_num);
1328  fprintf (fp, "MAX_NUM_APPL_SERVER\t=%d\n", br_info[i].appl_server_max_num);
1329 #if defined (WINDOWS)
1330  fprintf (fp, "APPL_SERVER_PORT\t=%d\n", br_info[i].appl_server_port);
1331 #endif
1332  fprintf (fp, "APPL_SERVER_SHM_ID\t=%x\n", br_info[i].appl_server_shm_id);
1333  fprintf (fp, "SSL\t\t\t=%s\n", br_info[i].use_SSL ? "ON" : "OFF");
1334  fprintf (fp, "APPL_SERVER_MAX_SIZE\t=%d\n", br_info[i].appl_server_max_size / ONE_K);
1335  fprintf (fp, "SESSION_TIMEOUT\t\t=%d\n", br_info[i].session_timeout);
1336  fprintf (fp, "LOG_DIR\t\t\t=%s\n", br_info[i].log_dir);
1337  fprintf (fp, "SLOW_LOG_DIR\t\t=%s\n", br_info[i].slow_log_dir);
1338  fprintf (fp, "ERROR_LOG_DIR\t\t=%s\n", br_info[i].err_log_dir);
1339  tmp_str = get_conf_string (br_info[i].log_backup, tbl_on_off);
1340  if (tmp_str)
1341  {
1342  fprintf (fp, "LOG_BACKUP\t\t=%s\n", tmp_str);
1343  }
1344  fprintf (fp, "SOURCE_ENV\t\t=%s\n", br_info[i].source_env);
1345  tmp_str = get_conf_string (br_info[i].sql_log_mode, tbl_sql_log_mode);
1346  if (tmp_str)
1347  {
1348  fprintf (fp, "SQL_LOG\t\t\t=%s\n", tmp_str);
1349  }
1350  tmp_str = get_conf_string (br_info[i].slow_log_mode, tbl_on_off);
1351  if (tmp_str)
1352  {
1353  fprintf (fp, "SLOW_LOG\t\t=%s\n", tmp_str);
1354  }
1355  fprintf (fp, "SQL_LOG_MAX_SIZE\t=%d\n", br_info[i].sql_log_max_size);
1356  fprintf (fp, "LONG_QUERY_TIME\t\t=%.2f\n", (br_info[i].long_query_time / 1000.0));
1357  fprintf (fp, "LONG_TRANSACTION_TIME\t=%.2f\n", (br_info[i].long_transaction_time / 1000.0));
1358  tmp_str = get_conf_string (br_info[i].auto_add_appl_server, tbl_on_off);
1359  if (tmp_str)
1360  {
1361  fprintf (fp, "AUTO_ADD_APPL_SERVER\t=%s\n", tmp_str);
1362  }
1363  fprintf (fp, "JOB_QUEUE_SIZE\t\t=%d\n", br_info[i].job_queue_size);
1364  fprintf (fp, "TIME_TO_KILL\t\t=%d\n", br_info[i].time_to_kill);
1365  tmp_str = get_conf_string (br_info[i].access_log, tbl_on_off);
1366  if (tmp_str)
1367  {
1368  fprintf (fp, "ACCESS_LOG\t\t=%s\n", tmp_str);
1369  }
1370  fprintf (fp, "ACCESS_LOG_MAX_SIZE\t=%dK\n", (br_info[i].access_log_max_size));
1371  fprintf (fp, "ACCESS_LOG_DIR\t\t=%s\n", br_info[i].access_log_dir);
1372  fprintf (fp, "ACCESS_LIST\t\t=%s\n", br_info[i].acl_file);
1373  fprintf (fp, "MAX_STRING_LENGTH\t=%d\n", br_info[i].max_string_length);
1374  tmp_str = get_conf_string (br_info[i].keep_connection, tbl_keep_connection);
1375  if (tmp_str)
1376  {
1377  fprintf (fp, "KEEP_CONNECTION\t\t=%s\n", tmp_str);
1378  }
1379  tmp_str = get_conf_string (br_info[i].statement_pooling, tbl_on_off);
1380  if (tmp_str)
1381  {
1382  fprintf (fp, "STATEMENT_POOLING\t=%s\n", tmp_str);
1383  }
1384  tmp_str = get_conf_string (br_info[i].cci_pconnect, tbl_on_off);
1385  if (tmp_str)
1386  {
1387  fprintf (fp, "CCI_PCONNECT\t\t=%s\n", tmp_str);
1388  }
1389  tmp_str = get_conf_string (br_info[i].access_mode, tbl_access_mode);
1390  if (tmp_str)
1391  {
1392  fprintf (fp, "ACCESS_MODE\t\t=%s\n", tmp_str);
1393  }
1394  tmp_str = get_conf_string (br_info[i].connect_order, tbl_connect_order);
1395  if (tmp_str)
1396  {
1397  fprintf (fp, "CONNECT_ORDER\t\t=%s\n", tmp_str);
1398  }
1399 
1400  fprintf (fp, "MAX_NUM_DELAYED_HOSTS_LOOKUP\t=%d\n", br_info[i].max_num_delayed_hosts_lookup);
1401 
1402  fprintf (fp, "RECONNECT_TIME\t\t=%d\n", br_info[i].cas_rctime);
1403 
1404  tmp_str = get_conf_string (br_info[i].replica_only_flag, tbl_on_off);
1405  if (tmp_str)
1406  {
1407  fprintf (fp, "REPLICA_ONLY\t\t=%s\n", tmp_str);
1408  }
1409 
1410  tmp_str = get_conf_string (br_info[i].trigger_action_flag, tbl_on_off);
1411  if (tmp_str)
1412  {
1413  fprintf (fp, "TRIGGER_ACTION\t\t=%s\n", tmp_str);
1414  }
1415 
1416  fprintf (fp, "MAX_QUERY_TIMEOUT\t=%d\n", br_info[i].query_timeout);
1417 
1418  if (br_info[i].appl_server == APPL_SERVER_CAS_MYSQL || br_info[i].appl_server == APPL_SERVER_CAS_MYSQL51)
1419  {
1420  fprintf (fp, "MYSQL_READ_TIMEOUT\t=%d\n", br_info[i].mysql_read_timeout);
1421  fprintf (fp, "MYSQL_KEEPALIVE_INTERVAL\t=%d\n", br_info[i].mysql_keepalive_interval);
1422  }
1423 
1424  tmp_str = get_conf_string (br_info[i].monitor_hang_flag, tbl_on_off);
1425  if (tmp_str)
1426  {
1427  fprintf (fp, "ENABLE_MONITOR_HANG\t=%s\n", tmp_str);
1428  }
1429  tmp_str = get_conf_string (br_info[i].monitor_server_flag, tbl_on_off);
1430  if (tmp_str)
1431  {
1432  fprintf (fp, "ENABLE_MONITOR_SERVER\t=%s\n", tmp_str);
1433  }
1434  fprintf (fp, "REJECTED_CLIENTS_COUNT\t=%d\n", br_info[i].reject_client_count);
1435 
1436  tmp_str = get_conf_string (br_info[i].stripped_column_name, tbl_on_off);
1437  if (tmp_str)
1438  {
1439  fprintf (fp, "STRIPPED_COLUMN_NAME\t=%s\n", tmp_str);
1440  }
1441 
1442  tmp_str = get_conf_string (br_info[i].cache_user_info, tbl_on_off);
1443  if (tmp_str)
1444  {
1445  fprintf (fp, "CACHE_USER_INFO\t\t=%s\n", tmp_str);
1446  }
1447 
1448 #if !defined (WINDOWS)
1449  fprintf (fp, "SQL_LOG2\t\t=%d\n", br_info[i].sql_log2);
1450 #endif
1451  fprintf (fp, "BROKER_PORT\t\t\t=%d\n", br_info[i].port);
1452  fprintf (fp, "APPL_SERVER_NUM\t\t=%d\n", br_info[i].appl_server_num);
1453  fprintf (fp, "APPL_SERVER_MAX_SIZE_HARD_LIMIT\t=%d\n", br_info[i].appl_server_hard_limit / ONE_K);
1454  fprintf (fp, "MAX_PREPARED_STMT_COUNT\t=%d\n", br_info[i].max_prepared_stmt_count);
1455  fprintf (fp, "PREFERRED_HOSTS\t\t=%s\n", br_info[i].preferred_hosts);
1456 
1457  tmp_str = get_conf_string (br_info[i].jdbc_cache, tbl_on_off);
1458  if (tmp_str)
1459  {
1460  fprintf (fp, "JDBC_CACHE\t\t=%s\n", tmp_str);
1461  }
1462 
1463  tmp_str = get_conf_string (br_info[i].jdbc_cache_only_hint, tbl_on_off);
1464  if (tmp_str)
1465  {
1466  fprintf (fp, "JDBC_CACHE_HINT_ONLY\t=%s\n", tmp_str);
1467  }
1468 
1469  fprintf (fp, "JDBC_CACHE_LIFE_TIME\t=%d\n", br_info[i].jdbc_cache_life_time);
1470  tmp_str = get_conf_string (br_info[i].cci_default_autocommit, tbl_on_off);
1471  if (tmp_str)
1472  {
1473  fprintf (fp, "CCI_DEFAULT_AUTOCOMMIT\t=%s\n", tmp_str);
1474  }
1475 
1476  fprintf (fp, "MONITOR_HANG_INTERVAL\t=%d\n", br_info[i].monitor_hang_interval);
1477  fprintf (fp, "HANG_TIMEOUT\t\t=%d\n", br_info[i].hang_timeout);
1478  get_conf_string (br_info[i].reject_client_flag, tbl_on_off);
1479  if (tmp_str)
1480  {
1481  fprintf (fp, "REJECT_CLIENT_FLAG\t=%s\n", tmp_str);
1482  }
1483 
1484  if (br_info[i].shard_flag == OFF)
1485  {
1486  fprintf (fp, "\n");
1487  continue;
1488  }
1489 
1490  fprintf (fp, "SHARD_DB_NAME\t\t=%s\n", br_info[i].shard_db_name);
1491  fprintf (fp, "SHARD_DB_USER\t\t=%s\n", br_info[i].shard_db_user);
1492 
1493  fprintf (fp, "SHARD_NUM_PROXY\t\t=%d\n", br_info[i].num_proxy);
1494  fprintf (fp, "SHARD_PROXY_LOG_DIR\t\t=%s\n", br_info[i].proxy_log_dir);
1495  tmp_str = get_conf_string (br_info[i].proxy_log_mode, tbl_proxy_log_mode);
1496  if (tmp_str)
1497  {
1498  fprintf (fp, "SHARD_PROXY_LOG\t\t\t=%s\n", tmp_str);
1499  }
1500  fprintf (fp, "SHARD_MAX_CLIENTS\t\t=%d\n", br_info[i].max_client);
1501 
1502  fprintf (fp, "SHARD_CONNECTION_FILE\t\t=%s\n", br_info[i].shard_connection_file);
1503  fprintf (fp, "SHARD_KEY_FILE\t\t=%s\n", br_info[i].shard_key_file);
1504 
1505  fprintf (fp, "SHARD_KEY_MODULAR\t\t=%d\n", br_info[i].shard_key_modular);
1506  fprintf (fp, "SHARD_KEY_LIBRARY_NAME\t\t=%s\n", br_info[i].shard_key_library_name);
1507  fprintf (fp, "SHARD_KEY_FUNCTION_NAME\t\t=%s\n", br_info[i].shard_key_function_name);
1508  fprintf (fp, "SHARD_PROXY_LOG_MAX_SIZE\t\t=%d\n", br_info[i].proxy_log_max_size);
1509  fprintf (fp, "SHARD_MAX_PREPARED_STMT_COUNT\t\t=%d\n", br_info[i].proxy_max_prepared_stmt_count);
1510  tmp_str = get_conf_string (br_info[i].ignore_shard_hint, tbl_on_off);
1511  if (tmp_str)
1512  {
1513  fprintf (fp, "SHARD_IGNORE_HINT\t\t=%s\n", tmp_str);
1514  }
1515  fprintf (fp, "SHARD_PROXY_TIMEOUT\t\t=%d\n", br_info[i].proxy_timeout);
1516  fprintf (fp, "SHARD_PROXY_SHM_ID\t\t=%d\n", br_info[i].proxy_shm_id);
1517 
1518  shard_metadata_dump (fp, br_info[i].proxy_shm_id);
1519  shard_shm_dump_appl_server (fp, br_info[i].proxy_shm_id);
1520 
1521  fprintf (fp, "\n");
1522  }
1523 
1524  return;
1525 }
1526 
1527 /*
1528  * conf_get_value_table_on_off - get value from on/off table
1529  * return: 0, 1 or -1 if fail
1530  * value(in):
1531  */
1532 int
1533 conf_get_value_table_on_off (const char *value)
1534 {
1535  return (get_conf_value (value, tbl_on_off));
1536 }
1537 
1538 /*
1539  * conf_get_value_sql_log_mode - get value from sql_log_mode table
1540  * return: -1 if fail
1541  * value(in):
1542  */
1543 int
1544 conf_get_value_sql_log_mode (const char *value)
1545 {
1546  return (get_conf_value (value, tbl_sql_log_mode));
1547 }
1548 
1549 /*
1550  * conf_get_value_keep_con - get value from keep_connection table
1551  * return: -1 if fail
1552  * value(in):
1553  */
1554 int
1555 conf_get_value_keep_con (const char *value)
1556 {
1557  return (get_conf_value (value, tbl_keep_connection));
1558 }
1559 
1560 /*
1561  * conf_get_value_access_mode - get value from access_mode table
1562  * return: -1 if fail
1563  * value(in):
1564  */
1565 int
1566 conf_get_value_access_mode (const char *value)
1567 {
1568  return (get_conf_value (value, tbl_access_mode));
1569 }
1570 
1571 /*
1572  * conf_get_value_connect_order - get value from connect_order table
1573  * return: -1 if fail
1574  * value(in):
1575  */
1576 int
1577 conf_get_value_connect_order (const char *value)
1578 {
1579  return (get_conf_value (value, tbl_connect_order));
1580 }
1581 
1582 /*
1583  * conf_get_value_proxy_log_mode - get value from proxy_log_mode table
1584  * return: -1 if fail
1585  * value(in):
1586  */
1587 int
1589 {
1590  return (get_conf_value (value, tbl_proxy_log_mode));
1591 }
int proxy_shm_id
Definition: shard_proxy.c:46
char trigger_action_flag
int long_transaction_time
char monitor_hang_flag
#define APPL_SERVER_CAS_TYPE_NAME
Definition: broker_config.h:44
#define DEFAULT_SHARD_NUM_PROXY
Definition: broker_config.h:94
#define APPL_SERVER_CAS
Definition: broker_config.h:34
char jdbc_cache_only_hint
#define DEFAULT_MYSQL_KEEPALIVE_INTERVAL
Definition: broker_config.c:60
char * trim(char *str)
Definition: porting.c:2260
char ** key
Definition: ini_parser.h:40
#define DEFAULT_LOG_DIR
const char * ini_getstr(INI_TABLE *ini, const char *sec, const char *key, const char *def, int *lineno)
Definition: ini_parser.c:865
#define DEFAULT_LONG_QUERY_TIME
Definition: broker_config.h:80
static T_CONF_TABLE tbl_appl_server[]
int ini_gethex(INI_TABLE *ini, const char *sec, const char *key, int def, int *lineno)
Definition: ini_parser.c:993
#define PRINT_AND_LOG_ERR_MSG(...)
Definition: util_func.h:49
static int broker_config_read_internal(const char *conf_file, T_BROKER_INFO *br_info, int *num_broker, int *br_shm_id, char *admin_log_file, char admin_flag, bool *acl_flag, char *acl_file, char *admin_err_msg)
double ut_time_string_to_sec(const char *time_str, const char *default_unit)
Definition: broker_util.c:643
static const char * get_conf_string(int value, T_CONF_TABLE *conf_table)
char stripped_column_name
Definition: cas.c:168
char reject_client_flag
#define MAX_NUM_OF_CONF_FILE_LOADED
char * conf_path
#define JOB_QUEUE_MAX_SIZE
Definition: broker_shm.h:116
#define MAKE_FILEPATH(dest, src, dest_len)
Definition: broker_util.h:49
static const char SECTION_NAME[]
#define BROKER_PATH_MAX
Definition: broker_config.h:91
#define SQL_LOG2_NONE
Definition: cas_sql_log2.h:29
int max_num_delayed_hosts_lookup
#define DEFAULT_TIME_TO_KILL
Definition: broker_config.h:71
static void conf_file_has_been_loaded(const char *conf_path)
#define DEFAULT_JDBC_CACHE_LIFE_TIME
Definition: broker_config.c:67
int conf_get_value_access_mode(const char *value)
#define PRINTERROR(...)
static T_CONF_TABLE tbl_on_off[]
int proxy_conn_wait_timeout
#define DEFAULT_AS_MAX_NUM
Definition: broker_config.h:55
#define APPL_SERVER_CAS_MYSQL_TYPE_NAME
Definition: broker_config.h:46
int mysql_keepalive_interval
char * envvar_libdir_file(char *path, size_t size, const char *filename)
#define DEFAULT_AS_MIN_NUM
Definition: broker_config.h:54
#define DEFAULT_EMPTY_STRING
Definition: broker_config.c:63
#define DEFAULT_MAX_NUM_DELAYED_HOSTS_LOOKUP
Definition: broker_config.h:85
void ini_parser_free(INI_TABLE *ini)
Definition: ini_parser.c:683
#define LONG_QUERY_TIME_LIMIT
Definition: broker_shm.h:164
int appl_server_hard_limit
#define CLIENT_INFO_SIZE_LIMIT
INI_TABLE * ini_parser_load(const char *ininame)
Definition: ini_parser.c:569
#define DEFAULT_KEEP_CONNECTION
Definition: broker_config.c:66
#define TRUE
Definition: broker_config.c:81
#define BROKER_INFO_PATH_MAX
#define APPL_SERVER_CAS_ORACLE_TYPE_NAME
Definition: broker_config.h:45
char * get_cubrid_file(T_CUBRID_FILE_ID fid, char *buf, size_t len)
#define APPL_SERVER_CAS_MYSQL
Definition: broker_config.h:37
#define APPL_SERVER_CAS_ORACLE
Definition: broker_config.h:35
int broker_config_read(const char *conf_file, T_BROKER_INFO *br_info, int *num_broker, int *br_shm_id, char *admin_log_file, char admin_flag, bool *acl_flag, char *acl_file, char *admin_err_msg)
int jdbc_cache_life_time
#define MAX_BROKER_NUM
Definition: broker_config.h:50
int ini_getint(INI_TABLE *ini, const char *sec, const char *key, int def, int *lineno)
Definition: ini_parser.c:885
int ini_findsec(INI_TABLE *ini, const char *sec)
Definition: ini_parser.c:697
#define DEFAULT_SHARD_PROXY_LOG_MAX_SIZE
Definition: broker_config.h:97
#define DEFAULT_SHARD_PROXY_LOG_MODE
Definition: broker_config.c:74
#define assert(x)
char * ini_getsecname(INI_TABLE *ini, int n, int *lineno)
Definition: ini_parser.c:729
#define MAX_ACCESS_LOG_MAX_SIZE
Definition: broker_config.h:84
int nsec
Definition: ini_parser.h:39
#define DEFAULT_SHARD_PROXY_TIMEOUT
Definition: broker_config.c:76
static T_CONF_TABLE tbl_proxy_log_mode[]
char cci_default_autocommit
static T_CONF_TABLE tbl_sql_log_mode[]
#define MAX_QUERY_TIMEOUT_LIMIT
Definition: broker_shm.h:163
#define DEFAULT_SERVER_HARD_LIMIT
Definition: broker_config.h:69
char monitor_server_flag
char stripped_column_name
#define APPL_SERVER_CAS_MYSQL51_TYPE_NAME
Definition: broker_config.h:47
#define SQL_LOG2_MAX
Definition: cas_sql_log2.h:32
static char * conf_file_loaded[MAX_NUM_OF_CONF_FILE_LOADED]
int size
Definition: ini_parser.h:37
#define LONG_TRANSACTION_TIME_LIMIT
Definition: broker_shm.h:165
static T_CONF_TABLE tbl_keep_connection[]
#define DEFAULT_PROXY_MAX_PREPARED_STMT_COUNT
Definition: broker_config.c:68
static T_CONF_TABLE tbl_access_mode[]
int max_prepared_stmt_count
double ut_size_string_to_kbyte(const char *size_str, const char *default_unit)
Definition: broker_util.c:584
#define DEFAULT_SHARD_KEY_MODULAR
Definition: broker_config.c:75
#define NULL
Definition: freelistheap.h:34
int ini_getuint_max(INI_TABLE *ini, const char *sec, const char *key, int def, int max, int *lineno)
Definition: ini_parser.c:968
#define strncpy_bufsize(buf, str)
Definition: porting.h:340
#define DEFAULT_SQL_LOG_MAX_SIZE
Definition: broker_config.h:79
#define BROKER_NAME_LEN
Definition: broker_config.h:87
#define DEFAULT_SHARD_PROXY_CONN_WAIT_TIMEOUT
Definition: broker_config.c:77
#define MIN_MYSQL_KEEPALIVE_INTERVAL
Definition: broker_shm.h:173
#define DEFAULT_SERVER_MAX_SIZE
Definition: broker_config.h:66
char auto_add_appl_server
#define MAX_PROXY_LOG_MAX_SIZE
Definition: broker_config.h:98
#define err(fd,...)
Definition: porting.h:431
#define CUBRID_BASE_DIR
static int check_port_number(T_BROKER_INFO *br_info, int num_brs)
#define DEFAULT_MONITOR_HANG_INTERVAL
Definition: broker_config.c:70
#define DEFAULT_LONG_TRANSACTION_TIME
Definition: broker_config.h:81
char ignore_shard_hint
int conf_get_value_table_on_off(const char *value)
#define DEFAULT_SLOW_LOG_DIR
int monitor_hang_interval
#define PORT_NUM_LIMIT
Definition: broker_config.c:79
#define DEFAULT_SESSION_TIMEOUT
Definition: broker_config.c:57
char admin_err_msg[ADMIN_ERR_MSG_SIZE]
const char * envvar_get(const char *name)
int conf_get_value_proxy_log_mode(const char *value)
static int get_conf_value(const char *string, T_CONF_TABLE *conf_table)
void shard_metadata_dump(FILE *fp, int shmid)
int appl_server_max_size
#define DEFAULT_APPL_SERVER
Definition: broker_config.c:62
static const char * tbl_conf_err_msg[]
int conf_get_value_keep_con(const char *value)
int conf_get_value_connect_order(const char *value)
int proxy_max_prepared_stmt_count
const char * conf_str
Definition: broker_config.c:87
#define DEFAULT_SSL_MODE
#define strlen(s1)
Definition: intl_support.c:43
void shard_shm_dump_appl_server(FILE *fp, int shmid)
Definition: shard_shm.c:651
#define DEFAULT_JOB_QUEUE_SIZE
Definition: broker_config.c:61
void dir_repath(char *path, size_t path_len)
#define MAX_PROXY_NUM
Definition: broker_shm.h:135
#define DEFAULT_ADMIN_LOG_FILE
Definition: broker_config.c:56
#define DEFAULT_SHARD_MAX_CLIENTS
Definition: broker_config.h:95
int query_timeout
Definition: cas.c:160
#define FALSE
Definition: broker_config.c:82
static T_CONF_TABLE tbl_connect_order[]
#define ONE_K
Definition: porting.h:62
char statement_pooling
const char * broker_keywords[]
int i
Definition: dynamic_load.c:954
#define IS_ABS_PATH(p)
Definition: porting.h:357
#define DEFAULT_HANG_TIMEOUT
Definition: broker_config.c:71
#define CONF_LOG_FILE_LEN
Definition: broker_config.h:52
char * strdup(const char *str)
Definition: porting.c:901
int appl_server_shm_id
Definition: shard_proxy.c:42
#define APPL_SERVER_CAS_MYSQL51
Definition: broker_config.h:36
#define DEFAULT_ERR_DIR
#define DEFAULT_CAS_MAX_PREPARED_STMT_COUNT
Definition: broker_config.c:69
#define DEFAULT_ACCESS_LOG_MAX_SIZE
Definition: broker_config.h:82
#define MAX_SQL_LOG_MAX_SIZE
Definition: broker_config.h:83
int conf_get_value_sql_log_mode(const char *value)
int * lineno
Definition: ini_parser.h:42
void broker_config_dump(FILE *fp, const T_BROKER_INFO *br_info, int num_broker, int br_shm_id)
#define DEFAULT_RECONNECT_TIME
Definition: broker_config.c:72
#define DEFAULT_SQL_LOG_MODE
Definition: broker_config.c:65
#define MAX_PROXY_TIMEOUT_LIMIT
Definition: broker_shm.h:166
#define DEFAULT_SHARD_PROXY_LOG_DIR
#define DEFAULT_MAX_QUERY_TIMEOUT
Definition: broker_config.c:58
int broker_keywords_size
#define APPL_SERVER_NUM_LIMIT
Definition: broker_shm.h:137
int basename_r(const char *path, char *pathbuf, size_t buflen)
Definition: porting.c:1082
int ini_getuint(INI_TABLE *ini, const char *sec, const char *key, int def, int *lineno)
Definition: ini_parser.c:912
#define DEFAULT_MYSQL_READ_TIMEOUT
Definition: broker_config.c:59
#define DEFAULT_ACCESS_LOG_DIR
char * get_cubrid_home()