diff options
Diffstat (limited to 'src/include/tango_cache_client.h')
| -rw-r--r-- | src/include/tango_cache_client.h | 178 |
1 files changed, 178 insertions, 0 deletions
diff --git a/src/include/tango_cache_client.h b/src/include/tango_cache_client.h new file mode 100644 index 0000000..07e43f2 --- /dev/null +++ b/src/include/tango_cache_client.h @@ -0,0 +1,178 @@ +#ifndef __TANGO_CACHE_CLIENT_H__ +#define __TANGO_CACHE_CLIENT_H__ + +#include <event2/event.h> +#include <event.h> + +#include <tfe_future.h> +#include "tango_cache_pending.h" + +#define USER_TAG_MAX_LEN 1518 + +enum CACHE_ERR_CODE +{ + CACHE_OK=0, + CACHE_CACHE_MISS = -101, //����δ���� + CACHE_TIMEOUT = -102, //���泬ʱ + CACHE_OUTOF_MEMORY= -103,//��ǰ�ڴ�ռ�ó������ƣ��鿴MAX_USED_MEMORY_SIZE_MB�Ƿ��С���ߵ�ǰ�ϴ����ʸ����ϵ����ߵ����� + CACHE_ERR_CURL = -104, + CACHE_ERR_WIREDLB = -105, + CACHE_ERR_SOCKPAIR= -106, + CACHE_ERR_INTERNAL= -107, + CACHE_ERR_REDIS_JSON = -108, + CACHE_ERR_REDIS_CONNECT= -109, + CACHE_ERR_REDIS_EXEC = -110, + CACHE_OUTOF_SESSION = -111, + CACHE_ERR_EVBUFFER = -112, + CACHE_UPDATE_CANCELED = -113, + CACHE_ERR_INSTANCE_ID = -114, +}; + +struct cache_statistics +{ + long long get_recv_num; //����GET�Ĵ��� + long long get_succ_http; //GET minio�ɹ��Ĵ��� + long long get_succ_redis;//GET redis�ɹ��Ĵ��� + long long get_miss_num; //GETδ���еĴ��� + long long get_err_http; //GET minioʧ�ܵĴ��� + long long get_err_redis; //GET redisʧ�ܵĴ��� + long long put_recv_num; //����UPLOAD�Ĵ��� + long long put_succ_http; //UPLOAD minio�ɹ��Ĵ��� + long long put_succ_redis;//UPLOAD redis�ɹ��Ĵ��� + long long put_err_http; //UPLOAD minioʧ�ܵĴ��� + long long put_err_redis; //UPLOAD redisʧ�ܵĴ��� + long long put_cancel; //UPLOAD Cancel���� + long long put_losf_num; //LOSF�ϲ���ĸ��� + long long del_recv_num; //����DELETE�Ĵ��� + long long del_succ_num; //DELETE�ɹ��Ĵ��� + long long del_error_num; //DELETEʧ�ܵĴ��� + long long totaldrop_num; //�ڴ����Լ�WiredLB����ʱDROP�Ĵ��� + long long memory_used; //��ǰUPLOAD BODY��ռ�ڴ��С + long long session_http; //��ǰ���ڽ���GET/PUT��HTTP�Ự�� + long long session_redis; //��ǰ���ڽ���GET/PUT��redis�Ự�� +}; + + +struct tango_cache_parameter; +struct tango_cache_instance; +struct tango_cache_ctx; + +enum CACHE_ERR_CODE tango_cache_get_last_error(const struct tango_cache_ctx *ctx); +enum CACHE_ERR_CODE tango_cache_ctx_error(const struct tango_cache_instance *instance); +long long tango_cache_maximum_session(const struct tango_cache_instance *instance); +void tango_cache_get_statistics(const struct tango_cache_instance *instance, struct cache_statistics *out); + +/*ÿ������ִ��һ�γ�ʼ��*/ +void tango_cache_global_init(void); + +//ÿ��minio��Ⱥ��bucket����һ��parameter�����instance�ɹ���һ��parameter +struct tango_cache_parameter *tango_cache_parameter_new(const char* profile_path, const char* section, void *runtimelog); +/*��������API�̲߳���ȫ*/ +//ÿ�������̴߳���һ��instance +struct tango_cache_instance *tango_cache_instance_new(struct tango_cache_parameter *param, struct event_base* evbase, void *runtimelog); + + +/****************************************** GET�ӿڵ�API ******************************************/ +enum CACHE_RESULT_TYPE +{ + RESULT_TYPE_HEADER=0, //���ֻ����һ�� + RESULT_TYPE_USERTAG, //���ֻ����һ�� + RESULT_TYPE_BODY, //���ܵ��ö�� + RESULT_TYPE_END, //ȫ��������ֻ����һ�Σ����������� + RESULT_TYPE_MISS, //����δ���У����������ͻ��⣬ֻ����һ��(��END֮��)������������ +}; + +enum OBJECT_LOCATION +{ + OBJECT_IN_UNKNOWN=0, + OBJECT_IN_MINIO, + OBJECT_IN_REDIS +}; + +struct tango_cache_meta_get +{ + const char* url; //����:URL���ǽṹ����־:�ļ�·������CACHE_OBJECT_KEY_HASH_SWITCH=0ʱ���256�ֽڣ�=1ʱ������ + struct request_freshness get; +}; + +//promise_success�Ľ��result +struct tango_cache_result +{ + const char *data_frag; //���typeΪRESULT_TYPE_HEADER��ÿ��ͷ��������һ������(HTTP1.1��ʽ) + size_t size; + size_t tlength; //������ܳ��ȣ��ص�ʱ����Ч + enum CACHE_RESULT_TYPE type; + enum OBJECT_LOCATION location; +}; + +//�ɹ�ʱ�ص�promise_success +//ʧ��ʱ�ص�promise_failed(��һ��)��ʹ��get_last_error��ȡ�����룻 +//future������ΪNULL +int tango_cache_fetch_object(struct tango_cache_instance *instance, struct future* f, struct tango_cache_meta_get *meta, enum OBJECT_LOCATION where_to_get); +int tango_cache_head_object(struct tango_cache_instance *instance, struct future* f, struct tango_cache_meta_get *meta); +//��promise_success��result������ȡ��� +struct tango_cache_result *tango_cache_read_result(future_result_t *promise_result); + + +/****************************************** DELETE�ӿڵ�API ******************************************/ +int tango_cache_delete_object(struct tango_cache_instance *instance, struct future* f, const char *objkey, const char *minio_addr=NULL, const char *bucket=NULL); + + +/****************************************** UPLOAD�ӿڵ�API ******************************************/ +/* ע��: ��future��ΪNULL�������ϴ�����ʱ�����֪ͨ�ص������������ã�*/ + +enum PUT_MEMORY_COPY_WAY +{ + PUT_MEM_COPY=0, //��������ڴ� + PUT_MEM_FREE, //�������ڴ棬��������ɱ�����ģ���ͷŸ��ڴ� +}; +enum EVBUFFER_COPY_WAY +{ + EVBUFFER_MOVE=0,//evbuffer_add_buffer + EVBUFFER_COPY, //evbuffer_add_buffer_reference +}; + +enum CACHE_HTTP_HDR_TYPE +{ + HDR_CONTENT_TYPE=0, + HDR_CONTENT_ENCODING, + HDR_CONTENT_DISPOSITION, + HDR_CONTENT_MD5, + + HDR_CONTENT_NUM, +}; + +struct tango_cache_meta_put +{ + const char* url; + const char* std_hdr[HDR_CONTENT_NUM]; //����ͷ������"Content-Type: text/html"����Ҫ�������У�NULL��ʾû�и�ͷ���� + const char* usertag; //�������������ݣ�GETʱ��ԭ������ + size_t usertag_len; //���USER_TAG_MAX_LEN��0��ʾû�и�ͷ�� + struct response_freshness put; +}; + +/****************************************** ����һ��UPLOAD�ӿڵ�API ******************************************/ +//��path��Ϊ�գ����������Ĵ洢·�� +//����ֵ: 0-�ɹ���<0ʧ�ܣ���ͬ +int tango_cache_upload_once_data(struct tango_cache_instance *instance, struct future* f, + enum PUT_MEMORY_COPY_WAY way, const char *data, size_t size, + struct tango_cache_meta_put *meta, + char *path/*OUT*/, size_t pathsize); +int tango_cache_upload_once_evbuf(struct tango_cache_instance *instance, struct future* f, + enum EVBUFFER_COPY_WAY way, struct evbuffer *evbuf, + struct tango_cache_meta_put *meta, + char *path/*OUT*/, size_t pathsize); + +/****************************************** ��ʽUPLOAD�ӿڵ�API ******************************************/ +//����ֵ: ��ΪNULL���ʾ����ʧ�ܣ�����tango_cache_ctx_error�鿴�������Ƿ���CACHE_OUTOF_MEMORY(�����������)�� +struct tango_cache_ctx *tango_cache_update_start(struct tango_cache_instance *instance, struct future* f, struct tango_cache_meta_put *meta); +//����ֵ: 0-�ɹ���<0ʧ�ܣ�����tango_cache_get_last_error�鿴�����룻 +int tango_cache_update_frag_data(struct tango_cache_ctx *ctx, const char *data, size_t size); +int tango_cache_update_frag_evbuf(struct tango_cache_ctx *ctx, enum EVBUFFER_COPY_WAY way, struct evbuffer *evbuf); +//ע��: ����ʧ��ʱ���ٵ���promise�ص�������path��ΪNULLʱ���ش洢·�� +int tango_cache_update_end(struct tango_cache_ctx *ctx, char *path/*OUT*/, size_t pathsize); +//����cancel���������ص�����������ʧ�� +void tango_cache_update_cancel(struct tango_cache_ctx *ctx); + +#endif + |
