From 2b8e9137fe3ab58e54a445e84f893f594832625c Mon Sep 17 00:00:00 2001 From: YuQing <384681@qq.com> Date: Tue, 15 Oct 2019 21:48:31 +0800 Subject: [PATCH] check tracker server list when storage join --- tracker/fdfs_shared_func.c | 18 +++++++++++++++++ tracker/fdfs_shared_func.h | 11 ++++++++++ tracker/tracker_mem.c | 41 ++++++++++++++++++++++++++++++++++++-- tracker/tracker_service.c | 2 +- 4 files changed, 69 insertions(+), 3 deletions(-) diff --git a/tracker/fdfs_shared_func.c b/tracker/fdfs_shared_func.c index 44c6b2e..392a959 100644 --- a/tracker/fdfs_shared_func.c +++ b/tracker/fdfs_shared_func.c @@ -108,6 +108,24 @@ bool fdfs_server_equal(TrackerServerInfo *pServer1, return true; } +TrackerServerInfo *fdfs_tracker_group_get_server(TrackerServerGroup *pGroup, + const char *target_ip, const int target_port) +{ + TrackerServerInfo *pServer; + TrackerServerInfo *pEnd; + + pEnd = pGroup->servers + pGroup->server_count; + for (pServer=pGroup->servers; pServerrestart_interval - pStatus1->restart_interval; } +static int find_my_ip_in_tracker_list() +{ + const char *current_ip; + const char *previous_ip; + TrackerServerInfo *pServer; + char buff[256]; + + previous_ip = NULL; + while ((current_ip=get_next_local_ip(previous_ip)) != NULL) + { + pServer = fdfs_tracker_group_get_server(&g_tracker_servers, + current_ip, g_server_port); + if (pServer != NULL) + { + if (pServer->count > 1) + { + ConnectionInfo *conn; + ConnectionInfo *end; + + end = pServer->connections + pServer->count; + for (conn=pServer->connections; connip_addr); + } + } + return 0; + } + + previous_ip = current_ip; + } + + logError("file: "__FILE__", line: %d, " + "my ip NOT in tracker server list. %s", + __LINE__, local_host_ip_addrs_to_string(buff, sizeof(buff))); + return ENOENT; +} + static int tracker_mem_first_add_tracker_servers(FDFSStorageJoinBody *pJoinBody) { TrackerServerInfo *pLocalTracker; @@ -4057,7 +4094,7 @@ static int tracker_mem_first_add_tracker_servers(FDFSStorageJoinBody *pJoinBody) g_tracker_servers.servers = servers; g_tracker_servers.server_count = tracker_count; - return 0; + return find_my_ip_in_tracker_list(); } static int tracker_mem_check_add_tracker_servers(FDFSStorageJoinBody *pJoinBody) @@ -4158,7 +4195,7 @@ static int tracker_mem_check_add_tracker_servers(FDFSStorageJoinBody *pJoinBody) "add %d tracker servers, total tracker servers: %d", __LINE__, add_count, g_tracker_servers.server_count); - return 0; + return find_my_ip_in_tracker_list(); } static int tracker_mem_get_tracker_server(FDFSStorageJoinBody *pJoinBody, \ diff --git a/tracker/tracker_service.c b/tracker/tracker_service.c index c087042..5d015d1 100644 --- a/tracker/tracker_service.c +++ b/tracker/tracker_service.c @@ -1529,7 +1529,7 @@ static int tracker_deal_storage_join(struct fast_task_info *pTask) joinBody.init_flag = pBody->init_flag; joinBody.status = pBody->status; - getSockIpaddr(pTask->event.fd, \ + getSockIpaddr(pTask->event.fd, tracker_ip, IP_ADDRESS_SIZE); insert_into_local_host_ip(tracker_ip);