commit
d24c3200d1
6
INSTALL
6
INSTALL
|
|
@ -11,7 +11,7 @@ Chinese language: http://www.fastken.com/
|
||||||
# command lines as:
|
# command lines as:
|
||||||
|
|
||||||
git clone https://github.com/happyfish100/libfastcommon.git
|
git clone https://github.com/happyfish100/libfastcommon.git
|
||||||
cd libfastcommon; git checkout V1.0.67
|
cd libfastcommon; git checkout V1.0.70
|
||||||
./make.sh clean && ./make.sh && ./make.sh install
|
./make.sh clean && ./make.sh && ./make.sh install
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -21,7 +21,7 @@ Chinese language: http://www.fastken.com/
|
||||||
# command lines as:
|
# command lines as:
|
||||||
|
|
||||||
git clone https://github.com/happyfish100/libserverframe.git
|
git clone https://github.com/happyfish100/libserverframe.git
|
||||||
cd libserverframe; git checkout V1.1.26
|
cd libserverframe; git checkout V1.2.0
|
||||||
./make.sh clean && ./make.sh && ./make.sh install
|
./make.sh clean && ./make.sh && ./make.sh install
|
||||||
|
|
||||||
# step 3. download fastdfs source codes and install it,
|
# step 3. download fastdfs source codes and install it,
|
||||||
|
|
@ -30,7 +30,7 @@ Chinese language: http://www.fastken.com/
|
||||||
# command lines as:
|
# command lines as:
|
||||||
|
|
||||||
git clone https://github.com/happyfish100/fastdfs.git
|
git clone https://github.com/happyfish100/fastdfs.git
|
||||||
cd fastdfs; git checkout V6.9.5
|
cd fastdfs; git checkout V6.10.0
|
||||||
./make.sh clean && ./make.sh && ./make.sh install
|
./make.sh clean && ./make.sh && ./make.sh install
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,7 @@
|
||||||
#include "fastcommon/logger.h"
|
#include "fastcommon/logger.h"
|
||||||
#include "fdfs_global.h"
|
#include "fdfs_global.h"
|
||||||
|
|
||||||
Version g_fdfs_version = {6, 9, 5};
|
Version g_fdfs_version = {6, 10, 0};
|
||||||
bool g_use_connection_pool = false;
|
bool g_use_connection_pool = false;
|
||||||
ConnectionPool g_connection_pool;
|
ConnectionPool g_connection_pool;
|
||||||
int g_connection_pool_max_idle_time = 3600;
|
int g_connection_pool_max_idle_time = 3600;
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@
|
||||||
%define CommitVersion %(echo $COMMIT_VERSION)
|
%define CommitVersion %(echo $COMMIT_VERSION)
|
||||||
|
|
||||||
Name: %{FastDFS}
|
Name: %{FastDFS}
|
||||||
Version: 6.9.5
|
Version: 6.10.0
|
||||||
Release: 1%{?dist}
|
Release: 1%{?dist}
|
||||||
Summary: FastDFS server and client
|
Summary: FastDFS server and client
|
||||||
License: GPL
|
License: GPL
|
||||||
|
|
@ -18,14 +18,14 @@ Source: http://perso.orange.fr/sebastien.godard/%{name}-%{version}.tar.gz
|
||||||
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
|
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
|
||||||
|
|
||||||
Requires: %__cp %__mv %__chmod %__grep %__mkdir %__install %__id
|
Requires: %__cp %__mv %__chmod %__grep %__mkdir %__install %__id
|
||||||
BuildRequires: libserverframe-devel >= 1.1.26
|
BuildRequires: libserverframe-devel >= 1.2.0
|
||||||
|
|
||||||
%description
|
%description
|
||||||
This package provides tracker & storage of fastdfs
|
This package provides tracker & storage of fastdfs
|
||||||
commit version: %{CommitVersion}
|
commit version: %{CommitVersion}
|
||||||
|
|
||||||
%package -n %{FDFSServer}
|
%package -n %{FDFSServer}
|
||||||
Requires: libserverframe >= 1.1.26
|
Requires: libserverframe >= 1.2.0
|
||||||
Requires: %{FDFSConfig}
|
Requires: %{FDFSConfig}
|
||||||
Summary: fastdfs tracker & storage
|
Summary: fastdfs tracker & storage
|
||||||
|
|
||||||
|
|
@ -34,7 +34,7 @@ Requires: %{FDFSClient}
|
||||||
Summary: fastdfs tools
|
Summary: fastdfs tools
|
||||||
|
|
||||||
%package -n %{FDFSClient}
|
%package -n %{FDFSClient}
|
||||||
Requires: libserverframe >= 1.1.26
|
Requires: libserverframe >= 1.2.0
|
||||||
Requires: %{FDFSConfig}
|
Requires: %{FDFSConfig}
|
||||||
Summary: The client dynamic library of fastdfs
|
Summary: The client dynamic library of fastdfs
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -943,7 +943,7 @@ static void php_fdfs_connect_server_impl(INTERNAL_FUNCTION_PARAMETERS, \
|
||||||
server_info.sock = -1;
|
server_info.sock = -1;
|
||||||
|
|
||||||
if ((pContext->err_no=conn_pool_connect_server(&server_info, \
|
if ((pContext->err_no=conn_pool_connect_server(&server_info, \
|
||||||
SF_G_NETWORK_TIMEOUT)) == 0)
|
SF_G_NETWORK_TIMEOUT * 1000)) == 0)
|
||||||
{
|
{
|
||||||
array_init(return_value);
|
array_init(return_value);
|
||||||
zend_add_assoc_stringl_ex(return_value, "ip_addr", \
|
zend_add_assoc_stringl_ex(return_value, "ip_addr", \
|
||||||
|
|
|
||||||
|
|
@ -249,8 +249,8 @@ int main(int argc, char *argv[])
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((result=set_run_by(g_sf_global_vars.run_by_group,
|
if ((result=set_run_by(g_sf_global_vars.run_by.group,
|
||||||
g_sf_global_vars.run_by_user)) != 0)
|
g_sf_global_vars.run_by.user)) != 0)
|
||||||
{
|
{
|
||||||
logCrit("exit abnormally!\n");
|
logCrit("exit abnormally!\n");
|
||||||
log_destroy();
|
log_destroy();
|
||||||
|
|
@ -362,7 +362,7 @@ static void sigAlarmHandler(int sig)
|
||||||
server.port = SF_G_INNER_PORT;
|
server.port = SF_G_INNER_PORT;
|
||||||
server.sock = -1;
|
server.sock = -1;
|
||||||
|
|
||||||
if (conn_pool_connect_server(&server, SF_G_CONNECT_TIMEOUT) != 0)
|
if (conn_pool_connect_server(&server, SF_G_CONNECT_TIMEOUT * 1000) != 0)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -332,7 +332,7 @@ int dio_read_file(struct fast_task_info *pTask)
|
||||||
|
|
||||||
remain_bytes = pFileContext->end - pFileContext->offset;
|
remain_bytes = pFileContext->end - pFileContext->offset;
|
||||||
capacity_bytes = pTask->send.ptr->size - pTask->send.ptr->length;
|
capacity_bytes = pTask->send.ptr->size - pTask->send.ptr->length;
|
||||||
read_bytes = (capacity_bytes < remain_bytes) ? \
|
read_bytes = (capacity_bytes < remain_bytes) ?
|
||||||
capacity_bytes : remain_bytes;
|
capacity_bytes : remain_bytes;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
@ -340,8 +340,8 @@ int dio_read_file(struct fast_task_info *pTask)
|
||||||
read_bytes, pTask->send.ptr->length, pFileContext->offset);
|
read_bytes, pTask->send.ptr->length, pFileContext->offset);
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if (fc_safe_read(pFileContext->fd, pTask->send.ptr->data + pTask->send.ptr->length, \
|
if (fc_safe_read(pFileContext->fd, pTask->send.ptr->data +
|
||||||
read_bytes) != read_bytes)
|
pTask->send.ptr->length, read_bytes) != read_bytes)
|
||||||
{
|
{
|
||||||
result = errno != 0 ? errno : EIO;
|
result = errno != 0 ? errno : EIO;
|
||||||
logError("file: "__FILE__", line: %d, " \
|
logError("file: "__FILE__", line: %d, " \
|
||||||
|
|
@ -364,8 +364,8 @@ int dio_read_file(struct fast_task_info *pTask)
|
||||||
|
|
||||||
if (pFileContext->calc_crc32)
|
if (pFileContext->calc_crc32)
|
||||||
{
|
{
|
||||||
pFileContext->crc32 = CRC32_ex(pTask->send.ptr->data + pTask->send.ptr->length,
|
pFileContext->crc32 = CRC32_ex(pTask->send.ptr->data + pTask->
|
||||||
read_bytes, pFileContext->crc32);
|
send.ptr->length, read_bytes, pFileContext->crc32);
|
||||||
}
|
}
|
||||||
|
|
||||||
pTask->send.ptr->length += read_bytes;
|
pTask->send.ptr->length += read_bytes;
|
||||||
|
|
@ -486,8 +486,8 @@ int dio_write_file(struct fast_task_info *pTask)
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
logInfo("###dio fd: %d, write bytes: %d, pTask->length=%d, "
|
logInfo("###dio fd: %d, write bytes: %d, task length: %d, "
|
||||||
"buff_offset=%d", pFileContext->fd, write_bytes,
|
"buff_offset: %d", pFileContext->fd, write_bytes,
|
||||||
pTask->recv.ptr->length, pFileContext->buff_offset);
|
pTask->recv.ptr->length, pFileContext->buff_offset);
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
@ -762,8 +762,11 @@ static void *dio_thread_entrance(void* arg)
|
||||||
{
|
{
|
||||||
while ((pTask=blocked_queue_pop(&(pContext->queue))) != NULL)
|
while ((pTask=blocked_queue_pop(&(pContext->queue))) != NULL)
|
||||||
{
|
{
|
||||||
((StorageClientInfo *)pTask->arg)->deal_func(pTask);
|
if (!FC_ATOMIC_GET(pTask->canceled))
|
||||||
storage_release_task(pTask);
|
{
|
||||||
|
((StorageClientInfo *)pTask->arg)->deal_func(pTask);
|
||||||
|
}
|
||||||
|
sf_release_task(pTask);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -150,8 +150,8 @@ static int fdfs_dump_global_vars(char *buff, const int buffSize)
|
||||||
, g_last_server_port
|
, g_last_server_port
|
||||||
, g_last_http_port
|
, g_last_http_port
|
||||||
, g_allow_ip_count
|
, g_allow_ip_count
|
||||||
, g_sf_global_vars.run_by_group
|
, g_sf_global_vars.run_by.group
|
||||||
, g_sf_global_vars.run_by_user
|
, g_sf_global_vars.run_by.user
|
||||||
, g_http_domain
|
, g_http_domain
|
||||||
, g_file_distribute_path_mode
|
, g_file_distribute_path_mode
|
||||||
, g_file_distribute_rotate_count
|
, g_file_distribute_rotate_count
|
||||||
|
|
|
||||||
|
|
@ -1525,16 +1525,6 @@ static void storage_set_metadata_done_callback( \
|
||||||
sf_nio_notify(pTask, SF_NIO_STAGE_SEND);
|
sf_nio_notify(pTask, SF_NIO_STAGE_SEND);
|
||||||
}
|
}
|
||||||
|
|
||||||
void task_finish_clean_up(struct fast_task_info *pTask)
|
|
||||||
{
|
|
||||||
if (__sync_sub_and_fetch(&pTask->reffer_count, 0) == 1)
|
|
||||||
{
|
|
||||||
storage_clear_task(pTask);
|
|
||||||
}
|
|
||||||
++g_stat_change_count;
|
|
||||||
sf_task_finish_clean_up(pTask);
|
|
||||||
}
|
|
||||||
|
|
||||||
int storage_set_body_length(struct fast_task_info *pTask)
|
int storage_set_body_length(struct fast_task_info *pTask)
|
||||||
{
|
{
|
||||||
StorageClientInfo *pClientInfo;
|
StorageClientInfo *pClientInfo;
|
||||||
|
|
@ -1588,7 +1578,7 @@ static int sock_accept_done_callback(struct fast_task_info *task,
|
||||||
}
|
}
|
||||||
|
|
||||||
static int sock_send_done_callback(struct fast_task_info *pTask,
|
static int sock_send_done_callback(struct fast_task_info *pTask,
|
||||||
const int length)
|
const int length, int *next_stage)
|
||||||
{
|
{
|
||||||
StorageClientInfo *pClientInfo;
|
StorageClientInfo *pClientInfo;
|
||||||
|
|
||||||
|
|
@ -1609,10 +1599,13 @@ static int sock_send_done_callback(struct fast_task_info *pTask,
|
||||||
/* response done, try to recv again */
|
/* response done, try to recv again */
|
||||||
pClientInfo->total_length = 0;
|
pClientInfo->total_length = 0;
|
||||||
pClientInfo->total_offset = 0;
|
pClientInfo->total_offset = 0;
|
||||||
|
*next_stage = SF_NIO_STAGE_RECV;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
else //continue to send file content
|
else //continue to send file content
|
||||||
{
|
{
|
||||||
|
*next_stage = SF_NIO_STAGE_SEND;
|
||||||
|
|
||||||
/* continue read from file */
|
/* continue read from file */
|
||||||
return storage_dio_queue_push(pTask);
|
return storage_dio_queue_push(pTask);
|
||||||
}
|
}
|
||||||
|
|
@ -1638,6 +1631,19 @@ static void *alloc_thread_extra_data_func(const int thread_index)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void storage_clear_task(struct fast_task_info *pTask)
|
||||||
|
{
|
||||||
|
StorageClientInfo *pClientInfo;
|
||||||
|
|
||||||
|
pClientInfo = (StorageClientInfo *)pTask->arg;
|
||||||
|
if (pClientInfo->clean_func != NULL)
|
||||||
|
{
|
||||||
|
pClientInfo->clean_func(pTask);
|
||||||
|
}
|
||||||
|
memset(pTask->arg, 0, sizeof(StorageClientInfo));
|
||||||
|
++g_stat_change_count;
|
||||||
|
}
|
||||||
|
|
||||||
int storage_service_init()
|
int storage_service_init()
|
||||||
{
|
{
|
||||||
int result;
|
int result;
|
||||||
|
|
@ -1652,10 +1658,12 @@ int storage_service_init()
|
||||||
SF_G_EPOLL_EDGE_TRIGGER = true;
|
SF_G_EPOLL_EDGE_TRIGGER = true;
|
||||||
result = sf_service_init("storage", alloc_thread_extra_data_func,
|
result = sf_service_init("storage", alloc_thread_extra_data_func,
|
||||||
NULL, sock_accept_done_callback, storage_set_body_length,
|
NULL, sock_accept_done_callback, storage_set_body_length,
|
||||||
sock_send_done_callback, storage_deal_task, task_finish_clean_up,
|
sock_send_done_callback, storage_deal_task, sf_task_finish_clean_up,
|
||||||
NULL, 1000, sizeof(TrackerHeader), sizeof(StorageClientInfo));
|
NULL, 1000, sizeof(TrackerHeader), sizeof(StorageClientInfo));
|
||||||
sf_enable_thread_notify(false);
|
sf_enable_thread_notify(false);
|
||||||
sf_set_remove_from_ready_list(false);
|
sf_set_remove_from_ready_list(false);
|
||||||
|
free_queue_set_release_callback(&g_sf_context.
|
||||||
|
free_queue, storage_clear_task);
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -40,28 +40,6 @@ int storage_get_storage_path_index(int *store_path_index);
|
||||||
void storage_get_store_path(const char *filename, const int filename_len,
|
void storage_get_store_path(const char *filename, const int filename_len,
|
||||||
int *sub_path_high, int *sub_path_low);
|
int *sub_path_high, int *sub_path_low);
|
||||||
|
|
||||||
static inline void storage_clear_task(struct fast_task_info *pTask)
|
|
||||||
{
|
|
||||||
StorageClientInfo *pClientInfo;
|
|
||||||
|
|
||||||
pClientInfo = (StorageClientInfo *)pTask->arg;
|
|
||||||
if (pClientInfo->clean_func != NULL)
|
|
||||||
{
|
|
||||||
pClientInfo->clean_func(pTask);
|
|
||||||
pClientInfo->clean_func = NULL;
|
|
||||||
}
|
|
||||||
memset(pTask->arg, 0, sizeof(StorageClientInfo));
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void storage_release_task(struct fast_task_info *pTask)
|
|
||||||
{
|
|
||||||
if (FC_ATOMIC_GET(pTask->reffer_count) == 1)
|
|
||||||
{
|
|
||||||
storage_clear_task(pTask);
|
|
||||||
}
|
|
||||||
sf_release_task(pTask);
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -27,8 +27,8 @@ static ConnectionInfo *getConnectedStorageServer(
|
||||||
{
|
{
|
||||||
if (pServer->sock < 0)
|
if (pServer->sock < 0)
|
||||||
{
|
{
|
||||||
*err_no = conn_pool_connect_server(pServer, \
|
*err_no = conn_pool_connect_server(pServer,
|
||||||
SF_G_CONNECT_TIMEOUT);
|
SF_G_CONNECT_TIMEOUT * 1000);
|
||||||
if (*err_no != 0)
|
if (*err_no != 0)
|
||||||
{
|
{
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
@ -46,8 +46,8 @@ static ConnectionInfo *getConnectedStorageServer(
|
||||||
pServer = pEnd;
|
pServer = pEnd;
|
||||||
memcpy(pServer, pStorageServer, sizeof(ConnectionInfo));
|
memcpy(pServer, pStorageServer, sizeof(ConnectionInfo));
|
||||||
pServer->sock = -1;
|
pServer->sock = -1;
|
||||||
if ((*err_no=conn_pool_connect_server(pServer, \
|
if ((*err_no=conn_pool_connect_server(pServer,
|
||||||
SF_G_CONNECT_TIMEOUT)) != 0)
|
SF_G_CONNECT_TIMEOUT * 1000)) != 0)
|
||||||
{
|
{
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -289,8 +289,8 @@ int main(int argc, char *argv[])
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if ((result=set_run_by(g_sf_global_vars.run_by_group,
|
if ((result=set_run_by(g_sf_global_vars.run_by.group,
|
||||||
g_sf_global_vars.run_by_user)) != 0)
|
g_sf_global_vars.run_by.user)) != 0)
|
||||||
{
|
{
|
||||||
logCrit("exit abnormally!\n");
|
logCrit("exit abnormally!\n");
|
||||||
log_destroy();
|
log_destroy();
|
||||||
|
|
@ -434,7 +434,7 @@ static void sigAlarmHandler(int sig)
|
||||||
server.port = SF_G_INNER_PORT;
|
server.port = SF_G_INNER_PORT;
|
||||||
server.sock = -1;
|
server.sock = -1;
|
||||||
|
|
||||||
if (conn_pool_connect_server(&server, SF_G_CONNECT_TIMEOUT) != 0)
|
if (conn_pool_connect_server(&server, SF_G_CONNECT_TIMEOUT * 1000) != 0)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -361,8 +361,8 @@ static int fdfs_dump_global_vars(char *buff, const int buffSize)
|
||||||
, fdfs_storage_reserved_space_to_string( \
|
, fdfs_storage_reserved_space_to_string( \
|
||||||
&g_storage_reserved_space, reserved_space_str) \
|
&g_storage_reserved_space, reserved_space_str) \
|
||||||
, g_allow_ip_count
|
, g_allow_ip_count
|
||||||
, g_sf_global_vars.run_by_group
|
, g_sf_global_vars.run_by.group
|
||||||
, g_sf_global_vars.run_by_user
|
, g_sf_global_vars.run_by.user
|
||||||
, g_storage_ip_changed_auto_adjust
|
, g_storage_ip_changed_auto_adjust
|
||||||
, SF_G_THREAD_STACK_SIZE
|
, SF_G_THREAD_STACK_SIZE
|
||||||
, g_if_use_trunk_file
|
, g_if_use_trunk_file
|
||||||
|
|
|
||||||
|
|
@ -501,7 +501,7 @@ ConnectionInfo *tracker_connect_server_no_pool_ex(TrackerServerInfo *pServerInfo
|
||||||
}
|
}
|
||||||
|
|
||||||
*err_no = conn_pool_connect_server_ex(pServerInfo->connections
|
*err_no = conn_pool_connect_server_ex(pServerInfo->connections
|
||||||
+ pServerInfo->index, SF_G_CONNECT_TIMEOUT,
|
+ pServerInfo->index, SF_G_CONNECT_TIMEOUT * 1000,
|
||||||
bind_addr, log_connect_error);
|
bind_addr, log_connect_error);
|
||||||
if (*err_no == 0)
|
if (*err_no == 0)
|
||||||
{
|
{
|
||||||
|
|
@ -520,7 +520,7 @@ ConnectionInfo *tracker_connect_server_no_pool_ex(TrackerServerInfo *pServerInfo
|
||||||
if (current_index != pServerInfo->index)
|
if (current_index != pServerInfo->index)
|
||||||
{
|
{
|
||||||
if ((*err_no=conn_pool_connect_server_ex(conn,
|
if ((*err_no=conn_pool_connect_server_ex(conn,
|
||||||
SF_G_CONNECT_TIMEOUT, bind_addr,
|
SF_G_CONNECT_TIMEOUT * 1000, bind_addr,
|
||||||
log_connect_error)) == 0)
|
log_connect_error)) == 0)
|
||||||
{
|
{
|
||||||
pServerInfo->index = current_index;
|
pServerInfo->index = current_index;
|
||||||
|
|
@ -542,7 +542,7 @@ ConnectionInfo *tracker_make_connection_ex(ConnectionInfo *conn,
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
*err_no = conn_pool_connect_server(conn, connect_timeout);
|
*err_no = conn_pool_connect_server(conn, connect_timeout * 1000);
|
||||||
if (*err_no != 0)
|
if (*err_no != 0)
|
||||||
{
|
{
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue