LCOV - code coverage report
Current view: top level - source/extensions/config_subscription/grpc - grpc_subscription_factory.cc (source / functions) Hit Total Coverage
Test: coverage.dat Lines: 6 82 7.3 %
Date: 2024-01-05 06:35:25 Functions: 1 3 33.3 %

          Line data    Source code
       1             : #include "source/extensions/config_subscription/grpc/grpc_subscription_factory.h"
       2             : 
       3             : #include "source/common/config/custom_config_validators_impl.h"
       4             : #include "source/common/config/type_to_endpoint.h"
       5             : #include "source/extensions/config_subscription/grpc/grpc_mux_context.h"
       6             : #include "source/extensions/config_subscription/grpc/grpc_mux_impl.h"
       7             : #include "source/extensions/config_subscription/grpc/grpc_subscription_impl.h"
       8             : #include "source/extensions/config_subscription/grpc/new_grpc_mux_impl.h"
       9             : #include "source/extensions/config_subscription/grpc/xds_mux/grpc_mux_impl.h"
      10             : 
      11             : namespace Envoy {
      12             : namespace Config {
      13             : 
      14             : SubscriptionPtr
      15           0 : GrpcConfigSubscriptionFactory::create(ConfigSubscriptionFactory::SubscriptionData& data) {
      16           0 :   GrpcMuxSharedPtr mux;
      17           0 :   const envoy::config::core::v3::ApiConfigSource& api_config_source =
      18           0 :       data.config_.api_config_source();
      19           0 :   CustomConfigValidatorsPtr custom_config_validators = std::make_unique<CustomConfigValidatorsImpl>(
      20           0 :       data.validation_visitor_, data.server_, api_config_source.config_validators());
      21           0 :   const std::string control_plane_id = Utility::getGrpcControlPlane(api_config_source).value_or("");
      22             : 
      23           0 :   JitteredExponentialBackOffStrategyPtr backoff_strategy =
      24           0 :       Utility::prepareJitteredExponentialBackOffStrategy(
      25           0 :           api_config_source, data.api_.randomGenerator(), SubscriptionFactory::RetryInitialDelayMs,
      26           0 :           SubscriptionFactory::RetryMaxDelayMs);
      27             : 
      28           0 :   GrpcMuxContext grpc_mux_context{
      29           0 :       /*async_client_=*/Utility::factoryForGrpcApiConfigSource(data.cm_.grpcAsyncClientManager(),
      30           0 :                                                                api_config_source, data.scope_, true)
      31           0 :           ->createUncachedRawAsyncClient(),
      32           0 :       /*dispatcher_=*/data.dispatcher_,
      33           0 :       /*service_method_=*/sotwGrpcMethod(data.type_url_),
      34           0 :       /*local_info_=*/data.local_info_,
      35           0 :       /*rate_limit_settings_=*/Utility::parseRateLimitSettings(api_config_source),
      36           0 :       /*scope_=*/data.scope_,
      37           0 :       /*config_validators_=*/std::move(custom_config_validators),
      38           0 :       /*xds_resources_delegate_=*/data.xds_resources_delegate_,
      39           0 :       /*xds_config_tracker_=*/data.xds_config_tracker_,
      40           0 :       /*backoff_strategy_=*/std::move(backoff_strategy),
      41           0 :       /*target_xds_authority_=*/control_plane_id,
      42           0 :       /*eds_resources_cache_=*/nullptr // EDS cache is only used for ADS.
      43           0 :   };
      44             : 
      45           0 :   if (Runtime::runtimeFeatureEnabled("envoy.reloadable_features.unified_mux")) {
      46           0 :     mux = std::make_shared<Config::XdsMux::GrpcMuxSotw>(
      47           0 :         grpc_mux_context, api_config_source.set_node_on_first_message_only());
      48           0 :   } else {
      49           0 :     mux = std::make_shared<Config::GrpcMuxImpl>(grpc_mux_context,
      50           0 :                                                 api_config_source.set_node_on_first_message_only());
      51           0 :   }
      52           0 :   return std::make_unique<GrpcSubscriptionImpl>(
      53           0 :       std::move(mux), data.callbacks_, data.resource_decoder_, data.stats_, data.type_url_,
      54           0 :       data.dispatcher_, Utility::configSourceInitialFetchTimeout(data.config_),
      55           0 :       /*is_aggregated*/ false, data.options_);
      56           0 : }
      57             : 
      58             : SubscriptionPtr
      59           0 : DeltaGrpcConfigSubscriptionFactory::create(ConfigSubscriptionFactory::SubscriptionData& data) {
      60           0 :   GrpcMuxSharedPtr mux;
      61           0 :   const envoy::config::core::v3::ApiConfigSource& api_config_source =
      62           0 :       data.config_.api_config_source();
      63           0 :   CustomConfigValidatorsPtr custom_config_validators = std::make_unique<CustomConfigValidatorsImpl>(
      64           0 :       data.validation_visitor_, data.server_, api_config_source.config_validators());
      65             : 
      66           0 :   JitteredExponentialBackOffStrategyPtr backoff_strategy =
      67           0 :       Utility::prepareJitteredExponentialBackOffStrategy(
      68           0 :           api_config_source, data.api_.randomGenerator(), SubscriptionFactory::RetryInitialDelayMs,
      69           0 :           SubscriptionFactory::RetryMaxDelayMs);
      70             : 
      71           0 :   GrpcMuxContext grpc_mux_context{
      72           0 :       /*async_client_=*/Utility::factoryForGrpcApiConfigSource(data.cm_.grpcAsyncClientManager(),
      73           0 :                                                                api_config_source, data.scope_, true)
      74           0 :           ->createUncachedRawAsyncClient(),
      75           0 :       /*dispatcher_=*/data.dispatcher_,
      76           0 :       /*service_method_=*/deltaGrpcMethod(data.type_url_),
      77           0 :       /*local_info_=*/data.local_info_,
      78           0 :       /*rate_limit_settings_=*/Utility::parseRateLimitSettings(api_config_source),
      79           0 :       /*scope_=*/data.scope_,
      80           0 :       /*config_validators_=*/std::move(custom_config_validators),
      81           0 :       /*xds_resources_delegate_=*/{},
      82           0 :       /*xds_config_tracker_=*/data.xds_config_tracker_,
      83           0 :       /*backoff_strategy_=*/std::move(backoff_strategy),
      84           0 :       /*target_xds_authority_=*/"",
      85           0 :       /*eds_resources_cache_=*/nullptr // EDS cache is only used for ADS.
      86           0 :   };
      87             : 
      88           0 :   if (Runtime::runtimeFeatureEnabled("envoy.reloadable_features.unified_mux")) {
      89           0 :     mux = std::make_shared<Config::XdsMux::GrpcMuxDelta>(
      90           0 :         grpc_mux_context, api_config_source.set_node_on_first_message_only());
      91           0 :   } else {
      92           0 :     mux = std::make_shared<Config::NewGrpcMuxImpl>(grpc_mux_context);
      93           0 :   }
      94           0 :   return std::make_unique<GrpcSubscriptionImpl>(
      95           0 :       std::move(mux), data.callbacks_, data.resource_decoder_, data.stats_, data.type_url_,
      96           0 :       data.dispatcher_, Utility::configSourceInitialFetchTimeout(data.config_),
      97           0 :       /*is_aggregated*/ false, data.options_);
      98           0 : }
      99             : 
     100             : SubscriptionPtr
     101         135 : AdsConfigSubscriptionFactory::create(ConfigSubscriptionFactory::SubscriptionData& data) {
     102         135 :   return std::make_unique<GrpcSubscriptionImpl>(
     103         135 :       data.cm_.adsMux(), data.callbacks_, data.resource_decoder_, data.stats_, data.type_url_,
     104         135 :       data.dispatcher_, Utility::configSourceInitialFetchTimeout(data.config_), true,
     105         135 :       data.options_);
     106         135 : }
     107             : 
     108             : REGISTER_FACTORY(GrpcConfigSubscriptionFactory, ConfigSubscriptionFactory);
     109             : REGISTER_FACTORY(DeltaGrpcConfigSubscriptionFactory, ConfigSubscriptionFactory);
     110             : REGISTER_FACTORY(AdsConfigSubscriptionFactory, ConfigSubscriptionFactory);
     111             : 
     112             : } // namespace Config
     113             : } // namespace Envoy

Generated by: LCOV version 1.15