diff --git a/HISTORY b/HISTORY index 5bf5b05..b67e019 100644 --- a/HISTORY +++ b/HISTORY @@ -1,12 +1,14 @@ -Version 6.05 2019-12-18 +Version 6.05 2019-12-19 * fdfs_trackerd and fdfs_storaged print the server version in usage. you can execute fdfs_trackerd or fdfs_storaged without parameters to show the server version * trunk server support compress the trunk binlog periodically, - config items in tracker.conf: trunk_compress_binlog_interval + the config items in tracker.conf: trunk_compress_binlog_interval and trunk_compress_binlog_time_base * trunk binlog compression support transaction + * support backup binlog file when truncate trunk binlog, + the config item in tracker.conf: trunk_binlog_max_backups Version 6.04 2019-12-05 * storage_report_ip_changed ignore result EEXIST diff --git a/conf/tracker.conf b/conf/tracker.conf index adccc65..c328270 100644 --- a/conf/tracker.conf +++ b/conf/tracker.conf @@ -217,6 +217,11 @@ trunk_compress_binlog_interval = 86400 # since V6.05 trunk_compress_binlog_time_base = 03:00 +# max backups for the trunk binlog file +# default value is 0 (never backup) +# since V6.05 +trunk_binlog_max_backups = 7 + # if use storage server ID instead of IP address # if you want to use dual IPs for storage server, you MUST set # this parameter to true, and configure the dual IPs in the file diff --git a/storage/storage_param_getter.c b/storage/storage_param_getter.c index e439116..73f526d 100644 --- a/storage/storage_param_getter.c +++ b/storage/storage_param_getter.c @@ -74,30 +74,30 @@ int storage_get_params_from_tracker() char reserved_space_str[32]; char *pIdType; - if ((result=fdfs_get_ini_context_from_tracker(&g_tracker_group, \ - &iniContext, (bool * volatile)&g_continue_flag, \ + 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", \ + g_storage_ip_changed_auto_adjust = iniGetBoolValue(NULL, + "storage_ip_changed_auto_adjust", &iniContext, false); - g_store_path_mode = iniGetIntValue(NULL, "store_path", &iniContext, \ + g_store_path_mode = iniGetIntValue(NULL, "store_path", &iniContext, FDFS_STORE_PATH_ROUND_ROBIN); - if ((result=fdfs_parse_storage_reserved_space(&iniContext, \ + if ((result=fdfs_parse_storage_reserved_space(&iniContext, &g_storage_reserved_space)) != 0) { iniFreeContext(&iniContext); return result; } - if (g_storage_reserved_space.flag == \ + if (g_storage_reserved_space.flag == TRACKER_STORAGE_RESERVED_SPACE_FLAG_MB) { - g_avg_storage_reserved_mb = g_storage_reserved_space.rs.mb \ + g_avg_storage_reserved_mb = g_storage_reserved_space.rs.mb / g_fdfs_store_paths.count; } else @@ -105,31 +105,31 @@ int storage_get_params_from_tracker() g_avg_storage_reserved_mb = 0; } - g_use_storage_id = iniGetBoolValue(NULL, "use_storage_id", \ + g_use_storage_id = iniGetBoolValue(NULL, "use_storage_id", &iniContext, false); - use_trunk_file = iniGetBoolValue(NULL, "use_trunk_file", \ + use_trunk_file = iniGetBoolValue(NULL, "use_trunk_file", &iniContext, false); - g_slot_min_size = iniGetIntValue(NULL, "slot_min_size", \ + g_slot_min_size = iniGetIntValue(NULL, "slot_min_size", &iniContext, 256); - g_trunk_file_size = iniGetIntValue(NULL, "trunk_file_size", \ + g_trunk_file_size = iniGetIntValue(NULL, "trunk_file_size", &iniContext, 64 * 1024 * 1024); - g_slot_max_size = iniGetIntValue(NULL, "slot_max_size", \ + g_slot_max_size = iniGetIntValue(NULL, "slot_max_size", &iniContext, g_trunk_file_size / 2); - g_trunk_create_file_advance = iniGetBoolValue(NULL, \ + 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", \ + 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, \ + 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", \ + g_trunk_create_file_space_threshold = iniGetInt64Value(NULL, + "trunk_create_file_space_threshold", &iniContext, 0); g_trunk_init_check_occupying = iniGetBoolValue(NULL, @@ -147,7 +147,9 @@ int storage_get_params_from_tracker() return result; } - g_store_slave_file_use_link = iniGetBoolValue(NULL, \ + g_trunk_binlog_max_backups = iniGetIntValue(NULL, + "trunk_binlog_max_backups", &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); @@ -178,48 +180,50 @@ int storage_get_params_from_tracker() } 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, " \ - "trunk_compress_binlog_interval=%d, " \ - "trunk_compress_binlog_time_base=%02d:%02d, " \ - "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_trunk_compress_binlog_interval, \ - g_trunk_compress_binlog_time_base.hour, \ - g_trunk_compress_binlog_time_base.minute, \ + 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, " + "trunk_compress_binlog_interval=%d, " + "trunk_compress_binlog_time_base=%02d:%02d, " + "trunk_binlog_max_backups=%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_trunk_compress_binlog_interval, + g_trunk_compress_binlog_time_base.hour, + g_trunk_compress_binlog_time_base.minute, + g_trunk_binlog_max_backups, g_store_slave_file_use_link); - if (g_use_storage_id && *g_sync_src_id != '\0' && \ + 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) diff --git a/storage/trunk_mgr/trunk_mem.c b/storage/trunk_mgr/trunk_mem.c index 1dff485..4443090 100644 --- a/storage/trunk_mgr/trunk_mem.c +++ b/storage/trunk_mgr/trunk_mem.c @@ -56,6 +56,7 @@ TimeInfo g_trunk_compress_binlog_time_base = {0, 0}; int g_trunk_create_file_interval = 86400; int g_trunk_compress_binlog_min_interval = 0; int g_trunk_compress_binlog_interval = 0; +int g_trunk_binlog_max_backups = 0; TrackerServerInfo g_trunk_server = {0, 0}; bool g_if_use_trunk_file = false; bool g_if_trunker_self = false; diff --git a/storage/trunk_mgr/trunk_mem.h b/storage/trunk_mgr/trunk_mem.h index b7162b5..f8b2d75 100644 --- a/storage/trunk_mgr/trunk_mem.h +++ b/storage/trunk_mgr/trunk_mem.h @@ -50,6 +50,7 @@ extern TimeInfo g_trunk_compress_binlog_time_base; extern int g_trunk_create_file_interval; extern int g_trunk_compress_binlog_min_interval; extern int g_trunk_compress_binlog_interval; +extern int g_trunk_binlog_max_backups; extern TrackerServerInfo g_trunk_server; //the trunk server extern bool g_if_use_trunk_file; //if use trunk file extern bool g_trunk_create_file_advance; diff --git a/storage/trunk_mgr/trunk_sync.c b/storage/trunk_mgr/trunk_sync.c index a0ffacb..54ac1fb 100644 --- a/storage/trunk_mgr/trunk_sync.c +++ b/storage/trunk_mgr/trunk_sync.c @@ -39,7 +39,8 @@ #include "storage_sync_func.h" #include "trunk_sync.h" -#define TRUNK_SYNC_BINLOG_FILENAME "binlog" +#define TRUNK_SYNC_BINLOG_FILENAME_STR "binlog" +#define TRUNK_SYNC_BINLOG_FILENAME_LEN (sizeof(TRUNK_SYNC_BINLOG_FILENAME_STR) - 1) #define TRUNK_SYNC_BINLOG_ROLLBACK_EXT ".rollback" #define TRUNK_SYNC_MARK_FILE_EXT_STR ".mark" #define TRUNK_SYNC_MARK_FILE_EXT_LEN (sizeof(TRUNK_SYNC_MARK_FILE_EXT_STR) - 1) @@ -82,7 +83,7 @@ static int trunk_binlog_preread(TrunkBinLogReader *pReader); char *get_trunk_binlog_filename(char *full_filename) { snprintf(full_filename, MAX_PATH_SIZE, \ - "%s/data/"TRUNK_DIR_NAME"/"TRUNK_SYNC_BINLOG_FILENAME, \ + "%s/data/"TRUNK_DIR_NAME"/"TRUNK_SYNC_BINLOG_FILENAME_STR, \ g_fdfs_base_path); return full_filename; } @@ -405,29 +406,227 @@ int trunk_binlog_sync_func(void *args) } } +#define BACKUP_FILENAME_LEN (TRUNK_SYNC_BINLOG_FILENAME_LEN + 15) + +typedef struct +{ + char filename[BACKUP_FILENAME_LEN + 1]; +} TrunkBinlogBackupFileInfo; + +typedef struct +{ + TrunkBinlogBackupFileInfo *files; + int count; + int alloc; +} TrunkBinlogBackupFileArray; + +static int trunk_binlog_check_alloc_filename_array( + TrunkBinlogBackupFileArray *file_array) +{ + int bytes; + TrunkBinlogBackupFileInfo *files; + int alloc; + + if (file_array->count < file_array->alloc) + { + return 0; + } + + if (file_array->alloc == 0) + { + alloc = g_trunk_binlog_max_backups + 1; + } + else + { + alloc = file_array->alloc * 2; + } + + bytes = sizeof(TrunkBinlogBackupFileInfo) * alloc; + files = (TrunkBinlogBackupFileInfo *)malloc(bytes); + if (files == NULL) + { + logError("file: "__FILE__", line: %d, " + "malloc %d bytes fail", __LINE__, bytes); + return ENOMEM; + } + + if (file_array->count > 0) + { + memcpy(files, file_array->files, sizeof(TrunkBinlogBackupFileInfo) * + file_array->count); + } + + if (file_array->files != NULL) + { + free(file_array->files); + } + + file_array->files = files; + file_array->alloc = alloc; + return 0; +} + +static int trunk_binlog_compare_filename(const void *p1, const void *p2) +{ + return strcmp(((TrunkBinlogBackupFileInfo *)p1)->filename, + ((TrunkBinlogBackupFileInfo *)p2)->filename); +} + +static int trunk_binlog_delete_overflow_backups() +{ +#define BACKUP_FILENAME_PREFIX_STR TRUNK_SYNC_BINLOG_FILENAME_STR"." +#define BACKUP_FILENAME_PREFIX_LEN (sizeof(BACKUP_FILENAME_PREFIX_STR) - 1) + + int result; + int i; + int over_count; + char file_path[MAX_PATH_SIZE]; + char full_filename[MAX_PATH_SIZE]; + DIR *dir; + struct dirent *ent; + TrunkBinlogBackupFileArray file_array; + + snprintf(file_path, sizeof(file_path), + "%s/data/%s", g_fdfs_base_path, TRUNK_DIR_NAME); + if ((dir=opendir(file_path)) == NULL) + { + result = errno != 0 ? errno : EPERM; + logError("file: "__FILE__", line: %d, " + "call opendir %s fail, errno: %d, error info: %s", + __LINE__, file_path, result, STRERROR(result)); + return result; + } + + result = 0; + file_array.files = NULL; + file_array.count = 0; + file_array.alloc = 0; + while ((ent=readdir(dir)) != NULL) + { + if (strlen(ent->d_name) == BACKUP_FILENAME_LEN && + memcmp(ent->d_name, BACKUP_FILENAME_PREFIX_STR, + BACKUP_FILENAME_PREFIX_LEN) == 0) + { + if ((result=trunk_binlog_check_alloc_filename_array( + &file_array)) != 0) + { + break; + } + + strcpy(file_array.files[file_array.count]. + filename, ent->d_name); + file_array.count++; + break; + } + } + + closedir(dir); + + over_count = file_array.count - g_trunk_binlog_max_backups; + if (result != 0 || over_count <= 0) + { + if (file_array.files != NULL) + { + free(file_array.files); + } + return result; + } + + qsort(file_array.files, file_array.count, + sizeof(TrunkBinlogBackupFileInfo), + trunk_binlog_compare_filename); + for (i=0; i 0) - { - if ((result=trunk_binlog_fsync(true)) != 0) - { - return result; - } - } + result = 0; + pthread_mutex_lock(&trunk_sync_thread_lock); + do + { + if (g_trunk_binlog_max_backups > 0) + { + result = trunk_binlog_backup_and_truncate(); + } + else + { + if (trunk_binlog_write_cache_len > 0) + { + if ((result=trunk_binlog_fsync(false)) != 0) + { + break; + } + } + if (ftruncate(trunk_binlog_fd, 0) != 0) + { + result = errno != 0 ? errno : EIO; + logError("file: "__FILE__", line: %d, " + "call ftruncate fail, " + "errno: %d, error info: %s", + __LINE__, result, STRERROR(result)); + break; + } + } + } while (0); - if (ftruncate(trunk_binlog_fd, 0) != 0) - { - result = errno != 0 ? errno : EIO; - logError("file: "__FILE__", line: %d, " \ - "call ftruncate fail, " \ - "errno: %d, error info: %s", \ - __LINE__, result, STRERROR(result)); - return result; - } - - return 0; + pthread_mutex_unlock(&trunk_sync_thread_lock); + return result; } static int trunk_binlog_delete_rollback_file(const char *filename, @@ -1206,7 +1405,7 @@ int trunk_binlog_write_buffer(const char *buff, const int length) return write_ret; } -static char *get_binlog_readable_filename(const void *pArg, \ +static char *get_binlog_readable_filename(const void *pArg, char *full_filename) { static char buff[MAX_PATH_SIZE]; @@ -1217,7 +1416,7 @@ static char *get_binlog_readable_filename(const void *pArg, \ } snprintf(full_filename, MAX_PATH_SIZE, - "%s/data/"TRUNK_DIR_NAME"/"TRUNK_SYNC_BINLOG_FILENAME, \ + "%s/data/"TRUNK_DIR_NAME"/"TRUNK_SYNC_BINLOG_FILENAME_STR, g_fdfs_base_path); return full_filename; } diff --git a/tracker/tracker_func.c b/tracker/tracker_func.c index 79917c8..b88d3dc 100644 --- a/tracker/tracker_func.c +++ b/tracker/tracker_func.c @@ -576,6 +576,9 @@ int tracker_load_from_conf_file(const char *filename, \ return result; } + g_trunk_binlog_max_backups = iniGetIntValue(NULL, + "trunk_binlog_max_backups", &iniContext, 0); + g_trunk_init_check_occupying = iniGetBoolValue(NULL, \ "trunk_init_check_occupying", &iniContext, false); @@ -728,89 +731,91 @@ int tracker_load_from_conf_file(const char *filename, \ 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, " \ - "trunk_compress_binlog_interval=%d, " \ - "trunk_compress_binlog_time_base=%02d:%02d, " \ - "use_storage_id=%d, " \ - "id_type_in_filename=%s, " \ - "storage_id/ip_count=%d / %d, " \ - "rotate_error_log=%d, " \ - "error_log_rotate_time=%02d:%02d, " \ - "compress_old_error_log=%d, " \ - "compress_error_log_days_before=%d, " \ - "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_trunk_compress_binlog_interval, \ - g_trunk_compress_binlog_time_base.hour, \ - g_trunk_compress_binlog_time_base.minute, \ - g_use_storage_id, g_id_type_in_filename == \ - FDFS_ID_TYPE_SERVER_ID ? "id" : "ip", \ - g_storage_ids_by_id.count, g_storage_ids_by_ip.count, \ - g_rotate_error_log, g_error_log_rotate_time.hour, \ - g_error_log_rotate_time.minute, g_compress_old_error_log, \ - g_compress_error_log_days_before, \ + 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, " + "trunk_compress_binlog_interval=%d, " + "trunk_compress_binlog_time_base=%02d:%02d, " + "trunk_binlog_max_backups=%d, " + "use_storage_id=%d, " + "id_type_in_filename=%s, " + "storage_id/ip_count=%d / %d, " + "rotate_error_log=%d, " + "error_log_rotate_time=%02d:%02d, " + "compress_old_error_log=%d, " + "compress_error_log_days_before=%d, " + "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_trunk_compress_binlog_interval, + g_trunk_compress_binlog_time_base.hour, + g_trunk_compress_binlog_time_base.minute, + g_trunk_binlog_max_backups, + g_use_storage_id, g_id_type_in_filename == + FDFS_ID_TYPE_SERVER_ID ? "id" : "ip", + g_storage_ids_by_id.count, g_storage_ids_by_ip.count, + g_rotate_error_log, g_error_log_rotate_time.hour, + g_error_log_rotate_time.minute, g_compress_old_error_log, + g_compress_error_log_days_before, g_log_context.rotate_size, g_log_file_keep_days, - g_store_slave_file_use_link, \ + g_store_slave_file_use_link, g_use_connection_pool, g_connection_pool_max_idle_time); #ifdef WITH_HTTPD diff --git a/tracker/tracker_global.c b/tracker/tracker_global.c index de47160..9dadae9 100644 --- a/tracker/tracker_global.c +++ b/tracker/tracker_global.c @@ -59,6 +59,7 @@ TimeInfo g_trunk_compress_binlog_time_base = {0, 0}; int g_trunk_create_file_interval = 86400; int g_trunk_compress_binlog_interval = 0; int g_trunk_compress_binlog_min_interval = 0; +int g_trunk_binlog_max_backups = 0; int64_t g_trunk_create_file_space_threshold = 0; time_t g_up_time = 0; diff --git a/tracker/tracker_global.h b/tracker/tracker_global.h index 1bec35c..05ce99d 100644 --- a/tracker/tracker_global.h +++ b/tracker/tracker_global.h @@ -83,6 +83,7 @@ extern TimeInfo g_trunk_compress_binlog_time_base; extern int g_trunk_create_file_interval; extern int g_trunk_compress_binlog_interval; extern int g_trunk_compress_binlog_min_interval; +extern int g_trunk_binlog_max_backups; extern int64_t g_trunk_create_file_space_threshold; extern time_t g_up_time; diff --git a/tracker/tracker_service.c b/tracker/tracker_service.c index f75d0b4..3e9d03b 100644 --- a/tracker/tracker_service.c +++ b/tracker/tracker_service.c @@ -661,6 +661,7 @@ static int tracker_deal_get_trunk_fid(struct fast_task_info *pTask) static int tracker_deal_parameter_req(struct fast_task_info *pTask) { char reserved_space_str[32]; + int body_len; if (pTask->length - sizeof(TrackerHeader) != 0) { @@ -676,49 +677,51 @@ static int tracker_deal_parameter_req(struct fast_task_info *pTask) return EINVAL; } - pTask->length = sizeof(TrackerHeader) + \ - sprintf(pTask->data + sizeof(TrackerHeader), \ - "use_storage_id=%d\n" \ - "id_type_in_filename=%s\n" \ - "storage_ip_changed_auto_adjust=%d\n" \ - "storage_sync_file_max_delay=%d\n" \ - "store_path=%d\n" \ - "reserved_storage_space=%s\n" \ - "use_trunk_file=%d\n" \ - "slot_min_size=%d\n" \ - "slot_max_size=%d\n" \ - "trunk_file_size=%d\n" \ - "trunk_create_file_advance=%d\n" \ - "trunk_create_file_time_base=%02d:%02d\n" \ - "trunk_create_file_interval=%d\n" \ - "trunk_create_file_space_threshold=%"PRId64"\n" \ - "trunk_init_check_occupying=%d\n" \ - "trunk_init_reload_from_binlog=%d\n" \ - "trunk_compress_binlog_min_interval=%d\n" \ - "trunk_compress_binlog_interval=%d\n" \ - "trunk_compress_binlog_time_base=%02d:%02d\n" \ - "store_slave_file_use_link=%d\n", \ - g_use_storage_id, g_id_type_in_filename == \ - FDFS_ID_TYPE_SERVER_ID ? "id" : "ip", \ - g_storage_ip_changed_auto_adjust, \ - g_storage_sync_file_max_delay, g_groups.store_path, \ - 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, \ - g_trunk_file_size, g_trunk_create_file_advance, \ - g_trunk_create_file_time_base.hour, \ - g_trunk_create_file_time_base.minute, \ - g_trunk_create_file_interval, \ - g_trunk_create_file_space_threshold, \ - g_trunk_init_check_occupying, \ - g_trunk_init_reload_from_binlog, \ - g_trunk_compress_binlog_min_interval, \ - g_trunk_compress_binlog_interval, \ - g_trunk_compress_binlog_time_base.hour, \ - g_trunk_compress_binlog_time_base.minute, \ - g_store_slave_file_use_link); + body_len = sprintf(pTask->data + sizeof(TrackerHeader), + "use_storage_id=%d\n" + "id_type_in_filename=%s\n" + "storage_ip_changed_auto_adjust=%d\n" + "storage_sync_file_max_delay=%d\n" + "store_path=%d\n" + "reserved_storage_space=%s\n" + "use_trunk_file=%d\n" + "slot_min_size=%d\n" + "slot_max_size=%d\n" + "trunk_file_size=%d\n" + "trunk_create_file_advance=%d\n" + "trunk_create_file_time_base=%02d:%02d\n" + "trunk_create_file_interval=%d\n" + "trunk_create_file_space_threshold=%"PRId64"\n" + "trunk_init_check_occupying=%d\n" + "trunk_init_reload_from_binlog=%d\n" + "trunk_compress_binlog_min_interval=%d\n" + "trunk_compress_binlog_interval=%d\n" + "trunk_compress_binlog_time_base=%02d:%02d\n" + "trunk_binlog_max_backups=%d\n" + "store_slave_file_use_link=%d\n", + g_use_storage_id, g_id_type_in_filename == + FDFS_ID_TYPE_SERVER_ID ? "id" : "ip", + g_storage_ip_changed_auto_adjust, + g_storage_sync_file_max_delay, g_groups.store_path, + 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, + g_trunk_file_size, g_trunk_create_file_advance, + g_trunk_create_file_time_base.hour, + g_trunk_create_file_time_base.minute, + g_trunk_create_file_interval, + g_trunk_create_file_space_threshold, + g_trunk_init_check_occupying, + g_trunk_init_reload_from_binlog, + g_trunk_compress_binlog_min_interval, + g_trunk_compress_binlog_interval, + g_trunk_compress_binlog_time_base.hour, + g_trunk_compress_binlog_time_base.minute, + g_trunk_binlog_max_backups, + g_store_slave_file_use_link); + pTask->length = sizeof(TrackerHeader) + body_len; return 0; }