增加定时器,解决Pull元信息无响应时陷入停顿状态(valgrind)

This commit is contained in:
linuxrc@163.com
2021-08-26 17:23:39 +08:00
parent 39a4172bd7
commit bc525d48e4
4 changed files with 19 additions and 4 deletions

View File

@@ -331,6 +331,7 @@ void doris_http_meta_done_cb(CURLcode res, long res_code, const char *err, void
cJSON *sub; cJSON *sub;
int64_t new_version; int64_t new_version;
evtimer_del(&instance->ctx.timer_expires);
if(res!=CURLE_OK) if(res!=CURLE_OK)
{ {
MESA_HANDLE_RUNTIME_LOGV2(instance->runtime_log, RLOG_LV_FATAL, "business: %s, Request meta failed, server: %s, cur_version=%lu, req_version=%lu, curlcode = %d, error: %s", MESA_HANDLE_RUNTIME_LOGV2(instance->runtime_log, RLOG_LV_FATAL, "business: %s, Request meta failed, server: %s, cur_version=%lu, req_version=%lu, curlcode = %d, error: %s",
@@ -397,6 +398,7 @@ static void doris_http_fetch_meta(struct doris_csum_instance *instance)
u_int64_t balance_seed; u_int64_t balance_seed;
struct doris_http_callback curlcbs; struct doris_http_callback curlcbs;
char metauri[128], cur_version[128]; char metauri[128], cur_version[128];
struct timeval tv={10, 0};
balance_seed = (((u_int64_t)rand()&0xFFFF) << 48) | (((u_int64_t)rand()&0xFFFF) << 32) | balance_seed = (((u_int64_t)rand()&0xFFFF) << 48) | (((u_int64_t)rand()&0xFFFF) << 32) |
(((u_int64_t)rand()&0xFFFF) << 16) | ((u_int64_t)rand()&0xFFFF); (((u_int64_t)rand()&0xFFFF) << 16) | ((u_int64_t)rand()&0xFFFF);
@@ -436,6 +438,7 @@ static void doris_http_fetch_meta(struct doris_csum_instance *instance)
{ {
instance->status = FETCH_STATUS_META; instance->status = FETCH_STATUS_META;
instance->statistic.field[DRS_FS_FILED_REQ_META] += 1; instance->statistic.field[DRS_FS_FILED_REQ_META] += 1;
evtimer_add(&instance->ctx.timer_expires, &tv);
} }
else else
{ {
@@ -472,6 +475,16 @@ static void instance_fetch_cfg_timer_cb(int fd, short kind, void *userp)
} }
} }
/*httpsģʽ<C4A3>£<EFBFBD>ʹ<EFBFBD><CAB9>valgrind<6E><64><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>GET<45><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>done_cb<63><62><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD>޷<EFBFBD><DEB7>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD>*/
static void instance_meta_expire_timer_cb(int fd, short kind, void *userp)
{
struct doris_csum_instance *instance = (struct doris_csum_instance *)userp;
doris_confile_ctx_destry(&instance->ctx);
doris_http_fetch_meta(instance);
MESA_HANDLE_RUNTIME_LOGV2(instance->runtime_log, RLOG_LV_FATAL, "\033[33mbusiness: %s, launch meta-get wired expired, retry....\033[0m", instance->args.bizname);
}
static void doris_client_fs_output_timer_cb(int fd, short kind, void *userp) static void doris_client_fs_output_timer_cb(int fd, short kind, void *userp)
{ {
struct doris_csum_param *param=(struct doris_csum_param *)userp; struct doris_csum_param *param=(struct doris_csum_param *)userp;
@@ -688,6 +701,7 @@ struct doris_csum_instance *doris_csum_instance_new(struct doris_csum_param *par
{ {
instance->httpins_backup2 = doris_http_instance_new(param->param_backup2, worker_evbase, runtimelog); instance->httpins_backup2 = doris_http_instance_new(param->param_backup2, worker_evbase, runtimelog);
} }
evtimer_assign(&instance->ctx.timer_expires, worker_evbase, instance_meta_expire_timer_cb, instance);
pthread_mutex_lock(&param->mutex_lock); pthread_mutex_lock(&param->mutex_lock);
param->references++; param->references++;

View File

@@ -64,6 +64,7 @@ struct doris_confile_ctx
{ {
struct doris_http_ctx *httpctx; struct doris_http_ctx *httpctx;
char server[64]; char server[64];
struct event timer_expires;
MD5_CTX md5ctx; MD5_CTX md5ctx;
long res_code; long res_code;

View File

@@ -59,7 +59,7 @@ static int32_t check_producer_ready_sync(struct doris_business *business, struct
/*request from sync client, check http posts-on-the-way first*/ /*request from sync client, check http posts-on-the-way first*/
if(business->posts_on_the_way) if(business->posts_on_the_way)
{ {
MESA_RUNTIME_LOGV3(g_doris_server_info.log_runtime, RLOG_LV_DEBUG, "HttpProducer, posts-on-the-way: %d, meta response 300", business->posts_on_the_way); MESA_RUNTIME_LOGV3(g_doris_server_info.log_runtime, RLOG_LV_DEBUG, "HttpProducer, business: %s, posts-on-the-way: %d, meta response 300", business->bizname, business->posts_on_the_way);
return 300; return 300;
} }
@@ -68,7 +68,7 @@ static int32_t check_producer_ready_sync(struct doris_business *business, struct
if((clientversion=atol(client_version)) > cur_version) if((clientversion=atol(client_version)) > cur_version)
{ {
business_set_sync_peer_abnormal(business); business_set_sync_peer_abnormal(business);
MESA_RUNTIME_LOGV3(g_doris_server_info.log_runtime, RLOG_LV_INFO, "HttpProducer, client version(%lu) is newer than server(%lu)", clientversion, cur_version); MESA_RUNTIME_LOGV3(g_doris_server_info.log_runtime, RLOG_LV_INFO, "HttpProducer, business: %s, client version(%lu) is newer than server(%lu)", business->bizname, clientversion, cur_version);
return 300; return 300;
} }

View File

@@ -24,7 +24,7 @@
#include "doris_server_http.h" #include "doris_server_http.h"
struct doris_global_info g_doris_server_info; struct doris_global_info g_doris_server_info;
static unsigned long doris_version_20210825=20210825L; static unsigned long doris_version_20210826=20210826L;
int doris_mkdir_according_path(const char * path) int doris_mkdir_according_path(const char * path)
{ {
@@ -434,7 +434,7 @@ int main(int argc, char **argv)
evhttp_set_cb(manager_http, "/doris/statistic/status", manager_statistic_status_requests_cb, NULL); evhttp_set_cb(manager_http, "/doris/statistic/status", manager_statistic_status_requests_cb, NULL);
evhttp_set_cb(manager_http, "/doris/statistic/threads", manager_statistic_threads_requests_cb, NULL); evhttp_set_cb(manager_http, "/doris/statistic/threads", manager_statistic_threads_requests_cb, NULL);
evhttp_set_gencb(manager_http, manager_generic_requests_cb, NULL); evhttp_set_gencb(manager_http, manager_generic_requests_cb, NULL);
g_doris_server_info.monitor = MESA_Monitor_instance_evhttp_new(manager_http, doris_version_20210825); g_doris_server_info.monitor = MESA_Monitor_instance_evhttp_new(manager_http, doris_version_20210826);
if(evhttp_accept_socket(manager_http, g_doris_server_info.manager)) if(evhttp_accept_socket(manager_http, g_doris_server_info.manager))
{ {
printf("evhttp_accept_socket %d error!\n", g_doris_server_info.manager); printf("evhttp_accept_socket %d error!\n", g_doris_server_info.manager);