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>


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 ( )

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 ( )

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 ( )

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 ( )

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 ( )

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 ( )

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: