summaryrefslogtreecommitdiff
path: root/src/include/tango_cache_client.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/include/tango_cache_client.h')
-rw-r--r--src/include/tango_cache_client.h178
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
+