//! //! //! //! @param[in] key //! @param[in] val //! //! @pre //! //! @post //! static void set_global_parameter(char *key, char *val) { if (strcmp(key, "debug") == 0) { print_debug = parse_boolean(val); set_debug(print_debug); } else if (strcmp(key, "argv") == 0) { print_argv = parse_boolean(val); } else if (strcmp(key, "work") == 0) { set_work_dir(val); } else if (strcmp(key, "work_size") == 0) { set_work_limit(parse_bytes(val)); } else if (strcmp(key, "cache") == 0) { set_cache_dir(val); } else if (strcmp(key, "cache_size") == 0) { set_cache_limit(parse_bytes(val)); } else if (strcmp(key, "purge_cache") == 0) { purge_cache = parse_boolean(val); } else if (strcmp(key, "cloud_cert") == 0) { euca_strncpy(cloud_cert_path, val, sizeof(cloud_cert_path)); } else if (strcmp(key, "service_key") == 0) { euca_strncpy(service_key_path, val, sizeof(service_key_path)); } else { err("unknown global parameter '%s'", key); } LOGINFO("GLOBAL: %s=%s\n", key, val); }
int config_parse_bytes_off(const char* unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata) { off_t *bytes = data; int r; assert(filename); assert(lvalue); assert(rvalue); assert(data); assert_cc(sizeof(off_t) == sizeof(uint64_t)); r = parse_bytes(rvalue, bytes); if (r < 0) log_syntax(unit, LOG_ERR, filename, line, -r, "Failed to parse bytes value, ignoring: %s", rvalue); return 0; }
int config_parse_bytes_size(const char* unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata) { size_t *sz = data; off_t o; int r; assert(filename); assert(lvalue); assert(rvalue); assert(data); r = parse_bytes(rvalue, &o); if (r < 0 || (off_t) (size_t) o != o) { log_syntax(unit, LOG_ERR, filename, line, -r, "Failed to parse byte value, ignoring: %s", rvalue); return 0; } *sz = (size_t) o; return 0; }
int config_parse_bytes_off( const char *filename, unsigned line, const char *section, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata) { off_t *bytes = data; assert(filename); assert(lvalue); assert(rvalue); assert(data); assert_cc(sizeof(off_t) == sizeof(uint64_t)); if (parse_bytes(rvalue, bytes) < 0) { log_error("[%s:%u] Failed to parse bytes value, ignoring: %s", filename, line, rvalue); return 0; } return 0; }
int config_parse_bytes_size( const char *filename, unsigned line, const char *section, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata) { size_t *sz = data; off_t o; assert(filename); assert(lvalue); assert(rvalue); assert(data); if (parse_bytes(rvalue, &o) < 0 || (off_t) (size_t) o != o) { log_error("[%s:%u] Failed to parse byte value, ignoring: %s", filename, line, rvalue); return 0; } *sz = (size_t) o; return 0; }
static int check_bytes(krb5_context context, const char *path, char *data) { if(parse_bytes(data, NULL) == -1) { krb5_warnx(context, "%s: failed to parse \"%s\" as size", path, data); return 1; } return 0; }
//! //! //! //! @param[in] key //! @param[in] val //! //! @pre //! //! @post //! static void set_global_parameter(char *key, char *val) { if (strcmp(key, "debug") == 0) { print_debug = parse_boolean(val); set_debug(print_debug); } else if (strcmp(key, "argv") == 0) { print_argv = parse_boolean(val); } else if (strcmp(key, "work") == 0) { set_work_dir(val); } else if (strcmp(key, "work_size") == 0) { set_work_limit(parse_bytes(val)); } else if (strcmp(key, "cache") == 0) { set_cache_dir(val); } else if (strcmp(key, "cache_size") == 0) { set_cache_limit(parse_bytes(val)); } else { err("unknown global parameter '%s'", key); } LOGINFO("GLOBAL: %s=%s\n", key, val); }
krb5_kdc_configuration * configure(krb5_context context, int argc, char **argv, int *optidx) { krb5_kdc_configuration *config; krb5_error_code ret; const char *p; *optidx = 0; while(getarg(args, num_args, argc, argv, optidx)) warnx("error at argument `%s'", argv[*optidx]); if(help_flag) usage (0); if (version_flag) { print_version(NULL); exit(0); } if (builtin_hdb_flag) { char *list; ret = hdb_list_builtin(context, &list); if (ret) krb5_err(context, 1, ret, "listing builtin hdb backends"); printf("builtin hdb backends: %s\n", list); free(list); exit(0); } { char **files; int aret; if (config_file == NULL) { aret = asprintf(&config_file, "%s/kdc.conf", hdb_db_dir(context)); if (aret == -1 || config_file == NULL) errx(1, "out of memory"); } ret = krb5_prepend_config_files_default(config_file, &files); if (ret) krb5_err(context, 1, ret, "getting configuration files"); ret = krb5_set_config_files(context, files); krb5_free_config_files(files); if(ret) krb5_err(context, 1, ret, "reading configuration files"); } ret = krb5_kdc_get_config(context, &config); if (ret) krb5_err(context, 1, ret, "krb5_kdc_default_config"); kdc_openlog(context, "kdc", config); ret = krb5_kdc_set_dbinfo(context, config); if (ret) krb5_err(context, 1, ret, "krb5_kdc_set_dbinfo"); if(max_request_str) max_request_tcp = max_request_udp = parse_bytes(max_request_str, NULL); if(max_request_tcp == 0){ p = krb5_config_get_string (context, NULL, "kdc", "max-request", NULL); if(p) max_request_tcp = max_request_udp = parse_bytes(p, NULL); } if(require_preauth != -1) config->require_preauth = require_preauth; if(port_str == NULL){ p = krb5_config_get_string(context, NULL, "kdc", "ports", NULL); if (p != NULL) port_str = strdup(p); } explicit_addresses.len = 0; if (addresses_str.num_strings) { int i; for (i = 0; i < addresses_str.num_strings; ++i) add_one_address (context, addresses_str.strings[i], i == 0); free_getarg_strings (&addresses_str); } else { char **foo = krb5_config_get_strings (context, NULL, "kdc", "addresses", NULL); if (foo != NULL) { add_one_address (context, *foo++, TRUE); while (*foo) add_one_address (context, *foo++, FALSE); } } if(enable_http == -1) enable_http = krb5_config_get_bool(context, NULL, "kdc", "enable-http", NULL); if(request_log == NULL) request_log = krb5_config_get_string(context, NULL, "kdc", "kdc-request-log", NULL); if (krb5_config_get_string(context, NULL, "kdc", "enforce-transited-policy", NULL)) krb5_errx(context, 1, "enforce-transited-policy deprecated, " "use [kdc]transited-policy instead"); #ifdef SUPPORT_DETACH if(detach_from_console == -1) detach_from_console = krb5_config_get_bool_default(context, NULL, DETACH_IS_DEFAULT, "kdc", "detach", NULL); #endif /* SUPPORT_DETACH */ if(max_request_tcp == 0) max_request_tcp = 64 * 1024; if(max_request_udp == 0) max_request_udp = 64 * 1024; if (port_str == NULL) port_str = "+"; if(disable_des == -1) disable_des = krb5_config_get_bool_default(context, NULL, FALSE, "kdc", "disable-des", NULL); if(disable_des) { krb5_enctype_disable(context, ETYPE_DES_CBC_CRC); krb5_enctype_disable(context, ETYPE_DES_CBC_MD4); krb5_enctype_disable(context, ETYPE_DES_CBC_MD5); krb5_enctype_disable(context, ETYPE_DES_CBC_NONE); krb5_enctype_disable(context, ETYPE_DES_CFB64_NONE); krb5_enctype_disable(context, ETYPE_DES_PCBC_NONE); } krb5_kdc_windc_init(context); krb5_kdc_pkinit_config(context, config); return config; }
void kcm_configure(int argc, char **argv) { krb5_error_code ret; int optind = 0; const char *p; while(getarg(args, num_args, argc, argv, &optind)) warnx("error at argument `%s'", argv[optind]); if(help_flag) usage (0); if (version_flag) { print_version(NULL); exit(0); } argc -= optind; argv += optind; if (argc != 0) usage(1); { char **files; if(config_file == NULL) config_file = _PATH_KCM_CONF; ret = krb5_prepend_config_files_default(config_file, &files); if (ret) krb5_err(kcm_context, 1, ret, "getting configuration files"); ret = krb5_set_config_files(kcm_context, files); krb5_free_config_files(files); if(ret) krb5_err(kcm_context, 1, ret, "reading configuration files"); } if(max_request_str) max_request = parse_bytes(max_request_str, NULL); if(max_request == 0){ p = krb5_config_get_string (kcm_context, NULL, "kcm", "max-request", NULL); if(p) max_request = parse_bytes(p, NULL); } if (system_principal == NULL) { system_principal = kcm_system_config_get_string("principal"); } if (system_principal != NULL) { ret = ccache_init_system(); if (ret) krb5_err(kcm_context, 1, ret, "initializing system ccache"); } #ifdef SUPPORT_DETACH if(detach_from_console == -1) detach_from_console = krb5_config_get_bool_default(kcm_context, NULL, DETACH_IS_DEFAULT, "kcm", "detach", NULL); #endif kcm_openlog(); if(max_request == 0) max_request = 64 * 1024; }
int fdfs_parse_storage_reserved_space(IniContext *pIniContext, \ FDFSStorageReservedSpace *pStorageReservedSpace) { int result; int len; char *pReservedSpaceStr; int64_t storage_reserved; pReservedSpaceStr = iniGetStrValue(NULL, \ "reserved_storage_space", pIniContext); if (pReservedSpaceStr == NULL) { pStorageReservedSpace->flag = \ TRACKER_STORAGE_RESERVED_SPACE_FLAG_MB; pStorageReservedSpace->rs.mb = FDFS_DEF_STORAGE_RESERVED_MB; return 0; } if (*pReservedSpaceStr == '\0') { logError("file: "__FILE__", line: %d, " \ "item \"reserved_storage_space\" is empty!", \ __LINE__); return EINVAL; } len = strlen(pReservedSpaceStr); if (*(pReservedSpaceStr + len - 1) == '%') { char *endptr; pStorageReservedSpace->flag = \ TRACKER_STORAGE_RESERVED_SPACE_FLAG_RATIO; endptr = NULL; *(pReservedSpaceStr + len - 1) = '\0'; pStorageReservedSpace->rs.ratio = \ strtod(pReservedSpaceStr, &endptr); if (endptr != NULL && *endptr != '\0') { logError("file: "__FILE__", line: %d, " \ "item \"reserved_storage_space\": %s%%"\ " is invalid!", __LINE__, \ pReservedSpaceStr); return EINVAL; } if (pStorageReservedSpace->rs.ratio <= 0.00 || \ pStorageReservedSpace->rs.ratio >= 100.00) { logError("file: "__FILE__", line: %d, " \ "item \"reserved_storage_space\": %s%%"\ " is invalid!", __LINE__, \ pReservedSpaceStr); return EINVAL; } pStorageReservedSpace->rs.ratio /= 100.00; return 0; } if ((result=parse_bytes(pReservedSpaceStr, 1, &storage_reserved)) != 0) { return result; } pStorageReservedSpace->flag = TRACKER_STORAGE_RESERVED_SPACE_FLAG_MB; pStorageReservedSpace->rs.mb = storage_reserved / FDFS_ONE_MB; return 0; }
krb5_kdc_configuration * configure(krb5_context context, int argc, char **argv) { krb5_kdc_configuration *config; krb5_error_code ret; int optidx = 0; const char *p; while(getarg(args, num_args, argc, argv, &optidx)) warnx("error at argument `%s'", argv[optidx]); if(help_flag) usage (0); if (version_flag) { print_version(NULL); exit(0); } if (builtin_hdb_flag) { char *list; ret = hdb_list_builtin(context, &list); if (ret) krb5_err(context, 1, ret, "listing builtin hdb backends"); printf("builtin hdb backends: %s\n", list); free(list); exit(0); } argc -= optidx; argv += optidx; if (argc != 0) usage(1); { char **files; if (config_file == NULL) { asprintf(&config_file, "%s/kdc.conf", hdb_db_dir(context)); if (config_file == NULL) errx(1, "out of memory"); } ret = krb5_prepend_config_files_default(config_file, &files); if (ret) krb5_err(context, 1, ret, "getting configuration files"); ret = krb5_set_config_files(context, files); krb5_free_config_files(files); if(ret) krb5_err(context, 1, ret, "reading configuration files"); } ret = krb5_kdc_get_config(context, &config); if (ret) krb5_err(context, 1, ret, "krb5_kdc_default_config"); kdc_openlog(context, "kdc", config); ret = krb5_kdc_set_dbinfo(context, config); if (ret) krb5_err(context, 1, ret, "krb5_kdc_set_dbinfo"); if(max_request_str) max_request_tcp = max_request_udp = parse_bytes(max_request_str, NULL); if(max_request_tcp == 0){ p = krb5_config_get_string (context, NULL, "kdc", "max-request", NULL); if(p) max_request_tcp = max_request_udp = parse_bytes(p, NULL); } if(require_preauth != -1) config->require_preauth = require_preauth; if(port_str == NULL){ p = krb5_config_get_string(context, NULL, "kdc", "ports", NULL); if (p != NULL) port_str = strdup(p); } explicit_addresses.len = 0; if (addresses_str.num_strings) { int i; for (i = 0; i < addresses_str.num_strings; ++i) add_one_address (context, addresses_str.strings[i], i == 0); free_getarg_strings (&addresses_str); } else { char **foo = krb5_config_get_strings (context, NULL, "kdc", "addresses", NULL); if (foo != NULL) { add_one_address (context, *foo++, TRUE); while (*foo) add_one_address (context, *foo++, FALSE); } } if(enable_v4 != -1) config->enable_v4 = enable_v4; if(enable_v4_cross_realm != -1) config->enable_v4_cross_realm = enable_v4_cross_realm; if(enable_524 != -1) config->enable_524 = enable_524; if(enable_http == -1) enable_http = krb5_config_get_bool(context, NULL, "kdc", "enable-http", NULL); if(request_log == NULL) request_log = krb5_config_get_string(context, NULL, "kdc", "kdc-request-log", NULL); if (krb5_config_get_string(context, NULL, "kdc", "enforce-transited-policy", NULL)) krb5_errx(context, 1, "enforce-transited-policy deprecated, " "use [kdc]transited-policy instead"); if (enable_kaserver != -1) config->enable_kaserver = enable_kaserver; #ifdef SUPPORT_DETACH if(detach_from_console == -1) detach_from_console = krb5_config_get_bool_default(context, NULL, DETACH_IS_DEFAULT, "kdc", "detach", NULL); #endif /* SUPPORT_DETACH */ if(max_request_tcp == 0) max_request_tcp = 64 * 1024; if(max_request_udp == 0) max_request_udp = 64 * 1024; if (port_str == NULL) port_str = "+"; if (v4_realm) config->v4_realm = v4_realm; if(config->v4_realm == NULL && (config->enable_kaserver || config->enable_v4)) krb5_errx(context, 1, "Kerberos 4 enabled but no realm configured"); if(disable_des == -1) disable_des = krb5_config_get_bool_default(context, NULL, FALSE, "kdc", "disable-des", NULL); if(disable_des) { krb5_enctype_disable(context, ETYPE_DES_CBC_CRC); krb5_enctype_disable(context, ETYPE_DES_CBC_MD4); krb5_enctype_disable(context, ETYPE_DES_CBC_MD5); krb5_enctype_disable(context, ETYPE_DES_CBC_NONE); krb5_enctype_disable(context, ETYPE_DES_CFB64_NONE); krb5_enctype_disable(context, ETYPE_DES_PCBC_NONE); kdc_log(context, config, 0, "DES was disabled, turned off Kerberos V4, 524 " "and kaserver"); config->enable_v4 = 0; config->enable_524 = 0; config->enable_kaserver = 0; } krb5_kdc_windc_init(context); #ifdef PKINIT #ifdef __APPLE__ config->enable_pkinit = 1; if (config->pkinit_kdc_identity == NULL) { if (config->pkinit_kdc_friendly_name == NULL) config->pkinit_kdc_friendly_name = strdup("O=System Identity,CN=com.apple.kerberos.kdc"); config->pkinit_kdc_identity = strdup("KEYCHAIN:"); } if (config->pkinit_kdc_anchors == NULL) config->pkinit_kdc_anchors = strdup("KEYCHAIN:"); #endif /* __APPLE__ */ if (config->enable_pkinit) { if (config->pkinit_kdc_identity == NULL) krb5_errx(context, 1, "pkinit enabled but no identity"); if (config->pkinit_kdc_anchors == NULL) krb5_errx(context, 1, "pkinit enabled but no X509 anchors"); krb5_kdc_pk_initialize(context, config, config->pkinit_kdc_identity, config->pkinit_kdc_anchors, config->pkinit_kdc_cert_pool, config->pkinit_kdc_revoke); } #endif /* PKINIT */ return config; }
int storage_func_init(const char *filename, \ char *bind_addr, const int addr_size) { char *pBindAddr; char *pGroupName; char *pRunByGroup; char *pRunByUser; char *pFsyncAfterWrittenBytes; char *pThreadStackSize; char *pBuffSize; char *pIfAliasPrefix; char *pHttpDomain; IniContext iniContext; int result; int64_t fsync_after_written_bytes; int64_t thread_stack_size; int64_t buff_size; TrackerServerInfo *pServer; TrackerServerInfo *pEnd; /* while (nThreadCount > 0) { sleep(1); } */ if ((result=iniLoadFromFile(filename, &iniContext)) != 0) { logError("file: "__FILE__", line: %d, " \ "load conf file \"%s\" fail, ret code: %d", \ __LINE__, filename, result); return result; } do { if (iniGetBoolValue(NULL, "disabled", &iniContext, false)) { logError("file: "__FILE__", line: %d, " \ "conf file \"%s\" disabled=true, exit", \ __LINE__, filename); result = ECANCELED; break; } g_subdir_count_per_path=iniGetIntValue(NULL, \ "subdir_count_per_path", &iniContext, \ DEFAULT_DATA_DIR_COUNT_PER_PATH); if (g_subdir_count_per_path <= 0 || \ g_subdir_count_per_path > 256) { logError("file: "__FILE__", line: %d, " \ "conf file \"%s\", invalid subdir_count: %d", \ __LINE__, filename, g_subdir_count_per_path); result = EINVAL; break; } if ((result=storage_load_paths(&iniContext)) != 0) { break; } load_log_level(&iniContext); if ((result=log_set_prefix(g_fdfs_base_path, \ STORAGE_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_network_tv.tv_sec = g_fdfs_network_timeout; g_server_port = iniGetIntValue(NULL, "port", &iniContext, \ FDFS_STORAGE_SERVER_DEF_PORT); if (g_server_port <= 0) { g_server_port = FDFS_STORAGE_SERVER_DEF_PORT; } g_heart_beat_interval = iniGetIntValue(NULL, \ "heart_beat_interval", &iniContext, \ STORAGE_BEAT_DEF_INTERVAL); if (g_heart_beat_interval <= 0) { g_heart_beat_interval = STORAGE_BEAT_DEF_INTERVAL; } g_stat_report_interval = iniGetIntValue(NULL, \ "stat_report_interval", &iniContext, \ STORAGE_REPORT_DEF_INTERVAL); if (g_stat_report_interval <= 0) { g_stat_report_interval = STORAGE_REPORT_DEF_INTERVAL; } pBindAddr = iniGetStrValue(NULL, "bind_addr", &iniContext); if (pBindAddr == NULL) { *bind_addr = '\0'; } else { snprintf(bind_addr, addr_size, "%s", pBindAddr); } g_client_bind_addr = iniGetBoolValue(NULL, "client_bind", \ &iniContext, true); pGroupName = iniGetStrValue(NULL, "group_name", &iniContext); if (pGroupName == NULL) { logError("file: "__FILE__", line: %d, " \ "conf file \"%s\" must have item " \ "\"group_name\"!", \ __LINE__, filename); result = ENOENT; break; } if (pGroupName[0] == '\0') { logError("file: "__FILE__", line: %d, " \ "conf file \"%s\", " \ "group_name is empty!", \ __LINE__, filename); result = EINVAL; break; } snprintf(g_group_name, sizeof(g_group_name), "%s", pGroupName); if ((result=fdfs_validate_group_name(g_group_name)) != 0) \ { logError("file: "__FILE__", line: %d, " \ "conf file \"%s\", " \ "the group name \"%s\" is invalid!", \ __LINE__, filename, g_group_name); result = EINVAL; break; } result = fdfs_load_tracker_group_ex(&g_tracker_group, \ filename, &iniContext); if (result != 0) { break; } pEnd = g_tracker_group.servers + g_tracker_group.server_count; for (pServer=g_tracker_group.servers; pServer<pEnd; pServer++) { //printf("server=%s:%d\n", pServer->ip_addr, pServer->port); if (strcmp(pServer->ip_addr, "127.0.0.1") == 0) { logError("file: "__FILE__", line: %d, " \ "conf file \"%s\", " \ "tracker: \"%s:%d\" is invalid, " \ "tracker server ip can't be 127.0.0.1",\ __LINE__, filename, pServer->ip_addr, \ pServer->port); result = EINVAL; break; } } if (result != 0) { break; } g_sync_wait_usec = iniGetIntValue(NULL, "sync_wait_msec",\ &iniContext, STORAGE_DEF_SYNC_WAIT_MSEC); if (g_sync_wait_usec <= 0) { g_sync_wait_usec = STORAGE_DEF_SYNC_WAIT_MSEC; } g_sync_wait_usec *= 1000; g_sync_interval = iniGetIntValue(NULL, "sync_interval",\ &iniContext, 0); if (g_sync_interval < 0) { g_sync_interval = 0; } g_sync_interval *= 1000; if ((result=get_time_item_from_conf(&iniContext, \ "sync_start_time", &g_sync_start_time, 0, 0)) != 0) { break; } if ((result=get_time_item_from_conf(&iniContext, \ "sync_end_time", &g_sync_end_time, 23, 59)) != 0) { break; } g_sync_part_time = !((g_sync_start_time.hour == 0 && \ g_sync_start_time.minute == 0) && \ (g_sync_end_time.hour == 23 && \ g_sync_end_time.minute == 59)); g_max_connections = iniGetIntValue(NULL, "max_connections", \ &iniContext, DEFAULT_MAX_CONNECTONS); if (g_max_connections <= 0) { g_max_connections = DEFAULT_MAX_CONNECTONS; } if ((result=set_rlimit(RLIMIT_NOFILE, g_max_connections)) != 0) { 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; } pBuffSize = iniGetStrValue(NULL, \ "buff_size", &iniContext); if (pBuffSize == NULL) { buff_size = STORAGE_DEFAULT_BUFF_SIZE; } else if ((result=parse_bytes(pBuffSize, 1, &buff_size)) != 0) { return result; } g_buff_size = buff_size; if (g_buff_size < 4 * 1024 || \ g_buff_size < sizeof(TrackerHeader) + \ TRUNK_BINLOG_BUFFER_SIZE) { logError("file: "__FILE__", line: %d, " \ "item \"buff_size\" is too small, " \ "value: %d < %d or < %d!", __LINE__, \ g_buff_size, 4 * 1024, \ (int)sizeof(TrackerHeader) + \ TRUNK_BINLOG_BUFFER_SIZE); result = EINVAL; break; } g_disk_rw_separated = iniGetBoolValue(NULL, \ "disk_rw_separated", &iniContext, true); g_disk_reader_threads = iniGetIntValue(NULL, \ "disk_reader_threads", \ &iniContext, DEFAULT_DISK_READER_THREADS); if (g_disk_reader_threads < 0) { logError("file: "__FILE__", line: %d, " \ "item \"disk_reader_threads\" is invalid, " \ "value: %d < 0!", __LINE__, \ g_disk_reader_threads); result = EINVAL; break; } g_disk_writer_threads = iniGetIntValue(NULL, \ "disk_writer_threads", \ &iniContext, DEFAULT_DISK_WRITER_THREADS); if (g_disk_writer_threads < 0) { logError("file: "__FILE__", line: %d, " \ "item \"disk_writer_threads\" is invalid, " \ "value: %d < 0!", __LINE__, \ g_disk_writer_threads); result = EINVAL; break; } if (g_disk_rw_separated) { if (g_disk_reader_threads == 0) { logError("file: "__FILE__", line: %d, " \ "item \"disk_reader_threads\" is " \ "invalid, value = 0!", __LINE__); result = EINVAL; break; } if (g_disk_writer_threads == 0) { logError("file: "__FILE__", line: %d, " \ "item \"disk_writer_threads\" is " \ "invalid, value = 0!", __LINE__); result = EINVAL; break; } } else if (g_disk_reader_threads + g_disk_writer_threads == 0) { logError("file: "__FILE__", line: %d, " \ "item \"disk_reader_threads\" and " \ "\"disk_writer_threads\" are " \ "invalid, both value = 0!", __LINE__); result = EINVAL; break; } /* g_disk_rw_direct = iniGetBoolValue(NULL, \ "disk_rw_direct", &iniContext, false); */ 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_file_distribute_path_mode = iniGetIntValue(NULL, \ "file_distribute_path_mode", &iniContext, \ FDFS_FILE_DIST_PATH_ROUND_ROBIN); g_file_distribute_rotate_count = iniGetIntValue(NULL, \ "file_distribute_rotate_count", &iniContext, \ FDFS_FILE_DIST_DEFAULT_ROTATE_COUNT); if (g_file_distribute_rotate_count <= 0) { g_file_distribute_rotate_count = \ FDFS_FILE_DIST_DEFAULT_ROTATE_COUNT; } pFsyncAfterWrittenBytes = iniGetStrValue(NULL, \ "fsync_after_written_bytes", &iniContext); if (pFsyncAfterWrittenBytes == NULL) { fsync_after_written_bytes = 0; } else if ((result=parse_bytes(pFsyncAfterWrittenBytes, 1, \ &fsync_after_written_bytes)) != 0) { return result; } g_fsync_after_written_bytes = fsync_after_written_bytes; 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_sync_binlog_buff_interval = iniGetIntValue(NULL, \ "sync_binlog_buff_interval", &iniContext,\ SYNC_BINLOG_BUFF_DEF_INTERVAL); if (g_sync_binlog_buff_interval <= 0) { g_sync_binlog_buff_interval=SYNC_BINLOG_BUFF_DEF_INTERVAL; } g_write_mark_file_freq = iniGetIntValue(NULL, \ "write_mark_file_freq", &iniContext, \ FDFS_DEFAULT_SYNC_MARK_FILE_FREQ); if (g_write_mark_file_freq <= 0) { g_write_mark_file_freq = FDFS_DEFAULT_SYNC_MARK_FILE_FREQ; } g_sync_stat_file_interval = iniGetIntValue(NULL, \ "sync_stat_file_interval", &iniContext, \ DEFAULT_SYNC_STAT_FILE_INTERVAL); if (g_sync_stat_file_interval <= 0) { g_sync_stat_file_interval=DEFAULT_SYNC_STAT_FILE_INTERVAL; } pThreadStackSize = iniGetStrValue(NULL, \ "thread_stack_size", &iniContext); if (pThreadStackSize == NULL) { thread_stack_size = 512 * 1024; } else if ((result=parse_bytes(pThreadStackSize, 1, \ &thread_stack_size)) != 0) { return result; } g_thread_stack_size = (int)thread_stack_size; if (g_thread_stack_size < 64 * 1024) { logError("file: "__FILE__", line: %d, " \ "item \"thread_stack_size\" %d is invalid, " \ "which < %d", __LINE__, g_thread_stack_size, \ 64 * 1024); result = EINVAL; break; } g_upload_priority = iniGetIntValue(NULL, \ "upload_priority", &iniContext, \ DEFAULT_UPLOAD_PRIORITY); pIfAliasPrefix = iniGetStrValue(NULL, \ "if_alias_prefix", &iniContext); if (pIfAliasPrefix == NULL) { *g_if_alias_prefix = '\0'; } else { snprintf(g_if_alias_prefix, sizeof(g_if_alias_prefix), "%s", pIfAliasPrefix); } g_check_file_duplicate = iniGetBoolValue(NULL, \ "check_file_duplicate", &iniContext, false); if (g_check_file_duplicate) { char *pKeyNamespace; strcpy(g_fdht_base_path, g_fdfs_base_path); g_fdht_connect_timeout = g_fdfs_connect_timeout; g_fdht_network_timeout = g_fdfs_network_timeout; pKeyNamespace = iniGetStrValue(NULL, \ "key_namespace", &iniContext); if (pKeyNamespace == NULL || *pKeyNamespace == '\0') { logError("file: "__FILE__", line: %d, " \ "item \"key_namespace\" does not " \ "exist or is empty", __LINE__); result = EINVAL; break; } g_namespace_len = strlen(pKeyNamespace); if (g_namespace_len >= sizeof(g_key_namespace)) { g_namespace_len = sizeof(g_key_namespace) - 1; } memcpy(g_key_namespace, pKeyNamespace, g_namespace_len); *(g_key_namespace + g_namespace_len) = '\0'; if ((result=fdht_load_groups(&iniContext, \ &g_group_array)) != 0) { break; } g_keep_alive = iniGetBoolValue(NULL, "keep_alive", \ &iniContext, false); } g_http_port = iniGetIntValue(NULL, "http.server_port", \ &iniContext, 80); if (g_http_port <= 0) { logError("file: "__FILE__", line: %d, " \ "invalid param \"http.server_port\": %d", \ __LINE__, g_http_port); return EINVAL; } pHttpDomain = iniGetStrValue(NULL, \ "http.domain_name", &iniContext); if (pHttpDomain == NULL) { *g_http_domain = '\0'; } else { snprintf(g_http_domain, sizeof(g_http_domain), \ "%s", pHttpDomain); } #ifdef WITH_HTTPD { char *pHttpTrunkSize; int64_t http_trunk_size; if ((result=fdfs_http_params_load(&iniContext, \ filename, &g_http_params)) != 0) { break; } pHttpTrunkSize = iniGetStrValue(NULL, \ "http.trunk_size", &iniContext); if (pHttpTrunkSize == NULL) { http_trunk_size = 64 * 1024; } else if ((result=parse_bytes(pHttpTrunkSize, 1, \ &http_trunk_size)) != 0) { break; } g_http_trunk_size = (int)http_trunk_size; } #endif logInfo("FastDFS v%d.%02d, base_path=%s, store_path_count=%d, " \ "subdir_count_per_path=%d, group_name=%s, " \ "run_by_group=%s, run_by_user=%s, " \ "connect_timeout=%ds, network_timeout=%ds, "\ "port=%d, bind_addr=%s, client_bind=%d, " \ "max_connections=%d, work_threads=%d, " \ "disk_rw_separated=%d, disk_reader_threads=%d, " \ "disk_writer_threads=%d, " \ "buff_size=%dKB, heart_beat_interval=%ds, " \ "stat_report_interval=%ds, tracker_server_count=%d, " \ "sync_wait_msec=%dms, sync_interval=%dms, " \ "sync_start_time=%02d:%02d, sync_end_time=%02d:%02d, "\ "write_mark_file_freq=%d, " \ "allow_ip_count=%d, " \ "file_distribute_path_mode=%d, " \ "file_distribute_rotate_count=%d, " \ "fsync_after_written_bytes=%d, " \ "sync_log_buff_interval=%ds, " \ "sync_binlog_buff_interval=%ds, " \ "sync_stat_file_interval=%ds, " \ "thread_stack_size=%d KB, upload_priority=%d, " \ "if_alias_prefix=%s, " \ "check_file_duplicate=%d, FDHT group count=%d, " \ "FDHT server count=%d, FDHT key_namespace=%s, " \ "FDHT keep_alive=%d, HTTP server port=%d, " \ "domain name=%s", \ g_fdfs_version.major, g_fdfs_version.minor, \ g_fdfs_base_path, g_fdfs_path_count, g_subdir_count_per_path,\ g_group_name, g_run_by_group, g_run_by_user, \ g_fdfs_connect_timeout, \ g_fdfs_network_timeout, g_server_port, bind_addr, \ g_client_bind_addr, g_max_connections, \ g_work_threads, g_disk_rw_separated, \ g_disk_reader_threads, g_disk_writer_threads, \ g_buff_size / 1024, \ g_heart_beat_interval, g_stat_report_interval, \ g_tracker_group.server_count, g_sync_wait_usec / 1000, \ g_sync_interval / 1000, \ g_sync_start_time.hour, g_sync_start_time.minute, \ g_sync_end_time.hour, g_sync_end_time.minute, \ g_write_mark_file_freq, \ g_allow_ip_count, g_file_distribute_path_mode, \ g_file_distribute_rotate_count, \ g_fsync_after_written_bytes, g_sync_log_buff_interval, \ g_sync_binlog_buff_interval, g_sync_stat_file_interval, \ g_thread_stack_size/1024, g_upload_priority, \ g_if_alias_prefix, g_check_file_duplicate, \ g_group_array.group_count, g_group_array.server_count, \ g_key_namespace, g_keep_alive, \ g_http_port, g_http_domain); #ifdef WITH_HTTPD if (!g_http_params.disabled) { logInfo("HTTP supported: " \ "server_port=%d, " \ "http_trunk_size=%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", \ g_http_params.server_port, \ g_http_trunk_size, \ 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); } #endif } while (0); iniFreeContext(&iniContext); if (result != 0) { return result; } if ((result=storage_get_my_tracker_client_ip()) != 0) { return result; } if ((result=storage_check_and_make_data_dirs()) != 0) { logCrit("file: "__FILE__", line: %d, " \ "storage_check_and_make_data_dirs fail, " \ "program exit!", __LINE__); return result; } if ((result=storage_get_params_from_tracker()) != 0) { return result; } if ((result=storage_check_ip_changed()) != 0) { return result; } if ((result=init_pthread_lock(&sync_stat_file_lock)) != 0) { return result; } return storage_open_stat_file(); }
static int parse_line(struct evpaxos_config* c, char* line) { int rv; char* tok; char* sep = " "; struct option* opt; line = strtrim(line); tok = strsep(&line, sep); if (strcasecmp(tok, "a") == 0 || strcasecmp(tok, "acceptor") == 0) { if (c->acceptors_count >= MAX_N_OF_PROPOSERS) { paxos_log_error("Number of acceptors exceded maximum of: %d\n", MAX_N_OF_PROPOSERS); return 0; } struct address* addr = &c->acceptors[c->acceptors_count++]; return parse_address(line, addr); } if (strcasecmp(tok, "p") == 0 || strcasecmp(tok, "proposer") == 0) { if (c->proposers_count >= MAX_N_OF_PROPOSERS) { paxos_log_error("Number of proposers exceded maximum of: %d\n", MAX_N_OF_PROPOSERS); return 0; } struct address* addr = &c->proposers[c->proposers_count++]; return parse_address(line, addr); } if (strcasecmp(tok, "l") == 0 || strcasecmp(tok, "learner") == 0) { if (c->learners_count >= MAX_N_OF_PROPOSERS) { paxos_log_error("Number of learners exceded maximum of: %d\n", MAX_N_OF_PROPOSERS); return 0; } struct address* addr = &c->learners[c->learners_count++]; return parse_address(line, addr); } if (strcasecmp(tok, "r") == 0 || strcasecmp(tok, "replica") == 0) { if (c->proposers_count >= MAX_N_OF_PROPOSERS || c->acceptors_count >= MAX_N_OF_PROPOSERS ) { paxos_log_error("Number of replicas exceded maximum of: %d\n", MAX_N_OF_PROPOSERS); return 0; } struct address* pro_addr = &c->proposers[c->proposers_count++]; struct address* acc_addr = &c->acceptors[c->acceptors_count++]; int rv = parse_address(line, pro_addr); address_copy(pro_addr, acc_addr); return rv; } line = strtrim(line); opt = lookup_option(tok); if (opt == NULL) return 0; switch (opt->type) { case option_boolean: rv = parse_boolean(line, opt->value); if (rv == 0) paxos_log_error("Expected 'yes' or 'no'\n"); break; case option_integer: rv = parse_integer(line, opt->value); if (rv == 0) paxos_log_error("Expected number\n"); break; case option_string: rv = parse_string(line, opt->value); if (rv == 0) paxos_log_error("Expected string\n"); break; case option_verbosity: rv = parse_verbosity(line, opt->value); if (rv == 0) paxos_log_error("Expected quiet, error, info, or debug\n"); break; case option_backend: rv = parse_backend(line, opt->value); if (rv == 0) paxos_log_error("Expected memory, bdb or lmdb\n"); break; case option_bytes: rv = parse_bytes(line, opt->value); if (rv == 0) paxos_log_error("Expected number of bytes.\n"); } return rv; }
int main (int argc, char *argv[]) { int i; unsigned int res; uint32_t maxsize; int opt; int bs; int write_size = 4096; int delay_time = 1000; int repetitions = 100; int print_time = 10; int have_size = 0; int listen_only = 0; int flood = 0; int model = 1; int option_index = 0; struct option long_options[] = { {"flood-start", required_argument, 0, 0 }, {"flood-mult", required_argument, 0, 0 }, {"flood-max", required_argument, 0, 0 }, {"size-kb", required_argument, 0, 'w' }, {"size-bytes", required_argument, 0, 'W' }, {"name", required_argument, 0, 'n' }, {"rtt", no_argument, 0, 't' }, {"flood", no_argument, 0, 'f' }, {"quiet", no_argument, 0, 'q' }, {"listen", no_argument, 0, 'l' }, {"help", no_argument, 0, '?' }, {0, 0, 0, 0 } }; while ( (opt = getopt_long(argc, argv, "qlstafMEn:d:r:p:m:w:W:D:", long_options, &option_index)) != -1 ) { switch (opt) { case 0: // Long-only options if (strcmp(long_options[option_index].name, "flood-start") == 0) { flood_start = parse_bytes(optarg); if (flood_start == 0) { fprintf(stderr, "flood-start value invalid\n"); exit(1); } } if (strcmp(long_options[option_index].name, "flood-mult") == 0) { flood_multiplier = parse_bytes(optarg); if (flood_multiplier == 0) { fprintf(stderr, "flood-mult value invalid\n"); exit(1); } } if (strcmp(long_options[option_index].name, "flood-max") == 0) { flood_max = parse_bytes(optarg); if (flood_max == 0) { fprintf(stderr, "flood-max value invalid\n"); exit(1); } } break; case 'w': // Write size in K bs = atoi(optarg); if (bs > 0) { write_size = bs*1024; have_size = 1; } break; case 'W': // Write size in bytes (or with a suffix) bs = parse_bytes(optarg); if (bs > 0) { write_size = bs; have_size = 1; } break; case 'n': if (strlen(optarg) >= CPG_MAX_NAME_LENGTH) { fprintf(stderr, "CPG name too long\n"); exit(1); } strcpy(group_name.value, optarg); group_name.length = strlen(group_name.value); break; case 't': report_rtt = 1; break; case 'E': to_stderr = 1; break; case 'M': machine_readable = 1; break; case 'f': flood = 1; break; case 'a': abort_on_error = 1; break; case 'd': delay_time = atoi(optarg); break; case 'D': delimiter = optarg[0]; break; case 'r': repetitions = atoi(optarg); break; case 'p': print_time = atoi(optarg); break; case 'l': listen_only = 1; break; case 's': do_syslog = 1; break; case 'q': quiet++; break; case 'm': model = atoi(optarg); if (model < 0 || model > 1) { fprintf(stderr, "%s: Model must be 0-1\n", argv[0]); exit(1); } break; case '?': usage(basename(argv[0])); exit(1); } } if (!have_size && flood) { write_size = flood_start; } signal (SIGALRM, sigalrm_handler); signal (SIGINT, sigint_handler); switch (model) { case 0: res = cpg_initialize (&handle, &callbacks); break; case 1: res = cpg_model_initialize (&handle, CPG_MODEL_V1, (cpg_model_data_t *)&model1_data, NULL); break; default: res=999; // can't get here but it keeps the compiler happy break; } if (res != CS_OK) { cpgh_log_printf(CPGH_LOG_ERR, "cpg_initialize failed with result %d\n", res); exit (1); } res = cpg_local_get(handle, &g_our_nodeid); if (res != CS_OK) { cpgh_log_printf(CPGH_LOG_ERR, "cpg_local_get failed with result %d\n", res); exit (1); } pthread_create (&thread, NULL, dispatch_thread, NULL); res = cpg_join (handle, &group_name); if (res != CS_OK) { cpgh_log_printf(CPGH_LOG_ERR, "cpg_join failed with result %d\n", res); exit (1); } if (listen_only) { int secs = 0; while (!stopped) { sleep(1); if (++secs > print_time && !quiet) { int nodes_printed = 0; if (!machine_readable) { for (i=1; i<MAX_NODEID; i++) { if (g_recv_counter[i]) { cpgh_log_printf(CPGH_LOG_INFO, "%s: %5d message%s of %d bytes received from node %d\n", group_name.value, g_recv_counter[i] - g_recv_start[i], g_recv_counter[i]==1?"":"s", g_recv_size[i], i); nodes_printed++; } } } /* Separate list of nodes if more than one */ if (nodes_printed > 1) { cpgh_log_printf(CPGH_LOG_INFO, "\n"); } secs = 0; } } } else { cpg_max_atomic_msgsize_get (handle, &maxsize); if (write_size > maxsize) { fprintf(stderr, "INFO: packet size (%d) is larger than the maximum atomic size (%d), libcpg will fragment\n", write_size, maxsize); } /* The main job starts here */ if (flood) { for (i = 0; i < 10; i++) { /* number of repetitions - up to 50k */ cpg_flood (handle, write_size); signal (SIGALRM, sigalrm_handler); write_size *= flood_multiplier; if (write_size > flood_max) { break; } } } else { send_counter = -1; /* So we start from zero to allow listeners to sync */ for (i = 0; i < repetitions && !stopped; i++) { cpg_test (handle, write_size, delay_time, print_time); signal (SIGALRM, sigalrm_handler); } } } res = cpg_finalize (handle); if (res != CS_OK) { cpgh_log_printf(CPGH_LOG_ERR, "cpg_finalize failed with result %d\n", res); exit (1); } if (quiet < 2) { /* Don't print LONG_MAX for min_rtt if we don't have a value */ if (min_rtt == LONG_MAX) { min_rtt = 0L; } if (machine_readable) { cpgh_log_printf(CPGH_LOG_STATS, "%d%c%d%c%d%c%d%c%d%c%d%c%d%c%ld%c%ld%c%ld\n", packets_sent, delimiter, send_fails, delimiter, send_retries, delimiter, length_errors, delimiter, packets_recvd, delimiter, sequence_errors, delimiter, crc_errors, delimiter, min_rtt, delimiter, avg_rtt, delimiter, max_rtt); } else { cpgh_log_printf(CPGH_LOG_STATS, "\n"); cpgh_log_printf(CPGH_LOG_STATS, "Stats:\n"); if (!listen_only) { cpgh_log_printf(CPGH_LOG_STATS, " packets sent: %d\n", packets_sent); cpgh_log_printf(CPGH_LOG_STATS, " send failures: %d\n", send_fails); cpgh_log_printf(CPGH_LOG_STATS, " send retries: %d\n", send_retries); } cpgh_log_printf(CPGH_LOG_STATS, " length errors: %d\n", length_errors); cpgh_log_printf(CPGH_LOG_STATS, " packets recvd: %d\n", packets_recvd); cpgh_log_printf(CPGH_LOG_STATS, " sequence errors: %d\n", sequence_errors); cpgh_log_printf(CPGH_LOG_STATS, " crc errors: %d\n", crc_errors); if (!listen_only) { cpgh_log_printf(CPGH_LOG_STATS, " min RTT: %ld\n", min_rtt); cpgh_log_printf(CPGH_LOG_STATS, " max RTT: %ld\n", max_rtt); cpgh_log_printf(CPGH_LOG_STATS, " avg RTT: %ld\n", avg_rtt); } cpgh_log_printf(CPGH_LOG_STATS, "\n"); } } res = 0; if (send_fails > 0 || (have_size && length_errors > 0) || sequence_errors > 0 || crc_errors > 0) { res = 2; } return (res); }
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; }
/* Main function */ int main ( int argc, char** argv) { /* Default settings for serial connection */ char *port = "/dev/ttyUSB0"; int baud = 57600; /* Serial read buffer */ int bytes; unsigned char buff[32]; /* Parse arguments */ int c; while ((c = getopt (argc, argv, "a:p:b:h")) != -1) { switch (c) { case 'a': ac_id = atoi(optarg); break; case 'p': port = optarg; break; case 'b': baud = atoi(optarg); break; case 'h': default: printf("usage: sdlogger_download [options]\n" " options:\n" " -a \tAircraft ID\n" " -p \tPort (default: /dev/ttyUSB0).\n" " -b \tBaudrate (default: 57600).\n" " -h \tHelp, shows this message.\n"); exit(0); } } /* Obtain sd2log directory */ char *pprz_home; pprz_home = getenv( "PAPARAZZI_HOME" ); strcat(sd2log, pprz_home); strcat(sd2log, "/sw/logalizer/sd2log temp.tlm"); /* Get the setting ID with a python script */ /* TODO: would be nicer to have a C xml parser */ FILE *in = NULL; //strcat(pycommand, pprz_home); //strcat(pycommand, "/sw/logalizer/sdlogger_get_setting_id.py %u sdlogger_spi.command"); char new_command[256]; strcat(pycommand, "python sdlogger_get_setting_id.py %u sdlogger_spi.command"); sprintf(new_command, pycommand, ac_id); strcpy(pycommand, new_command); char returnvalue[128]; in = popen(pycommand, "r"); fgets(returnvalue, 128, in); setting = atoi(returnvalue); pclose(in); if (setting == 0) { printf("Aborting: %s\n", returnvalue); exit(0); } /* Enable Ctrl+C */ signal(SIGINT, intHandler); /* Open serial port */ printf("Opening port %s with baudrate B%i\n", port, baud); if(serial_init(port, baud) < 0){ return -1; } /* Keep polling for logger */ printf("Searching for logger.."); time_t counter = time(0); time_t timeout = 1; // every second while (keep_running && searching) { if (time(0) - counter >= timeout) { printf("."); fflush(stdout); write_command(255); global_state = WaitingForIndexRequestConfirmation; counter = time(0); } else { bytes = read(fd, (unsigned char*) buff, 32); parse_bytes(buff, bytes); usleep(5000); } } char command[128]; strcpy(command, "help"); /* Show available commands */ printf("\n"); process_command(command); while (keep_running) { if (need_input) { need_input = false; /* Test user input */ printf("Command> "); fgets (command, 128, stdin); process_command(command); } else { bytes = read(fd, (unsigned char*) buff, 32); parse_bytes(buff, bytes); } } printf("Closing app\n"); /* Close serial port */ close_port(); return 0; }