2018-09-18 11:14:11 +08:00
|
|
|
|
#ifndef __TANGO_CACHE_CLIENT_H__
|
|
|
|
|
|
#define __TANGO_CACHE_CLIENT_H__
|
|
|
|
|
|
|
|
|
|
|
|
#include <event2/event.h>
|
|
|
|
|
|
#include <event.h>
|
|
|
|
|
|
|
|
|
|
|
|
#include "tfe_future.h"
|
2018-09-21 17:53:23 +08:00
|
|
|
|
#include "proxy_cache.h"
|
2018-09-18 11:14:11 +08:00
|
|
|
|
|
2018-09-23 15:35:13 +08:00
|
|
|
|
#define USER_TAG_MAX_LEN 1518
|
|
|
|
|
|
|
2018-09-18 11:14:11 +08:00
|
|
|
|
enum CACHE_ERR_CODE
|
|
|
|
|
|
{
|
|
|
|
|
|
CACHE_OK=0,
|
|
|
|
|
|
CACHE_CACHE_MISS, //<2F><><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD>
|
|
|
|
|
|
CACHE_TIMEOUT, //<2F><><EFBFBD>泬ʱ
|
|
|
|
|
|
CACHE_OUTOF_MEMORY,//<2F><>ǰ<EFBFBD>ڴ<EFBFBD>ռ<EFBFBD>ó<EFBFBD><C3B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD><C6A3>鿴MAX_USED_MEMORY_SIZE_MB<4D>Ƿ<EFBFBD><C7B7><EFBFBD>С<EFBFBD><D0A1><EFBFBD>ߵ<EFBFBD>ǰ<EFBFBD>ϴ<EFBFBD><CFB4><EFBFBD><EFBFBD>ʸ<EFBFBD><CAB8><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD>ߵ<EFBFBD><DFB5><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
CACHE_ERR_CURL,
|
2018-09-29 17:10:19 +08:00
|
|
|
|
CACHE_ERR_WIREDLB,
|
2018-09-18 11:14:11 +08:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
enum PUT_MEMORY_COPY_WAY
|
|
|
|
|
|
{
|
2018-09-21 14:50:41 +08:00
|
|
|
|
PUT_MEM_COPY=0, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
|
|
|
|
|
|
PUT_MEM_FREE, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ棬<DAB4><E6A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɱ<EFBFBD><C9B1><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD>ͷŸ<CDB7><C5B8>ڴ<EFBFBD>
|
|
|
|
|
|
};
|
|
|
|
|
|
enum EVBUFFER_COPY_WAY
|
|
|
|
|
|
{
|
|
|
|
|
|
EVBUFFER_MOVE=0,//evbuffer_add_buffer
|
|
|
|
|
|
EVBUFFER_COPY, //evbuffer_add_buffer_reference
|
2018-09-18 11:14:11 +08:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
struct cache_statistics
|
|
|
|
|
|
{
|
|
|
|
|
|
long long get_recv_num; //<2F><><EFBFBD><EFBFBD>GET<45>Ĵ<EFBFBD><C4B4><EFBFBD>
|
|
|
|
|
|
long long get_succ_num; //GET<45>ɹ<EFBFBD><C9B9>Ĵ<EFBFBD><C4B4><EFBFBD>
|
2018-09-23 18:13:46 +08:00
|
|
|
|
long long get_miss_num; //GETδ<54><CEB4><EFBFBD>еĴ<D0B5><C4B4><EFBFBD>
|
|
|
|
|
|
long long get_error_num;//GETʧ<54>ܵĴ<DCB5><C4B4><EFBFBD>
|
2018-09-18 11:14:11 +08:00
|
|
|
|
long long put_recv_num; //<2F><><EFBFBD><EFBFBD>UPLOAD<41>Ĵ<EFBFBD><C4B4><EFBFBD>
|
|
|
|
|
|
long long put_succ_num; //UPLOAD<41>ɹ<EFBFBD><C9B9>Ĵ<EFBFBD><C4B4><EFBFBD>
|
2018-09-23 18:13:46 +08:00
|
|
|
|
long long put_error_num;//UPLOADʧ<44>ܵĴ<DCB5><C4B4><EFBFBD>
|
2018-09-27 15:04:56 +08:00
|
|
|
|
long long del_recv_num; //<2F><><EFBFBD><EFBFBD>DELETE<54>Ĵ<EFBFBD><C4B4><EFBFBD>
|
|
|
|
|
|
long long del_succ_num; //DELETE<54>ɹ<EFBFBD><C9B9>Ĵ<EFBFBD><C4B4><EFBFBD>
|
|
|
|
|
|
long long del_error_num;//DELETE<54>ɹ<EFBFBD><C9B9>Ĵ<EFBFBD><C4B4><EFBFBD>
|
2018-09-29 11:28:09 +08:00
|
|
|
|
long long totaldrop_num;//<2F>ڴ<EFBFBD><DAB4><EFBFBD>DROP<4F>Ĵ<EFBFBD><C4B4><EFBFBD>
|
2018-09-18 11:14:11 +08:00
|
|
|
|
long long memory_used; //<2F><>ǰUPLOAD BODY<44><59>ռ<EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>С
|
|
|
|
|
|
long long session_num; //<2F><>ǰ<EFBFBD><C7B0><EFBFBD>ڽ<EFBFBD><DABD><EFBFBD>GET/PUT<55><54>HTTP<54>Ự<EFBFBD><E1BBB0>
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
enum CACHE_RESULT_TYPE
|
|
|
|
|
|
{
|
2018-09-23 18:13:46 +08:00
|
|
|
|
RESULT_TYPE_HEADER=0, //ֻ<><D6BB><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>
|
|
|
|
|
|
RESULT_TYPE_USERTAG, //ֻ<><D6BB><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>
|
2018-09-27 15:04:56 +08:00
|
|
|
|
RESULT_TYPE_BODY, //<2F><><EFBFBD>ܵ<EFBFBD><DCB5>ö<EFBFBD><C3B6><EFBFBD>
|
2018-09-18 11:14:11 +08:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
//promise_success<73>Ľ<EFBFBD><C4BD><EFBFBD>result
|
2018-08-17 19:29:43 +08:00
|
|
|
|
struct tango_cache_result
|
|
|
|
|
|
{
|
2018-09-27 15:04:56 +08:00
|
|
|
|
const void *data_frag; //<2F><><EFBFBD><EFBFBD>typeΪRESULT_TYPE_HEADER<45><52>ÿ<EFBFBD><C3BF>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(HTTP1.1<EFBFBD><EFBFBD>ʽ)
|
2018-08-17 19:29:43 +08:00
|
|
|
|
size_t size;
|
2018-09-18 11:14:11 +08:00
|
|
|
|
enum CACHE_RESULT_TYPE type;
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
enum CACHE_HTTP_HDR_TYPE
|
|
|
|
|
|
{
|
|
|
|
|
|
HDR_CONTENT_TYPE=0,
|
|
|
|
|
|
HDR_CONTENT_ENCODING,
|
|
|
|
|
|
HDR_CONTENT_DISPOSITION,
|
|
|
|
|
|
HDR_CONTENT_MD5,
|
|
|
|
|
|
|
|
|
|
|
|
HDR_CONTENT_NUM,
|
2018-08-17 19:29:43 +08:00
|
|
|
|
};
|
2018-09-18 11:14:11 +08:00
|
|
|
|
|
2018-08-17 19:29:43 +08:00
|
|
|
|
struct tango_cache_meta
|
|
|
|
|
|
{
|
2018-09-27 15:04:56 +08:00
|
|
|
|
const char* url; //<2F><><EFBFBD><EFBFBD>:URL<52><4C><EFBFBD>ǽṹ<C7BD><E1B9B9><EFBFBD><EFBFBD>־:<3A>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>256<35>ֽ<EFBFBD>
|
2018-09-23 15:35:13 +08:00
|
|
|
|
const char* std_hdr[HDR_CONTENT_NUM]; //<2F><><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"Content-Type: text/html"<22><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD>NULL<4C><4C>ʾû<CABE>и<EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD>
|
|
|
|
|
|
const char* usertag; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD>GETʱ<54><CAB1>ԭ<EFBFBD><D4AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
size_t usertag_len; //<2F><><EFBFBD><EFBFBD>USER_TAG_MAX_LEN<45><4E>0<EFBFBD><30>ʾû<CABE>и<EFBFBD>ͷ<EFBFBD><CDB7>
|
2018-09-21 14:50:41 +08:00
|
|
|
|
union{
|
2018-09-23 18:13:46 +08:00
|
|
|
|
struct response_freshness put;
|
2018-09-21 17:53:23 +08:00
|
|
|
|
struct request_freshness get;
|
2018-09-21 14:50:41 +08:00
|
|
|
|
};
|
2018-08-17 19:29:43 +08:00
|
|
|
|
};
|
|
|
|
|
|
|
2018-09-18 11:14:11 +08:00
|
|
|
|
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);
|
|
|
|
|
|
void tango_cache_get_statistics(const struct tango_cache_instance *instance, struct cache_statistics *out);
|
|
|
|
|
|
|
|
|
|
|
|
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>API<50>̲߳<DFB3><CCB2><EFBFBD>ȫ*/
|
|
|
|
|
|
//ÿ<><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̴߳<DFB3><CCB4><EFBFBD>һ<EFBFBD><D2BB>instance
|
|
|
|
|
|
struct tango_cache_instance *tango_cache_instance_new(struct event_base* evbase,const char* profile_path, const char* section, void *runtimelog);
|
|
|
|
|
|
|
2018-09-23 15:35:13 +08:00
|
|
|
|
|
2018-09-27 15:04:56 +08:00
|
|
|
|
/* GET<45>ӿڵ<D3BF>API*/
|
2018-09-18 11:14:11 +08:00
|
|
|
|
//<2F>ɹ<EFBFBD>ʱ<EFBFBD>ص<EFBFBD>promise_success, resultΪNULLʱ<4C><CAB1>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
//ʧ<><CAA7>ʱ<EFBFBD>ص<EFBFBD>promise_failed(<28><>һ<EFBFBD><D2BB>)<29><>ʹ<EFBFBD><CAB9>get_last_error<6F><72>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>룻
|
|
|
|
|
|
//future<72><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΪNULL
|
2018-09-27 15:04:56 +08:00
|
|
|
|
int tango_cache_fetch_object(struct tango_cache_instance *instance, struct future* future, struct tango_cache_meta *meta);
|
|
|
|
|
|
//<2F><>promise_success<73><73>result<6C><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
|
2018-09-23 15:35:13 +08:00
|
|
|
|
struct tango_cache_result *tango_cache_read_result(void *promise_result);
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-09-27 15:04:56 +08:00
|
|
|
|
/* DELETE<54>ӿڵ<D3BF>API*/
|
|
|
|
|
|
int tango_cache_delete_object(struct tango_cache_instance *instance, struct future* future, const char *objkey);
|
|
|
|
|
|
|
2018-09-23 15:35:13 +08:00
|
|
|
|
|
|
|
|
|
|
/* UPLOAD<41>ӿڵ<D3BF>API
|
|
|
|
|
|
* ע<EFBFBD><EFBFBD>: UPLOAD<EFBFBD>ӿڵ<EFBFBD>API<EFBFBD><EFBFBD><EFBFBD><EFBFBD>future<EFBFBD><EFBFBD>ΪNULL<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֪ͨ<EFBFBD>ص<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD>
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
/*<2A><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ϴ<EFBFBD>API*/
|
2018-09-28 15:16:28 +08:00
|
|
|
|
//<2F><>path<74><68>Ϊ<EFBFBD>գ<EFBFBD><D5A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĵ洢·<E6B4A2><C2B7>
|
2018-09-23 15:35:13 +08:00
|
|
|
|
//<2F><><EFBFBD><EFBFBD>ֵ: 0-<2D>ɹ<EFBFBD><C9B9><EFBFBD><0ʧ<30>ܣ<EFBFBD><DCA3><EFBFBD>ͬ
|
2018-09-21 14:50:41 +08:00
|
|
|
|
int tango_cache_upload_once_data(struct tango_cache_instance *instance, struct future* future,
|
2018-09-21 15:03:21 +08:00
|
|
|
|
enum PUT_MEMORY_COPY_WAY way, const char *data, size_t size,
|
|
|
|
|
|
struct tango_cache_meta *meta,
|
2018-09-29 17:10:19 +08:00
|
|
|
|
char *path/*OUT*/, size_t pathsize);
|
2018-09-21 14:50:41 +08:00
|
|
|
|
int tango_cache_upload_once_evbuf(struct tango_cache_instance *instance, struct future* future,
|
2018-09-21 15:03:21 +08:00
|
|
|
|
enum EVBUFFER_COPY_WAY way, struct evbuffer *evbuf,
|
|
|
|
|
|
struct tango_cache_meta *meta,
|
2018-09-29 17:10:19 +08:00
|
|
|
|
char *path/*OUT*/, size_t pathsize);
|
2018-09-23 15:35:13 +08:00
|
|
|
|
/*<2A><>ʽ<EFBFBD>ϴ<EFBFBD>API*/
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>ֵ: <20><>ΪNULL<4C><4C><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD><EFBFBD>tango_cache_ctx_error<6F>鿴<EFBFBD><E9BFB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>CACHE_OUTOF_MEMORY(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)<29><>
|
2018-09-18 11:14:11 +08:00
|
|
|
|
struct tango_cache_ctx *tango_cache_update_start(struct tango_cache_instance *instance, struct future* future, struct tango_cache_meta *meta);
|
2018-09-23 15:35:13 +08:00
|
|
|
|
//<2F><><EFBFBD><EFBFBD>ֵ: 0-<2D>ɹ<EFBFBD><C9B9><EFBFBD><0ʧ<30>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD><EFBFBD>tango_cache_get_last_error<6F>鿴<EFBFBD><E9BFB4><EFBFBD><EFBFBD><EFBFBD>룻
|
2018-09-21 14:50:41 +08:00
|
|
|
|
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);
|
2018-09-18 11:14:11 +08:00
|
|
|
|
void tango_cache_update_end(struct tango_cache_ctx *ctx);
|
|
|
|
|
|
|
2018-09-23 15:35:13 +08:00
|
|
|
|
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>keyֵ<79><D6B5><EFBFBD><EFBFBD>CACHE_OBJECT_KEY_HASH_SWITCH=1<><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>URL/<2F>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>ϣʱ<CFA3><CAB1><EFBFBD><EFBFBD>
|
2018-09-29 17:10:19 +08:00
|
|
|
|
void tango_cache_get_object_path(const struct tango_cache_ctx *ctx, char *path/*OUT*/, size_t pathsize);
|
2018-08-17 19:29:43 +08:00
|
|
|
|
|
2018-09-18 11:14:11 +08:00
|
|
|
|
#endif
|
2018-08-17 19:29:43 +08:00
|
|
|
|
|