diff options
| author | lishu <[email protected]> | 2018-12-11 23:09:04 +0800 |
|---|---|---|
| committer | lishu <[email protected]> | 2018-12-11 23:09:04 +0800 |
| commit | ae77019201515e1c94c8ca7c3ebab99c059ec641 (patch) | |
| tree | 6dabf2402426946fa400c6ef0a538669f988628e | |
| parent | 14ce0d2381eedff940305a6cc40cf2cd36e9d016 (diff) | |
更新cache为最新
| -rw-r--r-- | src/Makefile | 8 | ||||
| -rw-r--r-- | src/digest_detection.c | 4 | ||||
| -rw-r--r-- | src/inc/cache_evbase_client.h | 33 | ||||
| -rw-r--r-- | src/inc/tango_cache_client.h | 74 | ||||
| -rw-r--r-- | src/main.c | 9 |
5 files changed, 82 insertions, 46 deletions
diff --git a/src/Makefile b/src/Makefile index 09040ff..0fd2120 100644 --- a/src/Makefile +++ b/src/Makefile @@ -17,10 +17,10 @@ CC = g++ CCC = g++ LIB = -L./lib/ -LIB += -lssl -lcrypto -lxml2 -lcurl -levent -lpthread -LIB += -lMESA_handle_logger -lMESA_prof_load -lmaatframe -lrulescan -lMESA_htable -lMESA_field_stat2 -lWiredLB +#LIB += -lssl -lcrypto -lxml2 -lcurl -levent -lpthread +LIB += -lMESA_handle_logger -lMESA_prof_load -lmaatframe -lrulescan -lMESA_htable -lMESA_field_stat2 -lWiredLB -lpthread LIB += ./lib/libmy_socket.a -LIB += ./lib/pangu_tango_cache.a +LIB += ./lib/libtango_cache_client.a ./lib/libcjson.a ./lib/libcrypto.a ./lib/libcurl.a ./lib/libevent.a ./lib/libhiredis.a ./lib/libssl.a ./lib/libxml2.a -lz #LIB += ./lib/libdictator_debug.a LIB_FILE = $(wildcard ../lib/*.a) @@ -41,7 +41,7 @@ $(TARGET):$(OBJECTS) $(OBJECTSCPP) $(LIB_FILE) #$(CCC) -shared $(CFLAGS) $(OBJECTS) $(LIB) -o $@ $(CCC) $(CFLAGS) $(OBJECTS) $(OBJECTSCPP) $(LIB) $(LDDICTATOR) -o $@ cp $(TARGET) ../bin/ - cp $(TARGET) /home/mesasoft/dd/ +# cp $(TARGET) /home/mesasoft/dd/ .c.o: #%.d:%.c diff --git a/src/digest_detection.c b/src/digest_detection.c index 060bc23..bf3fcf0 100644 --- a/src/digest_detection.c +++ b/src/digest_detection.c @@ -165,7 +165,7 @@ void send_survey(frag_in_t* frg, media_t* mdi, struct Maat_rule_t* scan_result) char buf_survey[BUF_SIZE] = {0}; msg_head_t* mh_survey = (msg_head_t*)buf_survey; msg_result_t* msi_survey = (msg_result_t *)(buf_survey + sizeof(msg_head_t)); - struct tango_cache_meta meta; + struct tango_cache_meta_put meta; struct future_pdata* pdata; char key[256] = {0}; char out_fullfilename[256] = {0}; @@ -187,7 +187,7 @@ void send_survey(frag_in_t* frg, media_t* mdi, struct Maat_rule_t* scan_result) localtime_r(&tv.tv_sec, &now); strftime(day_time, sizeof(day_time), "%Y%m%d", &now); snprintf(key, sizeof(key), "%s/%lu.%s", day_time, mdi->mid, gen_filesuffix_by_mediatype(mdi->media_type)); - memset(&meta, 0, sizeof(struct tango_cache_meta)); + memset(&meta, 0, sizeof(struct tango_cache_meta_put)); meta.url = key; pdata = (struct future_pdata *)calloc(1, sizeof(struct future_pdata)); diff --git a/src/inc/cache_evbase_client.h b/src/inc/cache_evbase_client.h index 01bbca4..5bead2f 100644 --- a/src/inc/cache_evbase_client.h +++ b/src/inc/cache_evbase_client.h @@ -20,40 +20,47 @@ struct cache_evbase_ctx struct cache_evbase_instance *instance_asyn; }; -/*����API�̲߳���ȫ��API��ʹ��˵���ο�tango_cache_client.h*/ +/*����API�̰߳�ȫ��API��ʹ��˵���ο�tango_cache_client.h*/ enum CACHE_ERR_CODE cache_evbase_get_last_error(const struct cache_evbase_ctx *ctx_asyn); enum CACHE_ERR_CODE cache_evbase_ctx_error(const struct cache_evbase_instance *instance); void cache_evbase_get_statistics(const struct cache_evbase_instance *instance, struct cache_statistics *out); -/*����ʵ����ÿ�߳�һ������ʹ��ʱ����*/ -struct cache_evbase_instance *cache_evbase_instance_new(const char* profile_path, const char* section, void *runtimelog); +void cache_evbase_global_init(void); + +//ÿ��minio��Ⱥ��bucket����һ��parameter�����instance�ɹ���һ��parameter�� +struct tango_cache_parameter *cache_evbase_parameter_new(const char* profile_path, const char* section, void *runtimelog); + +/*����ʵ�����̰߳�ȫ���ڲ�������һ���߳�*/ +struct cache_evbase_instance *cache_evbase_instance_new(struct tango_cache_parameter *param, void *runtimelog); //GET�ӿڣ��ɹ�����0��ʧ�ܷ���-1��future�ص���������������߳���ִ�У���ͬ -int cache_evbase_fetch_object(struct cache_evbase_instance *instance, struct future* future, struct tango_cache_meta *meta); +int cache_evbase_fetch_object(struct cache_evbase_instance *instance, struct future* f, struct tango_cache_meta_get *meta); +int cache_evbase_head_object(struct cache_evbase_instance *instance, struct future* f, struct tango_cache_meta_get *meta); struct tango_cache_result *cache_evbase_read_result(void *promise_result); //DELETE�ӿ� -int cache_evbase_delete_object(struct cache_evbase_instance *instance, struct future* future, const char *objkey); +int cache_evbase_delete_object(struct cache_evbase_instance *instance, struct future* f, const char *objkey); //һ�����ϴ��ӿ� -int cache_evbase_upload_once_data(struct cache_evbase_instance *instance, struct future* future, +int cache_evbase_upload_once_data(struct cache_evbase_instance *instance, struct future* f, enum PUT_MEMORY_COPY_WAY way, const char *data, size_t size, - struct tango_cache_meta *meta, - char *path, size_t pathsize); -int cache_evbase_upload_once_evbuf(struct cache_evbase_instance *instance, struct future* future, + struct tango_cache_meta_put *meta, + char *path/*OUT*/, size_t pathsize); +int cache_evbase_upload_once_evbuf(struct cache_evbase_instance *instance, struct future* f, struct evbuffer *evbuf, - struct tango_cache_meta *meta, - char *path, size_t pathsize); + struct tango_cache_meta_put *meta, + char *path/*OUT*/, size_t pathsize); //��ʽ�ϴ��ӿ� -struct cache_evbase_ctx *cache_evbase_update_start(struct cache_evbase_instance *instance, struct future* future, struct tango_cache_meta *meta); +struct cache_evbase_ctx *cache_evbase_update_start(struct cache_evbase_instance *instance, struct future* f, struct tango_cache_meta_put *meta); int cache_evbase_update_frag_data(struct cache_evbase_ctx *ctx_asyn, enum PUT_MEMORY_COPY_WAY way, const char *data, size_t size); int cache_evbase_update_frag_evbuf(struct cache_evbase_ctx *ctx_asyn, struct evbuffer *evbuf); void cache_evbase_update_end(struct cache_evbase_ctx *ctx_asyn); +void cache_evbase_update_cancel(struct cache_evbase_ctx *ctx_asyn); -void cache_evbase_get_object_path(const struct cache_evbase_ctx *ctx, char *path, size_t pathsize); +void cache_evbase_get_object_path(const struct cache_evbase_ctx *ctx, char *path/*OUT*/, size_t pathsize); #endif diff --git a/src/inc/tango_cache_client.h b/src/inc/tango_cache_client.h index bcd2f63..c551e8f 100644 --- a/src/inc/tango_cache_client.h +++ b/src/inc/tango_cache_client.h @@ -4,8 +4,8 @@ #include <event2/event.h> #include <event.h> -#include "tfe_future.h" -#include "proxy_cache.h" +#include <tfe_future.h> +#include "tango_cache_pending.h" #define USER_TAG_MAX_LEN 1518 @@ -16,7 +16,13 @@ enum CACHE_ERR_CODE CACHE_TIMEOUT, //���泬ʱ CACHE_OUTOF_MEMORY,//��ǰ�ڴ�ռ�ó������ƣ��鿴MAX_USED_MEMORY_SIZE_MB�Ƿ��С���ߵ�ǰ�ϴ����ʸ����ϵ����ߵ����� CACHE_ERR_CURL, - CACHE_ERR_UNKNOWN + CACHE_ERR_WIREDLB, + CACHE_ERR_SOCKPAIR, + CACHE_ERR_INTERNAL, + CACHE_ERR_REDIS_JSON, + CACHE_ERR_REDIS_CONNECT, + CACHE_OUTOF_SESSION, + CACHE_UPDATE_CANCELED, }; enum PUT_MEMORY_COPY_WAY @@ -41,23 +47,27 @@ struct cache_statistics long long put_error_num;//UPLOADʧ�ܵĴ��� long long del_recv_num; //����DELETE�Ĵ��� long long del_succ_num; //DELETE�ɹ��Ĵ��� - long long del_error_num;//DELETE�ɹ��Ĵ��� + long long del_error_num;//DELETEʧ�ܵĴ��� + long long totaldrop_num;//�ڴ����Լ�WiredLB����ʱDROP�Ĵ��� long long memory_used; //��ǰUPLOAD BODY��ռ�ڴ��С long long session_num; //��ǰ���ڽ���GET/PUT��HTTP�Ự�� }; enum CACHE_RESULT_TYPE { - RESULT_TYPE_HEADER=0, //ֻ����һ�� - RESULT_TYPE_USERTAG, //ֻ����һ�� + RESULT_TYPE_HEADER=0, //���ֻ����һ�� + RESULT_TYPE_USERTAG, //���ֻ����һ�� RESULT_TYPE_BODY, //���ܵ��ö�� + RESULT_TYPE_END, //ȫ��������ֻ����һ�Σ����������� + RESULT_TYPE_MISS, //����δ���У����������ͻ��⣬ֻ����һ��(��END֮��)������������ }; //promise_success�Ľ��result struct tango_cache_result { - const void *data_frag; //���typeΪRESULT_TYPE_HEADER��ÿ��ͷ��������һ������(HTTP1.1��ʽ) + const char *data_frag; //���typeΪRESULT_TYPE_HEADER��ÿ��ͷ��������һ������(HTTP1.1��ʽ) size_t size; + size_t tlength; //������ܳ��ȣ��ص�ʱ����Ч enum CACHE_RESULT_TYPE type; }; @@ -71,18 +81,22 @@ enum CACHE_HTTP_HDR_TYPE HDR_CONTENT_NUM, }; -struct tango_cache_meta +struct tango_cache_meta_get { - const char* url; //����:URL���ǽṹ����־:�ļ��������256�ֽ� + const char* url; //����:URL���ǽṹ����־:�ļ�·������CACHE_OBJECT_KEY_HASH_SWITCH=0ʱ���256�ֽڣ�=1ʱ������ + struct request_freshness get; +}; + +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��ʾû�и�ͷ�� - union{ - struct response_freshness put; - struct request_freshness get; - }; + struct response_freshness put; }; +struct tango_cache_parameter; struct tango_cache_instance; struct tango_cache_ctx; @@ -90,22 +104,28 @@ 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); +/*ÿ������ִ��һ�γ�ʼ��*/ +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 event_base* evbase,const char* profile_path, const char* section, void *runtimelog); +struct tango_cache_instance *tango_cache_instance_new(struct tango_cache_parameter *param, struct event_base* evbase, void *runtimelog); /* GET�ӿڵ�API*/ -//�ɹ�ʱ�ص�promise_success, resultΪNULLʱ��ʾ������ +//�ɹ�ʱ�ص�promise_success //ʧ��ʱ�ص�promise_failed(��һ��)��ʹ��get_last_error��ȡ�����룻 //future������ΪNULL -int tango_cache_fetch_object(struct tango_cache_instance *instance, struct future* future, struct tango_cache_meta *meta); +int tango_cache_fetch_object(struct tango_cache_instance *instance, struct future* f, struct tango_cache_meta_get *meta); +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(void *promise_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* future, const char *objkey); +int tango_cache_delete_object(struct tango_cache_instance *instance, struct future* f, const char *objkey); /* UPLOAD�ӿڵ�API @@ -115,24 +135,26 @@ int tango_cache_delete_object(struct tango_cache_instance *instance, struct futu /*����һ���ϴ�API*/ //��path��Ϊ�գ����������Ĵ洢·�� //����ֵ: 0-�ɹ���<0ʧ�ܣ���ͬ -int tango_cache_upload_once_data(struct tango_cache_instance *instance, struct future* future, +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 *meta, - char *path, size_t pathsize); -int tango_cache_upload_once_evbuf(struct tango_cache_instance *instance, struct future* future, + 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 *meta, - char *path, size_t pathsize); + struct tango_cache_meta_put *meta, + char *path/*OUT*/, size_t pathsize); /*��ʽ�ϴ�API*/ //����ֵ: ��ΪNULL���ʾ����ʧ�ܣ�����tango_cache_ctx_error�鿴�������Ƿ���CACHE_OUTOF_MEMORY(�����������)�� -struct tango_cache_ctx *tango_cache_update_start(struct tango_cache_instance *instance, struct future* future, struct tango_cache_meta *meta); +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); void tango_cache_update_end(struct tango_cache_ctx *ctx); +//����cancel���������ص�����������ʧ�� +void tango_cache_update_cancel(struct tango_cache_ctx *ctx); //��ȡ����keyֵ����CACHE_OBJECT_KEY_HASH_SWITCH=1������URL/�ļ�����ϣʱ���� -void tango_cache_get_object_path(const struct tango_cache_ctx *ctx, char *path, size_t pathsize); +void tango_cache_get_object_path(const struct tango_cache_ctx *ctx, char *path/*OUT*/, size_t pathsize); #endif @@ -248,16 +248,23 @@ int main(int argc, char **argv) memset(&g_dd_run, 0, sizeof(dd_parameter_t)); memset(&g_dd_cfg, 0, sizeof(dd_configure_t)); memset(&g_dd_stat, 0, sizeof(dd_status_t)); + struct tango_cache_parameter *parameter; /*read main.conf and init*/ if(-1==read_conf_and_init("./conf/main.conf")) { return -1; } + + parameter = cache_evbase_parameter_new("./conf/main.conf", "TANGO_CACHE", g_dd_run.logger); + if(parameter == NULL) + { + return -1; + } for(uint32_t i=0;i<g_dd_cfg.thread_num;i++) { - g_dd_run.instance_asyn[i] = cache_evbase_instance_new("./conf/main.conf", "TANGO_CACHE", g_dd_run.logger); + g_dd_run.instance_asyn[i] = cache_evbase_instance_new(parameter, g_dd_run.logger); } /*stat thread*/ |
