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; }
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; }