Exemple #1
0
static THREAD_RET_T THREAD_CALLING_CONVENTION
hm_thread_health_checker (void *arg)
{
  int i;
  unsigned char *ip_addr;
  int port;
  time_t start_time;
  time_t elapsed_time;
  while (1)
    {
      start_time = time (NULL);
      for (i = 0; i < host_status_count; i++)
	{
	  ip_addr = host_status[i].host.ip_addr;
	  port = host_status[i].host.port;
	  if (!host_status[i].is_reachable && net_check_broker_alive
	      (ip_addr, port, BROKER_HEALTH_CHECK_TIMEOUT))
	    {
	      hm_set_host_status_by_addr (ip_addr, port, true);
	    }
	}
      elapsed_time = time (NULL) - start_time;
      if (elapsed_time < MONITORING_INTERVAL)
	{
	  SLEEP_MILISEC (MONITORING_INTERVAL - elapsed_time, 0);
	}
    }
  return (THREAD_RET_T) 0;
}
void
record_system_info (sys_stat *sstat)
{
#ifdef HOST_MONITOR_PROC
  static kstat_ctl_t *kc = NULL;

  while (kc == NULL)
    {
      kc = kstat_open ();
      SLEEP_MILISEC (0, 100);
    }

  while (get_system_info (kc, sstat) < 0)
    {
      SLEEP_MILISEC (0, 100);
    }
#endif
}
int
cmd_stop_server (char *dbname, char *err_buf, int err_buf_size)
{
  char strbuf[1024];
  int t, timeout = 30, interval = 3;    /* sec */
  char cmd_name[CUBRID_CMD_NAME_LEN];
  const char *argv[5];

  if (err_buf)
    {
      memset (err_buf, 0, err_buf_size);
    }

  cmd_name[0] = '\0';
#if !defined (DO_NOT_USE_CUBRIDENV)
  sprintf (cmd_name, "%s/%s%s", sco.szCubrid, CUBRID_DIR_BIN, UTIL_CUBRID);
#else
  sprintf (cmd_name, "%s/%s", CUBRID_BINDIR, UTIL_CUBRID);
#endif

  argv[0] = cmd_name;
  argv[1] = PRINT_CMD_SERVER;
  argv[2] = PRINT_CMD_STOP;
  argv[3] = dbname;
  argv[4] = NULL;
  if (run_child (argv, 1, NULL, NULL, NULL, NULL) < 0)
    {
      /* stop_server */
      if (err_buf)
        {
          sprintf (strbuf, "Command returned error : %s %s %s %s", cmd_name,
                   PRINT_CMD_SERVER, PRINT_CMD_STOP, dbname);
          strncpy (err_buf, strbuf, err_buf_size - 1);
        }
      return -1;
    }

  for (t = timeout; t > 0; t -= interval)
    {
      SLEEP_MILISEC (interval, 0);
      if (!uIsDatabaseActive (dbname))
        {
          return 0;
        }
    }
  if (err_buf)
    {
      sprintf (strbuf, "%s server hasn't shut down after %d seconds", dbname, timeout);
      strncpy (err_buf, strbuf, err_buf_size - 1);
    }
  return -1;
}
void
cmd_start_master (void)
{
  int pid;
  char cmd_name[CUBRID_CMD_NAME_LEN];
  const char *argv[2];

  cmd_name[0] = '\0';
#if !defined (DO_NOT_USE_CUBRIDENV)
  sprintf (cmd_name, "%s/%s%s", sco.szCubrid,
           CUBRID_DIR_BIN, UTIL_MASTER_NAME);
#else
  sprintf (cmd_name, "%s/%s", CUBRID_BINDIR, UTIL_MASTER_NAME);
#endif
  argv[0] = cmd_name;
  argv[1] = NULL;

  pid = run_child (argv, 0, NULL, NULL, NULL, NULL);    /* cub_master */
  SLEEP_MILISEC (0, 500);
}
Exemple #5
0
static void *
thr_main (void *arg)
{
    int self_index = (int) arg;

    while (process_flag)
    {
        if (work_msg[self_index].filename == NULL)
        {
            SLEEP_MILISEC (0, 100);
        }
        else
        {
            log_top (work_msg[self_index].fp, work_msg[self_index].filename);
            fclose (work_msg[self_index].fp);
            work_msg[self_index].fp = NULL;
            work_msg[self_index].filename = NULL;
        }
    }
    return NULL;
}
Exemple #6
0
static int
log_top_query (int argc, char *argv[], int arg_start)
{
    FILE *fp;
    char *filename;
    int i;
#ifdef MT_MODE
    T_THREAD thrid;
    int j;
#endif

#ifdef MT_MODE
    query_info_mutex_init ();
#endif

#ifdef MT_MODE
    work_msg = MALLOC (sizeof (T_WORK_MSG) * num_thread);
    if (work_msg == NULL)
    {
        fprintf (stderr, "malloc error\n");
        return -1;
    }
    memset (work_msg, 0, sizeof (T_WORK_MSG *) * num_thread);

    for (i = 0; i < num_thread; i++)
        THREAD_BEGIN (thrid, thr_main, (void *) i);
#endif

    for (i = arg_start; i < argc; i++)
    {
        filename = argv[i];
        fprintf (stdout, "%s\n", filename);

        fp = fopen (filename, "r");
        if (fp == NULL)
        {
            fprintf (stderr, "%s[%s]\n", strerror (errno), filename);
#ifdef MT_MODE
            process_flag = 0;
#endif
            return -1;
        }

#ifdef MT_MODE
        while (1)
        {
            for (j = 0; j < num_thread; j++)
            {
                if (work_msg[j].filename == NULL)
                {
                    work_msg[j].fp = fp;
                    work_msg[j].filename = filename;
                    break;
                }
            }
            if (j == num_thread)
                SLEEP_MILISEC (1, 0);
            else
                break;
        }
#else
        log_top (fp, filename);
        fclose (fp);
#endif
    }

#ifdef MT_MODE
    process_flag = 0;
#endif

    if (sql_info_file != NULL)
    {
        fprintf (stdout, "read sql info file...\n");
        if (sql_list_make (sql_info_file) < 0)
        {
            return -1;
        }
    }

    fprintf (stdout, "print results...\n");
    query_info_print ();

    return 0;
}