grpc 1.44.0.pre2-x86_64-linux → 1.46.3-x86_64-linux

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 (2464) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +1 -0
  3. data/Makefile +3195 -0
  4. data/include/grpc/byte_buffer.h +27 -0
  5. data/include/grpc/byte_buffer_reader.h +26 -0
  6. data/include/grpc/census.h +40 -0
  7. data/include/grpc/compression.h +75 -0
  8. data/include/grpc/event_engine/README.md +38 -0
  9. data/include/grpc/event_engine/endpoint_config.h +43 -0
  10. data/include/grpc/event_engine/event_engine.h +399 -0
  11. data/include/grpc/event_engine/internal/memory_allocator_impl.h +68 -0
  12. data/include/grpc/event_engine/memory_allocator.h +226 -0
  13. data/include/grpc/event_engine/memory_request.h +57 -0
  14. data/include/grpc/event_engine/port.h +39 -0
  15. data/include/grpc/fork.h +26 -0
  16. data/include/grpc/grpc.h +605 -0
  17. data/include/grpc/grpc_cronet.h +38 -0
  18. data/include/grpc/grpc_posix.h +63 -0
  19. data/include/grpc/grpc_security.h +1259 -0
  20. data/include/grpc/grpc_security_constants.h +152 -0
  21. data/include/grpc/impl/codegen/README.md +22 -0
  22. data/include/grpc/impl/codegen/atm.h +97 -0
  23. data/include/grpc/impl/codegen/atm_gcc_atomic.h +93 -0
  24. data/include/grpc/impl/codegen/atm_gcc_sync.h +87 -0
  25. data/include/grpc/impl/codegen/atm_windows.h +134 -0
  26. data/include/grpc/impl/codegen/byte_buffer.h +103 -0
  27. data/include/grpc/impl/codegen/byte_buffer_reader.h +44 -0
  28. data/include/grpc/impl/codegen/compression_types.h +108 -0
  29. data/include/grpc/impl/codegen/connectivity_state.h +46 -0
  30. data/include/grpc/impl/codegen/fork.h +50 -0
  31. data/include/grpc/impl/codegen/gpr_slice.h +71 -0
  32. data/include/grpc/impl/codegen/gpr_types.h +61 -0
  33. data/include/grpc/impl/codegen/grpc_types.h +816 -0
  34. data/include/grpc/impl/codegen/log.h +112 -0
  35. data/include/grpc/impl/codegen/port_platform.h +723 -0
  36. data/include/grpc/impl/codegen/propagation_bits.h +54 -0
  37. data/include/grpc/impl/codegen/slice.h +132 -0
  38. data/include/grpc/impl/codegen/status.h +156 -0
  39. data/include/grpc/impl/codegen/sync.h +68 -0
  40. data/include/grpc/impl/codegen/sync_abseil.h +38 -0
  41. data/include/grpc/impl/codegen/sync_custom.h +40 -0
  42. data/include/grpc/impl/codegen/sync_generic.h +51 -0
  43. data/include/grpc/impl/codegen/sync_posix.h +54 -0
  44. data/include/grpc/impl/codegen/sync_windows.h +42 -0
  45. data/include/grpc/load_reporting.h +48 -0
  46. data/include/grpc/module.modulemap +64 -0
  47. data/include/grpc/slice.h +161 -0
  48. data/include/grpc/slice_buffer.h +84 -0
  49. data/include/grpc/status.h +26 -0
  50. data/include/grpc/support/alloc.h +52 -0
  51. data/include/grpc/support/atm.h +26 -0
  52. data/include/grpc/support/atm_gcc_atomic.h +26 -0
  53. data/include/grpc/support/atm_gcc_sync.h +26 -0
  54. data/include/grpc/support/atm_windows.h +26 -0
  55. data/include/grpc/support/cpu.h +44 -0
  56. data/include/grpc/support/log.h +26 -0
  57. data/include/grpc/support/log_windows.h +38 -0
  58. data/include/grpc/support/port_platform.h +24 -0
  59. data/include/grpc/support/string_util.h +51 -0
  60. data/include/grpc/support/sync.h +282 -0
  61. data/include/grpc/support/sync_abseil.h +26 -0
  62. data/include/grpc/support/sync_custom.h +26 -0
  63. data/include/grpc/support/sync_generic.h +26 -0
  64. data/include/grpc/support/sync_posix.h +26 -0
  65. data/include/grpc/support/sync_windows.h +26 -0
  66. data/include/grpc/support/thd_id.h +44 -0
  67. data/include/grpc/support/time.h +92 -0
  68. data/include/grpc/support/workaround_list.h +31 -0
  69. data/src/core/ext/filters/census/grpc_context.cc +39 -0
  70. data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +309 -0
  71. data/src/core/ext/filters/channel_idle/channel_idle_filter.h +122 -0
  72. data/src/core/ext/filters/channel_idle/idle_filter_state.cc +96 -0
  73. data/src/core/ext/filters/channel_idle/idle_filter_state.h +66 -0
  74. data/src/core/ext/filters/client_channel/backend_metric.cc +79 -0
  75. data/src/core/ext/filters/client_channel/backend_metric.h +37 -0
  76. data/src/core/ext/filters/client_channel/backup_poller.cc +187 -0
  77. data/src/core/ext/filters/client_channel/backup_poller.h +42 -0
  78. data/src/core/ext/filters/client_channel/channel_connectivity.cc +220 -0
  79. data/src/core/ext/filters/client_channel/client_channel.cc +3243 -0
  80. data/src/core/ext/filters/client_channel/client_channel.h +585 -0
  81. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +96 -0
  82. data/src/core/ext/filters/client_channel/client_channel_channelz.h +75 -0
  83. data/src/core/ext/filters/client_channel/client_channel_factory.cc +56 -0
  84. data/src/core/ext/filters/client_channel/client_channel_factory.h +46 -0
  85. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +67 -0
  86. data/src/core/ext/filters/client_channel/config_selector.cc +59 -0
  87. data/src/core/ext/filters/client_channel/config_selector.h +145 -0
  88. data/src/core/ext/filters/client_channel/connector.h +79 -0
  89. data/src/core/ext/filters/client_channel/dynamic_filters.cc +189 -0
  90. data/src/core/ext/filters/client_channel/dynamic_filters.h +99 -0
  91. data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +63 -0
  92. data/src/core/ext/filters/client_channel/global_subchannel_pool.h +60 -0
  93. data/src/core/ext/filters/client_channel/health/health_check_client.cc +163 -0
  94. data/src/core/ext/filters/client_channel/health/health_check_client.h +41 -0
  95. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +387 -0
  96. data/src/core/ext/filters/client_channel/http_connect_handshaker.h +42 -0
  97. data/src/core/ext/filters/client_channel/http_proxy.cc +212 -0
  98. data/src/core/ext/filters/client_channel/http_proxy.h +45 -0
  99. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +97 -0
  100. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +102 -0
  101. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +304 -0
  102. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +83 -0
  103. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +145 -0
  104. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +29 -0
  105. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +1885 -0
  106. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +40 -0
  107. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +76 -0
  108. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +37 -0
  109. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +92 -0
  110. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +76 -0
  111. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +192 -0
  112. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +74 -0
  113. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +540 -0
  114. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +967 -0
  115. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +804 -0
  116. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +37 -0
  117. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +2542 -0
  118. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +504 -0
  119. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +431 -0
  120. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +776 -0
  121. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +704 -0
  122. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +60 -0
  123. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h +29 -0
  124. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +872 -0
  125. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +710 -0
  126. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +1215 -0
  127. data/src/core/ext/filters/client_channel/lb_policy.cc +132 -0
  128. data/src/core/ext/filters/client_channel/lb_policy.h +457 -0
  129. data/src/core/ext/filters/client_channel/lb_policy_factory.h +48 -0
  130. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +185 -0
  131. data/src/core/ext/filters/client_channel/lb_policy_registry.h +65 -0
  132. data/src/core/ext/filters/client_channel/local_subchannel_pool.cc +56 -0
  133. data/src/core/ext/filters/client_channel/local_subchannel_pool.h +58 -0
  134. data/src/core/ext/filters/client_channel/proxy_mapper.h +54 -0
  135. data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +89 -0
  136. data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +50 -0
  137. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +133 -0
  138. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +500 -0
  139. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +84 -0
  140. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_event_engine.cc +31 -0
  141. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +114 -0
  142. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +883 -0
  143. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +1113 -0
  144. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +115 -0
  145. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_event_engine.cc +28 -0
  146. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_posix.cc +29 -0
  147. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +34 -0
  148. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.cc +28 -0
  149. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.h +29 -0
  150. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +169 -0
  151. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +381 -0
  152. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +96 -0
  153. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +400 -0
  154. data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +201 -0
  155. data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +106 -0
  156. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +196 -0
  157. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +1066 -0
  158. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +28 -0
  159. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +186 -0
  160. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +105 -0
  161. data/src/core/ext/filters/client_channel/retry_filter.cc +2655 -0
  162. data/src/core/ext/filters/client_channel/retry_filter.h +30 -0
  163. data/src/core/ext/filters/client_channel/retry_service_config.cc +314 -0
  164. data/src/core/ext/filters/client_channel/retry_service_config.h +102 -0
  165. data/src/core/ext/filters/client_channel/retry_throttle.cc +148 -0
  166. data/src/core/ext/filters/client_channel/retry_throttle.h +85 -0
  167. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +157 -0
  168. data/src/core/ext/filters/client_channel/subchannel.cc +1014 -0
  169. data/src/core/ext/filters/client_channel/subchannel.h +382 -0
  170. data/src/core/ext/filters/client_channel/subchannel_interface.h +130 -0
  171. data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +126 -0
  172. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +106 -0
  173. data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +544 -0
  174. data/src/core/ext/filters/client_channel/subchannel_stream_client.h +214 -0
  175. data/src/core/ext/filters/deadline/deadline_filter.cc +392 -0
  176. data/src/core/ext/filters/deadline/deadline_filter.h +87 -0
  177. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +258 -0
  178. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +62 -0
  179. data/src/core/ext/filters/fault_injection/service_config_parser.cc +179 -0
  180. data/src/core/ext/filters/fault_injection/service_config_parser.h +91 -0
  181. data/src/core/ext/filters/http/client/http_client_filter.cc +141 -0
  182. data/src/core/ext/filters/http/client/http_client_filter.h +48 -0
  183. data/src/core/ext/filters/http/client_authority_filter.cc +95 -0
  184. data/src/core/ext/filters/http/client_authority_filter.h +53 -0
  185. data/src/core/ext/filters/http/http_filters_plugin.cc +90 -0
  186. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +456 -0
  187. data/src/core/ext/filters/http/message_compress/message_compress_filter.h +53 -0
  188. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +386 -0
  189. data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +31 -0
  190. data/src/core/ext/filters/http/server/http_server_filter.cc +322 -0
  191. data/src/core/ext/filters/http/server/http_server_filter.h +29 -0
  192. data/src/core/ext/filters/message_size/message_size_filter.cc +394 -0
  193. data/src/core/ext/filters/message_size/message_size_filter.h +73 -0
  194. data/src/core/ext/filters/rbac/rbac_filter.cc +162 -0
  195. data/src/core/ext/filters/rbac/rbac_filter.h +76 -0
  196. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +606 -0
  197. data/src/core/ext/filters/rbac/rbac_service_config_parser.h +75 -0
  198. data/src/core/ext/filters/server_config_selector/server_config_selector.cc +61 -0
  199. data/src/core/ext/filters/server_config_selector/server_config_selector.h +71 -0
  200. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +143 -0
  201. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.h +32 -0
  202. data/src/core/ext/transport/chttp2/alpn/alpn.cc +45 -0
  203. data/src/core/ext/transport/chttp2/alpn/alpn.h +36 -0
  204. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +495 -0
  205. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +75 -0
  206. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +1101 -0
  207. data/src/core/ext/transport/chttp2/server/chttp2_server.h +47 -0
  208. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +252 -0
  209. data/src/core/ext/transport/chttp2/transport/bin_decoder.h +57 -0
  210. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +231 -0
  211. data/src/core/ext/transport/chttp2/transport/bin_encoder.h +42 -0
  212. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +3375 -0
  213. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +71 -0
  214. data/src/core/ext/transport/chttp2/transport/context_list.cc +67 -0
  215. data/src/core/ext/transport/chttp2/transport/context_list.h +51 -0
  216. data/src/core/ext/transport/chttp2/transport/flow_control.cc +430 -0
  217. data/src/core/ext/transport/chttp2/transport/flow_control.h +488 -0
  218. data/src/core/ext/transport/chttp2/transport/frame.h +47 -0
  219. data/src/core/ext/transport/chttp2/transport/frame_data.cc +307 -0
  220. data/src/core/ext/transport/chttp2/transport/frame_data.h +83 -0
  221. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +187 -0
  222. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +63 -0
  223. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +132 -0
  224. data/src/core/ext/transport/chttp2/transport/frame_ping.h +46 -0
  225. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +123 -0
  226. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +51 -0
  227. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +275 -0
  228. data/src/core/ext/transport/chttp2/transport/frame_settings.h +62 -0
  229. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +123 -0
  230. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +43 -0
  231. data/src/core/ext/transport/chttp2/transport/hpack_constants.h +41 -0
  232. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +667 -0
  233. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +219 -0
  234. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +86 -0
  235. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +71 -0
  236. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +1379 -0
  237. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +135 -0
  238. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +239 -0
  239. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +115 -0
  240. data/src/core/ext/transport/chttp2/transport/http2_settings.cc +62 -0
  241. data/src/core/ext/transport/chttp2/transport/http2_settings.h +61 -0
  242. data/src/core/ext/transport/chttp2/transport/huffsyms.cc +92 -0
  243. data/src/core/ext/transport/chttp2/transport/huffsyms.h +32 -0
  244. data/src/core/ext/transport/chttp2/transport/internal.h +865 -0
  245. data/src/core/ext/transport/chttp2/transport/parsing.cc +653 -0
  246. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +216 -0
  247. data/src/core/ext/transport/chttp2/transport/stream_map.cc +177 -0
  248. data/src/core/ext/transport/chttp2/transport/stream_map.h +67 -0
  249. data/src/core/ext/transport/chttp2/transport/varint.cc +62 -0
  250. data/src/core/ext/transport/chttp2/transport/varint.h +71 -0
  251. data/src/core/ext/transport/chttp2/transport/writing.cc +661 -0
  252. data/src/core/ext/transport/inproc/inproc_plugin.cc +24 -0
  253. data/src/core/ext/transport/inproc/inproc_transport.cc +1321 -0
  254. data/src/core/ext/transport/inproc/inproc_transport.h +32 -0
  255. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.c +117 -0
  256. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.h +482 -0
  257. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.c +121 -0
  258. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.h +553 -0
  259. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +444 -0
  260. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +2156 -0
  261. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.c +56 -0
  262. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.h +151 -0
  263. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.c +62 -0
  264. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.h +160 -0
  265. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.c +46 -0
  266. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.h +124 -0
  267. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.c +43 -0
  268. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.h +102 -0
  269. data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.c +43 -0
  270. data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.h +97 -0
  271. data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.c +106 -0
  272. data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.h +605 -0
  273. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.c +48 -0
  274. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.h +103 -0
  275. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.c +60 -0
  276. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +81 -0
  277. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +53 -0
  278. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +99 -0
  279. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +270 -0
  280. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +1240 -0
  281. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +411 -0
  282. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +2161 -0
  283. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +95 -0
  284. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +382 -0
  285. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +543 -0
  286. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +2961 -0
  287. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +48 -0
  288. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +103 -0
  289. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +89 -0
  290. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +545 -0
  291. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.c +299 -0
  292. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.h +1381 -0
  293. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +145 -0
  294. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +636 -0
  295. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +49 -0
  296. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +116 -0
  297. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +419 -0
  298. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +1783 -0
  299. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +163 -0
  300. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +778 -0
  301. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +47 -0
  302. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +100 -0
  303. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +47 -0
  304. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +103 -0
  305. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.c +58 -0
  306. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.h +151 -0
  307. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +269 -0
  308. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +1277 -0
  309. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +220 -0
  310. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +1219 -0
  311. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +49 -0
  312. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +122 -0
  313. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +322 -0
  314. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +1686 -0
  315. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +40 -0
  316. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +84 -0
  317. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.c +60 -0
  318. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.h +169 -0
  319. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c +47 -0
  320. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +144 -0
  321. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +56 -0
  322. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +178 -0
  323. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.c +48 -0
  324. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.h +118 -0
  325. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +106 -0
  326. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +348 -0
  327. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +144 -0
  328. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +623 -0
  329. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +129 -0
  330. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +568 -0
  331. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +46 -0
  332. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +94 -0
  333. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +165 -0
  334. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +886 -0
  335. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +186 -0
  336. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +941 -0
  337. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +63 -0
  338. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +234 -0
  339. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +56 -0
  340. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +154 -0
  341. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.c +53 -0
  342. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.h +136 -0
  343. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +165 -0
  344. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +716 -0
  345. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +174 -0
  346. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +721 -0
  347. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +209 -0
  348. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +1008 -0
  349. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +101 -0
  350. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +443 -0
  351. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +1051 -0
  352. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +5956 -0
  353. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +79 -0
  354. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +255 -0
  355. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.c +222 -0
  356. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.h +1052 -0
  357. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.c +44 -0
  358. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.h +88 -0
  359. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.c +49 -0
  360. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.h +103 -0
  361. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +63 -0
  362. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +167 -0
  363. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.c +52 -0
  364. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.h +134 -0
  365. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.c +63 -0
  366. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.h +250 -0
  367. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.c +47 -0
  368. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.h +94 -0
  369. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.c +69 -0
  370. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.h +213 -0
  371. data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.c +32 -0
  372. data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.h +42 -0
  373. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.c +71 -0
  374. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.h +218 -0
  375. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.c +54 -0
  376. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.h +146 -0
  377. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +42 -0
  378. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +85 -0
  379. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +96 -0
  380. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +375 -0
  381. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +94 -0
  382. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +433 -0
  383. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.c +64 -0
  384. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +183 -0
  385. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +55 -0
  386. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +168 -0
  387. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +463 -0
  388. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +2606 -0
  389. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c +28 -0
  390. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h +38 -0
  391. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +175 -0
  392. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +880 -0
  393. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +88 -0
  394. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +308 -0
  395. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +191 -0
  396. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +1035 -0
  397. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.c +62 -0
  398. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.h +160 -0
  399. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +38 -0
  400. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +70 -0
  401. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +165 -0
  402. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +755 -0
  403. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +68 -0
  404. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +210 -0
  405. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +138 -0
  406. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +631 -0
  407. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.c +48 -0
  408. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.h +112 -0
  409. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.c +76 -0
  410. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.h +249 -0
  411. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.c +74 -0
  412. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.h +214 -0
  413. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +62 -0
  414. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +188 -0
  415. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +49 -0
  416. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +117 -0
  417. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +48 -0
  418. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +113 -0
  419. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +47 -0
  420. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +100 -0
  421. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +80 -0
  422. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +234 -0
  423. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +67 -0
  424. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +218 -0
  425. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +60 -0
  426. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +170 -0
  427. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +78 -0
  428. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +294 -0
  429. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +107 -0
  430. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +429 -0
  431. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +107 -0
  432. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +419 -0
  433. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.c +66 -0
  434. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.h +201 -0
  435. data/src/core/ext/upb-generated/envoy/type/v3/http.upb.c +26 -0
  436. data/src/core/ext/upb-generated/envoy/type/v3/http.upb.h +39 -0
  437. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.c +42 -0
  438. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.h +139 -0
  439. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.c +54 -0
  440. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +139 -0
  441. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +66 -0
  442. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +196 -0
  443. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_unit.upb.c +26 -0
  444. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_unit.upb.h +41 -0
  445. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +43 -0
  446. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +97 -0
  447. data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.c +51 -0
  448. data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.h +127 -0
  449. data/src/core/ext/upb-generated/google/api/annotations.upb.c +40 -0
  450. data/src/core/ext/upb-generated/google/api/annotations.upb.h +53 -0
  451. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +271 -0
  452. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +1236 -0
  453. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +283 -0
  454. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +1338 -0
  455. data/src/core/ext/upb-generated/google/api/http.upb.c +81 -0
  456. data/src/core/ext/upb-generated/google/api/http.upb.h +331 -0
  457. data/src/core/ext/upb-generated/google/api/httpbody.upb.c +46 -0
  458. data/src/core/ext/upb-generated/google/api/httpbody.upb.h +111 -0
  459. data/src/core/ext/upb-generated/google/protobuf/any.upb.c +40 -0
  460. data/src/core/ext/upb-generated/google/protobuf/any.upb.h +88 -0
  461. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +577 -0
  462. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +3095 -0
  463. data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +40 -0
  464. data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +88 -0
  465. data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +35 -0
  466. data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +70 -0
  467. data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +95 -0
  468. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +317 -0
  469. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +40 -0
  470. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +88 -0
  471. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +127 -0
  472. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +439 -0
  473. data/src/core/ext/upb-generated/google/rpc/status.upb.c +46 -0
  474. data/src/core/ext/upb-generated/google/rpc/status.upb.h +111 -0
  475. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.c +84 -0
  476. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.h +319 -0
  477. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +63 -0
  478. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +184 -0
  479. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +240 -0
  480. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +1133 -0
  481. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +57 -0
  482. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +174 -0
  483. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +50 -0
  484. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +131 -0
  485. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +161 -0
  486. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +669 -0
  487. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +70 -0
  488. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +208 -0
  489. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.c +175 -0
  490. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.h +764 -0
  491. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +110 -0
  492. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +278 -0
  493. data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +55 -0
  494. data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +108 -0
  495. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.c +38 -0
  496. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +46 -0
  497. data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +54 -0
  498. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +115 -0
  499. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +53 -0
  500. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +99 -0
  501. data/src/core/ext/upb-generated/validate/validate.upb.c +560 -0
  502. data/src/core/ext/upb-generated/validate/validate.upb.h +4013 -0
  503. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.c +110 -0
  504. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.h +278 -0
  505. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.c +55 -0
  506. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.h +108 -0
  507. data/src/core/ext/upb-generated/xds/annotations/v3/sensitive.upb.c +38 -0
  508. data/src/core/ext/upb-generated/xds/annotations/v3/sensitive.upb.h +46 -0
  509. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +105 -0
  510. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +290 -0
  511. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.c +53 -0
  512. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.h +99 -0
  513. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +41 -0
  514. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +79 -0
  515. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +66 -0
  516. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +200 -0
  517. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +56 -0
  518. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +115 -0
  519. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.c +46 -0
  520. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.h +103 -0
  521. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +49 -0
  522. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +127 -0
  523. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +68 -0
  524. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +240 -0
  525. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +49 -0
  526. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +121 -0
  527. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +73 -0
  528. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +187 -0
  529. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.c +207 -0
  530. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.h +878 -0
  531. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.c +52 -0
  532. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.h +143 -0
  533. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.c +65 -0
  534. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.h +218 -0
  535. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.c +46 -0
  536. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +103 -0
  537. data/src/core/ext/upbdefs-generated/envoy/admin/v3/certs.upbdefs.c +84 -0
  538. data/src/core/ext/upbdefs-generated/envoy/admin/v3/certs.upbdefs.h +55 -0
  539. data/src/core/ext/upbdefs-generated/envoy/admin/v3/clusters.upbdefs.c +127 -0
  540. data/src/core/ext/upbdefs-generated/envoy/admin/v3/clusters.upbdefs.h +50 -0
  541. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.c +309 -0
  542. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.h +140 -0
  543. data/src/core/ext/upbdefs-generated/envoy/admin/v3/init_dump.upbdefs.c +43 -0
  544. data/src/core/ext/upbdefs-generated/envoy/admin/v3/init_dump.upbdefs.h +40 -0
  545. data/src/core/ext/upbdefs-generated/envoy/admin/v3/listeners.upbdefs.c +53 -0
  546. data/src/core/ext/upbdefs-generated/envoy/admin/v3/listeners.upbdefs.h +40 -0
  547. data/src/core/ext/upbdefs-generated/envoy/admin/v3/memory.upbdefs.c +49 -0
  548. data/src/core/ext/upbdefs-generated/envoy/admin/v3/memory.upbdefs.h +35 -0
  549. data/src/core/ext/upbdefs-generated/envoy/admin/v3/metrics.upbdefs.c +46 -0
  550. data/src/core/ext/upbdefs-generated/envoy/admin/v3/metrics.upbdefs.h +35 -0
  551. data/src/core/ext/upbdefs-generated/envoy/admin/v3/mutex_stats.upbdefs.c +46 -0
  552. data/src/core/ext/upbdefs-generated/envoy/admin/v3/mutex_stats.upbdefs.h +35 -0
  553. data/src/core/ext/upbdefs-generated/envoy/admin/v3/server_info.upbdefs.c +142 -0
  554. data/src/core/ext/upbdefs-generated/envoy/admin/v3/server_info.upbdefs.h +40 -0
  555. data/src/core/ext/upbdefs-generated/envoy/admin/v3/tap.upbdefs.c +51 -0
  556. data/src/core/ext/upbdefs-generated/envoy/admin/v3/tap.upbdefs.h +35 -0
  557. data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.c +48 -0
  558. data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.h +30 -0
  559. data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.c +38 -0
  560. data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.h +35 -0
  561. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +222 -0
  562. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.h +105 -0
  563. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +393 -0
  564. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.h +120 -0
  565. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.c +98 -0
  566. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.h +45 -0
  567. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +557 -0
  568. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +155 -0
  569. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.c +51 -0
  570. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.h +35 -0
  571. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.c +138 -0
  572. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.h +35 -0
  573. data/src/core/ext/upbdefs-generated/envoy/config/common/matcher/v3/matcher.upbdefs.c +206 -0
  574. data/src/core/ext/upbdefs-generated/envoy/config/common/matcher/v3/matcher.upbdefs.h +105 -0
  575. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.c +112 -0
  576. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.h +65 -0
  577. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.c +54 -0
  578. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.h +35 -0
  579. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +267 -0
  580. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.h +150 -0
  581. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +168 -0
  582. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.h +65 -0
  583. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.c +53 -0
  584. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.h +35 -0
  585. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.c +47 -0
  586. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.h +35 -0
  587. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_method_list.upbdefs.c +53 -0
  588. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_method_list.upbdefs.h +40 -0
  589. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.c +235 -0
  590. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.h +100 -0
  591. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +228 -0
  592. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.h +75 -0
  593. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.c +53 -0
  594. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.h +35 -0
  595. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +298 -0
  596. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.h +110 -0
  597. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.c +41 -0
  598. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.h +35 -0
  599. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/resolver.upbdefs.c +55 -0
  600. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/resolver.upbdefs.h +40 -0
  601. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.c +57 -0
  602. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.h +35 -0
  603. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +70 -0
  604. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.h +35 -0
  605. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/udp_socket_config.upbdefs.c +49 -0
  606. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/udp_socket_config.upbdefs.h +35 -0
  607. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.c +99 -0
  608. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.h +50 -0
  609. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +128 -0
  610. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.h +60 -0
  611. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.c +136 -0
  612. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.h +55 -0
  613. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.c +48 -0
  614. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.h +35 -0
  615. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +197 -0
  616. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.h +60 -0
  617. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.c +190 -0
  618. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.h +65 -0
  619. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.c +88 -0
  620. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.h +35 -0
  621. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +63 -0
  622. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.h +40 -0
  623. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/metrics_service.upbdefs.c +69 -0
  624. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/metrics_service.upbdefs.h +35 -0
  625. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.c +125 -0
  626. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.h +70 -0
  627. data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.c +134 -0
  628. data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.h +75 -0
  629. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.c +190 -0
  630. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.h +70 -0
  631. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +115 -0
  632. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.h +45 -0
  633. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +896 -0
  634. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +295 -0
  635. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.c +77 -0
  636. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.h +45 -0
  637. data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.c +188 -0
  638. data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.h +85 -0
  639. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/datadog.upbdefs.c +54 -0
  640. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/datadog.upbdefs.h +35 -0
  641. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/dynamic_ot.upbdefs.c +57 -0
  642. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/dynamic_ot.upbdefs.h +35 -0
  643. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.c +57 -0
  644. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.h +40 -0
  645. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/lightstep.upbdefs.c +72 -0
  646. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/lightstep.upbdefs.h +35 -0
  647. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opencensus.upbdefs.c +99 -0
  648. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opencensus.upbdefs.h +35 -0
  649. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/service.upbdefs.c +52 -0
  650. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/service.upbdefs.h +35 -0
  651. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/skywalking.upbdefs.c +71 -0
  652. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/skywalking.upbdefs.h +40 -0
  653. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/trace.upbdefs.c +57 -0
  654. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/trace.upbdefs.h +30 -0
  655. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/xray.upbdefs.c +75 -0
  656. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/xray.upbdefs.h +40 -0
  657. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/zipkin.upbdefs.c +77 -0
  658. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/zipkin.upbdefs.h +35 -0
  659. data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.c +50 -0
  660. data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.h +35 -0
  661. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.c +92 -0
  662. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.h +55 -0
  663. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.c +117 -0
  664. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.h +45 -0
  665. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.c +59 -0
  666. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.h +40 -0
  667. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c +78 -0
  668. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.h +35 -0
  669. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +551 -0
  670. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h +130 -0
  671. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.c +48 -0
  672. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.h +30 -0
  673. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +210 -0
  674. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.h +65 -0
  675. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c +91 -0
  676. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.h +45 -0
  677. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +254 -0
  678. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.h +65 -0
  679. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upbdefs.c +58 -0
  680. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upbdefs.h +40 -0
  681. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.c +58 -0
  682. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.h +35 -0
  683. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +128 -0
  684. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.h +65 -0
  685. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.c +76 -0
  686. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.h +40 -0
  687. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +153 -0
  688. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.h +55 -0
  689. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/cookie.upbdefs.c +46 -0
  690. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/cookie.upbdefs.h +35 -0
  691. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/path_transformation.upbdefs.c +56 -0
  692. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/path_transformation.upbdefs.h +50 -0
  693. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/http_inputs.upbdefs.c +52 -0
  694. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/http_inputs.upbdefs.h +50 -0
  695. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.c +61 -0
  696. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.h +40 -0
  697. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.c +54 -0
  698. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.h +35 -0
  699. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.c +52 -0
  700. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.h +35 -0
  701. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.c +51 -0
  702. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.h +35 -0
  703. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +70 -0
  704. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.h +45 -0
  705. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.c +65 -0
  706. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.h +40 -0
  707. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.c +58 -0
  708. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.h +40 -0
  709. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.c +75 -0
  710. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.h +45 -0
  711. data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.c +78 -0
  712. data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.h +65 -0
  713. data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.c +85 -0
  714. data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.h +55 -0
  715. data/src/core/ext/upbdefs-generated/envoy/type/v3/hash_policy.upbdefs.c +53 -0
  716. data/src/core/ext/upbdefs-generated/envoy/type/v3/hash_policy.upbdefs.h +45 -0
  717. data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.c +36 -0
  718. data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.h +30 -0
  719. data/src/core/ext/upbdefs-generated/envoy/type/v3/http_status.upbdefs.c +94 -0
  720. data/src/core/ext/upbdefs-generated/envoy/type/v3/http_status.upbdefs.h +35 -0
  721. data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.c +54 -0
  722. data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.h +40 -0
  723. data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.c +48 -0
  724. data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.h +45 -0
  725. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_unit.upbdefs.c +38 -0
  726. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_unit.upbdefs.h +30 -0
  727. data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.c +44 -0
  728. data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.h +35 -0
  729. data/src/core/ext/upbdefs-generated/envoy/type/v3/token_bucket.upbdefs.c +57 -0
  730. data/src/core/ext/upbdefs-generated/envoy/type/v3/token_bucket.upbdefs.h +35 -0
  731. data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.c +40 -0
  732. data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.h +30 -0
  733. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/checked.upbdefs.c +154 -0
  734. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/checked.upbdefs.h +95 -0
  735. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/syntax.upbdefs.c +153 -0
  736. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/syntax.upbdefs.h +100 -0
  737. data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.c +52 -0
  738. data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.h +45 -0
  739. data/src/core/ext/upbdefs-generated/google/api/httpbody.upbdefs.c +39 -0
  740. data/src/core/ext/upbdefs-generated/google/api/httpbody.upbdefs.h +35 -0
  741. data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.c +34 -0
  742. data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.h +35 -0
  743. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +329 -0
  744. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.h +165 -0
  745. data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.c +35 -0
  746. data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.h +35 -0
  747. data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.c +32 -0
  748. data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.h +35 -0
  749. data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.c +54 -0
  750. data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.h +50 -0
  751. data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.c +35 -0
  752. data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.h +35 -0
  753. data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.c +45 -0
  754. data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.h +75 -0
  755. data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.c +37 -0
  756. data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.h +35 -0
  757. data/src/core/ext/upbdefs-generated/opencensus/proto/trace/v1/trace_config.upbdefs.c +67 -0
  758. data/src/core/ext/upbdefs-generated/opencensus/proto/trace/v1/trace_config.upbdefs.h +50 -0
  759. data/src/core/ext/upbdefs-generated/src/proto/grpc/lookup/v1/rls_config.upbdefs.c +99 -0
  760. data/src/core/ext/upbdefs-generated/src/proto/grpc/lookup/v1/rls_config.upbdefs.h +75 -0
  761. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.c +62 -0
  762. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.h +45 -0
  763. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.c +47 -0
  764. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.h +35 -0
  765. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.c +34 -0
  766. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.h +30 -0
  767. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.c +46 -0
  768. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.h +35 -0
  769. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.c +39 -0
  770. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.h +35 -0
  771. data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.c +283 -0
  772. data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.h +145 -0
  773. data/src/core/ext/upbdefs-generated/xds/annotations/v3/migrate.upbdefs.c +63 -0
  774. data/src/core/ext/upbdefs-generated/xds/annotations/v3/migrate.upbdefs.h +45 -0
  775. data/src/core/ext/upbdefs-generated/xds/annotations/v3/security.upbdefs.c +47 -0
  776. data/src/core/ext/upbdefs-generated/xds/annotations/v3/security.upbdefs.h +35 -0
  777. data/src/core/ext/upbdefs-generated/xds/annotations/v3/sensitive.upbdefs.c +35 -0
  778. data/src/core/ext/upbdefs-generated/xds/annotations/v3/sensitive.upbdefs.h +30 -0
  779. data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.c +64 -0
  780. data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.h +50 -0
  781. data/src/core/ext/upbdefs-generated/xds/annotations/v3/versioning.upbdefs.c +40 -0
  782. data/src/core/ext/upbdefs-generated/xds/annotations/v3/versioning.upbdefs.h +35 -0
  783. data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.c +38 -0
  784. data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.h +35 -0
  785. data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.c +56 -0
  786. data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.h +40 -0
  787. data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.c +39 -0
  788. data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.h +40 -0
  789. data/src/core/ext/upbdefs-generated/xds/core/v3/extension.upbdefs.c +41 -0
  790. data/src/core/ext/upbdefs-generated/xds/core/v3/extension.upbdefs.h +35 -0
  791. data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.c +45 -0
  792. data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.h +35 -0
  793. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.c +61 -0
  794. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.h +40 -0
  795. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.c +46 -0
  796. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.h +35 -0
  797. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/matcher.upbdefs.c +126 -0
  798. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/matcher.upbdefs.h +80 -0
  799. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/regex.upbdefs.c +40 -0
  800. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/regex.upbdefs.h +40 -0
  801. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/string.upbdefs.c +52 -0
  802. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/string.upbdefs.h +40 -0
  803. data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.c +40 -0
  804. data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.h +35 -0
  805. data/src/core/ext/xds/certificate_provider_factory.h +61 -0
  806. data/src/core/ext/xds/certificate_provider_registry.cc +103 -0
  807. data/src/core/ext/xds/certificate_provider_registry.h +57 -0
  808. data/src/core/ext/xds/certificate_provider_store.cc +95 -0
  809. data/src/core/ext/xds/certificate_provider_store.h +121 -0
  810. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +144 -0
  811. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +69 -0
  812. data/src/core/ext/xds/upb_utils.h +67 -0
  813. data/src/core/ext/xds/xds_api.cc +730 -0
  814. data/src/core/ext/xds/xds_api.h +191 -0
  815. data/src/core/ext/xds/xds_bootstrap.cc +570 -0
  816. data/src/core/ext/xds/xds_bootstrap.h +143 -0
  817. data/src/core/ext/xds/xds_certificate_provider.cc +407 -0
  818. data/src/core/ext/xds/xds_certificate_provider.h +159 -0
  819. data/src/core/ext/xds/xds_channel_args.h +32 -0
  820. data/src/core/ext/xds/xds_channel_stack_modifier.cc +109 -0
  821. data/src/core/ext/xds/xds_channel_stack_modifier.h +53 -0
  822. data/src/core/ext/xds/xds_client.cc +2512 -0
  823. data/src/core/ext/xds/xds_client.h +348 -0
  824. data/src/core/ext/xds/xds_client_stats.cc +160 -0
  825. data/src/core/ext/xds/xds_client_stats.h +241 -0
  826. data/src/core/ext/xds/xds_cluster.cc +453 -0
  827. data/src/core/ext/xds/xds_cluster.h +108 -0
  828. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +142 -0
  829. data/src/core/ext/xds/xds_cluster_specifier_plugin.h +79 -0
  830. data/src/core/ext/xds/xds_common_types.cc +388 -0
  831. data/src/core/ext/xds/xds_common_types.h +95 -0
  832. data/src/core/ext/xds/xds_endpoint.cc +371 -0
  833. data/src/core/ext/xds/xds_endpoint.h +135 -0
  834. data/src/core/ext/xds/xds_http_fault_filter.cc +227 -0
  835. data/src/core/ext/xds/xds_http_fault_filter.h +64 -0
  836. data/src/core/ext/xds/xds_http_filters.cc +122 -0
  837. data/src/core/ext/xds/xds_http_filters.h +133 -0
  838. data/src/core/ext/xds/xds_http_rbac_filter.cc +563 -0
  839. data/src/core/ext/xds/xds_http_rbac_filter.h +54 -0
  840. data/src/core/ext/xds/xds_listener.cc +1039 -0
  841. data/src/core/ext/xds/xds_listener.h +220 -0
  842. data/src/core/ext/xds/xds_resource_type.cc +33 -0
  843. data/src/core/ext/xds/xds_resource_type.h +98 -0
  844. data/src/core/ext/xds/xds_resource_type_impl.h +87 -0
  845. data/src/core/ext/xds/xds_route_config.cc +1122 -0
  846. data/src/core/ext/xds/xds_route_config.h +218 -0
  847. data/src/core/ext/xds/xds_routing.cc +250 -0
  848. data/src/core/ext/xds/xds_routing.h +101 -0
  849. data/src/core/ext/xds/xds_server_config_fetcher.cc +1314 -0
  850. data/src/core/lib/address_utils/parse_address.cc +340 -0
  851. data/src/core/lib/address_utils/parse_address.h +82 -0
  852. data/src/core/lib/address_utils/sockaddr_utils.cc +409 -0
  853. data/src/core/lib/address_utils/sockaddr_utils.h +95 -0
  854. data/src/core/lib/avl/avl.h +458 -0
  855. data/src/core/lib/backoff/backoff.cc +49 -0
  856. data/src/core/lib/backoff/backoff.h +89 -0
  857. data/src/core/lib/channel/call_finalization.h +86 -0
  858. data/src/core/lib/channel/call_tracer.h +88 -0
  859. data/src/core/lib/channel/channel_args.cc +538 -0
  860. data/src/core/lib/channel/channel_args.h +347 -0
  861. data/src/core/lib/channel/channel_args_preconditioning.cc +42 -0
  862. data/src/core/lib/channel/channel_args_preconditioning.h +61 -0
  863. data/src/core/lib/channel/channel_stack.cc +274 -0
  864. data/src/core/lib/channel/channel_stack.h +345 -0
  865. data/src/core/lib/channel/channel_stack_builder.cc +64 -0
  866. data/src/core/lib/channel/channel_stack_builder.h +127 -0
  867. data/src/core/lib/channel/channel_stack_builder_impl.cc +102 -0
  868. data/src/core/lib/channel/channel_stack_builder_impl.h +48 -0
  869. data/src/core/lib/channel/channel_trace.cc +190 -0
  870. data/src/core/lib/channel/channel_trace.h +135 -0
  871. data/src/core/lib/channel/channelz.cc +597 -0
  872. data/src/core/lib/channel/channelz.h +357 -0
  873. data/src/core/lib/channel/channelz_registry.cc +285 -0
  874. data/src/core/lib/channel/channelz_registry.h +99 -0
  875. data/src/core/lib/channel/connected_channel.cc +250 -0
  876. data/src/core/lib/channel/connected_channel.h +34 -0
  877. data/src/core/lib/channel/context.h +63 -0
  878. data/src/core/lib/channel/handshaker.cc +222 -0
  879. data/src/core/lib/channel/handshaker.h +161 -0
  880. data/src/core/lib/channel/handshaker_factory.h +50 -0
  881. data/src/core/lib/channel/handshaker_registry.cc +50 -0
  882. data/src/core/lib/channel/handshaker_registry.h +71 -0
  883. data/src/core/lib/channel/promise_based_filter.cc +1002 -0
  884. data/src/core/lib/channel/promise_based_filter.h +437 -0
  885. data/src/core/lib/channel/status_util.cc +109 -0
  886. data/src/core/lib/channel/status_util.h +67 -0
  887. data/src/core/lib/compression/compression.cc +91 -0
  888. data/src/core/lib/compression/compression_internal.cc +217 -0
  889. data/src/core/lib/compression/compression_internal.h +92 -0
  890. data/src/core/lib/compression/message_compress.cc +192 -0
  891. data/src/core/lib/compression/message_compress.h +40 -0
  892. data/src/core/lib/config/core_configuration.cc +104 -0
  893. data/src/core/lib/config/core_configuration.h +196 -0
  894. data/src/core/lib/debug/stats.cc +172 -0
  895. data/src/core/lib/debug/stats.h +71 -0
  896. data/src/core/lib/debug/stats_data.cc +685 -0
  897. data/src/core/lib/debug/stats_data.h +553 -0
  898. data/src/core/lib/debug/trace.cc +155 -0
  899. data/src/core/lib/debug/trace.h +132 -0
  900. data/src/core/lib/event_engine/channel_args_endpoint_config.cc +46 -0
  901. data/src/core/lib/event_engine/channel_args_endpoint_config.h +42 -0
  902. data/src/core/lib/event_engine/default_event_engine_factory.cc +27 -0
  903. data/src/core/lib/event_engine/event_engine.cc +52 -0
  904. data/src/core/lib/event_engine/event_engine_factory.h +36 -0
  905. data/src/core/lib/event_engine/memory_allocator.cc +66 -0
  906. data/src/core/lib/event_engine/resolved_address.cc +39 -0
  907. data/src/core/lib/event_engine/sockaddr.cc +40 -0
  908. data/src/core/lib/event_engine/sockaddr.h +44 -0
  909. data/src/core/lib/gpr/alloc.cc +76 -0
  910. data/src/core/lib/gpr/alloc.h +28 -0
  911. data/src/core/lib/gpr/atm.cc +35 -0
  912. data/src/core/lib/gpr/cpu_iphone.cc +44 -0
  913. data/src/core/lib/gpr/cpu_linux.cc +82 -0
  914. data/src/core/lib/gpr/cpu_posix.cc +83 -0
  915. data/src/core/lib/gpr/cpu_windows.cc +33 -0
  916. data/src/core/lib/gpr/env.h +40 -0
  917. data/src/core/lib/gpr/env_linux.cc +75 -0
  918. data/src/core/lib/gpr/env_posix.cc +46 -0
  919. data/src/core/lib/gpr/env_windows.cc +74 -0
  920. data/src/core/lib/gpr/log.cc +140 -0
  921. data/src/core/lib/gpr/log_android.cc +77 -0
  922. data/src/core/lib/gpr/log_linux.cc +114 -0
  923. data/src/core/lib/gpr/log_posix.cc +110 -0
  924. data/src/core/lib/gpr/log_windows.cc +116 -0
  925. data/src/core/lib/gpr/murmur_hash.cc +82 -0
  926. data/src/core/lib/gpr/murmur_hash.h +29 -0
  927. data/src/core/lib/gpr/spinlock.h +53 -0
  928. data/src/core/lib/gpr/string.cc +343 -0
  929. data/src/core/lib/gpr/string.h +112 -0
  930. data/src/core/lib/gpr/string_posix.cc +72 -0
  931. data/src/core/lib/gpr/string_util_windows.cc +82 -0
  932. data/src/core/lib/gpr/string_windows.cc +69 -0
  933. data/src/core/lib/gpr/string_windows.h +32 -0
  934. data/src/core/lib/gpr/sync.cc +124 -0
  935. data/src/core/lib/gpr/sync_abseil.cc +114 -0
  936. data/src/core/lib/gpr/sync_posix.cc +171 -0
  937. data/src/core/lib/gpr/sync_windows.cc +120 -0
  938. data/src/core/lib/gpr/time.cc +265 -0
  939. data/src/core/lib/gpr/time_posix.cc +186 -0
  940. data/src/core/lib/gpr/time_precise.cc +168 -0
  941. data/src/core/lib/gpr/time_precise.h +70 -0
  942. data/src/core/lib/gpr/time_windows.cc +99 -0
  943. data/src/core/lib/gpr/tls.h +158 -0
  944. data/src/core/lib/gpr/tmpfile.h +32 -0
  945. data/src/core/lib/gpr/tmpfile_msys.cc +58 -0
  946. data/src/core/lib/gpr/tmpfile_posix.cc +69 -0
  947. data/src/core/lib/gpr/tmpfile_windows.cc +69 -0
  948. data/src/core/lib/gpr/useful.h +131 -0
  949. data/src/core/lib/gpr/wrap_memcpy.cc +43 -0
  950. data/src/core/lib/gprpp/atomic_utils.h +47 -0
  951. data/src/core/lib/gprpp/bitset.h +207 -0
  952. data/src/core/lib/gprpp/capture.h +76 -0
  953. data/src/core/lib/gprpp/chunked_vector.h +253 -0
  954. data/src/core/lib/gprpp/construct_destruct.h +39 -0
  955. data/src/core/lib/gprpp/cpp_impl_of.h +49 -0
  956. data/src/core/lib/gprpp/debug_location.h +55 -0
  957. data/src/core/lib/gprpp/dual_ref_counted.h +330 -0
  958. data/src/core/lib/gprpp/examine_stack.cc +43 -0
  959. data/src/core/lib/gprpp/examine_stack.h +46 -0
  960. data/src/core/lib/gprpp/fork.cc +244 -0
  961. data/src/core/lib/gprpp/fork.h +103 -0
  962. data/src/core/lib/gprpp/global_config.h +95 -0
  963. data/src/core/lib/gprpp/global_config_custom.h +29 -0
  964. data/src/core/lib/gprpp/global_config_env.cc +137 -0
  965. data/src/core/lib/gprpp/global_config_env.h +131 -0
  966. data/src/core/lib/gprpp/global_config_generic.h +44 -0
  967. data/src/core/lib/gprpp/host_port.cc +112 -0
  968. data/src/core/lib/gprpp/host_port.h +56 -0
  969. data/src/core/lib/gprpp/manual_constructor.h +215 -0
  970. data/src/core/lib/gprpp/match.h +73 -0
  971. data/src/core/lib/gprpp/memory.h +57 -0
  972. data/src/core/lib/gprpp/mpscq.cc +108 -0
  973. data/src/core/lib/gprpp/mpscq.h +99 -0
  974. data/src/core/lib/gprpp/orphanable.h +125 -0
  975. data/src/core/lib/gprpp/overload.h +59 -0
  976. data/src/core/lib/gprpp/ref_counted.h +351 -0
  977. data/src/core/lib/gprpp/ref_counted_ptr.h +351 -0
  978. data/src/core/lib/gprpp/single_set_ptr.h +87 -0
  979. data/src/core/lib/gprpp/stat.h +38 -0
  980. data/src/core/lib/gprpp/stat_posix.cc +49 -0
  981. data/src/core/lib/gprpp/stat_windows.cc +48 -0
  982. data/src/core/lib/gprpp/status_helper.cc +435 -0
  983. data/src/core/lib/gprpp/status_helper.h +181 -0
  984. data/src/core/lib/gprpp/sync.h +198 -0
  985. data/src/core/lib/gprpp/table.h +434 -0
  986. data/src/core/lib/gprpp/thd.h +174 -0
  987. data/src/core/lib/gprpp/thd_posix.cc +209 -0
  988. data/src/core/lib/gprpp/thd_windows.cc +171 -0
  989. data/src/core/lib/gprpp/time.cc +198 -0
  990. data/src/core/lib/gprpp/time.h +292 -0
  991. data/src/core/lib/gprpp/time_util.cc +77 -0
  992. data/src/core/lib/gprpp/time_util.h +42 -0
  993. data/src/core/lib/http/format_request.cc +107 -0
  994. data/src/core/lib/http/format_request.h +36 -0
  995. data/src/core/lib/http/httpcli.cc +396 -0
  996. data/src/core/lib/http/httpcli.h +223 -0
  997. data/src/core/lib/http/httpcli_security_connector.cc +204 -0
  998. data/src/core/lib/http/httpcli_ssl_credentials.h +37 -0
  999. data/src/core/lib/http/parser.cc +463 -0
  1000. data/src/core/lib/http/parser.h +127 -0
  1001. data/src/core/lib/iomgr/block_annotate.h +57 -0
  1002. data/src/core/lib/iomgr/buffer_list.cc +307 -0
  1003. data/src/core/lib/iomgr/buffer_list.h +163 -0
  1004. data/src/core/lib/iomgr/call_combiner.cc +291 -0
  1005. data/src/core/lib/iomgr/call_combiner.h +215 -0
  1006. data/src/core/lib/iomgr/cfstream_handle.cc +210 -0
  1007. data/src/core/lib/iomgr/cfstream_handle.h +90 -0
  1008. data/src/core/lib/iomgr/closure.h +276 -0
  1009. data/src/core/lib/iomgr/combiner.cc +350 -0
  1010. data/src/core/lib/iomgr/combiner.h +89 -0
  1011. data/src/core/lib/iomgr/dualstack_socket_posix.cc +48 -0
  1012. data/src/core/lib/iomgr/dynamic_annotations.h +67 -0
  1013. data/src/core/lib/iomgr/endpoint.cc +67 -0
  1014. data/src/core/lib/iomgr/endpoint.h +107 -0
  1015. data/src/core/lib/iomgr/endpoint_cfstream.cc +372 -0
  1016. data/src/core/lib/iomgr/endpoint_cfstream.h +49 -0
  1017. data/src/core/lib/iomgr/endpoint_pair.h +34 -0
  1018. data/src/core/lib/iomgr/endpoint_pair_event_engine.cc +32 -0
  1019. data/src/core/lib/iomgr/endpoint_pair_posix.cc +75 -0
  1020. data/src/core/lib/iomgr/endpoint_pair_windows.cc +86 -0
  1021. data/src/core/lib/iomgr/error.cc +988 -0
  1022. data/src/core/lib/iomgr/error.h +440 -0
  1023. data/src/core/lib/iomgr/error_cfstream.cc +59 -0
  1024. data/src/core/lib/iomgr/error_cfstream.h +31 -0
  1025. data/src/core/lib/iomgr/error_internal.h +66 -0
  1026. data/src/core/lib/iomgr/ev_apple.cc +360 -0
  1027. data/src/core/lib/iomgr/ev_apple.h +43 -0
  1028. data/src/core/lib/iomgr/ev_epoll1_linux.cc +1365 -0
  1029. data/src/core/lib/iomgr/ev_epoll1_linux.h +31 -0
  1030. data/src/core/lib/iomgr/ev_poll_posix.cc +1430 -0
  1031. data/src/core/lib/iomgr/ev_poll_posix.h +29 -0
  1032. data/src/core/lib/iomgr/ev_posix.cc +416 -0
  1033. data/src/core/lib/iomgr/ev_posix.h +207 -0
  1034. data/src/core/lib/iomgr/ev_windows.cc +30 -0
  1035. data/src/core/lib/iomgr/event_engine/closure.cc +77 -0
  1036. data/src/core/lib/iomgr/event_engine/closure.h +42 -0
  1037. data/src/core/lib/iomgr/event_engine/endpoint.cc +172 -0
  1038. data/src/core/lib/iomgr/event_engine/endpoint.h +52 -0
  1039. data/src/core/lib/iomgr/event_engine/iomgr.cc +85 -0
  1040. data/src/core/lib/iomgr/event_engine/pollset.cc +87 -0
  1041. data/src/core/lib/iomgr/event_engine/pollset.h +25 -0
  1042. data/src/core/lib/iomgr/event_engine/promise.h +51 -0
  1043. data/src/core/lib/iomgr/event_engine/resolved_address_internal.cc +47 -0
  1044. data/src/core/lib/iomgr/event_engine/resolved_address_internal.h +37 -0
  1045. data/src/core/lib/iomgr/event_engine/resolver.cc +133 -0
  1046. data/src/core/lib/iomgr/event_engine/resolver.h +56 -0
  1047. data/src/core/lib/iomgr/event_engine/tcp.cc +296 -0
  1048. data/src/core/lib/iomgr/event_engine/timer.cc +62 -0
  1049. data/src/core/lib/iomgr/exec_ctx.cc +155 -0
  1050. data/src/core/lib/iomgr/exec_ctx.h +359 -0
  1051. data/src/core/lib/iomgr/executor/mpmcqueue.cc +182 -0
  1052. data/src/core/lib/iomgr/executor/mpmcqueue.h +171 -0
  1053. data/src/core/lib/iomgr/executor/threadpool.cc +136 -0
  1054. data/src/core/lib/iomgr/executor/threadpool.h +150 -0
  1055. data/src/core/lib/iomgr/executor.cc +461 -0
  1056. data/src/core/lib/iomgr/executor.h +122 -0
  1057. data/src/core/lib/iomgr/fork_posix.cc +120 -0
  1058. data/src/core/lib/iomgr/fork_windows.cc +41 -0
  1059. data/src/core/lib/iomgr/gethostname.h +26 -0
  1060. data/src/core/lib/iomgr/gethostname_fallback.cc +30 -0
  1061. data/src/core/lib/iomgr/gethostname_host_name_max.cc +40 -0
  1062. data/src/core/lib/iomgr/gethostname_sysconf.cc +40 -0
  1063. data/src/core/lib/iomgr/grpc_if_nametoindex.h +30 -0
  1064. data/src/core/lib/iomgr/grpc_if_nametoindex_posix.cc +42 -0
  1065. data/src/core/lib/iomgr/grpc_if_nametoindex_unsupported.cc +38 -0
  1066. data/src/core/lib/iomgr/internal_errqueue.cc +68 -0
  1067. data/src/core/lib/iomgr/internal_errqueue.h +191 -0
  1068. data/src/core/lib/iomgr/iocp_windows.cc +158 -0
  1069. data/src/core/lib/iomgr/iocp_windows.h +48 -0
  1070. data/src/core/lib/iomgr/iomgr.cc +196 -0
  1071. data/src/core/lib/iomgr/iomgr.h +60 -0
  1072. data/src/core/lib/iomgr/iomgr_internal.cc +53 -0
  1073. data/src/core/lib/iomgr/iomgr_internal.h +74 -0
  1074. data/src/core/lib/iomgr/iomgr_posix.cc +90 -0
  1075. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +200 -0
  1076. data/src/core/lib/iomgr/iomgr_windows.cc +105 -0
  1077. data/src/core/lib/iomgr/load_file.cc +81 -0
  1078. data/src/core/lib/iomgr/load_file.h +35 -0
  1079. data/src/core/lib/iomgr/lockfree_event.cc +278 -0
  1080. data/src/core/lib/iomgr/lockfree_event.h +72 -0
  1081. data/src/core/lib/iomgr/nameser.h +106 -0
  1082. data/src/core/lib/iomgr/polling_entity.cc +96 -0
  1083. data/src/core/lib/iomgr/polling_entity.h +74 -0
  1084. data/src/core/lib/iomgr/pollset.cc +56 -0
  1085. data/src/core/lib/iomgr/pollset.h +99 -0
  1086. data/src/core/lib/iomgr/pollset_set.cc +55 -0
  1087. data/src/core/lib/iomgr/pollset_set.h +55 -0
  1088. data/src/core/lib/iomgr/pollset_set_windows.cc +52 -0
  1089. data/src/core/lib/iomgr/pollset_set_windows.h +26 -0
  1090. data/src/core/lib/iomgr/pollset_windows.cc +243 -0
  1091. data/src/core/lib/iomgr/pollset_windows.h +70 -0
  1092. data/src/core/lib/iomgr/port.h +216 -0
  1093. data/src/core/lib/iomgr/python_util.h +47 -0
  1094. data/src/core/lib/iomgr/resolve_address.cc +36 -0
  1095. data/src/core/lib/iomgr/resolve_address.h +86 -0
  1096. data/src/core/lib/iomgr/resolve_address_impl.h +59 -0
  1097. data/src/core/lib/iomgr/resolve_address_posix.cc +186 -0
  1098. data/src/core/lib/iomgr/resolve_address_posix.h +47 -0
  1099. data/src/core/lib/iomgr/resolve_address_windows.cc +171 -0
  1100. data/src/core/lib/iomgr/resolve_address_windows.h +47 -0
  1101. data/src/core/lib/iomgr/resolved_address.h +39 -0
  1102. data/src/core/lib/iomgr/sockaddr.h +33 -0
  1103. data/src/core/lib/iomgr/sockaddr_posix.h +55 -0
  1104. data/src/core/lib/iomgr/sockaddr_utils_posix.cc +62 -0
  1105. data/src/core/lib/iomgr/sockaddr_windows.h +55 -0
  1106. data/src/core/lib/iomgr/socket_factory_posix.cc +95 -0
  1107. data/src/core/lib/iomgr/socket_factory_posix.h +69 -0
  1108. data/src/core/lib/iomgr/socket_mutator.cc +97 -0
  1109. data/src/core/lib/iomgr/socket_mutator.h +84 -0
  1110. data/src/core/lib/iomgr/socket_utils.h +47 -0
  1111. data/src/core/lib/iomgr/socket_utils_common_posix.cc +498 -0
  1112. data/src/core/lib/iomgr/socket_utils_linux.cc +42 -0
  1113. data/src/core/lib/iomgr/socket_utils_posix.cc +58 -0
  1114. data/src/core/lib/iomgr/socket_utils_posix.h +163 -0
  1115. data/src/core/lib/iomgr/socket_utils_windows.cc +47 -0
  1116. data/src/core/lib/iomgr/socket_windows.cc +202 -0
  1117. data/src/core/lib/iomgr/socket_windows.h +127 -0
  1118. data/src/core/lib/iomgr/tcp_client.cc +36 -0
  1119. data/src/core/lib/iomgr/tcp_client.h +55 -0
  1120. data/src/core/lib/iomgr/tcp_client_cfstream.cc +197 -0
  1121. data/src/core/lib/iomgr/tcp_client_posix.cc +344 -0
  1122. data/src/core/lib/iomgr/tcp_client_posix.h +69 -0
  1123. data/src/core/lib/iomgr/tcp_client_windows.cc +232 -0
  1124. data/src/core/lib/iomgr/tcp_posix.cc +1902 -0
  1125. data/src/core/lib/iomgr/tcp_posix.h +65 -0
  1126. data/src/core/lib/iomgr/tcp_server.cc +77 -0
  1127. data/src/core/lib/iomgr/tcp_server.h +147 -0
  1128. data/src/core/lib/iomgr/tcp_server_posix.cc +650 -0
  1129. data/src/core/lib/iomgr/tcp_server_utils_posix.h +129 -0
  1130. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +224 -0
  1131. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +176 -0
  1132. data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +36 -0
  1133. data/src/core/lib/iomgr/tcp_server_windows.cc +561 -0
  1134. data/src/core/lib/iomgr/tcp_windows.cc +532 -0
  1135. data/src/core/lib/iomgr/tcp_windows.h +53 -0
  1136. data/src/core/lib/iomgr/time_averaged_stats.cc +64 -0
  1137. data/src/core/lib/iomgr/time_averaged_stats.h +72 -0
  1138. data/src/core/lib/iomgr/timer.cc +46 -0
  1139. data/src/core/lib/iomgr/timer.h +136 -0
  1140. data/src/core/lib/iomgr/timer_generic.cc +737 -0
  1141. data/src/core/lib/iomgr/timer_generic.h +40 -0
  1142. data/src/core/lib/iomgr/timer_heap.cc +134 -0
  1143. data/src/core/lib/iomgr/timer_heap.h +43 -0
  1144. data/src/core/lib/iomgr/timer_manager.cc +364 -0
  1145. data/src/core/lib/iomgr/timer_manager.h +41 -0
  1146. data/src/core/lib/iomgr/unix_sockets_posix.cc +96 -0
  1147. data/src/core/lib/iomgr/unix_sockets_posix.h +46 -0
  1148. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +53 -0
  1149. data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +82 -0
  1150. data/src/core/lib/iomgr/wakeup_fd_nospecial.cc +39 -0
  1151. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +99 -0
  1152. data/src/core/lib/iomgr/wakeup_fd_pipe.h +28 -0
  1153. data/src/core/lib/iomgr/wakeup_fd_posix.cc +70 -0
  1154. data/src/core/lib/iomgr/wakeup_fd_posix.h +98 -0
  1155. data/src/core/lib/iomgr/work_serializer.cc +231 -0
  1156. data/src/core/lib/iomgr/work_serializer.h +93 -0
  1157. data/src/core/lib/json/json.h +250 -0
  1158. data/src/core/lib/json/json_reader.cc +897 -0
  1159. data/src/core/lib/json/json_util.cc +126 -0
  1160. data/src/core/lib/json/json_util.h +154 -0
  1161. data/src/core/lib/json/json_writer.cc +335 -0
  1162. data/src/core/lib/matchers/matchers.cc +327 -0
  1163. data/src/core/lib/matchers/matchers.h +160 -0
  1164. data/src/core/lib/profiling/basic_timers.cc +295 -0
  1165. data/src/core/lib/profiling/stap_timers.cc +50 -0
  1166. data/src/core/lib/profiling/timers.h +94 -0
  1167. data/src/core/lib/promise/activity.cc +121 -0
  1168. data/src/core/lib/promise/activity.h +540 -0
  1169. data/src/core/lib/promise/arena_promise.h +188 -0
  1170. data/src/core/lib/promise/call_push_pull.h +144 -0
  1171. data/src/core/lib/promise/context.h +86 -0
  1172. data/src/core/lib/promise/detail/basic_seq.h +496 -0
  1173. data/src/core/lib/promise/detail/promise_factory.h +189 -0
  1174. data/src/core/lib/promise/detail/promise_like.h +85 -0
  1175. data/src/core/lib/promise/detail/status.h +50 -0
  1176. data/src/core/lib/promise/detail/switch.h +1455 -0
  1177. data/src/core/lib/promise/exec_ctx_wakeup_scheduler.h +48 -0
  1178. data/src/core/lib/promise/intra_activity_waiter.h +49 -0
  1179. data/src/core/lib/promise/latch.h +104 -0
  1180. data/src/core/lib/promise/loop.h +134 -0
  1181. data/src/core/lib/promise/map.h +88 -0
  1182. data/src/core/lib/promise/poll.h +66 -0
  1183. data/src/core/lib/promise/promise.h +95 -0
  1184. data/src/core/lib/promise/race.h +84 -0
  1185. data/src/core/lib/promise/seq.h +89 -0
  1186. data/src/core/lib/promise/sleep.cc +74 -0
  1187. data/src/core/lib/promise/sleep.h +66 -0
  1188. data/src/core/lib/promise/try_seq.h +157 -0
  1189. data/src/core/lib/resolver/resolver.cc +79 -0
  1190. data/src/core/lib/resolver/resolver.h +135 -0
  1191. data/src/core/lib/resolver/resolver_factory.h +76 -0
  1192. data/src/core/lib/resolver/resolver_registry.cc +156 -0
  1193. data/src/core/lib/resolver/resolver_registry.h +113 -0
  1194. data/src/core/lib/resolver/server_address.cc +170 -0
  1195. data/src/core/lib/resolver/server_address.h +144 -0
  1196. data/src/core/lib/resource_quota/api.cc +83 -0
  1197. data/src/core/lib/resource_quota/api.h +40 -0
  1198. data/src/core/lib/resource_quota/arena.cc +107 -0
  1199. data/src/core/lib/resource_quota/arena.h +142 -0
  1200. data/src/core/lib/resource_quota/memory_quota.cc +478 -0
  1201. data/src/core/lib/resource_quota/memory_quota.h +457 -0
  1202. data/src/core/lib/resource_quota/resource_quota.cc +33 -0
  1203. data/src/core/lib/resource_quota/resource_quota.h +66 -0
  1204. data/src/core/lib/resource_quota/thread_quota.cc +43 -0
  1205. data/src/core/lib/resource_quota/thread_quota.h +57 -0
  1206. data/src/core/lib/resource_quota/trace.cc +19 -0
  1207. data/src/core/lib/resource_quota/trace.h +24 -0
  1208. data/src/core/lib/security/authorization/authorization_engine.h +44 -0
  1209. data/src/core/lib/security/authorization/authorization_policy_provider.h +40 -0
  1210. data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +46 -0
  1211. data/src/core/lib/security/authorization/evaluate_args.cc +212 -0
  1212. data/src/core/lib/security/authorization/evaluate_args.h +92 -0
  1213. data/src/core/lib/security/authorization/grpc_authorization_engine.cc +60 -0
  1214. data/src/core/lib/security/authorization/grpc_authorization_engine.h +62 -0
  1215. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +106 -0
  1216. data/src/core/lib/security/authorization/grpc_server_authz_filter.h +50 -0
  1217. data/src/core/lib/security/authorization/matchers.cc +227 -0
  1218. data/src/core/lib/security/authorization/matchers.h +211 -0
  1219. data/src/core/lib/security/authorization/rbac_policy.cc +442 -0
  1220. data/src/core/lib/security/authorization/rbac_policy.h +171 -0
  1221. data/src/core/lib/security/context/security_context.cc +327 -0
  1222. data/src/core/lib/security/context/security_context.h +159 -0
  1223. data/src/core/lib/security/credentials/alts/alts_credentials.cc +112 -0
  1224. data/src/core/lib/security/credentials/alts/alts_credentials.h +119 -0
  1225. data/src/core/lib/security/credentials/alts/check_gcp_environment.cc +72 -0
  1226. data/src/core/lib/security/credentials/alts/check_gcp_environment.h +57 -0
  1227. data/src/core/lib/security/credentials/alts/check_gcp_environment_linux.cc +68 -0
  1228. data/src/core/lib/security/credentials/alts/check_gcp_environment_no_op.cc +33 -0
  1229. data/src/core/lib/security/credentials/alts/check_gcp_environment_windows.cc +102 -0
  1230. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc +127 -0
  1231. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.cc +46 -0
  1232. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.h +75 -0
  1233. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +59 -0
  1234. data/src/core/lib/security/credentials/call_creds_util.cc +87 -0
  1235. data/src/core/lib/security/credentials/call_creds_util.h +42 -0
  1236. data/src/core/lib/security/credentials/channel_creds_registry.h +97 -0
  1237. data/src/core/lib/security/credentials/channel_creds_registry_init.cc +70 -0
  1238. data/src/core/lib/security/credentials/composite/composite_credentials.cc +171 -0
  1239. data/src/core/lib/security/credentials/composite/composite_credentials.h +119 -0
  1240. data/src/core/lib/security/credentials/credentials.cc +163 -0
  1241. data/src/core/lib/security/credentials/credentials.h +285 -0
  1242. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +419 -0
  1243. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +82 -0
  1244. data/src/core/lib/security/credentials/external/aws_request_signer.cc +214 -0
  1245. data/src/core/lib/security/credentials/external/aws_request_signer.h +72 -0
  1246. data/src/core/lib/security/credentials/external/external_account_credentials.cc +544 -0
  1247. data/src/core/lib/security/credentials/external/external_account_credentials.h +118 -0
  1248. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +135 -0
  1249. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +49 -0
  1250. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +230 -0
  1251. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +61 -0
  1252. data/src/core/lib/security/credentials/fake/fake_credentials.cc +109 -0
  1253. data/src/core/lib/security/credentials/fake/fake_credentials.h +88 -0
  1254. data/src/core/lib/security/credentials/google_default/credentials_generic.cc +42 -0
  1255. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +470 -0
  1256. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +93 -0
  1257. data/src/core/lib/security/credentials/iam/iam_credentials.cc +74 -0
  1258. data/src/core/lib/security/credentials/iam/iam_credentials.h +55 -0
  1259. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +63 -0
  1260. data/src/core/lib/security/credentials/insecure/insecure_credentials.h +57 -0
  1261. data/src/core/lib/security/credentials/jwt/json_token.cc +286 -0
  1262. data/src/core/lib/security/credentials/jwt/json_token.h +76 -0
  1263. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +180 -0
  1264. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +93 -0
  1265. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +933 -0
  1266. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +122 -0
  1267. data/src/core/lib/security/credentials/local/local_credentials.cc +65 -0
  1268. data/src/core/lib/security/credentials/local/local_credentials.h +71 -0
  1269. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +736 -0
  1270. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +200 -0
  1271. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +211 -0
  1272. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +101 -0
  1273. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +378 -0
  1274. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +119 -0
  1275. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +348 -0
  1276. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +217 -0
  1277. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +454 -0
  1278. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +195 -0
  1279. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +209 -0
  1280. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +145 -0
  1281. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +123 -0
  1282. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +117 -0
  1283. data/src/core/lib/security/credentials/tls/tls_credentials.cc +147 -0
  1284. data/src/core/lib/security/credentials/tls/tls_credentials.h +68 -0
  1285. data/src/core/lib/security/credentials/tls/tls_utils.cc +123 -0
  1286. data/src/core/lib/security/credentials/tls/tls_utils.h +51 -0
  1287. data/src/core/lib/security/credentials/xds/xds_credentials.cc +237 -0
  1288. data/src/core/lib/security/credentials/xds/xds_credentials.h +100 -0
  1289. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +305 -0
  1290. data/src/core/lib/security/security_connector/alts/alts_security_connector.h +76 -0
  1291. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +318 -0
  1292. data/src/core/lib/security/security_connector/fake/fake_security_connector.h +43 -0
  1293. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +111 -0
  1294. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +92 -0
  1295. data/src/core/lib/security/security_connector/load_system_roots.h +33 -0
  1296. data/src/core/lib/security/security_connector/load_system_roots_fallback.cc +33 -0
  1297. data/src/core/lib/security/security_connector/load_system_roots_linux.cc +170 -0
  1298. data/src/core/lib/security/security_connector/load_system_roots_linux.h +46 -0
  1299. data/src/core/lib/security/security_connector/local/local_security_connector.cc +289 -0
  1300. data/src/core/lib/security/security_connector/local/local_security_connector.h +59 -0
  1301. data/src/core/lib/security/security_connector/security_connector.cc +125 -0
  1302. data/src/core/lib/security/security_connector/security_connector.h +187 -0
  1303. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +450 -0
  1304. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +81 -0
  1305. data/src/core/lib/security/security_connector/ssl_utils.cc +617 -0
  1306. data/src/core/lib/security/security_connector/ssl_utils.h +184 -0
  1307. data/src/core/lib/security/security_connector/ssl_utils_config.cc +32 -0
  1308. data/src/core/lib/security/security_connector/ssl_utils_config.h +30 -0
  1309. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +826 -0
  1310. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +266 -0
  1311. data/src/core/lib/security/transport/auth_filters.h +69 -0
  1312. data/src/core/lib/security/transport/client_auth_filter.cc +210 -0
  1313. data/src/core/lib/security/transport/secure_endpoint.cc +511 -0
  1314. data/src/core/lib/security/transport/secure_endpoint.h +42 -0
  1315. data/src/core/lib/security/transport/security_handshaker.cc +652 -0
  1316. data/src/core/lib/security/transport/security_handshaker.h +46 -0
  1317. data/src/core/lib/security/transport/server_auth_filter.cc +337 -0
  1318. data/src/core/lib/security/transport/tsi_error.cc +28 -0
  1319. data/src/core/lib/security/transport/tsi_error.h +30 -0
  1320. data/src/core/lib/security/util/json_util.cc +70 -0
  1321. data/src/core/lib/security/util/json_util.h +45 -0
  1322. data/src/core/lib/service_config/service_config.h +82 -0
  1323. data/src/core/lib/service_config/service_config_call_data.h +72 -0
  1324. data/src/core/lib/service_config/service_config_impl.cc +230 -0
  1325. data/src/core/lib/service_config/service_config_impl.h +125 -0
  1326. data/src/core/lib/service_config/service_config_parser.cc +93 -0
  1327. data/src/core/lib/service_config/service_config_parser.h +106 -0
  1328. data/src/core/lib/slice/b64.cc +239 -0
  1329. data/src/core/lib/slice/b64.h +50 -0
  1330. data/src/core/lib/slice/percent_encoding.cc +156 -0
  1331. data/src/core/lib/slice/percent_encoding.h +60 -0
  1332. data/src/core/lib/slice/slice.cc +489 -0
  1333. data/src/core/lib/slice/slice.h +384 -0
  1334. data/src/core/lib/slice/slice_api.cc +39 -0
  1335. data/src/core/lib/slice/slice_buffer.cc +417 -0
  1336. data/src/core/lib/slice/slice_internal.h +104 -0
  1337. data/src/core/lib/slice/slice_refcount.cc +35 -0
  1338. data/src/core/lib/slice/slice_refcount.h +46 -0
  1339. data/src/core/lib/slice/slice_refcount_base.h +61 -0
  1340. data/src/core/lib/slice/slice_split.cc +100 -0
  1341. data/src/core/lib/slice/slice_split.h +40 -0
  1342. data/src/core/lib/slice/slice_string_helpers.cc +44 -0
  1343. data/src/core/lib/slice/slice_string_helpers.h +38 -0
  1344. data/src/core/lib/surface/api_trace.cc +25 -0
  1345. data/src/core/lib/surface/api_trace.h +53 -0
  1346. data/src/core/lib/surface/builtins.cc +49 -0
  1347. data/src/core/lib/surface/builtins.h +26 -0
  1348. data/src/core/lib/surface/byte_buffer.cc +92 -0
  1349. data/src/core/lib/surface/byte_buffer_reader.cc +101 -0
  1350. data/src/core/lib/surface/call.cc +1967 -0
  1351. data/src/core/lib/surface/call.h +117 -0
  1352. data/src/core/lib/surface/call_details.cc +41 -0
  1353. data/src/core/lib/surface/call_log_batch.cc +111 -0
  1354. data/src/core/lib/surface/call_test_only.h +43 -0
  1355. data/src/core/lib/surface/channel.cc +504 -0
  1356. data/src/core/lib/surface/channel.h +167 -0
  1357. data/src/core/lib/surface/channel_init.cc +55 -0
  1358. data/src/core/lib/surface/channel_init.h +82 -0
  1359. data/src/core/lib/surface/channel_ping.cc +63 -0
  1360. data/src/core/lib/surface/channel_stack_type.cc +59 -0
  1361. data/src/core/lib/surface/channel_stack_type.h +47 -0
  1362. data/src/core/lib/surface/completion_queue.cc +1430 -0
  1363. data/src/core/lib/surface/completion_queue.h +98 -0
  1364. data/src/core/lib/surface/completion_queue_factory.cc +88 -0
  1365. data/src/core/lib/surface/completion_queue_factory.h +39 -0
  1366. data/src/core/lib/surface/event_string.cc +62 -0
  1367. data/src/core/lib/surface/event_string.h +31 -0
  1368. data/src/core/lib/surface/init.cc +288 -0
  1369. data/src/core/lib/surface/init.h +33 -0
  1370. data/src/core/lib/surface/lame_client.cc +199 -0
  1371. data/src/core/lib/surface/lame_client.h +33 -0
  1372. data/src/core/lib/surface/metadata_array.cc +36 -0
  1373. data/src/core/lib/surface/server.cc +1569 -0
  1374. data/src/core/lib/surface/server.h +495 -0
  1375. data/src/core/lib/surface/validate_metadata.cc +136 -0
  1376. data/src/core/lib/surface/validate_metadata.h +45 -0
  1377. data/src/core/lib/surface/version.cc +28 -0
  1378. data/src/core/lib/transport/bdp_estimator.cc +86 -0
  1379. data/src/core/lib/transport/bdp_estimator.h +95 -0
  1380. data/src/core/lib/transport/byte_stream.cc +164 -0
  1381. data/src/core/lib/transport/byte_stream.h +166 -0
  1382. data/src/core/lib/transport/connectivity_state.cc +188 -0
  1383. data/src/core/lib/transport/connectivity_state.h +145 -0
  1384. data/src/core/lib/transport/error_utils.cc +193 -0
  1385. data/src/core/lib/transport/error_utils.h +59 -0
  1386. data/src/core/lib/transport/http2_errors.h +41 -0
  1387. data/src/core/lib/transport/metadata_batch.h +1394 -0
  1388. data/src/core/lib/transport/parsed_metadata.cc +37 -0
  1389. data/src/core/lib/transport/parsed_metadata.h +401 -0
  1390. data/src/core/lib/transport/pid_controller.cc +51 -0
  1391. data/src/core/lib/transport/pid_controller.h +116 -0
  1392. data/src/core/lib/transport/status_conversion.cc +92 -0
  1393. data/src/core/lib/transport/status_conversion.h +38 -0
  1394. data/src/core/lib/transport/timeout_encoding.cc +288 -0
  1395. data/src/core/lib/transport/timeout_encoding.h +68 -0
  1396. data/src/core/lib/transport/transport.cc +241 -0
  1397. data/src/core/lib/transport/transport.h +570 -0
  1398. data/src/core/lib/transport/transport_impl.h +85 -0
  1399. data/src/core/lib/transport/transport_op_string.cc +147 -0
  1400. data/src/core/lib/uri/uri_parser.cc +365 -0
  1401. data/src/core/lib/uri/uri_parser.h +103 -0
  1402. data/src/core/plugin_registry/grpc_plugin_registry.cc +129 -0
  1403. data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +85 -0
  1404. data/src/core/tsi/alts/crypt/aes_gcm.cc +690 -0
  1405. data/src/core/tsi/alts/crypt/gsec.cc +190 -0
  1406. data/src/core/tsi/alts/crypt/gsec.h +459 -0
  1407. data/src/core/tsi/alts/frame_protector/alts_counter.cc +118 -0
  1408. data/src/core/tsi/alts/frame_protector/alts_counter.h +98 -0
  1409. data/src/core/tsi/alts/frame_protector/alts_crypter.cc +66 -0
  1410. data/src/core/tsi/alts/frame_protector/alts_crypter.h +255 -0
  1411. data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +408 -0
  1412. data/src/core/tsi/alts/frame_protector/alts_frame_protector.h +55 -0
  1413. data/src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.cc +114 -0
  1414. data/src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.h +114 -0
  1415. data/src/core/tsi/alts/frame_protector/alts_seal_privacy_integrity_crypter.cc +105 -0
  1416. data/src/core/tsi/alts/frame_protector/alts_unseal_privacy_integrity_crypter.cc +103 -0
  1417. data/src/core/tsi/alts/frame_protector/frame_handler.cc +219 -0
  1418. data/src/core/tsi/alts/frame_protector/frame_handler.h +236 -0
  1419. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +908 -0
  1420. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +160 -0
  1421. data/src/core/tsi/alts/handshaker/alts_shared_resource.cc +91 -0
  1422. data/src/core/tsi/alts/handshaker/alts_shared_resource.h +73 -0
  1423. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +713 -0
  1424. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +104 -0
  1425. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +89 -0
  1426. data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +64 -0
  1427. data/src/core/tsi/alts/handshaker/alts_tsi_utils.h +53 -0
  1428. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +223 -0
  1429. data/src/core/tsi/alts/handshaker/transport_security_common_api.h +171 -0
  1430. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +226 -0
  1431. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.h +54 -0
  1432. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.cc +144 -0
  1433. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.h +49 -0
  1434. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol.h +91 -0
  1435. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +174 -0
  1436. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.h +99 -0
  1437. data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.cc +478 -0
  1438. data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.h +199 -0
  1439. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +307 -0
  1440. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.h +57 -0
  1441. data/src/core/tsi/fake_transport_security.cc +809 -0
  1442. data/src/core/tsi/fake_transport_security.h +47 -0
  1443. data/src/core/tsi/local_transport_security.cc +170 -0
  1444. data/src/core/tsi/local_transport_security.h +47 -0
  1445. data/src/core/tsi/ssl/key_logging/ssl_key_logging.cc +141 -0
  1446. data/src/core/tsi/ssl/key_logging/ssl_key_logging.h +81 -0
  1447. data/src/core/tsi/ssl/session_cache/ssl_session.h +69 -0
  1448. data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +57 -0
  1449. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +179 -0
  1450. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +90 -0
  1451. data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +75 -0
  1452. data/src/core/tsi/ssl_transport_security.cc +2417 -0
  1453. data/src/core/tsi/ssl_transport_security.h +405 -0
  1454. data/src/core/tsi/ssl_types.h +42 -0
  1455. data/src/core/tsi/transport_security.cc +384 -0
  1456. data/src/core/tsi/transport_security.h +142 -0
  1457. data/src/core/tsi/transport_security_grpc.cc +73 -0
  1458. data/src/core/tsi/transport_security_grpc.h +80 -0
  1459. data/src/core/tsi/transport_security_interface.h +509 -0
  1460. data/src/ruby/ext/grpc/extconf.rb +1 -1
  1461. data/src/ruby/ext/grpc/rb_channel.c +5 -2
  1462. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +18 -24
  1463. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +27 -36
  1464. data/src/ruby/ext/grpc/rb_server.c +7 -4
  1465. data/src/ruby/lib/grpc/2.5/grpc_c.so +0 -0
  1466. data/src/ruby/lib/grpc/2.6/grpc_c.so +0 -0
  1467. data/src/ruby/lib/grpc/2.7/grpc_c.so +0 -0
  1468. data/src/ruby/lib/grpc/3.0/grpc_c.so +0 -0
  1469. data/src/ruby/lib/grpc/3.1/grpc_c.so +0 -0
  1470. data/src/ruby/lib/grpc/generic/active_call.rb +7 -1
  1471. data/src/ruby/lib/grpc/grpc.rb +1 -1
  1472. data/src/ruby/lib/grpc/grpc_c.so +0 -0
  1473. data/src/ruby/lib/grpc/version.rb +1 -1
  1474. data/src/ruby/pb/generate_proto_ruby.sh +1 -0
  1475. data/third_party/abseil-cpp/absl/algorithm/algorithm.h +159 -0
  1476. data/third_party/abseil-cpp/absl/algorithm/container.h +1774 -0
  1477. data/third_party/abseil-cpp/absl/base/attributes.h +735 -0
  1478. data/third_party/abseil-cpp/absl/base/call_once.h +219 -0
  1479. data/third_party/abseil-cpp/absl/base/casts.h +187 -0
  1480. data/third_party/abseil-cpp/absl/base/config.h +772 -0
  1481. data/third_party/abseil-cpp/absl/base/const_init.h +76 -0
  1482. data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +471 -0
  1483. data/third_party/abseil-cpp/absl/base/internal/atomic_hook.h +200 -0
  1484. data/third_party/abseil-cpp/absl/base/internal/cycleclock.cc +107 -0
  1485. data/third_party/abseil-cpp/absl/base/internal/cycleclock.h +94 -0
  1486. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +169 -0
  1487. data/third_party/abseil-cpp/absl/base/internal/dynamic_annotations.h +398 -0
  1488. data/third_party/abseil-cpp/absl/base/internal/endian.h +327 -0
  1489. data/third_party/abseil-cpp/absl/base/internal/errno_saver.h +43 -0
  1490. data/third_party/abseil-cpp/absl/base/internal/fast_type_id.h +48 -0
  1491. data/third_party/abseil-cpp/absl/base/internal/hide_ptr.h +51 -0
  1492. data/third_party/abseil-cpp/absl/base/internal/identity.h +37 -0
  1493. data/third_party/abseil-cpp/absl/base/internal/inline_variable.h +107 -0
  1494. data/third_party/abseil-cpp/absl/base/internal/invoke.h +187 -0
  1495. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +620 -0
  1496. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.h +126 -0
  1497. data/third_party/abseil-cpp/absl/base/internal/low_level_scheduling.h +134 -0
  1498. data/third_party/abseil-cpp/absl/base/internal/per_thread_tls.h +52 -0
  1499. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +242 -0
  1500. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +195 -0
  1501. data/third_party/abseil-cpp/absl/base/internal/scheduling_mode.h +58 -0
  1502. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +229 -0
  1503. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +248 -0
  1504. data/third_party/abseil-cpp/absl/base/internal/spinlock_akaros.inc +35 -0
  1505. data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +74 -0
  1506. data/third_party/abseil-cpp/absl/base/internal/spinlock_posix.inc +46 -0
  1507. data/third_party/abseil-cpp/absl/base/internal/spinlock_wait.cc +81 -0
  1508. data/third_party/abseil-cpp/absl/base/internal/spinlock_wait.h +95 -0
  1509. data/third_party/abseil-cpp/absl/base/internal/spinlock_win32.inc +37 -0
  1510. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +508 -0
  1511. data/third_party/abseil-cpp/absl/base/internal/sysinfo.h +74 -0
  1512. data/third_party/abseil-cpp/absl/base/internal/thread_annotations.h +271 -0
  1513. data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +155 -0
  1514. data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +265 -0
  1515. data/third_party/abseil-cpp/absl/base/internal/throw_delegate.cc +212 -0
  1516. data/third_party/abseil-cpp/absl/base/internal/throw_delegate.h +75 -0
  1517. data/third_party/abseil-cpp/absl/base/internal/tsan_mutex_interface.h +68 -0
  1518. data/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +82 -0
  1519. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +154 -0
  1520. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +124 -0
  1521. data/third_party/abseil-cpp/absl/base/log_severity.cc +27 -0
  1522. data/third_party/abseil-cpp/absl/base/log_severity.h +121 -0
  1523. data/third_party/abseil-cpp/absl/base/macros.h +158 -0
  1524. data/third_party/abseil-cpp/absl/base/optimization.h +244 -0
  1525. data/third_party/abseil-cpp/absl/base/options.h +238 -0
  1526. data/third_party/abseil-cpp/absl/base/policy_checks.h +111 -0
  1527. data/third_party/abseil-cpp/absl/base/port.h +25 -0
  1528. data/third_party/abseil-cpp/absl/base/thread_annotations.h +335 -0
  1529. data/third_party/abseil-cpp/absl/container/fixed_array.h +527 -0
  1530. data/third_party/abseil-cpp/absl/container/flat_hash_map.h +606 -0
  1531. data/third_party/abseil-cpp/absl/container/inlined_vector.h +855 -0
  1532. data/third_party/abseil-cpp/absl/container/internal/common.h +206 -0
  1533. data/third_party/abseil-cpp/absl/container/internal/compressed_tuple.h +290 -0
  1534. data/third_party/abseil-cpp/absl/container/internal/container_memory.h +460 -0
  1535. data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +163 -0
  1536. data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +208 -0
  1537. data/third_party/abseil-cpp/absl/container/internal/hashtable_debug_hooks.h +85 -0
  1538. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +190 -0
  1539. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +281 -0
  1540. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler_force_weak_definition.cc +31 -0
  1541. data/third_party/abseil-cpp/absl/container/internal/have_sse.h +50 -0
  1542. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +932 -0
  1543. data/third_party/abseil-cpp/absl/container/internal/layout.h +743 -0
  1544. data/third_party/abseil-cpp/absl/container/internal/raw_hash_map.h +198 -0
  1545. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +67 -0
  1546. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +2034 -0
  1547. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +139 -0
  1548. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.h +32 -0
  1549. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +1959 -0
  1550. data/third_party/abseil-cpp/absl/debugging/internal/demangle.h +71 -0
  1551. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +383 -0
  1552. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +138 -0
  1553. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +199 -0
  1554. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +134 -0
  1555. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +87 -0
  1556. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +110 -0
  1557. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +108 -0
  1558. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +253 -0
  1559. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +234 -0
  1560. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_unimplemented-inl.inc +24 -0
  1561. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +93 -0
  1562. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +364 -0
  1563. data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +153 -0
  1564. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +191 -0
  1565. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.h +158 -0
  1566. data/third_party/abseil-cpp/absl/debugging/stacktrace.cc +142 -0
  1567. data/third_party/abseil-cpp/absl/debugging/stacktrace.h +231 -0
  1568. data/third_party/abseil-cpp/absl/debugging/symbolize.cc +38 -0
  1569. data/third_party/abseil-cpp/absl/debugging/symbolize.h +99 -0
  1570. data/third_party/abseil-cpp/absl/debugging/symbolize_darwin.inc +101 -0
  1571. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +1574 -0
  1572. data/third_party/abseil-cpp/absl/debugging/symbolize_emscripten.inc +72 -0
  1573. data/third_party/abseil-cpp/absl/debugging/symbolize_unimplemented.inc +40 -0
  1574. data/third_party/abseil-cpp/absl/debugging/symbolize_win32.inc +81 -0
  1575. data/third_party/abseil-cpp/absl/functional/bind_front.h +184 -0
  1576. data/third_party/abseil-cpp/absl/functional/function_ref.h +142 -0
  1577. data/third_party/abseil-cpp/absl/functional/internal/front_binder.h +95 -0
  1578. data/third_party/abseil-cpp/absl/functional/internal/function_ref.h +106 -0
  1579. data/third_party/abseil-cpp/absl/hash/hash.h +347 -0
  1580. data/third_party/abseil-cpp/absl/hash/internal/city.cc +349 -0
  1581. data/third_party/abseil-cpp/absl/hash/internal/city.h +78 -0
  1582. data/third_party/abseil-cpp/absl/hash/internal/hash.cc +69 -0
  1583. data/third_party/abseil-cpp/absl/hash/internal/hash.h +1096 -0
  1584. data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.cc +123 -0
  1585. data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.h +50 -0
  1586. data/third_party/abseil-cpp/absl/memory/memory.h +699 -0
  1587. data/third_party/abseil-cpp/absl/meta/type_traits.h +797 -0
  1588. data/third_party/abseil-cpp/absl/numeric/bits.h +177 -0
  1589. data/third_party/abseil-cpp/absl/numeric/int128.cc +383 -0
  1590. data/third_party/abseil-cpp/absl/numeric/int128.h +1165 -0
  1591. data/third_party/abseil-cpp/absl/numeric/int128_have_intrinsic.inc +296 -0
  1592. data/third_party/abseil-cpp/absl/numeric/int128_no_intrinsic.inc +311 -0
  1593. data/third_party/abseil-cpp/absl/numeric/internal/bits.h +358 -0
  1594. data/third_party/abseil-cpp/absl/numeric/internal/representation.h +55 -0
  1595. data/third_party/abseil-cpp/absl/profiling/internal/exponential_biased.cc +93 -0
  1596. data/third_party/abseil-cpp/absl/profiling/internal/exponential_biased.h +130 -0
  1597. data/third_party/abseil-cpp/absl/profiling/internal/sample_recorder.h +230 -0
  1598. data/third_party/abseil-cpp/absl/random/bernoulli_distribution.h +200 -0
  1599. data/third_party/abseil-cpp/absl/random/beta_distribution.h +427 -0
  1600. data/third_party/abseil-cpp/absl/random/discrete_distribution.cc +98 -0
  1601. data/third_party/abseil-cpp/absl/random/discrete_distribution.h +247 -0
  1602. data/third_party/abseil-cpp/absl/random/distributions.h +452 -0
  1603. data/third_party/abseil-cpp/absl/random/exponential_distribution.h +165 -0
  1604. data/third_party/abseil-cpp/absl/random/gaussian_distribution.cc +104 -0
  1605. data/third_party/abseil-cpp/absl/random/gaussian_distribution.h +275 -0
  1606. data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +92 -0
  1607. data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +268 -0
  1608. data/third_party/abseil-cpp/absl/random/internal/fastmath.h +57 -0
  1609. data/third_party/abseil-cpp/absl/random/internal/generate_real.h +144 -0
  1610. data/third_party/abseil-cpp/absl/random/internal/iostream_state_saver.h +245 -0
  1611. data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +150 -0
  1612. data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +308 -0
  1613. data/third_party/abseil-cpp/absl/random/internal/platform.h +171 -0
  1614. data/third_party/abseil-cpp/absl/random/internal/pool_urbg.cc +253 -0
  1615. data/third_party/abseil-cpp/absl/random/internal/pool_urbg.h +131 -0
  1616. data/third_party/abseil-cpp/absl/random/internal/randen.cc +91 -0
  1617. data/third_party/abseil-cpp/absl/random/internal/randen.h +102 -0
  1618. data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +221 -0
  1619. data/third_party/abseil-cpp/absl/random/internal/randen_detect.h +33 -0
  1620. data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +239 -0
  1621. data/third_party/abseil-cpp/absl/random/internal/randen_hwaes.cc +526 -0
  1622. data/third_party/abseil-cpp/absl/random/internal/randen_hwaes.h +50 -0
  1623. data/third_party/abseil-cpp/absl/random/internal/randen_round_keys.cc +462 -0
  1624. data/third_party/abseil-cpp/absl/random/internal/randen_slow.cc +471 -0
  1625. data/third_party/abseil-cpp/absl/random/internal/randen_slow.h +40 -0
  1626. data/third_party/abseil-cpp/absl/random/internal/randen_traits.h +88 -0
  1627. data/third_party/abseil-cpp/absl/random/internal/salted_seed_seq.h +167 -0
  1628. data/third_party/abseil-cpp/absl/random/internal/seed_material.cc +267 -0
  1629. data/third_party/abseil-cpp/absl/random/internal/seed_material.h +104 -0
  1630. data/third_party/abseil-cpp/absl/random/internal/traits.h +101 -0
  1631. data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +244 -0
  1632. data/third_party/abseil-cpp/absl/random/internal/wide_multiply.h +111 -0
  1633. data/third_party/abseil-cpp/absl/random/log_uniform_int_distribution.h +257 -0
  1634. data/third_party/abseil-cpp/absl/random/poisson_distribution.h +258 -0
  1635. data/third_party/abseil-cpp/absl/random/random.h +189 -0
  1636. data/third_party/abseil-cpp/absl/random/seed_gen_exception.cc +46 -0
  1637. data/third_party/abseil-cpp/absl/random/seed_gen_exception.h +55 -0
  1638. data/third_party/abseil-cpp/absl/random/seed_sequences.cc +29 -0
  1639. data/third_party/abseil-cpp/absl/random/seed_sequences.h +110 -0
  1640. data/third_party/abseil-cpp/absl/random/uniform_int_distribution.h +275 -0
  1641. data/third_party/abseil-cpp/absl/random/uniform_real_distribution.h +202 -0
  1642. data/third_party/abseil-cpp/absl/random/zipf_distribution.h +271 -0
  1643. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +69 -0
  1644. data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +396 -0
  1645. data/third_party/abseil-cpp/absl/status/status.cc +444 -0
  1646. data/third_party/abseil-cpp/absl/status/status.h +882 -0
  1647. data/third_party/abseil-cpp/absl/status/status_payload_printer.cc +38 -0
  1648. data/third_party/abseil-cpp/absl/status/status_payload_printer.h +51 -0
  1649. data/third_party/abseil-cpp/absl/status/statusor.cc +103 -0
  1650. data/third_party/abseil-cpp/absl/status/statusor.h +770 -0
  1651. data/third_party/abseil-cpp/absl/strings/ascii.cc +200 -0
  1652. data/third_party/abseil-cpp/absl/strings/ascii.h +242 -0
  1653. data/third_party/abseil-cpp/absl/strings/charconv.cc +984 -0
  1654. data/third_party/abseil-cpp/absl/strings/charconv.h +120 -0
  1655. data/third_party/abseil-cpp/absl/strings/cord.cc +2047 -0
  1656. data/third_party/abseil-cpp/absl/strings/cord.h +1521 -0
  1657. data/third_party/abseil-cpp/absl/strings/escaping.cc +949 -0
  1658. data/third_party/abseil-cpp/absl/strings/escaping.h +164 -0
  1659. data/third_party/abseil-cpp/absl/strings/internal/char_map.h +156 -0
  1660. data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.cc +359 -0
  1661. data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.h +423 -0
  1662. data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +504 -0
  1663. data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.h +99 -0
  1664. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +89 -0
  1665. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +620 -0
  1666. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +1128 -0
  1667. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.h +939 -0
  1668. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.cc +185 -0
  1669. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.h +265 -0
  1670. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.cc +68 -0
  1671. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.h +211 -0
  1672. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.cc +129 -0
  1673. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.h +50 -0
  1674. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +146 -0
  1675. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +771 -0
  1676. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.h +607 -0
  1677. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring_reader.h +118 -0
  1678. data/third_party/abseil-cpp/absl/strings/internal/cordz_functions.cc +96 -0
  1679. data/third_party/abseil-cpp/absl/strings/internal/cordz_functions.h +85 -0
  1680. data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.cc +139 -0
  1681. data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.h +131 -0
  1682. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +445 -0
  1683. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.h +298 -0
  1684. data/third_party/abseil-cpp/absl/strings/internal/cordz_statistics.h +87 -0
  1685. data/third_party/abseil-cpp/absl/strings/internal/cordz_update_scope.h +71 -0
  1686. data/third_party/abseil-cpp/absl/strings/internal/cordz_update_tracker.h +121 -0
  1687. data/third_party/abseil-cpp/absl/strings/internal/escaping.cc +180 -0
  1688. data/third_party/abseil-cpp/absl/strings/internal/escaping.h +58 -0
  1689. data/third_party/abseil-cpp/absl/strings/internal/memutil.cc +112 -0
  1690. data/third_party/abseil-cpp/absl/strings/internal/memutil.h +148 -0
  1691. data/third_party/abseil-cpp/absl/strings/internal/ostringstream.cc +36 -0
  1692. data/third_party/abseil-cpp/absl/strings/internal/ostringstream.h +89 -0
  1693. data/third_party/abseil-cpp/absl/strings/internal/resize_uninitialized.h +119 -0
  1694. data/third_party/abseil-cpp/absl/strings/internal/stl_type_traits.h +248 -0
  1695. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +488 -0
  1696. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +526 -0
  1697. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +258 -0
  1698. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +217 -0
  1699. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +333 -0
  1700. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +75 -0
  1701. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +445 -0
  1702. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +1423 -0
  1703. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.h +37 -0
  1704. data/third_party/abseil-cpp/absl/strings/internal/str_format/output.cc +72 -0
  1705. data/third_party/abseil-cpp/absl/strings/internal/str_format/output.h +96 -0
  1706. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +339 -0
  1707. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +357 -0
  1708. data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +314 -0
  1709. data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +430 -0
  1710. data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +64 -0
  1711. data/third_party/abseil-cpp/absl/strings/internal/utf8.cc +53 -0
  1712. data/third_party/abseil-cpp/absl/strings/internal/utf8.h +50 -0
  1713. data/third_party/abseil-cpp/absl/strings/match.cc +43 -0
  1714. data/third_party/abseil-cpp/absl/strings/match.h +100 -0
  1715. data/third_party/abseil-cpp/absl/strings/numbers.cc +1093 -0
  1716. data/third_party/abseil-cpp/absl/strings/numbers.h +300 -0
  1717. data/third_party/abseil-cpp/absl/strings/str_cat.cc +246 -0
  1718. data/third_party/abseil-cpp/absl/strings/str_cat.h +408 -0
  1719. data/third_party/abseil-cpp/absl/strings/str_format.h +812 -0
  1720. data/third_party/abseil-cpp/absl/strings/str_join.h +293 -0
  1721. data/third_party/abseil-cpp/absl/strings/str_replace.cc +82 -0
  1722. data/third_party/abseil-cpp/absl/strings/str_replace.h +219 -0
  1723. data/third_party/abseil-cpp/absl/strings/str_split.cc +139 -0
  1724. data/third_party/abseil-cpp/absl/strings/str_split.h +548 -0
  1725. data/third_party/abseil-cpp/absl/strings/string_view.cc +230 -0
  1726. data/third_party/abseil-cpp/absl/strings/string_view.h +710 -0
  1727. data/third_party/abseil-cpp/absl/strings/strip.h +91 -0
  1728. data/third_party/abseil-cpp/absl/strings/substitute.cc +172 -0
  1729. data/third_party/abseil-cpp/absl/strings/substitute.h +721 -0
  1730. data/third_party/abseil-cpp/absl/synchronization/barrier.cc +52 -0
  1731. data/third_party/abseil-cpp/absl/synchronization/barrier.h +79 -0
  1732. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.cc +67 -0
  1733. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.h +101 -0
  1734. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +140 -0
  1735. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.h +60 -0
  1736. data/third_party/abseil-cpp/absl/synchronization/internal/futex.h +154 -0
  1737. data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +698 -0
  1738. data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.h +141 -0
  1739. data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +156 -0
  1740. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +106 -0
  1741. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +115 -0
  1742. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +428 -0
  1743. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +155 -0
  1744. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +2751 -0
  1745. data/third_party/abseil-cpp/absl/synchronization/mutex.h +1082 -0
  1746. data/third_party/abseil-cpp/absl/synchronization/notification.cc +78 -0
  1747. data/third_party/abseil-cpp/absl/synchronization/notification.h +123 -0
  1748. data/third_party/abseil-cpp/absl/time/civil_time.cc +173 -0
  1749. data/third_party/abseil-cpp/absl/time/civil_time.h +538 -0
  1750. data/third_party/abseil-cpp/absl/time/clock.cc +585 -0
  1751. data/third_party/abseil-cpp/absl/time/clock.h +74 -0
  1752. data/third_party/abseil-cpp/absl/time/duration.cc +954 -0
  1753. data/third_party/abseil-cpp/absl/time/format.cc +160 -0
  1754. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time.h +332 -0
  1755. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +628 -0
  1756. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +459 -0
  1757. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/zone_info_source.h +102 -0
  1758. data/third_party/abseil-cpp/absl/time/internal/cctz/src/civil_time_detail.cc +94 -0
  1759. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.cc +140 -0
  1760. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.h +52 -0
  1761. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +1029 -0
  1762. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.cc +45 -0
  1763. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.h +77 -0
  1764. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.cc +113 -0
  1765. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.h +93 -0
  1766. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +1027 -0
  1767. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.h +137 -0
  1768. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +315 -0
  1769. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.h +55 -0
  1770. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +236 -0
  1771. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.cc +159 -0
  1772. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.h +132 -0
  1773. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +122 -0
  1774. data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +115 -0
  1775. data/third_party/abseil-cpp/absl/time/internal/get_current_time_chrono.inc +31 -0
  1776. data/third_party/abseil-cpp/absl/time/internal/get_current_time_posix.inc +24 -0
  1777. data/third_party/abseil-cpp/absl/time/time.cc +500 -0
  1778. data/third_party/abseil-cpp/absl/time/time.h +1616 -0
  1779. data/third_party/abseil-cpp/absl/types/bad_optional_access.cc +48 -0
  1780. data/third_party/abseil-cpp/absl/types/bad_optional_access.h +78 -0
  1781. data/third_party/abseil-cpp/absl/types/bad_variant_access.cc +64 -0
  1782. data/third_party/abseil-cpp/absl/types/bad_variant_access.h +82 -0
  1783. data/third_party/abseil-cpp/absl/types/internal/optional.h +396 -0
  1784. data/third_party/abseil-cpp/absl/types/internal/span.h +128 -0
  1785. data/third_party/abseil-cpp/absl/types/internal/variant.h +1646 -0
  1786. data/third_party/abseil-cpp/absl/types/optional.h +776 -0
  1787. data/third_party/abseil-cpp/absl/types/span.h +726 -0
  1788. data/third_party/abseil-cpp/absl/types/variant.h +866 -0
  1789. data/third_party/abseil-cpp/absl/utility/utility.h +350 -0
  1790. data/third_party/address_sorting/address_sorting.c +375 -0
  1791. data/third_party/address_sorting/address_sorting_internal.h +70 -0
  1792. data/third_party/address_sorting/address_sorting_posix.c +98 -0
  1793. data/third_party/address_sorting/address_sorting_windows.c +95 -0
  1794. data/third_party/address_sorting/include/address_sorting/address_sorting.h +115 -0
  1795. data/third_party/boringssl-with-bazel/err_data.c +1493 -0
  1796. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c +284 -0
  1797. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +122 -0
  1798. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_d2i_fp.c +91 -0
  1799. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_dup.c +87 -0
  1800. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_enum.c +195 -0
  1801. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_gentm.c +266 -0
  1802. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_i2d_fp.c +88 -0
  1803. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_int.c +420 -0
  1804. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_mbstr.c +298 -0
  1805. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +299 -0
  1806. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_octet.c +77 -0
  1807. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_print.c +83 -0
  1808. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strex.c +650 -0
  1809. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c +266 -0
  1810. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +212 -0
  1811. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +163 -0
  1812. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utctm.c +264 -0
  1813. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utf8.c +236 -0
  1814. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +452 -0
  1815. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_par.c +80 -0
  1816. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn_pack.c +101 -0
  1817. data/third_party/boringssl-with-bazel/src/crypto/asn1/charmap.h +15 -0
  1818. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_int.c +102 -0
  1819. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_string.c +91 -0
  1820. data/third_party/boringssl-with-bazel/src/crypto/asn1/internal.h +224 -0
  1821. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +969 -0
  1822. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +710 -0
  1823. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c +233 -0
  1824. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_new.c +332 -0
  1825. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_typ.c +131 -0
  1826. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_utl.c +281 -0
  1827. data/third_party/boringssl-with-bazel/src/crypto/asn1/time_support.c +206 -0
  1828. data/third_party/boringssl-with-bazel/src/crypto/base64/base64.c +482 -0
  1829. data/third_party/boringssl-with-bazel/src/crypto/bio/bio.c +702 -0
  1830. data/third_party/boringssl-with-bazel/src/crypto/bio/bio_mem.c +324 -0
  1831. data/third_party/boringssl-with-bazel/src/crypto/bio/connect.c +541 -0
  1832. data/third_party/boringssl-with-bazel/src/crypto/bio/fd.c +275 -0
  1833. data/third_party/boringssl-with-bazel/src/crypto/bio/file.c +311 -0
  1834. data/third_party/boringssl-with-bazel/src/crypto/bio/hexdump.c +192 -0
  1835. data/third_party/boringssl-with-bazel/src/crypto/bio/internal.h +111 -0
  1836. data/third_party/boringssl-with-bazel/src/crypto/bio/pair.c +483 -0
  1837. data/third_party/boringssl-with-bazel/src/crypto/bio/printf.c +115 -0
  1838. data/third_party/boringssl-with-bazel/src/crypto/bio/socket.c +192 -0
  1839. data/third_party/boringssl-with-bazel/src/crypto/bio/socket_helper.c +122 -0
  1840. data/third_party/boringssl-with-bazel/src/crypto/blake2/blake2.c +156 -0
  1841. data/third_party/boringssl-with-bazel/src/crypto/bn_extra/bn_asn1.c +57 -0
  1842. data/third_party/boringssl-with-bazel/src/crypto/bn_extra/convert.c +470 -0
  1843. data/third_party/boringssl-with-bazel/src/crypto/buf/buf.c +172 -0
  1844. data/third_party/boringssl-with-bazel/src/crypto/bytestring/asn1_compat.c +52 -0
  1845. data/third_party/boringssl-with-bazel/src/crypto/bytestring/ber.c +266 -0
  1846. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbb.c +728 -0
  1847. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbs.c +711 -0
  1848. data/third_party/boringssl-with-bazel/src/crypto/bytestring/internal.h +96 -0
  1849. data/third_party/boringssl-with-bazel/src/crypto/bytestring/unicode.c +155 -0
  1850. data/third_party/boringssl-with-bazel/src/crypto/chacha/chacha.c +175 -0
  1851. data/third_party/boringssl-with-bazel/src/crypto/chacha/internal.h +45 -0
  1852. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/cipher_extra.c +127 -0
  1853. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/derive_key.c +152 -0
  1854. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_aesccm.c +447 -0
  1855. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_aesctrhmac.c +283 -0
  1856. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_aesgcmsiv.c +891 -0
  1857. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_chacha20poly1305.c +343 -0
  1858. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_null.c +85 -0
  1859. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_rc2.c +462 -0
  1860. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_rc4.c +87 -0
  1861. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_tls.c +601 -0
  1862. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h +226 -0
  1863. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +338 -0
  1864. data/third_party/boringssl-with-bazel/src/crypto/cmac/cmac.c +278 -0
  1865. data/third_party/boringssl-with-bazel/src/crypto/conf/conf.c +821 -0
  1866. data/third_party/boringssl-with-bazel/src/crypto/conf/conf_def.h +127 -0
  1867. data/third_party/boringssl-with-bazel/src/crypto/conf/internal.h +31 -0
  1868. data/third_party/boringssl-with-bazel/src/crypto/cpu-aarch64-fuchsia.c +55 -0
  1869. data/third_party/boringssl-with-bazel/src/crypto/cpu-aarch64-linux.c +62 -0
  1870. data/third_party/boringssl-with-bazel/src/crypto/cpu-aarch64-win.c +41 -0
  1871. data/third_party/boringssl-with-bazel/src/crypto/cpu-arm-linux.c +229 -0
  1872. data/third_party/boringssl-with-bazel/src/crypto/cpu-arm-linux.h +201 -0
  1873. data/third_party/boringssl-with-bazel/src/crypto/cpu-arm.c +38 -0
  1874. data/third_party/boringssl-with-bazel/src/crypto/cpu-intel.c +291 -0
  1875. data/third_party/boringssl-with-bazel/src/crypto/cpu-ppc64le.c +38 -0
  1876. data/third_party/boringssl-with-bazel/src/crypto/crypto.c +226 -0
  1877. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519.c +2159 -0
  1878. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519_tables.h +7872 -0
  1879. data/third_party/boringssl-with-bazel/src/crypto/curve25519/internal.h +146 -0
  1880. data/third_party/boringssl-with-bazel/src/crypto/curve25519/spake25519.c +539 -0
  1881. data/third_party/boringssl-with-bazel/src/crypto/dh_extra/dh_asn1.c +160 -0
  1882. data/third_party/boringssl-with-bazel/src/crypto/dh_extra/params.c +272 -0
  1883. data/third_party/boringssl-with-bazel/src/crypto/digest_extra/digest_extra.c +268 -0
  1884. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +967 -0
  1885. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa_asn1.c +390 -0
  1886. data/third_party/boringssl-with-bazel/src/crypto/dsa/internal.h +34 -0
  1887. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/ec_asn1.c +559 -0
  1888. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/ec_derive.c +95 -0
  1889. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c +385 -0
  1890. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h +56 -0
  1891. data/third_party/boringssl-with-bazel/src/crypto/ecdh_extra/ecdh_extra.c +124 -0
  1892. data/third_party/boringssl-with-bazel/src/crypto/ecdsa_extra/ecdsa_asn1.c +267 -0
  1893. data/third_party/boringssl-with-bazel/src/crypto/engine/engine.c +99 -0
  1894. data/third_party/boringssl-with-bazel/src/crypto/err/err.c +857 -0
  1895. data/third_party/boringssl-with-bazel/src/crypto/err/internal.h +58 -0
  1896. data/third_party/boringssl-with-bazel/src/crypto/evp/digestsign.c +231 -0
  1897. data/third_party/boringssl-with-bazel/src/crypto/evp/evp.c +456 -0
  1898. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +547 -0
  1899. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_ctx.c +484 -0
  1900. data/third_party/boringssl-with-bazel/src/crypto/evp/internal.h +269 -0
  1901. data/third_party/boringssl-with-bazel/src/crypto/evp/p_dsa_asn1.c +277 -0
  1902. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ec.c +286 -0
  1903. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ec_asn1.c +255 -0
  1904. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ed25519.c +104 -0
  1905. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ed25519_asn1.c +221 -0
  1906. data/third_party/boringssl-with-bazel/src/crypto/evp/p_rsa.c +648 -0
  1907. data/third_party/boringssl-with-bazel/src/crypto/evp/p_rsa_asn1.c +194 -0
  1908. data/third_party/boringssl-with-bazel/src/crypto/evp/p_x25519.c +110 -0
  1909. data/third_party/boringssl-with-bazel/src/crypto/evp/p_x25519_asn1.c +248 -0
  1910. data/third_party/boringssl-with-bazel/src/crypto/evp/pbkdf.c +146 -0
  1911. data/third_party/boringssl-with-bazel/src/crypto/evp/print.c +489 -0
  1912. data/third_party/boringssl-with-bazel/src/crypto/evp/scrypt.c +211 -0
  1913. data/third_party/boringssl-with-bazel/src/crypto/evp/sign.c +151 -0
  1914. data/third_party/boringssl-with-bazel/src/crypto/ex_data.c +261 -0
  1915. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/aes.c +108 -0
  1916. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/aes_nohw.c +1282 -0
  1917. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/internal.h +238 -0
  1918. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/key_wrap.c +236 -0
  1919. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/mode_wrappers.c +122 -0
  1920. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +266 -0
  1921. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/add.c +316 -0
  1922. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/asm/x86_64-gcc.c +541 -0
  1923. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/bn.c +438 -0
  1924. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/bytes.c +230 -0
  1925. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/cmp.c +200 -0
  1926. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/ctx.c +236 -0
  1927. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div.c +902 -0
  1928. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div_extra.c +87 -0
  1929. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/exponentiation.c +1288 -0
  1930. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd.c +378 -0
  1931. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd_extra.c +326 -0
  1932. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/generic.c +711 -0
  1933. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +715 -0
  1934. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/jacobi.c +146 -0
  1935. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery.c +502 -0
  1936. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery_inv.c +186 -0
  1937. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/mul.c +749 -0
  1938. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/prime.c +1064 -0
  1939. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/random.c +341 -0
  1940. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/rsaz_exp.c +226 -0
  1941. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/rsaz_exp.h +104 -0
  1942. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/shift.c +364 -0
  1943. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/sqrt.c +498 -0
  1944. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/aead.c +284 -0
  1945. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +648 -0
  1946. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +1473 -0
  1947. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_des.c +237 -0
  1948. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/internal.h +128 -0
  1949. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/delocate.h +89 -0
  1950. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/des/des.c +784 -0
  1951. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/des/internal.h +238 -0
  1952. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/check.c +217 -0
  1953. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/dh.c +456 -0
  1954. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digest.c +282 -0
  1955. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digests.c +304 -0
  1956. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/internal.h +112 -0
  1957. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/md32_common.h +195 -0
  1958. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +1268 -0
  1959. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +472 -0
  1960. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_montgomery.c +524 -0
  1961. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/felem.c +100 -0
  1962. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +772 -0
  1963. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/oct.c +328 -0
  1964. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c +1180 -0
  1965. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64-table.h +9497 -0
  1966. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64.c +633 -0
  1967. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64.h +153 -0
  1968. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.c +740 -0
  1969. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256_table.h +297 -0
  1970. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/scalar.c +175 -0
  1971. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple.c +357 -0
  1972. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c +270 -0
  1973. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/util.c +255 -0
  1974. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/wnaf.c +270 -0
  1975. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdh/ecdh.c +122 -0
  1976. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +338 -0
  1977. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/internal.h +39 -0
  1978. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/fips_shared_support.c +32 -0
  1979. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/hmac/hmac.c +228 -0
  1980. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md4/md4.c +240 -0
  1981. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/internal.h +37 -0
  1982. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/md5.c +284 -0
  1983. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cbc.c +178 -0
  1984. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cfb.c +203 -0
  1985. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ctr.c +201 -0
  1986. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm.c +733 -0
  1987. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm_nohw.c +304 -0
  1988. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/internal.h +420 -0
  1989. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ofb.c +97 -0
  1990. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/polyval.c +91 -0
  1991. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/ctrdrbg.c +202 -0
  1992. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.c +137 -0
  1993. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.h +49 -0
  1994. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/getrandom_fillin.h +64 -0
  1995. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +184 -0
  1996. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +457 -0
  1997. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +401 -0
  1998. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/blinding.c +243 -0
  1999. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h +131 -0
  2000. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/padding.c +695 -0
  2001. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +935 -0
  2002. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +1416 -0
  2003. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/fips.c +79 -0
  2004. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +874 -0
  2005. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/internal.h +53 -0
  2006. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1-altivec.c +361 -0
  2007. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +357 -0
  2008. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +321 -0
  2009. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +508 -0
  2010. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/tls/internal.h +39 -0
  2011. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/tls/kdf.c +165 -0
  2012. data/third_party/boringssl-with-bazel/src/crypto/hkdf/hkdf.c +112 -0
  2013. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +618 -0
  2014. data/third_party/boringssl-with-bazel/src/crypto/hrss/hrss.c +2198 -0
  2015. data/third_party/boringssl-with-bazel/src/crypto/hrss/internal.h +68 -0
  2016. data/third_party/boringssl-with-bazel/src/crypto/internal.h +959 -0
  2017. data/third_party/boringssl-with-bazel/src/crypto/lhash/internal.h +253 -0
  2018. data/third_party/boringssl-with-bazel/src/crypto/lhash/lhash.c +353 -0
  2019. data/third_party/boringssl-with-bazel/src/crypto/mem.c +410 -0
  2020. data/third_party/boringssl-with-bazel/src/crypto/obj/obj.c +553 -0
  2021. data/third_party/boringssl-with-bazel/src/crypto/obj/obj_dat.h +11585 -0
  2022. data/third_party/boringssl-with-bazel/src/crypto/obj/obj_xref.c +122 -0
  2023. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_all.c +252 -0
  2024. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_info.c +358 -0
  2025. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_lib.c +769 -0
  2026. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_oth.c +87 -0
  2027. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pk8.c +255 -0
  2028. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pkey.c +214 -0
  2029. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_x509.c +65 -0
  2030. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_xaux.c +65 -0
  2031. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/internal.h +58 -0
  2032. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7.c +193 -0
  2033. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c +526 -0
  2034. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/internal.h +137 -0
  2035. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/p5_pbev2.c +316 -0
  2036. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8.c +530 -0
  2037. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +1383 -0
  2038. data/third_party/boringssl-with-bazel/src/crypto/poly1305/internal.h +41 -0
  2039. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305.c +321 -0
  2040. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_arm.c +307 -0
  2041. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_vec.c +860 -0
  2042. data/third_party/boringssl-with-bazel/src/crypto/pool/internal.h +49 -0
  2043. data/third_party/boringssl-with-bazel/src/crypto/pool/pool.c +257 -0
  2044. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/deterministic.c +56 -0
  2045. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/forkunsafe.c +46 -0
  2046. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/fuchsia.c +34 -0
  2047. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/passive.c +34 -0
  2048. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/rand_extra.c +74 -0
  2049. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/windows.c +73 -0
  2050. data/third_party/boringssl-with-bazel/src/crypto/rc4/rc4.c +98 -0
  2051. data/third_party/boringssl-with-bazel/src/crypto/refcount_c11.c +67 -0
  2052. data/third_party/boringssl-with-bazel/src/crypto/refcount_lock.c +53 -0
  2053. data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/rsa_asn1.c +324 -0
  2054. data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/rsa_print.c +22 -0
  2055. data/third_party/boringssl-with-bazel/src/crypto/siphash/siphash.c +82 -0
  2056. data/third_party/boringssl-with-bazel/src/crypto/stack/stack.c +425 -0
  2057. data/third_party/boringssl-with-bazel/src/crypto/thread.c +110 -0
  2058. data/third_party/boringssl-with-bazel/src/crypto/thread_none.c +59 -0
  2059. data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +182 -0
  2060. data/third_party/boringssl-with-bazel/src/crypto/thread_win.c +260 -0
  2061. data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +318 -0
  2062. data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +1399 -0
  2063. data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +858 -0
  2064. data/third_party/boringssl-with-bazel/src/crypto/trust_token/voprf.c +766 -0
  2065. data/third_party/boringssl-with-bazel/src/crypto/x509/a_digest.c +96 -0
  2066. data/third_party/boringssl-with-bazel/src/crypto/x509/a_sign.c +128 -0
  2067. data/third_party/boringssl-with-bazel/src/crypto/x509/a_verify.c +118 -0
  2068. data/third_party/boringssl-with-bazel/src/crypto/x509/algorithm.c +163 -0
  2069. data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +826 -0
  2070. data/third_party/boringssl-with-bazel/src/crypto/x509/by_dir.c +459 -0
  2071. data/third_party/boringssl-with-bazel/src/crypto/x509/by_file.c +277 -0
  2072. data/third_party/boringssl-with-bazel/src/crypto/x509/i2d_pr.c +83 -0
  2073. data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +404 -0
  2074. data/third_party/boringssl-with-bazel/src/crypto/x509/name_print.c +246 -0
  2075. data/third_party/boringssl-with-bazel/src/crypto/x509/rsa_pss.c +400 -0
  2076. data/third_party/boringssl-with-bazel/src/crypto/x509/t_crl.c +130 -0
  2077. data/third_party/boringssl-with-bazel/src/crypto/x509/t_req.c +246 -0
  2078. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c +365 -0
  2079. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509a.c +116 -0
  2080. data/third_party/boringssl-with-bazel/src/crypto/x509/x509.c +90 -0
  2081. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c +358 -0
  2082. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +461 -0
  2083. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_d2.c +106 -0
  2084. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_def.c +103 -0
  2085. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_ext.c +212 -0
  2086. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_lu.c +830 -0
  2087. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_obj.c +199 -0
  2088. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +304 -0
  2089. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +240 -0
  2090. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +331 -0
  2091. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_txt.c +204 -0
  2092. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_v3.c +281 -0
  2093. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +2456 -0
  2094. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vpm.c +651 -0
  2095. data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +284 -0
  2096. data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +388 -0
  2097. data/third_party/boringssl-with-bazel/src/crypto/x509/x509rset.c +84 -0
  2098. data/third_party/boringssl-with-bazel/src/crypto/x509/x509spki.c +137 -0
  2099. data/third_party/boringssl-with-bazel/src/crypto/x509/x_algor.c +153 -0
  2100. data/third_party/boringssl-with-bazel/src/crypto/x509/x_all.c +386 -0
  2101. data/third_party/boringssl-with-bazel/src/crypto/x509/x_attrib.c +98 -0
  2102. data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +565 -0
  2103. data/third_party/boringssl-with-bazel/src/crypto/x509/x_exten.c +77 -0
  2104. data/third_party/boringssl-with-bazel/src/crypto/x509/x_info.c +98 -0
  2105. data/third_party/boringssl-with-bazel/src/crypto/x509/x_name.c +544 -0
  2106. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pkey.c +106 -0
  2107. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +217 -0
  2108. data/third_party/boringssl-with-bazel/src/crypto/x509/x_req.c +106 -0
  2109. data/third_party/boringssl-with-bazel/src/crypto/x509/x_sig.c +94 -0
  2110. data/third_party/boringssl-with-bazel/src/crypto/x509/x_spki.c +80 -0
  2111. data/third_party/boringssl-with-bazel/src/crypto/x509/x_val.c +71 -0
  2112. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +394 -0
  2113. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509a.c +201 -0
  2114. data/third_party/boringssl-with-bazel/src/crypto/x509v3/ext_dat.h +138 -0
  2115. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +289 -0
  2116. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_cache.c +287 -0
  2117. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_data.c +132 -0
  2118. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_lib.c +155 -0
  2119. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_map.c +131 -0
  2120. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_node.c +189 -0
  2121. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_tree.c +843 -0
  2122. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akey.c +226 -0
  2123. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akeya.c +72 -0
  2124. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +640 -0
  2125. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bcons.c +133 -0
  2126. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bitst.c +144 -0
  2127. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_conf.c +468 -0
  2128. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +500 -0
  2129. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_crld.c +563 -0
  2130. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_enum.c +106 -0
  2131. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_extku.c +148 -0
  2132. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_genn.c +266 -0
  2133. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ia5.c +121 -0
  2134. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_info.c +218 -0
  2135. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_int.c +91 -0
  2136. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +379 -0
  2137. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ncons.c +558 -0
  2138. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ocsp.c +68 -0
  2139. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pci.c +289 -0
  2140. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pcia.c +57 -0
  2141. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pcons.c +139 -0
  2142. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pmaps.c +154 -0
  2143. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +230 -0
  2144. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +929 -0
  2145. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +156 -0
  2146. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +1437 -0
  2147. data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +480 -0
  2148. data/third_party/boringssl-with-bazel/src/include/openssl/aes.h +207 -0
  2149. data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +240 -0
  2150. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +2039 -0
  2151. data/third_party/boringssl-with-bazel/src/include/openssl/asn1_mac.h +18 -0
  2152. data/third_party/boringssl-with-bazel/src/include/openssl/asn1t.h +718 -0
  2153. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +627 -0
  2154. data/third_party/boringssl-with-bazel/src/include/openssl/base64.h +198 -0
  2155. data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +939 -0
  2156. data/third_party/boringssl-with-bazel/src/include/openssl/blake2.h +62 -0
  2157. data/third_party/boringssl-with-bazel/src/include/openssl/blowfish.h +93 -0
  2158. data/third_party/boringssl-with-bazel/src/include/openssl/bn.h +1057 -0
  2159. data/third_party/boringssl-with-bazel/src/include/openssl/buf.h +137 -0
  2160. data/third_party/boringssl-with-bazel/src/include/openssl/buffer.h +18 -0
  2161. data/third_party/boringssl-with-bazel/src/include/openssl/bytestring.h +586 -0
  2162. data/third_party/boringssl-with-bazel/src/include/openssl/cast.h +96 -0
  2163. data/third_party/boringssl-with-bazel/src/include/openssl/chacha.h +41 -0
  2164. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +673 -0
  2165. data/third_party/boringssl-with-bazel/src/include/openssl/cmac.h +91 -0
  2166. data/third_party/boringssl-with-bazel/src/include/openssl/conf.h +183 -0
  2167. data/third_party/boringssl-with-bazel/src/include/openssl/cpu.h +202 -0
  2168. data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +169 -0
  2169. data/third_party/boringssl-with-bazel/src/include/openssl/curve25519.h +201 -0
  2170. data/third_party/boringssl-with-bazel/src/include/openssl/des.h +183 -0
  2171. data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +353 -0
  2172. data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +348 -0
  2173. data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +443 -0
  2174. data/third_party/boringssl-with-bazel/src/include/openssl/dtls1.h +16 -0
  2175. data/third_party/boringssl-with-bazel/src/include/openssl/e_os2.h +18 -0
  2176. data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +442 -0
  2177. data/third_party/boringssl-with-bazel/src/include/openssl/ec_key.h +357 -0
  2178. data/third_party/boringssl-with-bazel/src/include/openssl/ecdh.h +118 -0
  2179. data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +236 -0
  2180. data/third_party/boringssl-with-bazel/src/include/openssl/engine.h +109 -0
  2181. data/third_party/boringssl-with-bazel/src/include/openssl/err.h +466 -0
  2182. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +1083 -0
  2183. data/third_party/boringssl-with-bazel/src/include/openssl/evp_errors.h +99 -0
  2184. data/third_party/boringssl-with-bazel/src/include/openssl/ex_data.h +203 -0
  2185. data/third_party/boringssl-with-bazel/src/include/openssl/hkdf.h +68 -0
  2186. data/third_party/boringssl-with-bazel/src/include/openssl/hmac.h +186 -0
  2187. data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +350 -0
  2188. data/third_party/boringssl-with-bazel/src/include/openssl/hrss.h +102 -0
  2189. data/third_party/boringssl-with-bazel/src/include/openssl/is_boringssl.h +16 -0
  2190. data/third_party/boringssl-with-bazel/src/include/openssl/lhash.h +81 -0
  2191. data/third_party/boringssl-with-bazel/src/include/openssl/md4.h +108 -0
  2192. data/third_party/boringssl-with-bazel/src/include/openssl/md5.h +109 -0
  2193. data/third_party/boringssl-with-bazel/src/include/openssl/mem.h +184 -0
  2194. data/third_party/boringssl-with-bazel/src/include/openssl/nid.h +4259 -0
  2195. data/third_party/boringssl-with-bazel/src/include/openssl/obj.h +256 -0
  2196. data/third_party/boringssl-with-bazel/src/include/openssl/obj_mac.h +18 -0
  2197. data/third_party/boringssl-with-bazel/src/include/openssl/objects.h +18 -0
  2198. data/third_party/boringssl-with-bazel/src/include/openssl/opensslconf.h +70 -0
  2199. data/third_party/boringssl-with-bazel/src/include/openssl/opensslv.h +18 -0
  2200. data/third_party/boringssl-with-bazel/src/include/openssl/ossl_typ.h +18 -0
  2201. data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +483 -0
  2202. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs12.h +18 -0
  2203. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +239 -0
  2204. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +282 -0
  2205. data/third_party/boringssl-with-bazel/src/include/openssl/poly1305.h +49 -0
  2206. data/third_party/boringssl-with-bazel/src/include/openssl/pool.h +108 -0
  2207. data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +114 -0
  2208. data/third_party/boringssl-with-bazel/src/include/openssl/rc4.h +96 -0
  2209. data/third_party/boringssl-with-bazel/src/include/openssl/ripemd.h +108 -0
  2210. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +855 -0
  2211. data/third_party/boringssl-with-bazel/src/include/openssl/safestack.h +16 -0
  2212. data/third_party/boringssl-with-bazel/src/include/openssl/sha.h +294 -0
  2213. data/third_party/boringssl-with-bazel/src/include/openssl/siphash.h +37 -0
  2214. data/third_party/boringssl-with-bazel/src/include/openssl/span.h +222 -0
  2215. data/third_party/boringssl-with-bazel/src/include/openssl/srtp.h +18 -0
  2216. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +5624 -0
  2217. data/third_party/boringssl-with-bazel/src/include/openssl/ssl3.h +333 -0
  2218. data/third_party/boringssl-with-bazel/src/include/openssl/stack.h +542 -0
  2219. data/third_party/boringssl-with-bazel/src/include/openssl/thread.h +191 -0
  2220. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +647 -0
  2221. data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +310 -0
  2222. data/third_party/boringssl-with-bazel/src/include/openssl/type_check.h +90 -0
  2223. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +2419 -0
  2224. data/third_party/boringssl-with-bazel/src/include/openssl/x509_vfy.h +18 -0
  2225. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +1021 -0
  2226. data/third_party/boringssl-with-bazel/src/ssl/bio_ssl.cc +192 -0
  2227. data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +835 -0
  2228. data/third_party/boringssl-with-bazel/src/ssl/d1_lib.cc +268 -0
  2229. data/third_party/boringssl-with-bazel/src/ssl/d1_pkt.cc +273 -0
  2230. data/third_party/boringssl-with-bazel/src/ssl/d1_srtp.cc +232 -0
  2231. data/third_party/boringssl-with-bazel/src/ssl/dtls_method.cc +200 -0
  2232. data/third_party/boringssl-with-bazel/src/ssl/dtls_record.cc +353 -0
  2233. data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +1084 -0
  2234. data/third_party/boringssl-with-bazel/src/ssl/extensions.cc +4325 -0
  2235. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +986 -0
  2236. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +758 -0
  2237. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +1986 -0
  2238. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +1956 -0
  2239. data/third_party/boringssl-with-bazel/src/ssl/internal.h +3953 -0
  2240. data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +730 -0
  2241. data/third_party/boringssl-with-bazel/src/ssl/s3_lib.cc +219 -0
  2242. data/third_party/boringssl-with-bazel/src/ssl/s3_pkt.cc +453 -0
  2243. data/third_party/boringssl-with-bazel/src/ssl/ssl_aead_ctx.cc +432 -0
  2244. data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +896 -0
  2245. data/third_party/boringssl-with-bazel/src/ssl/ssl_buffer.cc +306 -0
  2246. data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +1014 -0
  2247. data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +1717 -0
  2248. data/third_party/boringssl-with-bazel/src/ssl/ssl_file.cc +585 -0
  2249. data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +400 -0
  2250. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +3072 -0
  2251. data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +837 -0
  2252. data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +1342 -0
  2253. data/third_party/boringssl-with-bazel/src/ssl/ssl_stat.cc +233 -0
  2254. data/third_party/boringssl-with-bazel/src/ssl/ssl_transcript.cc +272 -0
  2255. data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +402 -0
  2256. data/third_party/boringssl-with-bazel/src/ssl/ssl_x509.cc +1363 -0
  2257. data/third_party/boringssl-with-bazel/src/ssl/t1_enc.cc +384 -0
  2258. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +733 -0
  2259. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +1122 -0
  2260. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +582 -0
  2261. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +1349 -0
  2262. data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +319 -0
  2263. data/third_party/boringssl-with-bazel/src/ssl/tls_record.cc +705 -0
  2264. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_32.h +981 -0
  2265. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_64.h +619 -0
  2266. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_32.h +3147 -0
  2267. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_64.h +1226 -0
  2268. data/third_party/cares/ares_build.h +223 -0
  2269. data/third_party/cares/cares/include/ares.h +742 -0
  2270. data/third_party/cares/cares/include/ares_dns.h +112 -0
  2271. data/third_party/cares/cares/include/ares_rules.h +125 -0
  2272. data/third_party/cares/cares/include/ares_version.h +24 -0
  2273. data/third_party/cares/cares/src/lib/ares__close_sockets.c +61 -0
  2274. data/third_party/cares/cares/src/lib/ares__get_hostent.c +260 -0
  2275. data/third_party/cares/cares/src/lib/ares__parse_into_addrinfo.c +260 -0
  2276. data/third_party/cares/cares/src/lib/ares__read_line.c +73 -0
  2277. data/third_party/cares/cares/src/lib/ares__readaddrinfo.c +264 -0
  2278. data/third_party/cares/cares/src/lib/ares__sortaddrinfo.c +499 -0
  2279. data/third_party/cares/cares/src/lib/ares__timeval.c +111 -0
  2280. data/third_party/cares/cares/src/lib/ares_android.c +444 -0
  2281. data/third_party/cares/cares/src/lib/ares_android.h +27 -0
  2282. data/third_party/cares/cares/src/lib/ares_cancel.c +63 -0
  2283. data/third_party/cares/cares/src/lib/ares_create_query.c +197 -0
  2284. data/third_party/cares/cares/src/lib/ares_data.c +240 -0
  2285. data/third_party/cares/cares/src/lib/ares_data.h +74 -0
  2286. data/third_party/cares/cares/src/lib/ares_destroy.c +113 -0
  2287. data/third_party/cares/cares/src/lib/ares_expand_name.c +300 -0
  2288. data/third_party/cares/cares/src/lib/ares_expand_string.c +67 -0
  2289. data/third_party/cares/cares/src/lib/ares_fds.c +59 -0
  2290. data/third_party/cares/cares/src/lib/ares_free_hostent.c +43 -0
  2291. data/third_party/cares/cares/src/lib/ares_free_string.c +25 -0
  2292. data/third_party/cares/cares/src/lib/ares_freeaddrinfo.c +59 -0
  2293. data/third_party/cares/cares/src/lib/ares_getaddrinfo.c +772 -0
  2294. data/third_party/cares/cares/src/lib/ares_getenv.c +28 -0
  2295. data/third_party/cares/cares/src/lib/ares_getenv.h +26 -0
  2296. data/third_party/cares/cares/src/lib/ares_gethostbyaddr.c +287 -0
  2297. data/third_party/cares/cares/src/lib/ares_gethostbyname.c +534 -0
  2298. data/third_party/cares/cares/src/lib/ares_getnameinfo.c +447 -0
  2299. data/third_party/cares/cares/src/lib/ares_getsock.c +66 -0
  2300. data/third_party/cares/cares/src/lib/ares_inet_net_pton.h +25 -0
  2301. data/third_party/cares/cares/src/lib/ares_init.c +2654 -0
  2302. data/third_party/cares/cares/src/lib/ares_iphlpapi.h +221 -0
  2303. data/third_party/cares/cares/src/lib/ares_ipv6.h +85 -0
  2304. data/third_party/cares/cares/src/lib/ares_library_init.c +200 -0
  2305. data/third_party/cares/cares/src/lib/ares_library_init.h +43 -0
  2306. data/third_party/cares/cares/src/lib/ares_llist.c +63 -0
  2307. data/third_party/cares/cares/src/lib/ares_llist.h +39 -0
  2308. data/third_party/cares/cares/src/lib/ares_mkquery.c +24 -0
  2309. data/third_party/cares/cares/src/lib/ares_nameser.h +482 -0
  2310. data/third_party/cares/cares/src/lib/ares_nowarn.c +260 -0
  2311. data/third_party/cares/cares/src/lib/ares_nowarn.h +61 -0
  2312. data/third_party/cares/cares/src/lib/ares_options.c +406 -0
  2313. data/third_party/cares/cares/src/lib/ares_parse_a_reply.c +209 -0
  2314. data/third_party/cares/cares/src/lib/ares_parse_aaaa_reply.c +212 -0
  2315. data/third_party/cares/cares/src/lib/ares_parse_caa_reply.c +199 -0
  2316. data/third_party/cares/cares/src/lib/ares_parse_mx_reply.c +164 -0
  2317. data/third_party/cares/cares/src/lib/ares_parse_naptr_reply.c +183 -0
  2318. data/third_party/cares/cares/src/lib/ares_parse_ns_reply.c +177 -0
  2319. data/third_party/cares/cares/src/lib/ares_parse_ptr_reply.c +228 -0
  2320. data/third_party/cares/cares/src/lib/ares_parse_soa_reply.c +179 -0
  2321. data/third_party/cares/cares/src/lib/ares_parse_srv_reply.c +168 -0
  2322. data/third_party/cares/cares/src/lib/ares_parse_txt_reply.c +214 -0
  2323. data/third_party/cares/cares/src/lib/ares_platform.c +11042 -0
  2324. data/third_party/cares/cares/src/lib/ares_platform.h +43 -0
  2325. data/third_party/cares/cares/src/lib/ares_private.h +423 -0
  2326. data/third_party/cares/cares/src/lib/ares_process.c +1548 -0
  2327. data/third_party/cares/cares/src/lib/ares_query.c +180 -0
  2328. data/third_party/cares/cares/src/lib/ares_search.c +321 -0
  2329. data/third_party/cares/cares/src/lib/ares_send.c +131 -0
  2330. data/third_party/cares/cares/src/lib/ares_setup.h +220 -0
  2331. data/third_party/cares/cares/src/lib/ares_strcasecmp.c +66 -0
  2332. data/third_party/cares/cares/src/lib/ares_strcasecmp.h +30 -0
  2333. data/third_party/cares/cares/src/lib/ares_strdup.c +49 -0
  2334. data/third_party/cares/cares/src/lib/ares_strdup.h +24 -0
  2335. data/third_party/cares/cares/src/lib/ares_strerror.c +56 -0
  2336. data/third_party/cares/cares/src/lib/ares_strsplit.c +178 -0
  2337. data/third_party/cares/cares/src/lib/ares_strsplit.h +43 -0
  2338. data/third_party/cares/cares/src/lib/ares_timeout.c +88 -0
  2339. data/third_party/cares/cares/src/lib/ares_version.c +11 -0
  2340. data/third_party/cares/cares/src/lib/ares_writev.c +79 -0
  2341. data/third_party/cares/cares/src/lib/ares_writev.h +36 -0
  2342. data/third_party/cares/cares/src/lib/bitncmp.c +59 -0
  2343. data/third_party/cares/cares/src/lib/bitncmp.h +26 -0
  2344. data/third_party/cares/cares/src/lib/config-dos.h +115 -0
  2345. data/third_party/cares/cares/src/lib/config-win32.h +351 -0
  2346. data/third_party/cares/cares/src/lib/inet_net_pton.c +444 -0
  2347. data/third_party/cares/cares/src/lib/inet_ntop.c +201 -0
  2348. data/third_party/cares/cares/src/lib/setup_once.h +554 -0
  2349. data/third_party/cares/cares/src/lib/windows_port.c +22 -0
  2350. data/third_party/cares/config_darwin/ares_config.h +428 -0
  2351. data/third_party/cares/config_freebsd/ares_config.h +505 -0
  2352. data/third_party/cares/config_linux/ares_config.h +461 -0
  2353. data/third_party/cares/config_openbsd/ares_config.h +505 -0
  2354. data/third_party/re2/re2/bitmap256.h +117 -0
  2355. data/third_party/re2/re2/bitstate.cc +385 -0
  2356. data/third_party/re2/re2/compile.cc +1261 -0
  2357. data/third_party/re2/re2/dfa.cc +2118 -0
  2358. data/third_party/re2/re2/filtered_re2.cc +137 -0
  2359. data/third_party/re2/re2/filtered_re2.h +114 -0
  2360. data/third_party/re2/re2/mimics_pcre.cc +197 -0
  2361. data/third_party/re2/re2/nfa.cc +713 -0
  2362. data/third_party/re2/re2/onepass.cc +623 -0
  2363. data/third_party/re2/re2/parse.cc +2483 -0
  2364. data/third_party/re2/re2/perl_groups.cc +119 -0
  2365. data/third_party/re2/re2/pod_array.h +55 -0
  2366. data/third_party/re2/re2/prefilter.cc +711 -0
  2367. data/third_party/re2/re2/prefilter.h +108 -0
  2368. data/third_party/re2/re2/prefilter_tree.cc +407 -0
  2369. data/third_party/re2/re2/prefilter_tree.h +139 -0
  2370. data/third_party/re2/re2/prog.cc +1166 -0
  2371. data/third_party/re2/re2/prog.h +455 -0
  2372. data/third_party/re2/re2/re2.cc +1331 -0
  2373. data/third_party/re2/re2/re2.h +1017 -0
  2374. data/third_party/re2/re2/regexp.cc +987 -0
  2375. data/third_party/re2/re2/regexp.h +665 -0
  2376. data/third_party/re2/re2/set.cc +176 -0
  2377. data/third_party/re2/re2/set.h +85 -0
  2378. data/third_party/re2/re2/simplify.cc +665 -0
  2379. data/third_party/re2/re2/sparse_array.h +392 -0
  2380. data/third_party/re2/re2/sparse_set.h +264 -0
  2381. data/third_party/re2/re2/stringpiece.cc +65 -0
  2382. data/third_party/re2/re2/stringpiece.h +210 -0
  2383. data/third_party/re2/re2/tostring.cc +351 -0
  2384. data/third_party/re2/re2/unicode_casefold.cc +582 -0
  2385. data/third_party/re2/re2/unicode_casefold.h +78 -0
  2386. data/third_party/re2/re2/unicode_groups.cc +6269 -0
  2387. data/third_party/re2/re2/unicode_groups.h +67 -0
  2388. data/third_party/re2/re2/walker-inl.h +246 -0
  2389. data/third_party/re2/util/benchmark.h +156 -0
  2390. data/third_party/re2/util/flags.h +26 -0
  2391. data/third_party/re2/util/logging.h +109 -0
  2392. data/third_party/re2/util/malloc_counter.h +19 -0
  2393. data/third_party/re2/util/mix.h +41 -0
  2394. data/third_party/re2/util/mutex.h +148 -0
  2395. data/third_party/re2/util/pcre.cc +1025 -0
  2396. data/third_party/re2/util/pcre.h +681 -0
  2397. data/third_party/re2/util/rune.cc +260 -0
  2398. data/third_party/re2/util/strutil.cc +149 -0
  2399. data/third_party/re2/util/strutil.h +21 -0
  2400. data/third_party/re2/util/test.h +50 -0
  2401. data/third_party/re2/util/utf.h +44 -0
  2402. data/third_party/re2/util/util.h +42 -0
  2403. data/third_party/upb/third_party/utf8_range/naive.c +92 -0
  2404. data/third_party/upb/third_party/utf8_range/range2-neon.c +157 -0
  2405. data/third_party/upb/third_party/utf8_range/range2-sse.c +170 -0
  2406. data/third_party/upb/third_party/utf8_range/utf8_range.h +9 -0
  2407. data/third_party/upb/upb/decode.c +1125 -0
  2408. data/third_party/upb/upb/decode.h +94 -0
  2409. data/third_party/upb/upb/decode_fast.c +1055 -0
  2410. data/third_party/upb/upb/decode_fast.h +153 -0
  2411. data/third_party/upb/upb/decode_internal.h +211 -0
  2412. data/third_party/upb/upb/def.c +3261 -0
  2413. data/third_party/upb/upb/def.h +409 -0
  2414. data/third_party/upb/upb/def.hpp +438 -0
  2415. data/third_party/upb/upb/encode.c +604 -0
  2416. data/third_party/upb/upb/encode.h +71 -0
  2417. data/third_party/upb/upb/json_encode.c +776 -0
  2418. data/third_party/upb/upb/json_encode.h +62 -0
  2419. data/third_party/upb/upb/msg.c +428 -0
  2420. data/third_party/upb/upb/msg.h +114 -0
  2421. data/third_party/upb/upb/msg_internal.h +831 -0
  2422. data/third_party/upb/upb/port_def.inc +261 -0
  2423. data/third_party/upb/upb/port_undef.inc +62 -0
  2424. data/third_party/upb/upb/reflection.c +480 -0
  2425. data/third_party/upb/upb/reflection.h +220 -0
  2426. data/third_party/upb/upb/reflection.hpp +37 -0
  2427. data/third_party/upb/upb/table.c +926 -0
  2428. data/third_party/upb/upb/table_internal.h +385 -0
  2429. data/third_party/upb/upb/text_encode.c +472 -0
  2430. data/third_party/upb/upb/text_encode.h +64 -0
  2431. data/third_party/upb/upb/upb.c +362 -0
  2432. data/third_party/upb/upb/upb.h +373 -0
  2433. data/third_party/upb/upb/upb.hpp +115 -0
  2434. data/third_party/upb/upb/upb_internal.h +68 -0
  2435. data/third_party/xxhash/xxhash.h +5580 -0
  2436. data/third_party/zlib/adler32.c +186 -0
  2437. data/third_party/zlib/compress.c +86 -0
  2438. data/third_party/zlib/crc32.c +1116 -0
  2439. data/third_party/zlib/crc32.h +9446 -0
  2440. data/third_party/zlib/deflate.c +2211 -0
  2441. data/third_party/zlib/deflate.h +346 -0
  2442. data/third_party/zlib/gzclose.c +25 -0
  2443. data/third_party/zlib/gzguts.h +219 -0
  2444. data/third_party/zlib/gzlib.c +639 -0
  2445. data/third_party/zlib/gzread.c +652 -0
  2446. data/third_party/zlib/gzwrite.c +677 -0
  2447. data/third_party/zlib/infback.c +641 -0
  2448. data/third_party/zlib/inffast.c +323 -0
  2449. data/third_party/zlib/inffast.h +11 -0
  2450. data/third_party/zlib/inffixed.h +94 -0
  2451. data/third_party/zlib/inflate.c +1592 -0
  2452. data/third_party/zlib/inflate.h +126 -0
  2453. data/third_party/zlib/inftrees.c +304 -0
  2454. data/third_party/zlib/inftrees.h +62 -0
  2455. data/third_party/zlib/trees.c +1182 -0
  2456. data/third_party/zlib/trees.h +128 -0
  2457. data/third_party/zlib/uncompr.c +93 -0
  2458. data/third_party/zlib/zconf.h +534 -0
  2459. data/third_party/zlib/zlib.h +1935 -0
  2460. data/third_party/zlib/zutil.c +325 -0
  2461. data/third_party/zlib/zutil.h +274 -0
  2462. metadata +2490 -42
  2463. data/grpc_c.32.ruby +0 -0
  2464. data/grpc_c.64.ruby +0 -0
