+doc,htp #19896 directives for RequestTimeout and docs

This commit is contained in:
Konrad Malawski 2016-02-26 18:38:24 +01:00
parent 27c004d274
commit 2d7d24dee6
24 changed files with 523 additions and 70 deletions

View file

@ -210,10 +210,14 @@ Directive Description
:ref:`-tprovide-` Injects a given tuple of values into a directive
:ref:`-uploadedFile-` Streams one uploaded file from a multipart request to a file on disk
:ref:`-validate-` Checks a given condition before running its inner route
:ref:`-withoutRequestTimeout-` Disables :ref:`request timeouts <request-timeout>` for a given route.
:ref:`-withExecutionContext-` Runs its inner route with the given alternative ``ExecutionContext``
:ref:`-withMaterializer-` Runs its inner route with the given alternative ``Materializer``
:ref:`-withLog-` Runs its inner route with the given alternative ``LoggingAdapter``
:ref:`-withRangeSupport-` Adds ``Accept-Ranges: bytes`` to responses to GET requests, produces partial
responses if the initial request contained a valid ``Range`` header
:ref:`-withRequestTimeout-` Configures the :ref:`request timeouts <request-timeout>` for a given route.
:ref:`-withRequestTimeoutResponse-` Prepares the ``HttpResponse`` that is emitted if a request timeout is triggered.
``RequestContext => RequestContext`` function
:ref:`-withSettings-` Runs its inner route with the given alternative ``RoutingSettings``
=========================================== ============================================================================

View file

@ -74,6 +74,9 @@ Directives creating or transforming the response
:ref:`BasicDirectives` and :ref:`MiscDirectives`
Directives handling or transforming response properties.
:ref:`TimeoutDirectives`
Configure request timeouts and automatic timeout responses.
List of predefined directives by trait
--------------------------------------
@ -104,3 +107,4 @@ List of predefined directives by trait
scheme-directives/index
security-directives/index
websocket-directives/index
timeout-directives/index

View file

@ -0,0 +1,11 @@
.. _TimeoutDirectives:
TimeoutDirectives
=================
.. toctree::
:maxdepth: 1
withRequestTimeout
withoutRequestTimeout
withRequestTimeoutResponse

View file

@ -0,0 +1,49 @@
.. _-withRequestTimeout-:
withRequestTimeout
==================
Signature
---------
.. includecode2:: /../../akka-http/src/main/scala/akka/http/scaladsl/server/directives/TimeoutDirectives.scala
:snippet: withRequestTimeout
Description
-----------
This directive enables "late" (during request processing) control over the :ref:`request-timeout` feature in Akka HTTP.
The timeout can be either loosened or made more tight using this directive, however one should be aware that it is
inherently racy (which may especially show with very tight timeouts) since a timeout may already have been triggered
when this directive executes.
In case of pipelined HTTP requests (multiple requests being accepted on the same connection before sending the first response)
a the request timeout failure of the ``n-th`` request *will shut down the connection* causing the already enqueued requests
to be dropped. This is by-design, as the request timeout feature serves as a "safety net" in case of programming errors
(e.g. a Future that never completes thus potentially blocking the entire connection forever) or malicious attacks on the server.
Optionally, a timeout handler may be provided in which is called when a time-out is triggered and must produce an
``HttpResponse`` that will be sent back to the client instead of the "too late" response (in case it'd ever arrive).
See also :ref:`-withRequestTimeoutResponse-` if only looking to customise the timeout response without changing the timeout itself.
.. warning::
Please note that setting the timeout from within a directive is inherently racy (as the "point in time from which
we're measuring the timeout" is already in the past (the moment we started handling the request), so if the existing
timeout already was triggered before your directive had the chance to change it, an timeout may still be logged.
It is recommended to use a larger statically configured timeout (think of it as a "safety net" against programming errors
or malicious attackers) and if needed tighten it using the directives not the other way around.
For more information about various timeouts in Akka HTTP see :ref:`http-timeouts`.
Example
-------
.. includecode2:: ../../../../code/docs/http/scaladsl/server/directives/TimeoutDirectivesExamplesSpec.scala
:snippet: withRequestTimeout-plain
With setting the handler at the same time:
.. includecode2:: ../../../../code/docs/http/scaladsl/server/directives/TimeoutDirectivesExamplesSpec.scala
:snippet: withRequestTimeout-with-handler

View file

@ -0,0 +1,34 @@
.. _-withRequestTimeoutResponse-:
withRequestTimeoutResponse
==========================
Signature
---------
.. includecode2:: /../../akka-http/src/main/scala/akka/http/scaladsl/server/directives/TimeoutDirectives.scala
:snippet: withRequestTimeoutResponse
Description
-----------
Allows customising the ``HttpResponse`` that will be sent to clients in case of a :ref:`request-timeout`.
See also :ref:`-withRequestTimeout-` or :ref:`-withoutRequestTimeout-` if interested in dynamically changing the timeout
for a given route instead.
.. warning::
Please note that setting handler is inherently racy as the timeout is measured from starting to handle the request
to its deadline, thus if the timeout triggers before the ``withRequestTimeoutResponse`` executed it would have emitted
the default timeout HttpResponse.
In practice this can only be a problem with very tight timeouts, so with default settings
of request timeouts being measured in seconds it shouldn't be a problem in reality (though certainly a possibility still).
To learn more about various timeouts in Akka HTTP and how to configure them see :ref:`http-timeouts`.
Example
-------
.. includecode2:: ../../../../code/docs/http/scaladsl/server/directives/TimeoutDirectivesExamplesSpec.scala
:snippet: withRequestTimeoutResponse

View file

@ -0,0 +1,31 @@
.. _-withoutRequestTimeout-:
withoutRequestTimeout
=====================
Signature
---------
.. includecode2:: /../../akka-http/src/main/scala/akka/http/scaladsl/server/directives/TimeoutDirectives.scala
:snippet: withoutRequestTimeout
Description
-----------
This directive enables "late" (during request processing) control over the :ref:`request-timeout` feature in Akka HTTP.
It is not recommended to turn off request timeouts using this method as it is inherently racy and disabling request timeouts
basically turns off the safety net against programming mistakes that it provides.
.. warning::
Please note that setting the timeout from within a directive is inherently racy (as the "point in time from which
we're measuring the timeout" is already in the past (the moment we started handling the request), so if the existing
timeout already was triggered before your directive had the chance to change it, an timeout may still be logged.
For more information about various timeouts in Akka HTTP see :ref:`http-timeouts`.
Example
-------
.. includecode2:: ../../../../code/docs/http/scaladsl/server/directives/TimeoutDirectivesExamplesSpec.scala
:snippet: withoutRequestTimeout