View Source amoc_throttle (amoc v3.3.0)
Summary
Types
Functions
Sets Rate
and Interval
for Name
according to the given values.
Allows to set a plan of gradual rate changes for a given Name
.
Pauses executions for the given Name
as if Rate
was set to 0
.
Name
, to their original Rate
and Interval
values.Executes a given function Fn
when it does not exceed the rate for Name
.
erlang:self()
See also: send/3.
Sends a given message Msg
to a given Pid
when the rate for Name
allows for that.
Sends and receives the given message Msg
.
See also: start/4.
See also: start/4.
Starts the throttle mechanism for a given Name
with a given Rate
per Interval
.
Name
.Types
-type interval() :: non_neg_integer().
-type name() :: atom().
-type rate() :: pos_integer().
Functions
Sets Rate
and Interval
for Name
according to the given values.
Name
to parallel executions or to Rate
per Interval
, according to the given Interval
value.
change_rate_gradually(Name, FromRate, ToRate, RateInterval, StepInterval, NoOfSteps)
View Source-spec change_rate_gradually(name(), rate(), rate(), interval(), pos_integer(), pos_integer()) -> ok | {error, any()}.
Allows to set a plan of gradual rate changes for a given Name
.
Rate
will be changed from FromRate
to ToRate
in a series of consecutive steps. Note that FromRate
does not need to be lower than ToRate
, rates can be changed downwards.
The rate is calculated at each step in relation to the RateInterval
, which can also be 0
. There will be NoOfSteps
steps, each taking StepInterval
time in milliseconds.
FromRate
per RateInterval
and this is not considered a step.
Pauses executions for the given Name
as if Rate
was set to 0
.
Name
, to their original Rate
and Interval
values.
Executes a given function Fn
when it does not exceed the rate for Name
.
Fn
is executed in the context of a new process spawned on the same node on which the process executing run/2
runs, so a call to run/2
is non-blocking. This function is used internally by both send
and send_and_wait/2
functions, so all those actions will be limited to the same rate when called with the same Name
.
title Amoc distributed
participantgroup **Slave node**
participant User
participant Async runner
end
participantgroup **Master node**
participant Throttle process
end
box left of User: inc req rate
User -> *Async runner : Fun
User -> Throttle process : {schedule, Async runner PID}
box right of Throttle process : inc req rate
==throtlling delay==
Throttle process -> Async runner: scheduled
box left of Async runner : inc exec rate
abox over Async runner : Fun()
activate Async runner
box right of Throttle process : inc exec rate
deactivate Async runner
Async runner ->Throttle process:'DOWN'
destroy Async runner
for the local execution, req/exec rates are increased only by throttle process.
erlang:self()
See also: send/3.
Sends a given message Msg
to a given Pid
when the rate for Name
allows for that.
Sends and receives the given message Msg
.
wait/1
See also: start/4.
-spec start(name(), rate(), non_neg_integer()) -> ok | {error, any()}.
See also: start/4.
-spec start(name(), rate(), interval(), pos_integer()) -> ok | {error, any()}.
Starts the throttle mechanism for a given Name
with a given Rate
per Interval
.
Interval
(default is one minute) and a NoOfProcesses
(default is 10). Name
is needed to identify the rate as a single test can have different rates for different tasks. Interval
is given in milliseconds and can be changed to a different value for convenience or higher granularity. It also accepts a special value of 0
which limits the number of parallel executions associated with Name
to Rate
.
Name
.