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

          Line data    Source code
       1             : #pragma once
       2             : 
       3             : #include <functional>
       4             : 
       5             : #include "envoy/event/dispatcher.h"
       6             : #include "envoy/runtime/runtime.h"
       7             : #include "envoy/server/guarddog.h"
       8             : #include "envoy/server/overload/overload_manager.h"
       9             : 
      10             : namespace Envoy {
      11             : namespace Server {
      12             : 
      13             : /**
      14             :  * Interface for a threaded connection handling worker. All routines are thread safe.
      15             :  */
      16             : class Worker {
      17             : public:
      18         131 :   virtual ~Worker() = default;
      19             : 
      20             :   /**
      21             :    * Completion called when a listener has been added on a worker and is listening for new
      22             :    * connections.
      23             :    */
      24             :   using AddListenerCompletion = std::function<void()>;
      25             : 
      26             :   /**
      27             :    * Add a listener to the worker and replace the previous listener if any. If the previous listener
      28             :    * doesn't exist, the behavior should be equivalent to add a new listener.
      29             :    * @param overridden_listener The previous listener tag to be replaced. nullopt if it's a new
      30             :    * listener.
      31             :    * @param listener supplies the listener to add.
      32             :    * @param completion supplies the completion to call when the listener has been added (or not) on
      33             :    *                   the worker.
      34             :    * @param runtime, supplies the runtime for the server
      35             :    * @param random, supplies a random number generator
      36             :    */
      37             :   virtual void addListener(absl::optional<uint64_t> overridden_listener,
      38             :                            Network::ListenerConfig& listener, AddListenerCompletion completion,
      39             :                            Runtime::Loader& runtime, Random::RandomGenerator& random) PURE;
      40             : 
      41             :   /**
      42             :    * @return uint64_t the number of connections across all listeners that the worker owns.
      43             :    */
      44             :   virtual uint64_t numConnections() const PURE;
      45             : 
      46             :   /**
      47             :    * Start the worker thread.
      48             :    * @param guard_dog supplies the optional guard dog to use for thread watching.
      49             :    * @param cb a callback to run when the worker thread starts running.
      50             :    */
      51             :   virtual void start(OptRef<GuardDog> guard_dog, const std::function<void()>& cb) PURE;
      52             : 
      53             :   /**
      54             :    * Initialize stats for this worker's dispatcher, if available. The worker will output
      55             :    * thread-specific stats under the given scope.
      56             :    * @param scope the scope to contain the new per-dispatcher stats created here.
      57             :    */
      58             :   virtual void initializeStats(Stats::Scope& scope) PURE;
      59             : 
      60             :   /**
      61             :    * Stop the worker thread.
      62             :    */
      63             :   virtual void stop() PURE;
      64             : 
      65             :   /**
      66             :    * Remove a listener from the worker.
      67             :    * @param listener supplies the listener to remove.
      68             :    * @param completion supplies the completion to be called when the listener has been removed.
      69             :    *        This completion is called on the worker thread. No locking is performed by the worker.
      70             :    */
      71             :   virtual void removeListener(Network::ListenerConfig& listener,
      72             :                               std::function<void()> completion) PURE;
      73             :   /**
      74             :    * Remove the stale filter chains of the given listener but leave the listener running.
      75             :    * @param listener_tag supplies the tag passed to addListener().
      76             :    * @param filter_chains supplies the filter chains to be removed.
      77             :    * @param completion supplies the completion to be called when the listener removed all the
      78             :    * untracked connections. This completion is called on the worker thread. No locking is performed
      79             :    * by the worker.
      80             :    */
      81             :   virtual void removeFilterChains(uint64_t listener_tag,
      82             :                                   const std::list<const Network::FilterChain*>& filter_chains,
      83             :                                   std::function<void()> completion) PURE;
      84             : 
      85             :   /**
      86             :    * Stop a listener from accepting new connections. This is used for server draining.
      87             :    * @param listener supplies the listener to stop.
      88             :    * @param options additional options to be passed through to shutdownListener.
      89             :    * @param completion supplies the completion to be called when the listener has stopped
      90             :    * accepting new connections. This completion is called on the worker thread. No locking is
      91             :    * performed by the worker.
      92             :    */
      93             :   virtual void stopListener(Network::ListenerConfig& listener,
      94             :                             const Network::ExtraShutdownListenerOptions& options,
      95             :                             std::function<void()> completion) PURE;
      96             : };
      97             : 
      98             : using WorkerPtr = std::unique_ptr<Worker>;
      99             : 
     100             : /**
     101             :  * Factory for creating workers.
     102             :  */
     103             : class WorkerFactory {
     104             : public:
     105         455 :   virtual ~WorkerFactory() = default;
     106             : 
     107             :   /**
     108             :    * @param index supplies the index of the worker, in the range of [0, concurrency).
     109             :    * @param overload_manager supplies the server's overload manager.
     110             :    * @param worker_name supplies the name of the worker, used for per-worker stats.
     111             :    * @return WorkerPtr a new worker.
     112             :    */
     113             :   virtual WorkerPtr createWorker(uint32_t index, OverloadManager& overload_manager,
     114             :                                  const std::string& worker_name) PURE;
     115             : };
     116             : 
     117             : } // namespace Server
     118             : } // namespace Envoy

Generated by: LCOV version 1.15