grpc 1.31.0.pre2 → 1.34.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of grpc might be problematic. Click here for more details.

Files changed (944) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +1030 -16151
  3. data/include/grpc/grpc.h +1 -7
  4. data/include/grpc/grpc_security.h +196 -186
  5. data/include/grpc/impl/codegen/README.md +22 -0
  6. data/include/grpc/impl/codegen/grpc_types.h +9 -7
  7. data/include/grpc/impl/codegen/port_platform.h +28 -56
  8. data/src/core/ext/filters/client_channel/backup_poller.cc +3 -2
  9. data/src/core/ext/filters/client_channel/client_channel.cc +243 -188
  10. data/src/core/ext/filters/client_channel/client_channel.h +1 -1
  11. data/src/core/ext/filters/client_channel/client_channel_channelz.h +0 -3
  12. data/src/core/ext/filters/client_channel/config_selector.cc +0 -4
  13. data/src/core/ext/filters/client_channel/config_selector.h +36 -8
  14. data/src/core/ext/filters/client_channel/health/health_check_client.cc +10 -2
  15. data/src/core/ext/filters/client_channel/health/health_check_client.h +2 -2
  16. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +3 -4
  17. data/src/core/ext/filters/client_channel/lb_policy.cc +5 -1
  18. data/src/core/ext/filters/client_channel/lb_policy.h +6 -4
  19. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +48 -35
  20. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +7 -5
  21. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +10 -7
  22. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +1 -1
  23. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +178 -162
  24. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +0 -13
  25. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +0 -3
  26. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +1 -37
  27. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +3 -1
  28. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +23 -17
  29. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +79 -30
  30. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +10 -9
  31. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +14 -34
  32. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +26 -15
  33. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +208 -130
  34. data/src/core/ext/filters/client_channel/lb_policy/xds/eds.cc +299 -328
  35. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +53 -17
  36. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +809 -0
  37. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +722 -0
  38. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +8 -1
  39. data/src/core/ext/filters/client_channel/resolver.cc +3 -1
  40. data/src/core/ext/filters/client_channel/resolver.h +4 -1
  41. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +2 -2
  42. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +1 -1
  43. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +3 -3
  44. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc +1 -1
  45. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +1 -1
  46. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +1 -1
  47. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +2 -2
  48. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +1 -1
  49. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +21 -1
  50. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +661 -58
  51. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +28 -0
  52. data/src/core/ext/filters/client_channel/resolver_registry.cc +4 -4
  53. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +18 -61
  54. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +4 -3
  55. data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +50 -48
  56. data/src/core/ext/filters/client_channel/resolving_lb_policy.h +7 -11
  57. data/src/core/ext/filters/client_channel/retry_throttle.h +1 -1
  58. data/src/core/ext/filters/client_channel/server_address.cc +120 -7
  59. data/src/core/ext/filters/client_channel/server_address.h +44 -21
  60. data/src/core/ext/filters/client_channel/service_config.cc +18 -13
  61. data/src/core/ext/filters/client_channel/service_config.h +8 -5
  62. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +2 -2
  63. data/src/core/ext/filters/client_channel/service_config_parser.cc +8 -6
  64. data/src/core/ext/filters/client_channel/service_config_parser.h +8 -5
  65. data/src/core/ext/filters/client_channel/subchannel.cc +82 -38
  66. data/src/core/ext/filters/client_channel/subchannel.h +18 -6
  67. data/src/core/ext/filters/client_channel/subchannel_interface.h +41 -5
  68. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +6 -2
  69. data/src/core/ext/filters/deadline/deadline_filter.cc +83 -77
  70. data/src/core/ext/filters/deadline/deadline_filter.h +7 -11
  71. data/src/core/ext/filters/http/client/http_client_filter.cc +1 -1
  72. data/src/core/ext/filters/http/server/http_server_filter.cc +3 -3
  73. data/src/core/ext/filters/max_age/max_age_filter.cc +3 -2
  74. data/src/core/ext/filters/message_size/message_size_filter.cc +2 -1
  75. data/src/core/ext/filters/message_size/message_size_filter.h +2 -1
  76. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +87 -31
  77. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +19 -2
  78. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +10 -35
  79. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +36 -28
  80. data/src/core/ext/transport/chttp2/server/chttp2_server.h +2 -1
  81. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +2 -2
  82. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +6 -6
  83. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +3 -2
  84. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +7 -7
  85. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +260 -311
  86. data/src/core/ext/transport/chttp2/transport/flow_control.cc +11 -3
  87. data/src/core/ext/transport/chttp2/transport/flow_control.h +12 -2
  88. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +2 -1
  89. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +2 -2
  90. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +12 -8
  91. data/src/core/ext/transport/chttp2/transport/internal.h +10 -2
  92. data/src/core/ext/transport/chttp2/transport/parsing.cc +19 -31
  93. data/src/core/ext/transport/chttp2/transport/writing.cc +7 -7
  94. data/src/core/ext/transport/inproc/inproc_transport.cc +12 -12
  95. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +244 -0
  96. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +766 -0
  97. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +74 -0
  98. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +226 -0
  99. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +458 -0
  100. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +1635 -0
  101. data/src/core/ext/upb-generated/envoy/{api/v2/cluster → config/cluster/v3}/filter.upb.c +8 -8
  102. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +69 -0
  103. data/src/core/ext/upb-generated/envoy/{api/v2/cluster → config/cluster/v3}/outlier_detection.upb.c +8 -8
  104. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +323 -0
  105. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +124 -0
  106. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +379 -0
  107. data/src/core/ext/upb-generated/envoy/{api/v2/core → config/core/v3}/backoff.upb.c +8 -8
  108. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +79 -0
  109. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +310 -0
  110. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +869 -0
  111. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +103 -0
  112. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +351 -0
  113. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +34 -0
  114. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +71 -0
  115. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +53 -0
  116. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +133 -0
  117. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +241 -0
  118. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +752 -0
  119. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +170 -0
  120. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +684 -0
  121. data/src/core/ext/upb-generated/envoy/{api/v2/core → config/core/v3}/http_uri.upb.c +8 -8
  122. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +80 -0
  123. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +176 -0
  124. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +645 -0
  125. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +28 -0
  126. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +58 -0
  127. data/src/core/ext/upb-generated/envoy/{api/v2/core → config/core/v3}/socket_option.upb.c +6 -6
  128. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +88 -0
  129. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +36 -0
  130. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +85 -0
  131. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +91 -0
  132. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +220 -0
  133. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +91 -0
  134. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +273 -0
  135. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +112 -0
  136. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +332 -0
  137. data/src/core/ext/upb-generated/envoy/config/listener/{v2 → v3}/api_listener.upb.c +8 -8
  138. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +65 -0
  139. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +128 -0
  140. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +467 -0
  141. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +155 -0
  142. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +539 -0
  143. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +41 -0
  144. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +94 -0
  145. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +178 -0
  146. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +616 -0
  147. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +63 -0
  148. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +204 -0
  149. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +900 -0
  150. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +3290 -0
  151. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +60 -0
  152. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +139 -0
  153. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +50 -0
  154. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +108 -0
  155. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +364 -0
  156. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +1336 -0
  157. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c +20 -0
  158. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h +34 -0
  159. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +110 -0
  160. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +387 -0
  161. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +76 -0
  162. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +214 -0
  163. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +147 -0
  164. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +570 -0
  165. data/src/core/ext/upb-generated/envoy/{api/v2 → service/cluster/v3}/cds.upb.c +5 -6
  166. data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.h +49 -0
  167. data/src/core/ext/upb-generated/envoy/service/discovery/{v2 → v3}/ads.upb.c +5 -4
  168. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +49 -0
  169. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +139 -0
  170. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +449 -0
  171. data/src/core/ext/upb-generated/envoy/{api/v2 → service/endpoint/v3}/eds.upb.c +5 -6
  172. data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.h +49 -0
  173. data/src/core/ext/upb-generated/envoy/{api/v2 → service/listener/v3}/lds.upb.c +5 -6
  174. data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.h +49 -0
  175. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +55 -0
  176. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +136 -0
  177. data/src/core/ext/upb-generated/envoy/{api/v2 → service/route/v3}/rds.upb.c +5 -6
  178. data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.h +49 -0
  179. data/src/core/ext/upb-generated/envoy/{api/v2 → service/route/v3}/srds.upb.c +5 -6
  180. data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.h +49 -0
  181. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +47 -0
  182. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +114 -0
  183. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +35 -0
  184. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +77 -0
  185. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +34 -0
  186. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +71 -0
  187. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +64 -0
  188. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +145 -0
  189. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +54 -0
  190. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +133 -0
  191. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +63 -0
  192. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +188 -0
  193. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +88 -0
  194. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +258 -0
  195. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +90 -0
  196. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +250 -0
  197. data/src/core/ext/upb-generated/envoy/type/{http.upb.c → v3/http.upb.c} +2 -2
  198. data/src/core/ext/upb-generated/envoy/type/{http.upb.h → v3/http.upb.h} +8 -8
  199. data/src/core/ext/upb-generated/envoy/type/{percent.upb.c → v3/percent.upb.c} +9 -8
  200. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +86 -0
  201. data/src/core/ext/upb-generated/envoy/type/{range.upb.c → v3/range.upb.c} +12 -11
  202. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +111 -0
  203. data/src/core/ext/upb-generated/envoy/type/{semantic_version.upb.c → v3/semantic_version.upb.c} +6 -5
  204. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +61 -0
  205. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +242 -0
  206. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +753 -0
  207. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +234 -0
  208. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +759 -0
  209. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +36 -36
  210. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +1 -1
  211. data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +31 -0
  212. data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +57 -0
  213. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +27 -0
  214. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +53 -0
  215. data/src/core/ext/upb-generated/udpa/core/v1/authority.upb.c +28 -0
  216. data/src/core/ext/upb-generated/udpa/core/v1/authority.upb.h +53 -0
  217. data/src/core/ext/upb-generated/udpa/core/v1/collection_entry.upb.c +52 -0
  218. data/src/core/ext/upb-generated/udpa/core/v1/collection_entry.upb.h +129 -0
  219. data/src/core/ext/upb-generated/udpa/core/v1/context_params.upb.c +42 -0
  220. data/src/core/ext/upb-generated/udpa/core/v1/context_params.upb.h +77 -0
  221. data/src/core/ext/upb-generated/udpa/core/v1/resource.upb.c +36 -0
  222. data/src/core/ext/upb-generated/udpa/core/v1/resource.upb.h +85 -0
  223. data/src/core/ext/upb-generated/udpa/core/v1/resource_locator.upb.c +54 -0
  224. data/src/core/ext/upb-generated/udpa/core/v1/resource_locator.upb.h +160 -0
  225. data/src/core/ext/upb-generated/udpa/core/v1/resource_name.upb.c +36 -0
  226. data/src/core/ext/upb-generated/udpa/core/v1/resource_name.upb.h +84 -0
  227. data/src/core/ext/upb-generated/validate/validate.upb.c +11 -11
  228. data/src/core/ext/upb-generated/validate/validate.upb.h +1 -1
  229. data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.c +38 -0
  230. data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.h +30 -0
  231. data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.c +41 -0
  232. data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.h +35 -0
  233. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +254 -0
  234. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.h +105 -0
  235. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.c +100 -0
  236. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.h +45 -0
  237. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +558 -0
  238. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +145 -0
  239. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.c +53 -0
  240. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.h +35 -0
  241. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.c +133 -0
  242. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.h +35 -0
  243. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.c +127 -0
  244. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.h +65 -0
  245. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.c +56 -0
  246. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.h +35 -0
  247. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +266 -0
  248. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.h +125 -0
  249. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +143 -0
  250. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.h +55 -0
  251. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.c +56 -0
  252. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.h +35 -0
  253. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.c +66 -0
  254. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.h +40 -0
  255. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.c +263 -0
  256. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.h +100 -0
  257. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +233 -0
  258. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.h +70 -0
  259. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.c +56 -0
  260. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.h +35 -0
  261. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +228 -0
  262. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.h +80 -0
  263. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.c +46 -0
  264. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.h +35 -0
  265. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.c +59 -0
  266. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.h +35 -0
  267. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +55 -0
  268. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.h +35 -0
  269. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.c +110 -0
  270. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.h +50 -0
  271. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +113 -0
  272. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.h +50 -0
  273. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.c +146 -0
  274. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.h +55 -0
  275. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.c +50 -0
  276. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.h +35 -0
  277. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +190 -0
  278. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.h +55 -0
  279. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.c +185 -0
  280. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.h +65 -0
  281. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +62 -0
  282. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.h +40 -0
  283. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +97 -0
  284. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.h +40 -0
  285. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +915 -0
  286. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +280 -0
  287. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.c +71 -0
  288. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.h +45 -0
  289. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.c +64 -0
  290. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.h +40 -0
  291. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +511 -0
  292. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h +115 -0
  293. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.c +48 -0
  294. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.h +30 -0
  295. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +166 -0
  296. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.h +55 -0
  297. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c +105 -0
  298. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.h +45 -0
  299. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +249 -0
  300. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.h +60 -0
  301. data/src/core/ext/upbdefs-generated/envoy/service/cluster/v3/cds.upbdefs.c +72 -0
  302. data/src/core/ext/upbdefs-generated/envoy/service/cluster/v3/cds.upbdefs.h +35 -0
  303. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.c +60 -0
  304. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.h +35 -0
  305. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +152 -0
  306. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.h +60 -0
  307. data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.c +83 -0
  308. data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.h +35 -0
  309. data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.c +82 -0
  310. data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.h +35 -0
  311. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.c +83 -0
  312. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.h +40 -0
  313. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.c +86 -0
  314. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.h +35 -0
  315. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/srds.upbdefs.c +74 -0
  316. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/srds.upbdefs.h +35 -0
  317. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.c +64 -0
  318. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.h +40 -0
  319. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.c +54 -0
  320. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.h +35 -0
  321. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.c +53 -0
  322. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.h +35 -0
  323. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +73 -0
  324. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.h +45 -0
  325. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.c +72 -0
  326. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.h +40 -0
  327. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.c +81 -0
  328. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.h +45 -0
  329. data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.c +92 -0
  330. data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.h +65 -0
  331. data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.c +95 -0
  332. data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.h +55 -0
  333. data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.c +34 -0
  334. data/src/core/ext/{upb-generated/gogoproto/gogo.upb.h → upbdefs-generated/envoy/type/v3/http.upbdefs.h} +10 -9
  335. data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.c +59 -0
  336. data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.h +40 -0
  337. data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.c +54 -0
  338. data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.h +45 -0
  339. data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.c +47 -0
  340. data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.h +35 -0
  341. data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.c +40 -0
  342. data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.h +30 -0
  343. data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.c +61 -0
  344. data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.h +45 -0
  345. data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.c +38 -0
  346. data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.h +35 -0
  347. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +386 -0
  348. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.h +165 -0
  349. data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.c +39 -0
  350. data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.h +35 -0
  351. data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.c +37 -0
  352. data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.h +35 -0
  353. data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.c +65 -0
  354. data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.h +50 -0
  355. data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.c +39 -0
  356. data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.h +35 -0
  357. data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.c +66 -0
  358. data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.h +75 -0
  359. data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.c +42 -0
  360. data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.h +35 -0
  361. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.c +70 -0
  362. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.h +45 -0
  363. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.c +56 -0
  364. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.h +35 -0
  365. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.c +33 -0
  366. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.h +30 -0
  367. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.c +49 -0
  368. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.h +35 -0
  369. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.c +43 -0
  370. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.h +35 -0
  371. data/src/core/ext/upbdefs-generated/udpa/core/v1/authority.upbdefs.c +42 -0
  372. data/src/core/ext/upbdefs-generated/udpa/core/v1/authority.upbdefs.h +35 -0
  373. data/src/core/ext/upbdefs-generated/udpa/core/v1/collection_entry.upbdefs.c +62 -0
  374. data/src/core/ext/upbdefs-generated/udpa/core/v1/collection_entry.upbdefs.h +40 -0
  375. data/src/core/ext/upbdefs-generated/udpa/core/v1/context_params.upbdefs.c +45 -0
  376. data/src/core/ext/upbdefs-generated/udpa/core/v1/context_params.upbdefs.h +40 -0
  377. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource.upbdefs.c +49 -0
  378. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource.upbdefs.h +35 -0
  379. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_locator.upbdefs.c +68 -0
  380. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_locator.upbdefs.h +40 -0
  381. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_name.upbdefs.c +51 -0
  382. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_name.upbdefs.h +35 -0
  383. data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.c +307 -0
  384. data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.h +145 -0
  385. data/src/core/ext/xds/certificate_provider_factory.h +61 -0
  386. data/src/core/ext/xds/certificate_provider_registry.cc +103 -0
  387. data/src/core/ext/xds/certificate_provider_registry.h +57 -0
  388. data/src/core/ext/xds/certificate_provider_store.cc +84 -0
  389. data/src/core/ext/xds/certificate_provider_store.h +107 -0
  390. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +119 -0
  391. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +72 -0
  392. data/src/core/ext/xds/google_mesh_ca_certificate_provider_factory.cc +265 -0
  393. data/src/core/ext/xds/google_mesh_ca_certificate_provider_factory.h +104 -0
  394. data/src/core/ext/xds/xds_api.cc +2119 -0
  395. data/src/core/ext/xds/xds_api.h +438 -0
  396. data/src/core/ext/{filters/client_channel/xds → xds}/xds_bootstrap.cc +208 -19
  397. data/src/core/ext/{filters/client_channel/xds → xds}/xds_bootstrap.h +31 -10
  398. data/src/core/ext/xds/xds_certificate_provider.cc +240 -0
  399. data/src/core/ext/xds/xds_certificate_provider.h +74 -0
  400. data/src/core/ext/{filters/client_channel/xds → xds}/xds_channel_args.h +9 -6
  401. data/src/core/ext/{filters/client_channel/xds → xds}/xds_client.cc +636 -847
  402. data/src/core/ext/{filters/client_channel/xds → xds}/xds_client.h +120 -98
  403. data/src/core/ext/{filters/client_channel/xds → xds}/xds_client_stats.cc +61 -18
  404. data/src/core/ext/{filters/client_channel/xds → xds}/xds_client_stats.h +38 -10
  405. data/src/core/lib/channel/channel_args.cc +2 -1
  406. data/src/core/lib/channel/channel_args.h +0 -1
  407. data/src/core/lib/channel/channel_trace.cc +4 -2
  408. data/src/core/lib/channel/channelz.cc +24 -60
  409. data/src/core/lib/channel/channelz.h +14 -22
  410. data/src/core/lib/channel/channelz_registry.cc +15 -12
  411. data/src/core/lib/channel/channelz_registry.h +3 -0
  412. data/src/core/lib/channel/handshaker.h +2 -2
  413. data/src/core/lib/compression/compression.cc +8 -4
  414. data/src/core/lib/compression/compression_internal.cc +10 -5
  415. data/src/core/lib/compression/compression_internal.h +2 -1
  416. data/src/core/lib/compression/stream_compression_identity.cc +1 -3
  417. data/src/core/lib/debug/stats_data.cc +1 -0
  418. data/src/core/lib/gpr/cpu_iphone.cc +10 -2
  419. data/src/core/lib/gpr/log_linux.cc +17 -3
  420. data/src/core/lib/gpr/log_posix.cc +13 -1
  421. data/src/core/lib/gpr/log_windows.cc +16 -4
  422. data/src/core/lib/gpr/murmur_hash.cc +1 -1
  423. data/src/core/lib/gpr/string.cc +1 -1
  424. data/src/core/lib/gpr/sync_posix.cc +2 -8
  425. data/src/core/lib/gpr/time_precise.cc +5 -2
  426. data/src/core/lib/gpr/time_precise.h +6 -2
  427. data/src/core/lib/gpr/tls.h +4 -0
  428. data/src/core/lib/gpr/tls_msvc.h +2 -0
  429. data/src/core/lib/gpr/tls_stdcpp.h +48 -0
  430. data/src/core/lib/gpr/useful.h +5 -4
  431. data/src/core/lib/gprpp/dual_ref_counted.h +331 -0
  432. data/src/core/lib/gprpp/examine_stack.cc +43 -0
  433. data/src/core/lib/gprpp/examine_stack.h +46 -0
  434. data/src/core/lib/gprpp/fork.cc +2 -2
  435. data/src/core/lib/gprpp/manual_constructor.h +1 -1
  436. data/src/core/lib/gprpp/orphanable.h +4 -8
  437. data/src/core/lib/gprpp/ref_counted.h +91 -68
  438. data/src/core/lib/gprpp/ref_counted_ptr.h +158 -7
  439. data/src/core/lib/gprpp/stat.h +38 -0
  440. data/src/core/lib/gprpp/stat_posix.cc +49 -0
  441. data/src/core/lib/gprpp/stat_windows.cc +48 -0
  442. data/src/core/lib/gprpp/thd.h +2 -2
  443. data/src/core/lib/gprpp/thd_posix.cc +36 -36
  444. data/src/core/lib/http/parser.cc +46 -25
  445. data/src/core/lib/iomgr/endpoint.cc +5 -1
  446. data/src/core/lib/iomgr/endpoint.h +7 -3
  447. data/src/core/lib/iomgr/endpoint_cfstream.cc +36 -11
  448. data/src/core/lib/iomgr/error.cc +2 -1
  449. data/src/core/lib/iomgr/ev_epollex_linux.cc +8 -4
  450. data/src/core/lib/iomgr/ev_posix.cc +0 -2
  451. data/src/core/lib/iomgr/exec_ctx.cc +1 -1
  452. data/src/core/lib/iomgr/exec_ctx.h +10 -8
  453. data/src/core/lib/iomgr/executor/mpmcqueue.h +5 -5
  454. data/src/core/lib/iomgr/executor/threadpool.h +3 -3
  455. data/src/core/lib/iomgr/iomgr.cc +0 -10
  456. data/src/core/lib/iomgr/iomgr.h +0 -10
  457. data/src/core/{ext/filters/client_channel → lib/iomgr}/parse_address.cc +85 -7
  458. data/src/core/{ext/filters/client_channel → lib/iomgr}/parse_address.h +23 -3
  459. data/src/core/lib/iomgr/poller/eventmanager_libuv.cc +2 -1
  460. data/src/core/lib/iomgr/python_util.h +3 -3
  461. data/src/core/lib/iomgr/resolve_address_posix.cc +1 -5
  462. data/src/core/lib/iomgr/sockaddr_utils.cc +2 -1
  463. data/src/core/lib/iomgr/sockaddr_utils.h +2 -1
  464. data/src/core/lib/iomgr/tcp_custom.cc +32 -16
  465. data/src/core/lib/iomgr/tcp_posix.cc +34 -15
  466. data/src/core/lib/iomgr/tcp_windows.cc +26 -10
  467. data/src/core/lib/iomgr/timer_custom.cc +2 -2
  468. data/src/core/lib/iomgr/unix_sockets_posix.cc +27 -15
  469. data/src/core/lib/iomgr/unix_sockets_posix.h +5 -0
  470. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +7 -0
  471. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +2 -2
  472. data/src/core/lib/json/json.h +2 -2
  473. data/src/core/lib/json/json_reader.cc +8 -4
  474. data/src/core/lib/json/json_util.cc +58 -0
  475. data/src/core/lib/json/json_util.h +204 -0
  476. data/src/core/lib/json/json_writer.cc +2 -1
  477. data/src/core/lib/security/authorization/authorization_engine.cc +177 -0
  478. data/src/core/lib/security/authorization/authorization_engine.h +84 -0
  479. data/src/core/lib/security/authorization/evaluate_args.cc +153 -0
  480. data/src/core/lib/security/authorization/evaluate_args.h +59 -0
  481. data/src/core/lib/security/authorization/mock_cel/activation.h +57 -0
  482. data/src/core/lib/security/authorization/mock_cel/cel_expr_builder_factory.h +44 -0
  483. data/src/core/lib/security/authorization/mock_cel/cel_expression.h +69 -0
  484. data/src/core/lib/security/authorization/mock_cel/cel_value.h +97 -0
  485. data/src/core/lib/security/authorization/mock_cel/evaluator_core.h +67 -0
  486. data/src/core/lib/security/authorization/mock_cel/flat_expr_builder.h +57 -0
  487. data/src/core/lib/security/context/security_context.h +3 -1
  488. data/src/core/lib/security/credentials/credentials.cc +1 -1
  489. data/src/core/lib/security/credentials/credentials.h +3 -3
  490. data/src/core/lib/security/credentials/external/aws_request_signer.cc +208 -0
  491. data/src/core/lib/security/credentials/external/aws_request_signer.h +73 -0
  492. data/src/core/lib/security/credentials/external/external_account_credentials.cc +311 -0
  493. data/src/core/lib/security/credentials/external/external_account_credentials.h +118 -0
  494. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +136 -0
  495. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +49 -0
  496. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +211 -0
  497. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +59 -0
  498. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +56 -38
  499. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +51 -0
  500. data/src/core/lib/security/credentials/jwt/json_token.cc +5 -2
  501. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +4 -3
  502. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +5 -1
  503. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +2 -2
  504. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +351 -0
  505. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +218 -0
  506. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +78 -0
  507. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +74 -0
  508. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +77 -149
  509. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +58 -187
  510. data/src/core/lib/security/credentials/tls/tls_credentials.cc +16 -12
  511. data/src/core/lib/security/credentials/tls/tls_credentials.h +2 -2
  512. data/src/core/lib/security/credentials/xds/xds_credentials.cc +45 -0
  513. data/src/core/lib/security/credentials/xds/xds_credentials.h +51 -0
  514. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +9 -14
  515. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +88 -0
  516. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +70 -0
  517. data/src/core/lib/security/security_connector/load_system_roots.h +4 -0
  518. data/src/core/lib/security/security_connector/load_system_roots_linux.h +2 -0
  519. data/src/core/lib/security/security_connector/local/local_security_connector.cc +2 -2
  520. data/src/core/lib/security/security_connector/security_connector.cc +1 -1
  521. data/src/core/lib/security/security_connector/security_connector.h +4 -2
  522. data/src/core/lib/security/security_connector/ssl_utils.h +9 -2
  523. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +293 -275
  524. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +106 -61
  525. data/src/core/lib/security/transport/secure_endpoint.cc +7 -1
  526. data/src/core/lib/security/transport/security_handshaker.cc +1 -1
  527. data/src/core/lib/security/transport/server_auth_filter.cc +2 -1
  528. data/src/core/lib/security/util/json_util.h +1 -0
  529. data/src/core/lib/slice/slice.cc +7 -4
  530. data/src/core/lib/slice/slice_buffer.cc +2 -1
  531. data/src/core/lib/slice/slice_intern.cc +2 -2
  532. data/src/core/lib/surface/call.cc +21 -20
  533. data/src/core/lib/surface/call.h +2 -1
  534. data/src/core/lib/surface/channel.cc +37 -51
  535. data/src/core/lib/surface/channel.h +18 -3
  536. data/src/core/lib/surface/completion_queue.cc +17 -278
  537. data/src/core/lib/surface/completion_queue.h +0 -8
  538. data/src/core/lib/surface/init.cc +27 -12
  539. data/src/core/lib/surface/server.cc +1069 -1245
  540. data/src/core/lib/surface/server.h +363 -87
  541. data/src/core/lib/surface/validate_metadata.h +3 -0
  542. data/src/core/lib/surface/version.cc +2 -2
  543. data/src/core/lib/transport/authority_override.cc +38 -0
  544. data/src/core/lib/transport/authority_override.h +34 -0
  545. data/src/core/lib/transport/bdp_estimator.cc +1 -1
  546. data/src/core/lib/transport/bdp_estimator.h +2 -1
  547. data/src/core/lib/transport/byte_stream.h +3 -3
  548. data/src/core/lib/transport/connectivity_state.cc +18 -13
  549. data/src/core/lib/transport/connectivity_state.h +22 -10
  550. data/src/core/lib/transport/error_utils.cc +13 -0
  551. data/src/core/lib/transport/error_utils.h +6 -0
  552. data/src/core/lib/transport/metadata.cc +11 -1
  553. data/src/core/lib/transport/metadata.h +2 -2
  554. data/src/core/lib/transport/static_metadata.cc +295 -276
  555. data/src/core/lib/transport/static_metadata.h +80 -73
  556. data/src/core/lib/transport/timeout_encoding.cc +4 -4
  557. data/src/core/lib/transport/transport.cc +5 -3
  558. data/src/core/lib/transport/transport.h +8 -1
  559. data/src/core/lib/uri/uri_parser.cc +23 -21
  560. data/src/core/lib/uri/uri_parser.h +3 -1
  561. data/src/core/plugin_registry/grpc_plugin_registry.cc +35 -20
  562. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +26 -3
  563. data/src/core/tsi/fake_transport_security.cc +1 -0
  564. data/src/core/tsi/local_transport_security.cc +5 -1
  565. data/src/core/tsi/local_transport_security.h +6 -7
  566. data/src/core/tsi/ssl/session_cache/ssl_session.h +3 -0
  567. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +4 -1
  568. data/src/core/tsi/ssl_transport_security.cc +16 -9
  569. data/src/core/tsi/ssl_transport_security.h +3 -0
  570. data/src/core/tsi/transport_security.cc +4 -2
  571. data/src/ruby/bin/math_services_pb.rb +4 -4
  572. data/src/ruby/ext/grpc/extconf.rb +1 -1
  573. data/src/ruby/ext/grpc/rb_channel_credentials.c +9 -0
  574. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +26 -18
  575. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +43 -31
  576. data/src/ruby/lib/grpc/generic/client_stub.rb +1 -1
  577. data/src/ruby/lib/grpc/version.rb +1 -1
  578. data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +2 -2
  579. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +5 -0
  580. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +28 -12
  581. data/src/ruby/spec/channel_credentials_spec.rb +10 -0
  582. data/src/ruby/spec/generic/active_call_spec.rb +19 -8
  583. data/src/ruby/spec/pb/codegen/grpc/testing/same_package_service_name.proto +27 -0
  584. data/src/ruby/spec/pb/codegen/grpc/testing/same_ruby_package_service_name.proto +29 -0
  585. data/src/ruby/spec/pb/codegen/package_option_spec.rb +20 -0
  586. data/src/ruby/spec/user_agent_spec.rb +74 -0
  587. data/third_party/abseil-cpp/absl/algorithm/container.h +1764 -0
  588. data/third_party/abseil-cpp/absl/base/attributes.h +99 -38
  589. data/third_party/abseil-cpp/absl/base/call_once.h +1 -1
  590. data/third_party/abseil-cpp/absl/base/casts.h +9 -6
  591. data/third_party/abseil-cpp/absl/base/config.h +60 -17
  592. data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +428 -335
  593. data/third_party/abseil-cpp/absl/base/internal/bits.h +17 -16
  594. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +166 -0
  595. data/third_party/abseil-cpp/absl/base/internal/dynamic_annotations.h +398 -0
  596. data/third_party/abseil-cpp/absl/base/internal/exponential_biased.cc +93 -0
  597. data/third_party/abseil-cpp/absl/base/internal/exponential_biased.h +130 -0
  598. data/third_party/abseil-cpp/absl/base/internal/invoke.h +4 -4
  599. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +620 -0
  600. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.h +126 -0
  601. data/third_party/abseil-cpp/absl/base/internal/low_level_scheduling.h +29 -1
  602. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +2 -2
  603. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +7 -5
  604. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +25 -38
  605. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +19 -25
  606. data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +8 -0
  607. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +28 -5
  608. data/third_party/abseil-cpp/absl/base/internal/sysinfo.h +8 -0
  609. data/third_party/abseil-cpp/absl/base/internal/tsan_mutex_interface.h +3 -1
  610. data/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +2 -2
  611. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +3 -3
  612. data/third_party/abseil-cpp/absl/base/macros.h +36 -109
  613. data/third_party/abseil-cpp/absl/base/optimization.h +61 -1
  614. data/third_party/abseil-cpp/absl/base/options.h +31 -4
  615. data/third_party/abseil-cpp/absl/base/policy_checks.h +1 -1
  616. data/third_party/abseil-cpp/absl/base/thread_annotations.h +94 -39
  617. data/third_party/abseil-cpp/absl/container/fixed_array.h +532 -0
  618. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +504 -0
  619. data/third_party/abseil-cpp/absl/container/inlined_vector.h +33 -36
  620. data/third_party/abseil-cpp/absl/container/internal/common.h +206 -0
  621. data/third_party/abseil-cpp/absl/container/internal/compressed_tuple.h +33 -8
  622. data/third_party/abseil-cpp/absl/container/internal/container_memory.h +460 -0
  623. data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +161 -0
  624. data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +208 -0
  625. data/third_party/abseil-cpp/absl/container/internal/hashtable_debug_hooks.h +85 -0
  626. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +270 -0
  627. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +321 -0
  628. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler_force_weak_definition.cc +30 -0
  629. data/third_party/abseil-cpp/absl/container/internal/have_sse.h +50 -0
  630. data/third_party/abseil-cpp/absl/container/internal/layout.h +743 -0
  631. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +48 -0
  632. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +1903 -0
  633. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +139 -0
  634. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.h +32 -0
  635. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +1945 -0
  636. data/third_party/abseil-cpp/absl/debugging/internal/demangle.h +71 -0
  637. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +382 -0
  638. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +134 -0
  639. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +196 -0
  640. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +134 -0
  641. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +89 -0
  642. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +108 -0
  643. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +248 -0
  644. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_unimplemented-inl.inc +24 -0
  645. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +93 -0
  646. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +346 -0
  647. data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +149 -0
  648. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +173 -0
  649. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.h +158 -0
  650. data/third_party/abseil-cpp/absl/debugging/stacktrace.cc +140 -0
  651. data/third_party/abseil-cpp/absl/debugging/stacktrace.h +231 -0
  652. data/third_party/abseil-cpp/absl/debugging/symbolize.cc +36 -0
  653. data/third_party/abseil-cpp/absl/debugging/symbolize.h +99 -0
  654. data/third_party/abseil-cpp/absl/debugging/symbolize_darwin.inc +101 -0
  655. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +1560 -0
  656. data/third_party/abseil-cpp/absl/debugging/symbolize_unimplemented.inc +40 -0
  657. data/third_party/abseil-cpp/absl/debugging/symbolize_win32.inc +81 -0
  658. data/third_party/abseil-cpp/absl/functional/bind_front.h +184 -0
  659. data/third_party/abseil-cpp/absl/functional/function_ref.h +139 -0
  660. data/third_party/abseil-cpp/absl/functional/internal/front_binder.h +95 -0
  661. data/third_party/abseil-cpp/absl/functional/internal/function_ref.h +106 -0
  662. data/third_party/abseil-cpp/absl/hash/hash.h +325 -0
  663. data/third_party/abseil-cpp/absl/hash/internal/city.cc +346 -0
  664. data/third_party/abseil-cpp/absl/hash/internal/city.h +96 -0
  665. data/third_party/abseil-cpp/absl/hash/internal/hash.cc +55 -0
  666. data/third_party/abseil-cpp/absl/hash/internal/hash.h +996 -0
  667. data/third_party/abseil-cpp/absl/memory/memory.h +4 -0
  668. data/third_party/abseil-cpp/absl/meta/type_traits.h +2 -8
  669. data/third_party/abseil-cpp/absl/numeric/int128.cc +13 -27
  670. data/third_party/abseil-cpp/absl/numeric/int128.h +16 -15
  671. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +51 -0
  672. data/third_party/abseil-cpp/absl/status/status.cc +445 -0
  673. data/third_party/abseil-cpp/absl/status/status.h +817 -0
  674. data/third_party/abseil-cpp/absl/status/status_payload_printer.cc +38 -0
  675. data/third_party/abseil-cpp/absl/status/status_payload_printer.h +51 -0
  676. data/third_party/abseil-cpp/absl/strings/charconv.cc +2 -2
  677. data/third_party/abseil-cpp/absl/strings/cord.cc +1998 -0
  678. data/third_party/abseil-cpp/absl/strings/cord.h +1276 -0
  679. data/third_party/abseil-cpp/absl/strings/escaping.cc +9 -9
  680. data/third_party/abseil-cpp/absl/strings/internal/char_map.h +1 -1
  681. data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.cc +1 -1
  682. data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.h +2 -2
  683. data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +2 -2
  684. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +173 -0
  685. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +222 -136
  686. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +136 -64
  687. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +1 -1
  688. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +14 -21
  689. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +7 -14
  690. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +31 -7
  691. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +147 -135
  692. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +999 -87
  693. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.h +3 -3
  694. data/third_party/abseil-cpp/absl/strings/internal/str_format/output.h +4 -12
  695. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +8 -6
  696. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +13 -11
  697. data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +2 -2
  698. data/third_party/abseil-cpp/absl/strings/str_cat.cc +4 -4
  699. data/third_party/abseil-cpp/absl/strings/str_cat.h +1 -1
  700. data/third_party/abseil-cpp/absl/strings/str_format.h +289 -13
  701. data/third_party/abseil-cpp/absl/strings/str_split.cc +2 -2
  702. data/third_party/abseil-cpp/absl/strings/str_split.h +1 -0
  703. data/third_party/abseil-cpp/absl/strings/string_view.h +26 -19
  704. data/third_party/abseil-cpp/absl/strings/substitute.cc +5 -5
  705. data/third_party/abseil-cpp/absl/strings/substitute.h +32 -29
  706. data/third_party/abseil-cpp/absl/synchronization/barrier.cc +52 -0
  707. data/third_party/abseil-cpp/absl/synchronization/barrier.h +79 -0
  708. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.cc +57 -0
  709. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.h +99 -0
  710. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +140 -0
  711. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.h +60 -0
  712. data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +697 -0
  713. data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.h +141 -0
  714. data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +155 -0
  715. data/third_party/abseil-cpp/absl/synchronization/internal/mutex_nonprod.inc +249 -0
  716. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +106 -0
  717. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +115 -0
  718. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +492 -0
  719. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +159 -0
  720. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +2739 -0
  721. data/third_party/abseil-cpp/absl/synchronization/mutex.h +1065 -0
  722. data/third_party/abseil-cpp/absl/synchronization/notification.cc +78 -0
  723. data/third_party/abseil-cpp/absl/synchronization/notification.h +123 -0
  724. data/third_party/abseil-cpp/absl/time/civil_time.cc +9 -9
  725. data/third_party/abseil-cpp/absl/time/clock.cc +3 -3
  726. data/third_party/abseil-cpp/absl/time/duration.cc +90 -59
  727. data/third_party/abseil-cpp/absl/time/format.cc +43 -36
  728. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +26 -16
  729. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +4 -2
  730. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/zone_info_source.h +1 -1
  731. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +136 -29
  732. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.cc +13 -21
  733. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.h +1 -1
  734. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +136 -129
  735. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.h +4 -5
  736. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +8 -7
  737. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +6 -6
  738. data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +2 -1
  739. data/third_party/abseil-cpp/absl/time/time.h +15 -16
  740. data/third_party/abseil-cpp/absl/types/bad_variant_access.cc +64 -0
  741. data/third_party/abseil-cpp/absl/types/bad_variant_access.h +82 -0
  742. data/third_party/abseil-cpp/absl/types/internal/variant.h +1646 -0
  743. data/third_party/abseil-cpp/absl/types/optional.h +9 -9
  744. data/third_party/abseil-cpp/absl/types/span.h +49 -36
  745. data/third_party/abseil-cpp/absl/types/variant.h +861 -0
  746. data/third_party/abseil-cpp/absl/utility/utility.h +2 -2
  747. data/third_party/address_sorting/include/address_sorting/address_sorting.h +2 -0
  748. data/third_party/boringssl-with-bazel/err_data.c +479 -467
  749. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +0 -6
  750. data/third_party/boringssl-with-bazel/src/crypto/bio/bio.c +2 -0
  751. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +9 -43
  752. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa_asn1.c +55 -4
  753. data/third_party/boringssl-with-bazel/src/crypto/dsa/internal.h +34 -0
  754. data/third_party/boringssl-with-bazel/src/crypto/evp/evp.c +4 -0
  755. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +16 -0
  756. data/third_party/boringssl-with-bazel/src/crypto/evp/p_dsa_asn1.c +6 -2
  757. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +173 -35
  758. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digest.c +2 -0
  759. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h +4 -0
  760. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +30 -10
  761. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +56 -22
  762. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +8 -2
  763. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +543 -0
  764. data/third_party/boringssl-with-bazel/src/crypto/hpke/internal.h +237 -0
  765. data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +118 -49
  766. data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +267 -95
  767. data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +210 -34
  768. data/third_party/boringssl-with-bazel/src/crypto/trust_token/voprf.c +766 -0
  769. data/third_party/boringssl-with-bazel/src/crypto/x509/a_strex.c +3 -3
  770. data/third_party/boringssl-with-bazel/src/crypto/x509/algorithm.c +6 -4
  771. data/third_party/boringssl-with-bazel/src/crypto/x509/t_crl.c +3 -3
  772. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c +1 -1
  773. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +7 -2
  774. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_ext.c +21 -18
  775. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_obj.c +1 -1
  776. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +24 -3
  777. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +3 -3
  778. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_txt.c +67 -67
  779. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_v3.c +3 -3
  780. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +29 -35
  781. data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +13 -2
  782. data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +9 -8
  783. data/third_party/boringssl-with-bazel/src/crypto/x509/x_all.c +10 -10
  784. data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +2 -2
  785. data/third_party/boringssl-with-bazel/src/crypto/x509/x_name.c +28 -40
  786. data/third_party/boringssl-with-bazel/src/crypto/x509/x_sig.c +20 -0
  787. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +3 -1
  788. data/third_party/boringssl-with-bazel/src/crypto/x509v3/ext_dat.h +1 -4
  789. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_data.c +5 -3
  790. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +14 -14
  791. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_conf.c +7 -3
  792. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_genn.c +2 -2
  793. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_info.c +1 -1
  794. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +1 -1
  795. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +55 -8
  796. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +1 -1
  797. data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +24 -0
  798. data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +54 -0
  799. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +0 -1
  800. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +6 -3
  801. data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +4 -0
  802. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +6 -0
  803. data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +1 -1
  804. data/third_party/boringssl-with-bazel/src/include/openssl/des.h +6 -0
  805. data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +12 -0
  806. data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +9 -0
  807. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +4 -1
  808. data/third_party/boringssl-with-bazel/src/include/openssl/opensslconf.h +3 -0
  809. data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +202 -134
  810. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +103 -10
  811. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +5 -2
  812. data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +42 -14
  813. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +199 -78
  814. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +482 -432
  815. data/third_party/boringssl-with-bazel/src/ssl/bio_ssl.cc +18 -5
  816. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +35 -0
  817. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +18 -18
  818. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +2 -3
  819. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +1 -1
  820. data/third_party/boringssl-with-bazel/src/ssl/internal.h +49 -10
  821. data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +42 -1
  822. data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +3 -6
  823. data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +8 -9
  824. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +77 -0
  825. data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +11 -14
  826. data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +250 -20
  827. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +1 -2
  828. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +57 -19
  829. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +140 -41
  830. data/third_party/boringssl-with-bazel/src/ssl/tls_record.cc +5 -3
  831. data/third_party/upb/upb/decode.c +64 -15
  832. data/third_party/upb/upb/def.c +2169 -0
  833. data/third_party/upb/upb/def.h +330 -0
  834. data/third_party/upb/upb/def.hpp +525 -0
  835. data/third_party/upb/upb/encode.c +2 -2
  836. data/third_party/upb/upb/msg.h +2 -2
  837. data/third_party/upb/upb/port_def.inc +1 -1
  838. data/third_party/upb/upb/reflection.c +391 -0
  839. data/third_party/upb/upb/reflection.h +168 -0
  840. data/third_party/upb/upb/table.c +0 -11
  841. data/third_party/upb/upb/table.int.h +0 -9
  842. data/third_party/upb/upb/text_encode.c +398 -0
  843. data/third_party/upb/upb/text_encode.h +35 -0
  844. data/third_party/upb/upb/upb.c +16 -14
  845. data/third_party/upb/upb/upb.h +26 -0
  846. data/third_party/upb/upb/upb.hpp +2 -0
  847. metadata +489 -161
  848. data/src/core/ext/filters/client_channel/lb_policy/xds/lrs.cc +0 -528
  849. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_routing.cc +0 -1143
  850. data/src/core/ext/filters/client_channel/xds/xds_api.cc +0 -2110
  851. data/src/core/ext/filters/client_channel/xds/xds_api.h +0 -345
  852. data/src/core/ext/filters/client_channel/xds/xds_channel.h +0 -46
  853. data/src/core/ext/filters/client_channel/xds/xds_channel_secure.cc +0 -106
  854. data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.c +0 -21
  855. data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.h +0 -34
  856. data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.c +0 -114
  857. data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.h +0 -429
  858. data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.c +0 -72
  859. data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.h +0 -198
  860. data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.c +0 -105
  861. data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.h +0 -388
  862. data/src/core/ext/upb-generated/envoy/api/v2/cds.upb.h +0 -52
  863. data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.c +0 -403
  864. data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.h +0 -1453
  865. data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.c +0 -74
  866. data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.h +0 -226
  867. data/src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.h +0 -69
  868. data/src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.h +0 -323
  869. data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.c +0 -112
  870. data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.h +0 -334
  871. data/src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.h +0 -79
  872. data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c +0 -313
  873. data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.h +0 -891
  874. data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.c +0 -96
  875. data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.h +0 -328
  876. data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.c +0 -34
  877. data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.h +0 -71
  878. data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.c +0 -197
  879. data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.h +0 -649
  880. data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.c +0 -172
  881. data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.h +0 -693
  882. data/src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.h +0 -80
  883. data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.c +0 -152
  884. data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.h +0 -536
  885. data/src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.h +0 -88
  886. data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c +0 -129
  887. data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.h +0 -386
  888. data/src/core/ext/upb-generated/envoy/api/v2/eds.upb.h +0 -52
  889. data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.c +0 -92
  890. data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.h +0 -224
  891. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.c +0 -18
  892. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.h +0 -32
  893. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.c +0 -91
  894. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.h +0 -273
  895. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.c +0 -112
  896. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.h +0 -332
  897. data/src/core/ext/upb-generated/envoy/api/v2/lds.upb.h +0 -52
  898. data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.c +0 -109
  899. data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.h +0 -415
  900. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.c +0 -18
  901. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.h +0 -32
  902. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.c +0 -145
  903. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.h +0 -538
  904. data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.c +0 -43
  905. data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.h +0 -111
  906. data/src/core/ext/upb-generated/envoy/api/v2/rds.upb.h +0 -52
  907. data/src/core/ext/upb-generated/envoy/api/v2/route.upb.c +0 -63
  908. data/src/core/ext/upb-generated/envoy/api/v2/route.upb.h +0 -204
  909. data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.c +0 -18
  910. data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.h +0 -32
  911. data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.c +0 -815
  912. data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.h +0 -2984
  913. data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.c +0 -59
  914. data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.h +0 -135
  915. data/src/core/ext/upb-generated/envoy/api/v2/srds.upb.h +0 -52
  916. data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.c +0 -228
  917. data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.h +0 -732
  918. data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.c +0 -316
  919. data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.h +0 -1167
  920. data/src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.h +0 -65
  921. data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.c +0 -51
  922. data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.h +0 -125
  923. data/src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.h +0 -49
  924. data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.c +0 -54
  925. data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h +0 -136
  926. data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.c +0 -63
  927. data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.h +0 -145
  928. data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.c +0 -53
  929. data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.h +0 -133
  930. data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.c +0 -88
  931. data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.h +0 -258
  932. data/src/core/ext/upb-generated/envoy/type/percent.upb.h +0 -86
  933. data/src/core/ext/upb-generated/envoy/type/range.upb.h +0 -111
  934. data/src/core/ext/upb-generated/envoy/type/semantic_version.upb.h +0 -61
  935. data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.c +0 -89
  936. data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.h +0 -250
  937. data/src/core/ext/upb-generated/gogoproto/gogo.upb.c +0 -17
  938. data/src/core/lib/security/transport/target_authority_table.cc +0 -75
  939. data/src/core/lib/security/transport/target_authority_table.h +0 -40
  940. data/src/core/lib/slice/slice_hash_table.h +0 -199
  941. data/src/core/lib/slice/slice_weak_hash_table.h +0 -102
  942. data/third_party/abseil-cpp/absl/base/dynamic_annotations.cc +0 -129
  943. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pku.c +0 -110
  944. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_sxnet.c +0 -274
