static int fdfs_dump_global_vars(char *buff, const int buffSize) { int total_len; char reserved_space_str[32]; total_len = snprintf(buff, buffSize, "g_fdfs_connect_timeout=%ds\n" "g_fdfs_network_timeout=%ds\n" "g_fdfs_base_path=%s\n" "g_fdfs_version=%d.%02d\n" "g_continue_flag=%d\n" "g_schedule_flag=%d\n" "g_server_port=%d\n" "g_max_connections=%d\n" "g_tracker_thread_count=%d\n" "g_sync_log_buff_interval=%ds\n" "g_check_active_interval=%ds\n" "g_storage_stat_chg_count=%d\n" "g_storage_sync_time_chg_count=%d\n" "g_storage_reserved_space=%s\n" "g_allow_ip_count=%d\n" "g_run_by_group=%s\n" "g_run_by_user=%s\n" "g_storage_ip_changed_auto_adjust=%d\n" "g_thread_stack_size=%d\n" "if_use_trunk_file=%d\n" "slot_min_size=%d\n" "slot_max_size=%d MB\n" "trunk_file_size=%d MB\n" "g_changelog_fsize="INT64_PRINTF_FORMAT"\n" "g_storage_sync_file_max_delay=%ds\n" "g_storage_sync_file_max_time=%ds\n" "g_up_time=%d\n" "g_tracker_last_status.up_time=%d\n" "g_tracker_last_status.last_check_time=%d\n" "g_if_leader_self=%d\n" "g_next_leader_index=%d\n" "g_tracker_leader_chg_count=%d\n" "g_trunk_server_chg_count=%d\n" "g_use_connection_pool=%d\n" "g_connection_pool_max_idle_time=%d\n" "connection_pool_conn_count=%d\n" #ifdef WITH_HTTPD "g_http_params.disabled=%d\n" "g_http_params.anti_steal_token=%d\n" "g_http_params.server_port=%d\n" "g_http_params.content_type_hash item count=%d\n" "g_http_params.anti_steal_secret_key length=%d\n" "g_http_params.token_check_fail_buff length=%d\n" "g_http_params.default_content_type=%s\n" "g_http_params.token_check_fail_content_type=%s\n" "g_http_params.token_ttl=%d\n" "g_http_check_interval=%d\n" "g_http_check_type=%d\n" "g_http_check_uri=%s\n" "g_http_servers_dirty=%d\n" #endif #if defined(DEBUG_FLAG) && defined(OS_LINUX) "g_exe_name=%s\n" #endif , g_fdfs_connect_timeout , g_fdfs_network_timeout , g_fdfs_base_path , g_fdfs_version.major, g_fdfs_version.minor , g_continue_flag , g_schedule_flag , g_server_port , g_max_connections , g_tracker_thread_count , g_sync_log_buff_interval , g_check_active_interval , g_storage_stat_chg_count , g_storage_sync_time_chg_count , fdfs_storage_reserved_space_to_string( \ &g_storage_reserved_space, reserved_space_str) \ , g_allow_ip_count , g_run_by_group , g_run_by_user , g_storage_ip_changed_auto_adjust , g_thread_stack_size , g_if_use_trunk_file , g_slot_min_size , g_slot_max_size / FDFS_ONE_MB , g_trunk_file_size / FDFS_ONE_MB , g_changelog_fsize , g_storage_sync_file_max_delay , g_storage_sync_file_max_time , (int)g_up_time , (int)g_tracker_last_status.up_time , (int)g_tracker_last_status.last_check_time , g_if_leader_self , g_next_leader_index , g_tracker_leader_chg_count , g_trunk_server_chg_count , g_use_connection_pool , g_connection_pool_max_idle_time , g_use_connection_pool ? conn_pool_get_connection_count( \ &g_connection_pool) : 0 #ifdef WITH_HTTPD , g_http_params.disabled , g_http_params.anti_steal_token , g_http_params.server_port , hash_count(&(g_http_params.content_type_hash)) , g_http_params.anti_steal_secret_key.length , g_http_params.token_check_fail_buff.length , g_http_params.default_content_type , g_http_params.token_check_fail_content_type , g_http_params.token_ttl , g_http_check_interval , g_http_check_type , g_http_check_uri , g_http_servers_dirty #endif #if defined(DEBUG_FLAG) && defined(OS_LINUX) , g_exe_name #endif ); return total_len; }
int tracker_load_from_conf_file(const char *filename, \ char *bind_addr, const int addr_size) { char *pBasePath; char *pBindAddr; char *pRunByGroup; char *pRunByUser; char *pThreadStackSize; char *pSlotMinSize; char *pSlotMaxSize; char *pSpaceThreshold; char *pTrunkFileSize; char *pRotateErrorLogSize; char *pMinBuffSize; char *pMaxBuffSize; #ifdef WITH_HTTPD char *pHttpCheckUri; char *pHttpCheckType; #endif IniContext iniContext; int result; int64_t thread_stack_size; int64_t trunk_file_size; int64_t slot_min_size; int64_t slot_max_size; int64_t rotate_error_log_size; int64_t min_buff_size; int64_t max_buff_size; char sz_min_buff_size[32]; char sz_max_buff_size[32]; char reserved_space_str[32]; memset(&g_groups, 0, sizeof(FDFSGroups)); memset(&iniContext, 0, sizeof(IniContext)); if ((result=iniLoadFromFile(filename, &iniContext)) != 0) { logError("file: "__FILE__", line: %d, " \ "load conf file \"%s\" fail, ret code: %d", \ __LINE__, filename, result); return result; } //iniPrintItems(&iniContext); do { if (iniGetBoolValue(NULL, "disabled", &iniContext, false)) { logError("file: "__FILE__", line: %d, " \ "conf file \"%s\" disabled=true, exit", \ __LINE__, filename); result = ECANCELED; break; } pBasePath = iniGetStrValue(NULL, "base_path", &iniContext); if (pBasePath == NULL) { logError("file: "__FILE__", line: %d, " \ "conf file \"%s\" must have item " \ "\"base_path\"!", __LINE__, filename); result = ENOENT; break; } snprintf(g_fdfs_base_path, sizeof(g_fdfs_base_path), "%s", pBasePath); chopPath(g_fdfs_base_path); if (!fileExists(g_fdfs_base_path)) { logError("file: "__FILE__", line: %d, " \ "\"%s\" can't be accessed, error info: %s", \ __LINE__, g_fdfs_base_path, STRERROR(errno)); result = errno != 0 ? errno : ENOENT; break; } if (!isDir(g_fdfs_base_path)) { logError("file: "__FILE__", line: %d, " \ "\"%s\" is not a directory!", \ __LINE__, g_fdfs_base_path); result = ENOTDIR; break; } load_log_level(&iniContext); if ((result=log_set_prefix(g_fdfs_base_path, \ TRACKER_ERROR_LOG_FILENAME)) != 0) { break; } g_fdfs_connect_timeout = iniGetIntValue(NULL, "connect_timeout", \ &iniContext, DEFAULT_CONNECT_TIMEOUT); if (g_fdfs_connect_timeout <= 0) { g_fdfs_connect_timeout = DEFAULT_CONNECT_TIMEOUT; } g_fdfs_network_timeout = iniGetIntValue(NULL, "network_timeout", \ &iniContext, DEFAULT_NETWORK_TIMEOUT); if (g_fdfs_network_timeout <= 0) { g_fdfs_network_timeout = DEFAULT_NETWORK_TIMEOUT; } g_server_port = iniGetIntValue(NULL, "port", &iniContext, \ FDFS_TRACKER_SERVER_DEF_PORT); if (g_server_port <= 0) { g_server_port = FDFS_TRACKER_SERVER_DEF_PORT; } pBindAddr = iniGetStrValue(NULL, "bind_addr", &iniContext); if (pBindAddr == NULL) { bind_addr[0] = '\0'; } else { snprintf(bind_addr, addr_size, "%s", pBindAddr); } if ((result=tracker_load_store_lookup(filename, \ &iniContext)) != 0) { break; } g_groups.store_server = (byte)iniGetIntValue(NULL, \ "store_server", &iniContext, \ FDFS_STORE_SERVER_ROUND_ROBIN); if (!(g_groups.store_server == FDFS_STORE_SERVER_FIRST_BY_IP ||\ g_groups.store_server == FDFS_STORE_SERVER_FIRST_BY_PRI|| g_groups.store_server == FDFS_STORE_SERVER_ROUND_ROBIN)) { logWarning("file: "__FILE__", line: %d, " \ "store_server 's value %d is invalid, " \ "set to %d (round robin)!", \ __LINE__, g_groups.store_server, \ FDFS_STORE_SERVER_ROUND_ROBIN); g_groups.store_server = FDFS_STORE_SERVER_ROUND_ROBIN; } g_groups.download_server = (byte)iniGetIntValue(NULL, \ "download_server", &iniContext, \ FDFS_DOWNLOAD_SERVER_ROUND_ROBIN); if (!(g_groups.download_server==FDFS_DOWNLOAD_SERVER_ROUND_ROBIN || g_groups.download_server == FDFS_DOWNLOAD_SERVER_SOURCE_FIRST)) { logWarning("file: "__FILE__", line: %d, " \ "download_server 's value %d is invalid, " \ "set to %d (round robin)!", \ __LINE__, g_groups.download_server, \ FDFS_DOWNLOAD_SERVER_ROUND_ROBIN); g_groups.download_server = \ FDFS_DOWNLOAD_SERVER_ROUND_ROBIN; } g_groups.store_path = (byte)iniGetIntValue(NULL, "store_path", \ &iniContext, FDFS_STORE_PATH_ROUND_ROBIN); if (!(g_groups.store_path == FDFS_STORE_PATH_ROUND_ROBIN || \ g_groups.store_path == FDFS_STORE_PATH_LOAD_BALANCE)) { logWarning("file: "__FILE__", line: %d, " \ "store_path 's value %d is invalid, " \ "set to %d (round robin)!", \ __LINE__, g_groups.store_path , \ FDFS_STORE_PATH_ROUND_ROBIN); g_groups.store_path = FDFS_STORE_PATH_ROUND_ROBIN; } if ((result=fdfs_parse_storage_reserved_space(&iniContext, \ &g_storage_reserved_space)) != 0) { break; } g_max_connections = iniGetIntValue(NULL, "max_connections", \ &iniContext, DEFAULT_MAX_CONNECTONS); if (g_max_connections <= 0) { g_max_connections = DEFAULT_MAX_CONNECTONS; } g_accept_threads = iniGetIntValue(NULL, "accept_threads", \ &iniContext, 1); if (g_accept_threads <= 0) { logError("file: "__FILE__", line: %d, " \ "item \"accept_threads\" is invalid, " \ "value: %d <= 0!", __LINE__, g_accept_threads); result = EINVAL; break; } g_work_threads = iniGetIntValue(NULL, "work_threads", \ &iniContext, DEFAULT_WORK_THREADS); if (g_work_threads <= 0) { logError("file: "__FILE__", line: %d, " \ "item \"work_threads\" is invalid, " \ "value: %d <= 0!", __LINE__, g_work_threads); result = EINVAL; break; } if ((result=set_rlimit(RLIMIT_NOFILE, g_max_connections)) != 0) { break; } pRunByGroup = iniGetStrValue(NULL, "run_by_group", &iniContext); pRunByUser = iniGetStrValue(NULL, "run_by_user", &iniContext); if (pRunByGroup == NULL) { *g_run_by_group = '\0'; } else { snprintf(g_run_by_group, sizeof(g_run_by_group), \ "%s", pRunByGroup); } if (*g_run_by_group == '\0') { g_run_by_gid = getegid(); } else { struct group *pGroup; pGroup = getgrnam(g_run_by_group); if (pGroup == NULL) { result = errno != 0 ? errno : ENOENT; logError("file: "__FILE__", line: %d, " \ "getgrnam fail, errno: %d, " \ "error info: %s", __LINE__, \ result, STRERROR(result)); return result; } g_run_by_gid = pGroup->gr_gid; } if (pRunByUser == NULL) { *g_run_by_user = '******'; } else { snprintf(g_run_by_user, sizeof(g_run_by_user), \ "%s", pRunByUser); } if (*g_run_by_user == '\0') { g_run_by_uid = geteuid(); } else { struct passwd *pUser; pUser = getpwnam(g_run_by_user); if (pUser == NULL) { result = errno != 0 ? errno : ENOENT; logError("file: "__FILE__", line: %d, " \ "getpwnam fail, errno: %d, " \ "error info: %s", __LINE__, \ result, STRERROR(result)); return result; } g_run_by_uid = pUser->pw_uid; } if ((result=load_allow_hosts(&iniContext, \ &g_allow_ip_addrs, &g_allow_ip_count)) != 0) { return result; } g_sync_log_buff_interval = iniGetIntValue(NULL, \ "sync_log_buff_interval", &iniContext, \ SYNC_LOG_BUFF_DEF_INTERVAL); if (g_sync_log_buff_interval <= 0) { g_sync_log_buff_interval = SYNC_LOG_BUFF_DEF_INTERVAL; } g_check_active_interval = iniGetIntValue(NULL, \ "check_active_interval", &iniContext, \ CHECK_ACTIVE_DEF_INTERVAL); if (g_check_active_interval <= 0) { g_check_active_interval = CHECK_ACTIVE_DEF_INTERVAL; } pThreadStackSize = iniGetStrValue(NULL, \ "thread_stack_size", &iniContext); if (pThreadStackSize == NULL) { thread_stack_size = 64 * 1024; } else if ((result=parse_bytes(pThreadStackSize, 1, \ &thread_stack_size)) != 0) { return result; } g_thread_stack_size = (int)thread_stack_size; g_storage_ip_changed_auto_adjust = iniGetBoolValue(NULL, \ "storage_ip_changed_auto_adjust", \ &iniContext, true); g_storage_sync_file_max_delay = iniGetIntValue(NULL, \ "storage_sync_file_max_delay", &iniContext, \ DEFAULT_STORAGE_SYNC_FILE_MAX_DELAY); if (g_storage_sync_file_max_delay <= 0) { g_storage_sync_file_max_delay = \ DEFAULT_STORAGE_SYNC_FILE_MAX_DELAY; } g_storage_sync_file_max_time = iniGetIntValue(NULL, \ "storage_sync_file_max_time", &iniContext, \ DEFAULT_STORAGE_SYNC_FILE_MAX_TIME); if (g_storage_sync_file_max_time <= 0) { g_storage_sync_file_max_time = \ DEFAULT_STORAGE_SYNC_FILE_MAX_TIME; } g_if_use_trunk_file = iniGetBoolValue(NULL, \ "use_trunk_file", &iniContext, false); pSlotMinSize = iniGetStrValue(NULL, \ "slot_min_size", &iniContext); if (pSlotMinSize == NULL) { slot_min_size = 256; } else if ((result=parse_bytes(pSlotMinSize, 1, \ &slot_min_size)) != 0) { return result; } g_slot_min_size = (int)slot_min_size; if (g_slot_min_size <= 0) { logError("file: "__FILE__", line: %d, " \ "item \"slot_min_size\" %d is invalid, " \ "which <= 0", __LINE__, g_slot_min_size); result = EINVAL; break; } if (g_slot_min_size > 64 * 1024) { logWarning("file: "__FILE__", line: %d, " \ "item \"slot_min_size\" %d is too large, " \ "change to 64KB", __LINE__, g_slot_min_size); g_slot_min_size = 64 * 1024; } pTrunkFileSize = iniGetStrValue(NULL, \ "trunk_file_size", &iniContext); if (pTrunkFileSize == NULL) { trunk_file_size = 64 * 1024 * 1024; } else if ((result=parse_bytes(pTrunkFileSize, 1, \ &trunk_file_size)) != 0) { return result; } g_trunk_file_size = (int)trunk_file_size; if (g_trunk_file_size < 4 * 1024 * 1024) { logWarning("file: "__FILE__", line: %d, " \ "item \"trunk_file_size\" %d is too small, " \ "change to 4MB", __LINE__, g_trunk_file_size); g_trunk_file_size = 4 * 1024 * 1024; } pSlotMaxSize = iniGetStrValue(NULL, \ "slot_max_size", &iniContext); if (pSlotMaxSize == NULL) { slot_max_size = g_trunk_file_size / 2; } else if ((result=parse_bytes(pSlotMaxSize, 1, \ &slot_max_size)) != 0) { return result; } g_slot_max_size = (int)slot_max_size; if (g_slot_max_size <= g_slot_min_size) { logError("file: "__FILE__", line: %d, " \ "item \"slot_max_size\" %d is invalid, " \ "which <= slot_min_size: %d", \ __LINE__, g_slot_max_size, g_slot_min_size); result = EINVAL; break; } if (g_slot_max_size > g_trunk_file_size / 2) { logWarning("file: "__FILE__", line: %d, " \ "item \"slot_max_size\": %d is too large, " \ "change to %d", __LINE__, g_slot_max_size, \ g_trunk_file_size / 2); g_slot_max_size = g_trunk_file_size / 2; } g_trunk_create_file_advance = iniGetBoolValue(NULL, \ "trunk_create_file_advance", &iniContext, false); if ((result=get_time_item_from_conf(&iniContext, \ "trunk_create_file_time_base", \ &g_trunk_create_file_time_base, 2, 0)) != 0) { return result; } g_trunk_create_file_interval = iniGetIntValue(NULL, \ "trunk_create_file_interval", &iniContext, \ 86400); pSpaceThreshold = iniGetStrValue(NULL, \ "trunk_create_file_space_threshold", &iniContext); if (pSpaceThreshold == NULL) { g_trunk_create_file_space_threshold = 0; } else if ((result=parse_bytes(pSpaceThreshold, 1, \ &g_trunk_create_file_space_threshold)) != 0) { return result; } g_trunk_compress_binlog_min_interval = iniGetIntValue(NULL, \ "trunk_compress_binlog_min_interval", \ &iniContext, 0); g_trunk_init_check_occupying = iniGetBoolValue(NULL, \ "trunk_init_check_occupying", &iniContext, false); g_trunk_init_reload_from_binlog = iniGetBoolValue(NULL, \ "trunk_init_reload_from_binlog", &iniContext, false); if ((result=tracker_load_storage_id_info( \ filename, &iniContext)) != 0) { return result; } g_rotate_error_log = iniGetBoolValue(NULL, "rotate_error_log",\ &iniContext, false); if ((result=get_time_item_from_conf(&iniContext, \ "error_log_rotate_time", &g_error_log_rotate_time, \ 0, 0)) != 0) { break; } pRotateErrorLogSize = iniGetStrValue(NULL, \ "rotate_error_log_size", &iniContext); if (pRotateErrorLogSize == NULL) { rotate_error_log_size = 0; } else if ((result=parse_bytes(pRotateErrorLogSize, 1, \ &rotate_error_log_size)) != 0) { break; } if (rotate_error_log_size > 0 && \ rotate_error_log_size < FDFS_ONE_MB) { logWarning("file: "__FILE__", line: %d, " \ "item \"rotate_error_log_size\": " \ "%"PRId64" is too small, " \ "change to 1 MB", __LINE__, \ rotate_error_log_size); rotate_error_log_size = FDFS_ONE_MB; } fdfs_set_log_rotate_size(&g_log_context, rotate_error_log_size); g_log_file_keep_days = iniGetIntValue(NULL, \ "log_file_keep_days", &iniContext, 0); g_store_slave_file_use_link = iniGetBoolValue(NULL, \ "store_slave_file_use_link", &iniContext, false); if ((result=fdfs_connection_pool_init(filename, &iniContext)) != 0) { break; } pMinBuffSize = iniGetStrValue(NULL, "min_buff_size", &iniContext); if (pMinBuffSize == NULL) { min_buff_size = TRACKER_MAX_PACKAGE_SIZE; } else if ((result=parse_bytes(pMinBuffSize, 1, &min_buff_size)) != 0) { return result; } g_min_buff_size = (int)min_buff_size; pMaxBuffSize = iniGetStrValue(NULL, "max_buff_size", &iniContext); if (pMaxBuffSize == NULL) { max_buff_size = 16 * TRACKER_MAX_PACKAGE_SIZE; } else if ((result=parse_bytes(pMaxBuffSize, 1, &max_buff_size)) != 0) { return result; } g_max_buff_size = (int)max_buff_size; if (g_min_buff_size < TRACKER_MAX_PACKAGE_SIZE) { g_min_buff_size = TRACKER_MAX_PACKAGE_SIZE; } if (g_max_buff_size < g_min_buff_size) { g_max_buff_size = g_min_buff_size; } #ifdef WITH_HTTPD if ((result=fdfs_http_params_load(&iniContext, \ filename, &g_http_params)) != 0) { return result; } g_http_check_interval = iniGetIntValue(NULL, \ "http.check_alive_interval", &iniContext, 30); pHttpCheckType = iniGetStrValue(NULL, \ "http.check_alive_type", &iniContext); if (pHttpCheckType != NULL && \ strcasecmp(pHttpCheckType, "http") == 0) { g_http_check_type = FDFS_HTTP_CHECK_ALIVE_TYPE_HTTP; } else { g_http_check_type = FDFS_HTTP_CHECK_ALIVE_TYPE_TCP; } pHttpCheckUri = iniGetStrValue(NULL, \ "http.check_alive_uri", &iniContext); if (pHttpCheckUri == NULL) { *g_http_check_uri = '/'; *(g_http_check_uri+1) = '\0'; } else if (*pHttpCheckUri == '/') { snprintf(g_http_check_uri, sizeof(g_http_check_uri), \ "%s", pHttpCheckUri); } else { snprintf(g_http_check_uri, sizeof(g_http_check_uri), \ "/%s", pHttpCheckUri); } #endif if (g_if_use_trunk_file && g_groups.store_server == FDFS_STORE_SERVER_ROUND_ROBIN) { logInfo("file: "__FILE__", line: %d, " "set store_server to %d because use_trunk_file is true", __LINE__, FDFS_STORE_SERVER_FIRST_BY_IP); g_groups.store_server = FDFS_STORE_SERVER_FIRST_BY_IP; } int_to_comma_str(g_min_buff_size, sz_min_buff_size); int_to_comma_str(g_max_buff_size, sz_max_buff_size); logInfo("FastDFS v%d.%02d, base_path=%s, " \ "run_by_group=%s, run_by_user=%s, " \ "connect_timeout=%ds, " \ "network_timeout=%ds, " \ "port=%d, bind_addr=%s, " \ "max_connections=%d, " \ "accept_threads=%d, " \ "work_threads=%d, " \ "min_buff_size=%s, " \ "max_buff_size=%s, " \ "store_lookup=%d, store_group=%s, " \ "store_server=%d, store_path=%d, " \ "reserved_storage_space=%s, " \ "download_server=%d, " \ "allow_ip_count=%d, sync_log_buff_interval=%ds, " \ "check_active_interval=%ds, " \ "thread_stack_size=%d KB, " \ "storage_ip_changed_auto_adjust=%d, " \ "storage_sync_file_max_delay=%ds, " \ "storage_sync_file_max_time=%ds, " \ "use_trunk_file=%d, " \ "slot_min_size=%d, " \ "slot_max_size=%d MB, " \ "trunk_file_size=%d MB, " \ "trunk_create_file_advance=%d, " \ "trunk_create_file_time_base=%02d:%02d, " \ "trunk_create_file_interval=%d, " \ "trunk_create_file_space_threshold=%d GB, " \ "trunk_init_check_occupying=%d, " \ "trunk_init_reload_from_binlog=%d, " \ "trunk_compress_binlog_min_interval=%d, " \ "use_storage_id=%d, " \ "id_type_in_filename=%s, " \ "storage_id_count=%d, " \ "rotate_error_log=%d, " \ "error_log_rotate_time=%02d:%02d, " \ "rotate_error_log_size=%"PRId64", " \ "log_file_keep_days=%d, " \ "store_slave_file_use_link=%d, " \ "use_connection_pool=%d, " \ "g_connection_pool_max_idle_time=%ds", \ g_fdfs_version.major, g_fdfs_version.minor, \ g_fdfs_base_path, g_run_by_group, g_run_by_user, \ g_fdfs_connect_timeout, \ g_fdfs_network_timeout, g_server_port, bind_addr, \ g_max_connections, g_accept_threads, g_work_threads, \ sz_min_buff_size, sz_max_buff_size, \ g_groups.store_lookup, g_groups.store_group, \ g_groups.store_server, g_groups.store_path, \ fdfs_storage_reserved_space_to_string( \ &g_storage_reserved_space, reserved_space_str), \ g_groups.download_server, \ g_allow_ip_count, g_sync_log_buff_interval, \ g_check_active_interval, g_thread_stack_size / 1024, \ g_storage_ip_changed_auto_adjust, \ g_storage_sync_file_max_delay, \ g_storage_sync_file_max_time, \ g_if_use_trunk_file, g_slot_min_size, \ g_slot_max_size / FDFS_ONE_MB, \ g_trunk_file_size / FDFS_ONE_MB, \ g_trunk_create_file_advance, \ g_trunk_create_file_time_base.hour, \ g_trunk_create_file_time_base.minute, \ g_trunk_create_file_interval, \ (int)(g_trunk_create_file_space_threshold / \ (FDFS_ONE_MB * 1024)), g_trunk_init_check_occupying, \ g_trunk_init_reload_from_binlog, \ g_trunk_compress_binlog_min_interval, \ g_use_storage_id, g_id_type_in_filename == \ FDFS_ID_TYPE_SERVER_ID ? "id" : "ip", g_storage_id_count, \ g_rotate_error_log, g_error_log_rotate_time.hour, \ g_error_log_rotate_time.minute, \ g_log_context.rotate_size, g_log_file_keep_days, g_store_slave_file_use_link, \ g_use_connection_pool, g_connection_pool_max_idle_time); #ifdef WITH_HTTPD if (!g_http_params.disabled) { logInfo("HTTP supported: " \ "server_port=%d, " \ "default_content_type=%s, " \ "anti_steal_token=%d, " \ "token_ttl=%ds, " \ "anti_steal_secret_key length=%d, " \ "token_check_fail content_type=%s, " \ "token_check_fail buff length=%d, " \ "check_active_interval=%d, " \ "check_active_type=%s, " \ "check_active_uri=%s", \ g_http_params.server_port, \ g_http_params.default_content_type, \ g_http_params.anti_steal_token, \ g_http_params.token_ttl, \ g_http_params.anti_steal_secret_key.length, \ g_http_params.token_check_fail_content_type, \ g_http_params.token_check_fail_buff.length, \ g_http_check_interval, g_http_check_type == \ FDFS_HTTP_CHECK_ALIVE_TYPE_TCP ? "tcp":"http",\ g_http_check_uri); } #endif } while (0); iniFreeContext(&iniContext); load_local_host_ip_addrs(); return result; }
int storage_get_params_from_tracker() { IniContext iniContext; int result; bool use_trunk_file; char reserved_space_str[32]; char *pIdType; if ((result=fdfs_get_ini_context_from_tracker(&g_tracker_group, \ &iniContext, (bool * volatile)&g_continue_flag, \ g_client_bind_addr, g_bind_addr)) != 0) { return result; } g_storage_ip_changed_auto_adjust = iniGetBoolValue(NULL, \ "storage_ip_changed_auto_adjust", \ &iniContext, false); g_store_path_mode = iniGetIntValue(NULL, "store_path", &iniContext, \ FDFS_STORE_PATH_ROUND_ROBIN); if ((result=fdfs_parse_storage_reserved_space(&iniContext, \ &g_storage_reserved_space)) != 0) { iniFreeContext(&iniContext); return result; } if (g_storage_reserved_space.flag == \ TRACKER_STORAGE_RESERVED_SPACE_FLAG_MB) { g_avg_storage_reserved_mb = g_storage_reserved_space.rs.mb \ / g_fdfs_store_paths.count; } else { g_avg_storage_reserved_mb = 0; } g_use_storage_id = iniGetBoolValue(NULL, "use_storage_id", \ &iniContext, false); use_trunk_file = iniGetBoolValue(NULL, "use_trunk_file", \ &iniContext, false); g_slot_min_size = iniGetIntValue(NULL, "slot_min_size", \ &iniContext, 256); g_trunk_file_size = iniGetIntValue(NULL, "trunk_file_size", \ &iniContext, 64 * 1024 * 1024); g_slot_max_size = iniGetIntValue(NULL, "slot_max_size", \ &iniContext, g_trunk_file_size / 2); g_trunk_create_file_advance = iniGetBoolValue(NULL, \ "trunk_create_file_advance", &iniContext, false); if ((result=get_time_item_from_conf(&iniContext, \ "trunk_create_file_time_base", \ &g_trunk_create_file_time_base, 2, 0)) != 0) { iniFreeContext(&iniContext); return result; } g_trunk_create_file_interval = iniGetIntValue(NULL, \ "trunk_create_file_interval", &iniContext, \ 86400); g_trunk_create_file_space_threshold = iniGetInt64Value(NULL, \ "trunk_create_file_space_threshold", \ &iniContext, 0); g_trunk_init_check_occupying = iniGetBoolValue(NULL, \ "trunk_init_check_occupying", &iniContext, false); g_trunk_init_reload_from_binlog = iniGetBoolValue(NULL, \ "trunk_init_reload_from_binlog", &iniContext, false); g_trunk_compress_binlog_min_interval = iniGetIntValue(NULL, \ "trunk_compress_binlog_min_interval", &iniContext, 0); g_store_slave_file_use_link = iniGetBoolValue(NULL, \ "store_slave_file_use_link", &iniContext, false); pIdType = iniGetStrValue(NULL, "id_type_in_filename", &iniContext); if (pIdType != NULL && strcasecmp(pIdType, "id") == 0) { if (g_use_storage_id) { g_id_type_in_filename = FDFS_ID_TYPE_SERVER_ID; } else { g_id_type_in_filename = FDFS_ID_TYPE_IP_ADDRESS; } } else { g_id_type_in_filename = FDFS_ID_TYPE_IP_ADDRESS; } iniFreeContext(&iniContext); if (use_trunk_file && !g_if_use_trunk_file) { if ((result=trunk_sync_init()) != 0) { return result; } } g_if_use_trunk_file = use_trunk_file; logInfo("file: "__FILE__", line: %d, " \ "use_storage_id=%d, " \ "id_type_in_filename=%s, " \ "storage_ip_changed_auto_adjust=%d, " \ "store_path=%d, " \ "reserved_storage_space=%s, " \ "use_trunk_file=%d, " \ "slot_min_size=%d, " \ "slot_max_size=%d MB, " \ "trunk_file_size=%d MB, " \ "trunk_create_file_advance=%d, " \ "trunk_create_file_time_base=%02d:%02d, " \ "trunk_create_file_interval=%d, " \ "trunk_create_file_space_threshold=%d GB, " \ "trunk_init_check_occupying=%d, " \ "trunk_init_reload_from_binlog=%d, " \ "trunk_compress_binlog_min_interval=%d, " \ "store_slave_file_use_link=%d", \ __LINE__, g_use_storage_id, \ g_id_type_in_filename == FDFS_ID_TYPE_SERVER_ID ? "id" : "ip", \ g_storage_ip_changed_auto_adjust, \ g_store_path_mode, fdfs_storage_reserved_space_to_string( \ &g_storage_reserved_space, reserved_space_str), \ g_if_use_trunk_file, g_slot_min_size, \ g_slot_max_size / FDFS_ONE_MB, \ g_trunk_file_size / FDFS_ONE_MB, \ g_trunk_create_file_advance, \ g_trunk_create_file_time_base.hour, \ g_trunk_create_file_time_base.minute, \ g_trunk_create_file_interval, \ (int)(g_trunk_create_file_space_threshold / \ (FDFS_ONE_MB * 1024)), g_trunk_init_check_occupying, \ g_trunk_init_reload_from_binlog, \ g_trunk_compress_binlog_min_interval, \ g_store_slave_file_use_link); if (g_use_storage_id && *g_sync_src_id != '\0' && \ !fdfs_is_server_id_valid(g_sync_src_id)) { if ((result=storage_convert_src_server_id()) == 0) { storage_write_to_sync_ini_file(); } else { if (result == ENOENT) { *g_sync_src_id = '\0'; storage_write_to_sync_ini_file(); } else { return result; } } } return 0; }
static int fdfs_dump_global_vars(char *buff, const int buffSize) { char szStorageJoinTime[32]; char szSyncUntilTimestamp[32]; char szUptime[32]; char reserved_space_str[32]; int total_len; int i; total_len = snprintf(buff, buffSize, "g_fdfs_connect_timeout=%ds\n" "g_fdfs_network_timeout=%ds\n" "g_fdfs_base_path=%s\n" "g_fdfs_version=%d.%02d\n" "g_continue_flag=%d\n" "g_schedule_flag=%d\n" "g_server_port=%d\n" "g_max_connections=%d\n" "g_storage_thread_count=%d\n" "g_group_name=%s\n" "g_sync_log_buff_interval=%d\n" "g_subdir_count_per_path=%d\n" "g_http_port=%d\n" "g_last_server_port=%d\n" "g_last_http_port=%d\n" "g_allow_ip_count=%d\n" "g_run_by_group=%s\n" "g_run_by_user=%s\n" "g_http_domain=%s\n" "g_file_distribute_path_mode=%d\n" "g_file_distribute_rotate_count=%d\n" "g_fsync_after_written_bytes=%d\n" "g_dist_path_index_high=%d\n" "g_dist_path_index_low=%d\n" "g_dist_write_file_count=%d\n" "g_disk_rw_direct=%d\n" "g_disk_rw_separated=%d\n" "g_disk_reader_threads=%d\n" "g_disk_writer_threads=%d\n" "g_extra_open_file_flags=%d\n" "g_tracker_reporter_count=%d\n" "g_heart_beat_interval=%d\n" "g_stat_report_interval=%d\n" "g_sync_wait_usec=%dms\n" "g_sync_interval=%dms\n" "g_sync_start_time=%d:%d\n" "g_sync_end_time=%d:%d\n" "g_sync_part_time=%d\n" "g_sync_log_buff_interval=%ds\n" "g_sync_binlog_buff_interval=%ds\n" "g_write_mark_file_freq=%d\n" "g_sync_stat_file_interval=%ds\n" "g_storage_join_time=%s\n" "g_sync_old_done=%d\n" "g_sync_src_id=%s\n" "g_sync_until_timestamp=%s\n" "g_my_server_id_str=%s\n" "g_tracker_client_ip=%s\n" "g_last_storage_ip=%s\n" "g_check_file_duplicate=%d\n" "g_key_namespace=%s\n" "g_namespace_len=%d\n" "g_bind_addr=%s\n" "g_client_bind_addr=%d\n" "g_storage_ip_changed_auto_adjust=%d\n" "g_thread_kill_done=%d\n" "g_thread_stack_size=%d\n" "g_upload_priority=%d\n" "g_up_time=%s\n" "g_if_alias_prefix=%s\n" "g_binlog_fd=%d\n" "g_binlog_index=%d\n" "g_storage_sync_thread_count=%d\n" "g_use_storage_id=%d\n" "g_if_use_trunk_file=%d\n" "g_if_trunker_self=%d\n" "g_slot_min_size=%d\n" "g_trunk_file_size=%d\n" "g_store_path_mode=%d\n" "storage_reserved_mb=%s\n" "g_avg_storage_reserved_mb=%d\n" "g_store_path_index=%d\n" "g_current_trunk_file_id=%d\n" "g_trunk_sync_thread_count=%d\n" "g_trunk_server=%s:%d\n" "g_trunk_total_free_space=%"PRId64"\n" "g_use_connection_pool=%d\n" "g_connection_pool_max_idle_time=%d\n" "connection_pool_conn_count=%d\n" #ifdef WITH_HTTPD "g_http_params.disabled=%d\n" "g_http_params.anti_steal_token=%d\n" "g_http_params.server_port=%d\n" "g_http_params.content_type_hash item count=%d\n" "g_http_params.anti_steal_secret_key length=%d\n" "g_http_params.token_check_fail_buff length=%d\n" "g_http_params.default_content_type=%s\n" "g_http_params.token_check_fail_content_type=%s\n" "g_http_params.token_ttl=%d\n" "g_http_trunk_size=%d\n" #endif #if defined(DEBUG_FLAG) && defined(OS_LINUX) "g_exe_name=%s\n" #endif , g_fdfs_connect_timeout , g_fdfs_network_timeout , g_fdfs_base_path , g_fdfs_version.major, g_fdfs_version.minor , g_continue_flag , g_schedule_flag , g_server_port , g_max_connections , g_storage_thread_count , g_group_name , g_sync_log_buff_interval , g_subdir_count_per_path , g_http_port , g_last_server_port , g_last_http_port , g_allow_ip_count , g_run_by_group , g_run_by_user , g_http_domain , g_file_distribute_path_mode , g_file_distribute_rotate_count , g_fsync_after_written_bytes , g_dist_path_index_high , g_dist_path_index_low , g_dist_write_file_count , g_disk_rw_direct , g_disk_rw_separated , g_disk_reader_threads , g_disk_writer_threads , g_extra_open_file_flags , g_tracker_reporter_count , g_heart_beat_interval , g_stat_report_interval , g_sync_wait_usec / 1000 , g_sync_interval , g_sync_start_time.hour, g_sync_start_time.minute , g_sync_end_time.hour, g_sync_end_time.minute , g_sync_part_time , g_sync_log_buff_interval , g_sync_binlog_buff_interval , g_write_mark_file_freq , g_sync_stat_file_interval , formatDatetime(g_storage_join_time, "%Y-%m-%d %H:%M:%S", szStorageJoinTime, sizeof(szStorageJoinTime)) , g_sync_old_done , g_sync_src_id , formatDatetime(g_sync_until_timestamp, "%Y-%m-%d %H:%M:%S", szSyncUntilTimestamp, sizeof(szSyncUntilTimestamp)) , g_my_server_id_str , g_tracker_client_ip , g_last_storage_ip , g_check_file_duplicate , g_key_namespace , g_namespace_len , g_bind_addr , g_client_bind_addr , g_storage_ip_changed_auto_adjust , g_thread_kill_done , g_thread_stack_size , g_upload_priority , formatDatetime(g_up_time, "%Y-%m-%d %H:%M:%S", szUptime, sizeof(szUptime)) , g_if_alias_prefix , g_binlog_fd , g_binlog_index , g_storage_sync_thread_count , g_use_storage_id , g_if_use_trunk_file , g_if_trunker_self , g_slot_min_size , g_trunk_file_size , g_store_path_mode , fdfs_storage_reserved_space_to_string( \ &g_storage_reserved_space, reserved_space_str) \ , g_avg_storage_reserved_mb , g_store_path_index , g_current_trunk_file_id , g_trunk_sync_thread_count , g_trunk_server.ip_addr, g_trunk_server.port , g_trunk_total_free_space , g_use_connection_pool , g_connection_pool_max_idle_time , g_use_connection_pool ? conn_pool_get_connection_count( \ &g_connection_pool) : 0 #ifdef WITH_HTTPD , g_http_params.disabled , g_http_params.anti_steal_token , g_http_params.server_port , hash_count(&(g_http_params.content_type_hash)) , g_http_params.anti_steal_secret_key.length , g_http_params.token_check_fail_buff.length , g_http_params.default_content_type , g_http_params.token_check_fail_content_type , g_http_params.token_ttl , g_http_trunk_size #endif #if defined(DEBUG_FLAG) && defined(OS_LINUX) , g_exe_name #endif ); total_len += snprintf(buff + total_len, buffSize - total_len, "\ng_fdfs_store_paths.count=%d\n", g_fdfs_store_paths.count); for (i=0; i<g_fdfs_store_paths.count; i++) { total_len += snprintf(buff + total_len, buffSize - total_len, "\tg_fdfs_store_paths.paths[%d]=%s, " \ "total=%d MB, free=%d MB\n", i, \ g_fdfs_store_paths.paths[i], \ g_path_space_list[i].total_mb, \ g_path_space_list[i].free_mb); } total_len += snprintf(buff + total_len, buffSize - total_len, "\ng_local_host_ip_count=%d\n", g_local_host_ip_count); for (i=0; i<g_local_host_ip_count; i++) { total_len += snprintf(buff + total_len, buffSize - total_len, "\tg_local_host_ip_addrs[%d]=%s\n", i, g_local_host_ip_addrs + i * IP_ADDRESS_SIZE); } return total_len; }