Merge eac30eb3018f710d7f136bfc3a93b1e127f63531 into 26c6f1af9b29d525831c7fa9840ab3e47ed7b700

This commit is contained in:
Binbin 2025-02-02 08:33:14 +00:00 committed by GitHub
commit 1ca26ad7cd
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 17 additions and 4 deletions

View File

@ -86,11 +86,15 @@ void latencyAddSample(const char *event, mstime_t latency) {
ts = zmalloc(sizeof(*ts));
ts->idx = 0;
ts->max = 0;
ts->sum = 0;
ts->cnt = 0;
memset(ts->samples, 0, sizeof(ts->samples));
dictAdd(server.latency_events, zstrdup(event), ts);
}
if (latency > ts->max) ts->max = latency;
ts->sum += latency;
ts->cnt++;
/* If the previous sample is in the same second, we update our old sample
* if this latency is > of the old one, or just return. */
@ -612,11 +616,13 @@ void latencyCommandReplyWithLatestEvents(client *c) {
struct latencyTimeSeries *ts = dictGetVal(de);
int last = (ts->idx + LATENCY_TS_LEN - 1) % LATENCY_TS_LEN;
addReplyArrayLen(c, 4);
addReplyArrayLen(c, 6);
addReplyBulkCString(c, event);
addReplyLongLong(c, ts->samples[last].time);
addReplyLongLong(c, ts->samples[last].latency);
addReplyLongLong(c, ts->max);
addReplyLongLong(c, ts->sum);
addReplyLongLong(c, ts->cnt);
}
dictReleaseIterator(di);
}

View File

@ -47,6 +47,8 @@ struct latencySample {
struct latencyTimeSeries {
int idx; /* Index of the next sample to store. */
uint32_t max; /* Max latency observed for this event. */
uint32_t sum; /* Sum latency observed for this event. */
uint32_t cnt; /* Count observed for this event. */
struct latencySample samples[LATENCY_TS_LEN]; /* Latest history. */
};

View File

@ -113,12 +113,17 @@ tags {"needs:debug"} {
puts $res
}
# See the previous "Test latency events logging" test for each call.
foreach event $res {
lassign $event eventname time latency max
lassign $event eventname time latency max sum cnt
assert {$eventname eq "command"}
if {!$::no_latency} {
assert {$max >= 450 & $max <= 650}
assert {$time == $last_time}
# To avoid timing issues, each event decreases by 50 and
# increases by 150 to increase the range.
assert_equal $time $last_time
assert_range $max 450 650 ;# debug sleep 0.5
assert_range $sum 1050 1650 ;# debug sleep 0.3 + 0.4 + 0.5
assert_equal $cnt 3
}
break
}