@@ -0,0 +1,22 @@
1
+ # Welcome to `include/grpc/impl/codegen`
2
+
3
+ ## Why is this directory here?
4
+
5
+ This directory exists so that generated C++ code can include selected files upon
6
+ which it depends without having to depend on the entire gRPC C++ library. This
7
+ directory thus exists to support `include/grpcpp/impl/codegen`. This constraint
8
+ is particularly relevant for users of bazel, particularly if they use the
9
+ multi-lingual `proto_library` target type. Generated code that uses this target
10
+ only depends on the gRPC C++ targets associated with these header files, not the
11
+ entire gRPC C++ codebase since that would make the build time of these types of
12
+ targets excessively large (particularly when they are not even C++ specific).
13
+
14
+ ## What should user code do?
15
+
16
+ User code should *not* include anything from this directory. Only generated code
17
+ and gRPC library code should include contents from this directory. C++ user code
18
+ should instead include contents from the main `grpcpp` directory or its
19
+ accessible subcomponents like `grpcpp/support`. It is possible that we may
20
+ remove this directory altogether if the motivations for its existence are no
21
+ longer strong enough (e.g., if the gRPC C++ library no longer has a need for an
22
+ `impl/codegen` directory of its own).
@@ -202,8 +202,15 @@ typedef struct {
202
202
  #define GRPC_ARG_HTTP2_MAX_FRAME_SIZE "grpc.http2.max_frame_size"
203
203
  /** Should BDP probing be performed? */
204
204
  #define GRPC_ARG_HTTP2_BDP_PROBE "grpc.http2.bdp_probe"
205
- /** Minimum time between sending successive ping frames without receiving any
206
- data/header frame, Int valued, milliseconds. */
205
+ /** (DEPRECATED) Does not have any effect.
206
+ Earlier, this arg configured the minimum time between successive ping frames
207
+ without receiving any data/header frame, Int valued, milliseconds. This put
208
+ unnecessary constraints on the configuration of keepalive pings,
209
+ requiring users to set this channel arg along with
210
+ GRPC_ARG_KEEPALIVE_TIME_MS. This arg also limited the activity of the other
211
+ source of pings in gRPC Core - BDP pings, but BDP pings are only sent when
212
+ there is receive-side data activity, making this arg unuseful for BDP pings
213
+ too. */
207
214
  #define GRPC_ARG_HTTP2_MIN_SENT_PING_INTERVAL_WITHOUT_DATA_MS \
208
215
  "grpc.http2.min_time_between_pings_ms"
209
216
  /** Minimum allowed time between a server receiving successive ping frames
@@ -355,11 +362,6 @@ typedef struct {
355
362
  over to the next priority. Default value is 10 seconds. */
356
363
  #define GRPC_ARG_PRIORITY_FAILOVER_TIMEOUT_MS \
357
364
  "grpc.priority_failover_timeout_ms"
358
- /* Timeout in milliseconds to wait for a resource to be returned from
359
- * the xds server before assuming that it does not exist.
360
- * The default is 15 seconds. */
361
- #define GRPC_ARG_XDS_RESOURCE_DOES_NOT_EXIST_TIMEOUT_MS \
362
- "grpc.xds_resource_does_not_exist_timeout_ms"
363
365
  /** If non-zero, grpc server's cronet compression workaround will be enabled */
364
366
  #define GRPC_ARG_WORKAROUND_CRONET_COMPRESSION \
365
367
  "grpc.workaround.cronet_compression"
@@ -31,8 +31,13 @@
31
31
  * Defines GPR_ABSEIL_SYNC to use synchronization features from Abseil
32
32
  */
33
33
  #ifndef GPR_ABSEIL_SYNC
34
- /* #define GPR_ABSEIL_SYNC 1 */
34
+ #if defined(__APPLE__)
35
+ // This is disabled on Apple platforms because macos/grpc_basictests_c_cpp
36
+ // fails with this. https://github.com/grpc/grpc/issues/23661
37
+ #else
38
+ #define GPR_ABSEIL_SYNC 1
35
39
  #endif
40
+ #endif // GPR_ABSEIL_SYNC
36
41
 
37
42
  /* Get windows.h included everywhere (we need it) */
38
43
  #if defined(_WIN64) || defined(WIN64) || defined(_WIN32) || defined(WIN32)
@@ -95,16 +100,16 @@
95
100
  #define GPR_WINDOWS_TMPFILE
96
101
  #define GPR_WINDOWS_LOG
97
102
  #define GPR_WINDOWS_CRASH_HANDLER 1
103
+ #define GPR_WINDOWS_STAT
98
104
  #define GPR_WINDOWS_STRING
99
105
  #define GPR_WINDOWS_TIME
100
106
  #endif
101
107
  #ifdef __GNUC__
102
108
  #define GPR_GCC_ATOMIC 1
103
- #define GPR_GCC_TLS 1
104
109
  #else
105
110
  #define GPR_WINDOWS_ATOMIC 1
106
- #define GPR_MSVC_TLS 1
107
111
  #endif
112
+ #define GPR_STDCPP_TLS 1
108
113
  #elif defined(ANDROID) || defined(__ANDROID__)
109
114
  #define GPR_PLATFORM_STRING "android"
110
115
  #define GPR_ANDROID 1
@@ -119,9 +124,10 @@
119
124
  #endif /* _LP64 */
120
125
  #define GPR_CPU_POSIX 1
121
126
  #define GPR_GCC_SYNC 1
122
- #define GPR_GCC_TLS 1
127
+ #define GPR_STDCPP_TLS 1
123
128
  #define GPR_POSIX_ENV 1
124
129
  #define GPR_POSIX_TMPFILE 1
130
+ #define GPR_POSIX_STAT 1
125
131
  #define GPR_ANDROID_LOG 1
126
132
  #define GPR_POSIX_STRING 1
127
133
  #define GPR_POSIX_SUBPROCESS 1
@@ -144,12 +150,13 @@
144
150
  #include <features.h>
145
151
  #define GPR_CPU_LINUX 1
146
152
  #define GPR_GCC_ATOMIC 1
147
- #define GPR_GCC_TLS 1
153
+ #define GPR_STDCPP_TLS 1
148
154
  #define GPR_LINUX 1
149
155
  #define GPR_LINUX_LOG
150
156
  #define GPR_SUPPORT_CHANNELS_FROM_FD 1
151
157
  #define GPR_LINUX_ENV 1
152
158
  #define GPR_POSIX_TMPFILE 1
159
+ #define GPR_POSIX_STAT 1
153
160
  #define GPR_POSIX_STRING 1
154
161
  #define GPR_POSIX_SUBPROCESS 1
155
162
  #define GPR_POSIX_SYNC 1
@@ -197,45 +204,28 @@
197
204
  #if TARGET_OS_IPHONE
198
205
  #define GPR_PLATFORM_STRING "ios"
199
206
  #define GPR_CPU_IPHONE 1
200
- #define GPR_PTHREAD_TLS 1
201
207
  #define GRPC_CFSTREAM 1
202
208
  /* the c-ares resolver isn't safe to enable on iOS */
203
209
  #define GRPC_ARES 0
204
210
  #else /* TARGET_OS_IPHONE */
205
211
  #define GPR_PLATFORM_STRING "osx"
206
- #ifdef __MAC_OS_X_VERSION_MIN_REQUIRED
207
- #if __MAC_OS_X_VERSION_MIN_REQUIRED < __MAC_10_7
208
- #define GPR_CPU_IPHONE 1
209
- #define GPR_PTHREAD_TLS 1
210
- #else /* __MAC_OS_X_VERSION_MIN_REQUIRED < __MAC_10_7 */
211
212
  #define GPR_CPU_POSIX 1
212
- /* TODO(vjpai): there is a reported issue in bazel build for Mac where __thread
213
- in a header is currently not working (bazelbuild/bazel#4341). Remove
214
- the following conditional and use GPR_GCC_TLS when that is fixed */
215
- #ifndef GRPC_BAZEL_BUILD
216
- #define GPR_GCC_TLS 1
217
- #else /* GRPC_BAZEL_BUILD */
218
- #define GPR_PTHREAD_TLS 1
219
- #endif /* GRPC_BAZEL_BUILD */
220
- #define GPR_APPLE_PTHREAD_NAME 1
213
+ #define GPR_POSIX_CRASH_HANDLER 1
221
214
  #endif
222
- #else /* __MAC_OS_X_VERSION_MIN_REQUIRED */
223
- #define GPR_CPU_POSIX 1
224
- /* TODO(vjpai): Remove the following conditional and use only GPR_GCC_TLS
225
- when bazelbuild/bazel#4341 is fixed */
226
- #ifndef GRPC_BAZEL_BUILD
227
- #define GPR_GCC_TLS 1
228
- #else /* GRPC_BAZEL_BUILD */
229
- #define GPR_PTHREAD_TLS 1
230
- #endif /* GRPC_BAZEL_BUILD */
215
+ #ifdef __has_feature
216
+ #if __has_feature(cxx_thread_local)
217
+ #define GPR_STDCPP_TLS 1
231
218
  #endif
232
- #define GPR_POSIX_CRASH_HANDLER 1
219
+ #endif
220
+ #ifndef GPR_STDCPP_TLS
221
+ #define GPR_PTHREAD_TLS 1
233
222
  #endif
234
223
  #define GPR_APPLE 1
235
224
  #define GPR_GCC_ATOMIC 1
236
225
  #define GPR_POSIX_LOG 1
237
226
  #define GPR_POSIX_ENV 1
238
227
  #define GPR_POSIX_TMPFILE 1
228
+ #define GPR_POSIX_STAT 1
239
229
  #define GPR_POSIX_STRING 1
240
230
  #define GPR_POSIX_SUBPROCESS 1
241
231
  #define GPR_POSIX_SYNC 1
@@ -262,6 +252,7 @@
262
252
  #define GPR_POSIX_LOG 1
263
253
  #define GPR_POSIX_ENV 1
264
254
  #define GPR_POSIX_TMPFILE 1
255
+ #define GPR_POSIX_STAT 1
265
256
  #define GPR_POSIX_STRING 1
266
257
  #define GPR_POSIX_SUBPROCESS 1
267
258
  #define GPR_POSIX_SYNC 1
@@ -286,6 +277,7 @@
286
277
  #define GPR_POSIX_LOG 1
287
278
  #define GPR_POSIX_ENV 1
288
279
  #define GPR_POSIX_TMPFILE 1
280
+ #define GPR_POSIX_STAT 1
289
281
  #define GPR_POSIX_STRING 1
290
282
  #define GPR_POSIX_SUBPROCESS 1
291
283
  #define GPR_POSIX_SYNC 1
@@ -307,6 +299,7 @@
307
299
  #define GPR_POSIX_LOG 1
308
300
  #define GPR_POSIX_ENV 1
309
301
  #define GPR_POSIX_TMPFILE 1
302
+ #define GPR_POSIX_STAT 1
310
303
  #define GPR_POSIX_STRING 1
311
304
  #define GPR_POSIX_SUBPROCESS 1
312
305
  #define GPR_POSIX_SYNC 1
@@ -330,6 +323,7 @@
330
323
  #define GPR_POSIX_LOG 1
331
324
  #define GPR_POSIX_ENV 1
332
325
  #define GPR_POSIX_TMPFILE 1
326
+ #define GPR_POSIX_STAT 1
333
327
  #define GPR_POSIX_STRING 1
334
328
  #define GPR_POSIX_SUBPROCESS 1
335
329
  #define GPR_POSIX_SYNC 1
@@ -359,6 +353,7 @@
359
353
  #define GPR_POSIX_LOG 1
360
354
  #define GPR_POSIX_ENV 1
361
355
  #define GPR_POSIX_TMPFILE 1
356
+ #define GPR_POSIX_STAT 1
362
357
  #define GPR_POSIX_STRING 1
363
358
  #define GPR_POSIX_SUBPROCESS 1
364
359
  #define GPR_POSIX_SYNC 1
@@ -385,6 +380,7 @@
385
380
  #define GPR_POSIX_SYNC 1
386
381
  #define GPR_POSIX_ENV 1
387
382
  #define GPR_POSIX_TMPFILE 1
383
+ #define GPR_POSIX_STAT 1
388
384
  #define GPR_POSIX_SUBPROCESS 1
389
385
  #define GPR_POSIX_SYNC 1
390
386
  #define GPR_POSIX_STRING 1
@@ -408,30 +404,6 @@
408
404
  #endif
409
405
  #endif
410
406
 
411
- /*
412
- * There are platforms for which TLS should not be used even though the
413
- * compiler makes it seem like it's supported (Android NDK < r12b for example).
414
- * This is primarily because of linker problems and toolchain misconfiguration:
415
- * TLS isn't supported until NDK r12b per
416
- * https://developer.android.com/ndk/downloads/revision_history.html
417
- * TLS also does not work with Android NDK if GCC is being used as the compiler
418
- * instead of Clang.
419
- * Since NDK r16, `__NDK_MAJOR__` and `__NDK_MINOR__` are defined in
420
- * <android/ndk-version.h>. For NDK < r16, users should define these macros,
421
- * e.g. `-D__NDK_MAJOR__=11 -D__NKD_MINOR__=0` for NDK r11. */
422
- #if defined(__ANDROID__) && defined(GPR_GCC_TLS)
423
- #if __has_include(<android/ndk-version.h>)
424
- #include <android/ndk-version.h>
425
- #endif /* __has_include(<android/ndk-version.h>) */
426
- #if (defined(__clang__) && defined(__NDK_MAJOR__) && defined(__NDK_MINOR__) && \
427
- ((__NDK_MAJOR__ < 12) || \
428
- ((__NDK_MAJOR__ == 12) && (__NDK_MINOR__ < 1)))) || \
429
- (defined(__GNUC__) && !defined(__clang__))
430
- #undef GPR_GCC_TLS
431
- #define GPR_PTHREAD_TLS 1
432
- #endif
433
- #endif /*defined(__ANDROID__) && defined(GPR_GCC_TLS) */
434
-
435
407
  #if defined(__has_include)
