364 lines
11 KiB
C
364 lines
11 KiB
C
/**
|
|
* Copyright (C) 2008 Happy Fish / YuQing
|
|
*
|
|
* FastDFS may be copied only under the terms of the GNU General
|
|
* Public License V3, which may be found in the FastDFS source kit.
|
|
* Please visit the FastDFS Home Page http://www.csource.org/ for more detail.
|
|
**/
|
|
|
|
#ifndef TRACKER_CLIENT_H
|
|
#define TRACKER_CLIENT_H
|
|
|
|
#include "tracker_types.h"
|
|
#include "tracker_proto.h"
|
|
#include "client_global.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
typedef struct
|
|
{
|
|
bool if_trunk_server;
|
|
char status;
|
|
char id[FDFS_STORAGE_ID_MAX_SIZE];
|
|
char ip_addr[IP_ADDRESS_SIZE];
|
|
char src_id[FDFS_STORAGE_ID_MAX_SIZE]; //src storage id
|
|
char domain_name[FDFS_DOMAIN_NAME_MAX_SIZE]; //http domain name
|
|
char version[FDFS_VERSION_SIZE];
|
|
int total_mb; //total disk storage in MB
|
|
int free_mb; //free disk storage in MB
|
|
int upload_priority; //upload priority
|
|
time_t join_time; //storage join timestamp (create timestamp)
|
|
time_t up_time; //storage service started timestamp
|
|
int store_path_count; //store base path count of each storage server
|
|
int subdir_count_per_path;
|
|
int storage_port;
|
|
int storage_http_port; //storage http server port
|
|
int current_write_path; //current write path index
|
|
FDFSStorageStat stat;
|
|
} FDFSStorageInfo;
|
|
|
|
|
|
#define CHECK_CONNECTION(pTrackerServer, conn, result, new_connection) \
|
|
do { \
|
|
if (pTrackerServer->sock < 0) \
|
|
{ \
|
|
if ((conn=tracker_make_connection( \
|
|
pTrackerServer, &result)) != NULL) \
|
|
{ \
|
|
return result; \
|
|
} \
|
|
new_connection = true; \
|
|
} \
|
|
else \
|
|
{ \
|
|
conn = pTrackerServer; \
|
|
new_connection = false; \
|
|
} \
|
|
} while (0)
|
|
|
|
|
|
#define tracker_get_connection() \
|
|
tracker_get_connection_ex((&g_tracker_group))
|
|
|
|
/**
|
|
* get a connection to tracker server
|
|
* params:
|
|
* pTrackerGroup: the tracker group
|
|
* return: != NULL for success, NULL for fail
|
|
**/
|
|
ConnectionInfo *tracker_get_connection_ex(TrackerServerGroup *pTrackerGroup);
|
|
|
|
|
|
#define tracker_get_connection_r(pTrackerServer, err_no) \
|
|
tracker_get_connection_r_ex((&g_tracker_group), pTrackerServer, err_no)
|
|
|
|
/**
|
|
* get a connection to tracker server
|
|
* params:
|
|
* pTrackerGroup: the tracker group
|
|
* pTrackerServer: tracker server
|
|
* return: 0 success, !=0 fail
|
|
**/
|
|
ConnectionInfo *tracker_get_connection_r_ex(TrackerServerGroup *pTrackerGroup, \
|
|
TrackerServerInfo *pTrackerServer, int *err_no);
|
|
|
|
#define tracker_get_all_connections() \
|
|
tracker_get_all_connections_ex((&g_tracker_group))
|
|
|
|
|
|
/**
|
|
* get a connection to tracker server without connection pool
|
|
* params:
|
|
* pTrackerGroup: the tracker group
|
|
* return: != NULL for success, NULL for fail
|
|
**/
|
|
ConnectionInfo *tracker_get_connection_no_pool( \
|
|
TrackerServerGroup *pTrackerGroup);
|
|
|
|
/**
|
|
* connect to all tracker servers
|
|
* params:
|
|
* pTrackerGroup: the tracker group
|
|
* return: 0 success, !=0 fail, return the error code
|
|
**/
|
|
int tracker_get_all_connections_ex(TrackerServerGroup *pTrackerGroup);
|
|
|
|
#define tracker_close_all_connections() \
|
|
tracker_close_all_connections_ex((&g_tracker_group))
|
|
|
|
/**
|
|
* close all connections to tracker servers
|
|
* params:
|
|
* pTrackerGroup: the tracker group
|
|
* return:
|
|
**/
|
|
void tracker_close_all_connections_ex(TrackerServerGroup *pTrackerGroup);
|
|
|
|
/**
|
|
* list one group
|
|
* params:
|
|
* pTrackerServer: tracker server
|
|
* group_name: the group name
|
|
* pDest: return the group info
|
|
* return: 0 success, !=0 fail, return the error code
|
|
**/
|
|
int tracker_list_one_group(ConnectionInfo *pTrackerServer, \
|
|
const char *group_name, FDFSGroupStat *pDest);
|
|
|
|
|
|
/**
|
|
* list all groups
|
|
* params:
|
|
* pTrackerServer: tracker server
|
|
* group_stats: return group info array
|
|
* max_groups: max group count(group array capacity)
|
|
* group_count: return group count
|
|
* return: 0 success, !=0 fail, return the error code
|
|
**/
|
|
int tracker_list_groups(ConnectionInfo *pTrackerServer, \
|
|
FDFSGroupStat *group_stats, const int max_groups, \
|
|
int *group_count);
|
|
|
|
/**
|
|
* list all servers of the specified group
|
|
* params:
|
|
* pTrackerServer: tracker server
|
|
* szGroupName: group name to query
|
|
* szStorageId: the storage id to query, can be NULL or empty
|
|
* storage_infos: return storage info array
|
|
* max_storages: max storage count(storage array capacity)
|
|
* storage_count: return storage count
|
|
* return: 0 success, !=0 fail, return the error code
|
|
**/
|
|
int tracker_list_servers(ConnectionInfo *pTrackerServer, \
|
|
const char *szGroupName, const char *szStorageId, \
|
|
FDFSStorageInfo *storage_infos, const int max_storages, \
|
|
int *storage_count);
|
|
|
|
#define tracker_query_storage_store(pTrackerServer, pStorageServer, \
|
|
group_name, store_path_index) \
|
|
tracker_query_storage_store_without_group(pTrackerServer, \
|
|
pStorageServer, group_name, store_path_index)
|
|
/**
|
|
* query storage server to upload file
|
|
* params:
|
|
* pTrackerServer: tracker server
|
|
* pStorageServer: return storage server
|
|
* store_path_index: return the index of path on the storage server
|
|
* return: 0 success, !=0 fail, return the error code
|
|
**/
|
|
int tracker_query_storage_store_without_group(ConnectionInfo *pTrackerServer,
|
|
ConnectionInfo *pStorageServer, char *group_name,
|
|
int *store_path_index);
|
|
|
|
/**
|
|
* query storage servers/list to upload file
|
|
* params:
|
|
* pTrackerServer: tracker server
|
|
* storageServers: store the storage server list
|
|
* nMaxServerCount: max storage server count
|
|
* storage_count: return the storage server count
|
|
* store_path_index: return the index of path on the storage server
|
|
* return: 0 success, !=0 fail, return the error code
|
|
**/
|
|
#define tracker_query_storage_store_list_without_group( \
|
|
pTrackerServer, storageServers, nMaxServerCount, \
|
|
storage_count, group_name, store_path_index) \
|
|
tracker_query_storage_store_list_with_group( \
|
|
pTrackerServer, NULL, storageServers, nMaxServerCount, \
|
|
storage_count, store_path_index)
|
|
|
|
/**
|
|
* query storage server to upload file
|
|
* params:
|
|
* pTrackerServer: tracker server
|
|
* group_name: the group name to upload file to
|
|
* pStorageServer: return storage server
|
|
* store_path_index: return the index of path on the storage server
|
|
* return: 0 success, !=0 fail, return the error code
|
|
**/
|
|
int tracker_query_storage_store_with_group(ConnectionInfo *pTrackerServer, \
|
|
const char *group_name, ConnectionInfo *pStorageServer, \
|
|
int *store_path_index);
|
|
|
|
/**
|
|
* query storage servers/list to upload file
|
|
* params:
|
|
* pTrackerServer: tracker server
|
|
* group_name: the group name to upload file to
|
|
* storageServers: store the storage server list
|
|
* nMaxServerCount: max storage server count
|
|
* storage_count: return the storage server count
|
|
* store_path_index: return the index of path on the storage server
|
|
* return: 0 success, !=0 fail, return the error code
|
|
**/
|
|
int tracker_query_storage_store_list_with_group( \
|
|
ConnectionInfo *pTrackerServer, const char *group_name, \
|
|
ConnectionInfo *storageServers, const int nMaxServerCount, \
|
|
int *storage_count, int *store_path_index);
|
|
|
|
/**
|
|
* query storage server to update (delete file or set meta data)
|
|
* params:
|
|
* pTrackerServer: tracker server
|
|
* pStorageServer: return storage server
|
|
* group_name: the group name of storage server
|
|
* filename: filename on storage server
|
|
* return: 0 success, !=0 fail, return the error code
|
|
**/
|
|
#define tracker_query_storage_update(pTrackerServer, \
|
|
pStorageServer, group_name, filename) \
|
|
tracker_do_query_storage(pTrackerServer, \
|
|
pStorageServer, TRACKER_PROTO_CMD_SERVICE_QUERY_UPDATE,\
|
|
group_name, filename)
|
|
|
|
/**
|
|
* query storage server to download file
|
|
* params:
|
|
* pTrackerServer: tracker server
|
|
* pStorageServer: return storage server
|
|
* group_name: the group name of storage server
|
|
* filename: filename on storage server
|
|
* return: 0 success, !=0 fail, return the error code
|
|
**/
|
|
#define tracker_query_storage_fetch(pTrackerServer, \
|
|
pStorageServer, group_name, filename) \
|
|
tracker_do_query_storage(pTrackerServer, \
|
|
pStorageServer, TRACKER_PROTO_CMD_SERVICE_QUERY_FETCH_ONE,\
|
|
group_name, filename)
|
|
|
|
/**
|
|
* query storage server to fetch or update
|
|
* params:
|
|
* pTrackerServer: tracker server
|
|
* pStorageServer: return storage server
|
|
* cmd : command, TRACKER_PROTO_CMD_SERVICE_QUERY_FETCH_ONE or
|
|
* TRACKER_PROTO_CMD_SERVICE_QUERY_UPDATE
|
|
* group_name: the group name of storage server
|
|
* filename: filename on storage server
|
|
* return: 0 success, !=0 fail, return the error code
|
|
**/
|
|
int tracker_do_query_storage(ConnectionInfo *pTrackerServer, \
|
|
ConnectionInfo *pStorageServer, const byte cmd, \
|
|
const char *group_name, const char *filename);
|
|
|
|
/**
|
|
* query storage server list to fetch file
|
|
* params:
|
|
* pTrackerServer: tracker server
|
|
* pStorageServer: return storage server
|
|
* nMaxServerCount: max storage server count
|
|
* server_count: return storage server count
|
|
* group_name: the group name of storage server
|
|
* filename: filename on storage server
|
|
* return: 0 success, !=0 fail, return the error code
|
|
**/
|
|
int tracker_query_storage_list(ConnectionInfo *pTrackerServer, \
|
|
ConnectionInfo *pStorageServer, const int nMaxServerCount, \
|
|
int *server_count, char *group_name, const char *filename);
|
|
|
|
/**
|
|
* delete a storage server from cluster
|
|
* params:
|
|
* pTrackerGroup: the tracker group
|
|
* group_name: the group name which the storage server belongs to
|
|
* storage_id: the storage server id
|
|
* return: 0 success, !=0 fail, return the error code
|
|
**/
|
|
int tracker_delete_storage(TrackerServerGroup *pTrackerGroup, \
|
|
const char *group_name, const char *storage_id);
|
|
|
|
|
|
/**
|
|
* delete a group from cluster
|
|
* params:
|
|
* pTrackerGroup: the tracker group
|
|
* group_name: the group name to delete
|
|
* return: 0 success, !=0 fail, return the error code
|
|
**/
|
|
int tracker_delete_group(TrackerServerGroup *pTrackerGroup, \
|
|
const char *group_name);
|
|
|
|
/**
|
|
* set trunk server of the specified group
|
|
* params:
|
|
* pTrackerGroup: the tracker group
|
|
* group_name: the group name which the storage server belongs to
|
|
* storage_id: the storage server id, can be NULL or empty
|
|
* new_trunk_server_id: the new trunk server id
|
|
* return: 0 success, !=0 fail, return the error code
|
|
**/
|
|
int tracker_set_trunk_server(TrackerServerGroup *pTrackerGroup, \
|
|
const char *group_name, const char *storage_id, \
|
|
char *new_trunk_server_id);
|
|
|
|
|
|
/**
|
|
* get storage server status from the tracker server
|
|
* params:
|
|
* pTrackerServer: tracker server
|
|
* group_name: the group name which the storage server belongs to
|
|
* ip_addr: the ip addr of the storage server
|
|
* pDestBuff: return the storage server brief info
|
|
* return: 0 success, !=0 fail, return the error code
|
|
**/
|
|
int tracker_get_storage_status(ConnectionInfo *pTrackerServer, \
|
|
const char *group_name, const char *ip_addr, \
|
|
FDFSStorageBrief *pDestBuff);
|
|
|
|
|
|
/**
|
|
* get storage server id from the tracker server
|
|
* params:
|
|
* pTrackerServer: tracker server
|
|
* group_name: the group name which the storage server belongs to
|
|
* ip_addr: the ip addr of the storage server
|
|
* storage_id: return the storage server id
|
|
* return: 0 success, !=0 fail, return the error code
|
|
**/
|
|
int tracker_get_storage_id(ConnectionInfo *pTrackerServer, \
|
|
const char *group_name, const char *ip_addr, \
|
|
char *storage_id);
|
|
|
|
/**
|
|
* get storage server highest level status from all tracker servers
|
|
* params:
|
|
* pTrackerGroup: the tracker group
|
|
* group_name: the group name which the storage server belongs to
|
|
* ip_addr: the ip addr of the storage server
|
|
* storage_id: return the storage server id
|
|
* status: return the highest level status
|
|
* return: 0 success, !=0 fail, return the error code
|
|
**/
|
|
int tracker_get_storage_max_status(TrackerServerGroup *pTrackerGroup, \
|
|
const char *group_name, const char *ip_addr, \
|
|
char *storage_id, int *status);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif
|