@@ -0,0 +1,3243 @@
1
+ //
2
+ // Copyright 2015 gRPC authors.
3
+ //
4
+ // Licensed under the Apache License, Version 2.0 (the "License");
5
+ // you may not use this file except in compliance with the License.
6
+ // You may obtain a copy of the License at
7
+ //
8
+ // http://www.apache.org/licenses/LICENSE-2.0
9
+ //
10
+ // Unless required by applicable law or agreed to in writing, software
11
+ // distributed under the License is distributed on an "AS IS" BASIS,
12
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ // See the License for the specific language governing permissions and
14
+ // limitations under the License.
15
+ //
16
+
17
+ #include <grpc/support/port_platform.h>
18
+
19
+ #include "src/core/ext/filters/client_channel/client_channel.h"
20
+
21
+ #include <inttypes.h>
22
+ #include <limits.h>
23
+ #include <stdbool.h>
24
+ #include <stdio.h>
25
+ #include <string.h>
26
+
27
+ #include <set>
28
+
29
+ #include "absl/container/inlined_vector.h"
30
+ #include "absl/strings/numbers.h"
31
+ #include "absl/strings/str_cat.h"
32
+ #include "absl/strings/str_join.h"
33
+ #include "absl/strings/string_view.h"
34
+ #include "absl/types/optional.h"
35
+
36
+ #include <grpc/support/alloc.h>
37
+ #include <grpc/support/log.h>
38
+ #include <grpc/support/string_util.h>
39
+ #include <grpc/support/sync.h>
40
+
41
+ #include "src/core/ext/filters/client_channel/backend_metric.h"
42
+ #include "src/core/ext/filters/client_channel/backup_poller.h"
43
+ #include "src/core/ext/filters/client_channel/config_selector.h"
44
+ #include "src/core/ext/filters/client_channel/dynamic_filters.h"
45
+ #include "src/core/ext/filters/client_channel/global_subchannel_pool.h"
46
+ #include "src/core/ext/filters/client_channel/http_connect_handshaker.h"
47
+ #include "src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h"
48
+ #include "src/core/ext/filters/client_channel/lb_policy_registry.h"
49
+ #include "src/core/ext/filters/client_channel/local_subchannel_pool.h"
50
+ #include "src/core/ext/filters/client_channel/proxy_mapper_registry.h"
51
+ #include "src/core/ext/filters/client_channel/resolver_result_parsing.h"
52
+ #include "src/core/ext/filters/client_channel/retry_filter.h"
53
+ #include "src/core/ext/filters/client_channel/subchannel.h"
54
+ #include "src/core/ext/filters/deadline/deadline_filter.h"
55
+ #include "src/core/lib/backoff/backoff.h"
56
+ #include "src/core/lib/channel/channel_args.h"
57
+ #include "src/core/lib/channel/channel_stack.h"
58
+ #include "src/core/lib/channel/connected_channel.h"
59
+ #include "src/core/lib/channel/status_util.h"
60
+ #include "src/core/lib/gpr/string.h"
61
+ #include "src/core/lib/gprpp/sync.h"
62
+ #include "src/core/lib/iomgr/iomgr.h"
63
+ #include "src/core/lib/iomgr/polling_entity.h"
64
+ #include "src/core/lib/iomgr/work_serializer.h"
65
+ #include "src/core/lib/profiling/timers.h"
66
+ #include "src/core/lib/resolver/resolver_registry.h"
67
+ #include "src/core/lib/service_config/service_config_call_data.h"
68
+ #include "src/core/lib/service_config/service_config_impl.h"
69
+ #include "src/core/lib/slice/slice_internal.h"
70
+ #include "src/core/lib/slice/slice_string_helpers.h"
71
+ #include "src/core/lib/surface/channel.h"
72
+ #include "src/core/lib/transport/connectivity_state.h"
73
+ #include "src/core/lib/transport/error_utils.h"
74
+ #include "src/core/lib/transport/metadata_batch.h"
75
+
76
+ //
77
+ // Client channel filter
78
+ //
79
+
80
+ #define GRPC_ARG_HEALTH_CHECK_SERVICE_NAME \
81
+ "grpc.internal.health_check_service_name"
82
+
83
+ namespace grpc_core {
84
+
85
+ using internal::ClientChannelGlobalParsedConfig;
86
+ using internal::ClientChannelMethodParsedConfig;
87
+ using internal::ClientChannelServiceConfigParser;
88
+
89
+ TraceFlag grpc_client_channel_trace(false, "client_channel");
90
+ TraceFlag grpc_client_channel_call_trace(false, "client_channel_call");
91
+ TraceFlag grpc_client_channel_lb_call_trace(false, "client_channel_lb_call");
92
+
93
+ //
94
+ // ClientChannel::CallData definition
95
+ //
96
+
97
+ class ClientChannel::CallData {
98
+ public:
99
+ static grpc_error_handle Init(grpc_call_element* elem,
100
+ const grpc_call_element_args* args);
101
+ static void Destroy(grpc_call_element* elem,
102
+ const grpc_call_final_info* final_info,
103
+ grpc_closure* then_schedule_closure);
104
+ static void StartTransportStreamOpBatch(
105
+ grpc_call_element* elem, grpc_transport_stream_op_batch* batch);
106
+ static void SetPollent(grpc_call_element* elem, grpc_polling_entity* pollent);
107
+
108
+ // Invoked by channel for queued calls when name resolution is completed.
109
+ static void CheckResolution(void* arg, grpc_error_handle error);
110
+ // Helper function for applying the service config to a call while
111
+ // holding ClientChannel::resolution_mu_.
112
+ // Returns true if the service config has been applied to the call, in which
113
+ // case the caller must invoke ResolutionDone() or AsyncResolutionDone()
114
+ // with the returned error.
115
+ bool CheckResolutionLocked(grpc_call_element* elem, grpc_error_handle* error)
116
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(&ClientChannel::resolution_mu_);
117
+ // Schedules a callback to continue processing the call once
118
+ // resolution is complete. The callback will not run until after this
119
+ // method returns.
120
+ void AsyncResolutionDone(grpc_call_element* elem, grpc_error_handle error);
121
+
122
+ private:
123
+ class ResolverQueuedCallCanceller;
124
+
125
+ CallData(grpc_call_element* elem, const ClientChannel& chand,
126
+ const grpc_call_element_args& args);
127
+ ~CallData();
128
+
129
+ // Returns the index into pending_batches_ to be used for batch.
130
+ static size_t GetBatchIndex(grpc_transport_stream_op_batch* batch);
131
+ void PendingBatchesAdd(grpc_call_element* elem,
132
+ grpc_transport_stream_op_batch* batch);
133
+ static void FailPendingBatchInCallCombiner(void* arg,
134
+ grpc_error_handle error);
135
+ // A predicate type and some useful implementations for PendingBatchesFail().
136
+ typedef bool (*YieldCallCombinerPredicate)(
137
+ const CallCombinerClosureList& closures);
138
+ static bool YieldCallCombiner(const CallCombinerClosureList& /*closures*/) {
139
+ return true;
140
+ }
141
+ static bool NoYieldCallCombiner(const CallCombinerClosureList& /*closures*/) {
142
+ return false;
143
+ }
144
+ static bool YieldCallCombinerIfPendingBatchesFound(
145
+ const CallCombinerClosureList& closures) {
146
+ return closures.size() > 0;
147
+ }
148
+ // Fails all pending batches.
149
+ // If yield_call_combiner_predicate returns true, assumes responsibility for
150
+ // yielding the call combiner.
151
+ void PendingBatchesFail(
152
+ grpc_call_element* elem, grpc_error_handle error,
153
+ YieldCallCombinerPredicate yield_call_combiner_predicate);
154
+ static void ResumePendingBatchInCallCombiner(void* arg,
155
+ grpc_error_handle ignored);
156
+ // Resumes all pending batches on lb_call_.
157
+ void PendingBatchesResume(grpc_call_element* elem);
158
+
159
+ // Applies service config to the call. Must be invoked once we know
160
+ // that the resolver has returned results to the channel.
161
+ // If an error is returned, the error indicates the status with which
162
+ // the call should be failed.
163
+ grpc_error_handle ApplyServiceConfigToCallLocked(
164
+ grpc_call_element* elem, grpc_metadata_batch* initial_metadata)
165
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(&ClientChannel::resolution_mu_);
166
+ // Invoked when the resolver result is applied to the caller, on both
167
+ // success or failure.
168
+ static void ResolutionDone(void* arg, grpc_error_handle error);
169
+ // Removes the call (if present) from the channel's list of calls queued
170
+ // for name resolution.
171
+ void MaybeRemoveCallFromResolverQueuedCallsLocked(grpc_call_element* elem)
172
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(&ClientChannel::resolution_mu_);
173
+ // Adds the call (if not already present) to the channel's list of
174
+ // calls queued for name resolution.
175
+ void MaybeAddCallToResolverQueuedCallsLocked(grpc_call_element* elem)
176
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(&ClientChannel::resolution_mu_);
177
+
178
+ static void RecvTrailingMetadataReadyForConfigSelectorCommitCallback(
179
+ void* arg, grpc_error_handle error);
180
+
181
+ void CreateDynamicCall(grpc_call_element* elem);
182
+
183
+ // State for handling deadlines.
184
+ // The code in deadline_filter.c requires this to be the first field.
185
+ // TODO(roth): This is slightly sub-optimal in that grpc_deadline_state
186
+ // and this struct both independently store pointers to the call stack
187
+ // and call combiner. If/when we have time, find a way to avoid this
188
+ // without breaking the grpc_deadline_state abstraction.
189
+ grpc_deadline_state deadline_state_;
190
+
191
+ grpc_slice path_; // Request path.
192
+ gpr_cycle_counter call_start_time_;
193
+ Timestamp deadline_;
194
+ Arena* arena_;
195
+ grpc_call_stack* owning_call_;
196
+ CallCombiner* call_combiner_;
197
+ grpc_call_context_element* call_context_;
198
+
199
+ grpc_polling_entity* pollent_ = nullptr;
200
+
201
+ grpc_closure resolution_done_closure_;
202
+
203
+ // Accessed while holding ClientChannel::resolution_mu_.
204
+ bool service_config_applied_ ABSL_GUARDED_BY(&ClientChannel::resolution_mu_) =
205
+ false;
206
+ bool queued_pending_resolver_result_
207
+ ABSL_GUARDED_BY(&ClientChannel::resolution_mu_) = false;
208
+ ClientChannel::ResolverQueuedCall resolver_queued_call_
209
+ ABSL_GUARDED_BY(&ClientChannel::resolution_mu_);
210
+ ResolverQueuedCallCanceller* resolver_call_canceller_
211
+ ABSL_GUARDED_BY(&ClientChannel::resolution_mu_) = nullptr;
212
+
213
+ grpc_closure* original_recv_trailing_metadata_ready_ = nullptr;
214
+ grpc_closure recv_trailing_metadata_ready_;
215
+
216
+ RefCountedPtr<DynamicFilters> dynamic_filters_;
217
+ RefCountedPtr<DynamicFilters::Call> dynamic_call_;
218
+
219
+ // Batches are added to this list when received from above.
220
+ // They are removed when we are done handling the batch (i.e., when
221
+ // either we have invoked all of the batch's callbacks or we have
222
+ // passed the batch down to the LB call and are not intercepting any of
223
+ // its callbacks).
224
+ grpc_transport_stream_op_batch* pending_batches_[MAX_PENDING_BATCHES] = {};
225
+
226
+ // Set when we get a cancel_stream op.
227
+ grpc_error_handle cancel_error_ = GRPC_ERROR_NONE;
228
+ };
229
+
230
+ //
231
+ // Filter vtable
232
+ //
233
+
234
+ const grpc_channel_filter ClientChannel::kFilterVtable = {
235
+ ClientChannel::CallData::StartTransportStreamOpBatch,
236
+ nullptr,
237
+ ClientChannel::StartTransportOp,
238
+ sizeof(ClientChannel::CallData),
239
+ ClientChannel::CallData::Init,
240
+ ClientChannel::CallData::SetPollent,
241
+ ClientChannel::CallData::Destroy,
242
+ sizeof(ClientChannel),
243
+ ClientChannel::Init,
244
+ ClientChannel::Destroy,
245
+ ClientChannel::GetChannelInfo,
246
+ "client-channel",
247
+ };
248
+
249
+ //
250
+ // dynamic termination filter
251
+ //
252
+
253
+ namespace {
254
+
255
+ // Channel arg pointer vtable for GRPC_ARG_CLIENT_CHANNEL.
256
+ void* ClientChannelArgCopy(void* p) { return p; }
257
+ void ClientChannelArgDestroy(void* /*p*/) {}
258
+ int ClientChannelArgCmp(void* p, void* q) { return QsortCompare(p, q); }
259
+ const grpc_arg_pointer_vtable kClientChannelArgPointerVtable = {
260
+ ClientChannelArgCopy, ClientChannelArgDestroy, ClientChannelArgCmp};
261
+
262
+ // Channel arg pointer vtable for GRPC_ARG_SERVICE_CONFIG_OBJ.
263
+ void* ServiceConfigObjArgCopy(void* p) {
264
+ auto* service_config = static_cast<ServiceConfig*>(p);
265
+ service_config->Ref().release();
266
+ return p;
267
+ }
268
+ void ServiceConfigObjArgDestroy(void* p) {
269
+ auto* service_config = static_cast<ServiceConfig*>(p);
270
+ service_config->Unref();
271
+ }
272
+ int ServiceConfigObjArgCmp(void* p, void* q) { return QsortCompare(p, q); }
273
+ const grpc_arg_pointer_vtable kServiceConfigObjArgPointerVtable = {
274
+ ServiceConfigObjArgCopy, ServiceConfigObjArgDestroy,
275
+ ServiceConfigObjArgCmp};
276
+
277
+ class DynamicTerminationFilter {
278
+ public:
279
+ class CallData;
280
+
281
+ static const grpc_channel_filter kFilterVtable;
282
+
283
+ static grpc_error_handle Init(grpc_channel_element* elem,
284
+ grpc_channel_element_args* args) {
285
+ GPR_ASSERT(args->is_last);
286
+ GPR_ASSERT(elem->filter == &kFilterVtable);
287
+ new (elem->channel_data) DynamicTerminationFilter(args->channel_args);
288
+ return GRPC_ERROR_NONE;
289
+ }
290
+
291
+ static void Destroy(grpc_channel_element* elem) {
292
+ auto* chand = static_cast<DynamicTerminationFilter*>(elem->channel_data);
293
+ chand->~DynamicTerminationFilter();
294
+ }
295
+
296
+ // Will never be called.
297
+ static void StartTransportOp(grpc_channel_element* /*elem*/,
298
+ grpc_transport_op* /*op*/) {}
299
+ static void GetChannelInfo(grpc_channel_element* /*elem*/,
300
+ const grpc_channel_info* /*info*/) {}
301
+
302
+ private:
303
+ explicit DynamicTerminationFilter(const grpc_channel_args* args)
304
+ : chand_(grpc_channel_args_find_pointer<ClientChannel>(
305
+ args, GRPC_ARG_CLIENT_CHANNEL)) {}
306
+
307
+ ClientChannel* chand_;
308
+ };
309
+
310
+ class DynamicTerminationFilter::CallData {
311
+ public:
312
+ static grpc_error_handle Init(grpc_call_element* elem,
313
+ const grpc_call_element_args* args) {
314
+ new (elem->call_data) CallData(*args);
315
+ return GRPC_ERROR_NONE;
316
+ }
317
+
318
+ static void Destroy(grpc_call_element* elem,
319
+ const grpc_call_final_info* /*final_info*/,
320
+ grpc_closure* then_schedule_closure) {
321
+ auto* calld = static_cast<CallData*>(elem->call_data);
322
+ RefCountedPtr<SubchannelCall> subchannel_call;
323
+ if (GPR_LIKELY(calld->lb_call_ != nullptr)) {
324
+ subchannel_call = calld->lb_call_->subchannel_call();
325
+ }
326
+ calld->~CallData();
327
+ if (GPR_LIKELY(subchannel_call != nullptr)) {
328
+ subchannel_call->SetAfterCallStackDestroy(then_schedule_closure);
329
+ } else {
330
+ // TODO(yashkt) : This can potentially be a Closure::Run
331
+ ExecCtx::Run(DEBUG_LOCATION, then_schedule_closure, GRPC_ERROR_NONE);
332
+ }
333
+ }
334
+
335
+ static void StartTransportStreamOpBatch(
336
+ grpc_call_element* elem, grpc_transport_stream_op_batch* batch) {
337
+ auto* calld = static_cast<CallData*>(elem->call_data);
338
+ calld->lb_call_->StartTransportStreamOpBatch(batch);
339
+ }
340
+
341
+ static void SetPollent(grpc_call_element* elem,
342
+ grpc_polling_entity* pollent) {
343
+ auto* calld = static_cast<CallData*>(elem->call_data);
344
+ auto* chand = static_cast<DynamicTerminationFilter*>(elem->channel_data);
345
+ ClientChannel* client_channel = chand->chand_;
346
+ grpc_call_element_args args = {calld->owning_call_, nullptr,
347
+ calld->call_context_, calld->path_,
348
+ /*start_time=*/0, calld->deadline_,
349
+ calld->arena_, calld->call_combiner_};
350
+ auto* service_config_call_data =
351
+ static_cast<ClientChannelServiceConfigCallData*>(
352
+ calld->call_context_[GRPC_CONTEXT_SERVICE_CONFIG_CALL_DATA].value);
353
+ calld->lb_call_ = client_channel->CreateLoadBalancedCall(
354
+ args, pollent, nullptr,
355
+ service_config_call_data->call_dispatch_controller(),
356
+ /*is_transparent_retry=*/false);
357
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
358
+ gpr_log(GPR_INFO,
359
+ "chand=%p dynamic_termination_calld=%p: create lb_call=%p", chand,
360
+ client_channel, calld->lb_call_.get());
361
+ }
362
+ }
363
+
364
+ private:
365
+ explicit CallData(const grpc_call_element_args& args)
366
+ : path_(grpc_slice_ref_internal(args.path)),
367
+ deadline_(args.deadline),
368
+ arena_(args.arena),
369
+ owning_call_(args.call_stack),
370
+ call_combiner_(args.call_combiner),
371
+ call_context_(args.context) {}
372
+
373
+ ~CallData() { grpc_slice_unref_internal(path_); }
374
+
375
+ grpc_slice path_; // Request path.
376
+ Timestamp deadline_;
377
+ Arena* arena_;
378
+ grpc_call_stack* owning_call_;
379
+ CallCombiner* call_combiner_;
380
+ grpc_call_context_element* call_context_;
381
+
382
+ OrphanablePtr<ClientChannel::LoadBalancedCall> lb_call_;
383
+ };
384
+
385
+ const grpc_channel_filter DynamicTerminationFilter::kFilterVtable = {
386
+ DynamicTerminationFilter::CallData::StartTransportStreamOpBatch,
387
+ nullptr,
388
+ DynamicTerminationFilter::StartTransportOp,
389
+ sizeof(DynamicTerminationFilter::CallData),
390
+ DynamicTerminationFilter::CallData::Init,
391
+ DynamicTerminationFilter::CallData::SetPollent,
392
+ DynamicTerminationFilter::CallData::Destroy,
393
+ sizeof(DynamicTerminationFilter),
394
+ DynamicTerminationFilter::Init,
395
+ DynamicTerminationFilter::Destroy,
396
+ DynamicTerminationFilter::GetChannelInfo,
397
+ "dynamic_filter_termination",
398
+ };
399
+
400
+ } // namespace
401
+
402
+ //
403
+ // ClientChannel::ResolverResultHandler
404
+ //
405
+
406
+ class ClientChannel::ResolverResultHandler : public Resolver::ResultHandler {
407
+ public:
408
+ explicit ResolverResultHandler(ClientChannel* chand) : chand_(chand) {
409
+ GRPC_CHANNEL_STACK_REF(chand_->owning_stack_, "ResolverResultHandler");
410
+ }
411
+
412
+ ~ResolverResultHandler() override {
413
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
414
+ gpr_log(GPR_INFO, "chand=%p: resolver shutdown complete", chand_);
415
+ }
416
+ GRPC_CHANNEL_STACK_UNREF(chand_->owning_stack_, "ResolverResultHandler");
417
+ }
418
+
419
+ void ReportResult(Resolver::Result result) override
420
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(*chand_->work_serializer_) {
421
+ chand_->OnResolverResultChangedLocked(std::move(result));
422
+ }
423
+
424
+ private:
425
+ ClientChannel* chand_;
426
+ };
427
+
428
+ //
429
+ // ClientChannel::SubchannelWrapper
430
+ //
431
+
432
+ // This class is a wrapper for Subchannel that hides details of the
433
+ // channel's implementation (such as the health check service name and
434
+ // connected subchannel) from the LB policy API.
435
+ //
436
+ // Note that no synchronization is needed here, because even if the
437
+ // underlying subchannel is shared between channels, this wrapper will only
438
+ // be used within one channel, so it will always be synchronized by the
439
+ // control plane work_serializer.
440
+ class ClientChannel::SubchannelWrapper : public SubchannelInterface {
441
+ public:
442
+ SubchannelWrapper(ClientChannel* chand, RefCountedPtr<Subchannel> subchannel,
443
+ absl::optional<std::string> health_check_service_name)
444
+ : SubchannelInterface(GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)
445
+ ? "SubchannelWrapper"
446
+ : nullptr),
447
+ chand_(chand),
448
+ subchannel_(std::move(subchannel)),
449
+ health_check_service_name_(std::move(health_check_service_name)) {
450
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
451
+ gpr_log(GPR_INFO,
452
+ "chand=%p: creating subchannel wrapper %p for subchannel %p",
453
+ chand, this, subchannel_.get());
454
+ }
455
+ GRPC_CHANNEL_STACK_REF(chand_->owning_stack_, "SubchannelWrapper");
456
+ if (chand_->channelz_node_ != nullptr) {
457
+ auto* subchannel_node = subchannel_->channelz_node();
458
+ if (subchannel_node != nullptr) {
459
+ auto it = chand_->subchannel_refcount_map_.find(subchannel_.get());
460
+ if (it == chand_->subchannel_refcount_map_.end()) {
461
+ chand_->channelz_node_->AddChildSubchannel(subchannel_node->uuid());
462
+ it = chand_->subchannel_refcount_map_.emplace(subchannel_.get(), 0)
463
+ .first;
464
+ }
465
+ ++it->second;
466
+ }
467
+ }
468
+ chand_->subchannel_wrappers_.insert(this);
469
+ }
470
+
471
+ ~SubchannelWrapper() override {
472
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
473
+ gpr_log(GPR_INFO,
474
+ "chand=%p: destroying subchannel wrapper %p for subchannel %p",
475
+ chand_, this, subchannel_.get());
476
+ }
477
+ chand_->subchannel_wrappers_.erase(this);
478
+ if (chand_->channelz_node_ != nullptr) {
479
+ auto* subchannel_node = subchannel_->channelz_node();
480
+ if (subchannel_node != nullptr) {
481
+ auto it = chand_->subchannel_refcount_map_.find(subchannel_.get());
482
+ GPR_ASSERT(it != chand_->subchannel_refcount_map_.end());
483
+ --it->second;
484
+ if (it->second == 0) {
485
+ chand_->channelz_node_->RemoveChildSubchannel(
486
+ subchannel_node->uuid());
487
+ chand_->subchannel_refcount_map_.erase(it);
488
+ }
489
+ }
490
+ }
491
+ GRPC_CHANNEL_STACK_UNREF(chand_->owning_stack_, "SubchannelWrapper");
492
+ }
493
+
494
+ grpc_connectivity_state CheckConnectivityState() override {
495
+ return subchannel_->CheckConnectivityState(health_check_service_name_);
496
+ }
497
+
498
+ void WatchConnectivityState(
499
+ grpc_connectivity_state initial_state,
500
+ std::unique_ptr<ConnectivityStateWatcherInterface> watcher) override
501
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(*chand_->work_serializer_) {
502
+ auto& watcher_wrapper = watcher_map_[watcher.get()];
503
+ GPR_ASSERT(watcher_wrapper == nullptr);
504
+ watcher_wrapper = new WatcherWrapper(std::move(watcher),
505
+ Ref(DEBUG_LOCATION, "WatcherWrapper"),
506
+ initial_state);
507
+ subchannel_->WatchConnectivityState(
508
+ initial_state, health_check_service_name_,
509
+ RefCountedPtr<Subchannel::ConnectivityStateWatcherInterface>(
510
+ watcher_wrapper));
511
+ }
512
+
513
+ void CancelConnectivityStateWatch(ConnectivityStateWatcherInterface* watcher)
514
+ override ABSL_EXCLUSIVE_LOCKS_REQUIRED(*chand_->work_serializer_) {
515
+ auto it = watcher_map_.find(watcher);
516
+ GPR_ASSERT(it != watcher_map_.end());
517
+ subchannel_->CancelConnectivityStateWatch(health_check_service_name_,
518
+ it->second);
519
+ watcher_map_.erase(it);
520
+ }
521
+
522
+ RefCountedPtr<ConnectedSubchannel> connected_subchannel() const {
523
+ return subchannel_->connected_subchannel();
524
+ }
525
+
526
+ void AttemptToConnect() override { subchannel_->AttemptToConnect(); }
527
+
528
+ void ResetBackoff() override { subchannel_->ResetBackoff(); }
529
+
530
+ const grpc_channel_args* channel_args() override {
531
+ return subchannel_->channel_args();
532
+ }
533
+
534
+ void ThrottleKeepaliveTime(int new_keepalive_time) {
535
+ subchannel_->ThrottleKeepaliveTime(new_keepalive_time);
536
+ }
537
+
538
+ private:
539
+ // Subchannel and SubchannelInterface have different interfaces for
540
+ // their respective ConnectivityStateWatcherInterface classes.
541
+ // The one in Subchannel updates the ConnectedSubchannel along with
542
+ // the state, whereas the one in SubchannelInterface does not expose
543
+ // the ConnectedSubchannel.
544
+ //
545
+ // This wrapper provides a bridge between the two. It implements
546
+ // Subchannel::ConnectivityStateWatcherInterface and wraps
547
+ // the instance of SubchannelInterface::ConnectivityStateWatcherInterface
548
+ // that was passed in by the LB policy. We pass an instance of this
549
+ // class to the underlying Subchannel, and when we get updates from
550
+ // the subchannel, we pass those on to the wrapped watcher to return
551
+ // the update to the LB policy. This allows us to set the connected
552
+ // subchannel before passing the result back to the LB policy.
553
+ class WatcherWrapper : public Subchannel::ConnectivityStateWatcherInterface {
554
+ public:
555
+ WatcherWrapper(
556
+ std::unique_ptr<SubchannelInterface::ConnectivityStateWatcherInterface>
557
+ watcher,
558
+ RefCountedPtr<SubchannelWrapper> parent,
559
+ grpc_connectivity_state initial_state)
560
+ : watcher_(std::move(watcher)),
561
+ parent_(std::move(parent)),
562
+ last_seen_state_(initial_state) {}
563
+
564
+ ~WatcherWrapper() override {
565
+ auto* parent = parent_.release(); // ref owned by lambda
566
+ parent->chand_->work_serializer_->Run(
567
+ [parent]() ABSL_EXCLUSIVE_LOCKS_REQUIRED(
568
+ *parent_->chand_->work_serializer_) {
569
+ parent->Unref(DEBUG_LOCATION, "WatcherWrapper");
570
+ },
571
+ DEBUG_LOCATION);
572
+ }
573
+
574
+ void OnConnectivityStateChange() override {
575
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
576
+ gpr_log(GPR_INFO,
577
+ "chand=%p: connectivity change for subchannel wrapper %p "
578
+ "subchannel %p; hopping into work_serializer",
579
+ parent_->chand_, parent_.get(), parent_->subchannel_.get());
580
+ }
581
+ Ref().release(); // ref owned by lambda
582
+ parent_->chand_->work_serializer_->Run(
583
+ [this]() ABSL_EXCLUSIVE_LOCKS_REQUIRED(
584
+ *parent_->chand_->work_serializer_) {
585
+ ApplyUpdateInControlPlaneWorkSerializer();
586
+ Unref();
587
+ },
588
+ DEBUG_LOCATION);
589
+ }
590
+
591
+ grpc_pollset_set* interested_parties() override {
592
+ SubchannelInterface::ConnectivityStateWatcherInterface* watcher =
593
+ watcher_.get();
594
+ if (watcher_ == nullptr) watcher = replacement_->watcher_.get();
595
+ return watcher->interested_parties();
596
+ }
597
+
598
+ WatcherWrapper* MakeReplacement() {
599
+ auto* replacement =
600
+ new WatcherWrapper(std::move(watcher_), parent_, last_seen_state_);
601
+ replacement_ = replacement;
602
+ return replacement;
603
+ }
604
+
605
+ grpc_connectivity_state last_seen_state() const { return last_seen_state_; }
606
+
607
+ private:
608
+ void ApplyUpdateInControlPlaneWorkSerializer()
609
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(*parent_->chand_->work_serializer_) {
610
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
611
+ gpr_log(GPR_INFO,
612
+ "chand=%p: processing connectivity change in work serializer "
613
+ "for subchannel wrapper %p subchannel %p "
614
+ "watcher=%p",
615
+ parent_->chand_, parent_.get(), parent_->subchannel_.get(),
616
+ watcher_.get());
617
+ }
618
+ ConnectivityStateChange state_change = PopConnectivityStateChange();
619
+ absl::optional<absl::Cord> keepalive_throttling =
620
+ state_change.status.GetPayload(kKeepaliveThrottlingKey);
621
+ if (keepalive_throttling.has_value()) {
622
+ int new_keepalive_time = -1;
623
+ if (absl::SimpleAtoi(std::string(keepalive_throttling.value()),
624
+ &new_keepalive_time)) {
625
+ if (new_keepalive_time > parent_->chand_->keepalive_time_) {
626
+ parent_->chand_->keepalive_time_ = new_keepalive_time;
627
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
628
+ gpr_log(GPR_INFO, "chand=%p: throttling keepalive time to %d",
629
+ parent_->chand_, parent_->chand_->keepalive_time_);
630
+ }
631
+ // Propagate the new keepalive time to all subchannels. This is so
632
+ // that new transports created by any subchannel (and not just the
633
+ // subchannel that received the GOAWAY), use the new keepalive time.
634
+ for (auto* subchannel_wrapper :
635
+ parent_->chand_->subchannel_wrappers_) {
636
+ subchannel_wrapper->ThrottleKeepaliveTime(new_keepalive_time);
637
+ }
638
+ }
639
+ } else {
640
+ gpr_log(GPR_ERROR, "chand=%p: Illegal keepalive throttling value %s",
641
+ parent_->chand_,
642
+ std::string(keepalive_throttling.value()).c_str());
643
+ }
644
+ }
645
+ // Ignore update if the parent WatcherWrapper has been replaced
646
+ // since this callback was scheduled.
647
+ if (watcher_ != nullptr) {
648
+ last_seen_state_ = state_change.state;
649
+ watcher_->OnConnectivityStateChange(state_change.state);
650
+ }
651
+ }
652
+
653
+ std::unique_ptr<SubchannelInterface::ConnectivityStateWatcherInterface>
654
+ watcher_;
655
+ RefCountedPtr<SubchannelWrapper> parent_;
656
+ grpc_connectivity_state last_seen_state_;
657
+ WatcherWrapper* replacement_ = nullptr;
658
+ };
659
+
660
+ ClientChannel* chand_;
661
+ RefCountedPtr<Subchannel> subchannel_;
662
+ absl::optional<std::string> health_check_service_name_;
663
+ // Maps from the address of the watcher passed to us by the LB policy
664
+ // to the address of the WrapperWatcher that we passed to the underlying
665
+ // subchannel. This is needed so that when the LB policy calls
666
+ // CancelConnectivityStateWatch() with its watcher, we know the
667
+ // corresponding WrapperWatcher to cancel on the underlying subchannel.
668
+ std::map<ConnectivityStateWatcherInterface*, WatcherWrapper*> watcher_map_
669
+ ABSL_GUARDED_BY(*chand_->work_serializer_);
670
+ };
671
+
672
+ //
673
+ // ClientChannel::ExternalConnectivityWatcher
674
+ //
675
+
676
+ ClientChannel::ExternalConnectivityWatcher::ExternalConnectivityWatcher(
677
+ ClientChannel* chand, grpc_polling_entity pollent,
678
+ grpc_connectivity_state* state, grpc_closure* on_complete,
679
+ grpc_closure* watcher_timer_init)
680
+ : chand_(chand),
681
+ pollent_(pollent),
682
+ initial_state_(*state),
683
+ state_(state),
684
+ on_complete_(on_complete),
685
+ watcher_timer_init_(watcher_timer_init) {
686
+ grpc_polling_entity_add_to_pollset_set(&pollent_,
687
+ chand_->interested_parties_);
688
+ GRPC_CHANNEL_STACK_REF(chand_->owning_stack_, "ExternalConnectivityWatcher");
689
+ {
690
+ MutexLock lock(&chand_->external_watchers_mu_);
691
+ // Will be deleted when the watch is complete.
692
+ GPR_ASSERT(chand->external_watchers_[on_complete] == nullptr);
693
+ // Store a ref to the watcher in the external_watchers_ map.
694
+ chand->external_watchers_[on_complete] =
695
+ Ref(DEBUG_LOCATION, "AddWatcherToExternalWatchersMapLocked");
696
+ }
697
+ // Pass the ref from creating the object to Start().
698
+ chand_->work_serializer_->Run(
699
+ [this]() ABSL_EXCLUSIVE_LOCKS_REQUIRED(*chand_->work_serializer_) {
700
+ // The ref is passed to AddWatcherLocked().
701
+ AddWatcherLocked();
702
+ },
703
+ DEBUG_LOCATION);
704
+ }
705
+
706
+ ClientChannel::ExternalConnectivityWatcher::~ExternalConnectivityWatcher() {
707
+ grpc_polling_entity_del_from_pollset_set(&pollent_,
708
+ chand_->interested_parties_);
709
+ GRPC_CHANNEL_STACK_UNREF(chand_->owning_stack_,
710
+ "ExternalConnectivityWatcher");
711
+ }
712
+
713
+ void ClientChannel::ExternalConnectivityWatcher::
714
+ RemoveWatcherFromExternalWatchersMap(ClientChannel* chand,
715
+ grpc_closure* on_complete,
716
+ bool cancel) {
717
+ RefCountedPtr<ExternalConnectivityWatcher> watcher;
718
+ {
719
+ MutexLock lock(&chand->external_watchers_mu_);
720
+ auto it = chand->external_watchers_.find(on_complete);
721
+ if (it != chand->external_watchers_.end()) {
722
+ watcher = std::move(it->second);
723
+ chand->external_watchers_.erase(it);
724
+ }
725
+ }
726
+ // watcher->Cancel() will hop into the WorkSerializer, so we have to unlock
727
+ // the mutex before calling it.
728
+ if (watcher != nullptr && cancel) watcher->Cancel();
729
+ }
730
+
731
+ void ClientChannel::ExternalConnectivityWatcher::Notify(
732
+ grpc_connectivity_state state, const absl::Status& /* status */) {
733
+ bool done = false;
734
+ if (!done_.compare_exchange_strong(done, true, std::memory_order_relaxed,
735
+ std::memory_order_relaxed)) {
736
+ return; // Already done.
737
+ }
738
+ // Remove external watcher.
739
+ ExternalConnectivityWatcher::RemoveWatcherFromExternalWatchersMap(
740
+ chand_, on_complete_, /*cancel=*/false);
741
+ // Report new state to the user.
742
+ *state_ = state;
743
+ ExecCtx::Run(DEBUG_LOCATION, on_complete_, GRPC_ERROR_NONE);
744
+ // Hop back into the work_serializer to clean up.
745
+ // Not needed in state SHUTDOWN, because the tracker will
746
+ // automatically remove all watchers in that case.
747
+ if (state != GRPC_CHANNEL_SHUTDOWN) {
748
+ chand_->work_serializer_->Run(
749
+ [this]() ABSL_EXCLUSIVE_LOCKS_REQUIRED(*chand_->work_serializer_) {
750
+ RemoveWatcherLocked();
751
+ },
752
+ DEBUG_LOCATION);
753
+ }
754
+ }
755
+
756
+ void ClientChannel::ExternalConnectivityWatcher::Cancel() {
757
+ bool done = false;
758
+ if (!done_.compare_exchange_strong(done, true, std::memory_order_relaxed,
759
+ std::memory_order_relaxed)) {
760
+ return; // Already done.
761
+ }
762
+ ExecCtx::Run(DEBUG_LOCATION, on_complete_, GRPC_ERROR_CANCELLED);
763
+ // Hop back into the work_serializer to clean up.
764
+ chand_->work_serializer_->Run(
765
+ [this]() ABSL_EXCLUSIVE_LOCKS_REQUIRED(*chand_->work_serializer_) {
766
+ RemoveWatcherLocked();
767
+ },
768
+ DEBUG_LOCATION);
769
+ }
770
+
771
+ void ClientChannel::ExternalConnectivityWatcher::AddWatcherLocked() {
772
+ Closure::Run(DEBUG_LOCATION, watcher_timer_init_, GRPC_ERROR_NONE);
773
+ // Add new watcher. Pass the ref of the object from creation to OrphanablePtr.
774
+ chand_->state_tracker_.AddWatcher(
775
+ initial_state_, OrphanablePtr<ConnectivityStateWatcherInterface>(this));
776
+ }
777
+
778
+ void ClientChannel::ExternalConnectivityWatcher::RemoveWatcherLocked() {
779
+ chand_->state_tracker_.RemoveWatcher(this);
780
+ }
781
+
782
+ //
783
+ // ClientChannel::ConnectivityWatcherAdder
784
+ //
785
+
786
+ class ClientChannel::ConnectivityWatcherAdder {
787
+ public:
788
+ ConnectivityWatcherAdder(
789
+ ClientChannel* chand, grpc_connectivity_state initial_state,
790
+ OrphanablePtr<AsyncConnectivityStateWatcherInterface> watcher)
791
+ : chand_(chand),
792
+ initial_state_(initial_state),
793
+ watcher_(std::move(watcher)) {
794
+ GRPC_CHANNEL_STACK_REF(chand_->owning_stack_, "ConnectivityWatcherAdder");
795
+ chand_->work_serializer_->Run(
796
+ [this]() ABSL_EXCLUSIVE_LOCKS_REQUIRED(*chand_->work_serializer_) {
797
+ AddWatcherLocked();
798
+ },
799
+ DEBUG_LOCATION);
800
+ }
801
+
802
+ private:
803
+ void AddWatcherLocked()
804
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(*chand_->work_serializer_) {
805
+ chand_->state_tracker_.AddWatcher(initial_state_, std::move(watcher_));
806
+ GRPC_CHANNEL_STACK_UNREF(chand_->owning_stack_, "ConnectivityWatcherAdder");
807
+ delete this;
808
+ }
809
+
810
+ ClientChannel* chand_;
811
+ grpc_connectivity_state initial_state_;
812
+ OrphanablePtr<AsyncConnectivityStateWatcherInterface> watcher_;
813
+ };
814
+
815
+ //
816
+ // ClientChannel::ConnectivityWatcherRemover
817
+ //
818
+
819
+ class ClientChannel::ConnectivityWatcherRemover {
820
+ public:
821
+ ConnectivityWatcherRemover(ClientChannel* chand,
822
+ AsyncConnectivityStateWatcherInterface* watcher)
823
+ : chand_(chand), watcher_(watcher) {
824
+ GRPC_CHANNEL_STACK_REF(chand_->owning_stack_, "ConnectivityWatcherRemover");
825
+ chand_->work_serializer_->Run(
826
+ [this]() ABSL_EXCLUSIVE_LOCKS_REQUIRED(*chand_->work_serializer_) {
827
+ RemoveWatcherLocked();
828
+ },
829
+ DEBUG_LOCATION);
830
+ }
831
+
832
+ private:
833
+ void RemoveWatcherLocked()
834
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(*chand_->work_serializer_) {
835
+ chand_->state_tracker_.RemoveWatcher(watcher_);
836
+ GRPC_CHANNEL_STACK_UNREF(chand_->owning_stack_,
837
+ "ConnectivityWatcherRemover");
838
+ delete this;
839
+ }
840
+
841
+ ClientChannel* chand_;
842
+ AsyncConnectivityStateWatcherInterface* watcher_;
843
+ };
844
+
845
+ //
846
+ // ClientChannel::ClientChannelControlHelper
847
+ //
848
+
849
+ class ClientChannel::ClientChannelControlHelper
850
+ : public LoadBalancingPolicy::ChannelControlHelper {
851
+ public:
852
+ explicit ClientChannelControlHelper(ClientChannel* chand) : chand_(chand) {
853
+ GRPC_CHANNEL_STACK_REF(chand_->owning_stack_, "ClientChannelControlHelper");
854
+ }
855
+
856
+ ~ClientChannelControlHelper() override {
857
+ GRPC_CHANNEL_STACK_UNREF(chand_->owning_stack_,
858
+ "ClientChannelControlHelper");
859
+ }
860
+
861
+ RefCountedPtr<SubchannelInterface> CreateSubchannel(
862
+ ServerAddress address, const grpc_channel_args& args) override
863
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(*chand_->work_serializer_) {
864
+ if (chand_->resolver_ == nullptr) return nullptr; // Shutting down.
865
+ // Determine health check service name.
866
+ absl::optional<std::string> health_check_service_name;
867
+ const char* health_check_service_name_arg = grpc_channel_args_find_string(
868
+ &args, GRPC_ARG_HEALTH_CHECK_SERVICE_NAME);
869
+ if (health_check_service_name_arg != nullptr) {
870
+ bool inhibit_health_checking = grpc_channel_args_find_bool(
871
+ &args, GRPC_ARG_INHIBIT_HEALTH_CHECKING, false);
872
+ if (!inhibit_health_checking) {
873
+ health_check_service_name = health_check_service_name_arg;
874
+ }
875
+ }
876
+ // Construct channel args for subchannel.
877
+ // Remove channel args that should not affect subchannel uniqueness.
878
+ absl::InlinedVector<const char*, 4> args_to_remove = {
879
+ GRPC_ARG_HEALTH_CHECK_SERVICE_NAME,
880
+ GRPC_ARG_INHIBIT_HEALTH_CHECKING,
881
+ GRPC_ARG_CHANNELZ_CHANNEL_NODE,
882
+ };
883
+ // Add channel args needed for the subchannel.
884
+ absl::InlinedVector<grpc_arg, 2> args_to_add = {
885
+ SubchannelPoolInterface::CreateChannelArg(
886
+ chand_->subchannel_pool_.get()),
887
+ };
888
+ // Check if default authority arg is already set.
889
+ const char* default_authority =
890
+ grpc_channel_args_find_string(&args, GRPC_ARG_DEFAULT_AUTHORITY);
891
+ // Add args from subchannel address.
892
+ if (address.args() != nullptr) {
893
+ for (size_t j = 0; j < address.args()->num_args; ++j) {
894
+ grpc_arg& arg = address.args()->args[j];
895
+ if (strcmp(arg.key, GRPC_ARG_DEFAULT_AUTHORITY) == 0) {
896
+ // Don't add default authority arg from subchannel address if
897
+ // it's already set at the channel level -- the value from the
898
+ // application should take precedence over what is set by the
899
+ // resolver.
900
+ if (default_authority != nullptr) continue;
901
+ default_authority = arg.value.string;
902
+ }
903
+ args_to_add.emplace_back(arg);
904
+ }
905
+ }
906
+ // If we haven't already set the default authority arg, add it from
907
+ // the channel.
908
+ if (default_authority == nullptr) {
909
+ // Remove it, just in case it's actually present but is the wrong type.
910
+ args_to_remove.push_back(GRPC_ARG_DEFAULT_AUTHORITY);
911
+ args_to_add.push_back(grpc_channel_arg_string_create(
912
+ const_cast<char*>(GRPC_ARG_DEFAULT_AUTHORITY),
913
+ const_cast<char*>(chand_->default_authority_.c_str())));
914
+ }
915
+ grpc_channel_args* new_args = grpc_channel_args_copy_and_add_and_remove(
916
+ &args, args_to_remove.data(), args_to_remove.size(), args_to_add.data(),
917
+ args_to_add.size());
918
+ // Create subchannel.
919
+ RefCountedPtr<Subchannel> subchannel =
920
+ chand_->client_channel_factory_->CreateSubchannel(address.address(),
921
+ new_args);
922
+ grpc_channel_args_destroy(new_args);
923
+ if (subchannel == nullptr) return nullptr;
924
+ // Make sure the subchannel has updated keepalive time.
925
+ subchannel->ThrottleKeepaliveTime(chand_->keepalive_time_);
926
+ // Create and return wrapper for the subchannel.
927
+ return MakeRefCounted<SubchannelWrapper>(
928
+ chand_, std::move(subchannel), std::move(health_check_service_name));
929
+ }
930
+
931
+ void UpdateState(
932
+ grpc_connectivity_state state, const absl::Status& status,
933
+ std::unique_ptr<LoadBalancingPolicy::SubchannelPicker> picker) override
934
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(*chand_->work_serializer_) {
935
+ if (chand_->resolver_ == nullptr) return; // Shutting down.
936
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
937
+ const char* extra = chand_->disconnect_error_ == GRPC_ERROR_NONE
938
+ ? ""
939
+ : " (ignoring -- channel shutting down)";
940
+ gpr_log(GPR_INFO, "chand=%p: update: state=%s status=(%s) picker=%p%s",
941
+ chand_, ConnectivityStateName(state), status.ToString().c_str(),
942
+ picker.get(), extra);
943
+ }
944
+ // Do update only if not shutting down.
945
+ if (chand_->disconnect_error_ == GRPC_ERROR_NONE) {
946
+ chand_->UpdateStateAndPickerLocked(state, status, "helper",
947
+ std::move(picker));
948
+ }
949
+ }
950
+
951
+ void RequestReresolution() override
952
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(*chand_->work_serializer_) {
953
+ if (chand_->resolver_ == nullptr) return; // Shutting down.
954
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
955
+ gpr_log(GPR_INFO, "chand=%p: started name re-resolving", chand_);
956
+ }
957
+ chand_->resolver_->RequestReresolutionLocked();
958
+ }
959
+
960
+ absl::string_view GetAuthority() override {
961
+ return chand_->default_authority_;
962
+ }
963
+
964
+ void AddTraceEvent(TraceSeverity severity, absl::string_view message) override
965
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(*chand_->work_serializer_) {
966
+ if (chand_->resolver_ == nullptr) return; // Shutting down.
967
+ if (chand_->channelz_node_ != nullptr) {
968
+ chand_->channelz_node_->AddTraceEvent(
969
+ ConvertSeverityEnum(severity),
970
+ grpc_slice_from_copied_buffer(message.data(), message.size()));
971
+ }
972
+ }
973
+
974
+ private:
975
+ static channelz::ChannelTrace::Severity ConvertSeverityEnum(
976
+ TraceSeverity severity) {
977
+ if (severity == TRACE_INFO) return channelz::ChannelTrace::Info;
978
+ if (severity == TRACE_WARNING) return channelz::ChannelTrace::Warning;
979
+ return channelz::ChannelTrace::Error;
980
+ }
981
+
982
+ ClientChannel* chand_;
983
+ };
984
+
985
+ //
986
+ // ClientChannel implementation
987
+ //
988
+
989
+ ClientChannel* ClientChannel::GetFromChannel(grpc_channel* channel) {
990
+ grpc_channel_element* elem =
991
+ grpc_channel_stack_last_element(grpc_channel_get_channel_stack(channel));
992
+ if (elem->filter != &kFilterVtable) return nullptr;
993
+ return static_cast<ClientChannel*>(elem->channel_data);
994
+ }
995
+
996
+ grpc_error_handle ClientChannel::Init(grpc_channel_element* elem,
997
+ grpc_channel_element_args* args) {
998
+ GPR_ASSERT(args->is_last);
999
+ GPR_ASSERT(elem->filter == &kFilterVtable);
1000
+ grpc_error_handle error = GRPC_ERROR_NONE;
1001
+ new (elem->channel_data) ClientChannel(args, &error);
1002
+ return error;
1003
+ }
1004
+
1005
+ void ClientChannel::Destroy(grpc_channel_element* elem) {
1006
+ ClientChannel* chand = static_cast<ClientChannel*>(elem->channel_data);
1007
+ chand->~ClientChannel();
1008
+ }
1009
+
1010
+ namespace {
1011
+
1012
+ RefCountedPtr<SubchannelPoolInterface> GetSubchannelPool(
1013
+ const grpc_channel_args* args) {
1014
+ const bool use_local_subchannel_pool = grpc_channel_args_find_bool(
1015
+ args, GRPC_ARG_USE_LOCAL_SUBCHANNEL_POOL, false);
1016
+ if (use_local_subchannel_pool) {
1017
+ return MakeRefCounted<LocalSubchannelPool>();
1018
+ }
1019
+ return GlobalSubchannelPool::instance();
1020
+ }
1021
+
1022
+ channelz::ChannelNode* GetChannelzNode(const grpc_channel_args* args) {
1023
+ return grpc_channel_args_find_pointer<channelz::ChannelNode>(
1024
+ args, GRPC_ARG_CHANNELZ_CHANNEL_NODE);
1025
+ }
1026
+
1027
+ } // namespace
1028
+
1029
+ ClientChannel::ClientChannel(grpc_channel_element_args* args,
1030
+ grpc_error_handle* error)
1031
+ : deadline_checking_enabled_(
1032
+ grpc_deadline_checking_enabled(args->channel_args)),
1033
+ owning_stack_(args->channel_stack),
1034
+ client_channel_factory_(
1035
+ ClientChannelFactory::GetFromChannelArgs(args->channel_args)),
1036
+ channelz_node_(GetChannelzNode(args->channel_args)),
1037
+ interested_parties_(grpc_pollset_set_create()),
1038
+ service_config_parser_index_(
1039
+ internal::ClientChannelServiceConfigParser::ParserIndex()),
1040
+ work_serializer_(std::make_shared<WorkSerializer>()),
1041
+ state_tracker_("client_channel", GRPC_CHANNEL_IDLE),
1042
+ subchannel_pool_(GetSubchannelPool(args->channel_args)) {
1043
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
1044
+ gpr_log(GPR_INFO, "chand=%p: creating client_channel for channel stack %p",
1045
+ this, owning_stack_);
1046
+ }
1047
+ // Start backup polling.
1048
+ grpc_client_channel_start_backup_polling(interested_parties_);
1049
+ // Check client channel factory.
1050
+ if (client_channel_factory_ == nullptr) {
1051
+ *error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1052
+ "Missing client channel factory in args for client channel filter");
1053
+ return;
1054
+ }
1055
+ // Get default service config. If none is specified via the client API,
1056
+ // we use an empty config.
1057
+ const char* service_config_json = grpc_channel_args_find_string(
1058
+ args->channel_args, GRPC_ARG_SERVICE_CONFIG);
1059
+ if (service_config_json == nullptr) service_config_json = "{}";
1060
+ *error = GRPC_ERROR_NONE;
1061
+ default_service_config_ =
1062
+ ServiceConfigImpl::Create(args->channel_args, service_config_json, error);
1063
+ if (*error != GRPC_ERROR_NONE) {
1064
+ default_service_config_.reset();
1065
+ return;
1066
+ }
1067
+ // Get URI to resolve, using proxy mapper if needed.
1068
+ const char* server_uri =
1069
+ grpc_channel_args_find_string(args->channel_args, GRPC_ARG_SERVER_URI);
1070
+ if (server_uri == nullptr) {
1071
+ *error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1072
+ "target URI channel arg missing or wrong type in client channel "
1073
+ "filter");
1074
+ return;
1075
+ }
1076
+ uri_to_resolve_ = server_uri;
1077
+ char* proxy_name = nullptr;
1078
+ grpc_channel_args* new_args = nullptr;
1079
+ ProxyMapperRegistry::MapName(server_uri, args->channel_args, &proxy_name,
1080
+ &new_args);
1081
+ if (proxy_name != nullptr) {
1082
+ uri_to_resolve_ = proxy_name;
1083
+ gpr_free(proxy_name);
1084
+ }
1085
+ // Make sure the URI to resolve is valid, so that we know that
1086
+ // resolver creation will succeed later.
1087
+ if (!CoreConfiguration::Get().resolver_registry().IsValidTarget(
1088
+ uri_to_resolve_)) {
1089
+ *error = GRPC_ERROR_CREATE_FROM_CPP_STRING(
1090
+ absl::StrCat("the target uri is not valid: ", uri_to_resolve_));
1091
+ return;
1092
+ }
1093
+ // Strip out service config channel arg, so that it doesn't affect
1094
+ // subchannel uniqueness when the args flow down to that layer.
1095
+ const char* arg_to_remove = GRPC_ARG_SERVICE_CONFIG;
1096
+ channel_args_ = grpc_channel_args_copy_and_remove(
1097
+ new_args != nullptr ? new_args : args->channel_args, &arg_to_remove, 1);
1098
+ grpc_channel_args_destroy(new_args);
1099
+ // Set initial keepalive time.
1100
+ keepalive_time_ = grpc_channel_args_find_integer(
1101
+ channel_args_, GRPC_ARG_KEEPALIVE_TIME_MS,
1102
+ {-1 /* default value, unset */, 1, INT_MAX});
1103
+ // Set default authority.
1104
+ const char* default_authority =
1105
+ grpc_channel_args_find_string(channel_args_, GRPC_ARG_DEFAULT_AUTHORITY);
1106
+ if (default_authority == nullptr) {
1107
+ default_authority_ =
1108
+ CoreConfiguration::Get().resolver_registry().GetDefaultAuthority(
1109
+ server_uri);
1110
+ } else {
1111
+ default_authority_ = default_authority;
1112
+ }
1113
+ // Success.
1114
+ *error = GRPC_ERROR_NONE;
1115
+ }
1116
+
1117
+ ClientChannel::~ClientChannel() {
1118
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
1119
+ gpr_log(GPR_INFO, "chand=%p: destroying channel", this);
1120
+ }
1121
+ DestroyResolverAndLbPolicyLocked();
1122
+ grpc_channel_args_destroy(channel_args_);
1123
+ // Stop backup polling.
1124
+ grpc_client_channel_stop_backup_polling(interested_parties_);
1125
+ grpc_pollset_set_destroy(interested_parties_);
1126
+ GRPC_ERROR_UNREF(disconnect_error_);
1127
+ }
1128
+
1129
+ OrphanablePtr<ClientChannel::LoadBalancedCall>
1130
+ ClientChannel::CreateLoadBalancedCall(
1131
+ const grpc_call_element_args& args, grpc_polling_entity* pollent,
1132
+ grpc_closure* on_call_destruction_complete,
1133
+ ConfigSelector::CallDispatchController* call_dispatch_controller,
1134
+ bool is_transparent_retry) {
1135
+ return OrphanablePtr<LoadBalancedCall>(args.arena->New<LoadBalancedCall>(
1136
+ this, args, pollent, on_call_destruction_complete,
1137
+ call_dispatch_controller, is_transparent_retry));
1138
+ }
1139
+
1140
+ namespace {
1141
+
1142
+ RefCountedPtr<LoadBalancingPolicy::Config> ChooseLbPolicy(
1143
+ const Resolver::Result& resolver_result,
1144
+ const internal::ClientChannelGlobalParsedConfig* parsed_service_config) {
1145
+ // Prefer the LB policy config found in the service config.
1146
+ if (parsed_service_config->parsed_lb_config() != nullptr) {
1147
+ return parsed_service_config->parsed_lb_config();
1148
+ }
1149
+ // Try the deprecated LB policy name from the service config.
1150
+ // If not, try the setting from channel args.
1151
+ const char* policy_name = nullptr;
1152
+ if (!parsed_service_config->parsed_deprecated_lb_policy().empty()) {
1153
+ policy_name = parsed_service_config->parsed_deprecated_lb_policy().c_str();
1154
+ } else {
1155
+ policy_name = grpc_channel_args_find_string(resolver_result.args,
1156
+ GRPC_ARG_LB_POLICY_NAME);
1157
+ bool requires_config = false;
1158
+ if (policy_name != nullptr &&
1159
+ (!LoadBalancingPolicyRegistry::LoadBalancingPolicyExists(
1160
+ policy_name, &requires_config) ||
1161
+ requires_config)) {
1162
+ if (requires_config) {
1163
+ gpr_log(GPR_ERROR,
1164
+ "LB policy: %s passed through channel_args must not "
1165
+ "require a config. Using pick_first instead.",
1166
+ policy_name);
1167
+ } else {
1168
+ gpr_log(GPR_ERROR,
1169
+ "LB policy: %s passed through channel_args does not exist. "
1170
+ "Using pick_first instead.",
1171
+ policy_name);
1172
+ }
1173
+ policy_name = "pick_first";
1174
+ }
1175
+ }
1176
+ // Use pick_first if nothing was specified and we didn't select grpclb
1177
+ // above.
1178
+ if (policy_name == nullptr) policy_name = "pick_first";
1179
+ // Now that we have the policy name, construct an empty config for it.
1180
+ Json config_json = Json::Array{Json::Object{
1181
+ {policy_name, Json::Object{}},
1182
+ }};
1183
+ grpc_error_handle parse_error = GRPC_ERROR_NONE;
1184
+ auto lb_policy_config = LoadBalancingPolicyRegistry::ParseLoadBalancingConfig(
1185
+ config_json, &parse_error);
1186
+ // The policy name came from one of three places:
1187
+ // - The deprecated loadBalancingPolicy field in the service config,
1188
+ // in which case the code in ClientChannelServiceConfigParser
1189
+ // already verified that the policy does not require a config.
1190
+ // - One of the hard-coded values here, all of which are known to not
1191
+ // require a config.
1192
+ // - A channel arg, in which case we check that the specified policy exists
1193
+ // and accepts an empty config. If not, we revert to using pick_first
1194
+ // lb_policy
1195
+ GPR_ASSERT(lb_policy_config != nullptr);
1196
+ GPR_ASSERT(parse_error == GRPC_ERROR_NONE);
1197
+ return lb_policy_config;
1198
+ }
1199
+
1200
+ } // namespace
1201
+
1202
+ void ClientChannel::OnResolverResultChangedLocked(Resolver::Result result) {
1203
+ // Handle race conditions.
1204
+ if (resolver_ == nullptr) return;
1205
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
1206
+ gpr_log(GPR_INFO, "chand=%p: got resolver result", this);
1207
+ }
1208
+ // We only want to trace the address resolution in the follow cases:
1209
+ // (a) Address resolution resulted in service config change.
1210
+ // (b) Address resolution that causes number of backends to go from
1211
+ // zero to non-zero.
1212
+ // (c) Address resolution that causes number of backends to go from
1213
+ // non-zero to zero.
1214
+ // (d) Address resolution that causes a new LB policy to be created.
1215
+ //
1216
+ // We track a list of strings to eventually be concatenated and traced.
1217
+ absl::InlinedVector<const char*, 3> trace_strings;
1218
+ const bool resolution_contains_addresses =
1219
+ result.addresses.ok() && !result.addresses->empty();
1220
+ if (!resolution_contains_addresses &&
1221
+ previous_resolution_contained_addresses_) {
1222
+ trace_strings.push_back("Address list became empty");
1223
+ } else if (resolution_contains_addresses &&
1224
+ !previous_resolution_contained_addresses_) {
1225
+ trace_strings.push_back("Address list became non-empty");
1226
+ }
1227
+ previous_resolution_contained_addresses_ = resolution_contains_addresses;
1228
+ std::string service_config_error_string_storage;
1229
+ if (!result.service_config.ok()) {
1230
+ service_config_error_string_storage =
1231
+ result.service_config.status().ToString();
1232
+ trace_strings.push_back(service_config_error_string_storage.c_str());
1233
+ }
1234
+ // Choose the service config.
1235
+ RefCountedPtr<ServiceConfig> service_config;
1236
+ RefCountedPtr<ConfigSelector> config_selector;
1237
+ if (!result.service_config.ok()) {
1238
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
1239
+ gpr_log(GPR_INFO, "chand=%p: resolver returned service config error: %s",
1240
+ this, result.service_config.status().ToString().c_str());
1241
+ }
1242
+ // If the service config was invalid, then fallback to the
1243
+ // previously returned service config.
1244
+ if (saved_service_config_ != nullptr) {
1245
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
1246
+ gpr_log(GPR_INFO,
1247
+ "chand=%p: resolver returned invalid service config. "
1248
+ "Continuing to use previous service config.",
1249
+ this);
1250
+ }
1251
+ service_config = saved_service_config_;
1252
+ config_selector = saved_config_selector_;
1253
+ } else {
1254
+ // We received a service config error and we don't have a
1255
+ // previous service config to fall back to. Put the channel into
1256
+ // TRANSIENT_FAILURE.
1257
+ OnResolverErrorLocked(result.service_config.status());
1258
+ trace_strings.push_back("no valid service config");
1259
+ }
1260
+ } else if (*result.service_config == nullptr) {
1261
+ // Resolver did not return any service config.
1262
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
1263
+ gpr_log(GPR_INFO,
1264
+ "chand=%p: resolver returned no service config. Using default "
1265
+ "service config for channel.",
1266
+ this);
1267
+ }
1268
+ service_config = default_service_config_;
1269
+ } else {
1270
+ // Use ServiceConfig and ConfigSelector returned by resolver.
1271
+ service_config = std::move(*result.service_config);
1272
+ config_selector = ConfigSelector::GetFromChannelArgs(*result.args);
1273
+ }
1274
+ // Note: The only case in which service_config is null here is if the resolver
1275
+ // returned a service config error and we don't have a previous service
1276
+ // config to fall back to.
1277
+ if (service_config != nullptr) {
1278
+ // Extract global config for client channel.
1279
+ const internal::ClientChannelGlobalParsedConfig* parsed_service_config =
1280
+ static_cast<const internal::ClientChannelGlobalParsedConfig*>(
1281
+ service_config->GetGlobalParsedConfig(
1282
+ service_config_parser_index_));
1283
+ // Choose LB policy config.
1284
+ RefCountedPtr<LoadBalancingPolicy::Config> lb_policy_config =
1285
+ ChooseLbPolicy(result, parsed_service_config);
1286
+ // Check if the ServiceConfig has changed.
1287
+ const bool service_config_changed =
1288
+ saved_service_config_ == nullptr ||
1289
+ service_config->json_string() != saved_service_config_->json_string();
1290
+ // Check if the ConfigSelector has changed.
1291
+ const bool config_selector_changed = !ConfigSelector::Equals(
1292
+ saved_config_selector_.get(), config_selector.get());
1293
+ // If either has changed, apply the global parameters now.
1294
+ if (service_config_changed || config_selector_changed) {
1295
+ // Update service config in control plane.
1296
+ UpdateServiceConfigInControlPlaneLocked(std::move(service_config),
1297
+ std::move(config_selector),
1298
+ lb_policy_config->name());
1299
+ } else if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
1300
+ gpr_log(GPR_INFO, "chand=%p: service config not changed", this);
1301
+ }
1302
+ // Create or update LB policy, as needed.
1303
+ CreateOrUpdateLbPolicyLocked(
1304
+ std::move(lb_policy_config),
1305
+ parsed_service_config->health_check_service_name(), std::move(result));
1306
+ if (service_config_changed || config_selector_changed) {
1307
+ // Start using new service config for calls.
1308
+ // This needs to happen after the LB policy has been updated, since
1309
+ // the ConfigSelector may need the LB policy to know about new
1310
+ // destinations before it can send RPCs to those destinations.
1311
+ UpdateServiceConfigInDataPlaneLocked();
1312
+ // TODO(ncteisen): might be worth somehow including a snippet of the
1313
+ // config in the trace, at the risk of bloating the trace logs.
1314
+ trace_strings.push_back("Service config changed");
1315
+ }
1316
+ }
1317
+ // Add channel trace event.
1318
+ if (!trace_strings.empty()) {
1319
+ std::string message =
1320
+ absl::StrCat("Resolution event: ", absl::StrJoin(trace_strings, ", "));
1321
+ if (channelz_node_ != nullptr) {
1322
+ channelz_node_->AddTraceEvent(channelz::ChannelTrace::Severity::Info,
1323
+ grpc_slice_from_cpp_string(message));
1324
+ }
1325
+ }
1326
+ }
1327
+
1328
+ void ClientChannel::OnResolverErrorLocked(absl::Status status) {
1329
+ if (resolver_ == nullptr) return;
1330
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
1331
+ gpr_log(GPR_INFO, "chand=%p: resolver transient failure: %s", this,
1332
+ status.ToString().c_str());
1333
+ }
1334
+ // If we already have an LB policy from a previous resolution
1335
+ // result, then we continue to let it set the connectivity state.
1336
+ // Otherwise, we go into TRANSIENT_FAILURE.
1337
+ if (lb_policy_ == nullptr) {
1338
+ grpc_error_handle error = absl_status_to_grpc_error(status);
1339
+ {
1340
+ MutexLock lock(&resolution_mu_);
1341
+ // Update resolver transient failure.
1342
+ resolver_transient_failure_error_ = status;
1343
+ // Process calls that were queued waiting for the resolver result.
1344
+ for (ResolverQueuedCall* call = resolver_queued_calls_; call != nullptr;
1345
+ call = call->next) {
1346
+ grpc_call_element* elem = call->elem;
1347
+ CallData* calld = static_cast<CallData*>(elem->call_data);
1348
+ grpc_error_handle error = GRPC_ERROR_NONE;
1349
+ if (calld->CheckResolutionLocked(elem, &error)) {
1350
+ calld->AsyncResolutionDone(elem, error);
1351
+ }
1352
+ }
1353
+ }
1354
+ GRPC_ERROR_UNREF(error);
1355
+ // Update connectivity state.
1356
+ UpdateStateAndPickerLocked(
1357
+ GRPC_CHANNEL_TRANSIENT_FAILURE, status, "resolver failure",
1358
+ absl::make_unique<LoadBalancingPolicy::TransientFailurePicker>(status));
1359
+ }
1360
+ }
1361
+
1362
+ void ClientChannel::CreateOrUpdateLbPolicyLocked(
1363
+ RefCountedPtr<LoadBalancingPolicy::Config> lb_policy_config,
1364
+ const absl::optional<std::string>& health_check_service_name,
1365
+ Resolver::Result result) {
1366
+ // Construct update.
1367
+ LoadBalancingPolicy::UpdateArgs update_args;
1368
+ update_args.addresses = std::move(result.addresses);
1369
+ update_args.config = std::move(lb_policy_config);
1370
+ update_args.resolution_note = std::move(result.resolution_note);
1371
+ // Add health check service name to channel args.
1372
+ absl::InlinedVector<grpc_arg, 1> args_to_add;
1373
+ if (health_check_service_name.has_value()) {
1374
+ args_to_add.push_back(grpc_channel_arg_string_create(
1375
+ const_cast<char*>(GRPC_ARG_HEALTH_CHECK_SERVICE_NAME),
1376
+ const_cast<char*>(health_check_service_name->c_str())));
1377
+ }
1378
+ // Remove the config selector from channel args so that we're not holding
1379
+ // unnecessary refs that cause it to be destroyed somewhere other than in the
1380
+ // WorkSerializer.
1381
+ const char* arg_to_remove = GRPC_ARG_CONFIG_SELECTOR;
1382
+ update_args.args = grpc_channel_args_copy_and_add_and_remove(
1383
+ result.args, &arg_to_remove, 1, args_to_add.data(), args_to_add.size());
1384
+ // Create policy if needed.
1385
+ if (lb_policy_ == nullptr) {
1386
+ lb_policy_ = CreateLbPolicyLocked(*update_args.args);
1387
+ }
1388
+ // Update the policy.
1389
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
1390
+ gpr_log(GPR_INFO, "chand=%p: Updating child policy %p", this,
1391
+ lb_policy_.get());
1392
+ }
1393
+ lb_policy_->UpdateLocked(std::move(update_args));
1394
+ }
1395
+
1396
+ // Creates a new LB policy.
1397
+ OrphanablePtr<LoadBalancingPolicy> ClientChannel::CreateLbPolicyLocked(
1398
+ const grpc_channel_args& args) {
1399
+ LoadBalancingPolicy::Args lb_policy_args;
1400
+ lb_policy_args.work_serializer = work_serializer_;
1401
+ lb_policy_args.channel_control_helper =
1402
+ absl::make_unique<ClientChannelControlHelper>(this);
1403
+ lb_policy_args.args = &args;
1404
+ OrphanablePtr<LoadBalancingPolicy> lb_policy =
1405
+ MakeOrphanable<ChildPolicyHandler>(std::move(lb_policy_args),
1406
+ &grpc_client_channel_trace);
1407
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
1408
+ gpr_log(GPR_INFO, "chand=%p: created new LB policy %p", this,
1409
+ lb_policy.get());
1410
+ }
1411
+ grpc_pollset_set_add_pollset_set(lb_policy->interested_parties(),
1412
+ interested_parties_);
1413
+ return lb_policy;
1414
+ }
1415
+
1416
+ void ClientChannel::AddResolverQueuedCall(ResolverQueuedCall* call,
1417
+ grpc_polling_entity* pollent) {
1418
+ // Add call to queued calls list.
1419
+ call->next = resolver_queued_calls_;
1420
+ resolver_queued_calls_ = call;
1421
+ // Add call's pollent to channel's interested_parties, so that I/O
1422
+ // can be done under the call's CQ.
1423
+ grpc_polling_entity_add_to_pollset_set(pollent, interested_parties_);
1424
+ }
1425
+
1426
+ void ClientChannel::RemoveResolverQueuedCall(ResolverQueuedCall* to_remove,
1427
+ grpc_polling_entity* pollent) {
1428
+ // Remove call's pollent from channel's interested_parties.
1429
+ grpc_polling_entity_del_from_pollset_set(pollent, interested_parties_);
1430
+ // Remove from queued calls list.
1431
+ for (ResolverQueuedCall** call = &resolver_queued_calls_; *call != nullptr;
1432
+ call = &(*call)->next) {
1433
+ if (*call == to_remove) {
1434
+ *call = to_remove->next;
1435
+ return;
1436
+ }
1437
+ }
1438
+ }
1439
+
1440
+ void ClientChannel::UpdateServiceConfigInControlPlaneLocked(
1441
+ RefCountedPtr<ServiceConfig> service_config,
1442
+ RefCountedPtr<ConfigSelector> config_selector, std::string lb_policy_name) {
1443
+ std::string service_config_json(service_config->json_string());
1444
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
1445
+ gpr_log(GPR_INFO,
1446
+ "chand=%p: resolver returned updated service config: \"%s\"", this,
1447
+ service_config_json.c_str());
1448
+ }
1449
+ // Save service config.
1450
+ saved_service_config_ = std::move(service_config);
1451
+ // Swap out the data used by GetChannelInfo().
1452
+ {
1453
+ MutexLock lock(&info_mu_);
1454
+ info_lb_policy_name_ = std::move(lb_policy_name);
1455
+ info_service_config_json_ = std::move(service_config_json);
1456
+ }
1457
+ // Save config selector.
1458
+ saved_config_selector_ = std::move(config_selector);
1459
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
1460
+ gpr_log(GPR_INFO, "chand=%p: using ConfigSelector %p", this,
1461
+ saved_config_selector_.get());
1462
+ }
1463
+ }
1464
+
1465
+ void ClientChannel::UpdateServiceConfigInDataPlaneLocked() {
1466
+ // Grab ref to service config.
1467
+ RefCountedPtr<ServiceConfig> service_config = saved_service_config_;
1468
+ // Grab ref to config selector. Use default if resolver didn't supply one.
1469
+ RefCountedPtr<ConfigSelector> config_selector = saved_config_selector_;
1470
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
1471
+ gpr_log(GPR_INFO, "chand=%p: switching to ConfigSelector %p", this,
1472
+ saved_config_selector_.get());
1473
+ }
1474
+ if (config_selector == nullptr) {
1475
+ config_selector =
1476
+ MakeRefCounted<DefaultConfigSelector>(saved_service_config_);
1477
+ }
1478
+ absl::InlinedVector<grpc_arg, 2> args_to_add = {
1479
+ grpc_channel_arg_pointer_create(
1480
+ const_cast<char*>(GRPC_ARG_CLIENT_CHANNEL), this,
1481
+ &kClientChannelArgPointerVtable),
1482
+ grpc_channel_arg_pointer_create(
1483
+ const_cast<char*>(GRPC_ARG_SERVICE_CONFIG_OBJ), service_config.get(),
1484
+ &kServiceConfigObjArgPointerVtable),
1485
+ };
1486
+ grpc_channel_args* new_args = grpc_channel_args_copy_and_add(
1487
+ channel_args_, args_to_add.data(), args_to_add.size());
1488
+ new_args = config_selector->ModifyChannelArgs(new_args);
1489
+ bool enable_retries =
1490
+ grpc_channel_args_find_bool(new_args, GRPC_ARG_ENABLE_RETRIES, true);
1491
+ // Construct dynamic filter stack.
1492
+ std::vector<const grpc_channel_filter*> filters =
1493
+ config_selector->GetFilters();
1494
+ if (enable_retries) {
1495
+ filters.push_back(&kRetryFilterVtable);
1496
+ } else {
1497
+ filters.push_back(&DynamicTerminationFilter::kFilterVtable);
1498
+ }
1499
+ RefCountedPtr<DynamicFilters> dynamic_filters =
1500
+ DynamicFilters::Create(new_args, std::move(filters));
1501
+ GPR_ASSERT(dynamic_filters != nullptr);
1502
+ grpc_channel_args_destroy(new_args);
1503
+ // Grab data plane lock to update service config.
1504
+ //
1505
+ // We defer unreffing the old values (and deallocating memory) until
1506
+ // after releasing the lock to keep the critical section small.
1507
+ {
1508
+ MutexLock lock(&resolution_mu_);
1509
+ resolver_transient_failure_error_ = absl::OkStatus();
1510
+ // Update service config.
1511
+ received_service_config_data_ = true;
1512
+ // Old values will be unreffed after lock is released.
1513
+ service_config_.swap(service_config);
1514
+ config_selector_.swap(config_selector);
1515
+ dynamic_filters_.swap(dynamic_filters);
1516
+ // Process calls that were queued waiting for the resolver result.
1517
+ for (ResolverQueuedCall* call = resolver_queued_calls_; call != nullptr;
1518
+ call = call->next) {
1519
+ // If there are a lot of queued calls here, resuming them all may cause us
1520
+ // to stay inside C-core for a long period of time. All of that work would
1521
+ // be done using the same ExecCtx instance and therefore the same cached
1522
+ // value of "now". The longer it takes to finish all of this work and exit
1523
+ // from C-core, the more stale the cached value of "now" may become. This
1524
+ // can cause problems whereby (e.g.) we calculate a timer deadline based
1525
+ // on the stale value, which results in the timer firing too early. To
1526
+ // avoid this, we invalidate the cached value for each call we process.
1527
+ ExecCtx::Get()->InvalidateNow();
1528
+ grpc_call_element* elem = call->elem;
1529
+ CallData* calld = static_cast<CallData*>(elem->call_data);
1530
+ grpc_error_handle error = GRPC_ERROR_NONE;
1531
+ if (calld->CheckResolutionLocked(elem, &error)) {
1532
+ calld->AsyncResolutionDone(elem, error);
1533
+ }
1534
+ }
1535
+ }
1536
+ // Old values will be unreffed after lock is released when they go out
1537
+ // of scope.
1538
+ }
1539
+
1540
+ void ClientChannel::CreateResolverLocked() {
1541
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
1542
+ gpr_log(GPR_INFO, "chand=%p: starting name resolution", this);
1543
+ }
1544
+ resolver_ = CoreConfiguration::Get().resolver_registry().CreateResolver(
1545
+ uri_to_resolve_.c_str(), channel_args_, interested_parties_,
1546
+ work_serializer_, absl::make_unique<ResolverResultHandler>(this));
1547
+ // Since the validity of the args was checked when the channel was created,
1548
+ // CreateResolver() must return a non-null result.
1549
+ GPR_ASSERT(resolver_ != nullptr);
1550
+ UpdateStateAndPickerLocked(
1551
+ GRPC_CHANNEL_CONNECTING, absl::Status(), "started resolving",
1552
+ absl::make_unique<LoadBalancingPolicy::QueuePicker>(nullptr));
1553
+ resolver_->StartLocked();
1554
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
1555
+ gpr_log(GPR_INFO, "chand=%p: created resolver=%p", this, resolver_.get());
1556
+ }
1557
+ }
1558
+
1559
+ void ClientChannel::DestroyResolverAndLbPolicyLocked() {
1560
+ if (resolver_ != nullptr) {
1561
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
1562
+ gpr_log(GPR_INFO, "chand=%p: shutting down resolver=%p", this,
1563
+ resolver_.get());
1564
+ }
1565
+ resolver_.reset();
1566
+ if (lb_policy_ != nullptr) {
1567
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
1568
+ gpr_log(GPR_INFO, "chand=%p: shutting down lb_policy=%p", this,
1569
+ lb_policy_.get());
1570
+ }
1571
+ grpc_pollset_set_del_pollset_set(lb_policy_->interested_parties(),
1572
+ interested_parties_);
1573
+ lb_policy_.reset();
1574
+ }
1575
+ }
1576
+ }
1577
+
1578
+ void ClientChannel::UpdateStateAndPickerLocked(
1579
+ grpc_connectivity_state state, const absl::Status& status,
1580
+ const char* reason,
1581
+ std::unique_ptr<LoadBalancingPolicy::SubchannelPicker> picker) {
1582
+ // Special case for IDLE and SHUTDOWN states.
1583
+ if (picker == nullptr || state == GRPC_CHANNEL_SHUTDOWN) {
1584
+ saved_service_config_.reset();
1585
+ saved_config_selector_.reset();
1586
+ // Acquire resolution lock to update config selector and associated state.
1587
+ // To minimize lock contention, we wait to unref these objects until
1588
+ // after we release the lock.
1589
+ RefCountedPtr<ServiceConfig> service_config_to_unref;
1590
+ RefCountedPtr<ConfigSelector> config_selector_to_unref;
1591
+ RefCountedPtr<DynamicFilters> dynamic_filters_to_unref;
1592
+ {
1593
+ MutexLock lock(&resolution_mu_);
1594
+ received_service_config_data_ = false;
1595
+ service_config_to_unref = std::move(service_config_);
1596
+ config_selector_to_unref = std::move(config_selector_);
1597
+ dynamic_filters_to_unref = std::move(dynamic_filters_);
1598
+ }
1599
+ }
1600
+ // Update connectivity state.
1601
+ state_tracker_.SetState(state, status, reason);
1602
+ if (channelz_node_ != nullptr) {
1603
+ channelz_node_->SetConnectivityState(state);
1604
+ channelz_node_->AddTraceEvent(
1605
+ channelz::ChannelTrace::Severity::Info,
1606
+ grpc_slice_from_static_string(
1607
+ channelz::ChannelNode::GetChannelConnectivityStateChangeString(
1608
+ state)));
1609
+ }
1610
+ // Grab data plane lock to update the picker.
1611
+ {
1612
+ MutexLock lock(&data_plane_mu_);
1613
+ // Swap out the picker.
1614
+ // Note: Original value will be destroyed after the lock is released.
1615
+ picker_.swap(picker);
1616
+ // Re-process queued picks.
1617
+ for (LbQueuedCall* call = lb_queued_calls_; call != nullptr;
1618
+ call = call->next) {
1619
+ // If there are a lot of queued calls here, resuming them all may cause us
1620
+ // to stay inside C-core for a long period of time. All of that work would
1621
+ // be done using the same ExecCtx instance and therefore the same cached
1622
+ // value of "now". The longer it takes to finish all of this work and exit
1623
+ // from C-core, the more stale the cached value of "now" may become. This
1624
+ // can cause problems whereby (e.g.) we calculate a timer deadline based
1625
+ // on the stale value, which results in the timer firing too early. To
1626
+ // avoid this, we invalidate the cached value for each call we process.
1627
+ ExecCtx::Get()->InvalidateNow();
1628
+ grpc_error_handle error = GRPC_ERROR_NONE;
1629
+ if (call->lb_call->PickSubchannelLocked(&error)) {
1630
+ call->lb_call->AsyncPickDone(error);
1631
+ }
1632
+ }
1633
+ }
1634
+ }
1635
+
1636
+ namespace {
1637
+
1638
+ // TODO(roth): Remove this in favor of the gprpp Match() function once
1639
+ // we can do that without breaking lock annotations.
1640
+ template <typename T>
1641
+ T HandlePickResult(
1642
+ LoadBalancingPolicy::PickResult* result,
1643
+ std::function<T(LoadBalancingPolicy::PickResult::Complete*)> complete_func,
1644
+ std::function<T(LoadBalancingPolicy::PickResult::Queue*)> queue_func,
1645
+ std::function<T(LoadBalancingPolicy::PickResult::Fail*)> fail_func,
1646
+ std::function<T(LoadBalancingPolicy::PickResult::Drop*)> drop_func) {
1647
+ auto* complete_pick =
1648
+ absl::get_if<LoadBalancingPolicy::PickResult::Complete>(&result->result);
1649
+ if (complete_pick != nullptr) {
1650
+ return complete_func(complete_pick);
1651
+ }
1652
+ auto* queue_pick =
1653
+ absl::get_if<LoadBalancingPolicy::PickResult::Queue>(&result->result);
1654
+ if (queue_pick != nullptr) {
1655
+ return queue_func(queue_pick);
1656
+ }
1657
+ auto* fail_pick =
1658
+ absl::get_if<LoadBalancingPolicy::PickResult::Fail>(&result->result);
1659
+ if (fail_pick != nullptr) {
1660
+ return fail_func(fail_pick);
1661
+ }
1662
+ auto* drop_pick =
1663
+ absl::get_if<LoadBalancingPolicy::PickResult::Drop>(&result->result);
1664
+ GPR_ASSERT(drop_pick != nullptr);
1665
+ return drop_func(drop_pick);
1666
+ }
1667
+
1668
+ } // namespace
1669
+
1670
+ grpc_error_handle ClientChannel::DoPingLocked(grpc_transport_op* op) {
1671
+ if (state_tracker_.state() != GRPC_CHANNEL_READY) {
1672
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING("channel not connected");
1673
+ }
1674
+ LoadBalancingPolicy::PickResult result;
1675
+ {
1676
+ MutexLock lock(&data_plane_mu_);
1677
+ result = picker_->Pick(LoadBalancingPolicy::PickArgs());
1678
+ }
1679
+ return HandlePickResult<grpc_error_handle>(
1680
+ &result,
1681
+ // Complete pick.
1682
+ [op](LoadBalancingPolicy::PickResult::Complete* complete_pick)
1683
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(*ClientChannel::work_serializer_) {
1684
+ SubchannelWrapper* subchannel = static_cast<SubchannelWrapper*>(
1685
+ complete_pick->subchannel.get());
1686
+ RefCountedPtr<ConnectedSubchannel> connected_subchannel =
1687
+ subchannel->connected_subchannel();
1688
+ connected_subchannel->Ping(op->send_ping.on_initiate,
1689
+ op->send_ping.on_ack);
1690
+ return GRPC_ERROR_NONE;
1691
+ },
1692
+ // Queue pick.
1693
+ [](LoadBalancingPolicy::PickResult::Queue* /*queue_pick*/) {
1694
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING("LB picker queued call");
1695
+ },
1696
+ // Fail pick.
1697
+ [](LoadBalancingPolicy::PickResult::Fail* fail_pick) {
1698
+ return absl_status_to_grpc_error(fail_pick->status);
1699
+ },
1700
+ // Drop pick.
1701
+ [](LoadBalancingPolicy::PickResult::Drop* drop_pick) {
1702
+ return absl_status_to_grpc_error(drop_pick->status);
1703
+ });
1704
+ }
1705
+
1706
+ void ClientChannel::StartTransportOpLocked(grpc_transport_op* op) {
1707
+ // Connectivity watch.
1708
+ if (op->start_connectivity_watch != nullptr) {
1709
+ state_tracker_.AddWatcher(op->start_connectivity_watch_state,
1710
+ std::move(op->start_connectivity_watch));
1711
+ }
1712
+ if (op->stop_connectivity_watch != nullptr) {
1713
+ state_tracker_.RemoveWatcher(op->stop_connectivity_watch);
1714
+ }
1715
+ // Ping.
1716
+ if (op->send_ping.on_initiate != nullptr || op->send_ping.on_ack != nullptr) {
1717
+ grpc_error_handle error = DoPingLocked(op);
1718
+ if (error != GRPC_ERROR_NONE) {
1719
+ ExecCtx::Run(DEBUG_LOCATION, op->send_ping.on_initiate,
1720
+ GRPC_ERROR_REF(error));
1721
+ ExecCtx::Run(DEBUG_LOCATION, op->send_ping.on_ack, error);
1722
+ }
1723
+ op->bind_pollset = nullptr;
1724
+ op->send_ping.on_initiate = nullptr;
1725
+ op->send_ping.on_ack = nullptr;
1726
+ }
1727
+ // Reset backoff.
1728
+ if (op->reset_connect_backoff) {
1729
+ if (lb_policy_ != nullptr) {
1730
+ lb_policy_->ResetBackoffLocked();
1731
+ }
1732
+ }
1733
+ // Disconnect or enter IDLE.
1734
+ if (op->disconnect_with_error != GRPC_ERROR_NONE) {
1735
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
1736
+ gpr_log(GPR_INFO, "chand=%p: disconnect_with_error: %s", this,
1737
+ grpc_error_std_string(op->disconnect_with_error).c_str());
1738
+ }
1739
+ DestroyResolverAndLbPolicyLocked();
1740
+ intptr_t value;
1741
+ if (grpc_error_get_int(op->disconnect_with_error,
1742
+ GRPC_ERROR_INT_CHANNEL_CONNECTIVITY_STATE, &value) &&
1743
+ static_cast<grpc_connectivity_state>(value) == GRPC_CHANNEL_IDLE) {
1744
+ if (disconnect_error_ == GRPC_ERROR_NONE) {
1745
+ // Enter IDLE state.
1746
+ UpdateStateAndPickerLocked(GRPC_CHANNEL_IDLE, absl::Status(),
1747
+ "channel entering IDLE", nullptr);
1748
+ }
1749
+ GRPC_ERROR_UNREF(op->disconnect_with_error);
1750
+ } else {
1751
+ // Disconnect.
1752
+ GPR_ASSERT(disconnect_error_ == GRPC_ERROR_NONE);
1753
+ disconnect_error_ = op->disconnect_with_error;
1754
+ UpdateStateAndPickerLocked(
1755
+ GRPC_CHANNEL_SHUTDOWN, absl::Status(), "shutdown from API",
1756
+ absl::make_unique<LoadBalancingPolicy::TransientFailurePicker>(
1757
+ grpc_error_to_absl_status(op->disconnect_with_error)));
1758
+ }
1759
+ }
1760
+ GRPC_CHANNEL_STACK_UNREF(owning_stack_, "start_transport_op");
1761
+ ExecCtx::Run(DEBUG_LOCATION, op->on_consumed, GRPC_ERROR_NONE);
1762
+ }
1763
+
1764
+ void ClientChannel::StartTransportOp(grpc_channel_element* elem,
1765
+ grpc_transport_op* op) {
1766
+ ClientChannel* chand = static_cast<ClientChannel*>(elem->channel_data);
1767
+ GPR_ASSERT(op->set_accept_stream == false);
1768
+ // Handle bind_pollset.
1769
+ if (op->bind_pollset != nullptr) {
1770
+ grpc_pollset_set_add_pollset(chand->interested_parties_, op->bind_pollset);
1771
+ }
1772
+ // Pop into control plane work_serializer for remaining ops.
1773
+ GRPC_CHANNEL_STACK_REF(chand->owning_stack_, "start_transport_op");
1774
+ chand->work_serializer_->Run(
1775
+ [chand, op]() ABSL_EXCLUSIVE_LOCKS_REQUIRED(*chand->work_serializer_) {
1776
+ chand->StartTransportOpLocked(op);
1777
+ },
1778
+ DEBUG_LOCATION);
1779
+ }
1780
+
1781
+ void ClientChannel::GetChannelInfo(grpc_channel_element* elem,
1782
+ const grpc_channel_info* info) {
1783
+ ClientChannel* chand = static_cast<ClientChannel*>(elem->channel_data);
1784
+ MutexLock lock(&chand->info_mu_);
1785
+ if (info->lb_policy_name != nullptr) {
1786
+ *info->lb_policy_name = gpr_strdup(chand->info_lb_policy_name_.c_str());
1787
+ }
1788
+ if (info->service_config_json != nullptr) {
1789
+ *info->service_config_json =
1790
+ gpr_strdup(chand->info_service_config_json_.c_str());
1791
+ }
1792
+ }
1793
+
1794
+ void ClientChannel::AddLbQueuedCall(LbQueuedCall* call,
1795
+ grpc_polling_entity* pollent) {
1796
+ // Add call to queued picks list.
1797
+ call->next = lb_queued_calls_;
1798
+ lb_queued_calls_ = call;
1799
+ // Add call's pollent to channel's interested_parties, so that I/O
1800
+ // can be done under the call's CQ.
1801
+ grpc_polling_entity_add_to_pollset_set(pollent, interested_parties_);
1802
+ }
1803
+
1804
+ void ClientChannel::RemoveLbQueuedCall(LbQueuedCall* to_remove,
1805
+ grpc_polling_entity* pollent) {
1806
+ // Remove call's pollent from channel's interested_parties.
1807
+ grpc_polling_entity_del_from_pollset_set(pollent, interested_parties_);
1808
+ // Remove from queued picks list.
1809
+ for (LbQueuedCall** call = &lb_queued_calls_; *call != nullptr;
1810
+ call = &(*call)->next) {
1811
+ if (*call == to_remove) {
1812
+ *call = to_remove->next;
1813
+ return;
1814
+ }
1815
+ }
1816
+ }
1817
+
1818
+ void ClientChannel::TryToConnectLocked() {
1819
+ if (lb_policy_ != nullptr) {
1820
+ lb_policy_->ExitIdleLocked();
1821
+ } else if (resolver_ == nullptr) {
1822
+ CreateResolverLocked();
1823
+ }
1824
+ GRPC_CHANNEL_STACK_UNREF(owning_stack_, "TryToConnect");
1825
+ }
1826
+
1827
+ grpc_connectivity_state ClientChannel::CheckConnectivityState(
1828
+ bool try_to_connect) {
1829
+ // state_tracker_ is guarded by work_serializer_, which we're not
1830
+ // holding here. But the one method of state_tracker_ that *is*
1831
+ // thread-safe to call without external synchronization is the state()
1832
+ // method, so we can disable thread-safety analysis for this one read.
1833
+ grpc_connectivity_state out = ABSL_TS_UNCHECKED_READ(state_tracker_).state();
1834
+ if (out == GRPC_CHANNEL_IDLE && try_to_connect) {
1835
+ GRPC_CHANNEL_STACK_REF(owning_stack_, "TryToConnect");
1836
+ work_serializer_->Run([this]() ABSL_EXCLUSIVE_LOCKS_REQUIRED(
1837
+ *work_serializer_) { TryToConnectLocked(); },
1838
+ DEBUG_LOCATION);
1839
+ }
1840
+ return out;
1841
+ }
1842
+
1843
+ void ClientChannel::AddConnectivityWatcher(
1844
+ grpc_connectivity_state initial_state,
1845
+ OrphanablePtr<AsyncConnectivityStateWatcherInterface> watcher) {
1846
+ new ConnectivityWatcherAdder(this, initial_state, std::move(watcher));
1847
+ }
1848
+
1849
+ void ClientChannel::RemoveConnectivityWatcher(
1850
+ AsyncConnectivityStateWatcherInterface* watcher) {
1851
+ new ConnectivityWatcherRemover(this, watcher);
1852
+ }
1853
+
1854
+ //
1855
+ // CallData implementation
1856
+ //
1857
+
1858
+ ClientChannel::CallData::CallData(grpc_call_element* elem,
1859
+ const ClientChannel& chand,
1860
+ const grpc_call_element_args& args)
1861
+ : deadline_state_(elem, args,
1862
+ GPR_LIKELY(chand.deadline_checking_enabled_)
1863
+ ? args.deadline
1864
+ : Timestamp::InfFuture()),
1865
+ path_(grpc_slice_ref_internal(args.path)),
1866
+ call_start_time_(args.start_time),
1867
+ deadline_(args.deadline),
1868
+ arena_(args.arena),
1869
+ owning_call_(args.call_stack),
1870
+ call_combiner_(args.call_combiner),
1871
+ call_context_(args.context) {
1872
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
1873
+ gpr_log(GPR_INFO, "chand=%p calld=%p: created call", &chand, this);
1874
+ }
1875
+ }
1876
+
1877
+ ClientChannel::CallData::~CallData() {
1878
+ grpc_slice_unref_internal(path_);
1879
+ GRPC_ERROR_UNREF(cancel_error_);
1880
+ // Make sure there are no remaining pending batches.
1881
+ for (size_t i = 0; i < GPR_ARRAY_SIZE(pending_batches_); ++i) {
1882
+ GPR_ASSERT(pending_batches_[i] == nullptr);
1883
+ }
1884
+ }
1885
+
1886
+ grpc_error_handle ClientChannel::CallData::Init(
1887
+ grpc_call_element* elem, const grpc_call_element_args* args) {
1888
+ ClientChannel* chand = static_cast<ClientChannel*>(elem->channel_data);
1889
+ new (elem->call_data) CallData(elem, *chand, *args);
1890
+ return GRPC_ERROR_NONE;
1891
+ }
1892
+
1893
+ void ClientChannel::CallData::Destroy(
1894
+ grpc_call_element* elem, const grpc_call_final_info* /*final_info*/,
1895
+ grpc_closure* then_schedule_closure) {
1896
+ CallData* calld = static_cast<CallData*>(elem->call_data);
1897
+ RefCountedPtr<DynamicFilters::Call> dynamic_call =
1898
+ std::move(calld->dynamic_call_);
1899
+ calld->~CallData();
1900
+ if (GPR_LIKELY(dynamic_call != nullptr)) {
1901
+ dynamic_call->SetAfterCallStackDestroy(then_schedule_closure);
1902
+ } else {
1903
+ // TODO(yashkt) : This can potentially be a Closure::Run
1904
+ ExecCtx::Run(DEBUG_LOCATION, then_schedule_closure, GRPC_ERROR_NONE);
1905
+ }
1906
+ }
1907
+
1908
+ void ClientChannel::CallData::StartTransportStreamOpBatch(
1909
+ grpc_call_element* elem, grpc_transport_stream_op_batch* batch) {
1910
+ GPR_TIMER_SCOPE("cc_start_transport_stream_op_batch", 0);
1911
+ CallData* calld = static_cast<CallData*>(elem->call_data);
1912
+ ClientChannel* chand = static_cast<ClientChannel*>(elem->channel_data);
1913
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace) &&
1914
+ !GRPC_TRACE_FLAG_ENABLED(grpc_trace_channel)) {
1915
+ gpr_log(GPR_INFO, "chand=%p calld=%p: batch started from above: %s", chand,
1916
+ calld, grpc_transport_stream_op_batch_string(batch).c_str());
1917
+ }
1918
+ if (GPR_LIKELY(chand->deadline_checking_enabled_)) {
1919
+ grpc_deadline_state_client_start_transport_stream_op_batch(elem, batch);
1920
+ }
1921
+ // Intercept recv_trailing_metadata to call CallDispatchController::Commit(),
1922
+ // in case we wind up failing the call before we get down to the retry
1923
+ // or LB call layer.
1924
+ if (batch->recv_trailing_metadata) {
1925
+ calld->original_recv_trailing_metadata_ready_ =
1926
+ batch->payload->recv_trailing_metadata.recv_trailing_metadata_ready;
1927
+ GRPC_CLOSURE_INIT(&calld->recv_trailing_metadata_ready_,
1928
+ RecvTrailingMetadataReadyForConfigSelectorCommitCallback,
1929
+ elem, nullptr);
1930
+ batch->payload->recv_trailing_metadata.recv_trailing_metadata_ready =
1931
+ &calld->recv_trailing_metadata_ready_;
1932
+ }
1933
+ // If we already have a dynamic call, pass the batch down to it.
1934
+ // Note that once we have done so, we do not need to acquire the channel's
1935
+ // resolution mutex, which is more efficient (especially for streaming calls).
1936
+ if (calld->dynamic_call_ != nullptr) {
1937
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
1938
+ gpr_log(GPR_INFO, "chand=%p calld=%p: starting batch on dynamic_call=%p",
1939
+ chand, calld, calld->dynamic_call_.get());
1940
+ }
1941
+ calld->dynamic_call_->StartTransportStreamOpBatch(batch);
1942
+ return;
1943
+ }
1944
+ // We do not yet have a dynamic call.
1945
+ //
1946
+ // If we've previously been cancelled, immediately fail any new batches.
1947
+ if (GPR_UNLIKELY(calld->cancel_error_ != GRPC_ERROR_NONE)) {
1948
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
1949
+ gpr_log(GPR_INFO, "chand=%p calld=%p: failing batch with error: %s",
1950
+ chand, calld,
1951
+ grpc_error_std_string(calld->cancel_error_).c_str());
1952
+ }
1953
+ // Note: This will release the call combiner.
1954
+ grpc_transport_stream_op_batch_finish_with_failure(
1955
+ batch, GRPC_ERROR_REF(calld->cancel_error_), calld->call_combiner_);
1956
+ return;
1957
+ }
1958
+ // Handle cancellation.
1959
+ if (GPR_UNLIKELY(batch->cancel_stream)) {
1960
+ // Stash a copy of cancel_error in our call data, so that we can use
1961
+ // it for subsequent operations. This ensures that if the call is
1962
+ // cancelled before any batches are passed down (e.g., if the deadline
1963
+ // is in the past when the call starts), we can return the right
1964
+ // error to the caller when the first batch does get passed down.
1965
+ GRPC_ERROR_UNREF(calld->cancel_error_);
1966
+ calld->cancel_error_ =
1967
+ GRPC_ERROR_REF(batch->payload->cancel_stream.cancel_error);
1968
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
1969
+ gpr_log(GPR_INFO, "chand=%p calld=%p: recording cancel_error=%s", chand,
1970
+ calld, grpc_error_std_string(calld->cancel_error_).c_str());
1971
+ }
1972
+ // Fail all pending batches.
1973
+ calld->PendingBatchesFail(elem, GRPC_ERROR_REF(calld->cancel_error_),
1974
+ NoYieldCallCombiner);
1975
+ // Note: This will release the call combiner.
1976
+ grpc_transport_stream_op_batch_finish_with_failure(
1977
+ batch, GRPC_ERROR_REF(calld->cancel_error_), calld->call_combiner_);
1978
+ return;
1979
+ }
1980
+ // Add the batch to the pending list.
1981
+ calld->PendingBatchesAdd(elem, batch);
1982
+ // For batches containing a send_initial_metadata op, acquire the
1983
+ // channel's resolution mutex to apply the service config to the call,
1984
+ // after which we will create a dynamic call.
1985
+ if (GPR_LIKELY(batch->send_initial_metadata)) {
1986
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
1987
+ gpr_log(GPR_INFO,
1988
+ "chand=%p calld=%p: grabbing resolution mutex to apply service "
1989
+ "config",
1990
+ chand, calld);
1991
+ }
1992
+ CheckResolution(elem, GRPC_ERROR_NONE);
1993
+ } else {
1994
+ // For all other batches, release the call combiner.
1995
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
1996
+ gpr_log(GPR_INFO,
1997
+ "chand=%p calld=%p: saved batch, yielding call combiner", chand,
1998
+ calld);
1999
+ }
2000
+ GRPC_CALL_COMBINER_STOP(calld->call_combiner_,
2001
+ "batch does not include send_initial_metadata");
2002
+ }
2003
+ }
2004
+
2005
+ void ClientChannel::CallData::SetPollent(grpc_call_element* elem,
2006
+ grpc_polling_entity* pollent) {
2007
+ CallData* calld = static_cast<CallData*>(elem->call_data);
2008
+ calld->pollent_ = pollent;
2009
+ }
2010
+
2011
+ //
2012
+ // pending_batches management
2013
+ //
2014
+
2015
+ size_t ClientChannel::CallData::GetBatchIndex(
2016
+ grpc_transport_stream_op_batch* batch) {
2017
+ // Note: It is important the send_initial_metadata be the first entry
2018
+ // here, since the code in ApplyServiceConfigToCallLocked() and
2019
+ // CheckResolutionLocked() assumes it will be.
2020
+ if (batch->send_initial_metadata) return 0;
2021
+ if (batch->send_message) return 1;
2022
+ if (batch->send_trailing_metadata) return 2;
2023
+ if (batch->recv_initial_metadata) return 3;
2024
+ if (batch->recv_message) return 4;
2025
+ if (batch->recv_trailing_metadata) return 5;
2026
+ GPR_UNREACHABLE_CODE(return (size_t)-1);
2027
+ }
2028
+
2029
+ // This is called via the call combiner, so access to calld is synchronized.
2030
+ void ClientChannel::CallData::PendingBatchesAdd(
2031
+ grpc_call_element* elem, grpc_transport_stream_op_batch* batch) {
2032
+ ClientChannel* chand = static_cast<ClientChannel*>(elem->channel_data);
2033
+ const size_t idx = GetBatchIndex(batch);
2034
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
2035
+ gpr_log(GPR_INFO,
2036
+ "chand=%p calld=%p: adding pending batch at index %" PRIuPTR, chand,
2037
+ this, idx);
2038
+ }
2039
+ grpc_transport_stream_op_batch*& pending = pending_batches_[idx];
2040
+ GPR_ASSERT(pending == nullptr);
2041
+ pending = batch;
2042
+ }
2043
+
2044
+ // This is called via the call combiner, so access to calld is synchronized.
2045
+ void ClientChannel::CallData::FailPendingBatchInCallCombiner(
2046
+ void* arg, grpc_error_handle error) {
2047
+ grpc_transport_stream_op_batch* batch =
2048
+ static_cast<grpc_transport_stream_op_batch*>(arg);
2049
+ CallData* calld = static_cast<CallData*>(batch->handler_private.extra_arg);
2050
+ // Note: This will release the call combiner.
2051
+ grpc_transport_stream_op_batch_finish_with_failure(
2052
+ batch, GRPC_ERROR_REF(error), calld->call_combiner_);
2053
+ }
2054
+
2055
+ // This is called via the call combiner, so access to calld is synchronized.
2056
+ void ClientChannel::CallData::PendingBatchesFail(
2057
+ grpc_call_element* elem, grpc_error_handle error,
2058
+ YieldCallCombinerPredicate yield_call_combiner_predicate) {
2059
+ GPR_ASSERT(error != GRPC_ERROR_NONE);
2060
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
2061
+ size_t num_batches = 0;
2062
+ for (size_t i = 0; i < GPR_ARRAY_SIZE(pending_batches_); ++i) {
2063
+ if (pending_batches_[i] != nullptr) ++num_batches;
2064
+ }
2065
+ gpr_log(GPR_INFO,
2066
+ "chand=%p calld=%p: failing %" PRIuPTR " pending batches: %s",
2067
+ elem->channel_data, this, num_batches,
2068
+ grpc_error_std_string(error).c_str());
2069
+ }
2070
+ CallCombinerClosureList closures;
2071
+ for (size_t i = 0; i < GPR_ARRAY_SIZE(pending_batches_); ++i) {
2072
+ grpc_transport_stream_op_batch*& batch = pending_batches_[i];
2073
+ if (batch != nullptr) {
2074
+ batch->handler_private.extra_arg = this;
2075
+ GRPC_CLOSURE_INIT(&batch->handler_private.closure,
2076
+ FailPendingBatchInCallCombiner, batch,
2077
+ grpc_schedule_on_exec_ctx);
2078
+ closures.Add(&batch->handler_private.closure, GRPC_ERROR_REF(error),
2079
+ "PendingBatchesFail");
2080
+ batch = nullptr;
2081
+ }
2082
+ }
2083
+ if (yield_call_combiner_predicate(closures)) {
2084
+ closures.RunClosures(call_combiner_);
2085
+ } else {
2086
+ closures.RunClosuresWithoutYielding(call_combiner_);
2087
+ }
2088
+ GRPC_ERROR_UNREF(error);
2089
+ }
2090
+
2091
+ // This is called via the call combiner, so access to calld is synchronized.
2092
+ void ClientChannel::CallData::ResumePendingBatchInCallCombiner(
2093
+ void* arg, grpc_error_handle /*ignored*/) {
2094
+ grpc_transport_stream_op_batch* batch =
2095
+ static_cast<grpc_transport_stream_op_batch*>(arg);
2096
+ auto* elem =
2097
+ static_cast<grpc_call_element*>(batch->handler_private.extra_arg);
2098
+ auto* calld = static_cast<CallData*>(elem->call_data);
2099
+ // Note: This will release the call combiner.
2100
+ calld->dynamic_call_->StartTransportStreamOpBatch(batch);
2101
+ }
2102
+
2103
+ // This is called via the call combiner, so access to calld is synchronized.
2104
+ void ClientChannel::CallData::PendingBatchesResume(grpc_call_element* elem) {
2105
+ ClientChannel* chand = static_cast<ClientChannel*>(elem->channel_data);
2106
+ // Retries not enabled; send down batches as-is.
2107
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
2108
+ size_t num_batches = 0;
2109
+ for (size_t i = 0; i < GPR_ARRAY_SIZE(pending_batches_); ++i) {
2110
+ if (pending_batches_[i] != nullptr) ++num_batches;
2111
+ }
2112
+ gpr_log(GPR_INFO,
2113
+ "chand=%p calld=%p: starting %" PRIuPTR
2114
+ " pending batches on dynamic_call=%p",
2115
+ chand, this, num_batches, dynamic_call_.get());
2116
+ }
2117
+ CallCombinerClosureList closures;
2118
+ for (size_t i = 0; i < GPR_ARRAY_SIZE(pending_batches_); ++i) {
2119
+ grpc_transport_stream_op_batch*& batch = pending_batches_[i];
2120
+ if (batch != nullptr) {
2121
+ batch->handler_private.extra_arg = elem;
2122
+ GRPC_CLOSURE_INIT(&batch->handler_private.closure,
2123
+ ResumePendingBatchInCallCombiner, batch, nullptr);
2124
+ closures.Add(&batch->handler_private.closure, GRPC_ERROR_NONE,
2125
+ "resuming pending batch from client channel call");
2126
+ batch = nullptr;
2127
+ }
2128
+ }
2129
+ // Note: This will release the call combiner.
2130
+ closures.RunClosures(call_combiner_);
2131
+ }
2132
+
2133
+ //
2134
+ // name resolution
2135
+ //
2136
+
2137
+ // A class to handle the call combiner cancellation callback for a
2138
+ // queued pick.
2139
+ class ClientChannel::CallData::ResolverQueuedCallCanceller {
2140
+ public:
2141
+ explicit ResolverQueuedCallCanceller(grpc_call_element* elem) : elem_(elem) {
2142
+ auto* calld = static_cast<CallData*>(elem->call_data);
2143
+ GRPC_CALL_STACK_REF(calld->owning_call_, "ResolverQueuedCallCanceller");
2144
+ GRPC_CLOSURE_INIT(&closure_, &CancelLocked, this,
2145
+ grpc_schedule_on_exec_ctx);
2146
+ calld->call_combiner_->SetNotifyOnCancel(&closure_);
2147
+ }
2148
+
2149
+ private:
2150
+ static void CancelLocked(void* arg, grpc_error_handle error) {
2151
+ auto* self = static_cast<ResolverQueuedCallCanceller*>(arg);
2152
+ auto* chand = static_cast<ClientChannel*>(self->elem_->channel_data);
2153
+ auto* calld = static_cast<CallData*>(self->elem_->call_data);
2154
+ {
2155
+ MutexLock lock(&chand->resolution_mu_);
2156
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
2157
+ gpr_log(GPR_INFO,
2158
+ "chand=%p calld=%p: cancelling resolver queued pick: "
2159
+ "error=%s self=%p calld->resolver_pick_canceller=%p",
2160
+ chand, calld, grpc_error_std_string(error).c_str(), self,
2161
+ calld->resolver_call_canceller_);
2162
+ }
2163
+ if (calld->resolver_call_canceller_ == self && error != GRPC_ERROR_NONE) {
2164
+ // Remove pick from list of queued picks.
2165
+ calld->MaybeRemoveCallFromResolverQueuedCallsLocked(self->elem_);
2166
+ // Fail pending batches on the call.
2167
+ calld->PendingBatchesFail(self->elem_, GRPC_ERROR_REF(error),
2168
+ YieldCallCombinerIfPendingBatchesFound);
2169
+ }
2170
+ }
2171
+ GRPC_CALL_STACK_UNREF(calld->owning_call_, "ResolvingQueuedCallCanceller");
2172
+ delete self;
2173
+ }
2174
+
2175
+ grpc_call_element* elem_;
2176
+ grpc_closure closure_;
2177
+ };
2178
+
2179
+ void ClientChannel::CallData::MaybeRemoveCallFromResolverQueuedCallsLocked(
2180
+ grpc_call_element* elem) {
2181
+ if (!queued_pending_resolver_result_) return;
2182
+ auto* chand = static_cast<ClientChannel*>(elem->channel_data);
2183
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
2184
+ gpr_log(GPR_INFO,
2185
+ "chand=%p calld=%p: removing from resolver queued picks list",
2186
+ chand, this);
2187
+ }
2188
+ chand->RemoveResolverQueuedCall(&resolver_queued_call_, pollent_);
2189
+ queued_pending_resolver_result_ = false;
2190
+ // Lame the call combiner canceller.
2191
+ resolver_call_canceller_ = nullptr;
2192
+ }
2193
+
2194
+ void ClientChannel::CallData::MaybeAddCallToResolverQueuedCallsLocked(
2195
+ grpc_call_element* elem) {
2196
+ if (queued_pending_resolver_result_) return;
2197
+ auto* chand = static_cast<ClientChannel*>(elem->channel_data);
2198
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
2199
+ gpr_log(GPR_INFO, "chand=%p calld=%p: adding to resolver queued picks list",
2200
+ chand, this);
2201
+ }
2202
+ queued_pending_resolver_result_ = true;
2203
+ resolver_queued_call_.elem = elem;
2204
+ chand->AddResolverQueuedCall(&resolver_queued_call_, pollent_);
2205
+ // Register call combiner cancellation callback.
2206
+ resolver_call_canceller_ = new ResolverQueuedCallCanceller(elem);
2207
+ }
2208
+
2209
+ grpc_error_handle ClientChannel::CallData::ApplyServiceConfigToCallLocked(
2210
+ grpc_call_element* elem, grpc_metadata_batch* initial_metadata) {
2211
+ ClientChannel* chand = static_cast<ClientChannel*>(elem->channel_data);
2212
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
2213
+ gpr_log(GPR_INFO, "chand=%p calld=%p: applying service config to call",
2214
+ chand, this);
2215
+ }
2216
+ ConfigSelector* config_selector = chand->config_selector_.get();
2217
+ if (config_selector != nullptr) {
2218
+ // Use the ConfigSelector to determine the config for the call.
2219
+ ConfigSelector::CallConfig call_config =
2220
+ config_selector->GetCallConfig({&path_, initial_metadata, arena_});
2221
+ if (call_config.error != GRPC_ERROR_NONE) return call_config.error;
2222
+ // Create a ClientChannelServiceConfigCallData for the call. This stores
2223
+ // a ref to the ServiceConfig and caches the right set of parsed configs
2224
+ // to use for the call. The ClientChannelServiceConfigCallData will store
2225
+ // itself in the call context, so that it can be accessed by filters
2226
+ // below us in the stack, and it will be cleaned up when the call ends.
2227
+ auto* service_config_call_data =
2228
+ arena_->New<ClientChannelServiceConfigCallData>(
2229
+ std::move(call_config.service_config), call_config.method_configs,
2230
+ std::move(call_config.call_attributes),
2231
+ call_config.call_dispatch_controller, call_context_);
2232
+ // Apply our own method params to the call.
2233
+ auto* method_params = static_cast<ClientChannelMethodParsedConfig*>(
2234
+ service_config_call_data->GetMethodParsedConfig(
2235
+ chand->service_config_parser_index_));
2236
+ if (method_params != nullptr) {
2237
+ // If the deadline from the service config is shorter than the one
2238
+ // from the client API, reset the deadline timer.
2239
+ if (chand->deadline_checking_enabled_ &&
2240
+ method_params->timeout() != Duration::Zero()) {
2241
+ const Timestamp per_method_deadline =
2242
+ Timestamp::FromCycleCounterRoundUp(call_start_time_) +
2243
+ method_params->timeout();
2244
+ if (per_method_deadline < deadline_) {
2245
+ deadline_ = per_method_deadline;
2246
+ grpc_deadline_state_reset(elem, deadline_);
2247
+ }
2248
+ }
2249
+ // If the service config set wait_for_ready and the application
2250
+ // did not explicitly set it, use the value from the service config.
2251
+ uint32_t* send_initial_metadata_flags =
2252
+ &pending_batches_[0]
2253
+ ->payload->send_initial_metadata.send_initial_metadata_flags;
2254
+ if (method_params->wait_for_ready().has_value() &&
2255
+ !(*send_initial_metadata_flags &
2256
+ GRPC_INITIAL_METADATA_WAIT_FOR_READY_EXPLICITLY_SET)) {
2257
+ if (method_params->wait_for_ready().value()) {
2258
+ *send_initial_metadata_flags |= GRPC_INITIAL_METADATA_WAIT_FOR_READY;
2259
+ } else {
2260
+ *send_initial_metadata_flags &= ~GRPC_INITIAL_METADATA_WAIT_FOR_READY;
2261
+ }
2262
+ }
2263
+ }
2264
+ // Set the dynamic filter stack.
2265
+ dynamic_filters_ = chand->dynamic_filters_;
2266
+ }
2267
+ return GRPC_ERROR_NONE;
2268
+ }
2269
+
2270
+ void ClientChannel::CallData::
2271
+ RecvTrailingMetadataReadyForConfigSelectorCommitCallback(
2272
+ void* arg, grpc_error_handle error) {
2273
+ auto* elem = static_cast<grpc_call_element*>(arg);
2274
+ auto* chand = static_cast<ClientChannel*>(elem->channel_data);
2275
+ auto* calld = static_cast<CallData*>(elem->call_data);
2276
+ auto* service_config_call_data =
2277
+ static_cast<ClientChannelServiceConfigCallData*>(
2278
+ calld->call_context_[GRPC_CONTEXT_SERVICE_CONFIG_CALL_DATA].value);
2279
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
2280
+ gpr_log(GPR_INFO,
2281
+ "chand=%p calld=%p: got recv_trailing_metadata_ready: error=%s "
2282
+ "service_config_call_data=%p",
2283
+ chand, calld, grpc_error_std_string(error).c_str(),
2284
+ service_config_call_data);
2285
+ }
2286
+ if (service_config_call_data != nullptr) {
2287
+ service_config_call_data->call_dispatch_controller()->Commit();
2288
+ }
2289
+ // Chain to original callback.
2290
+ Closure::Run(DEBUG_LOCATION, calld->original_recv_trailing_metadata_ready_,
2291
+ GRPC_ERROR_REF(error));
2292
+ }
2293
+
2294
+ void ClientChannel::CallData::AsyncResolutionDone(grpc_call_element* elem,
2295
+ grpc_error_handle error) {
2296
+ // TODO(roth): Does this callback need to hold a ref to the call stack?
2297
+ GRPC_CLOSURE_INIT(&resolution_done_closure_, ResolutionDone, elem, nullptr);
2298
+ ExecCtx::Run(DEBUG_LOCATION, &resolution_done_closure_, error);
2299
+ }
2300
+
2301
+ void ClientChannel::CallData::ResolutionDone(void* arg,
2302
+ grpc_error_handle error) {
2303
+ grpc_call_element* elem = static_cast<grpc_call_element*>(arg);
2304
+ ClientChannel* chand = static_cast<ClientChannel*>(elem->channel_data);
2305
+ CallData* calld = static_cast<CallData*>(elem->call_data);
2306
+ if (error != GRPC_ERROR_NONE) {
2307
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
2308
+ gpr_log(GPR_INFO,
2309
+ "chand=%p calld=%p: error applying config to call: error=%s",
2310
+ chand, calld, grpc_error_std_string(error).c_str());
2311
+ }
2312
+ calld->PendingBatchesFail(elem, GRPC_ERROR_REF(error), YieldCallCombiner);
2313
+ return;
2314
+ }
2315
+ calld->CreateDynamicCall(elem);
2316
+ }
2317
+
2318
+ void ClientChannel::CallData::CheckResolution(void* arg,
2319
+ grpc_error_handle error) {
2320
+ grpc_call_element* elem = static_cast<grpc_call_element*>(arg);
2321
+ CallData* calld = static_cast<CallData*>(elem->call_data);
2322
+ ClientChannel* chand = static_cast<ClientChannel*>(elem->channel_data);
2323
+ bool resolution_complete;
2324
+ {
2325
+ MutexLock lock(&chand->resolution_mu_);
2326
+ resolution_complete = calld->CheckResolutionLocked(elem, &error);
2327
+ }
2328
+ if (resolution_complete) {
2329
+ ResolutionDone(elem, error);
2330
+ GRPC_ERROR_UNREF(error);
2331
+ }
2332
+ }
2333
+
2334
+ bool ClientChannel::CallData::CheckResolutionLocked(grpc_call_element* elem,
2335
+ grpc_error_handle* error) {
2336
+ ClientChannel* chand = static_cast<ClientChannel*>(elem->channel_data);
2337
+ // If we're still in IDLE, we need to start resolving.
2338
+ if (GPR_UNLIKELY(chand->CheckConnectivityState(false) == GRPC_CHANNEL_IDLE)) {
2339
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
2340
+ gpr_log(GPR_INFO, "chand=%p calld=%p: triggering exit idle", chand, this);
2341
+ }
2342
+ // Bounce into the control plane work serializer to start resolving,
2343
+ // in case we are still in IDLE state. Since we are holding on to the
2344
+ // resolution mutex here, we offload it on the ExecCtx so that we don't
2345
+ // deadlock with ourselves.
2346
+ GRPC_CHANNEL_STACK_REF(chand->owning_stack_, "CheckResolutionLocked");
2347
+ ExecCtx::Run(
2348
+ DEBUG_LOCATION,
2349
+ GRPC_CLOSURE_CREATE(
2350
+ [](void* arg, grpc_error_handle /*error*/) {
2351
+ auto* chand = static_cast<ClientChannel*>(arg);
2352
+ chand->work_serializer_->Run(
2353
+ [chand]()
2354
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(*chand->work_serializer_) {
2355
+ chand->CheckConnectivityState(/*try_to_connect=*/true);
2356
+ GRPC_CHANNEL_STACK_UNREF(chand->owning_stack_,
2357
+ "CheckResolutionLocked");
2358
+ },
2359
+ DEBUG_LOCATION);
2360
+ },
2361
+ chand, nullptr),
2362
+ GRPC_ERROR_NONE);
2363
+ }
2364
+ // Get send_initial_metadata batch and flags.
2365
+ auto& send_initial_metadata =
2366
+ pending_batches_[0]->payload->send_initial_metadata;
2367
+ grpc_metadata_batch* initial_metadata_batch =
2368
+ send_initial_metadata.send_initial_metadata;
2369
+ const uint32_t send_initial_metadata_flags =
2370
+ send_initial_metadata.send_initial_metadata_flags;
2371
+ // If we don't yet have a resolver result, we need to queue the call
2372
+ // until we get one.
2373
+ if (GPR_UNLIKELY(!chand->received_service_config_data_)) {
2374
+ // If the resolver returned transient failure before returning the
2375
+ // first service config, fail any non-wait_for_ready calls.
2376
+ absl::Status resolver_error = chand->resolver_transient_failure_error_;
2377
+ if (!resolver_error.ok() && (send_initial_metadata_flags &
2378
+ GRPC_INITIAL_METADATA_WAIT_FOR_READY) == 0) {
2379
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
2380
+ gpr_log(GPR_INFO, "chand=%p calld=%p: resolution failed, failing call",
2381
+ chand, this);
2382
+ }
2383
+ MaybeRemoveCallFromResolverQueuedCallsLocked(elem);
2384
+ *error = absl_status_to_grpc_error(resolver_error);
2385
+ return true;
2386
+ }
2387
+ // Either the resolver has not yet returned a result, or it has
2388
+ // returned transient failure but the call is wait_for_ready. In
2389
+ // either case, queue the call.
2390
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
2391
+ gpr_log(GPR_INFO, "chand=%p calld=%p: queuing to wait for resolution",
2392
+ chand, this);
2393
+ }
2394
+ MaybeAddCallToResolverQueuedCallsLocked(elem);
2395
+ return false;
2396
+ }
2397
+ // Apply service config to call if not yet applied.
2398
+ if (GPR_LIKELY(!service_config_applied_)) {
2399
+ service_config_applied_ = true;
2400
+ *error = ApplyServiceConfigToCallLocked(elem, initial_metadata_batch);
2401
+ }
2402
+ MaybeRemoveCallFromResolverQueuedCallsLocked(elem);
2403
+ return true;
2404
+ }
2405
+
2406
+ void ClientChannel::CallData::CreateDynamicCall(grpc_call_element* elem) {
2407
+ auto* chand = static_cast<ClientChannel*>(elem->channel_data);
2408
+ DynamicFilters::Call::Args args = {std::move(dynamic_filters_),
2409
+ pollent_,
2410
+ path_,
2411
+ call_start_time_,
2412
+ deadline_,
2413
+ arena_,
2414
+ call_context_,
2415
+ call_combiner_};
2416
+ grpc_error_handle error = GRPC_ERROR_NONE;
2417
+ DynamicFilters* channel_stack = args.channel_stack.get();
2418
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
2419
+ gpr_log(
2420
+ GPR_INFO,
2421
+ "chand=%p calld=%p: creating dynamic call stack on channel_stack=%p",
2422
+ chand, this, channel_stack);
2423
+ }
2424
+ dynamic_call_ = channel_stack->CreateCall(std::move(args), &error);
2425
+ if (error != GRPC_ERROR_NONE) {
2426
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
2427
+ gpr_log(GPR_INFO,
2428
+ "chand=%p calld=%p: failed to create dynamic call: error=%s",
2429
+ chand, this, grpc_error_std_string(error).c_str());
2430
+ }
2431
+ PendingBatchesFail(elem, error, YieldCallCombiner);
2432
+ return;
2433
+ }
2434
+ PendingBatchesResume(elem);
2435
+ }
2436
+
2437
+ //
2438
+ // ClientChannel::LoadBalancedCall::Metadata
2439
+ //
2440
+
2441
+ class ClientChannel::LoadBalancedCall::Metadata
2442
+ : public LoadBalancingPolicy::MetadataInterface {
2443
+ public:
2444
+ explicit Metadata(grpc_metadata_batch* batch) : batch_(batch) {}
2445
+
2446
+ void Add(absl::string_view key, absl::string_view value) override {
2447
+ if (batch_ == nullptr) return;
2448
+ // Gross, egregious hack to support legacy grpclb behavior.
2449
+ // TODO(ctiller): Use a promise context for this once that plumbing is done.
2450
+ if (key == GrpcLbClientStatsMetadata::key()) {
2451
+ batch_->Set(
2452
+ GrpcLbClientStatsMetadata(),
2453
+ const_cast<GrpcLbClientStats*>(
2454
+ reinterpret_cast<const GrpcLbClientStats*>(value.data())));
2455
+ return;
2456
+ }
2457
+ batch_->Append(key, Slice::FromStaticString(value),
2458
+ [key](absl::string_view error, const Slice& value) {
2459
+ gpr_log(GPR_ERROR, "%s",
2460
+ absl::StrCat(error, " key:", key,
2461
+ " value:", value.as_string_view())
2462
+ .c_str());
2463
+ });
2464
+ }
2465
+
2466
+ std::vector<std::pair<std::string, std::string>> TestOnlyCopyToVector()
2467
+ override {
2468
+ if (batch_ == nullptr) return {};
2469
+ Encoder encoder;
2470
+ batch_->Encode(&encoder);
2471
+ return encoder.Take();
2472
+ }
2473
+
2474
+ absl::optional<absl::string_view> Lookup(absl::string_view key,
2475
+ std::string* buffer) const override {
2476
+ if (batch_ == nullptr) return absl::nullopt;
2477
+ return batch_->GetStringValue(key, buffer);
2478
+ }
2479
+
2480
+ private:
2481
+ class Encoder {
2482
+ public:
2483
+ void Encode(const Slice& key, const Slice& value) {
2484
+ out_.emplace_back(std::string(key.as_string_view()),
2485
+ std::string(value.as_string_view()));
2486
+ }
2487
+
2488
+ template <class Which>
2489
+ void Encode(Which, const typename Which::ValueType& value) {
2490
+ auto value_slice = Which::Encode(value);
2491
+ out_.emplace_back(std::string(Which::key()),
2492
+ std::string(value_slice.as_string_view()));
2493
+ }
2494
+
2495
+ void Encode(GrpcTimeoutMetadata,
2496
+ const typename GrpcTimeoutMetadata::ValueType&) {}
2497
+ void Encode(HttpPathMetadata, const Slice&) {}
2498
+ void Encode(HttpMethodMetadata,
2499
+ const typename HttpMethodMetadata::ValueType&) {}
2500
+
2501
+ std::vector<std::pair<std::string, std::string>> Take() {
2502
+ return std::move(out_);
2503
+ }
2504
+
2505
+ private:
2506
+ std::vector<std::pair<std::string, std::string>> out_;
2507
+ };
2508
+
2509
+ grpc_metadata_batch* batch_;
2510
+ };
2511
+
2512
+ //
2513
+ // ClientChannel::LoadBalancedCall::LbCallState
2514
+ //
2515
+
2516
+ class ClientChannel::LoadBalancedCall::LbCallState
2517
+ : public LoadBalancingPolicy::CallState {
2518
+ public:
2519
+ explicit LbCallState(LoadBalancedCall* lb_call) : lb_call_(lb_call) {}
2520
+
2521
+ void* Alloc(size_t size) override { return lb_call_->arena_->Alloc(size); }
2522
+
2523
+ absl::string_view ExperimentalGetCallAttribute(const char* key) override {
2524
+ auto* service_config_call_data = static_cast<ServiceConfigCallData*>(
2525
+ lb_call_->call_context_[GRPC_CONTEXT_SERVICE_CONFIG_CALL_DATA].value);
2526
+ auto& call_attributes = service_config_call_data->call_attributes();
2527
+ auto it = call_attributes.find(key);
2528
+ if (it == call_attributes.end()) return absl::string_view();
2529
+ return it->second;
2530
+ }
2531
+
2532
+ private:
2533
+ LoadBalancedCall* lb_call_;
2534
+ };
2535
+
2536
+ //
2537
+ // ClientChannel::LoadBalancedCall::BackendMetricAccessor
2538
+ //
2539
+
2540
+ class ClientChannel::LoadBalancedCall::BackendMetricAccessor
2541
+ : public LoadBalancingPolicy::BackendMetricAccessor {
2542
+ public:
2543
+ explicit BackendMetricAccessor(LoadBalancedCall* lb_call)
2544
+ : lb_call_(lb_call) {}
2545
+
2546
+ const BackendMetricData* GetBackendMetricData() override {
2547
+ if (lb_call_->backend_metric_data_ == nullptr &&
2548
+ lb_call_->recv_trailing_metadata_ != nullptr) {
2549
+ if (const auto* md = lb_call_->recv_trailing_metadata_->get_pointer(
2550
+ XEndpointLoadMetricsBinMetadata())) {
2551
+ lb_call_->backend_metric_data_ =
2552
+ ParseBackendMetricData(*md, lb_call_->arena_);
2553
+ }
2554
+ }
2555
+ return lb_call_->backend_metric_data_;
2556
+ }
2557
+
2558
+ private:
2559
+ LoadBalancedCall* lb_call_;
2560
+ };
2561
+
2562
+ //
2563
+ // ClientChannel::LoadBalancedCall
2564
+ //
2565
+
2566
+ namespace {
2567
+
2568
+ CallTracer::CallAttemptTracer* GetCallAttemptTracer(
2569
+ grpc_call_context_element* context, bool is_transparent_retry) {
2570
+ auto* call_tracer =
2571
+ static_cast<CallTracer*>(context[GRPC_CONTEXT_CALL_TRACER].value);
2572
+ if (call_tracer == nullptr) return nullptr;
2573
+ return call_tracer->StartNewAttempt(is_transparent_retry);
2574
+ }
2575
+
2576
+ } // namespace
2577
+
2578
+ ClientChannel::LoadBalancedCall::LoadBalancedCall(
2579
+ ClientChannel* chand, const grpc_call_element_args& args,
2580
+ grpc_polling_entity* pollent, grpc_closure* on_call_destruction_complete,
2581
+ ConfigSelector::CallDispatchController* call_dispatch_controller,
2582
+ bool is_transparent_retry)
2583
+ : InternallyRefCounted(
2584
+ GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)
2585
+ ? "LoadBalancedCall"
2586
+ : nullptr),
2587
+ chand_(chand),
2588
+ path_(grpc_slice_ref_internal(args.path)),
2589
+ deadline_(args.deadline),
2590
+ arena_(args.arena),
2591
+ owning_call_(args.call_stack),
2592
+ call_combiner_(args.call_combiner),
2593
+ call_context_(args.context),
2594
+ pollent_(pollent),
2595
+ on_call_destruction_complete_(on_call_destruction_complete),
2596
+ call_dispatch_controller_(call_dispatch_controller),
2597
+ call_attempt_tracer_(
2598
+ GetCallAttemptTracer(args.context, is_transparent_retry)) {
2599
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
2600
+ gpr_log(GPR_INFO, "chand=%p lb_call=%p: created", chand_, this);
2601
+ }
2602
+ }
2603
+
2604
+ ClientChannel::LoadBalancedCall::~LoadBalancedCall() {
2605
+ GRPC_ERROR_UNREF(cancel_error_);
2606
+ GRPC_ERROR_UNREF(failure_error_);
2607
+ if (backend_metric_data_ != nullptr) {
2608
+ backend_metric_data_->LoadBalancingPolicy::BackendMetricAccessor::
2609
+ BackendMetricData::~BackendMetricData();
2610
+ }
2611
+ // Make sure there are no remaining pending batches.
2612
+ for (size_t i = 0; i < GPR_ARRAY_SIZE(pending_batches_); ++i) {
2613
+ GPR_ASSERT(pending_batches_[i] == nullptr);
2614
+ }
2615
+ if (on_call_destruction_complete_ != nullptr) {
2616
+ ExecCtx::Run(DEBUG_LOCATION, on_call_destruction_complete_,
2617
+ GRPC_ERROR_NONE);
2618
+ }
2619
+ }
2620
+
2621
+ void ClientChannel::LoadBalancedCall::Orphan() {
2622
+ // If the recv_trailing_metadata op was never started, then notify
2623
+ // about call completion here, as best we can. We assume status
2624
+ // CANCELLED in this case.
2625
+ if (recv_trailing_metadata_ == nullptr) {
2626
+ RecordCallCompletion(absl::CancelledError("call cancelled"));
2627
+ }
2628
+ // Compute latency and report it to the tracer.
2629
+ if (call_attempt_tracer_ != nullptr) {
2630
+ gpr_timespec latency =
2631
+ gpr_cycle_counter_sub(gpr_get_cycle_counter(), lb_call_start_time_);
2632
+ call_attempt_tracer_->RecordEnd(latency);
2633
+ }
2634
+ Unref();
2635
+ }
2636
+
2637
+ size_t ClientChannel::LoadBalancedCall::GetBatchIndex(
2638
+ grpc_transport_stream_op_batch* batch) {
2639
+ // Note: It is important the send_initial_metadata be the first entry
2640
+ // here, since the code in PickSubchannelLocked() assumes it will be.
2641
+ if (batch->send_initial_metadata) return 0;
2642
+ if (batch->send_message) return 1;
2643
+ if (batch->send_trailing_metadata) return 2;
2644
+ if (batch->recv_initial_metadata) return 3;
2645
+ if (batch->recv_message) return 4;
2646
+ if (batch->recv_trailing_metadata) return 5;
2647
+ GPR_UNREACHABLE_CODE(return (size_t)-1);
2648
+ }
2649
+
2650
+ // This is called via the call combiner, so access to calld is synchronized.
2651
+ void ClientChannel::LoadBalancedCall::PendingBatchesAdd(
2652
+ grpc_transport_stream_op_batch* batch) {
2653
+ const size_t idx = GetBatchIndex(batch);
2654
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
2655
+ gpr_log(GPR_INFO,
2656
+ "chand=%p lb_call=%p: adding pending batch at index %" PRIuPTR,
2657
+ chand_, this, idx);
2658
+ }
2659
+ GPR_ASSERT(pending_batches_[idx] == nullptr);
2660
+ pending_batches_[idx] = batch;
2661
+ }
2662
+
2663
+ // This is called via the call combiner, so access to calld is synchronized.
2664
+ void ClientChannel::LoadBalancedCall::FailPendingBatchInCallCombiner(
2665
+ void* arg, grpc_error_handle error) {
2666
+ grpc_transport_stream_op_batch* batch =
2667
+ static_cast<grpc_transport_stream_op_batch*>(arg);
2668
+ auto* self = static_cast<LoadBalancedCall*>(batch->handler_private.extra_arg);
2669
+ // Note: This will release the call combiner.
2670
+ grpc_transport_stream_op_batch_finish_with_failure(
2671
+ batch, GRPC_ERROR_REF(error), self->call_combiner_);
2672
+ }
2673
+
2674
+ // This is called via the call combiner, so access to calld is synchronized.
2675
+ void ClientChannel::LoadBalancedCall::PendingBatchesFail(
2676
+ grpc_error_handle error,
2677
+ YieldCallCombinerPredicate yield_call_combiner_predicate) {
2678
+ GPR_ASSERT(error != GRPC_ERROR_NONE);
2679
+ GRPC_ERROR_UNREF(failure_error_);
2680
+ failure_error_ = error;
2681
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
2682
+ size_t num_batches = 0;
2683
+ for (size_t i = 0; i < GPR_ARRAY_SIZE(pending_batches_); ++i) {
2684
+ if (pending_batches_[i] != nullptr) ++num_batches;
2685
+ }
2686
+ gpr_log(GPR_INFO,
2687
+ "chand=%p lb_call=%p: failing %" PRIuPTR " pending batches: %s",
2688
+ chand_, this, num_batches, grpc_error_std_string(error).c_str());
2689
+ }
2690
+ CallCombinerClosureList closures;
2691
+ for (size_t i = 0; i < GPR_ARRAY_SIZE(pending_batches_); ++i) {
2692
+ grpc_transport_stream_op_batch*& batch = pending_batches_[i];
2693
+ if (batch != nullptr) {
2694
+ batch->handler_private.extra_arg = this;
2695
+ GRPC_CLOSURE_INIT(&batch->handler_private.closure,
2696
+ FailPendingBatchInCallCombiner, batch,
2697
+ grpc_schedule_on_exec_ctx);
2698
+ closures.Add(&batch->handler_private.closure, GRPC_ERROR_REF(error),
2699
+ "PendingBatchesFail");
2700
+ batch = nullptr;
2701
+ }
2702
+ }
2703
+ if (yield_call_combiner_predicate(closures)) {
2704
+ closures.RunClosures(call_combiner_);
2705
+ } else {
2706
+ closures.RunClosuresWithoutYielding(call_combiner_);
2707
+ }
2708
+ }
2709
+
2710
+ // This is called via the call combiner, so access to calld is synchronized.
2711
+ void ClientChannel::LoadBalancedCall::ResumePendingBatchInCallCombiner(
2712
+ void* arg, grpc_error_handle /*ignored*/) {
2713
+ grpc_transport_stream_op_batch* batch =
2714
+ static_cast<grpc_transport_stream_op_batch*>(arg);
2715
+ SubchannelCall* subchannel_call =
2716
+ static_cast<SubchannelCall*>(batch->handler_private.extra_arg);
2717
+ // Note: This will release the call combiner.
2718
+ subchannel_call->StartTransportStreamOpBatch(batch);
2719
+ }
2720
+
2721
+ // This is called via the call combiner, so access to calld is synchronized.
2722
+ void ClientChannel::LoadBalancedCall::PendingBatchesResume() {
2723
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
2724
+ size_t num_batches = 0;
2725
+ for (size_t i = 0; i < GPR_ARRAY_SIZE(pending_batches_); ++i) {
2726
+ if (pending_batches_[i] != nullptr) ++num_batches;
2727
+ }
2728
+ gpr_log(GPR_INFO,
2729
+ "chand=%p lb_call=%p: starting %" PRIuPTR
2730
+ " pending batches on subchannel_call=%p",
2731
+ chand_, this, num_batches, subchannel_call_.get());
2732
+ }
2733
+ CallCombinerClosureList closures;
2734
+ for (size_t i = 0; i < GPR_ARRAY_SIZE(pending_batches_); ++i) {
2735
+ grpc_transport_stream_op_batch*& batch = pending_batches_[i];
2736
+ if (batch != nullptr) {
2737
+ batch->handler_private.extra_arg = subchannel_call_.get();
2738
+ GRPC_CLOSURE_INIT(&batch->handler_private.closure,
2739
+ ResumePendingBatchInCallCombiner, batch,
2740
+ grpc_schedule_on_exec_ctx);
2741
+ closures.Add(&batch->handler_private.closure, GRPC_ERROR_NONE,
2742
+ "resuming pending batch from LB call");
2743
+ batch = nullptr;
2744
+ }
2745
+ }
2746
+ // Note: This will release the call combiner.
2747
+ closures.RunClosures(call_combiner_);
2748
+ }
2749
+
2750
+ void ClientChannel::LoadBalancedCall::StartTransportStreamOpBatch(
2751
+ grpc_transport_stream_op_batch* batch) {
2752
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace) ||
2753
+ GRPC_TRACE_FLAG_ENABLED(grpc_trace_channel)) {
2754
+ gpr_log(GPR_INFO,
2755
+ "chand=%p lb_call=%p: batch started from above: %s, "
2756
+ "call_attempt_tracer_=%p",
2757
+ chand_, this, grpc_transport_stream_op_batch_string(batch).c_str(),
2758
+ call_attempt_tracer_);
2759
+ }
2760
+ // Handle call tracing.
2761
+ if (call_attempt_tracer_ != nullptr) {
2762
+ // Record send ops in tracer.
2763
+ if (batch->cancel_stream) {
2764
+ call_attempt_tracer_->RecordCancel(
2765
+ GRPC_ERROR_REF(batch->payload->cancel_stream.cancel_error));
2766
+ }
2767
+ if (batch->send_initial_metadata) {
2768
+ call_attempt_tracer_->RecordSendInitialMetadata(
2769
+ batch->payload->send_initial_metadata.send_initial_metadata,
2770
+ batch->payload->send_initial_metadata.send_initial_metadata_flags);
2771
+ peer_string_ = batch->payload->send_initial_metadata.peer_string;
2772
+ original_send_initial_metadata_on_complete_ = batch->on_complete;
2773
+ GRPC_CLOSURE_INIT(&send_initial_metadata_on_complete_,
2774
+ SendInitialMetadataOnComplete, this, nullptr);
2775
+ batch->on_complete = &send_initial_metadata_on_complete_;
2776
+ }
2777
+ if (batch->send_message) {
2778
+ call_attempt_tracer_->RecordSendMessage(
2779
+ *batch->payload->send_message.send_message);
2780
+ }
2781
+ if (batch->send_trailing_metadata) {
2782
+ call_attempt_tracer_->RecordSendTrailingMetadata(
2783
+ batch->payload->send_trailing_metadata.send_trailing_metadata);
2784
+ }
2785
+ // Intercept recv ops.
2786
+ if (batch->recv_initial_metadata) {
2787
+ recv_initial_metadata_ =
2788
+ batch->payload->recv_initial_metadata.recv_initial_metadata;
2789
+ original_recv_initial_metadata_ready_ =
2790
+ batch->payload->recv_initial_metadata.recv_initial_metadata_ready;
2791
+ GRPC_CLOSURE_INIT(&recv_initial_metadata_ready_, RecvInitialMetadataReady,
2792
+ this, nullptr);
2793
+ batch->payload->recv_initial_metadata.recv_initial_metadata_ready =
2794
+ &recv_initial_metadata_ready_;
2795
+ }
2796
+ if (batch->recv_message) {
2797
+ recv_message_ = batch->payload->recv_message.recv_message;
2798
+ original_recv_message_ready_ =
2799
+ batch->payload->recv_message.recv_message_ready;
2800
+ GRPC_CLOSURE_INIT(&recv_message_ready_, RecvMessageReady, this, nullptr);
2801
+ batch->payload->recv_message.recv_message_ready = &recv_message_ready_;
2802
+ }
2803
+ }
2804
+ // Intercept recv_trailing_metadata even if there is no call tracer,
2805
+ // since we may need to notify the LB policy about trailing metadata.
2806
+ if (batch->recv_trailing_metadata) {
2807
+ recv_trailing_metadata_ =
2808
+ batch->payload->recv_trailing_metadata.recv_trailing_metadata;
2809
+ transport_stream_stats_ =
2810
+ batch->payload->recv_trailing_metadata.collect_stats;
2811
+ original_recv_trailing_metadata_ready_ =
2812
+ batch->payload->recv_trailing_metadata.recv_trailing_metadata_ready;
2813
+ GRPC_CLOSURE_INIT(&recv_trailing_metadata_ready_, RecvTrailingMetadataReady,
2814
+ this, nullptr);
2815
+ batch->payload->recv_trailing_metadata.recv_trailing_metadata_ready =
2816
+ &recv_trailing_metadata_ready_;
2817
+ }
2818
+ // If we've already gotten a subchannel call, pass the batch down to it.
2819
+ // Note that once we have picked a subchannel, we do not need to acquire
2820
+ // the channel's data plane mutex, which is more efficient (especially for
2821
+ // streaming calls).
2822
+ if (subchannel_call_ != nullptr) {
2823
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
2824
+ gpr_log(GPR_INFO,
2825
+ "chand=%p lb_call=%p: starting batch on subchannel_call=%p",
2826
+ chand_, this, subchannel_call_.get());
2827
+ }
2828
+ subchannel_call_->StartTransportStreamOpBatch(batch);
2829
+ return;
2830
+ }
2831
+ // We do not yet have a subchannel call.
2832
+ //
2833
+ // If we've previously been cancelled, immediately fail any new batches.
2834
+ if (GPR_UNLIKELY(cancel_error_ != GRPC_ERROR_NONE)) {
2835
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
2836
+ gpr_log(GPR_INFO, "chand=%p lb_call=%p: failing batch with error: %s",
2837
+ chand_, this, grpc_error_std_string(cancel_error_).c_str());
2838
+ }
2839
+ // Note: This will release the call combiner.
2840
+ grpc_transport_stream_op_batch_finish_with_failure(
2841
+ batch, GRPC_ERROR_REF(cancel_error_), call_combiner_);
2842
+ return;
2843
+ }
2844
+ // Handle cancellation.
2845
+ if (GPR_UNLIKELY(batch->cancel_stream)) {
2846
+ // Stash a copy of cancel_error in our call data, so that we can use
2847
+ // it for subsequent operations. This ensures that if the call is
2848
+ // cancelled before any batches are passed down (e.g., if the deadline
2849
+ // is in the past when the call starts), we can return the right
2850
+ // error to the caller when the first batch does get passed down.
2851
+ GRPC_ERROR_UNREF(cancel_error_);
2852
+ cancel_error_ = GRPC_ERROR_REF(batch->payload->cancel_stream.cancel_error);
2853
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
2854
+ gpr_log(GPR_INFO, "chand=%p lb_call=%p: recording cancel_error=%s",
2855
+ chand_, this, grpc_error_std_string(cancel_error_).c_str());
2856
+ }
2857
+ // Fail all pending batches.
2858
+ PendingBatchesFail(GRPC_ERROR_REF(cancel_error_), NoYieldCallCombiner);
2859
+ // Note: This will release the call combiner.
2860
+ grpc_transport_stream_op_batch_finish_with_failure(
2861
+ batch, GRPC_ERROR_REF(cancel_error_), call_combiner_);
2862
+ return;
2863
+ }
2864
+ // Add the batch to the pending list.
2865
+ PendingBatchesAdd(batch);
2866
+ // For batches containing a send_initial_metadata op, acquire the
2867
+ // channel's data plane mutex to pick a subchannel.
2868
+ if (GPR_LIKELY(batch->send_initial_metadata)) {
2869
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
2870
+ gpr_log(GPR_INFO,
2871
+ "chand=%p lb_call=%p: grabbing data plane mutex to perform pick",
2872
+ chand_, this);
2873
+ }
2874
+ PickSubchannel(this, GRPC_ERROR_NONE);
2875
+ } else {
2876
+ // For all other batches, release the call combiner.
2877
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
2878
+ gpr_log(GPR_INFO,
2879
+ "chand=%p lb_call=%p: saved batch, yielding call combiner",
2880
+ chand_, this);
2881
+ }
2882
+ GRPC_CALL_COMBINER_STOP(call_combiner_,
2883
+ "batch does not include send_initial_metadata");
2884
+ }
2885
+ }
2886
+
2887
+ void ClientChannel::LoadBalancedCall::SendInitialMetadataOnComplete(
2888
+ void* arg, grpc_error_handle error) {
2889
+ auto* self = static_cast<LoadBalancedCall*>(arg);
2890
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
2891
+ gpr_log(GPR_INFO,
2892
+ "chand=%p lb_call=%p: got on_complete for send_initial_metadata: "
2893
+ "error=%s",
2894
+ self->chand_, self, grpc_error_std_string(error).c_str());
2895
+ }
2896
+ self->call_attempt_tracer_->RecordOnDoneSendInitialMetadata(
2897
+ self->peer_string_);
2898
+ Closure::Run(DEBUG_LOCATION,
2899
+ self->original_send_initial_metadata_on_complete_,
2900
+ GRPC_ERROR_REF(error));
2901
+ }
2902
+
2903
+ void ClientChannel::LoadBalancedCall::RecvInitialMetadataReady(
2904
+ void* arg, grpc_error_handle error) {
2905
+ auto* self = static_cast<LoadBalancedCall*>(arg);
2906
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
2907
+ gpr_log(GPR_INFO,
2908
+ "chand=%p lb_call=%p: got recv_initial_metadata_ready: error=%s",
2909
+ self->chand_, self, grpc_error_std_string(error).c_str());
2910
+ }
2911
+ if (error == GRPC_ERROR_NONE) {
2912
+ // recv_initial_metadata_flags is not populated for clients
2913
+ self->call_attempt_tracer_->RecordReceivedInitialMetadata(
2914
+ self->recv_initial_metadata_, 0 /* recv_initial_metadata_flags */);
2915
+ }
2916
+ Closure::Run(DEBUG_LOCATION, self->original_recv_initial_metadata_ready_,
2917
+ GRPC_ERROR_REF(error));
2918
+ }
2919
+
2920
+ void ClientChannel::LoadBalancedCall::RecvMessageReady(
2921
+ void* arg, grpc_error_handle error) {
2922
+ auto* self = static_cast<LoadBalancedCall*>(arg);
2923
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
2924
+ gpr_log(GPR_INFO, "chand=%p lb_call=%p: got recv_message_ready: error=%s",
2925
+ self->chand_, self, grpc_error_std_string(error).c_str());
2926
+ }
2927
+ if (*self->recv_message_ != nullptr) {
2928
+ self->call_attempt_tracer_->RecordReceivedMessage(**self->recv_message_);
2929
+ }
2930
+ Closure::Run(DEBUG_LOCATION, self->original_recv_message_ready_,
2931
+ GRPC_ERROR_REF(error));
2932
+ }
2933
+
2934
+ void ClientChannel::LoadBalancedCall::RecvTrailingMetadataReady(
2935
+ void* arg, grpc_error_handle error) {
2936
+ auto* self = static_cast<LoadBalancedCall*>(arg);
2937
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
2938
+ gpr_log(GPR_INFO,
2939
+ "chand=%p lb_call=%p: got recv_trailing_metadata_ready: error=%s "
2940
+ "call_attempt_tracer_=%p lb_subchannel_call_tracker_=%p "
2941
+ "failure_error_=%s",
2942
+ self->chand_, self, grpc_error_std_string(error).c_str(),
2943
+ self->call_attempt_tracer_, self->lb_subchannel_call_tracker_.get(),
2944
+ grpc_error_std_string(self->failure_error_).c_str());
2945
+ }
2946
+ // Check if we have a tracer or an LB callback to invoke.
2947
+ if (self->call_attempt_tracer_ != nullptr ||
2948
+ self->lb_subchannel_call_tracker_ != nullptr) {
2949
+ // Get the call's status.
2950
+ absl::Status status;
2951
+ if (error != GRPC_ERROR_NONE) {
2952
+ // Get status from error.
2953
+ grpc_status_code code;
2954
+ std::string message;
2955
+ grpc_error_get_status(error, self->deadline_, &code, &message,
2956
+ /*http_error=*/nullptr, /*error_string=*/nullptr);
2957
+ status = absl::Status(static_cast<absl::StatusCode>(code), message);
2958
+ } else {
2959
+ // Get status from headers.
2960
+ const auto& md = *self->recv_trailing_metadata_;
2961
+ grpc_status_code code =
2962
+ md.get(GrpcStatusMetadata()).value_or(GRPC_STATUS_UNKNOWN);
2963
+ if (code != GRPC_STATUS_OK) {
2964
+ absl::string_view message;
2965
+ if (const auto* grpc_message = md.get_pointer(GrpcMessageMetadata())) {
2966
+ message = grpc_message->as_string_view();
2967
+ }
2968
+ status = absl::Status(static_cast<absl::StatusCode>(code), message);
2969
+ }
2970
+ }
2971
+ self->RecordCallCompletion(status);
2972
+ }
2973
+ // Chain to original callback.
2974
+ if (self->failure_error_ != GRPC_ERROR_NONE) {
2975
+ error = self->failure_error_;
2976
+ self->failure_error_ = GRPC_ERROR_NONE;
2977
+ } else {
2978
+ error = GRPC_ERROR_REF(error);
2979
+ }
2980
+ Closure::Run(DEBUG_LOCATION, self->original_recv_trailing_metadata_ready_,
2981
+ error);
2982
+ }
2983
+
2984
+ void ClientChannel::LoadBalancedCall::RecordCallCompletion(
2985
+ absl::Status status) {
2986
+ // If we have a tracer, notify it.
2987
+ if (call_attempt_tracer_ != nullptr) {
2988
+ call_attempt_tracer_->RecordReceivedTrailingMetadata(
2989
+ status, recv_trailing_metadata_, transport_stream_stats_);
2990
+ }
2991
+ // If the LB policy requested a callback for trailing metadata, invoke
2992
+ // the callback.
2993
+ if (lb_subchannel_call_tracker_ != nullptr) {
2994
+ Metadata trailing_metadata(recv_trailing_metadata_);
2995
+ BackendMetricAccessor backend_metric_accessor(this);
2996
+ LoadBalancingPolicy::SubchannelCallTrackerInterface::FinishArgs args = {
2997
+ status, &trailing_metadata, &backend_metric_accessor};
2998
+ lb_subchannel_call_tracker_->Finish(args);
2999
+ lb_subchannel_call_tracker_.reset();
3000
+ }
3001
+ }
3002
+
3003
+ void ClientChannel::LoadBalancedCall::CreateSubchannelCall() {
3004
+ SubchannelCall::Args call_args = {
3005
+ std::move(connected_subchannel_), pollent_, path_.Ref(), /*start_time=*/0,
3006
+ deadline_, arena_,
3007
+ // TODO(roth): When we implement hedging support, we will probably
3008
+ // need to use a separate call context for each subchannel call.
3009
+ call_context_, call_combiner_};
3010
+ grpc_error_handle error = GRPC_ERROR_NONE;
3011
+ subchannel_call_ = SubchannelCall::Create(std::move(call_args), &error);
3012
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
3013
+ gpr_log(GPR_INFO,
3014
+ "chand=%p lb_call=%p: create subchannel_call=%p: error=%s", chand_,
3015
+ this, subchannel_call_.get(), grpc_error_std_string(error).c_str());
3016
+ }
3017
+ if (on_call_destruction_complete_ != nullptr) {
3018
+ subchannel_call_->SetAfterCallStackDestroy(on_call_destruction_complete_);
3019
+ on_call_destruction_complete_ = nullptr;
3020
+ }
3021
+ if (GPR_UNLIKELY(error != GRPC_ERROR_NONE)) {
3022
+ PendingBatchesFail(error, YieldCallCombiner);
3023
+ } else {
3024
+ PendingBatchesResume();
3025
+ }
3026
+ }
3027
+
3028
+ // A class to handle the call combiner cancellation callback for a
3029
+ // queued pick.
3030
+ // TODO(roth): When we implement hedging support, we won't be able to
3031
+ // register a call combiner cancellation closure for each LB pick,
3032
+ // because there may be multiple LB picks happening in parallel.
3033
+ // Instead, we will probably need to maintain a list in the CallData
3034
+ // object of pending LB picks to be cancelled when the closure runs.
3035
+ class ClientChannel::LoadBalancedCall::LbQueuedCallCanceller {
3036
+ public:
3037
+ explicit LbQueuedCallCanceller(RefCountedPtr<LoadBalancedCall> lb_call)
3038
+ : lb_call_(std::move(lb_call)) {
3039
+ GRPC_CALL_STACK_REF(lb_call_->owning_call_, "LbQueuedCallCanceller");
3040
+ GRPC_CLOSURE_INIT(&closure_, &CancelLocked, this, nullptr);
3041
+ lb_call_->call_combiner_->SetNotifyOnCancel(&closure_);
3042
+ }
3043
+
3044
+ private:
3045
+ static void CancelLocked(void* arg, grpc_error_handle error) {
3046
+ auto* self = static_cast<LbQueuedCallCanceller*>(arg);
3047
+ auto* lb_call = self->lb_call_.get();
3048
+ auto* chand = lb_call->chand_;
3049
+ {
3050
+ MutexLock lock(&chand->data_plane_mu_);
3051
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
3052
+ gpr_log(GPR_INFO,
3053
+ "chand=%p lb_call=%p: cancelling queued pick: "
3054
+ "error=%s self=%p calld->pick_canceller=%p",
3055
+ chand, lb_call, grpc_error_std_string(error).c_str(), self,
3056
+ lb_call->lb_call_canceller_);
3057
+ }
3058
+ if (lb_call->lb_call_canceller_ == self && error != GRPC_ERROR_NONE) {
3059
+ lb_call->call_dispatch_controller_->Commit();
3060
+ // Remove pick from list of queued picks.
3061
+ lb_call->MaybeRemoveCallFromLbQueuedCallsLocked();
3062
+ // Fail pending batches on the call.
3063
+ lb_call->PendingBatchesFail(GRPC_ERROR_REF(error),
3064
+ YieldCallCombinerIfPendingBatchesFound);
3065
+ }
3066
+ }
3067
+ GRPC_CALL_STACK_UNREF(lb_call->owning_call_, "LbQueuedCallCanceller");
3068
+ delete self;
3069
+ }
3070
+
3071
+ RefCountedPtr<LoadBalancedCall> lb_call_;
3072
+ grpc_closure closure_;
3073
+ };
3074
+
3075
+ void ClientChannel::LoadBalancedCall::MaybeRemoveCallFromLbQueuedCallsLocked() {
3076
+ if (!queued_pending_lb_pick_) return;
3077
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
3078
+ gpr_log(GPR_INFO, "chand=%p lb_call=%p: removing from queued picks list",
3079
+ chand_, this);
3080
+ }
3081
+ chand_->RemoveLbQueuedCall(&queued_call_, pollent_);
3082
+ queued_pending_lb_pick_ = false;
3083
+ // Lame the call combiner canceller.
3084
+ lb_call_canceller_ = nullptr;
3085
+ }
3086
+
3087
+ void ClientChannel::LoadBalancedCall::MaybeAddCallToLbQueuedCallsLocked() {
3088
+ if (queued_pending_lb_pick_) return;
3089
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
3090
+ gpr_log(GPR_INFO, "chand=%p lb_call=%p: adding to queued picks list",
3091
+ chand_, this);
3092
+ }
3093
+ queued_pending_lb_pick_ = true;
3094
+ queued_call_.lb_call = this;
3095
+ chand_->AddLbQueuedCall(&queued_call_, pollent_);
3096
+ // Register call combiner cancellation callback.
3097
+ lb_call_canceller_ = new LbQueuedCallCanceller(Ref());
3098
+ }
3099
+
3100
+ void ClientChannel::LoadBalancedCall::AsyncPickDone(grpc_error_handle error) {
3101
+ // TODO(roth): Does this callback need to hold a ref to LoadBalancedCall?
3102
+ GRPC_CLOSURE_INIT(&pick_closure_, PickDone, this, grpc_schedule_on_exec_ctx);
3103
+ ExecCtx::Run(DEBUG_LOCATION, &pick_closure_, error);
3104
+ }
3105
+
3106
+ void ClientChannel::LoadBalancedCall::PickDone(void* arg,
3107
+ grpc_error_handle error) {
3108
+ auto* self = static_cast<LoadBalancedCall*>(arg);
3109
+ if (error != GRPC_ERROR_NONE) {
3110
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
3111
+ gpr_log(GPR_INFO,
3112
+ "chand=%p lb_call=%p: failed to pick subchannel: error=%s",
3113
+ self->chand_, self, grpc_error_std_string(error).c_str());
3114
+ }
3115
+ self->PendingBatchesFail(GRPC_ERROR_REF(error), YieldCallCombiner);
3116
+ return;
3117
+ }
3118
+ self->call_dispatch_controller_->Commit();
3119
+ self->CreateSubchannelCall();
3120
+ }
3121
+
3122
+ void ClientChannel::LoadBalancedCall::PickSubchannel(void* arg,
3123
+ grpc_error_handle error) {
3124
+ auto* self = static_cast<LoadBalancedCall*>(arg);
3125
+ bool pick_complete;
3126
+ {
3127
+ MutexLock lock(&self->chand_->data_plane_mu_);
3128
+ pick_complete = self->PickSubchannelLocked(&error);
3129
+ }
3130
+ if (pick_complete) {
3131
+ PickDone(self, error);
3132
+ GRPC_ERROR_UNREF(error);
3133
+ }
3134
+ }
3135
+
3136
+ bool ClientChannel::LoadBalancedCall::PickSubchannelLocked(
3137
+ grpc_error_handle* error) {
3138
+ GPR_ASSERT(connected_subchannel_ == nullptr);
3139
+ GPR_ASSERT(subchannel_call_ == nullptr);
3140
+ // Grab initial metadata.
3141
+ auto& send_initial_metadata =
3142
+ pending_batches_[0]->payload->send_initial_metadata;
3143
+ grpc_metadata_batch* initial_metadata_batch =
3144
+ send_initial_metadata.send_initial_metadata;
3145
+ const uint32_t send_initial_metadata_flags =
3146
+ send_initial_metadata.send_initial_metadata_flags;
3147
+ // Perform LB pick.
3148
+ LoadBalancingPolicy::PickArgs pick_args;
3149
+ pick_args.path = path_.as_string_view();
3150
+ LbCallState lb_call_state(this);
3151
+ pick_args.call_state = &lb_call_state;
3152
+ Metadata initial_metadata(initial_metadata_batch);
3153
+ pick_args.initial_metadata = &initial_metadata;
3154
+ auto result = chand_->picker_->Pick(pick_args);
3155
+ return HandlePickResult<bool>(
3156
+ &result,
3157
+ // CompletePick
3158
+ [this](LoadBalancingPolicy::PickResult::Complete* complete_pick)
3159
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(&ClientChannel::data_plane_mu_) {
3160
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
3161
+ gpr_log(GPR_INFO,
3162
+ "chand=%p lb_call=%p: LB pick succeeded: subchannel=%p",
3163
+ chand_, this, complete_pick->subchannel.get());
3164
+ }
3165
+ GPR_ASSERT(complete_pick->subchannel != nullptr);
3166
+ // Grab a ref to the connected subchannel while we're still
3167
+ // holding the data plane mutex.
3168
+ SubchannelWrapper* subchannel = static_cast<SubchannelWrapper*>(
3169
+ complete_pick->subchannel.get());
3170
+ connected_subchannel_ = subchannel->connected_subchannel();
3171
+ // If the subchannel has no connected subchannel (e.g., if the
3172
+ // subchannel has moved out of state READY but the LB policy hasn't
3173
+ // yet seen that change and given us a new picker), then just
3174
+ // queue the pick. We'll try again as soon as we get a new picker.
3175
+ if (connected_subchannel_ == nullptr) {
3176
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
3177
+ gpr_log(GPR_INFO,
3178
+ "chand=%p lb_call=%p: subchannel returned by LB picker "
3179
+ "has no connected subchannel; queueing pick",
3180
+ chand_, this);
3181
+ }
3182
+ MaybeAddCallToLbQueuedCallsLocked();
3183
+ return false;
3184
+ }
3185
+ lb_subchannel_call_tracker_ =
3186
+ std::move(complete_pick->subchannel_call_tracker);
3187
+ if (lb_subchannel_call_tracker_ != nullptr) {
3188
+ lb_subchannel_call_tracker_->Start();
3189
+ }
3190
+ MaybeRemoveCallFromLbQueuedCallsLocked();
3191
+ return true;
3192
+ },
3193
+ // QueuePick
3194
+ [this](LoadBalancingPolicy::PickResult::Queue* /*queue_pick*/)
3195
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(&ClientChannel::data_plane_mu_) {
3196
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
3197
+ gpr_log(GPR_INFO, "chand=%p lb_call=%p: LB pick queued", chand_,
3198
+ this);
3199
+ }
3200
+ MaybeAddCallToLbQueuedCallsLocked();
3201
+ return false;
3202
+ },
3203
+ // FailPick
3204
+ [this, send_initial_metadata_flags,
3205
+ &error](LoadBalancingPolicy::PickResult::Fail* fail_pick)
3206
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(&ClientChannel::data_plane_mu_) {
3207
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
3208
+ gpr_log(GPR_INFO, "chand=%p lb_call=%p: LB pick failed: %s",
3209
+ chand_, this, fail_pick->status.ToString().c_str());
3210
+ }
3211
+ // If wait_for_ready is false, then the error indicates the RPC
3212
+ // attempt's final status.
3213
+ if ((send_initial_metadata_flags &
3214
+ GRPC_INITIAL_METADATA_WAIT_FOR_READY) == 0) {
3215
+ grpc_error_handle lb_error =
3216
+ absl_status_to_grpc_error(fail_pick->status);
3217
+ *error = GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
3218
+ "Failed to pick subchannel", &lb_error, 1);
3219
+ GRPC_ERROR_UNREF(lb_error);
3220
+ MaybeRemoveCallFromLbQueuedCallsLocked();
3221
+ return true;
3222
+ }
3223
+ // If wait_for_ready is true, then queue to retry when we get a new
3224
+ // picker.
3225
+ MaybeAddCallToLbQueuedCallsLocked();
3226
+ return false;
3227
+ },
3228
+ // DropPick
3229
+ [this, &error](LoadBalancingPolicy::PickResult::Drop* drop_pick)
3230
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(&ClientChannel::data_plane_mu_) {
3231
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
3232
+ gpr_log(GPR_INFO, "chand=%p lb_call=%p: LB pick dropped: %s",
3233
+ chand_, this, drop_pick->status.ToString().c_str());
3234
+ }
3235
+ *error =
3236
+ grpc_error_set_int(absl_status_to_grpc_error(drop_pick->status),
3237
+ GRPC_ERROR_INT_LB_POLICY_DROP, 1);
3238
+ MaybeRemoveCallFromLbQueuedCallsLocked();
3239
+ return true;
3240
+ });
3241
+ }
3242
+
3243
+ } // namespace grpc_core