diff options
| author | lishu <[email protected]> | 2019-08-12 14:06:30 +0800 |
|---|---|---|
| committer | lishu <[email protected]> | 2019-08-12 14:06:30 +0800 |
| commit | 7c16243238ac90bdfdb8c2e57897ac0d45e940eb (patch) | |
| tree | 71fb750d6045a6ed8cc549c22cd10885cf376d52 | |
| parent | aa8c58e98beef3f68fb0fc2647db2b5efae997c4 (diff) | |
更新tango_cache
| -rw-r--r-- | bin/conf/main.conf | 84 | ||||
| -rw-r--r-- | src/inc/cache_evbase_client.h | 25 | ||||
| -rw-r--r-- | src/inc/tango_cache_client.h | 197 | ||||
| -rw-r--r-- | src/inc/tfe_future.h | 2 | ||||
| -rw-r--r-- | src/lib/libcjson.a | bin | 42168 -> 42168 bytes | |||
| -rw-r--r-- | src/lib/libcrypto.a | bin | 5788576 -> 5788472 bytes | |||
| -rw-r--r-- | src/lib/libcurl.a | bin | 834506 -> 827674 bytes | |||
| -rw-r--r-- | src/lib/libevent.a | bin | 649304 -> 649304 bytes | |||
| -rw-r--r-- | src/lib/libssl.a | bin | 1019068 -> 1019068 bytes | |||
| -rw-r--r-- | src/lib/libtango_cache_client.a | bin | 353972 -> 797162 bytes | |||
| -rw-r--r-- | src/lib/libxml2.a | bin | 2736692 -> 2727532 bytes |
11 files changed, 182 insertions, 126 deletions
diff --git a/bin/conf/main.conf b/bin/conf/main.conf index 94939cf..a6bb3ff 100644 --- a/bin/conf/main.conf +++ b/bin/conf/main.conf @@ -1,4 +1,4 @@ -[NETWORK] +[NETWORK] DataRecvPort=33082 SurveySendPort=22080 @@ -10,15 +10,16 @@ RecvQueueMaxnum=2000000 MediaHashThreadSafe=1 MediaHashSize=65536 MediaHashElemNum=1048576 -MediaHashExpireTime=300 +MediaHashExpireTime=240 [MAAT] TableInfo=./conf/table_info.conf FullCfgDir=/home/mesasoft/dd/ddrule/full/index/ IncCfgDir=/home/mesasoft/dd/ddrule/inc/index/ +EffectInvervalMs=1 [LOG] -LogLevel=30 +LogLevel=10 LogPath=./log/runtime.log #resp msg log @@ -31,35 +32,58 @@ MediaCreateLogPath= ./log/media_create.log MediaExpireLogPath= ./log/media_expire.log #field_stat -StatCycle=30 +StatCycle=2 StatFile=./log/dd_stat.log -SysinfoCycle=30 +SysinfoCycle=2 SysinfoFile=./log/dd_sysinfo.log [TANGO_CACHE] -#MINIO IP地址,目前只支持一个 -MINIO_IP_LIST=192.168.10.61-64; -MINIO_LISTEN_PORT=9000 - -#每个域名最多开启的链接数 -MAX_CONNECTION_PER_HOST=10 - -#bucket的名称 -CACHE_BUCKET_NAME=openbucket - -#缓存最大占用的内存空间大小,超出空间时上传失败 -MAX_USED_MEMORY_SIZE_MB=5120 - -#上传时Expires头部的过期时间,单位秒,最小60(1分钟) -CACHE_DEFAULT_TTL_SECOND=3600 - -#是否对对象的名称进行哈希,开启哈希有助于提高上传下载的速率 -CACHE_OBJECT_KEY_HASH_SWITCH=0 - -#WIRED LOAD BALANCER配置 -#WIREDLB_OVERRIDE=1 -#WIREDLB_TOPIC= -#WIREDLB_GROUP= -#WIREDLB_DATACENTER= - +#Addresses of minio. Format is defined by WiredLB. +minio_ip_list=192.168.10.180; +minio_listen_port=9000 +#For Non-Struct logs, we will use Nginx as a proxy to access each object. Set Nginx's port. +minio_proxy_port=9100 +#Maximum number of connections opened by per host. +#max_connection_per_host=1 +#Maximum number of requests in a pipeline. +#max_cnnt_pipeline_num=20 +#Maximum parellel sessions(http and redis) is allowed to open. +#max_curl_session_num=20 +#Maximum time the request is allowed to take(seconds). +#max_curl_transfer_timeout_s=0 + +#Bucket name in minio. +cache_bucket_name=ntcbucket +cache_bucket_num=32 +#Maximum size of memory used by tango_cache_client. Upload will fail if the current size of memory used exceeds this value. +max_used_memory_size_mb=5120 +cache_upload_losf_size=4194304 +#When use LOSF mode, objects will be uploaded even if its total size doesnt reach $cache_upload_losf_size after timeouts. +#cache_upload_losf_timeout_s=10 +#Default TTL of objects, i.e. the time after which the object will expire(minumun 60s, i.e. 1 minute). +cache_default_ttl_second=36000 +#Whether to hash the object key before cache actions. GET/PUT may be faster if you open it. +cache_object_key_hash_switch=0 + +#Store way: 0-MINIO; 1-LOSF, META in REDIS, object in minio; 2-META and small object in Redis, large object in minio; +cache_store_object_way=1 +#If $cache_store_object_way is 2 and the size of a object is not bigger than this value, object will be stored in redis. +redis_cache_object_size=512000 +#max_redis_session_num=800 +#If $cache_store_object_way is not 0, we will use redis to store meta and object. +redis_cluster_ip_list=192.168.10.180; +redis_cluster_port_range=9001-9004; +#Configs of WiredLB for Minios load balancer. +#wiredlb_override=1 +#wiredlb_topic= +#wiredlb_datacenter= +wiredlb_health_port=52101 +#wiredlb_group= + +log_fsstat_appname=TANGO_CACHE +log_fsstat_filepath=./field_stat.log +log_fsstat_interval=10 +log_fsstat_trig=1 +log_fsstat_dst_ip=127.0.0.1 +log_fsstat_dst_port=8125
\ No newline at end of file diff --git a/src/inc/cache_evbase_client.h b/src/inc/cache_evbase_client.h index 5bead2f..feab191 100644 --- a/src/inc/cache_evbase_client.h +++ b/src/inc/cache_evbase_client.h @@ -6,6 +6,8 @@ #include "tango_cache_client.h" +/* API��ʹ��˵���ο�tango_cache_client.h */ + struct cache_evbase_instance { struct tango_cache_instance *instance; @@ -16,14 +18,17 @@ struct cache_evbase_instance struct cache_evbase_ctx { + size_t object_size; //tango_ctx�������Ա�����ع�����ֱ�ӻ�ȡ�Ļ����ڶ�дһ�������� struct tango_cache_ctx *ctx; + struct tango_losf_meta *losf_meta; //LOSFһ�����ϴ�ʱû��ctx struct cache_evbase_instance *instance_asyn; }; -/*����API�̰߳�ȫ��API��ʹ��˵���ο�tango_cache_client.h*/ +/*����API�̰߳�ȫ������ͬһ��cache_evbase_ctx�����Կ��̷߳��ʡ�*/ 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); +long long cache_evbase_maximum_session(const struct cache_evbase_instance *instance); void cache_evbase_get_statistics(const struct cache_evbase_instance *instance, struct cache_statistics *out); void cache_evbase_global_init(void); @@ -34,16 +39,16 @@ struct tango_cache_parameter *cache_evbase_parameter_new(const char* profile_pat /*����ʵ�����̰߳�ȫ���ڲ�������һ���߳�*/ 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* f, struct tango_cache_meta_get *meta); +/******************************************* GET�ӿ� ****************************************/ +//�ɹ�����0��ʧ�ܷ���-1��future�ص���������������߳���ִ�У���ͬ +int cache_evbase_fetch_object(struct cache_evbase_instance *instance, struct future* f, struct tango_cache_meta_get *meta, enum OBJECT_LOCATION where_to_get); 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* f, const char *objkey); +/****************************************** DELETE�ӿ� **************************************/ +int cache_evbase_delete_object(struct cache_evbase_instance *instance, struct future* f, const char *objkey, const char *minio_addr=NULL, const char *bucket=NULL); -//һ�����ϴ��ӿ� +/***************************************** һ�����ϴ��ӿ� **********************************/ 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_put *meta, @@ -53,14 +58,12 @@ int cache_evbase_upload_once_evbuf(struct cache_evbase_instance *instance, struc 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* 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); +int cache_evbase_update_end(struct cache_evbase_ctx *ctx_asyn, char *path/*OUT*/, size_t pathsize); 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/*OUT*/, size_t pathsize); - #endif diff --git a/src/inc/tango_cache_client.h b/src/inc/tango_cache_client.h index c551e8f..188dee8 100644 --- a/src/inc/tango_cache_client.h +++ b/src/inc/tango_cache_client.h @@ -12,47 +12,68 @@ enum CACHE_ERR_CODE { CACHE_OK=0, - CACHE_CACHE_MISS, //����δ���� - CACHE_TIMEOUT, //���泬ʱ - CACHE_OUTOF_MEMORY,//��ǰ�ڴ�ռ�ó������ƣ��鿴MAX_USED_MEMORY_SIZE_MB�Ƿ��С���ߵ�ǰ�ϴ����ʸ����ϵ����ߵ����� - CACHE_ERR_CURL, - 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 -{ - PUT_MEM_COPY=0, //��������ڴ� - PUT_MEM_FREE, //�������ڴ棬��������ɱ�����ģ���ͷŸ��ڴ� -}; -enum EVBUFFER_COPY_WAY -{ - EVBUFFER_MOVE=0,//evbuffer_add_buffer - EVBUFFER_COPY, //evbuffer_add_buffer_reference + 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, + CACHE_ERR_BAD_REQUEST = -115, }; struct cache_statistics { - long long get_recv_num; //����GET�Ĵ��� - long long get_succ_num; //GET�ɹ��Ĵ��� - long long get_miss_num; //GETδ���еĴ��� - long long get_error_num;//GETʧ�ܵĴ��� - long long put_recv_num; //����UPLOAD�Ĵ��� - long long put_succ_num; //UPLOAD�ɹ��Ĵ��� - 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 totaldrop_num;//�ڴ����Լ�WiredLB����ʱDROP�Ĵ��� - long long memory_used; //��ǰUPLOAD BODY��ռ�ڴ��С - long long session_num; //��ǰ���ڽ���GET/PUT��HTTP�Ự�� + 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, //���ֻ����һ�� @@ -62,77 +83,84 @@ enum CACHE_RESULT_TYPE RESULT_TYPE_MISS, //����δ���У����������ͻ��⣬ֻ����һ��(��END֮��)������������ }; -//promise_success�Ľ��result -struct tango_cache_result +enum OBJECT_LOCATION { - const char *data_frag; //���typeΪRESULT_TYPE_HEADER��ÿ��ͷ��������һ������(HTTP1.1��ʽ) - size_t size; - size_t tlength; //������ܳ��ȣ��ص�ʱ����Ч - enum CACHE_RESULT_TYPE type; + OBJECT_IN_UNKNOWN=0, + OBJECT_IN_MINIO, + OBJECT_IN_REDIS }; -enum CACHE_HTTP_HDR_TYPE +//Range֧��3��: bytes=x-y; bytes=x-; bytes=-y +struct tango_cache_get_range { - HDR_CONTENT_TYPE=0, - HDR_CONTENT_ENCODING, - HDR_CONTENT_DISPOSITION, - HDR_CONTENT_MD5, - - HDR_CONTENT_NUM, + int64_t start_offset; // -1��ʾ������ + int64_t end_offset; // -1��ʾ������ }; struct tango_cache_meta_get { const char* url; //����:URL���ǽṹ����־:�ļ�·������CACHE_OBJECT_KEY_HASH_SWITCH=0ʱ���256�ֽڣ�=1ʱ������ struct request_freshness get; + struct tango_cache_get_range *range; //����ͷRange }; -struct tango_cache_meta_put +//promise_success�Ľ��result +struct tango_cache_result { - 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; + const char *data_frag; //���typeΪRESULT_TYPE_HEADER��ÿ��ͷ��������һ������(HTTP1.1��ʽ) + size_t size; //����Ƭ�εij��� + size_t tlength;//��������response body���Ƶ��ܳ���(��Range����ͷʱ������Ĵ�С)���ص�ʱ����Ч + enum CACHE_RESULT_TYPE type; + enum OBJECT_LOCATION location; }; -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); -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*/ //�ɹ�ʱ�ص�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); +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); +/****************************************** 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, +}; -/* UPLOAD�ӿڵ�API - * ע��: UPLOAD�ӿڵ�API����future��ΪNULL�������ϴ�����ʱ�����֪ͨ�ص������������ã� - */ +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; +}; -/*����һ���ϴ�API*/ +/****************************************** ����һ��UPLOAD�ӿڵ�API ******************************************/ //��path��Ϊ�գ����������Ĵ洢·�� //����ֵ: 0-�ɹ���<0ʧ�ܣ���ͬ int tango_cache_upload_once_data(struct tango_cache_instance *instance, struct future* f, @@ -143,18 +171,17 @@ int tango_cache_upload_once_evbuf(struct tango_cache_instance *instance, struct enum EVBUFFER_COPY_WAY way, struct evbuffer *evbuf, struct tango_cache_meta_put *meta, char *path/*OUT*/, size_t pathsize); -/*��ʽ�ϴ�API*/ + +/****************************************** ��ʽ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); -void tango_cache_update_end(struct tango_cache_ctx *ctx); +//ע��: ����ʧ��ʱ���ٵ���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); -//��ȡ����keyֵ����CACHE_OBJECT_KEY_HASH_SWITCH=1������URL/�ļ�����ϣʱ���� -void tango_cache_get_object_path(const struct tango_cache_ctx *ctx, char *path/*OUT*/, size_t pathsize); - #endif diff --git a/src/inc/tfe_future.h b/src/inc/tfe_future.h index c428f08..fc2311d 100644 --- a/src/inc/tfe_future.h +++ b/src/inc/tfe_future.h @@ -21,6 +21,8 @@ struct promise * future_to_promise(struct future * f); void future_destroy(struct future * f); void promise_failed(struct promise * p, enum e_future_error error, const char * what); void promise_success(struct promise * p, void * result); +void promise_finish(struct promise * p); +void promise_allow_many_successes(struct promise *p); void promise_set_ctx(struct promise * p, void * ctx, promise_ctx_destroy_cb * cb); void * promise_get_ctx(struct promise * p); void * promise_dettach_ctx(struct promise * p); diff --git a/src/lib/libcjson.a b/src/lib/libcjson.a Binary files differindex cb5fed5..8a069a6 100644 --- a/src/lib/libcjson.a +++ b/src/lib/libcjson.a diff --git a/src/lib/libcrypto.a b/src/lib/libcrypto.a Binary files differindex 7c1224f..cbb87c0 100644 --- a/src/lib/libcrypto.a +++ b/src/lib/libcrypto.a diff --git a/src/lib/libcurl.a b/src/lib/libcurl.a Binary files differindex d938a26..14f09b4 100644 --- a/src/lib/libcurl.a +++ b/src/lib/libcurl.a diff --git a/src/lib/libevent.a b/src/lib/libevent.a Binary files differindex 2881fa9..446113b 100644 --- a/src/lib/libevent.a +++ b/src/lib/libevent.a diff --git a/src/lib/libssl.a b/src/lib/libssl.a Binary files differindex bab5589..af344b2 100644 --- a/src/lib/libssl.a +++ b/src/lib/libssl.a diff --git a/src/lib/libtango_cache_client.a b/src/lib/libtango_cache_client.a Binary files differindex c103ee6..8cb78e4 100644 --- a/src/lib/libtango_cache_client.a +++ b/src/lib/libtango_cache_client.a diff --git a/src/lib/libxml2.a b/src/lib/libxml2.a Binary files differindex d803f5f..208e299 100644 --- a/src/lib/libxml2.a +++ b/src/lib/libxml2.a |
