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