Configure that requests are to be treated as idempotent.
Configure that requests are to be treated as idempotent. Because requests can be safely
retried, BackupRequestFilter is configured with the params maxExtraLoad
to decrease tail latency by sending an additional fraction of requests.
How much extra load, as a Tunable[Double], we are willing to send to the server. Must be between 0.0 and 1.0. Backup requests can be disabled by setting this to 0.0.
The MethodBuilder section in the user guide for further details.
Configure that requests are to be treated as idempotent.
Configure that requests are to be treated as idempotent. Because requests can be safely
retried, BackupRequestFilter is configured with the params maxExtraLoad
to decrease tail latency by sending an additional fraction of requests.
If you are using TwitterServer, a good starting point for determining a value for
maxExtraLoad
is looking at the details of the PDF histogram for request latency,
at /admin/histograms. If you choose a maxExtraLoad
of 1.percent, for example, you can expect
your p999/p9999 latencies to (roughly) now be that of your p99 latency. For 5.percent, those
latencies would shift to your p95 latency. You should also ensure that your backend can
tolerate the increased load.
How much extra load, as a fraction, we are willing to send to the server. Must be between 0.0 and 1.0. Backup requests can be disabled by setting this to 0.0.
The MethodBuilder section in the user guide for further details.
Configure that requests are to be treated as non-idempotent.
Configure that requests are to be treated as non-idempotent. BackupRequestFilter is disabled, and only those failures that are known to be safe to retry (i.e., write failures, where the request was never sent) are retried via requeue filter; any previously configured retries are removed.
The MethodBuilder section in the user guide for further details.
Disables "application" level retries.
Disables "application" level retries.
This does not disable retries of failures that are known
to be safe to retry via com.twitter.finagle.service.RequeueFilter
.
This causes the logical success metrics to be based on the
default response classifier rules
of a Return
response is a success, while everything else is not.
import com.twitter.finagle.http.Http val client: Http.Client = ??? val builder = client.methodBuilder("inet!example.com:80") builder.withRetryDisabled
The MethodBuilder section in the user guide for further details.
Retry based on ResponseClassifier.
Retry based on ResponseClassifier.
The default behavior is to use the client's classifier which is typically
configured through theClient.withResponseClassifier
or
ClientBuilder.withResponseClassifier
.
This classifier is used to determine which requests are unsuccessful. This is the basis for measuring the logical success metrics as well as logging unsuccessful requests at debug level.
when a Failed
with retryable
is true
is returned for a given ReqRep
, the
request will be retried. This is often a
ResponseClass.RetryableFailure
.
For example, retrying on a 418 status code:
import com.twitter.conversions.DurationOps._ import com.twitter.finagle.http.Http import com.twitter.finagle.service.{ReqRep, ResponseClass} import com.twitter.util.Return val client: Http.Client = ??? val builder = client.methodBuilder("inet!example.com:80") builder.withRetryForClassifier { case ReqRep(_, Return(rep)) if rep.statusCode == 418 => ResponseClass.RetryableFailure }
The classifier is also used to determine the logical success metrics of the client.
The MethodBuilder section in the user guide for further details.
How long a single request is given to complete.
How long a single request is given to complete.
If there are retries, each attempt is given up to this amount of time.
If a request does not complete within this time, the response will be satisfied with a com.twitter.finagle.IndividualRequestTimeoutException.
Defaults to using the client's configuration for com.twitter.finagle.service.TimeoutFilter.Param(timeout), which is typically set via com.twitter.finagle.param.CommonParams.withRequestTimeout.
how long, from the initial request issuance,
an individual attempt given to complete.
If it is not finite (e.g. Duration.Top
),
no method specific timeout will be applied.
a new instance with all other settings copied
For example, a per-request timeout of 50 milliseconds:
import com.twitter.conversions.DurationOps._ import com.twitter.finagle.http.Http import com.twitter.util.Duration import com.twitter.util.tunable.Tunable val client: Http.Client = ??? val tunableTimeout: Tunable[Duration] = Tunable.const("id", 50.milliseconds) val builder = client.methodBuilder("inet!example.com:80") builder.withTimeoutPerRequest(tunableTimeout))
The MethodBuilder section in the user guide for further details.
withTimeoutTotal(Tunable[Duration])
How long a single request is given to complete.
How long a single request is given to complete.
If there are retries, each attempt is given up to this amount of time.
If a request does not complete within this time, the response will be satisfied with a com.twitter.finagle.IndividualRequestTimeoutException.
Defaults to using the client's configuration for com.twitter.finagle.service.TimeoutFilter.Param(timeout), which is typically set via com.twitter.finagle.param.CommonParams.withRequestTimeout.
how long, from the initial request issuance,
an individual attempt given to complete.
If it is not finite (e.g. Duration.Top
),
no method specific timeout will be applied.
a new instance with all other settings copied
For example, a per-request timeout of 50 milliseconds:
import com.twitter.conversions.DurationOps._ import com.twitter.finagle.http.Http import com.twitter.util.Duration val client: Http.Client = ??? val builder = client.methodBuilder("inet!example.com:80") builder.withTimeoutPerRequest(50.milliseconds))
The MethodBuilder section in the user guide for further details.
withTimeoutTotal(Duration)
Set a total timeout with a Tunable, including time spent on retries.
Set a total timeout with a Tunable, including time spent on retries.
If the request does not complete in this time, the response will be satisfied with a com.twitter.finagle.GlobalRequestTimeoutException.
Defaults to using the client's configuration for com.twitter.finagle.service.TimeoutFilter.TotalTimeout(timeout).
how long, from the initial request issuance,
is the request given to complete.
If it is not finite (e.g. Duration.Top
),
no method specific timeout will be applied.
a new instance with all other settings copied
For example, a total timeout of 200 milliseconds:
import com.twitter.conversions.DurationOps._ import com.twitter.finagle.http.Http import com.twitter.util.Duration import com.twitter.util.tunable.Tunable val client: Http.Client = ??? val tunableTimeout: Tunable[Duration] = Tunable.const("id", 200.milliseconds) val builder = client.methodBuilder("inet!example.com:80") builder.withTimeoutTotal(tunableTimeout))
The MethodBuilder section in the user guide for further details.
withTimeoutPerRequest(Tunable[Duration])
Set a total timeout, including time spent on retries.
Set a total timeout, including time spent on retries.
If the request does not complete in this time, the response will be satisfied with a com.twitter.finagle.GlobalRequestTimeoutException.
Defaults to using the client's configuration for com.twitter.finagle.service.TimeoutFilter.TotalTimeout(timeout).
how long, from the initial request issuance,
is the request given to complete.
If it is not finite (e.g. Duration.Top
),
no method specific timeout will be applied.
a new instance with all other settings copied
For example, a total timeout of 200 milliseconds:
import com.twitter.conversions.DurationOps._ import com.twitter.finagle.http.Http import com.twitter.util.Duration val client: Http.Client = ??? val builder = client.methodBuilder("inet!example.com:80") builder.withTimeoutTotal(200.milliseconds))
The MethodBuilder section in the user guide for further details.
withTimeoutPerRequest(Duration)
A base interface for protocol-specific
MethodBuilder
implementations. Acts as a template forMethodBuilder
pattern and provides the documentation for common methods.