436
408
  #if __has_include(<atomic>)
437
409
  #define GRPC_HAS_CXX11_ATOMIC
@@ -520,9 +492,9 @@ typedef unsigned __int64 uint64_t;
520
492
  #endif
521
493
 
522
494
  #if defined(GPR_MSVC_TLS) + defined(GPR_GCC_TLS) + defined(GPR_PTHREAD_TLS) + \
523
- defined(GPR_CUSTOM_TLS) != \
495
+ defined(GPR_STDCPP_TLS) + defined(GPR_CUSTOM_TLS) != \
524
496
  1
525
- #error Must define exactly one of GPR_MSVC_TLS, GPR_GCC_TLS, GPR_PTHREAD_TLS, GPR_CUSTOM_TLS
497
+ #error Must define exactly one of GPR_MSVC_TLS, GPR_GCC_TLS, GPR_PTHREAD_TLS, GPR_STDCPP_TLS, GPR_CUSTOM_TLS
526
498
  #endif
527
499
 
528
500
  /* maximum alignment needed for any type on this platform, rounded up to a
@@ -106,6 +106,7 @@ static void g_poller_unref() {
106
106
  grpc_schedule_on_exec_ctx));
107
107
  gpr_mu_unlock(p->pollset_mu);
108
108
  grpc_timer_cancel(&p->polling_timer);
109
+ backup_poller_shutdown_unref(p);
109
110
  } else {
110
111
  gpr_mu_unlock(&g_poller_mu);
111
112
  }
@@ -143,8 +144,8 @@ static void g_poller_init_locked() {
143
144
  g_poller->shutting_down = false;
144
145
  grpc_pollset_init(g_poller->pollset, &g_poller->pollset_mu);
145
146
  gpr_ref_init(&g_poller->refs, 0);
146
- // one for timer cancellation, one for pollset shutdown
147
- gpr_ref_init(&g_poller->shutdown_refs, 2);
147
+ // one for timer cancellation, one for pollset shutdown, one for g_poller
148
+ gpr_ref_init(&g_poller->shutdown_refs, 3);
148
149
  GRPC_CLOSURE_INIT(&g_poller->run_poller_closure, run_poller, g_poller,
149
150
  grpc_schedule_on_exec_ctx);
150
151
  grpc_timer_init(&g_poller->polling_timer,
@@ -28,6 +28,8 @@
28
28
 
29
29
  #include <set>
30
30
 
31
+ #include "absl/strings/numbers.h"
32
+ #include "absl/strings/str_cat.h"
31
33
  #include "absl/strings/string_view.h"
32
34
 
33
35
  #include <grpc/support/alloc.h>
@@ -207,14 +209,15 @@ class ChannelData {
207
209
  grpc_closure* on_complete,
208
210
  grpc_closure* watcher_timer_init);
209
211
 
210
- ~ExternalConnectivityWatcher();
212
+ ~ExternalConnectivityWatcher() override;
211
213
 
212
214
  // Removes the watcher from the external_watchers_ map.
213
215
  static void RemoveWatcherFromExternalWatchersMap(ChannelData* chand,
214
216
  grpc_closure* on_complete,
215
217
  bool cancel);
216
218
 
217
- void Notify(grpc_connectivity_state state) override;
219
+ void Notify(grpc_connectivity_state state,
220
+ const absl::Status& /* status */) override;
218
221
 
