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

          Line data    Source code
       1             : #pragma once
       2             : 
       3             : #include <cstddef>
       4             : #include <cstdint>
       5             : #include <memory>
       6             : 
       7             : #include "envoy/common/pure.h"
       8             : #include "envoy/common/resource.h"
       9             : 
      10             : namespace Envoy {
      11             : namespace Upstream {
      12             : 
      13             : /**
      14             :  * Resource priority classes. The parallel NumResourcePriorities constant allows defining fixed
      15             :  * arrays for each priority, but does not pollute the enum.
      16             :  */
      17             : enum class ResourcePriority : uint8_t { Default, High };
      18             : const size_t NumResourcePriorities = 2;
      19             : 
      20             : /**
      21             :  * RAII wrapper that increments a resource on construction and decrements it on destruction.
      22             :  */
      23             : class ResourceAutoIncDec {
      24             : public:
      25           0 :   ResourceAutoIncDec(ResourceLimit& resource) : resource_(resource) { resource_.inc(); }
      26           0 :   ~ResourceAutoIncDec() { resource_.dec(); }
      27             : 
      28             : private:
      29             :   ResourceLimit& resource_;
      30             : };
      31             : 
      32             : using ResourceAutoIncDecPtr = std::unique_ptr<ResourceAutoIncDec>;
      33             : 
      34             : /**
      35             :  * Global resource manager that loosely synchronizes maximum connections, pending requests, etc.
      36             :  * NOTE: Currently this is used on a per cluster basis. In the future we may consider also chaining
      37             :  *       this with a global resource manager.
      38             :  */
      39             : class ResourceManager {
      40             : public:
      41        2535 :   virtual ~ResourceManager() = default;
      42             : 
      43             :   /**
      44             :    * @return ResourceLimit& active TCP connections and UDP sessions.
      45             :    */
      46             :   virtual ResourceLimit& connections() PURE;
      47             : 
      48             :   /**
      49             :    * @return ResourceLimit& active pending requests (requests that have not yet been attached to a
      50             :    *         connection pool connection).
      51             :    */
      52             :   virtual ResourceLimit& pendingRequests() PURE;
      53             : 
      54             :   /**
      55             :    * @return ResourceLimit& active requests (requests that are currently bound to a connection pool
      56             :    *         connection and are awaiting response).
      57             :    */
      58             :   virtual ResourceLimit& requests() PURE;
      59             : 
      60             :   /**
      61             :    * @return ResourceLimit& active retries.
      62             :    */
      63             :   virtual ResourceLimit& retries() PURE;
      64             : 
      65             :   /**
      66             :    * @return ResourceLimit& active connection pools.
      67             :    */
      68             :   virtual ResourceLimit& connectionPools() PURE;
      69             : 
      70             :   /**
      71             :    * @return uint64_t the max number of connections per host.
      72             :    */
      73             :   virtual uint64_t maxConnectionsPerHost() PURE;
      74             : };
      75             : 
      76             : } // namespace Upstream
      77             : } // namespace Envoy

Generated by: LCOV version 1.15