Пример #1
0
    int ObRootMain::do_work()
    {
      //add signal I want to catch
      // we don't process the following signals any more, but receive them for backward compatibility
      add_signal_catched(START_REPORT_SIG);
      add_signal_catched(START_MERGE_SIG);
      add_signal_catched(DUMP_ROOT_TABLE_TO_LOG);
      add_signal_catched(DUMP_AVAILABLE_SEVER_TO_LOG);
      add_signal_catched(SWITCH_SCHEMA);
      add_signal_catched(RELOAD_CONFIG);
      add_signal_catched(DO_CHECK_POINT);
      add_signal_catched(DROP_CURRENT_MERGE);
      add_signal_catched(CREATE_NEW_TABLE);

      int ret = OB_SUCCESS;
      int port = TBSYS_CONFIG.getInt(STR_ROOT_SECTION, STR_LISTEN_PORT, 0);
	  
      ret = worker.set_listen_port(port);
      if (ret == OB_SUCCESS)
      {
        const char *dev_name = TBSYS_CONFIG.getString(STR_ROOT_SECTION, STR_DEV_NAME, NULL);
        ret = worker.set_dev_name(dev_name);
      }
      if (ret == OB_SUCCESS)
      {
        ret = worker.set_config_file_name(config_file_name_);
      }
      if (ret == OB_SUCCESS)
      {
        worker.set_packet_factory(&packet_factory_);
      }
      if (ret == OB_SUCCESS)
      {
        ret = worker.start();
      }
      if (OB_SUCCESS != ret)
      {
        fprintf(stderr, "failed to start rootserver, see the log for details, err=%d\n", ret);
      }
      return ret;
    }
    int ObUpdateServerMain::do_work()
    {
      int ret = OB_SUCCESS;
      char dump_config_path[OB_MAX_FILE_NAME_LENGTH];

      print_version();
      ups_config_.init();

      ups_reload_config_.set_update_server(server_);

      snprintf(dump_config_path,
               sizeof dump_config_path, "etc/%s.config.bin", server_name_);
      config_mgr_.set_dump_path(dump_config_path);
      add_signal_catched(SIG_RESET_MEMORY_LIMIT);
      add_signal_catched(SIG_INC_WORK_THREAD);
      add_signal_catched(SIG_DEC_WORK_THREAD);
      add_signal_catched(SIG_START_STRESS);
      if (OB_SUCCESS != (ret = config_mgr_.base_init()))
      {
        TBSYS_LOG(ERROR, "init config manager error, ret: [%d]", ret);
      }
      else if (OB_SUCCESS != (ret = config_mgr_.load_config(config_)))
      {
        TBSYS_LOG(ERROR, "load config error, path: [%s], ret: [%d]",
                  config_, ret);
      }

      /* set ups ip and port if command line has past in */
      if (strlen(cmd_rs_ip_) > 0 && cmd_rs_port_ > 0)
      {
        ups_config_.root_server_ip.set_value(cmd_rs_ip_);
        ups_config_.root_server_port = cmd_rs_port_;
      }
      if (cmd_port_ > 0)
      {
        ups_config_.port = cmd_port_;
      }
      if (cmd_inner_port_ > 0)
      {
        ups_config_.inner_port = cmd_inner_port_;
      }
      if (strlen(cmd_devname_) > 0)
      {
        ups_config_.devname.set_value(cmd_devname_);
      }
      if (strlen(config_) > 0)
      {
        TBSYS_LOG(INFO, "config file path: [%s]", config_);
      }
      if (strlen(cmd_extra_config_) > 0
          && OB_SUCCESS != (ret = ups_config_.add_extra_config(cmd_extra_config_)))
      {
        TBSYS_LOG(ERROR, "Parse extra config error! string: [%s], ret: [%d]",
                  cmd_extra_config_, ret);
      }
      ups_config_.print();

      if (OB_SUCCESS == ret && OB_SUCCESS != (ret = ups_config_.check_all()))
      {
        TBSYS_LOG(WARN, "failed to load from conf, ret: [%d]", ret);
      }

      if (OB_SUCCESS != ret)
      {
        TBSYS_LOG(ERROR, "Start Update server failed, ret: [%d]", ret);
      }
      else
      {
        shadow_server_.set_io_thread_count((int32_t)ups_config_.io_thread_count);
        server_.set_io_thread_count((int32_t)ups_config_.io_thread_count);
        shadow_server_.set_listen_port(static_cast<int32_t>(
                                         ups_config_.inner_port));
        TBSYS_LOG(INFO, "shadow_server port is %s",
                  ups_config_.inner_port.str());
        shadow_server_.start(false);
        server_.start(false);
        server_.apply_conf();

        server_.wait();
        shadow_server_.stop();
        server_.stop();
      }

      return ret;
    }