219
222
  void Cancel();
220
223
 
@@ -238,17 +241,15 @@ class ChannelData {
238
241
  public:
239
242
  explicit ChannelConfigHelper(ChannelData* chand) : chand_(chand) {}
240
243
 
241
- ApplyServiceConfigResult ApplyServiceConfig(
244
+ ChooseServiceConfigResult ChooseServiceConfig(
242
245
  const Resolver::Result& result) override;
243
246
 
244
- void ApplyConfigSelector(
245
- bool service_config_changed,
246
- RefCountedPtr<ConfigSelector> config_selector) override;
247
+ void StartUsingServiceConfigForCalls() override;
247
248
 
248
249
  void ResolverTransientFailure(grpc_error* error) override;
249
250
 
250
251
  private:
251
- static void ProcessLbPolicy(
252
+ static void ChooseLbPolicy(
252
253
  const Resolver::Result& resolver_result,
253
254
  const internal::ClientChannelGlobalParsedConfig* parsed_service_config,
254
255
  RefCountedPtr<LoadBalancingPolicy::Config>* lb_policy_config);
@@ -260,12 +261,17 @@ class ChannelData {
260
261
  ~ChannelData();
261
262
 
262
263
  void UpdateStateAndPickerLocked(
263
- grpc_connectivity_state state, const char* reason,
264
+ grpc_connectivity_state state, const absl::Status& status,
265
+ const char* reason,
264
266
  std::unique_ptr<LoadBalancingPolicy::SubchannelPicker> picker);
265
267
 
266
- void UpdateServiceConfigInDataPlaneLocked(
267
- bool service_config_changed,
268
- RefCountedPtr<ConfigSelector> config_selector);
268
+ void UpdateServiceConfigInControlPlaneLocked(
269
+ RefCountedPtr<ServiceConfig> service_config,
270
+ RefCountedPtr<ConfigSelector> config_selector,
271
+ const internal::ClientChannelGlobalParsedConfig* parsed_service_config,
272
+ const char* lb_policy_name);
273
+
274
+ void UpdateServiceConfigInDataPlaneLocked();
269
275
 
270
276
  void CreateResolvingLoadBalancingPolicyLocked();
271
277
 
@@ -316,7 +322,6 @@ class ChannelData {
316
322
  grpc_core::UniquePtr<char> health_check_service_name_;
317
323
  RefCountedPtr<ServiceConfig> saved_service_config_;
318
324
  RefCountedPtr<ConfigSelector> saved_config_selector_;
319
- bool received_first_resolver_result_ = false;
320
325
  // The number of SubchannelWrapper instances referencing a given Subchannel.
321
326
  std::map<Subchannel*, int> subchannel_refcount_map_;
322
327
  // The set of SubchannelWrappers that currently exist.
@@ -328,6 +333,7 @@ class ChannelData {
328
333
  // applied in the data plane mutex when the picker is updated.
329
334
  std::map<RefCountedPtr<SubchannelWrapper>, RefCountedPtr<ConnectedSubchannel>>
330
335
  pending_subchannel_updates_;
336
+ int keepalive_time_ = -1;
331
337
 
332
338
  //
333
339
  // Fields accessed from both data plane mutex and control plane
@@ -888,7 +894,10 @@ class ChannelData::SubchannelWrapper : public SubchannelInterface {
888
894
  public:
889
895
  SubchannelWrapper(ChannelData* chand, Subchannel* subchannel,
890
896
  grpc_core::UniquePtr<char> health_check_service_name)
891
- : SubchannelInterface(&grpc_client_channel_routing_trace),
897
+ : SubchannelInterface(
898
+ GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_routing_trace)
899
+ ? "SubchannelWrapper"
900
+ : nullptr),
892
901
  chand_(chand),
893
902
  subchannel_(subchannel),
894
903
  health_check_service_name_(std::move(health_check_service_name)) {
@@ -910,7 +919,7 @@ class ChannelData::SubchannelWrapper : public SubchannelInterface {
910
919
  chand_->subchannel_wrappers_.insert(this);
911
920
  }
912
921
 
913
- ~SubchannelWrapper() {
922
+ ~SubchannelWrapper() override {
914
923
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_routing_trace)) {
915
924
  gpr_log(GPR_INFO,
916
925
  "chand=%p: destroying subchannel wrapper %p for subchannel %p",
@@ -973,6 +982,10 @@ class ChannelData::SubchannelWrapper : public SubchannelInterface {
973
982
  return subchannel_->channel_args();
974
983
  }
975
984
 
985
+ void ThrottleKeepaliveTime(int new_keepalive_time) {
986
+ subchannel_->ThrottleKeepaliveTime(new_keepalive_time);
987
+ }
988
+
976
989
  void UpdateHealthCheckServiceName(
977
990
  grpc_core::UniquePtr<char> health_check_service_name) {
978
991
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_routing_trace)) {
@@ -1049,7 +1062,7 @@ class ChannelData::SubchannelWrapper : public SubchannelInterface {
1049
1062
  parent_(std::move(parent)),
1050
1063
  last_seen_state_(initial_state) {}
1051
1064
 
1052
- ~WatcherWrapper() {
1065
+ ~WatcherWrapper() override {
1053
1066
  auto* parent = parent_.release(); // ref owned by lambda
1054
1067
  parent->chand_->work_serializer_->Run(
1055
1068
  [parent]() { parent->Unref(DEBUG_LOCATION, "WatcherWrapper"); },
@@ -1099,6 +1112,32 @@ class ChannelData::SubchannelWrapper : public SubchannelInterface {
1099
1112
  watcher_.get());
1100
1113
  }
1101
1114
  ConnectivityStateChange state_change = PopConnectivityStateChange();
1115
+ absl::optional<absl::Cord> keepalive_throttling =
1116
+ state_change.status.GetPayload(grpc_core::kKeepaliveThrottlingKey);
1117
+ if (keepalive_throttling.has_value()) {
1118
+ int new_keepalive_time = -1;
1119
+ if (absl::SimpleAtoi(std::string(keepalive_throttling.value()),
1120
+ &new_keepalive_time)) {
1121
+ if (new_keepalive_time > parent_->chand_->keepalive_time_) {
1122
+ parent_->chand_->keepalive_time_ = new_keepalive_time;
1123
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_routing_trace)) {
1124
+ gpr_log(GPR_INFO, "chand=%p: throttling keepalive time to %d",
1125
+ parent_->chand_, parent_->chand_->keepalive_time_);
1126
+ }
1127
+ // Propagate the new keepalive time to all subchannels. This is so
1128
+ // that new transports created by any subchannel (and not just the
1129
+ // subchannel that received the GOAWAY), use the new keepalive time.
1130
+ for (auto* subchannel_wrapper :
1131
+ parent_->chand_->subchannel_wrappers_) {
1132
+ subchannel_wrapper->ThrottleKeepaliveTime(new_keepalive_time);
1133
+ }
1134
+ }
1135
+ } else {
1136
+ gpr_log(GPR_ERROR, "chand=%p: Illegal keepalive throttling value %s",
1137
+ parent_->chand_,
1138
+ std::string(keepalive_throttling.value()).c_str());
1139
+ }
1140
+ }
1102
1141
  // Ignore update if the parent WatcherWrapper has been replaced
1103
1142
  // since this callback was scheduled.
1104
1143
  if (watcher_ != nullptr) {
@@ -1212,7 +1251,7 @@ void ChannelData::ExternalConnectivityWatcher::
1212
1251
  }
1213
1252
 
1214
1253
  void ChannelData::ExternalConnectivityWatcher::Notify(
1215
- grpc_connectivity_state state) {
1254
+ grpc_connectivity_state state, const absl::Status& /* status */) {
1216
1255
  bool done = false;
1217
1256
  if (!done_.CompareExchangeStrong(&done, true, MemoryOrder::RELAXED,
1218
1257
  MemoryOrder::RELAXED)) {
@@ -1327,7 +1366,8 @@ class ChannelData::ClientChannelControlHelper
1327
1366
  }
1328
1367
 
1329
1368
  RefCountedPtr<SubchannelInterface> CreateSubchannel(
1330
- const grpc_channel_args& args) override {
1369
+ ServerAddress address, const grpc_channel_args& args) override {
1370
+ // Determine health check service name.
1331
1371
  bool inhibit_health_checking = grpc_channel_arg_get_bool(
1332
1372
  grpc_channel_args_find(&args, GRPC_ARG_INHIBIT_HEALTH_CHECKING), false);
1333
1373
  grpc_core::UniquePtr<char> health_check_service_name;
@@ -1335,36 +1375,54 @@ class ChannelData::ClientChannelControlHelper
1335
1375
  health_check_service_name.reset(
1336
1376
  gpr_strdup(chand_->health_check_service_name_.get()));
1337
1377
  }
1378
+ // Remove channel args that should not affect subchannel uniqueness.
1338
1379
  static const char* args_to_remove[] = {
1339
1380
  GRPC_ARG_INHIBIT_HEALTH_CHECKING,
1340
1381
  GRPC_ARG_CHANNELZ_CHANNEL_NODE,
1341
1382
  };
1342
- grpc_arg arg = SubchannelPoolInterface::CreateChannelArg(
1343
- chand_->subchannel_pool_.get());
1383
+ // Add channel args needed for the subchannel.
1384
+ absl::InlinedVector<grpc_arg, 3> args_to_add = {
1385
+ Subchannel::CreateSubchannelAddressArg(&address.address()),
1386
+ SubchannelPoolInterface::CreateChannelArg(
1387
+ chand_->subchannel_pool_.get()),
1388
+ };
1389
+ if (address.args() != nullptr) {
1390
+ for (size_t j = 0; j < address.args()->num_args; ++j) {
1391
+ args_to_add.emplace_back(address.args()->args[j]);
1392
+ }
1393
+ }
1344
1394
  grpc_channel_args* new_args = grpc_channel_args_copy_and_add_and_remove(
1345
- &args, args_to_remove, GPR_ARRAY_SIZE(args_to_remove), &arg, 1);
1395
+ &args, args_to_remove, GPR_ARRAY_SIZE(args_to_remove),
1396
+ args_to_add.data(), args_to_add.size());
1397
+ gpr_free(args_to_add[0].value.string);
1398
+ // Create subchannel.
1346
1399
  Subchannel* subchannel =
1347
1400
  chand_->client_channel_factory_->CreateSubchannel(new_args);
1348
1401
  grpc_channel_args_destroy(new_args);
1349
1402
  if (subchannel == nullptr) return nullptr;
1403
+ // Make sure the subchannel has updated keepalive time.
1404
+ subchannel->ThrottleKeepaliveTime(chand_->keepalive_time_);
1405
+ // Create and return wrapper for the subchannel.
1350
1406
  return MakeRefCounted<SubchannelWrapper>(
1351
1407
  chand_, subchannel, std::move(health_check_service_name));
1352
1408
  }
1353
1409
 
1354
1410
  void UpdateState(
1355
- grpc_connectivity_state state,
1411
+ grpc_connectivity_state state, const absl::Status& status,
1356
1412
  std::unique_ptr<LoadBalancingPolicy::SubchannelPicker> picker) override {
1357
1413
  grpc_error* disconnect_error = chand_->disconnect_error();
1358
1414
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_routing_trace)) {
1359
1415
  const char* extra = disconnect_error == GRPC_ERROR_NONE
1360
1416
  ? ""
1361
1417
  : " (ignoring -- channel shutting down)";
1362
- gpr_log(GPR_INFO, "chand=%p: update: state=%s picker=%p%s", chand_,
1363
- ConnectivityStateName(state), picker.get(), extra);
1418
+ gpr_log(GPR_INFO, "chand=%p: update: state=%s status=(%s) picker=%p%s",
1419
+ chand_, ConnectivityStateName(state), status.ToString().c_str(),
1420
+ picker.get(), extra);
1364
1421
  }
1365
1422
  // Do update only if not shutting down.
1366
1423
  if (disconnect_error == GRPC_ERROR_NONE) {
1367
- chand_->UpdateStateAndPickerLocked(state, "helper", std::move(picker));
1424
+ chand_->UpdateStateAndPickerLocked(state, status, "helper",
1425
+ std::move(picker));
1368
1426
  }
1369
1427
  }
1370
1428
 
@@ -1395,19 +1453,19 @@ class ChannelData::ClientChannelControlHelper
1395
1453
  // ChannelData::ChannelConfigHelper
1396
1454
  //
1397
1455
 
1398
- // Synchronous callback from ResolvingLoadBalancingPolicy to process a
1399
- // resolver result update.
1400
- ChannelData::ChannelConfigHelper::ApplyServiceConfigResult
1401
- ChannelData::ChannelConfigHelper::ApplyServiceConfig(
1456
+ ChannelData::ChannelConfigHelper::ChooseServiceConfigResult
1457
+ ChannelData::ChannelConfigHelper::ChooseServiceConfig(
1402
1458
  const Resolver::Result& result) {
1403
- ApplyServiceConfigResult service_config_result;
1459
+ ChooseServiceConfigResult service_config_result;
1404
1460
  RefCountedPtr<ServiceConfig> service_config;
1405
- // If resolver did not return a service config or returned an invalid service
1406
- // config, we need a fallback service config.
1461
+ RefCountedPtr<ConfigSelector> config_selector;
1407
1462
  if (result.service_config_error != GRPC_ERROR_NONE) {
1408
- // If the service config was invalid, then fallback to the saved service
1409
- // config. If there is no saved config either, use the default service
1410
- // config.
1463
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_routing_trace)) {
1464
+ gpr_log(GPR_INFO, "chand=%p: resolver returned service config error: %s",
1465
+ chand_, grpc_error_string(result.service_config_error));
1466
+ }
1467
+ // If the service config was invalid, then fallback to the
1468
+ // previously returned service config.
1411
1469
  if (chand_->saved_service_config_ != nullptr) {
1412
1470
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_routing_trace)) {
1413
1471
  gpr_log(GPR_INFO,
@@ -1416,99 +1474,60 @@ ChannelData::ChannelConfigHelper::ApplyServiceConfig(
1416
1474
  chand_);
1417
1475
  }
1418
1476
  service_config = chand_->saved_service_config_;
1419
- } else if (chand_->default_service_config_ != nullptr) {
1420
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_routing_trace)) {
1421
- gpr_log(GPR_INFO,
1422
- "chand=%p: resolver returned invalid service config. Using "
1423
- "default service config provided by client API.",
1424
- chand_);
1425
- }
1426
- service_config = chand_->default_service_config_;
1477
+ config_selector = chand_->saved_config_selector_;
1478
+ } else {
1479
+ // No previously returned config, so put the channel into
1480
+ // TRANSIENT_FAILURE.
1481
+ service_config_result.no_valid_service_config = true;
1482
+ return service_config_result;
1427
1483
  }
1428
1484
  } else if (result.service_config == nullptr) {
1429
- if (chand_->default_service_config_ != nullptr) {
1430
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_routing_trace)) {
1431
- gpr_log(GPR_INFO,
1432
- "chand=%p: resolver returned no service config. Using default "
1433
- "service config provided by client API.",
1434
- chand_);
1435
- }
1436
- service_config = chand_->default_service_config_;
1485
+ // Resolver did not return any service config.
1486
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_routing_trace)) {
1487
+ gpr_log(GPR_INFO,
1488
+ "chand=%p: resolver returned no service config. Using default "
1489
+ "service config for channel.",
1490
+ chand_);
1437
1491
  }
1492
+ service_config = chand_->default_service_config_;
1438
1493
  } else {
1494
+ // Use ServiceConfig and ConfigSelector returned by resolver.
1439
1495
  service_config = result.service_config;
1496
+ config_selector = ConfigSelector::GetFromChannelArgs(*result.args);
1440
1497
  }
1441
- service_config_result.service_config_error =
1442
- GRPC_ERROR_REF(result.service_config_error);
1443
- if (service_config == nullptr &&
1444
- result.service_config_error != GRPC_ERROR_NONE) {
1445
- service_config_result.no_valid_service_config = true;
1446
- return service_config_result;
1447
- }
1448
- // Process service config.
1449
- grpc_core::UniquePtr<char> service_config_json;
1498
+ GPR_ASSERT(service_config != nullptr);
1499
+ // Extract global config for client channel.
1450
1500
  const internal::ClientChannelGlobalParsedConfig* parsed_service_config =
1451
- nullptr;
1452
- if (service_config != nullptr) {
1453
- parsed_service_config =
1454
- static_cast<const internal::ClientChannelGlobalParsedConfig*>(
1455
- service_config->GetGlobalParsedConfig(
1456
- internal::ClientChannelServiceConfigParser::ParserIndex()));
1457
- }
1458
- // Check if the config has changed.
1501
+ static_cast<const internal::ClientChannelGlobalParsedConfig*>(
1502
+ service_config->GetGlobalParsedConfig(
1503
+ internal::ClientChannelServiceConfigParser::ParserIndex()));
1504
+ // Find LB policy config.
1505
+ ChooseLbPolicy(result, parsed_service_config,
1506
+ &service_config_result.lb_policy_config);
1507
+ // Check if the ServiceConfig has changed.
1508
+ const bool service_config_changed =
1509
+ chand_->saved_service_config_ == nullptr ||
1510
+ service_config->json_string() !=
1511
+ chand_->saved_service_config_->json_string();
1512
+ // Check if the ConfigSelector has changed.
1513
+ const bool config_selector_changed = !ConfigSelector::Equals(
1514
+ chand_->saved_config_selector_.get(), config_selector.get());
1515
+ // Indicate a change if either the ServiceConfig or ConfigSelector have
1516
+ // changed.
1459
1517
  service_config_result.service_config_changed =
1460
- ((service_config == nullptr) !=
1461
- (chand_->saved_service_config_ == nullptr)) ||
1462
- (service_config != nullptr &&
1463
- service_config->json_string() !=
1464
- chand_->saved_service_config_->json_string());
1518
+ service_config_changed || config_selector_changed;
1519
+ // If it has, apply the global parameters now.
1465
1520
  if (service_config_result.service_config_changed) {
1466
- service_config_json.reset(gpr_strdup(
1467
- service_config != nullptr ? service_config->json_string().c_str()
1468
- : ""));
1469
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_routing_trace)) {
1470
- gpr_log(GPR_INFO,
1471
- "chand=%p: resolver returned updated service config: \"%s\"",
1472
- chand_, service_config_json.get());
1473
- }
1474
- // Save health check service name.
1475
- if (service_config != nullptr) {
1476
- chand_->health_check_service_name_.reset(
1477
- gpr_strdup(parsed_service_config->health_check_service_name()));
1478
- } else {
1479
- chand_->health_check_service_name_.reset();
1480
- }
1481
- // Update health check service name used by existing subchannel wrappers.
1482
- for (auto* subchannel_wrapper : chand_->subchannel_wrappers_) {
1483
- subchannel_wrapper->UpdateHealthCheckServiceName(
1484
- grpc_core::UniquePtr<char>(
1485
- gpr_strdup(chand_->health_check_service_name_.get())));
1486
- }
1487
- // Save service config.
1488
- chand_->saved_service_config_ = std::move(service_config);
1489
- }
1490
- // Find LB policy config.
1491
- ProcessLbPolicy(result, parsed_service_config,
1492
- &service_config_result.lb_policy_config);
1493
- grpc_core::UniquePtr<char> lb_policy_name(
1494
- gpr_strdup((service_config_result.lb_policy_config)->name()));
1495
- // Swap out the data used by GetChannelInfo().
1496
- {
1497
- MutexLock lock(&chand_->info_mu_);
1498
- chand_->info_lb_policy_name_ = std::move(lb_policy_name);
1499
- if (service_config_json != nullptr) {
1500
- chand_->info_service_config_json_ = std::move(service_config_json);
1501
- }
1521
+ chand_->UpdateServiceConfigInControlPlaneLocked(
1522
+ std::move(service_config), std::move(config_selector),
1523
+ parsed_service_config, service_config_result.lb_policy_config->name());
1502
1524
  }
