CUBRID Engine  latest
broker_admin.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_admin.c -
22  */
23 
24 #ident "$Id$"
25 
26 #include <stdio.h>
27 #include <stdlib.h>
28 #include <string.h>
29 #include <time.h>
30 #include <sys/types.h>
31 #include <sys/stat.h>
32 
33 #if defined(WINDOWS)
34 #include <direct.h>
35 #endif /* WINDOWS */
36 
37 #include "cas_common.h"
38 #include "broker_admin_pub.h"
39 #include "broker_config.h"
40 #include "broker_shm.h"
41 #include "broker_error.h"
42 
43 #include "broker_util.h"
44 #include "util_func.h"
45 #if defined(WINDOWS)
46 #include "broker_wsa_init.h"
47 #endif /* WINDOWS */
48 
49 #define TRUE 1
50 #define FALSE 0
51 
52 static void
53 admin_log_write (const char *log_file, const char *msg)
54 {
55  FILE *fp;
56  struct tm ct;
57  time_t ts;
58 
59  fp = fopen (log_file, "a");
60  if (fp != NULL)
61  {
62  ts = time (NULL);
63  memset (&ct, 0x0, sizeof (struct tm));
64  localtime_r (&ts, &ct);
65  fprintf (fp, "%d/%02d/%02d %02d:%02d:%02d %s\n", ct.tm_year + 1900, ct.tm_mon + 1, ct.tm_mday, ct.tm_hour,
66  ct.tm_min, ct.tm_sec, msg);
67  fclose (fp);
68  }
69  else
70  {
71  printf ("cannot open admin log file [%s]\n", log_file);
72  }
73 }
74 
75 int
76 main (int argc, char **argv)
77 {
79  char admin_log_file[BROKER_PATH_MAX];
80  char acl_file[BROKER_PATH_MAX];
81  bool acl_flag;
82  int num_broker, master_shm_id;
83  int err;
84  char msg_buf[256];
85 
86  if (argc == 2 && strcmp (argv[1], "--version") == 0)
87  {
88  printf ("VERSION %s\n", makestring (BUILD_NUMBER));
89  return 0;
90  }
91 
92  /* change the working directory to $CUBRID */
93  ut_cd_root_dir ();
94 
95  err = broker_config_read (NULL, br_info, &num_broker, &master_shm_id, admin_log_file, 0, &acl_flag, acl_file, NULL);
96  if (err < 0)
97  {
98  util_log_write_errstr ("broker config read error.\n");
99  return -1;
100  }
101 
102  /* change the working directory to $CUBRID/bin */
103  ut_cd_work_dir ();
104 
105  if (argc < 2)
106  {
107  goto usage;
108  }
109 
110 #if defined(WINDOWS)
111  if (wsa_initialize () < 0)
112  {
113  PRINT_AND_LOG_ERR_MSG ("WSA init error\n");
114  return 0;
115  }
116 #endif /* WINDOWS */
117 
118 #if 0
119  if (admin_get_host_ip ())
120  {
122  return -1;
123  }
124 #endif
125  admin_err_msg[0] = '\0';
126 
127  admin_init_env ();
128 
129  if (strcasecmp (argv[1], "start") == 0)
130  {
132 
133 #ifdef ORACLE
134  if (check_key () == FALSE)
135  {
136  return -1;
137  }
138 #endif
139 
140  shm_br = (T_SHM_BROKER *) uw_shm_open (master_shm_id, SHM_BROKER, SHM_MODE_MONITOR);
141 
142  if (shm_br == NULL && uw_get_error_code () != UW_ER_SHM_OPEN_MAGIC)
143  {
144  if (admin_start_cmd (br_info, num_broker, master_shm_id, acl_flag, acl_file) < 0)
145  {
147  return -1;
148  }
149  else
150  {
151  admin_log_write (admin_log_file, "start");
152  }
153  }
154  else
155  {
156  PRINT_AND_LOG_ERR_MSG ("Error: CUBRID Broker is already running " "with shared memory key '%x'.\n",
157  master_shm_id);
158  uw_shm_detach (shm_br);
159  }
160  }
161  else if (strcasecmp (argv[1], "stop") == 0)
162  {
163  if (admin_stop_cmd (master_shm_id))
164  {
166  return -1;
167  }
168  else
169  {
170  admin_log_write (admin_log_file, "stop");
171  }
172  }
173  else if (strcasecmp (argv[1], "add") == 0)
174  {
175  if (argc < 3)
176  {
177  PRINT_AND_LOG_ERR_MSG ("%s add <broker-name>\n", argv[0]);
178  return -1;
179  }
180  if (admin_add_cmd (master_shm_id, argv[2]) < 0)
181  {
183  return -1;
184  }
185  else
186  {
187  sprintf (msg_buf, "add %s", argv[2]);
188  admin_log_write (admin_log_file, msg_buf);
189  }
190  }
191  else if (strcasecmp (argv[1], "restart") == 0)
192  {
193  if (argc < 4)
194  {
195  PRINT_AND_LOG_ERR_MSG ("%s restart <broker-name> <appl_server_index>\n", argv[0]);
196  return -1;
197  }
198  if (admin_restart_cmd (master_shm_id, argv[2], atoi (argv[3])) < 0)
199  {
201  return -1;
202  }
203  else
204  {
205  sprintf (msg_buf, "restart %s %s", argv[2], argv[3]);
206  admin_log_write (admin_log_file, msg_buf);
207  }
208  }
209  else if (strcasecmp (argv[1], "drop") == 0)
210  {
211  if (argc < 3)
212  {
213  PRINT_AND_LOG_ERR_MSG ("%s drop <broker-name>\n", argv[0]);
214  return -1;
215  }
216  if (admin_drop_cmd (master_shm_id, argv[2]) < 0)
217  {
219  return -1;
220  }
221  else
222  {
223  sprintf (msg_buf, "drop %s", argv[2]);
224  admin_log_write (admin_log_file, msg_buf);
225  }
226  }
227  else if (strcasecmp (argv[1], "on") == 0)
228  {
229  if (argc < 3)
230  {
231  PRINT_AND_LOG_ERR_MSG ("%s on <broker-name>\n", argv[0]);
232  return -1;
233  }
234  if (admin_on_cmd (master_shm_id, argv[2]) < 0)
235  {
237  return -1;
238  }
239  else
240  {
241  sprintf (msg_buf, "%s on", argv[2]);
242  admin_log_write (admin_log_file, msg_buf);
243  }
244  }
245  else if (strcasecmp (argv[1], "off") == 0)
246  {
247  if (argc < 3)
248  {
249  PRINT_AND_LOG_ERR_MSG ("%s on <broker-name>\n", argv[0]);
250  return -1;
251  }
252  if (admin_off_cmd (master_shm_id, argv[2]) < 0)
253  {
255  return -1;
256  }
257  else
258  {
259  sprintf (msg_buf, "%s off", argv[2]);
260  admin_log_write (admin_log_file, msg_buf);
261  }
262  }
263  else if (strcasecmp (argv[1], "reset") == 0)
264  {
265  if (argc < 3)
266  {
267  PRINT_AND_LOG_ERR_MSG ("%s reset <broker-name>\n", argv[0]);
268  return -1;
269  }
270  if (admin_reset_cmd (master_shm_id, argv[2]) < 0)
271  {
273  return -1;
274  }
275  else
276  {
277  sprintf (msg_buf, "%s reset", argv[2]);
278  admin_log_write (admin_log_file, msg_buf);
279  }
280  }
281  else if (strcasecmp (argv[1], "info") == 0)
282  {
283  if (admin_info_cmd (master_shm_id) < 0)
284  {
286  return -1;
287  }
288  else
289  {
290  admin_log_write (admin_log_file, "info");
291  }
292  }
293  else if (strcasecmp (argv[1], "acl") == 0)
294  {
295  char *br_name = NULL;
296  int err_code;
297 
298  if (argc < 3)
299  {
300  PRINT_AND_LOG_ERR_MSG ("%s acl <reload|status> <broker-name>\n", argv[0]);
301  return -1;
302  }
303 
304  if (argc > 3)
305  {
306  br_name = argv[3];
307  }
308 
309  if (strcasecmp (argv[2], "reload") == 0)
310  {
311  err_code = admin_acl_reload_cmd (master_shm_id, br_name);
312  }
313  else if (strcasecmp (argv[2], "status") == 0)
314  {
315  err_code = admin_acl_status_cmd (master_shm_id, br_name);
316  }
317  else
318  {
319  PRINT_AND_LOG_ERR_MSG ("%s acl <reload|status> <broker-name>\n", argv[0]);
320  return -1;
321  }
322  if (err_code < 0)
323  {
325  return -1;
326  }
327  }
328  else if (strcasecmp (argv[1], "getid") == 0)
329  {
330  if (admin_getid_cmd (master_shm_id, argc, (const char **) argv) < 0)
331  {
333  return -1;
334  }
335  }
336  else
337  {
338  goto usage;
339  }
340 
341  return 0;
342 
343 usage:
344  printf ("%s (start | stop | add | drop | restart \
345  | on | off | reset | info | acl | getid)\n", argv[0]);
346  return -1;
347 }
void ut_cd_work_dir(void)
Definition: broker_util.c:335
#define PRINT_AND_LOG_ERR_MSG(...)
Definition: util_func.h:49
int admin_start_cmd(T_BROKER_INFO *br_info, int br_num, int master_shm_id, bool acl_flag, char *acl_file)
int uw_get_error_code(void)
Definition: broker_error.c:83
#define SHM_BROKER
Definition: broker_shm.h:64
int main(int argc, char **argv)
Definition: broker_admin.c:76
int argc
Definition: dynamic_load.c:951
#define BROKER_PATH_MAX
Definition: broker_config.h:91
int admin_add_cmd(int master_shm_id, const char *broker)
int wsa_initialize()
void ut_cd_root_dir(void)
Definition: broker_util.c:343
int admin_info_cmd(int master_shm_id)
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)
#define MAX_BROKER_NUM
Definition: broker_config.h:50
int admin_acl_reload_cmd(int master_shm_id, const char *broker_name)
void uw_shm_detach(void *p)
Definition: broker_shm.c:700
#define NULL
Definition: freelistheap.h:34
#define err(fd,...)
Definition: porting.h:431
int admin_reset_cmd(int master_shm_id, const char *broker_name)
static T_SHM_BROKER * shm_br
Definition: broker.c:310
char admin_err_msg[ADMIN_ERR_MSG_SIZE]
const char ** argv
Definition: dynamic_load.c:952
static void admin_log_write(const char *log_file, const char *msg)
Definition: broker_admin.c:53
#define FALSE
Definition: broker_admin.c:50
int util_log_write_errstr(const char *format,...)
Definition: util_func.c:493
int admin_on_cmd(int master_shm_id, const char *broker_name)
int admin_stop_cmd(int master_shm_id)
int admin_acl_status_cmd(int master_shm_id, const char *broker_name)
void * uw_shm_open(int shm_key, int which_shm, T_SHM_MODE shm_mode)
Definition: broker_shm.c:139
void usage(void)
#define makestring(x)
int admin_drop_cmd(int master_shm_id, const char *broker)
int admin_restart_cmd(int master_shm_id, const char *broker, int as_index)
int admin_getid_cmd(int master_shm_id, int argc, const char **argv)
#define UW_ER_SHM_OPEN_MAGIC
Definition: broker_error.h:82
void admin_init_env()
int admin_off_cmd(int master_shm_id, const char *broker_name)