Tweaks on 19435 fix:

* Raise limit: 16k isn't all that high.
   * Don't log when limit exceded; log later on.
   * Say "over" when we log more than we say we log.
   * Add target version to changes file
This commit is contained in:
Nick Mathewson 2016-07-26 09:59:48 -04:00
parent 77459b97aa
commit fb7f90c181
3 changed files with 7 additions and 11 deletions

View File

@ -2,5 +2,5 @@
- Fix an integer overflow in the rate-limiter that caused displaying of - Fix an integer overflow in the rate-limiter that caused displaying of
wrong number of suppressed messages (if there are too many of them). wrong number of suppressed messages (if there are too many of them).
If the number of messages hits the limit of messages per interval the If the number of messages hits the limit of messages per interval the
rate-limiter drops a warning and doesn't count any further. rate-limiter doesn't count any further.
Fixes bug 19435. Fixes bug 19435; bugfix on 0.2.4.11-alpha.

View File

@ -1995,12 +1995,7 @@ rate_limit_is_ready(ratelim_t *lim, time_t now)
lim->n_calls_since_last_time = 0; lim->n_calls_since_last_time = 0;
return res; return res;
} else { } else {
if (lim->n_calls_since_last_time < RATELIM_TOOMANY) { if (lim->n_calls_since_last_time <= RATELIM_TOOMANY) {
++lim->n_calls_since_last_time;
} else if (lim->n_calls_since_last_time == RATELIM_TOOMANY) {
log_warn(LD_GENERAL,
"Enormously large number of messages (%d). It's probably a bug.",
RATELIM_TOOMANY);
++lim->n_calls_since_last_time; ++lim->n_calls_since_last_time;
} }
@ -2020,11 +2015,12 @@ rate_limit_log(ratelim_t *lim, time_t now)
return tor_strdup(""); return tor_strdup("");
} else { } else {
char *cp=NULL; char *cp=NULL;
const char *opt_over = (n >= RATELIM_TOOMANY) ? "over " : "";
/* XXXX this is not exactly correct: the messages could have occurred /* XXXX this is not exactly correct: the messages could have occurred
* any time between the old value of lim->allowed and now. */ * any time between the old value of lim->allowed and now. */
tor_asprintf(&cp, tor_asprintf(&cp,
" [%d similar message(s) suppressed in last %d seconds]", " [%s%d similar message(s) suppressed in last %d seconds]",
n-1, lim->rate); opt_over, n-1, lim->rate);
return cp; return cp;
} }
} else { } else {

View File

@ -292,7 +292,7 @@ typedef struct ratelim_t {
} ratelim_t; } ratelim_t;
#define RATELIM_INIT(r) { (r), 0, 0 } #define RATELIM_INIT(r) { (r), 0, 0 }
#define RATELIM_TOOMANY (16*1000) #define RATELIM_TOOMANY (16*1000*1000)
char *rate_limit_log(ratelim_t *lim, time_t now); char *rate_limit_log(ratelim_t *lim, time_t now);