1503
1525
  // Return results.
1504
1526
  return service_config_result;
1505
1527
  }
1506
1528
 
1507
- void ChannelData::ChannelConfigHelper::ApplyConfigSelector(
1508
- bool service_config_changed,
1509
- RefCountedPtr<ConfigSelector> config_selector) {
1510
- chand_->UpdateServiceConfigInDataPlaneLocked(service_config_changed,
1511
- std::move(config_selector));
1529
+ void ChannelData::ChannelConfigHelper::StartUsingServiceConfigForCalls() {
1530
+ chand_->UpdateServiceConfigInDataPlaneLocked();
1512
1531
  }
1513
1532
 
1514
1533
  void ChannelData::ChannelConfigHelper::ResolverTransientFailure(
@@ -1518,21 +1537,19 @@ void ChannelData::ChannelConfigHelper::ResolverTransientFailure(
1518
1537
  chand_->resolver_transient_failure_error_ = error;
1519
1538
  }
1520
1539
 
1521
- void ChannelData::ChannelConfigHelper::ProcessLbPolicy(
1540
+ void ChannelData::ChannelConfigHelper::ChooseLbPolicy(
1522
1541
  const Resolver::Result& resolver_result,
1523
1542
  const internal::ClientChannelGlobalParsedConfig* parsed_service_config,
1524
1543
  RefCountedPtr<LoadBalancingPolicy::Config>* lb_policy_config) {
1525
1544
  // Prefer the LB policy config found in the service config.
1526
- if (parsed_service_config != nullptr &&
1527
- parsed_service_config->parsed_lb_config() != nullptr) {
1545
+ if (parsed_service_config->parsed_lb_config() != nullptr) {
1528
1546
  *lb_policy_config = parsed_service_config->parsed_lb_config();
1529
1547
  return;
1530
1548
  }
1531
1549
  // Try the deprecated LB policy name from the service config.
1532
1550
  // If not, try the setting from channel args.
1533
1551
  const char* policy_name = nullptr;
1534
- if (parsed_service_config != nullptr &&
1535
- !parsed_service_config->parsed_deprecated_lb_policy().empty()) {
1552
+ if (!parsed_service_config->parsed_deprecated_lb_policy().empty()) {
1536
1553
  policy_name = parsed_service_config->parsed_deprecated_lb_policy().c_str();
1537
1554
  } else {
1538
1555
  const grpc_arg* channel_arg =
@@ -1652,16 +1669,17 @@ ChannelData::ChannelData(grpc_channel_element_args* args, grpc_error** error)
1652
1669
  "filter");
1653
1670
  return;
1654
1671
  }
1655
- // Get default service config
1672
+ // Get default service config. If none is specified via the client API,
1673
+ // we use an empty config.
1656
1674
  const char* service_config_json = grpc_channel_arg_get_string(
1657
1675
  grpc_channel_args_find(args->channel_args, GRPC_ARG_SERVICE_CONFIG));
1658
- if (service_config_json != nullptr) {
1659
- *error = GRPC_ERROR_NONE;
1660
- default_service_config_ = ServiceConfig::Create(service_config_json, error);
1661
- if (*error != GRPC_ERROR_NONE) {
1662
- default_service_config_.reset();
1663
- return;
1664
- }
1676
+ if (service_config_json == nullptr) service_config_json = "{}";
1677
+ *error = GRPC_ERROR_NONE;
1678
+ default_service_config_ =
1679
+ ServiceConfig::Create(args->channel_args, service_config_json, error);
1680
+ if (*error != GRPC_ERROR_NONE) {
1681
+ default_service_config_.reset();
1682
+ return;
1665
1683
  }
1666
1684
  grpc_uri* uri = grpc_uri_parse(server_uri, true);
1667
1685
  if (uri != nullptr && uri->path[0] != '\0') {
@@ -1675,12 +1693,19 @@ ChannelData::ChannelData(grpc_channel_element_args* args, grpc_error** error)
1675
1693
  &new_args);
1676
1694
  target_uri_.reset(proxy_name != nullptr ? proxy_name
1677
1695
  : gpr_strdup(server_uri));
1678
- channel_args_ = new_args != nullptr
1679
- ? new_args
1680
- : grpc_channel_args_copy(args->channel_args);
1696
+ // Strip out service config channel arg, so that it doesn't affect
1697
+ // subchannel uniqueness when the args flow down to that layer.
1698
+ const char* arg_to_remove = GRPC_ARG_SERVICE_CONFIG;
1699
+ channel_args_ = grpc_channel_args_copy_and_remove(
1700
+ new_args != nullptr ? new_args : args->channel_args, &arg_to_remove, 1);
1701
+ grpc_channel_args_destroy(new_args);
1702
+ keepalive_time_ = grpc_channel_args_find_integer(
1703
+ channel_args_, GRPC_ARG_KEEPALIVE_TIME_MS,
1704
+ {-1 /* default value, unset */, 1, INT_MAX});
1681
1705
  if (!ResolverRegistry::IsValidTarget(target_uri_.get())) {
1682
- *error =
1683
- GRPC_ERROR_CREATE_FROM_STATIC_STRING("the target uri is not valid.");
1706
+ std::string error_message =
1707
+ absl::StrCat("the target uri is not valid: ", target_uri_.get());
1708
+ *error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(error_message.c_str());
1684
1709
  return;
1685
1710
  }
1686
1711
  *error = GRPC_ERROR_NONE;
@@ -1701,17 +1726,17 @@ ChannelData::~ChannelData() {
1701
1726
  }
1702
1727
 
1703
1728
  void ChannelData::UpdateStateAndPickerLocked(
1704
- grpc_connectivity_state state, const char* reason,
1729
+ grpc_connectivity_state state, const absl::Status& status,
1730
+ const char* reason,
1705
1731
  std::unique_ptr<LoadBalancingPolicy::SubchannelPicker> picker) {
1706
1732
  // Clean the control plane when entering IDLE.
1707
- if (picker_ == nullptr) {
1733
+ if (picker == nullptr || state == GRPC_CHANNEL_SHUTDOWN) {
1708
1734
  health_check_service_name_.reset();
1709
1735
  saved_service_config_.reset();
1710
1736
  saved_config_selector_.reset();
1711
- received_first_resolver_result_ = false;
1712
1737
  }
1713
1738
  // Update connectivity state.
1714
- state_tracker_.SetState(state, reason);
1739
+ state_tracker_.SetState(state, status, reason);
1715
1740
  if (channelz_node_ != nullptr) {
1716
1741
  channelz_node_->SetConnectivityState(state);
1717
1742
  channelz_node_->AddTraceEvent(
@@ -1754,7 +1779,7 @@ void ChannelData::UpdateStateAndPickerLocked(
1754
1779
  // Note: Original value will be destroyed after the lock is released.
1755
1780
  picker_.swap(picker);
1756
1781
  // Clean the data plane if the updated picker is nullptr.
1757
- if (picker_ == nullptr) {
1782
+ if (picker_ == nullptr || state == GRPC_CHANNEL_SHUTDOWN) {
1758
1783
  received_service_config_data_ = false;
1759
1784
  // Note: We save the objects to unref until after the lock is released.
1760
1785
  retry_throttle_data_to_unref = std::move(retry_throttle_data_);
@@ -1776,43 +1801,72 @@ void ChannelData::UpdateStateAndPickerLocked(
1776
1801
  pending_subchannel_updates_.clear();
1777
1802
  }
1778
1803
 
1779
- void ChannelData::UpdateServiceConfigInDataPlaneLocked(
1780
- bool service_config_changed,
1781
- RefCountedPtr<ConfigSelector> config_selector) {
1782
- // Check if ConfigSelector has changed.
1783
- const bool config_selector_changed =
1784
- saved_config_selector_ != config_selector;
1785
- saved_config_selector_ = config_selector;
1786
- // We want to set the service config at least once, even if the
1787
- // resolver does not return a config, because that ensures that we
1788
- // disable retries if they are not enabled in the service config.
1789
- // TODO(roth): Consider removing the received_first_resolver_result_ check
1790
- // when we implement transparent retries.
1791
- if (!service_config_changed && !config_selector_changed &&
1792
- received_first_resolver_result_) {
1793
- return;
1804
+ void ChannelData::UpdateServiceConfigInControlPlaneLocked(
1805
+ RefCountedPtr<ServiceConfig> service_config,
1806
+ RefCountedPtr<ConfigSelector> config_selector,
1807
+ const internal::ClientChannelGlobalParsedConfig* parsed_service_config,
1808
+ const char* lb_policy_name) {
1809
+ grpc_core::UniquePtr<char> service_config_json(
1810
+ gpr_strdup(service_config->json_string().c_str()));
1811
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_routing_trace)) {
1812
+ gpr_log(GPR_INFO,
1813
+ "chand=%p: resolver returned updated service config: \"%s\"", this,
1814
+ service_config_json.get());
1815
+ }
1816
+ // Save service config.
1817
+ saved_service_config_ = std::move(service_config);
1818
+ // Update health check service name if needed.
1819
+ if (((health_check_service_name_ == nullptr) !=
1820
+ (parsed_service_config->health_check_service_name() == nullptr)) ||
1821
+ (health_check_service_name_ != nullptr &&
1822
+ strcmp(health_check_service_name_.get(),
1823
+ parsed_service_config->health_check_service_name()) != 0)) {
1824
+ health_check_service_name_.reset(
1825
+ gpr_strdup(parsed_service_config->health_check_service_name()));
1826
+ // Update health check service name used by existing subchannel wrappers.
1827
+ for (auto* subchannel_wrapper : subchannel_wrappers_) {
1828
+ subchannel_wrapper->UpdateHealthCheckServiceName(
1829
+ grpc_core::UniquePtr<char>(
1830
+ gpr_strdup(health_check_service_name_.get())));
1831
+ }
1794
1832
  }
1795
- received_first_resolver_result_ = true;
1833
+ // Swap out the data used by GetChannelInfo().
1834
+ grpc_core::UniquePtr<char> lb_policy_name_owned(gpr_strdup(lb_policy_name));
1835
+ {
1836
+ MutexLock lock(&info_mu_);
1837
+ info_lb_policy_name_ = std::move(lb_policy_name_owned);
1838
+ info_service_config_json_ = std::move(service_config_json);
1839
+ }
1840
+ // Save config selector.
1841
+ saved_config_selector_ = std::move(config_selector);
1842
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_routing_trace)) {
1843
+ gpr_log(GPR_INFO, "chand=%p: using ConfigSelector %p", this,
1844
+ saved_config_selector_.get());
1845
+ }
1846
+ }
1847
+
1848
+ void ChannelData::UpdateServiceConfigInDataPlaneLocked() {
1796
1849
  // Get retry throttle data from service config.
1850
+ const internal::ClientChannelGlobalParsedConfig* parsed_service_config =
1851
+ static_cast<const internal::ClientChannelGlobalParsedConfig*>(
1852
+ saved_service_config_->GetGlobalParsedConfig(
1853
+ internal::ClientChannelServiceConfigParser::ParserIndex()));
1854
+ absl::optional<internal::ClientChannelGlobalParsedConfig::RetryThrottling>
1855
+ retry_throttle_config = parsed_service_config->retry_throttling();
1797
1856
  RefCountedPtr<ServerRetryThrottleData> retry_throttle_data;
1798
- if (saved_service_config_ != nullptr) {
1799
- const internal::ClientChannelGlobalParsedConfig* parsed_service_config =
1800
- static_cast<const internal::ClientChannelGlobalParsedConfig*>(
1801
- saved_service_config_->GetGlobalParsedConfig(
1802
- internal::ClientChannelServiceConfigParser::ParserIndex()));
1803
- if (parsed_service_config != nullptr) {
1804
- absl::optional<internal::ClientChannelGlobalParsedConfig::RetryThrottling>
1805
- retry_throttle_config = parsed_service_config->retry_throttling();
1806
- if (retry_throttle_config.has_value()) {
1807
- retry_throttle_data =
1808
- internal::ServerRetryThrottleMap::GetDataForServer(
1809
- server_name_.get(),
1810
- retry_throttle_config.value().max_milli_tokens,
1811
- retry_throttle_config.value().milli_token_ratio);
1812
- }
1813
- }
1857
+ if (retry_throttle_config.has_value()) {
1858
+ retry_throttle_data = internal::ServerRetryThrottleMap::GetDataForServer(
1859
+ server_name_.get(), retry_throttle_config.value().max_milli_tokens,
1860
+ retry_throttle_config.value().milli_token_ratio);
1861
+ }
1862
+ // Grab ref to service config.
1863
+ RefCountedPtr<ServiceConfig> service_config = saved_service_config_;
1864
+ // Grab ref to config selector. Use default if resolver didn't supply one.
1865
+ RefCountedPtr<ConfigSelector> config_selector = saved_config_selector_;
1866
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_routing_trace)) {
1867
+ gpr_log(GPR_INFO, "chand=%p: switching to ConfigSelector %p", this,
1868
+ saved_config_selector_.get());
1814
1869
  }
1815
- // Create default config selector if not provided by resolver.
1816
1870
  if (config_selector == nullptr) {
1817
1871
  config_selector =
1818
1872
  MakeRefCounted<DefaultConfigSelector>(saved_service_config_);
@@ -1821,9 +1875,6 @@ void ChannelData::UpdateServiceConfigInDataPlaneLocked(
1821
1875
  //
1822
1876
  // We defer unreffing the old values (and deallocating memory) until
1823
1877
  // after releasing the lock to keep the critical section small.
1824
- RefCountedPtr<ServiceConfig> service_config_to_unref = saved_service_config_;
1825
- RefCountedPtr<ConfigSelector> config_selector_to_unref =
1826
- std::move(config_selector);
1827
1878
  {
1828
1879
  MutexLock lock(&data_plane_mu_);
1829
1880
  GRPC_ERROR_UNREF(resolver_transient_failure_error_);
@@ -1832,8 +1883,8 @@ void ChannelData::UpdateServiceConfigInDataPlaneLocked(
1832
1883
  received_service_config_data_ = true;
1833
1884
  // Old values will be unreffed after lock is released.
1834
1885
  retry_throttle_data_.swap(retry_throttle_data);
1835
- service_config_.swap(service_config_to_unref);
1836
- config_selector_.swap(config_selector_to_unref);
1886
+ service_config_.swap(service_config);
1887
+ config_selector_.swap(config_selector);
1837
1888
  // Re-process queued picks.
1838
1889
  for (QueuedPick* pick = queued_picks_; pick != nullptr; pick = pick->next) {
1839
1890
  grpc_call_element* elem = pick->elem;
@@ -1938,8 +1989,8 @@ void ChannelData::StartTransportOpLocked(grpc_transport_op* op) {
1938
1989
  static_cast<grpc_connectivity_state>(value) == GRPC_CHANNEL_IDLE) {
1939
1990
  if (disconnect_error() == GRPC_ERROR_NONE) {
1940
1991
  // Enter IDLE state.
1941
- UpdateStateAndPickerLocked(GRPC_CHANNEL_IDLE, "channel entering IDLE",
1942
- nullptr);
1992
+ UpdateStateAndPickerLocked(GRPC_CHANNEL_IDLE, absl::Status(),
1993
+ "channel entering IDLE", nullptr);
1943
1994
  }
1944
1995
  GRPC_ERROR_UNREF(op->disconnect_with_error);
1945
1996
  } else {
@@ -1948,7 +1999,7 @@ void ChannelData::StartTransportOpLocked(grpc_transport_op* op) {
1948
1999
  GRPC_ERROR_NONE);
1949
2000
  disconnect_error_.Store(op->disconnect_with_error, MemoryOrder::RELEASE);
1950
2001
  UpdateStateAndPickerLocked(
1951
- GRPC_CHANNEL_SHUTDOWN, "shutdown from API",
2002
+ GRPC_CHANNEL_SHUTDOWN, absl::Status(), "shutdown from API",
1952
2003
  absl::make_unique<LoadBalancingPolicy::TransientFailurePicker>(
1953
2004
  GRPC_ERROR_REF(op->disconnect_with_error)));
1954
2005
  }
@@ -2090,7 +2141,7 @@ void ChannelData::RemoveConnectivityWatcher(
2090
2141
 
2091
2142
  CallData::CallData(grpc_call_element* elem, const ChannelData& chand,
2092
2143
  const grpc_call_element_args& args)
2093
- : deadline_state_(elem, args.call_stack, args.call_combiner,
2144
+ : deadline_state_(elem, args,
2094
2145
  GPR_LIKELY(chand.deadline_checking_enabled())
2095
2146
  ? args.deadline
2096
2147
  : GRPC_MILLIS_INF_FUTURE),
@@ -2133,13 +2184,14 @@ void CallData::Destroy(grpc_call_element* elem,
2133
2184
  const grpc_call_final_info* /*final_info*/,
2134
2185
  grpc_closure* then_schedule_closure) {
2135
2186
  CallData* calld = static_cast<CallData*>(elem->call_data);
2136
- if (GPR_LIKELY(calld->subchannel_call_ != nullptr)) {
2137
- calld->subchannel_call_->SetAfterCallStackDestroy(then_schedule_closure);
2138
- then_schedule_closure = nullptr;
2139
- }
2187
+ RefCountedPtr<SubchannelCall> subchannel_call = calld->subchannel_call_;
2140
2188
  calld->~CallData();
2141
- // TODO(yashkt) : This can potentially be a Closure::Run
2142
- ExecCtx::Run(DEBUG_LOCATION, then_schedule_closure, GRPC_ERROR_NONE);
2189
+ if (GPR_LIKELY(subchannel_call != nullptr)) {
2190
+ subchannel_call->SetAfterCallStackDestroy(then_schedule_closure);
2191
+ } else {
2192
+ // TODO(yashkt) : This can potentially be a Closure::Run
2193
+ ExecCtx::Run(DEBUG_LOCATION, then_schedule_closure, GRPC_ERROR_NONE);
2194
+ }
2143
2195
  }
2144
2196
 
2145
2197
  void CallData::StartTransportStreamOpBatch(
@@ -3829,6 +3881,7 @@ class CallData::QueuedPickCanceller {
3829
3881
  }
3830
3882
  if (calld->pick_canceller_ == self && error != GRPC_ERROR_NONE) {
3831
3883
  // Remove pick from list of queued picks.
3884
+ calld->MaybeInvokeConfigSelectorCommitCallback();
3832
3885
  calld->MaybeRemoveCallFromQueuedPicksLocked(self->elem_);
3833
3886
  // Fail pending batches on the call.
3834
3887
  calld->PendingBatchesFail(self->elem_, GRPC_ERROR_REF(error),
@@ -3877,8 +3930,7 @@ grpc_error* CallData::ApplyServiceConfigToCallLocked(
3877
3930
  chand, this);
3878
3931
  }
3879
3932
  ConfigSelector* config_selector = chand->config_selector();
3880
- auto service_config = chand->service_config();
3881
- if (service_config != nullptr) {
3933
+ if (config_selector != nullptr) {
3882
3934
  // Use the ConfigSelector to determine the config for the call.
3883
3935
  ConfigSelector::CallConfig call_config =
3884
3936
  config_selector->GetCallConfig({&path_, initial_metadata, arena_});
@@ -3891,7 +3943,8 @@ grpc_error* CallData::ApplyServiceConfigToCallLocked(
3891
3943
  // so that it can be accessed by filters in the subchannel, and it
3892
3944
  // will be cleaned up when the call ends.
3893
3945
  auto* service_config_call_data = arena_->New<ServiceConfigCallData>(
3894
- std::move(service_config), call_config.method_configs, call_context_);
3946
+ std::move(call_config.service_config), call_config.method_configs,
3947
+ call_context_);
3895
3948
  // Apply our own method params to the call.
3896
3949
  method_params_ = static_cast<ClientChannelMethodParsedConfig*>(
3897
3950
  service_config_call_data->GetMethodParsedConfig(
@@ -4118,7 +4171,9 @@ bool CallData::PickSubchannelLocked(grpc_call_element* elem,
4118
4171
  connected_subchannel_ =
4119
4172
  chand->GetConnectedSubchannelInDataPlane(result.subchannel.get());
4120
4173
  GPR_ASSERT(connected_subchannel_ != nullptr);
4121
- if (retry_committed_) MaybeInvokeConfigSelectorCommitCallback();
4174
+ if (!enable_retries_ || retry_committed_) {
4175
+ MaybeInvokeConfigSelectorCommitCallback();
4176
+ }
4122
4177
  }
4123
4178
  lb_recv_trailing_metadata_ready_ = result.recv_trailing_metadata_ready;
4124
4179
  *error = result.error;