// proto, which is always immutable. MutableConfigProviderCommonBase objects receive config proto
// updates via xDS subscriptions, resulting in new ConfigProvider::Config objects being instantiated
// with the corresponding change in behavior corresponding to updated config. ConfigProvider::Config
// processing pipeline, such that configuration stays consistent for the lifetime of the connection
// https://github.com/envoyproxy/data-plane-api/blob/main/xds_protocol.rst). The framework exposed
// by these classes simplifies creation of client xDS implementations following a shared ownership
// model, where according to the config source specification, a config subscription, config protos
// received over the subscription and the subsequent config "implementation" (i.e., data structures
// and associated business logic) are shared across ConfigProvider objects and Envoy worker threads.
// This approach enables linear memory scalability based primarily on the size of the configuration
// underlying subscription, the corresponding ConfigSubscriptionInstance functions must be called
* A subscription is intended to be co-owned by config providers with the same config source, it's
* Must be called by derived classes when the onConfigUpdateFailed() callback associated with the
// This slot holds a Config implementation in each thread, which is intended to be shared between
// ConfigProviderManagerImplBase are tightly coupled with the current shared ownership model; use
// TODO(AndresGuedez): Investigate whether a shared ownership model avoiding the <shared_ptr>s and
* Provides common subscription functionality required by ConfigProvider::ApiType::Delta DS APIs.
* Provides generic functionality required by the ConfigProvider::ApiType specific dynamic config
* All config processing is done on the main thread, so instantiation of *ConfigProvider* objects
* main thread _prior_ to destruction of the ConfigProviderManagerImplBase object from which they