Пример #3
0
    int BaseMain::start(const int argc, char *argv[], const char* section_name)
    {
      const char* config_file = parse_cmd_line(argc, argv);
      if(config_file == NULL) {
        print_usage(argv[0]);
        return EXIT_FAILURE;
      }
	  
      if (static_cast<int>(strlen(config_file)) >= OB_MAX_FILE_NAME_LENGTH){
        fprintf(stderr, "file name too long %s error\n", config_file);
        return EXIT_FAILURE;
      }
	  
      strncpy(config_file_name_, config_file, OB_MAX_FILE_NAME_LENGTH);
      config_file_name_[OB_MAX_FILE_NAME_LENGTH - 1] = '\0';

      if(TBSYS_CONFIG.load(config_file)) 
      {
        fprintf(stderr, "load file %s error\n", config_file);
        return EXIT_FAILURE;
      }

      const char* sz_pid_file =
        TBSYS_CONFIG.getString(section_name, PID_FILE, "server.pid");
      const char* sz_log_file =
        TBSYS_CONFIG.getString(section_name, LOG_FILE, "server.log");

	  {
        char *p = NULL;
        char dir_path[256];
        snprintf(dir_path, 256, "%s",
            TBSYS_CONFIG.getString(section_name, DATA_DIR, "./"));
		
        if(!tbsys::CFileUtil::mkdirs(dir_path)) {
          fprintf(stderr, "create dir %s error\n", dir_path);
          return EXIT_FAILURE;
        }
		
        snprintf(dir_path, 256, "%s", sz_pid_file);
        p = strrchr(dir_path, '/');
        if(p != NULL){
          *p = '\0';
        }
		
        if(p != NULL && !tbsys::CFileUtil::mkdirs(dir_path)) {
          fprintf(stderr, "create dir %s error\n", dir_path);
          return EXIT_FAILURE;
        }
        snprintf(dir_path, 256, "%s", sz_log_file);
        p = strrchr(dir_path, '/');
        if(p != NULL){
          *p = '\0';
        }
        if(p != NULL && !tbsys::CFileUtil::mkdirs(dir_path)) {
          fprintf(stderr, "create dir %s error\n", dir_path);
          return EXIT_FAILURE;
        }
		
      }

      int pid = 0;
      if((pid = tbsys::CProcess::existPid(sz_pid_file))) {
        fprintf(stderr, "program has been exist: pid=%d\n", pid);
        return EXIT_FAILURE;
      }

      const char * sz_log_level =
        TBSYS_CONFIG.getString(section_name, LOG_LEVEL, "info");
      TBSYS_LOGGER.setLogLevel(sz_log_level);
	  
      const char * trace_log_level =
        TBSYS_CONFIG.getString(section_name, TRACE_LOG_LEVEL, "debug");
      SET_TRACE_LOG_LEVEL(trace_log_level); 
	  
      int max_file_size= TBSYS_CONFIG.getInt(section_name, MAX_LOG_FILE_SIZE, 1024);
      TBSYS_LOGGER.setMaxFileSize(max_file_size * 1024L * 1024L);
	  
      int ret = EXIT_SUCCESS;
      bool start_ok = true;

      if (use_deamon_) {
        start_ok = (tbsys::CProcess::startDaemon(sz_pid_file, sz_log_file) == 0);
      }
	  
      if(start_ok) {
        signal(SIGPIPE, SIG_IGN);
        signal(SIGHUP, SIG_IGN);
        add_signal_catched(SIGINT);
        add_signal_catched(SIGTERM);
        add_signal_catched(40);
        add_signal_catched(41);
        add_signal_catched(42);
        add_signal_catched(43);
        add_signal_catched(44);
        //signal(SIGINT, BaseMain::sign_handler);
        //signal(SIGTERM, BaseMain::sign_handler);
        //signal(40, BaseMain::sign_handler);
        //signal(41, BaseMain::sign_handler);
        //signal(42, BaseMain::sign_handler);
        ret = do_work();
        TBSYS_LOG(INFO, "exit program.");
      }

      return ret;
    }