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

          Line data    Source code
       1             : #pragma once
       2             : 
       3             : #include <functional>
       4             : #include <memory>
       5             : 
       6             : #include "envoy/common/conn_pool.h"
       7             : #include "envoy/common/pure.h"
       8             : #include "envoy/event/deferred_deletable.h"
       9             : #include "envoy/http/codec.h"
      10             : #include "envoy/upstream/upstream.h"
      11             : 
      12             : namespace Envoy {
      13             : namespace Http {
      14             : namespace ConnectionPool {
      15             : 
      16             : using PoolFailureReason = ::Envoy::ConnectionPool::PoolFailureReason;
      17             : using Cancellable = ::Envoy::ConnectionPool::Cancellable;
      18             : 
      19             : /**
      20             :  * Pool callbacks invoked in the context of a newStream() call, either synchronously or
      21             :  * asynchronously.
      22             :  */
      23             : class Callbacks {
      24             : public:
      25         251 :   virtual ~Callbacks() = default;
      26             : 
      27             :   /**
      28             :    * Called when a pool error occurred and no connection could be acquired for making the request.
      29             :    * @param reason supplies the failure reason.
      30             :    * @param transport_failure_reason supplies the details of the transport failure reason.
      31             :    * @param host supplies the description of the host that caused the failure. This may be nullptr
      32             :    *             if no host was involved in the failure (for example overflow).
      33             :    */
      34             :   virtual void onPoolFailure(PoolFailureReason reason, absl::string_view transport_failure_reason,
      35             :                              Upstream::HostDescriptionConstSharedPtr host) PURE;
      36             : 
      37             :   /**
      38             :    * Called when a connection is available to process a request/response.
      39             :    * @param encoder supplies the request encoder to use.
      40             :    * @param host supplies the description of the host that will carry the request. For logical
      41             :    *             connection pools the description may be different each time this is called.
      42             :    * @param info supplies the stream info object associated with the upstream L4 connection.
      43             :    * @param protocol supplies the protocol associated with the stream, or absl::nullopt for raw TCP.
      44             :    */
      45             :   virtual void onPoolReady(RequestEncoder& encoder, Upstream::HostDescriptionConstSharedPtr host,
      46             :                            StreamInfo::StreamInfo& info,
      47             :                            absl::optional<Http::Protocol> protocol) PURE;
      48             : };
      49             : 
      50             : class Instance;
      51             : 
      52             : /**
      53             :  * Pool callbacks invoked to track the lifetime of connections in the pool.
      54             :  */
      55             : class ConnectionLifetimeCallbacks {
      56             : public:
      57           0 :   virtual ~ConnectionLifetimeCallbacks() = default;
      58             : 
      59             :   /**
      60             :    * Called when a connection is open for requests in a pool.
      61             :    * @param pool which the connection is associated with.
      62             :    * @param hash_key the hash key used for this connection.
      63             :    * @param connection newly open connection.
      64             :    */
      65             :   virtual void onConnectionOpen(Instance& pool, std::vector<uint8_t>& hash_key,
      66             :                                 const Network::Connection& connection) PURE;
      67             : 
      68             :   /**
      69             :    * Called when a connection is draining and may no longer be used for requests.
      70             :    * @param pool which the connection is associated with.
      71             :    * @param hash_key the hash key used for this connection.
      72             :    * @param connection newly open connection.
      73             :    */
      74             :   virtual void onConnectionDraining(Instance& pool, std::vector<uint8_t>& hash_key,
      75             :                                     const Network::Connection& connection) PURE;
      76             : };
      77             : 
      78             : /**
      79             :  * An instance of a generic connection pool.
      80             :  */
      81             : class Instance : public Envoy::ConnectionPool::Instance, public Event::DeferredDeletable {
      82             : public:
      83             :   struct StreamOptions {
      84             :     // True if the request can be sent as early data.
      85             :     bool can_send_early_data_;
      86             :     // True if the request can be sent over HTTP/3.
      87             :     bool can_use_http3_;
      88             :   };
      89             : 
      90         381 :   ~Instance() override = default;
      91             : 
      92             :   /**
      93             :    * Determines whether the connection pool is actively processing any requests.
      94             :    * @return true if the connection pool has any pending requests or any active requests.
      95             :    */
      96             :   virtual bool hasActiveConnections() const PURE;
      97             : 
      98             :   /**
      99             :    * Create a new stream on the pool.
     100             :    * @param response_decoder supplies the decoder events to fire when the response is
     101             :    *                         available.
     102             :    * @param cb supplies the callbacks to invoke when the connection is ready or has failed. The
     103             :    *           callbacks may be invoked immediately within the context of this call if there is a
     104             :    *           ready connection or an immediate failure. In this case, the routine returns nullptr.
     105             :    * @param options specifies how to create the requested stream.
     106             :    * @return Cancellable* If no connection is ready, the callback is not invoked, and a handle
     107             :    *                      is returned that can be used to cancel the request. Otherwise, one of the
     108             :    *                      callbacks is called and the routine returns nullptr. NOTE: Once a callback
     109             :    *                      is called, the handle is no longer valid and any further cancellation
     110             :    *                      should be done by resetting the stream.
     111             :    * @warning Do not call cancel() from the callbacks, as the request is implicitly canceled when
     112             :    *          the callbacks are called.
     113             :    */
     114             :   virtual Cancellable* newStream(Http::ResponseDecoder& response_decoder, Callbacks& callbacks,
     115             :                                  const StreamOptions& options) PURE;
     116             : 
     117             :   /**
     118             :    * Returns a user-friendly protocol description for logging.
     119             :    * @return absl::string_view a protocol description for logging.
     120             :    */
     121             :   virtual absl::string_view protocolDescription() const PURE;
     122             : };
     123             : 
     124             : using InstancePtr = std::unique_ptr<Instance>;
     125             : 
     126             : } // namespace ConnectionPool
     127             : } // namespace Http
     128             : } // namespace Envoy

Generated by: LCOV version 1.15