summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author刘畅 <[email protected]>2024-01-12 09:10:34 +0000
committer刘畅 <[email protected]>2024-01-12 09:10:34 +0000
commit008d4b3906cc84e007f4519f901a288dd968a14e (patch)
tree8a5fd5c5d1dce33cd193068586a4127a4e712fec
parente30fe5d0381ef8b91161713653b5c7955be00d0a (diff)
parent78d2d60a5d73e02a874aa64d3fd333745cab4957 (diff)
Merge branch 'bugfix_hincrby_fail_and_retry' into 'rel'v3.1.22
当hincyby执行失败时,重新执行一次 See merge request tango/shaping-engine!74
-rw-r--r--shaping/include/shaper.h3
-rw-r--r--shaping/src/shaper_stat.cpp13
2 files changed, 15 insertions, 1 deletions
diff --git a/shaping/include/shaper.h b/shaping/include/shaper.h
index 33eb103..6168191 100644
--- a/shaping/include/shaper.h
+++ b/shaping/include/shaper.h
@@ -186,6 +186,9 @@ struct shaping_hmget_cb_arg {
struct shaping_hincrby_cb_arg {
struct shaping_thread_ctx *ctx;
long long start_time_us;
+ long long queue_len;
+ int profile_id;
+ int priority;
};
struct shaper;//instance of shaping, thread unsafe
diff --git a/shaping/src/shaper_stat.cpp b/shaping/src/shaper_stat.cpp
index c0b67d1..735e154 100644
--- a/shaping/src/shaper_stat.cpp
+++ b/shaping/src/shaper_stat.cpp
@@ -149,6 +149,14 @@ 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);
+
+ shaper_global_stat_async_invoke_inc(&ctx->thread_global_stat);//hincrby failed, retry
+ shaper_global_stat_hincrby_invoke_inc(&ctx->thread_global_stat);
+
+ LOG_INFO("%s: shaping stat hincrby failed, retry for profile id %d priority %d, operate queue_len %lld", LOG_TAG_STAT, arg->profile_id, arg->priority, arg->queue_len);
+ swarmkv_async_command(ctx->swarmkv_db, shaper_stat_swarmkv_hincrby_cb, arg, "HINCRBY tsg-shaping-%d priority-%d %lld", arg->profile_id, arg->priority, arg->queue_len);
+
+ return;
}
free(cb_arg);
@@ -193,9 +201,12 @@ static void shaper_stat_profile_metirc_refresh(struct shaping_thread_ctx *ctx, i
clock_gettime(CLOCK_MONOTONIC, &curr_time);
arg->ctx = ctx;
arg->start_time_us = curr_time.tv_sec * MICRO_SECONDS_PER_SEC + curr_time.tv_nsec / NANO_SECONDS_PER_MICRO_SEC;
+ arg->profile_id = profile->id;
+ arg->priority = profile->priority;
+ arg->queue_len = profile_stat->in.queue_len + profile_stat->out.queue_len;
shaper_global_stat_async_invoke_inc(&ctx->thread_global_stat);
shaper_global_stat_hincrby_invoke_inc(&ctx->thread_global_stat);
- swarmkv_async_command(ctx->swarmkv_db, shaper_stat_swarmkv_hincrby_cb, arg, "HINCRBY tsg-shaping-%d priority-%d %lld", profile->id, profile->priority, profile_stat->in.queue_len + profile_stat->out.queue_len);
+ swarmkv_async_command(ctx->swarmkv_db, shaper_stat_swarmkv_hincrby_cb, arg, "HINCRBY tsg-shaping-%d priority-%d %lld", arg->profile_id, arg->priority, arg->queue_len);
memset(profile_stat, 0, sizeof(struct shaping_stat_for_profile));
} else {