Skip to content

Commit

Permalink
Handle infinity better.
Browse files Browse the repository at this point in the history
The current code fails with an error if we call rlimit:new/3 with Limit
= infinity because of the 5 * Limit, Limit div 5 and Limit * 5.

This patch splits the calculation of the fair, tokens, and burst values
into isolated functions that handles the infinity correctly.
  • Loading branch information
ahf committed Mar 5, 2016
1 parent df798ff commit b482b9c
Showing 1 changed file with 39 additions and 6 deletions.
45 changes: 39 additions & 6 deletions src/rlimit.erl
Expand Up @@ -34,9 +34,9 @@ new(Name, Limit, Interval) ->
ets:insert(Name, [
{version, 0},
{limit, Limit},
{burst, 5 * Limit},
{fair, Limit div 5}, %% Should be limit / size(group)
{tokens, Limit * 5},
{burst, burst(Limit)},
{fair, fair(Limit)}, %% Should be limit / size(group)
{tokens, tokens(Limit)},
{timer, TRef},
%% How many allowed during the current interval
{allowed, 0},
Expand All @@ -49,9 +49,9 @@ new(Name, Limit, Interval) ->
set_limit(Name, Limit) ->
ets:insert(Name, [
{limit, Limit},
{burst, 5 * Limit},
{fair, Limit div 5}, %% Should be limit / size(group)
{tokens, Limit * 5}]),
{burst, burst(Limit)},
{fair, fair(Limit)}, %% Should be limit / size(group)
{tokens, tokens(Limit)}]),
ok.


Expand Down Expand Up @@ -161,3 +161,36 @@ take(N, Name, Limit, Version) when N >= 0 ->
%% the Limit/Burst of a flow.
-spec slice(non_neg_integer(), non_neg_integer()) -> non_neg_integer().
slice(Tokens, Limit) -> min(Tokens, Limit).

%% @private
-spec burst(Limit) -> Burst
when
Limit :: non_neg_integer() | infinity,
Burst :: non_neg_integer() | infinity.
burst(infinity) ->
infinity;

burst(Limit) ->
Limit * 5.

%% @private
-spec tokens(Limit) -> Tokens
when
Limit :: non_neg_integer() | infinity,
Tokens :: non_neg_integer() | infinity.
tokens(infinity) ->
infinity;

tokens(Limit) ->
Limit * 5.

%% @private
-spec fair(Limit) -> Fair
when
Limit :: non_neg_integer() | infinity,
Fair :: non_neg_integer() | infinity.
fair(infinity) ->
infinity;

fair(Limit) ->
Limit div 5.

0 comments on commit b482b9c

Please sign in to comment.