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

          Line data    Source code
       1             : #pragma once
       2             : 
       3             : #include "envoy/api/api.h"
       4             : #include "envoy/common/exception.h"
       5             : #include "envoy/common/optref.h"
       6             : #include "envoy/common/pure.h"
       7             : #include "envoy/config/subscription.h"
       8             : #include "envoy/config/typed_config.h"
       9             : #include "envoy/protobuf/message_validator.h"
      10             : #include "envoy/service/discovery/v3/discovery.pb.h"
      11             : 
      12             : #include "absl/container/flat_hash_set.h"
      13             : #include "absl/types/optional.h"
      14             : 
      15             : namespace Envoy {
      16             : namespace Config {
      17             : 
      18             : /*
      19             :  * An abstract class that represents an xDS source. The toKey() function provides a unique
      20             :  * identifier for the source for a group of xDS resources in a DiscoveryResponse.
      21             :  */
      22             : class XdsSourceId {
      23             : public:
      24           0 :   virtual ~XdsSourceId() = default;
      25             : 
      26             :   /**
      27             :    * Returns a unique string representation of the source. The string can be used as an identifier
      28             :    * for the source (e.g. as a key in a hash map).
      29             :    * @return string representation of the source.
      30             :    */
      31             :   virtual std::string toKey() const PURE;
      32             : };
      33             : 
      34             : /**
      35             :  * An interface for hooking into xDS resource fetch and update events.
      36             :  * Currently, this interface only supports the SotW (state-of-the-world) xDS protocol.
      37             :  *
      38             :  * Instances of this interface get invoked on the main Envoy thread. Thus, it is important for
      39             :  * implementations of this interface to not execute any blocking operations on the same thread.
      40             :  * Any blocking operations (e.g. flushing config to disk) should be handed off to a separate thread
      41             :  * so we don't block the main thread.
      42             :  */
      43             : class XdsResourcesDelegate {
      44             : public:
      45             :   virtual ~XdsResourcesDelegate() = default;
      46             : 
      47             :   /**
      48             :    * Returns a list of xDS resources for the given source and names. The implementation is not
      49             :    * required to return all (or any) of the requested resources, but the resources it does return
      50             :    * are required to be in the set of requested resources. An empty resource name set will return
      51             :    * all known resources from the given xDS source (i.e. the "wildcard").
      52             :    *
      53             :    * This function is intended to only be called on xDS fetch startup, and allows the
      54             :    * implementation to return a set of resources to be loaded and used by the Envoy instance
      55             :    * (e.g. persisted resources in local storage).
      56             :    *
      57             :    * @param source_id The xDS source for the requested resources.
      58             :    * @param resource_names The names of the requested resources.
      59             :    * @return A list of xDS resources for the given source.
      60             :    */
      61             :   virtual std::vector<envoy::service::discovery::v3::Resource>
      62             :   getResources(const XdsSourceId& source_id,
      63             :                const absl::flat_hash_set<std::string>& resource_names) const PURE;
      64             : 
      65             :   /**
      66             :    * Invoked when SotW xDS configuration updates have been received from an xDS authority, have been
      67             :    * applied on the Envoy instance, and are about to be ACK'ed.
      68             :    *
      69             :    * @param source_id The xDS source for the requested resources.
      70             :    * @param resources The resources for the given source received on the DiscoveryResponse.
      71             :    */
      72             :   virtual void onConfigUpdated(const XdsSourceId& source_id,
      73             :                                const std::vector<DecodedResourceRef>& resources) PURE;
      74             : 
      75             :   /**
      76             :    * Invoked when loading a resource obtained from the getResources() call resulted in a failure.
      77             :    * This would typically happen when there is a parsing or validation error on the xDS resource
      78             :    * protocol buffer.
      79             :    *
      80             :    * @param source_id The xDS source for the requested resource.
      81             :    * @param resource_name The name of the resource.
      82             :    * @param exception The exception that occurred, if any.
      83             :    */
      84             :   virtual void onResourceLoadFailed(const XdsSourceId& source_id, const std::string& resource_name,
      85             :                                     const absl::optional<EnvoyException>& exception) PURE;
      86             : };
      87             : 
      88             : using XdsResourcesDelegatePtr = std::unique_ptr<XdsResourcesDelegate>;
      89             : using XdsResourcesDelegateOptRef = OptRef<XdsResourcesDelegate>;
      90             : 
      91             : /**
      92             :  * A factory abstract class for creating instances of XdsResourcesDelegate.
      93             :  */
      94             : class XdsResourcesDelegateFactory : public Config::TypedFactory {
      95             : public:
      96             :   ~XdsResourcesDelegateFactory() override = default;
      97             : 
      98             :   /**
      99             :    * Creates a XdsResourcesDelegate using the given configuration.
     100             :    * @param config Configuration of the XdsResourcesDelegate to create.
     101             :    * @param validation_visitor Validates the configuration.
     102             :    * @param api The APIs that can be used by the delegate.
     103             :    * @param dispatcher The dispatcher for the thread.
     104             :    * @return The created XdsResourcesDelegate instance
     105             :    */
     106             :   virtual XdsResourcesDelegatePtr
     107             :   createXdsResourcesDelegate(const ProtobufWkt::Any& config,
     108             :                              ProtobufMessage::ValidationVisitor& validation_visitor, Api::Api& api,
     109             :                              Event::Dispatcher& dispatcher) PURE;
     110             : 
     111           0 :   std::string category() const override { return "envoy.xds_delegates"; }
     112             : };
     113             : 
     114             : } // namespace Config
     115             : } // namespace Envoy

Generated by: LCOV version 1.15