Line data Source code
1 : #include "source/extensions/config_subscription/grpc/grpc_collection_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_impl.h" 6 : #include "source/extensions/config_subscription/grpc/grpc_subscription_impl.h" 7 : #include "source/extensions/config_subscription/grpc/new_grpc_mux_impl.h" 8 : #include "source/extensions/config_subscription/grpc/xds_mux/grpc_mux_impl.h" 9 : 10 : namespace Envoy { 11 : namespace Config { 12 : 13 : SubscriptionPtr DeltaGrpcCollectionConfigSubscriptionFactory::create( 14 0 : ConfigSubscriptionFactory::SubscriptionData& data) { 15 0 : const envoy::config::core::v3::ApiConfigSource& api_config_source = 16 0 : data.config_.api_config_source(); 17 0 : CustomConfigValidatorsPtr custom_config_validators = std::make_unique<CustomConfigValidatorsImpl>( 18 0 : data.validation_visitor_, data.server_, api_config_source.config_validators()); 19 : 20 0 : JitteredExponentialBackOffStrategyPtr backoff_strategy = 21 0 : Utility::prepareJitteredExponentialBackOffStrategy( 22 0 : api_config_source, data.api_.randomGenerator(), SubscriptionFactory::RetryInitialDelayMs, 23 0 : SubscriptionFactory::RetryMaxDelayMs); 24 : 25 0 : GrpcMuxContext grpc_mux_context{ 26 0 : /*async_client_=*/Config::Utility::factoryForGrpcApiConfigSource( 27 0 : data.cm_.grpcAsyncClientManager(), api_config_source, data.scope_, true) 28 0 : ->createUncachedRawAsyncClient(), 29 0 : /*dispatcher_=*/data.dispatcher_, 30 0 : /*service_method_=*/deltaGrpcMethod(data.type_url_), 31 0 : /*local_info_=*/data.local_info_, 32 0 : /*rate_limit_settings_=*/Utility::parseRateLimitSettings(api_config_source), 33 0 : /*scope_=*/data.scope_, 34 0 : /*config_validators_=*/std::move(custom_config_validators), 35 0 : /*xds_resources_delegate_=*/{}, 36 0 : /*xds_config_tracker_=*/data.xds_config_tracker_, 37 0 : /*backoff_strategy_=*/std::move(backoff_strategy), 38 0 : /*target_xds_authority_=*/"", 39 0 : /*eds_resources_cache_=*/nullptr // No EDS resources cache needed from collections. 40 0 : }; 41 0 : return std::make_unique<GrpcCollectionSubscriptionImpl>( 42 0 : data.collection_locator_.value(), std::make_shared<Config::NewGrpcMuxImpl>(grpc_mux_context), 43 0 : data.callbacks_, data.resource_decoder_, data.stats_, data.dispatcher_, 44 0 : Utility::configSourceInitialFetchTimeout(data.config_), /*is_aggregated=*/false, 45 0 : data.options_); 46 0 : } 47 : 48 : SubscriptionPtr AggregatedGrpcCollectionConfigSubscriptionFactory::create( 49 0 : ConfigSubscriptionFactory::SubscriptionData& data) { 50 0 : return std::make_unique<GrpcCollectionSubscriptionImpl>( 51 0 : data.collection_locator_.value(), data.cm_.adsMux(), data.callbacks_, data.resource_decoder_, 52 0 : data.stats_, data.dispatcher_, Utility::configSourceInitialFetchTimeout(data.config_), 53 0 : /*is_aggregated=*/true, data.options_); 54 0 : } 55 : 56 : SubscriptionPtr 57 0 : AdsCollectionConfigSubscriptionFactory::create(ConfigSubscriptionFactory::SubscriptionData& data) { 58 : // All Envoy collections currently are xDS resource graph roots and require node context 59 : // parameters. 60 0 : return std::make_unique<GrpcCollectionSubscriptionImpl>( 61 0 : data.collection_locator_.value(), data.cm_.adsMux(), data.callbacks_, data.resource_decoder_, 62 0 : data.stats_, data.dispatcher_, Utility::configSourceInitialFetchTimeout(data.config_), true, 63 0 : data.options_); 64 0 : } 65 : 66 : REGISTER_FACTORY(DeltaGrpcCollectionConfigSubscriptionFactory, ConfigSubscriptionFactory); 67 : REGISTER_FACTORY(AggregatedGrpcCollectionConfigSubscriptionFactory, ConfigSubscriptionFactory); 68 : REGISTER_FACTORY(AdsCollectionConfigSubscriptionFactory, ConfigSubscriptionFactory); 69 : 70 : } // namespace Config 71 : } // namespace Envoy