summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author刘畅 <[email protected]>2024-03-26 09:02:18 +0000
committer刘畅 <[email protected]>2024-03-26 09:02:18 +0000
commit4f37764594ab56ad610924fe9ad98ceb19793832 (patch)
treeddd55bd2ceaaa357b3d7e50d24b0fdfea4186d84
parentd2f6b74c4f45174db833245df520dd657eb82f01 (diff)
parent2b46ddb9658d3525a6a5f22b14d340774fbb1329 (diff)
Merge branch 'bugfix_hincrby_failed_and_retry_loop' into 'rel'v3.1.27
当同一个hincrby失败超过5次时,不再进行重新执行,并输出一条ERROR级别的日志 See merge request tango/shaping-engine!86
-rw-r--r--shaping/include/shaper.h1
-rw-r--r--shaping/src/shaper_stat.cpp9
2 files changed, 9 insertions, 1 deletions
diff --git a/shaping/include/shaper.h b/shaping/include/shaper.h
index 4756dc9..bf6bd3a 100644
--- a/shaping/include/shaper.h
+++ b/shaping/include/shaper.h
@@ -228,6 +228,7 @@ struct shaping_hincrby_cb_arg {
long long queue_len;
int profile_id;
int priority;
+ int retry_cnt;
};
struct shaper;//instance of shaping, thread unsafe
diff --git a/shaping/src/shaper_stat.cpp b/shaping/src/shaper_stat.cpp
index 8b8d2ea..ea385f2 100644
--- a/shaping/src/shaper_stat.cpp
+++ b/shaping/src/shaper_stat.cpp
@@ -15,6 +15,7 @@
#define SHAPER_STAT_ROW_NAME "traffic_shaping_rule_hits"
#define SHAPER_STAT_REFRESH_TIME_US 10000 //10 ms
+#define HINCRBY_RETRY_MAX 5
struct shaper_stat_conf {
int enable_backgroud_thread;
@@ -150,6 +151,12 @@ static void shaper_stat_swarmkv_hincrby_cb(const struct swarmkv_reply *reply, vo
if (reply->type != SWARMKV_REPLY_INTEGER) {
shaper_global_stat_async_hincrby_failed_inc(&ctx->thread_global_stat);
+ if (arg->retry_cnt >= HINCRBY_RETRY_MAX) {
+ LOG_ERROR("%s: shaping stat hincrby failed after retry %d times for profile id %d priority %d, operate queue_len %lld", LOG_TAG_STAT, arg->retry_cnt, arg->profile_id, arg->priority, arg->queue_len);
+ goto END;
+ }
+
+ arg->retry_cnt++;
arg->start_time_us = curr_time_us;
shaper_global_stat_async_invoke_inc(&ctx->thread_global_stat);//hincrby failed, retry
shaper_global_stat_hincrby_invoke_inc(&ctx->thread_global_stat);
@@ -160,8 +167,8 @@ static void shaper_stat_swarmkv_hincrby_cb(const struct swarmkv_reply *reply, vo
return;
}
+END:
free(cb_arg);
-
return;
}