LCOV - code coverage report
Current view: top level - envoy/config - eds_resources_cache.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 "envoy/common/optref.h"
       4             : #include "envoy/common/pure.h"
       5             : #include "envoy/config/endpoint/v3/endpoint.pb.h"
       6             : 
       7             : #include "absl/strings/string_view.h"
       8             : 
       9             : namespace Envoy {
      10             : namespace Config {
      11             : 
      12             : // An interface for cached resource removed callback.
      13             : class EdsResourceRemovalCallback {
      14             : public:
      15          28 :   virtual ~EdsResourceRemovalCallback() = default;
      16             : 
      17             :   // Invoked when a cached resource is removed from the cache.
      18             :   virtual void onCachedResourceRemoved(absl::string_view resource_name) PURE;
      19             : };
      20             : 
      21             : // Represents an xDS resources cache for EDS resources, and currently supports
      22             : // a single config-source (ADS). The motivation is that clusters that are
      23             : // updated (not added) during a CDS response will be able to use the current EDS
      24             : // configuration, thus avoiding the need of the xDS server to send an additional
      25             : // EDS response that is identical to what was already sent.
      26             : // However, using the cached EDS config is not always desired, for example when
      27             : // the cluster changes from non-TLS to TLS (see discussion in
      28             : // https://github.com/envoyproxy/envoy/issues/5168). Thus, this cache allows
      29             : // the EDS subscription to decide whether to use the cache or not.
      30             : //
      31             : // This cache will be instantiated once and owned by the ADS Mux, and passed to
      32             : // the EDS subscriptions.
      33             : //
      34             : // Resources lifetime in the cache is determined by the gRPC mux that adds/updates a
      35             : // resource when it receives its contents, and removes a resource when there is
      36             : // no longer interest in that resource.
      37             : // An EDS subscription may fetch a resource from the cache, and optionally
      38             : // install a callback to be triggered if the resource is removed from the cache.
      39             : // In addition, a resource in the cache may have an expiration timer if
      40             : // "endpoint_stale_after" (TTL) is set for that resource. Once the timer
      41             : // expires, the callbacks will be triggered to remove the resource.
      42             : class EdsResourcesCache {
      43             : public:
      44           0 :   virtual ~EdsResourcesCache() = default;
      45             : 
      46             :   /**
      47             :    * Adds or updates a given resource name with its resource.
      48             :    * Any callback that was previously assigned to the resource will be removed
      49             :    * without any notification.
      50             :    * @param resource_name the name of the resource to add/update.
      51             :    * @param resource the contents of the resource.
      52             :    */
      53             :   virtual void setResource(absl::string_view resource_name,
      54             :                            const envoy::config::endpoint::v3::ClusterLoadAssignment& resource) PURE;
      55             : 
      56             :   /**
      57             :    * Removes a resource from the resource cache given the resource name.
      58             :    * The callbacks for the resource will be invoked, notifying that the resource
      59             :    * is removed.
      60             :    * @param resource_name the name of the resource that will be removed from
      61             :    *        the cache.
      62             :    */
      63             :   virtual void removeResource(absl::string_view resource_name) PURE;
      64             : 
      65             :   /**
      66             :    * Retrieves a resource from the cache, and adds the given callback (if any)
      67             :    * to the resource's removal list. if the resource is removed, all callbacks
      68             :    * for that resource will be invoked.
      69             :    * @param resource_name the name of the resource to fetch.
      70             :    * @param removal_cb an optional callback that will be invoked if the resource is removed
      71             :    *        in the future. Note that updating the resource (`setResource()`) will also
      72             :    *        remove the callback. The caller of this function can also call
      73             :    *        `removeCallback()` to explicitly remove the callback. The callback
      74             :    *        is owned by the caller as it is part of the EDS subscription.
      75             :    * @return A reference to the cluster load assignment resource, or nullopt if the
      76             :    *         resource doesn't exist.
      77             :    */
      78             :   virtual OptRef<const envoy::config::endpoint::v3::ClusterLoadAssignment>
      79             :   getResource(absl::string_view resource_name, EdsResourceRemovalCallback* removal_cb) PURE;
      80             : 
      81             :   /**
      82             :    * Removes a callback for a given resource name (if it was previously added).
      83             :    * @param resource_name the name of the resource for which the callback should be removed.
      84             :    * @param removal_cb a pointer to the callback that needs to be removed.
      85             :    */
      86             :   virtual void removeCallback(absl::string_view resource_name,
      87             :                               EdsResourceRemovalCallback* removal_cb) PURE;
      88             : 
      89             :   /**
      90             :    * Sets an expiry timer for the given resource_name after the given ms milliseconds.
      91             :    * Once the timer expires, the callbacks for that resource (if any) will be
      92             :    * @param resource_name the name of the resource for which the timer should be added.
      93             :    * @param ms the number of milliseconds until expiration.
      94             :    */
      95             :   virtual void setExpiryTimer(absl::string_view resource_name, std::chrono::milliseconds ms) PURE;
      96             : 
      97             :   /**
      98             :    * Disables the expiration timer for the given resource_name.
      99             :    * @param resource_name the name of the resource for which the timer should be disabled.
     100             :    */
     101             :   virtual void disableExpiryTimer(absl::string_view resource_name) PURE;
     102             : 
     103             :   /**
     104             :    * Returns the number of items in the cache. Only used in tests.
     105             :    * @return the number of items in the cache.
     106             :    */
     107             :   virtual uint32_t cacheSizeForTest() const PURE;
     108             : };
     109             : 
     110             : using EdsResourcesCachePtr = std::unique_ptr<EdsResourcesCache>;
     111             : using EdsResourcesCacheOptRef = OptRef<EdsResourcesCache>;
     112             : 
     113             : } // namespace Config
     114             : } // namespace Envoy

Generated by: LCOV version 1.15