Seastar
High performance C++ framework for concurrent servers
|
Facility to stop new requests, and to tell when existing requests are done.
When stopping a service that serves asynchronous requests, we are faced with two problems: preventing new requests from coming in, and knowing when existing requests have completed. The gate
class provides a solution.
#include <seastar/core/gate.hh>
Classes | |
class | holder |
Public Member Functions | |
gate (const gate &)=delete | |
gate (gate &&x) noexcept | |
gate & | operator= (gate &&x) noexcept |
bool | try_enter () noexcept |
void | enter () |
void | leave () noexcept |
void | check () const |
future | close () noexcept |
size_t | get_count () const noexcept |
Returns a current number of registered in-progress requests. | |
bool | is_closed () const noexcept |
Returns whether the gate is closed. | |
holder | hold () |
std::optional< holder > | try_hold () noexcept |
Related Functions | |
(Note that these are not member functions.) | |
template<typename Func > | |
auto | with_gate (gate &g, Func &&func) |
template<typename Func > | |
auto | try_with_gate (gate &g, Func &&func) noexcept |
|
inline |
Potentially stop an in-progress request.
If the gate is already closed, a gate_closed_exception is thrown. By using enter() and leave(), the program can ensure that no further requests are serviced. However, long-running requests may continue to run. The check() method allows such a long operation to voluntarily stop itself after the gate is closed, by making calls to check() in appropriate places. check() with throw an exception and bail out of the long-running code if the gate is closed.
|
inlinenoexcept |
Closes the gate.
Future calls to enter() will fail with an exception, and when all current requests call leave(), the returned future will be made ready.
|
inline |
Registers an in-progress request.
If the gate is not closed, the request is registered. Otherwise, a gate_closed_exception is thrown.
|
inline |
Get a RAII-based gate::holder object that enter()s the gate when constructed and leave()s it when destroyed.
|
inlinenoexcept |
Unregisters an in-progress request.
If the gate is closed, and there are no more in-progress requests, the _stopped
promise will be fulfilled.
|
inlinenoexcept |
Tries to register an in-progress request.
If the gate is not closed, the request is registered and the function returns true
, Otherwise the function just returns false
and has no other effect.
|
inlinenoexcept |
Try getting an optional RAII-based gate::holder object that enter()s the gate when constructed and leave()s it when destroyed. Returns std::nullopt iff the gate is closed.