summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlishu <[email protected]>2018-12-11 23:09:04 +0800
committerlishu <[email protected]>2018-12-11 23:09:04 +0800
commitae77019201515e1c94c8ca7c3ebab99c059ec641 (patch)
tree6dabf2402426946fa400c6ef0a538669f988628e
parent14ce0d2381eedff940305a6cc40cf2cd36e9d016 (diff)
更新cache为最新
-rw-r--r--src/Makefile8
-rw-r--r--src/digest_detection.c4
-rw-r--r--src/inc/cache_evbase_client.h33
-rw-r--r--src/inc/tango_cache_client.h74
-rw-r--r--src/main.c9
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
diff --git a/src/main.c b/src/main.c
index 3f0500b..facf520 100644
--- a/src/main.c
+++ b/src/main.c
@@ -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*/