summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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;
}