Seastar
High performance C++ framework for concurrent servers
Classes | Public Member Functions | Related Functions | List of all members
seastar::gate Class Reference

Detailed Description

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
 
gateoperator= (gate &&x) noexcept
 
bool try_enter () noexcept
 
void enter ()
 
void leave () noexcept
 
void check ()
 
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 ()
 

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
 

Member Function Documentation

◆ check()

void seastar::gate::check ( )
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.

◆ close()

future seastar::gate::close ( )
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.

◆ enter()

void seastar::gate::enter ( )
inline

Registers an in-progress request.

If the gate is not closed, the request is registered. Otherwise, a gate_closed_exception is thrown.

◆ hold()

holder seastar::gate::hold ( )
inline

Get a RAII-based gate::holder object that enter()s the gate when constructed and leave()s it when destroyed.

◆ leave()

void seastar::gate::leave ( )
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.

◆ try_enter()

bool seastar::gate::try_enter ( )
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.


The documentation for this class was generated from the following file: