Version 6.12.2 2024-09-16 * use libfastcommon V1.75 and libserverframe 1.2.5 Version 6.12.1 2024-03-06 * adapt to libserverframe 1.2.3 * bugfixed: notify_leader_changed support IPv6 correctly * log square quoted IPv6 address Version 6.12.0 2024-02-12 * bugfixed: parse ip and port use parseAddress instead of splitEx * bugfixed: fdfs_server_info_to_string support IPv6 correctly * check filename duplicate by hashtable instead of file system access Version 6.11.0 2023-12-10 * support IPv6, config item: address_family in tracker.conf and storage.conf use libfastcommon V1.71 and libserverframe 1.2.1 * storage.conf can specify the storage server ID for NAT network Version 6.10.0 2023-09-07 * use libfastcommon V1.70 and libserverframe 1.2.0 Version 6.9.5 2023-06-05 * fix possible out-of-bounds issues with array access * fix realloc mistakes to avoid memory leaks * add ExecStartPost=/bin/sleep 0.1 to systemd service files * fdht_client/fdht_func.c: fixed compile error Version 6.9.4 2023-02-15 * use epoll edge trigger to resolve github issues #608 * bugfixed: report connections' current_count and max_count correctly Version 6.9.3 2022-12-24 * use prctl to set pthread name under Linux Version 6.9.2 2022-11-28 * space size such as total_mb and free_mb use int64_t instead of int * bugfixed: log connection ip_addr and port correctly * output port with format %u instead %d Version 6.9.1 2022-11-25 * bugfixed: clear task extra data correctly when the connection broken Version 6.09 2022-09-14 * use libfastcommon V1.60 and libserverframe 1.1.19 * use atomic counter instead of mutex lock Version 6.08 2022-06-21 * use libfastcommon V1.56 NOTE: you MUST upgrade libfastcommon to V1.56 or later Version 6.07 2020-12-31 * use libfastcommon V1.44 NOTE: you MUST upgrade libfastcommon to V1.44 or later * correct spell iovent to ioevent follows libfastcommon Version 6.06 2019-12-30 * bugfixed: fdfs_storaged can't quit normally * bugfixed: init/memset return ip address to ascii 0 for Java SDK Version 6.05 2019-12-25 * 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, 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 * support alignment size for trunk space allocation the config item in tracker.conf: trunk_alloc_alignment_size * support merge free trunk spaces the config item in tracker.conf: trunk_free_space_merge * support delete unused trunk files the config item in tracker.conf: delete_unused_trunk_files * fdfs_monitor.c: do NOT call getHostnameByIp NOTE: you MUST upgrade libfastcommon to V1.43 or later Version 6.04 2019-12-05 * storage_report_ip_changed ignore result EEXIST * use get_gzip_command_filename from libfastcommon v1.42 * support compress error log and access log * disk recovery support multi-threads to speed up * bugfix: should use memset to init pReader in function storage_reader_init, this bug is caused by v6.01 NOTE: you MUST upgrade libfastcommon to V1.42 or later Version 6.03 2019-11-20 * dual IPs support two different types of inner (intranet) IPs * storage server request tracker server to change it's status to that of tracker leader when the storage server found it's status inconsistence * bugfix: fdfs_monitor fix get index of the specified tracker server * storage server write to data_init_flag and mark file safely (write to temp file then rename) * code refine: combine g_fdfs_store_paths and g_path_space_list, and extent struct FDFSStorePathInfo * check store path's mark file to prevent confusion * new selected tracker leader do NOT notify self by network * larger network_timeout for fetching one-store-path binlog when disk recovery NOTE: the tracker and storage server must upgrade together Version 6.02 2019-11-12 * get_file_info calculate CRC32 for appender file type * disk recovery download file to local temp file then rename it when the local file exists * support regenerate filename for appender file NOTE: the regenerated file will be a normal file! Version 6.01 2019-10-25 * compress and uncompress binlog file by gzip when need, config items in storage.conf: compress_binlog and compress_binlog_time * bugfix: must check and create data path before write_to_pid_file in fdfs_storaged.c Version 6.00 2019-10-16 * tracker and storage server support dual IPs 1. you can config dual tracker IPs in storage.conf and client.conf, the configuration item name is "tracker_server" 2. you can config dual storage IPs in storage_ids.conf more detail please see the config files. NOTE: you MUST upgrade libfastcommon to V1.41 or later the tracker and storage server must upgrade together * storage server get IP from tracker server * storage server report current tracker IP to the tracker server when join * tracker server check tracker list when storage server join * use socketCreateExAuto and socketClientExAuto exported by libfastcommon Version 5.12 2018-06-07 * code refine for rare case * replace print format OFF_PRINTF_FORMAT to PRId64 * php_ext fix zend_object_store_get_object call in php5.5 * make.sh uses macros define in /usr/include/fastcommon/_os_define.h * correct CRC32, you must upgrade libfastcommon to V1.38 or later Version 5.11 2017-05-26 * bug fixed: file_offset has no effect when use trunk file * add storage access log header * http.conf add parameter http.multi_range.enabed Version 5.10 2017-03-29 * use fc_safe_read instead of read, and fc_safe_write instead of write you must upgrade libfastcommon to V1.35 or later * fix getFileContentEx read bytes, you must upgrade libfastcommon to V1.36 or later * do NOT sync storage server info to tracker leader * adjust parameter store_server when use_trunk_file is true * clear sync src id when tracker response ENOENT * log more info when fdfs_recv_header / fdfs_recv_response fail Version 5.09 2016-12-29 * bug fixed: list_all_groups expand buffer auto for so many groups * tracker.conf add parameters: min_buff_size and max_buff_size * php extension fix free object bug in PHP 7 Version 5.08 2016-04-08 * install library to $(TARGET_PREFIX)/lib anyway * php extension compiled in PHP 7 * dio thread use blocked_queue and php extension use php7_ext_wrapper.h, you must upgrade libfastcommon to V1.25 or later * remove common/linux_stack_trace.[hc] Version 5.07 2015-09-13 * schedule task add the "second" field * make.sh changed, you must upgrade libfastcommon to V1.21 or later * bug fixed: storage_disk_recovery.c skip the first file (binlog first line) * bug fixed: should close connection after fetch binlog * fdfs_storaged.c: advance the position of daemon_init * set log rotate time format * bug fixed: must check store_path_index Version 5.06 2015-05-12 * compile passed in mac OS Darwin * correct scripts in subdir init.d * check item thread_stack_size in storage.conf, you must upgrade libfastcommon to V1.14 or later Version 5.05 2014-11-22 * tracker_mem.c log more info * remove useless global variable: g_network_tv * storage can fetch it's group_name from tracker server Version 5.04 2014-09-16 * add fastdfs.spec for build RPM on Linux * depend on libfastcommon * in multi tracker servers case, when receive higher status like online / active and the storage status is wait_sync or syncing, the tracker adjust storage status to newer, and the storage rejoin to the tracker server * fdfs_monitor support delete empty group * bug fixed: two tracker leaders occur in rare case * add connection stats * delete old log files, add parameter: log_file_keep_days Version 5.03 2014-08-10 * network send and recv retry when error EINTR happen * support mac OS Darwin * use newest logger from libfastcommon * patches by liangry@ucweb.com * bug fixed: can't sync large files cause by v5.02 * use newest files from libfastcommon * change TRACKER_SYNC_STATUS_FILE_INTERVAL from 3600 to 300 * socket send and recv ignore erno EINTR Version 5.02 2014-07-20 * corect README spell mistake * bug fixed: can't deal sync truncate file exception * remove tracker_global.c extern keyword to tracker_global.h * change log level from ERROR to DEBUG when IOEVENT_ERROR * php callback should use INIT_ZVAL to init zval variable * add function short2buff and buff2short * add get_url_content_ex to support buffer passed by caller * logger can set rotate time format * logger can log header line * #include to use C99 bool * logger can delete old rotated files * bug fixed: connection pool should NOT increase counter when connect fail * logger.c do NOT call fsync after write Version 5.01 2014-02-02 * trunk binlog be compressed when trunk init * bug fixed: sync trunk binlog file to other storage servers immediately when the trunk server init done * move ioevent_loop.[hc] and fast_task_queue.[hc] from tracker/ to common/ * hash table support locks * hash talbe support new functions: hash_inc and hash_inc_ex Version 5.00 2013-12-23 * discard libevent, use epoll in Linux, kqueue in FreeBSD, port in SunOS directly * do_notify_leader_changed force close connection when target is myself * modify the INSTALL file and tracker/Makefile.in Version 4.08 2013-11-30 * bug fixed: FDFS_DOWNLOAD_SERVER_ROUND_ROBIN change to FDFS_STORE_SERVER_ROUND_ROBIN * dio_init use memset to init buffer * disable linger setting (setsockopt with option SO_LINGER) * change log level from error to warning when file not exist on storage server Version 4.07 2013-06-02 * make.sh add -lpthread by ldconfig check * support multi accept threads * tracker and storage server close client connection when recv invalid package * client/storage_client.c: file_exist with silence flag * tracker and storage process support start, stop and restart command * tracker/tracker_proto.c fdfs_recv_header: logDebug change to logError Version 4.06 2013-01-24 * fdfs_upload_file tool enhancement * fdfs_download_file tool support offset and download size * trunk file upload support sub paths rotating correctly * add function: fdfs_http_get_file_extension * sync truncate file operation anyway Version 4.05 2012-12-30 * client/fdfs_upload_file.c can specify storage ip port and store path index * add connection pool * client load storage ids config * common/ini_file_reader.c does NOT call chdir * keep the mtime of file same * use g_current_time instead of call time function * remove embed HTTP support Version 4.04 2012-12-02 * bug fixed: get storage server id when storage daemon init * storage id in filename use global variable * dynamic alloc memory 8 bytes alignment * fast_task_queue support memory pool chain Version 4.03 2012-11-18 * trunk_mgr/trunk_mem.c: log error and add more debug info * file id generated by storage server can include storage server ID Version 4.02 2012-10-30 * validate file_ext_name and prefix_name when upload file * storage.conf add parameter: file_sync_skip_invalid_record * add offset debug info when sync file fail * bug fixed: log to binlog also if the file exists when sync file * tracker and storage error log support rotate * support rotate log by file size * rotate log when receive HUP signal * fdfs_monitor support set trunk server * bug fixed: tracker_mem.c correct double mutex lock Version 4.01 2012-10-21 * trunk_mgr/trunk_mem.c: trunk init flag check more strictly * file signature for checking file duplicate support MD5 * slave file support both symbol link and direct file * tracker server log trunk server change logs Version 4.00 2012-10-06 * identify storage server by ID instead of IP address * tracker.conf: storage reserved space can use ratio such as 10% * storage server support access log * appender file and trunk file also use rand number in file id * bug fixed: test_upload.c: char file_id[64] change to: char file_id[128] * set pipe reading fd with attribute O_NOATIME * bug fixed: correct php extension call_user_function TSRMLS_DC with TSRMLS_CC Version 3.11 2012-08-04 * setsockopt set linger.l_linger to micro-seconds in FreeBSD and seconds in others * trunk binlog reader skip incorrect records * bug fixed: single disk recovery support symbol link and trunk file * storage generate filename enhancement * ETIME change to ETIMEDOUT for FreeBSD * tracker_mem.c: load storage server ignore empty ip address Version 3.10 2012-07-22 * check and init trunk file more gracefully * remove unused-but-set-variable * bug fixed: return correct group name when g_check_file_duplicate is true * bug fixed: php extension call_user_function replace TSRMLS_CC with TSRMLS_DC * large the interval of tracker re-select trunk server * trunk free block check duplicate using avl tree * trunk file sync overwrite the dest file anyway * common/avl_tree.c: free data when delete * tracker.conf add parameter: trunk_init_reload_from_binlog, when this flag is set to true, load all free trunk blocks from the trunk binlog * trunk status control only by trunk_mem.c and memcmp struct FDFSTrunkFullInfo avoid memory alignment problem * auto remove the too old temp file Version 3.09 2012-07-08 * make.sh avoid override config files of /etc/fdfs/ * common/logger.c: function log_init can be called more than once * php extension logInfo change to logDebug * c client logInfo change to logDebug * storage_dio.c log info more properly * delete the trunk space which be occupied * tracker.conf add parameter: trunk_init_check_occupying, when this flag is set to true, do not add the trunk nodes which be occupied * another method to get local ip addresses Version 3.08 2012-05-27 * FAST_MAX_LOCAL_IP_ADDRS change from 4 to 16 * appender file support modify * appender file support truncate Version 3.07 2012-05-13 * tracker/tracker_mem.c: check storage ip address is not empty * remove direct IO support * trunk binlog sync optimization * php extension compile passed in PHP 5.4.0 * get local ip addresses enhancement * trunk server select the storage server whose binglog file size is max * sync trunk binlog file correctly when trunk server changed Version 3.06 2012-01-22 * add common/avl_tree.h and common/avl_tree.c * organize trunk free blocks using AVL tree * find the trunk server for each group when current tracker be a leader * common/sched_thread.c can add schedule entry dynamicly * support creating trunk file advancely Version 3.05 2011-12-20 * remove compile warnings * storage server's store_path_count can be more than that of group * bug fixed: common/fast_mblock.c malloc bytes are not enough * make.sh support OS: HP-UX Version 3.04 2011-11-25 * bug fixed: duplicate files only save one entry ok with trunk file mode * bug fixed: sync correctly with more binlog files * fdfs_file_info query file info from storage server * bug fixed: php extension compile error using gcc 4.6.1 as: variable 'store_path_index' set but not used * bug fixed: delete the metadata of trunked file correctly * bug fixed: append file ok when check duplicate is on * storage/trunk_mgr/trunk_shared.[hc]: trunk_file_stat_func do not use function pointer * bug fixed: storage/trunk_mgr/trunk_shared.c base64_decode_auto overflow 1 byte * bug fixed: delete slave file correctly * bug fixed: remove debug info * md5 function name changed to avoid conflict Version 3.03 2011-10-16 * ignore existed link when sync link file * http token checking support persistent token * add functions: storage_file_exist and storage_file_exist1 * php minfo add fastdfs version info * make.sh changed * client move libevent dependency Version 3.02 2011-09-18 * bug fixed: tracker_mem_check_add_tracker_servers add tracker server correctly * php client compile ok with php 5.2.17 * re-select trunk server ok Version 3.01 2011-07-31 * bug fixed: tracker_get_connection_ex and tracker_get_connection_r_ex connect two times with multi tracker servers * bug fixed: tracker_mem_check_add_tracker_servers condition not correct * all logError add source filename and line * php extension support upload file callback * php extension support download file callback Version 3.00 2011-06-19 * mass small files optimization * add fixed block memory pool: common/fast_mblock.c * bug fixed: tracker_mem.c do NOT clear g_groups fields * bug fixed: slave file and appender file download ok * bug fixed: tracker / storage run by group / user, set file owner * tracker server support leader * client support static library * client_func.h add functions fdfs_tracker_group_equals and fdfs_get_file_ext_name * bug fixed: test/dfs_func_pc.c compile ok * storage server check free space enough when upload a file Version 2.09 2011-02-19 * bug fixed: write_to_binlog_index then increase g_binlog_index (feedback by koolcoy) * disk read / write supports direct mode (avoid caching by the file system) Version 2.08 2011-01-30 * bug fixed: fdfs_trackerd.c set g_tracker_thread_count to 0 * add cmd TRACKER_PROTO_CMD_SERVER_LIST_ONE_GROUP to support list one group * support disk recovery automatically * support total_upload_bytes, success_upload_bytes, total_download_bytes and success_download_bytes etc. 18 stat fields * tracker data file storage_groups.dat changes to storage_groups_new.dat, and storage_servers.dat changes to storage_servers_new.dat * support file append, add tests: fdfs_appender_test and fdfs_appender_test1 * storage_dio.c: dio_deal_task split to several functions * tracker http check thread exit normally * function fdfs_get_file_info_ex changed, add function fdfs_get_file_info_ex1 * fix some type cast error when compile with c++ * client add tools: fdfs_upload_appender and fdfs_append_file Version 2.07 2011-01-09 * slave file's prefix name can be empty * FDFS_MAX_GROUPS change from 64 to 512 * file size field in the file id changed: high 32 bits is random integer when the file size < 2GB and the highest bit set to 1 * tracker_service.c: in function list_group_storages, use strcpy intead of memcpy * php extension add function fastdfs_tracker_delete_storage * client add tool: fdfs_file_info to get file info, including file size, create timestamp, source storage ip address and crc32 signature * fdfs_upload_file.c: omit more error info when the local file not exist Version 2.06 2010-12-26 * sync file op: do not sync the file which exists on dest storage server and the file size are same * bug fixed: sync copy file will clear the existed file on dest storage server (truncate the file size to 0), this bug caused by V2.04 * bug fixed: make temp file discard system function mkstemp, use file sequence No. with pthread_mutex_lock * bug fixed: function fastdfs_tracker_list_groups, when parameter group_name is null or empty string, return all groups info * bug fixed: upload a file extends 2GB will fail * bug fixed: tracker to tracker sync system data files, in function: tracker_mem_get_tracker_server, pTrackerStatus not be set properly Version 2.05 2010-12-05 * client/fdfs_monitor.c: add sync delay time * tracker/fast_task_queue.c: pTask->data = pTask->arg + arg_size; change to: pTask->data = (char *)pTask->arg + arg_size; * bug fixed: storage_sync.c line 237 cause core dump in Ubuntu 10.04 * upload file test use mmap, support more test_upload processes * client add three tools: fdfs_upload_file, fdfs_download_file and fdfs_delete_file Version 2.04 2010-11-19 * storage.conf: tracker server ip can NOT be 127.0.0.1 * do not catch signal SIGABRT * strerror change to STRERROR macro * sync copy file use temp filename first, rename to the correct filename when sync done * file id use 4 bytes CRC32 signature instead of random number * add file: client/fdfs_crc32.c * one of file hash code signature function change from APHash_ex to simple_hash_ex * bug fixed: when fdfs_storaged quit, maybe write to binlog file fail, the error info is "Bad file descriptor" Version 2.03 2010-11-08 * bug fixed: core dump when http.need_find_content_type=false and http.anti_steal.check_token=true * storage server add join_time field (create timestamp of this storage) * tracker server fetch system files from other tracker server when first storage server join in (tracker to tracker sync system files) * tracker server changes the old ip address to the new address when the storage server ip address changed * tracker to tracker sync system data files in some case, multi tracker server supported well Version 2.02 2010-10-28 * get parameters function from tracker server changed, add paramter: storage_sync_file_max_delay * local ip functions move to common/local_ip_func.c * when query all storage servers to store, do not increase the current write server index * struct FDFSHTTPParams add field: need_find_content_type * symbol link client library to /usr/lib64 in 64 bits OS * storage_client.c: deal file extension name correctly Version 2.01 2010-10-17 * client/fdfs_monitor.c can specify tracker server * micro STORAGE_STORE_PATH_PREFIX_CHAR change to FDFS_STORAGE_STORE_PATH_PREFIX_CHAR * php extension can set log filename * php extension add function: fastdfs_client_version * bug fixed: client/tracker_client.c tracker_get_connection_ex NULL pointer * set max core dump file size to at least 256MB when DEBUG_FLAG is on, make sure to generate core file when core dump with DEBUG_FLAG on * upload file can get available storage server list of the group, add command TRACKER_PROTO_CMD_SERVICE_QUERY_STORE_WITHOUT_GROUP_ALL and TRACKER_PROTO_CMD_SERVICE_QUERY_STORE_WITH_GROUP_ALL * bug fixed: storage core dump in some case Version 2.00 2010-08-22 * tracker network io use libevent instead of traditional io model * storage network io use libevent instead of traditional io model * storage disk read/write use separate threads * tracker_mem.c malloc single group and storage struct, remove referer * make install copy config files * tracker.conf add two parameters: storage_sync_file_max_delay and storage_sync_file_max_time * client tracker_get_connection increase server_index correctly * storage sync to storage server adds active test * test programs compile ok Version 1.29 2010-06-30 * add files: tracker_dump.h and tracker_dump.c, tracker dump global vars * add files: storage_dump.h and storage_dump.c, storage dump global vars * sockopt.c: tcprecvfile and tcpdiscard add parameter total_recv_bytes * storage server add fields: storage_port and storage_http_port * auto rename synced remark files when the port of all storage servers in a group changed to another port * connect server support timeout, adding connect_timeout parameter in config file * log_init set log to cache to false (no cache) Version 1.28 2010-05-30 * tracker_servive.c: set current_write_group anyway when current group out of space * logger support context (multi instance) * get storage servers by filename: if the file created one day ago (the create timestamp of the file < current_time - 86400), any active storage server matches * add files: common/pthread_func.h and common/pthread_func.c * common/sched_thread.h, remove statement: extern bool g_continue_flag; * client add libfastcommon * global variables: g_base_path, g_network_timeout, g_version change to g_fdfs_base_path, g_fdfs_network_timeout, g_fdfs_version * common/fdfs_base64.h/c change name to common/base64.h/c * make.sh use TARGET_PREFIX instead of TARGET_PATH * protocol add ACTIVE_TEST, tracker and storage both support * php client, bug fixed: fastdfs_connect_server, the sock must init to -1 * bug fixed: storage status not correct with multi tracker servers * sync storage mark file and stat file to disk properly Version 1.27 2010-04-10 * storage.conf: add if_alias_prefix parameter to get the ip address of the local host * storage http support domain name * php extension add some parameters in fastdfs_client.ini * make.sh compile use debug mode * type off_t change to int64_t * redirect stdout and stderr to log file * php extension list_groups add fields: version and http_domain Version 1.26 2010-02-28 * remove compile warning of logError * ini reader support section * bug fixed: tracker/tracker_mem.c sync storage server status * use storage server http server port anyway * bug fixed: ini reader can support relative config filename * function enhancement: tracker server can check storage HTTP server alive Version 1.25 2010-02-04 * storage_sync.c if source file not exist when sync a file, change from logWarning to logDebug * filename buff size change from 64 to 128 * bug fixed: c client and php client, log not inited cause core dump when call log functions * can print stack trace when process core dumped in Linux server * bug fixed: tracker/tracker_mem.c load storage servers fail with many groups and storage servers * common/sockopt.c remove debug info * storage stat add fields: version * auto adjust when storage server ip address changed * bug fixed: when add a new storage server, other storage servers' status keep the same, not changed * add macros, compile passed in cygwin, thanks Seapeak * write to system data file using lock * common/ini_file_reader.c: use one context parameter, not two parameters * storage status sync modified (the code of tracker and storage both changed) * when recv kill signal, worker thread quit more quickly, daemon process fdfs_trackerd and fdfs_storage quit very quickly when recv kill signal * remove compile warning info of logError * tracker server start more quickly with many groups and storage servers * bug fixed: correct off_t printf format Version 1.24 2010-01-06 * call php_fdfs_close with TSRMLS_CC as php_fdfs_close(i_obj TSRMLS_CC) * storage server to storage server report ip address as tracker client * bug fixed: sendfile exceeds 2GB file in Linux * bug fixed: delete storage server * storage stat add fields: up_time and src_ip_addr * big static or struct memeber char array buffer change to malloc in order to decrease stack size * FDFS_WRITE_BUFF_SIZE change from 512KB to 256KB * bug fixed: client/storage_client.c, meta data miss when upload file * decrease thread_stack_size default value in config files: tracker.conf and storage.conf Version 1.23 2009-11-29 * remove unuseless variable "sleep_secs" in tracker_report_thread_entrance * storage can bind an address when connect to other servers (as a client) * common/md5.h fix UINT4 typedef wrong type in 64 bit OS * client/fdfs_test.c: print the source ip address decoded from the remote filename * client add function fdfs_get_file_info * php extension add functions: fastdfs_http_gen_token and fastdfs_get_file_info * server process will exit when the http service starts fail * support file group, a master file with many slave files whose file id can be combined from master file id and prefix * php client support uploading slave file * ip address in filename change from host byte order to network byte order * storage sync performance enhancement, using read buffer of 64KB to avoid reading binlog file repeatly * storage add prototol cmd: STORAGE_PROTO_CMD_QUERY_FILE_INFO * FDFS_FILE_EXT_NAME_MAX_LEN changed from 5 to 6 * get file info support slave file * storage server for uploading file support priority Version 1.22 2009-10-12 * bug fixed: common/shared_func.c allow_hosts array maybe overflow in some case * tracker/tracker_mem.c: protocol TRACKER_PROTO_CMD_SERVICE_QUERY_FETCH_ALL, return at least a storage server when active storage server count of the group > 0 * bug fixed: when client connection disconnected, always log debug or error info * make.sh: default not install FastDFS services in Linux server * common/sockopt.c: setsockopt level SOL_TCP only supported in Linux * common/http_func.c: do not use function strsep because strsep is not portable * client upload file support callback function * client support multi tracker groups (multi FastDFS clusters) * bug fixed: thread_stack_size not correct when the param thread_stack_size not set in the config file * supply php extension (directory name: php_client) * c client reconnect server (tracker or storage) when network IO error * c client: make tracker server index counter thread safely Version 1.21 2009-09-19 * bug fixed: when source storage server synced file to new storage server done, it's status changed to ONLINE (should keep as ACTIVE, report by zhouzezhong) * add thread_stack_size in config file, default value is 1MB (report by chhxo) * tracker and storage server use setsockopt to keep alive (report by zhouzezhong) * bug fixed: storage server with multi-path, upload file fail when the free space of each path <= reserved space (the total free space > reserved space, report by zhouzezhong) * storage_sync.c: when connect fail, do not change the dest storage server ' status to offline * tracker_service.c and storage_service.c change log level from WARNING to DEBUG when client connection disconnected (report by Jney402) * bug fixed: tracker_client.c correct store_path_index return by tracker server (report by happy_fastdfs) * bug fixed: tracker_service.c when store_lookup set to 2 (load balance), use another pthread lock to avoid long time lock waiting (report by happy_fastdfs) * add service shell scripts in directory: init.d (services will auto installed on Linux, report by hugwww) Version 1.20 2009-09-05 * base64 use context, functions changed * common/ini_file_reader.c: fix memory leak * tracker server support HTTP protocol, one thread mode * storage server support HTTP protocol, one thread mode * fix bug: storage server rebuild, auto sync data correctly * fix bug: sync data fail (correct storage server status) * when storage server idle time exceeds check_active_interval seconds, set it's status to offline * tracker counter thread safely Version 1.19 2009-07-23 * use poll instead of select in sockopt.c * hash.c use chain impl by self * use FastDHT 1.09 client code * ini reader support HTTP protocol, conf file can be an url * correct test dir compile error * use non-block socket to increase network IO performance * add cmd TRACKER_PROTO_CMD_SERVICE_QUERY_FETCH_ALL: query all storage servers from which the file can be dowloaded * while (1) ... break; changed to do ... while (0); Version 1.18 2009-05-24 * restart.sh only kill the programs match the program name and all parameters * correct get local ip addresses * common files do not use global vars like g_network_timeout and g_base_path * download file support offset and download bytes * hash function change type from unsigned int to signed int * file size in file name support 64 bits, old bytes is 4, new bytes is 8 Version 1.17 2009-03-19 * add test programs at sub directory test/ * common/shared_func.c: rindex change to strrchr, add #include * support SunOS (Solaris), compile passed on SunOS 5.10 * support AIX, compile passed on AIX 5.3 * sys call statfs change to statvfs * use scheduling thread to sync binlog buff / cache to disk, add parameter "sync_binlog_buff_interval" to conf file storage.conf * use FastDHT v1.07 client code Version 1.16 2009-02-14 * client can specify group name when upload file * tracker_service.c: cmd dispatch changed to "switch ... case" not "if ... else if" * storage_service.c: call fdfs_quit before tracker_disconnect_server Version 1.15 2009-01-28 * use FastDHT v1.04 client code * use FastDHT client thread safely Version 1.14 2009-01-18 * storage/storage_sync.c: old: if (reader.sync_row_count % 1000 == 0) new: if (reader.scan_row_count % 2000 == 0) * little adjustment for common files can be used by FastDHT * sched_thread.h /.c add global variable g_schedule_flag to quit normally * shared_func.h / .c add function get_time_item_from_conf * sched_thread.h /.c support time_base of task * hash.h / .c add function CRC32, add hash function to support stream hash * add FastDHT client files in storage/fdht_client/ * create symbol link when the file content is duplicate, add item "check_file_duplicate" to conf file storage.conf * use FastDHT v1.02 client code * auto delete invalid entry in FastDHT when the source file does not exist Version 1.13 2008-11-29 * re-calculate group 's free space when one of it's storage servers' free space increase * add parameters: sync_interval, sync_start_time and sync_end_time to storage.conf * performance enhancement: log to buffer, flush to disk every interval seconds * standard fds closed by daemon_init: 0(stdin), 1(stdout) and 2(stderr) * fix bug: pthread_kill sometimes cause core dump when program terminated * fix bug: sync.c open next binlog cause loop call Version 1.12 2008-11-12 * storage server support multi path (mount point) * upload file support file ext name, add source storage ip address to filename * add delete command to delete the invalid storage server * add client functions which combine group name and filename to file id, add anothor client test program: fdfs_test1.c to use file id * client download file support callback function * add protocol cmd TRACKER_PROTO_CMD_SERVICE_QUERY_UPDATE, and client API add tracker_query_storage_update * add protocol cmd TRACKER_PROTO_CMD_STORAGE_SYNC_REPORT to report last synced timestamp as dest server * fix sync old data files to new server bug * fcntl change to pthread_mutex_lock Version 1.11 2008-10-04 * kill report and sync threads when recv terminate signal * add item "store_server" in tracker.conf, by default use the first storage server to store uploaded files * ini_file_reader.c changed: a conf file can include other conf files * some adjustment: some macro name changed add common_define.h remove fdfs_define.c fdfs_os_bits.h change to _os_bits.h Version 1.10 2008-09-20 * performance optimizing: use thread pool, create all work threads at startup * trim function op in shared_func.c * add Makefile template Makefile.in, delete Makefile and Makefile.freebsd change make.sh to support all unix systems (passed in Linux and FreeBSD) Version 1.9 2008-09-14 * security enhancement: support allow hosts which can connect to the server * server can be run by the specified group and user, set by the config file * change make.sh and add file common/fdfs_os_bits.h, remove the warning info of printf format for int64_t param in 64 bits system * storage_client.c changed: auto connect to storage server when not connected * change some macro name and function name in tracker/tracker_proto.h Version 1.8 2008-09-07 * communication protocol changed to support large file exceed 2GB: # all integer field is 8 bytes big-endian # group name fixed length: FDFS_GROUP_NAME_MAX_LEN bytes * storage stat numbers (such as total_upload_count, success_upload_count) use int64_t (8 bytes integer) * ini_file_reader.c add function iniGetInt64Value * sockopt.c add function tcpsetnonblockopt * shared_func.c add function set_nonblock Version 1.7 2008-08-31 * performance optimizing: # change fopen to syscall open # increase the efficiency of socket functions tcpsenddata and tcprecvdata * change the return value of socket funtions such as tcpsenddata, tcprecvdata and connectserverbyip old return value: result=1 for success, result != 1 fail new return value: result=0 for success, result != 0 fail, return the error code * log function enhancement: # support log level # parameter "log_level" added to server config file # keep the log file opened to increase performance * fix log format and parameter mismatched bug (check by printf) * log CRIT message to log file when program exit unexpectedly * Makefile add compile flag -D_FILE_OFFSET_BITS=64 to support large files * change the type of file_size and file_offset to off_t * change signal to sigaction * fix client Makefile to compile library correctly * restart.sh modified: use external command "expr" to replace shell command "let" Version 1.6 2008-08-24 * add restart daemon shell script: restart.sh * use setrlimit to increase max open files if necessary * security enhancement: the format of data filename must be: HH/HH/filename, eg. B9/F4/SLI2NAAMRPR9r8.d * fix bug: errno is not correct where the downloaded file does not exist, communication is broken when the download file is a directory Version 1.5 2008-08-17 * add client function storage_download_file_to_file * use pthread_attr_setstacksize to increase thread stack size to 1 MB * use sendfile syscall to send file in Linux and FreeBSD * fix bug: add O_TRUNC flag when open file to write * remove warning info compiled by gcc 4.2 * fcntl set lock.l_len to 0 Version 1.4 2008-08-10 * storage server recv file method change old method: recv the whole file content/buff before write to file new method: write to file once recv a certain bytes file buff, eg. 128KB buff size * storage client and storage server send file method change old method: get the whole file content/buff, then send to storage server new method: send file to storage server more times. get a certain bytes file buff, then send to storage server * upload file package remove the one pad byte field * remove storage status FDFS_STORAGE_STATUS_DEACTIVE and add FDFS_STORAGE_STATUS_DELETED Version 1.3 2008-08-03 * fix bug: when meta data is empty, get meta data return error * support java client # memset response header to 0 # add group_name to upload file response package Version 1.2 2008-07-27 * add client function storage_set_metadata to support setting metadata(overwrite or merge) Version 1.1 2008-07-20 * implement storage disk report * storing load balance between storage groups(volumes) when set store_lookup to 2 Version 1.0 2008-07-12 * first version