🐞 fix(src): 解决hos init失败可能无法退出的问题,TSG-7163
This commit is contained in:
@@ -54,8 +54,6 @@ int file_to_buffer(const char *file, char *buffer, int size)
|
|||||||
|
|
||||||
void callback(bool result, const char *error, const char *bucket, const char *object, void *userdata)
|
void callback(bool result, const char *error, const char *bucket, const char *object, void *userdata)
|
||||||
{
|
{
|
||||||
userdata_t *data = (userdata_t *)userdata;
|
|
||||||
clock_gettime(CLOCK_MONOTONIC, data->finished);
|
|
||||||
return ;
|
return ;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -80,6 +78,7 @@ int main(int argc, char *argv[])
|
|||||||
userdata_t data = {&finished};
|
userdata_t data = {&finished};
|
||||||
hos_instance hos_instance = NULL;
|
hos_instance hos_instance = NULL;
|
||||||
char object[1024];
|
char object[1024];
|
||||||
|
const char *bucket = "hos_test_not_exit_bucket";
|
||||||
|
|
||||||
if (stat(file_name, &buffer) == -1)
|
if (stat(file_name, &buffer) == -1)
|
||||||
{
|
{
|
||||||
@@ -99,7 +98,7 @@ int main(int argc, char *argv[])
|
|||||||
hos_instance = hos_get_instance();
|
hos_instance = hos_get_instance();
|
||||||
if (hos_instance->result == false)
|
if (hos_instance->result == false)
|
||||||
{
|
{
|
||||||
hos_instance = hos_init_instance(conf_file, module_name, 1, "hos_test_bucket");
|
hos_instance = hos_init_instance(conf_file, module_name, 1, bucket);
|
||||||
}
|
}
|
||||||
if (hos_instance->result == false)
|
if (hos_instance->result == false)
|
||||||
{
|
{
|
||||||
@@ -109,32 +108,26 @@ int main(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
printf("hos_init_instance success ... \n");
|
printf("hos_init_instance success ... \n");
|
||||||
|
|
||||||
mode = FILE_MODE;
|
printf("hos_upload_file start ...\n");
|
||||||
printf("hos_write file start ...\n");
|
snprintf(object, 1023, "%s_upload_file", file_name);
|
||||||
snprintf(object, 1023, "%s_write_file", file_name);
|
if (hos_upload_file(bucket, file_name, callback, NULL, 0) != HOS_CLIENT_OK)
|
||||||
fd = hos_open_fd("hos_test_bucket", object, callback, NULL, 0, mode);
|
|
||||||
if (hos_write(fd, file_name, 0, 0) != HOS_CLIENT_OK)
|
|
||||||
{
|
{
|
||||||
printf("error: hos_write fialed!\n");
|
printf("error: hos_upload_file fialed!\n");
|
||||||
}
|
}
|
||||||
hos_close_fd(fd, 0);
|
printf("hos_upload_file end ...\n");
|
||||||
printf("hos_write file end ...\n");
|
|
||||||
|
|
||||||
mode = BUFF_MODE;
|
printf("hos_upload_buff start ...\n");
|
||||||
printf("hos_write buff start ...\n");
|
snprintf(object, 1023, "%s_upload_buff", file_name);
|
||||||
snprintf(object, 1023, "%s_write_buff", file_name);
|
if (hos_upload_buf(bucket, object, buf, buffer.st_size, callback, NULL, 0) != HOS_CLIENT_OK)
|
||||||
fd = hos_open_fd("hos_test_bucket", object, callback, NULL, 0, mode);
|
|
||||||
if (hos_write(fd, buf, buffer.st_size, 0) != HOS_CLIENT_OK)
|
|
||||||
{
|
{
|
||||||
printf("error: hos_write failed!\n");
|
printf("error: hos_upload_buff failed!\n");
|
||||||
}
|
}
|
||||||
hos_close_fd(fd, 0);
|
printf("hos_upload_buff end ...\n");
|
||||||
printf("hos_write buff end ...\n");
|
|
||||||
|
|
||||||
mode = BUFF_MODE | APPEND_MODE;
|
mode = BUFF_MODE | APPEND_MODE;
|
||||||
printf("hos_write buff start ...\n");
|
printf("hos_write buff start ...\n");
|
||||||
snprintf(object, 1023, "%s_write_APPEND", file_name);
|
snprintf(object, 1023, "%s_write_APPEND", file_name);
|
||||||
fd = hos_open_fd("hos_test_bucket", object, callback, NULL, 0, mode);
|
fd = hos_open_fd(bucket, object, callback, NULL, 0);
|
||||||
if (hos_write(fd, buf, buffer.st_size, 0) != HOS_CLIENT_OK)
|
if (hos_write(fd, buf, buffer.st_size, 0) != HOS_CLIENT_OK)
|
||||||
{
|
{
|
||||||
printf("error: hos_write failed 1st!\n");
|
printf("error: hos_write failed 1st!\n");
|
||||||
|
|||||||
@@ -155,7 +155,7 @@ static int upload_file(char *file, char *buff, int buff_len, thread_info_t *thre
|
|||||||
for (i = 0; i < g_test_count; i++)
|
for (i = 0; i < g_test_count; i++)
|
||||||
{
|
{
|
||||||
clock_gettime(CLOCK_MONOTONIC, &tstart);
|
clock_gettime(CLOCK_MONOTONIC, &tstart);
|
||||||
fd[i] = hos_open_fd(thread_info->bucket, thread_info->object, callback, NULL, thread_info->thread_num, g_mode);
|
fd[i] = hos_open_fd(thread_info->bucket, thread_info->object, callback, NULL, thread_info->thread_num);
|
||||||
if (hos_write(fd[i], file, 0, thread_info->thread_num) != HOS_CLIENT_OK)
|
if (hos_write(fd[i], file, 0, thread_info->thread_num) != HOS_CLIENT_OK)
|
||||||
{
|
{
|
||||||
printf("error:hos_write file:%s\n", file);
|
printf("error:hos_write file:%s\n", file);
|
||||||
|
|||||||
@@ -46,6 +46,7 @@ extern "C"
|
|||||||
struct hos_instance_s g_hos_instance;
|
struct hos_instance_s g_hos_instance;
|
||||||
hos_client_handle_t g_hos_handle;//一个进程只允许有一个g_hos_handle
|
hos_client_handle_t g_hos_handle;//一个进程只允许有一个g_hos_handle
|
||||||
static std::mutex m_client_lock;
|
static std::mutex m_client_lock;
|
||||||
|
static std::mutex m_instance_lock;
|
||||||
static std::mutex m_delete_lock;
|
static std::mutex m_delete_lock;
|
||||||
hos_fd_context_t **g_fd_context;
|
hos_fd_context_t **g_fd_context;
|
||||||
size_t *g_fd_info; //fd 实际从1开始,每个线程有独立的fd
|
size_t *g_fd_info; //fd 实际从1开始,每个线程有独立的fd
|
||||||
@@ -1055,7 +1056,7 @@ int hos_close_fd(size_t fd, size_t thread_id)
|
|||||||
|
|
||||||
int hos_shutdown_instance()
|
int hos_shutdown_instance()
|
||||||
{
|
{
|
||||||
std::lock_guard<std::mutex> locker(m_client_lock);
|
std::lock_guard<std::mutex> locker(m_instance_lock);
|
||||||
size_t i = 0;
|
size_t i = 0;
|
||||||
hos_config_t *hos_conf = &g_hos_handle.hos_config;
|
hos_config_t *hos_conf = &g_hos_handle.hos_config;
|
||||||
hos_func_thread_t *hos_func = &g_hos_handle.hos_func;
|
hos_func_thread_t *hos_func = &g_hos_handle.hos_func;
|
||||||
|
|||||||
Reference in New Issue
Block a user