LCOV - code coverage report
Current view: top level - envoy/server - lifecycle_notifier.h (source / functions) Hit Total Coverage
Test: coverage.dat Lines: 1 2 50.0 %
Date: 2024-01-05 06:35:25 Functions: 1 2 50.0 %

          Line data    Source code
       1             : #pragma once
       2             : 
       3             : #include <functional>
       4             : 
       5             : #include "envoy/common/pure.h"
       6             : #include "envoy/event/dispatcher.h"
       7             : 
       8             : namespace Envoy {
       9             : namespace Server {
      10             : 
      11             : class ServerLifecycleNotifier {
      12             : public:
      13         481 :   virtual ~ServerLifecycleNotifier() = default;
      14             : 
      15             :   /**
      16             :    * Stages of the envoy server instance lifecycle.
      17             :    */
      18             :   enum class Stage {
      19             :     /**
      20             :      * The server instance main thread is about to enter the dispatcher loop.
      21             :      */
      22             :     Startup,
      23             : 
      24             :     /**
      25             :      * The server instance init manager has finished initialization.
      26             :      */
      27             :     PostInit,
      28             : 
      29             :     /**
      30             :      * The server instance is being shutdown and the dispatcher is about to exit.
      31             :      * This provides listeners a last chance to run a callback on the main dispatcher.
      32             :      * Note: the server will wait for callbacks that registered to take a completion
      33             :      * before exiting the dispatcher loop.
      34             :      * Note: callbacks that registered with a completion will only be notified for this
      35             :      * stage if the server did not prematurely shutdown before fully starting up (specifically
      36             :      * if the server shutdown before worker threads were started).
      37             :      */
      38             :     ShutdownExit
      39             :   };
      40             : 
      41             :   // A handle to a callback registration. Deleting this handle will unregister the callback.
      42             :   class Handle {
      43             :   public:
      44           0 :     virtual ~Handle() = default;
      45             :   };
      46             :   using HandlePtr = std::unique_ptr<Handle>;
      47             : 
      48             :   /**
      49             :    * Callback invoked when the server reaches a certain lifecycle stage.
      50             :    *
      51             :    * Instances of the second type which take an Event::PostCb parameter must post
      52             :    * that callback to the main dispatcher when they have finished processing of
      53             :    * the new lifecycle state. This is useful when the main dispatcher needs to
      54             :    * wait for registered callbacks to finish their work before continuing, e.g.,
      55             :    * during server shutdown.
      56             :    */
      57             :   using StageCallback = std::function<void()>;
      58             :   using StageCallbackWithCompletion = std::function<void(Event::PostCb)>;
      59             : 
      60             :   /**
      61             :    * Register a callback function that will be invoked on the main thread when
      62             :    * the specified stage is reached.
      63             :    *
      64             :    * The second version which takes a completion back is currently only supported
      65             :    * for the ShutdownExit stage.
      66             :    */
      67             :   virtual HandlePtr registerCallback(Stage stage, StageCallback callback) PURE;
      68             :   virtual HandlePtr registerCallback(Stage stage, StageCallbackWithCompletion callback) PURE;
      69             : };
      70             : 
      71             : } // namespace Server
      72             : } // namespace Envoy

Generated by: LCOV version 1.15