grpc 1.30.2

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 (1758) hide show
  1. checksums.yaml +7 -0
  2. data/.yardopts +1 -0
  3. data/Makefile +20074 -0
  4. data/etc/roots.pem +4644 -0
  5. data/include/grpc/byte_buffer.h +27 -0
  6. data/include/grpc/byte_buffer_reader.h +26 -0
  7. data/include/grpc/census.h +40 -0
  8. data/include/grpc/compression.h +75 -0
  9. data/include/grpc/fork.h +26 -0
  10. data/include/grpc/grpc.h +540 -0
  11. data/include/grpc/grpc_cronet.h +38 -0
  12. data/include/grpc/grpc_posix.h +59 -0
  13. data/include/grpc/grpc_security.h +1019 -0
  14. data/include/grpc/grpc_security_constants.h +146 -0
  15. data/include/grpc/impl/codegen/atm.h +95 -0
  16. data/include/grpc/impl/codegen/atm_gcc_atomic.h +91 -0
  17. data/include/grpc/impl/codegen/atm_gcc_sync.h +85 -0
  18. data/include/grpc/impl/codegen/atm_windows.h +128 -0
  19. data/include/grpc/impl/codegen/byte_buffer.h +101 -0
  20. data/include/grpc/impl/codegen/byte_buffer_reader.h +42 -0
  21. data/include/grpc/impl/codegen/compression_types.h +108 -0
  22. data/include/grpc/impl/codegen/connectivity_state.h +44 -0
  23. data/include/grpc/impl/codegen/fork.h +48 -0
  24. data/include/grpc/impl/codegen/gpr_slice.h +69 -0
  25. data/include/grpc/impl/codegen/gpr_types.h +59 -0
  26. data/include/grpc/impl/codegen/grpc_types.h +785 -0
  27. data/include/grpc/impl/codegen/log.h +112 -0
  28. data/include/grpc/impl/codegen/port_platform.h +720 -0
  29. data/include/grpc/impl/codegen/propagation_bits.h +52 -0
  30. data/include/grpc/impl/codegen/slice.h +127 -0
  31. data/include/grpc/impl/codegen/status.h +154 -0
  32. data/include/grpc/impl/codegen/sync.h +65 -0
  33. data/include/grpc/impl/codegen/sync_abseil.h +36 -0
  34. data/include/grpc/impl/codegen/sync_custom.h +38 -0
  35. data/include/grpc/impl/codegen/sync_generic.h +48 -0
  36. data/include/grpc/impl/codegen/sync_posix.h +52 -0
  37. data/include/grpc/impl/codegen/sync_windows.h +36 -0
  38. data/include/grpc/load_reporting.h +48 -0
  39. data/include/grpc/module.modulemap +64 -0
  40. data/include/grpc/slice.h +172 -0
  41. data/include/grpc/slice_buffer.h +84 -0
  42. data/include/grpc/status.h +26 -0
  43. data/include/grpc/support/alloc.h +52 -0
  44. data/include/grpc/support/atm.h +26 -0
  45. data/include/grpc/support/atm_gcc_atomic.h +26 -0
  46. data/include/grpc/support/atm_gcc_sync.h +26 -0
  47. data/include/grpc/support/atm_windows.h +26 -0
  48. data/include/grpc/support/cpu.h +44 -0
  49. data/include/grpc/support/log.h +26 -0
  50. data/include/grpc/support/log_windows.h +38 -0
  51. data/include/grpc/support/port_platform.h +24 -0
  52. data/include/grpc/support/string_util.h +51 -0
  53. data/include/grpc/support/sync.h +282 -0
  54. data/include/grpc/support/sync_abseil.h +26 -0
  55. data/include/grpc/support/sync_custom.h +26 -0
  56. data/include/grpc/support/sync_generic.h +26 -0
  57. data/include/grpc/support/sync_posix.h +26 -0
  58. data/include/grpc/support/sync_windows.h +26 -0
  59. data/include/grpc/support/thd_id.h +44 -0
  60. data/include/grpc/support/time.h +92 -0
  61. data/include/grpc/support/workaround_list.h +31 -0
  62. data/src/core/ext/filters/census/grpc_context.cc +38 -0
  63. data/src/core/ext/filters/client_channel/backend_metric.cc +81 -0
  64. data/src/core/ext/filters/client_channel/backend_metric.h +36 -0
  65. data/src/core/ext/filters/client_channel/backup_poller.cc +181 -0
  66. data/src/core/ext/filters/client_channel/backup_poller.h +41 -0
  67. data/src/core/ext/filters/client_channel/channel_connectivity.cc +264 -0
  68. data/src/core/ext/filters/client_channel/client_channel.cc +4059 -0
  69. data/src/core/ext/filters/client_channel/client_channel.h +82 -0
  70. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +95 -0
  71. data/src/core/ext/filters/client_channel/client_channel_channelz.h +78 -0
  72. data/src/core/ext/filters/client_channel/client_channel_factory.cc +55 -0
  73. data/src/core/ext/filters/client_channel/client_channel_factory.h +47 -0
  74. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +70 -0
  75. data/src/core/ext/filters/client_channel/connector.h +79 -0
  76. data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +179 -0
  77. data/src/core/ext/filters/client_channel/global_subchannel_pool.h +68 -0
  78. data/src/core/ext/filters/client_channel/health/health_check_client.cc +606 -0
  79. data/src/core/ext/filters/client_channel/health/health_check_client.h +175 -0
  80. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +389 -0
  81. data/src/core/ext/filters/client_channel/http_connect_handshaker.h +34 -0
  82. data/src/core/ext/filters/client_channel/http_proxy.cc +216 -0
  83. data/src/core/ext/filters/client_channel/http_proxy.h +28 -0
  84. data/src/core/ext/filters/client_channel/lb_policy.cc +138 -0
  85. data/src/core/ext/filters/client_channel/lb_policy.h +421 -0
  86. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +83 -0
  87. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +99 -0
  88. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +297 -0
  89. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +83 -0
  90. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +157 -0
  91. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +29 -0
  92. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +1754 -0
  93. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +43 -0
  94. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +89 -0
  95. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +40 -0
  96. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +45 -0
  97. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +121 -0
  98. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +91 -0
  99. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +75 -0
  100. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +193 -0
  101. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +74 -0
  102. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +509 -0
  103. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +871 -0
  104. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +504 -0
  105. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +448 -0
  106. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +734 -0
  107. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +417 -0
  108. data/src/core/ext/filters/client_channel/lb_policy/xds/eds.cc +938 -0
  109. data/src/core/ext/filters/client_channel/lb_policy/xds/lrs.cc +528 -0
  110. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +32 -0
  111. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_routing.cc +834 -0
  112. data/src/core/ext/filters/client_channel/lb_policy_factory.h +47 -0
  113. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +182 -0
  114. data/src/core/ext/filters/client_channel/lb_policy_registry.h +65 -0
  115. data/src/core/ext/filters/client_channel/local_subchannel_pool.cc +96 -0
  116. data/src/core/ext/filters/client_channel/local_subchannel_pool.h +57 -0
  117. data/src/core/ext/filters/client_channel/parse_address.cc +238 -0
  118. data/src/core/ext/filters/client_channel/parse_address.h +53 -0
  119. data/src/core/ext/filters/client_channel/proxy_mapper.h +54 -0
  120. data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +89 -0
  121. data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +50 -0
  122. data/src/core/ext/filters/client_channel/resolver.cc +85 -0
  123. data/src/core/ext/filters/client_channel/resolver.h +144 -0
  124. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +535 -0
  125. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +484 -0
  126. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +104 -0
  127. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +177 -0
  128. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +107 -0
  129. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +897 -0
  130. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +819 -0
  131. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +97 -0
  132. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +68 -0
  133. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc +38 -0
  134. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_posix.cc +29 -0
  135. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +34 -0
  136. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.cc +28 -0
  137. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.h +29 -0
  138. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +318 -0
  139. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +383 -0
  140. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +93 -0
  141. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +188 -0
  142. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +184 -0
  143. data/src/core/ext/filters/client_channel/resolver_factory.h +73 -0
  144. data/src/core/ext/filters/client_channel/resolver_registry.cc +197 -0
  145. data/src/core/ext/filters/client_channel/resolver_registry.h +89 -0
  146. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +443 -0
  147. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +127 -0
  148. data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +348 -0
  149. data/src/core/ext/filters/client_channel/resolving_lb_policy.h +123 -0
  150. data/src/core/ext/filters/client_channel/retry_throttle.cc +191 -0
  151. data/src/core/ext/filters/client_channel/retry_throttle.h +77 -0
  152. data/src/core/ext/filters/client_channel/server_address.cc +48 -0
  153. data/src/core/ext/filters/client_channel/server_address.h +90 -0
  154. data/src/core/ext/filters/client_channel/service_config.cc +221 -0
  155. data/src/core/ext/filters/client_channel/service_config.h +123 -0
  156. data/src/core/ext/filters/client_channel/service_config_call_data.h +68 -0
  157. data/src/core/ext/filters/client_channel/service_config_parser.cc +87 -0
  158. data/src/core/ext/filters/client_channel/service_config_parser.h +89 -0
  159. data/src/core/ext/filters/client_channel/subchannel.cc +1127 -0
  160. data/src/core/ext/filters/client_channel/subchannel.h +427 -0
  161. data/src/core/ext/filters/client_channel/subchannel_interface.h +94 -0
  162. data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +97 -0
  163. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +91 -0
  164. data/src/core/ext/filters/client_channel/xds/xds_api.cc +1906 -0
  165. data/src/core/ext/filters/client_channel/xds/xds_api.h +280 -0
  166. data/src/core/ext/filters/client_channel/xds/xds_bootstrap.cc +342 -0
  167. data/src/core/ext/filters/client_channel/xds/xds_bootstrap.h +88 -0
  168. data/src/core/ext/filters/client_channel/xds/xds_channel.h +46 -0
  169. data/src/core/ext/filters/client_channel/xds/xds_channel_args.h +26 -0
  170. data/src/core/ext/filters/client_channel/xds/xds_channel_secure.cc +106 -0
  171. data/src/core/ext/filters/client_channel/xds/xds_client.cc +2367 -0
  172. data/src/core/ext/filters/client_channel/xds/xds_client.h +309 -0
  173. data/src/core/ext/filters/client_channel/xds/xds_client_stats.cc +115 -0
  174. data/src/core/ext/filters/client_channel/xds/xds_client_stats.h +211 -0
  175. data/src/core/ext/filters/client_idle/client_idle_filter.cc +440 -0
  176. data/src/core/ext/filters/deadline/deadline_filter.cc +386 -0
  177. data/src/core/ext/filters/deadline/deadline_filter.h +90 -0
  178. data/src/core/ext/filters/http/client/http_client_filter.cc +596 -0
  179. data/src/core/ext/filters/http/client/http_client_filter.h +31 -0
  180. data/src/core/ext/filters/http/client_authority_filter.cc +159 -0
  181. data/src/core/ext/filters/http/client_authority_filter.h +34 -0
  182. data/src/core/ext/filters/http/http_filters_plugin.cc +104 -0
  183. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +546 -0
  184. data/src/core/ext/filters/http/message_compress/message_compress_filter.h +53 -0
  185. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +358 -0
  186. data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +29 -0
  187. data/src/core/ext/filters/http/server/http_server_filter.cc +528 -0
  188. data/src/core/ext/filters/http/server/http_server_filter.h +29 -0
  189. data/src/core/ext/filters/max_age/max_age_filter.cc +556 -0
  190. data/src/core/ext/filters/max_age/max_age_filter.h +26 -0
  191. data/src/core/ext/filters/message_size/message_size_filter.cc +423 -0
  192. data/src/core/ext/filters/message_size/message_size_filter.h +59 -0
  193. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +210 -0
  194. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.h +27 -0
  195. data/src/core/ext/filters/workarounds/workaround_utils.cc +53 -0
  196. data/src/core/ext/filters/workarounds/workaround_utils.h +39 -0
  197. data/src/core/ext/transport/chttp2/alpn/alpn.cc +44 -0
  198. data/src/core/ext/transport/chttp2/alpn/alpn.h +36 -0
  199. data/src/core/ext/transport/chttp2/client/authority.cc +42 -0
  200. data/src/core/ext/transport/chttp2/client/authority.h +36 -0
  201. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +206 -0
  202. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +58 -0
  203. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +112 -0
  204. data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +79 -0
  205. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +225 -0
  206. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +451 -0
  207. data/src/core/ext/transport/chttp2/server/chttp2_server.h +33 -0
  208. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +45 -0
  209. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +75 -0
  210. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +86 -0
  211. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +250 -0
  212. data/src/core/ext/transport/chttp2/transport/bin_decoder.h +56 -0
  213. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +230 -0
  214. data/src/core/ext/transport/chttp2/transport/bin_encoder.h +42 -0
  215. data/src/core/ext/transport/chttp2/transport/chttp2_plugin.cc +37 -0
  216. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +3346 -0
  217. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +52 -0
  218. data/src/core/ext/transport/chttp2/transport/context_list.cc +69 -0
  219. data/src/core/ext/transport/chttp2/transport/context_list.h +53 -0
  220. data/src/core/ext/transport/chttp2/transport/flow_control.cc +408 -0
  221. data/src/core/ext/transport/chttp2/transport/flow_control.h +474 -0
  222. data/src/core/ext/transport/chttp2/transport/frame.h +47 -0
  223. data/src/core/ext/transport/chttp2/transport/frame_data.cc +307 -0
  224. data/src/core/ext/transport/chttp2/transport/frame_data.h +82 -0
  225. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +187 -0
  226. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +62 -0
  227. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +133 -0
  228. data/src/core/ext/transport/chttp2/transport/frame_ping.h +44 -0
  229. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +122 -0
  230. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +50 -0
  231. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +242 -0
  232. data/src/core/ext/transport/chttp2/transport/frame_settings.h +60 -0
  233. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +123 -0
  234. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +44 -0
  235. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +900 -0
  236. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +107 -0
  237. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +1761 -0
  238. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +117 -0
  239. data/src/core/ext/transport/chttp2/transport/hpack_table.cc +246 -0
  240. data/src/core/ext/transport/chttp2/transport/hpack_table.h +148 -0
  241. data/src/core/ext/transport/chttp2/transport/http2_settings.cc +62 -0
  242. data/src/core/ext/transport/chttp2/transport/http2_settings.h +61 -0
  243. data/src/core/ext/transport/chttp2/transport/huffsyms.cc +92 -0
  244. data/src/core/ext/transport/chttp2/transport/huffsyms.h +32 -0
  245. data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +66 -0
  246. data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +58 -0
  247. data/src/core/ext/transport/chttp2/transport/internal.h +864 -0
  248. data/src/core/ext/transport/chttp2/transport/parsing.cc +803 -0
  249. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +216 -0
  250. data/src/core/ext/transport/chttp2/transport/stream_map.cc +177 -0
  251. data/src/core/ext/transport/chttp2/transport/stream_map.h +67 -0
  252. data/src/core/ext/transport/chttp2/transport/varint.cc +56 -0
  253. data/src/core/ext/transport/chttp2/transport/varint.h +60 -0
  254. data/src/core/ext/transport/chttp2/transport/writing.cc +706 -0
  255. data/src/core/ext/transport/inproc/inproc_plugin.cc +28 -0
  256. data/src/core/ext/transport/inproc/inproc_transport.cc +1296 -0
  257. data/src/core/ext/transport/inproc/inproc_transport.h +35 -0
  258. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.c +17 -0
  259. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +30 -0
  260. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +27 -0
  261. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +54 -0
  262. data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.c +21 -0
  263. data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.h +35 -0
  264. data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.c +114 -0
  265. data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.h +418 -0
  266. data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.c +72 -0
  267. data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.h +197 -0
  268. data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.c +105 -0
  269. data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.h +378 -0
  270. data/src/core/ext/upb-generated/envoy/api/v2/cds.upb.c +28 -0
  271. data/src/core/ext/upb-generated/envoy/api/v2/cds.upb.h +53 -0
  272. data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.c +403 -0
  273. data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.h +1447 -0
  274. data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.c +74 -0
  275. data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.h +218 -0
  276. data/src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.c +35 -0
  277. data/src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.h +69 -0
  278. data/src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.c +55 -0
  279. data/src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.h +305 -0
  280. data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.c +112 -0
  281. data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.h +328 -0
  282. data/src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.c +35 -0
  283. data/src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.h +78 -0
  284. data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c +313 -0
  285. data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.h +897 -0
  286. data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.c +96 -0
  287. data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.h +322 -0
  288. data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.c +34 -0
  289. data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.h +72 -0
  290. data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.c +197 -0
  291. data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.h +642 -0
  292. data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.c +172 -0
  293. data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.h +673 -0
  294. data/src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.c +36 -0
  295. data/src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.h +80 -0
  296. data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.c +152 -0
  297. data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.h +518 -0
  298. data/src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.c +34 -0
  299. data/src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.h +89 -0
  300. data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c +129 -0
  301. data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.h +392 -0
  302. data/src/core/ext/upb-generated/envoy/api/v2/eds.upb.c +31 -0
  303. data/src/core/ext/upb-generated/envoy/api/v2/eds.upb.h +53 -0
  304. data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.c +92 -0
  305. data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.h +240 -0
  306. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.c +18 -0
  307. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.h +33 -0
  308. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.c +91 -0
  309. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.h +266 -0
  310. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.c +112 -0
  311. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.h +324 -0
  312. data/src/core/ext/upb-generated/envoy/api/v2/lds.upb.c +31 -0
  313. data/src/core/ext/upb-generated/envoy/api/v2/lds.upb.h +53 -0
  314. data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.c +109 -0
  315. data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.h +399 -0
  316. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.c +18 -0
  317. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.h +33 -0
  318. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.c +145 -0
  319. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.h +527 -0
  320. data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.c +43 -0
  321. data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.h +112 -0
  322. data/src/core/ext/upb-generated/envoy/api/v2/rds.upb.c +30 -0
  323. data/src/core/ext/upb-generated/envoy/api/v2/rds.upb.h +53 -0
  324. data/src/core/ext/upb-generated/envoy/api/v2/route.upb.c +63 -0
  325. data/src/core/ext/upb-generated/envoy/api/v2/route.upb.h +199 -0
  326. data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.c +18 -0
  327. data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.h +33 -0
  328. data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.c +815 -0
  329. data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.h +3032 -0
  330. data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.c +59 -0
  331. data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.h +134 -0
  332. data/src/core/ext/upb-generated/envoy/api/v2/srds.upb.c +28 -0
  333. data/src/core/ext/upb-generated/envoy/api/v2/srds.upb.h +53 -0
  334. data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.c +228 -0
  335. data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.h +725 -0
  336. data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.c +316 -0
  337. data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.h +1132 -0
  338. data/src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.c +33 -0
  339. data/src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.h +65 -0
  340. data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.c +51 -0
  341. data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.h +125 -0
  342. data/src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.c +24 -0
  343. data/src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.h +50 -0
  344. data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.c +54 -0
  345. data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h +134 -0
  346. data/src/core/ext/upb-generated/envoy/type/http.upb.c +17 -0
  347. data/src/core/ext/upb-generated/envoy/type/http.upb.h +36 -0
  348. data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.c +63 -0
  349. data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.h +144 -0
  350. data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.c +53 -0
  351. data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.h +133 -0
  352. data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.c +88 -0
  353. data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.h +258 -0
  354. data/src/core/ext/upb-generated/envoy/type/percent.upb.c +39 -0
  355. data/src/core/ext/upb-generated/envoy/type/percent.upb.h +87 -0
  356. data/src/core/ext/upb-generated/envoy/type/range.upb.c +50 -0
  357. data/src/core/ext/upb-generated/envoy/type/range.upb.h +112 -0
  358. data/src/core/ext/upb-generated/envoy/type/semantic_version.upb.c +29 -0
  359. data/src/core/ext/upb-generated/envoy/type/semantic_version.upb.h +62 -0
  360. data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.c +89 -0
  361. data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.h +249 -0
  362. data/src/core/ext/upb-generated/gogoproto/gogo.upb.c +17 -0
  363. data/src/core/ext/upb-generated/gogoproto/gogo.upb.h +30 -0
  364. data/src/core/ext/upb-generated/google/api/annotations.upb.c +18 -0
  365. data/src/core/ext/upb-generated/google/api/annotations.upb.h +30 -0
  366. data/src/core/ext/upb-generated/google/api/http.upb.c +66 -0
  367. data/src/core/ext/upb-generated/google/api/http.upb.h +190 -0
  368. data/src/core/ext/upb-generated/google/protobuf/any.upb.c +27 -0
  369. data/src/core/ext/upb-generated/google/protobuf/any.upb.h +58 -0
  370. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +486 -0
  371. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +1696 -0
  372. data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +27 -0
  373. data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +58 -0
  374. data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +22 -0
  375. data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +50 -0
  376. data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +79 -0
  377. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +215 -0
  378. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +27 -0
  379. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +58 -0
  380. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +106 -0
  381. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +238 -0
  382. data/src/core/ext/upb-generated/google/rpc/status.upb.c +33 -0
  383. data/src/core/ext/upb-generated/google/rpc/status.upb.h +74 -0
  384. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +49 -0
  385. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +126 -0
  386. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +212 -0
  387. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +693 -0
  388. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +42 -0
  389. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +109 -0
  390. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +36 -0
  391. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +84 -0
  392. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +141 -0
  393. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +393 -0
  394. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +48 -0
  395. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +104 -0
  396. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.c +17 -0
  397. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +30 -0
  398. data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +28 -0
  399. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +65 -0
  400. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c +58 -0
  401. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h +144 -0
  402. data/src/core/ext/upb-generated/validate/validate.upb.c +448 -0
  403. data/src/core/ext/upb-generated/validate/validate.upb.h +2073 -0
  404. data/src/core/lib/avl/avl.cc +306 -0
  405. data/src/core/lib/avl/avl.h +94 -0
  406. data/src/core/lib/backoff/backoff.cc +78 -0
  407. data/src/core/lib/backoff/backoff.h +89 -0
  408. data/src/core/lib/channel/channel_args.cc +380 -0
  409. data/src/core/lib/channel/channel_args.h +135 -0
  410. data/src/core/lib/channel/channel_stack.cc +252 -0
  411. data/src/core/lib/channel/channel_stack.h +304 -0
  412. data/src/core/lib/channel/channel_stack_builder.cc +323 -0
  413. data/src/core/lib/channel/channel_stack_builder.h +166 -0
  414. data/src/core/lib/channel/channel_trace.cc +194 -0
  415. data/src/core/lib/channel/channel_trace.h +134 -0
  416. data/src/core/lib/channel/channelz.cc +543 -0
  417. data/src/core/lib/channel/channelz.h +334 -0
  418. data/src/core/lib/channel/channelz_registry.cc +267 -0
  419. data/src/core/lib/channel/channelz_registry.h +97 -0
  420. data/src/core/lib/channel/connected_channel.cc +246 -0
  421. data/src/core/lib/channel/connected_channel.h +34 -0
  422. data/src/core/lib/channel/context.h +49 -0
  423. data/src/core/lib/channel/handshaker.cc +262 -0
  424. data/src/core/lib/channel/handshaker.h +179 -0
  425. data/src/core/lib/channel/handshaker_factory.h +42 -0
  426. data/src/core/lib/channel/handshaker_registry.cc +105 -0
  427. data/src/core/lib/channel/handshaker_registry.h +54 -0
  428. data/src/core/lib/channel/status_util.cc +99 -0
  429. data/src/core/lib/channel/status_util.h +58 -0
  430. data/src/core/lib/compression/algorithm_metadata.h +61 -0
  431. data/src/core/lib/compression/compression.cc +179 -0
  432. data/src/core/lib/compression/compression_args.cc +134 -0
  433. data/src/core/lib/compression/compression_args.h +56 -0
  434. data/src/core/lib/compression/compression_internal.cc +280 -0
  435. data/src/core/lib/compression/compression_internal.h +96 -0
  436. data/src/core/lib/compression/message_compress.cc +192 -0
  437. data/src/core/lib/compression/message_compress.h +40 -0
  438. data/src/core/lib/compression/stream_compression.cc +80 -0
  439. data/src/core/lib/compression/stream_compression.h +116 -0
  440. data/src/core/lib/compression/stream_compression_gzip.cc +230 -0
  441. data/src/core/lib/compression/stream_compression_gzip.h +28 -0
  442. data/src/core/lib/compression/stream_compression_identity.cc +92 -0
  443. data/src/core/lib/compression/stream_compression_identity.h +29 -0
  444. data/src/core/lib/debug/stats.cc +172 -0
  445. data/src/core/lib/debug/stats.h +70 -0
  446. data/src/core/lib/debug/stats_data.cc +687 -0
  447. data/src/core/lib/debug/stats_data.h +555 -0
  448. data/src/core/lib/debug/trace.cc +154 -0
  449. data/src/core/lib/debug/trace.h +131 -0
  450. data/src/core/lib/gpr/alloc.cc +74 -0
  451. data/src/core/lib/gpr/alloc.h +28 -0
  452. data/src/core/lib/gpr/arena.h +47 -0
  453. data/src/core/lib/gpr/atm.cc +35 -0
  454. data/src/core/lib/gpr/cpu_iphone.cc +36 -0
  455. data/src/core/lib/gpr/cpu_linux.cc +82 -0
  456. data/src/core/lib/gpr/cpu_posix.cc +83 -0
  457. data/src/core/lib/gpr/cpu_windows.cc +33 -0
  458. data/src/core/lib/gpr/env.h +40 -0
  459. data/src/core/lib/gpr/env_linux.cc +76 -0
  460. data/src/core/lib/gpr/env_posix.cc +47 -0
  461. data/src/core/lib/gpr/env_windows.cc +74 -0
  462. data/src/core/lib/gpr/log.cc +98 -0
  463. data/src/core/lib/gpr/log_android.cc +76 -0
  464. data/src/core/lib/gpr/log_linux.cc +97 -0
  465. data/src/core/lib/gpr/log_posix.cc +95 -0
  466. data/src/core/lib/gpr/log_windows.cc +102 -0
  467. data/src/core/lib/gpr/murmur_hash.cc +80 -0
  468. data/src/core/lib/gpr/murmur_hash.h +29 -0
  469. data/src/core/lib/gpr/spinlock.h +45 -0
  470. data/src/core/lib/gpr/string.cc +341 -0
  471. data/src/core/lib/gpr/string.h +111 -0
  472. data/src/core/lib/gpr/string_posix.cc +72 -0
  473. data/src/core/lib/gpr/string_util_windows.cc +82 -0
  474. data/src/core/lib/gpr/string_windows.cc +69 -0
  475. data/src/core/lib/gpr/string_windows.h +32 -0
  476. data/src/core/lib/gpr/sync.cc +124 -0
  477. data/src/core/lib/gpr/sync_abseil.cc +116 -0
  478. data/src/core/lib/gpr/sync_posix.cc +176 -0
  479. data/src/core/lib/gpr/sync_windows.cc +120 -0
  480. data/src/core/lib/gpr/time.cc +263 -0
  481. data/src/core/lib/gpr/time_posix.cc +186 -0
  482. data/src/core/lib/gpr/time_precise.cc +165 -0
  483. data/src/core/lib/gpr/time_precise.h +66 -0
  484. data/src/core/lib/gpr/time_windows.cc +98 -0
  485. data/src/core/lib/gpr/tls.h +68 -0
  486. data/src/core/lib/gpr/tls_gcc.h +52 -0
  487. data/src/core/lib/gpr/tls_msvc.h +52 -0
  488. data/src/core/lib/gpr/tls_pthread.cc +30 -0
  489. data/src/core/lib/gpr/tls_pthread.h +56 -0
  490. data/src/core/lib/gpr/tmpfile.h +32 -0
  491. data/src/core/lib/gpr/tmpfile_msys.cc +58 -0
  492. data/src/core/lib/gpr/tmpfile_posix.cc +70 -0
  493. data/src/core/lib/gpr/tmpfile_windows.cc +69 -0
  494. data/src/core/lib/gpr/useful.h +65 -0
  495. data/src/core/lib/gpr/wrap_memcpy.cc +42 -0
  496. data/src/core/lib/gprpp/arena.cc +103 -0
  497. data/src/core/lib/gprpp/arena.h +120 -0
  498. data/src/core/lib/gprpp/atomic.h +104 -0
  499. data/src/core/lib/gprpp/debug_location.h +53 -0
  500. data/src/core/lib/gprpp/fork.cc +242 -0
  501. data/src/core/lib/gprpp/fork.h +103 -0
  502. data/src/core/lib/gprpp/global_config.h +96 -0
  503. data/src/core/lib/gprpp/global_config_custom.h +29 -0
  504. data/src/core/lib/gprpp/global_config_env.cc +135 -0
  505. data/src/core/lib/gprpp/global_config_env.h +131 -0
  506. data/src/core/lib/gprpp/global_config_generic.h +44 -0
  507. data/src/core/lib/gprpp/host_port.cc +112 -0
  508. data/src/core/lib/gprpp/host_port.h +56 -0
  509. data/src/core/lib/gprpp/manual_constructor.h +213 -0
  510. data/src/core/lib/gprpp/map.h +53 -0
  511. data/src/core/lib/gprpp/memory.h +51 -0
  512. data/src/core/lib/gprpp/mpscq.cc +108 -0
  513. data/src/core/lib/gprpp/mpscq.h +98 -0
  514. data/src/core/lib/gprpp/orphanable.h +129 -0
  515. data/src/core/lib/gprpp/ref_counted.h +312 -0
  516. data/src/core/lib/gprpp/ref_counted_ptr.h +192 -0
  517. data/src/core/lib/gprpp/sync.h +135 -0
  518. data/src/core/lib/gprpp/thd.h +174 -0
  519. data/src/core/lib/gprpp/thd_posix.cc +204 -0
  520. data/src/core/lib/gprpp/thd_windows.cc +176 -0
  521. data/src/core/lib/http/format_request.cc +103 -0
  522. data/src/core/lib/http/format_request.h +34 -0
  523. data/src/core/lib/http/httpcli.cc +303 -0
  524. data/src/core/lib/http/httpcli.h +126 -0
  525. data/src/core/lib/http/httpcli_security_connector.cc +214 -0
  526. data/src/core/lib/http/parser.cc +372 -0
  527. data/src/core/lib/http/parser.h +113 -0
  528. data/src/core/lib/iomgr/block_annotate.h +57 -0
  529. data/src/core/lib/iomgr/buffer_list.cc +308 -0
  530. data/src/core/lib/iomgr/buffer_list.h +165 -0
  531. data/src/core/lib/iomgr/call_combiner.cc +256 -0
  532. data/src/core/lib/iomgr/call_combiner.h +217 -0
  533. data/src/core/lib/iomgr/cfstream_handle.cc +209 -0
  534. data/src/core/lib/iomgr/cfstream_handle.h +90 -0
  535. data/src/core/lib/iomgr/closure.h +255 -0
  536. data/src/core/lib/iomgr/combiner.cc +339 -0
  537. data/src/core/lib/iomgr/combiner.h +88 -0
  538. data/src/core/lib/iomgr/dualstack_socket_posix.cc +47 -0
  539. data/src/core/lib/iomgr/dynamic_annotations.h +67 -0
  540. data/src/core/lib/iomgr/endpoint.cc +67 -0
  541. data/src/core/lib/iomgr/endpoint.h +106 -0
  542. data/src/core/lib/iomgr/endpoint_cfstream.cc +376 -0
  543. data/src/core/lib/iomgr/endpoint_cfstream.h +49 -0
  544. data/src/core/lib/iomgr/endpoint_pair.h +33 -0
  545. data/src/core/lib/iomgr/endpoint_pair_posix.cc +73 -0
  546. data/src/core/lib/iomgr/endpoint_pair_uv.cc +40 -0
  547. data/src/core/lib/iomgr/endpoint_pair_windows.cc +87 -0
  548. data/src/core/lib/iomgr/error.cc +812 -0
  549. data/src/core/lib/iomgr/error.h +276 -0
  550. data/src/core/lib/iomgr/error_cfstream.cc +52 -0
  551. data/src/core/lib/iomgr/error_cfstream.h +31 -0
  552. data/src/core/lib/iomgr/error_internal.h +61 -0
  553. data/src/core/lib/iomgr/ev_apple.cc +356 -0
  554. data/src/core/lib/iomgr/ev_apple.h +43 -0
  555. data/src/core/lib/iomgr/ev_epoll1_linux.cc +1365 -0
  556. data/src/core/lib/iomgr/ev_epoll1_linux.h +31 -0
  557. data/src/core/lib/iomgr/ev_epollex_linux.cc +1656 -0
  558. data/src/core/lib/iomgr/ev_epollex_linux.h +30 -0
  559. data/src/core/lib/iomgr/ev_poll_posix.cc +1427 -0
  560. data/src/core/lib/iomgr/ev_poll_posix.h +29 -0
  561. data/src/core/lib/iomgr/ev_posix.cc +417 -0
  562. data/src/core/lib/iomgr/ev_posix.h +207 -0
  563. data/src/core/lib/iomgr/ev_windows.cc +30 -0
  564. data/src/core/lib/iomgr/exec_ctx.cc +224 -0
  565. data/src/core/lib/iomgr/exec_ctx.h +380 -0
  566. data/src/core/lib/iomgr/executor.cc +469 -0
  567. data/src/core/lib/iomgr/executor.h +122 -0
  568. data/src/core/lib/iomgr/executor/mpmcqueue.cc +183 -0
  569. data/src/core/lib/iomgr/executor/mpmcqueue.h +175 -0
  570. data/src/core/lib/iomgr/executor/threadpool.cc +137 -0
  571. data/src/core/lib/iomgr/executor/threadpool.h +149 -0
  572. data/src/core/lib/iomgr/fork_posix.cc +119 -0
  573. data/src/core/lib/iomgr/fork_windows.cc +41 -0
  574. data/src/core/lib/iomgr/gethostname.h +26 -0
  575. data/src/core/lib/iomgr/gethostname_fallback.cc +30 -0
  576. data/src/core/lib/iomgr/gethostname_host_name_max.cc +40 -0
  577. data/src/core/lib/iomgr/gethostname_sysconf.cc +40 -0
  578. data/src/core/lib/iomgr/grpc_if_nametoindex.h +30 -0
  579. data/src/core/lib/iomgr/grpc_if_nametoindex_posix.cc +42 -0
  580. data/src/core/lib/iomgr/grpc_if_nametoindex_unsupported.cc +38 -0
  581. data/src/core/lib/iomgr/internal_errqueue.cc +67 -0
  582. data/src/core/lib/iomgr/internal_errqueue.h +191 -0
  583. data/src/core/lib/iomgr/iocp_windows.cc +157 -0
  584. data/src/core/lib/iomgr/iocp_windows.h +48 -0
  585. data/src/core/lib/iomgr/iomgr.cc +194 -0
  586. data/src/core/lib/iomgr/iomgr.h +60 -0
  587. data/src/core/lib/iomgr/iomgr_custom.cc +79 -0
  588. data/src/core/lib/iomgr/iomgr_custom.h +49 -0
  589. data/src/core/lib/iomgr/iomgr_internal.cc +57 -0
  590. data/src/core/lib/iomgr/iomgr_internal.h +73 -0
  591. data/src/core/lib/iomgr/iomgr_posix.cc +89 -0
  592. data/src/core/lib/iomgr/iomgr_posix.h +26 -0
  593. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +171 -0
  594. data/src/core/lib/iomgr/iomgr_uv.cc +43 -0
  595. data/src/core/lib/iomgr/iomgr_windows.cc +106 -0
  596. data/src/core/lib/iomgr/is_epollexclusive_available.cc +105 -0
  597. data/src/core/lib/iomgr/is_epollexclusive_available.h +36 -0
  598. data/src/core/lib/iomgr/load_file.cc +81 -0
  599. data/src/core/lib/iomgr/load_file.h +35 -0
  600. data/src/core/lib/iomgr/lockfree_event.cc +255 -0
  601. data/src/core/lib/iomgr/lockfree_event.h +72 -0
  602. data/src/core/lib/iomgr/nameser.h +106 -0
  603. data/src/core/lib/iomgr/poller/eventmanager_libuv.cc +87 -0
  604. data/src/core/lib/iomgr/poller/eventmanager_libuv.h +88 -0
  605. data/src/core/lib/iomgr/polling_entity.cc +96 -0
  606. data/src/core/lib/iomgr/polling_entity.h +68 -0
  607. data/src/core/lib/iomgr/pollset.cc +56 -0
  608. data/src/core/lib/iomgr/pollset.h +99 -0
  609. data/src/core/lib/iomgr/pollset_custom.cc +106 -0
  610. data/src/core/lib/iomgr/pollset_custom.h +35 -0
  611. data/src/core/lib/iomgr/pollset_set.cc +55 -0
  612. data/src/core/lib/iomgr/pollset_set.h +55 -0
  613. data/src/core/lib/iomgr/pollset_set_custom.cc +48 -0
  614. data/src/core/lib/iomgr/pollset_set_custom.h +26 -0
  615. data/src/core/lib/iomgr/pollset_set_windows.cc +51 -0
  616. data/src/core/lib/iomgr/pollset_set_windows.h +26 -0
  617. data/src/core/lib/iomgr/pollset_uv.cc +93 -0
  618. data/src/core/lib/iomgr/pollset_uv.h +32 -0
  619. data/src/core/lib/iomgr/pollset_windows.cc +243 -0
  620. data/src/core/lib/iomgr/pollset_windows.h +70 -0
  621. data/src/core/lib/iomgr/port.h +244 -0
  622. data/src/core/lib/iomgr/python_util.h +46 -0
  623. data/src/core/lib/iomgr/resolve_address.cc +50 -0
  624. data/src/core/lib/iomgr/resolve_address.h +81 -0
  625. data/src/core/lib/iomgr/resolve_address_custom.cc +173 -0
  626. data/src/core/lib/iomgr/resolve_address_custom.h +45 -0
  627. data/src/core/lib/iomgr/resolve_address_posix.cc +178 -0
  628. data/src/core/lib/iomgr/resolve_address_windows.cc +154 -0
  629. data/src/core/lib/iomgr/resource_quota.cc +1013 -0
  630. data/src/core/lib/iomgr/resource_quota.h +177 -0
  631. data/src/core/lib/iomgr/sockaddr.h +32 -0
  632. data/src/core/lib/iomgr/sockaddr_custom.h +54 -0
  633. data/src/core/lib/iomgr/sockaddr_posix.h +55 -0
  634. data/src/core/lib/iomgr/sockaddr_utils.cc +293 -0
  635. data/src/core/lib/iomgr/sockaddr_utils.h +79 -0
  636. data/src/core/lib/iomgr/sockaddr_windows.h +55 -0
  637. data/src/core/lib/iomgr/socket_factory_posix.cc +94 -0
  638. data/src/core/lib/iomgr/socket_factory_posix.h +68 -0
  639. data/src/core/lib/iomgr/socket_mutator.cc +83 -0
  640. data/src/core/lib/iomgr/socket_mutator.h +60 -0
  641. data/src/core/lib/iomgr/socket_utils.h +47 -0
  642. data/src/core/lib/iomgr/socket_utils_common_posix.cc +473 -0
  643. data/src/core/lib/iomgr/socket_utils_linux.cc +42 -0
  644. data/src/core/lib/iomgr/socket_utils_posix.cc +58 -0
  645. data/src/core/lib/iomgr/socket_utils_posix.h +163 -0
  646. data/src/core/lib/iomgr/socket_utils_uv.cc +49 -0
  647. data/src/core/lib/iomgr/socket_utils_windows.cc +47 -0
  648. data/src/core/lib/iomgr/socket_windows.cc +203 -0
  649. data/src/core/lib/iomgr/socket_windows.h +127 -0
  650. data/src/core/lib/iomgr/sys_epoll_wrapper.h +30 -0
  651. data/src/core/lib/iomgr/tcp_client.cc +36 -0
  652. data/src/core/lib/iomgr/tcp_client.h +52 -0
  653. data/src/core/lib/iomgr/tcp_client_cfstream.cc +215 -0
  654. data/src/core/lib/iomgr/tcp_client_custom.cc +163 -0
  655. data/src/core/lib/iomgr/tcp_client_posix.cc +360 -0
  656. data/src/core/lib/iomgr/tcp_client_posix.h +68 -0
  657. data/src/core/lib/iomgr/tcp_client_windows.cc +232 -0
  658. data/src/core/lib/iomgr/tcp_custom.cc +370 -0
  659. data/src/core/lib/iomgr/tcp_custom.h +84 -0
  660. data/src/core/lib/iomgr/tcp_posix.cc +1855 -0
  661. data/src/core/lib/iomgr/tcp_posix.h +60 -0
  662. data/src/core/lib/iomgr/tcp_server.cc +78 -0
  663. data/src/core/lib/iomgr/tcp_server.h +143 -0
  664. data/src/core/lib/iomgr/tcp_server_custom.cc +485 -0
  665. data/src/core/lib/iomgr/tcp_server_posix.cc +638 -0
  666. data/src/core/lib/iomgr/tcp_server_utils_posix.h +125 -0
  667. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +223 -0
  668. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +181 -0
  669. data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +36 -0
  670. data/src/core/lib/iomgr/tcp_server_windows.cc +564 -0
  671. data/src/core/lib/iomgr/tcp_uv.cc +419 -0
  672. data/src/core/lib/iomgr/tcp_windows.cc +533 -0
  673. data/src/core/lib/iomgr/tcp_windows.h +53 -0
  674. data/src/core/lib/iomgr/time_averaged_stats.cc +64 -0
  675. data/src/core/lib/iomgr/time_averaged_stats.h +72 -0
  676. data/src/core/lib/iomgr/timer.cc +45 -0
  677. data/src/core/lib/iomgr/timer.h +127 -0
  678. data/src/core/lib/iomgr/timer_custom.cc +95 -0
  679. data/src/core/lib/iomgr/timer_custom.h +43 -0
  680. data/src/core/lib/iomgr/timer_generic.cc +747 -0
  681. data/src/core/lib/iomgr/timer_generic.h +39 -0
  682. data/src/core/lib/iomgr/timer_heap.cc +135 -0
  683. data/src/core/lib/iomgr/timer_heap.h +43 -0
  684. data/src/core/lib/iomgr/timer_manager.cc +363 -0
  685. data/src/core/lib/iomgr/timer_manager.h +41 -0
  686. data/src/core/lib/iomgr/timer_uv.cc +66 -0
  687. data/src/core/lib/iomgr/udp_server.cc +747 -0
  688. data/src/core/lib/iomgr/udp_server.h +101 -0
  689. data/src/core/lib/iomgr/unix_sockets_posix.cc +104 -0
  690. data/src/core/lib/iomgr/unix_sockets_posix.h +43 -0
  691. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +49 -0
  692. data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +82 -0
  693. data/src/core/lib/iomgr/wakeup_fd_nospecial.cc +38 -0
  694. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +100 -0
  695. data/src/core/lib/iomgr/wakeup_fd_pipe.h +28 -0
  696. data/src/core/lib/iomgr/wakeup_fd_posix.cc +69 -0
  697. data/src/core/lib/iomgr/wakeup_fd_posix.h +96 -0
  698. data/src/core/lib/iomgr/work_serializer.cc +155 -0
  699. data/src/core/lib/iomgr/work_serializer.h +65 -0
  700. data/src/core/lib/json/json.h +240 -0
  701. data/src/core/lib/json/json_reader.cc +855 -0
  702. data/src/core/lib/json/json_writer.cc +337 -0
  703. data/src/core/lib/profiling/basic_timers.cc +293 -0
  704. data/src/core/lib/profiling/stap_timers.cc +50 -0
  705. data/src/core/lib/profiling/timers.h +94 -0
  706. data/src/core/lib/security/context/security_context.cc +321 -0
  707. data/src/core/lib/security/context/security_context.h +150 -0
  708. data/src/core/lib/security/credentials/alts/alts_credentials.cc +110 -0
  709. data/src/core/lib/security/credentials/alts/alts_credentials.h +109 -0
  710. data/src/core/lib/security/credentials/alts/check_gcp_environment.cc +72 -0
  711. data/src/core/lib/security/credentials/alts/check_gcp_environment.h +57 -0
  712. data/src/core/lib/security/credentials/alts/check_gcp_environment_linux.cc +68 -0
  713. data/src/core/lib/security/credentials/alts/check_gcp_environment_no_op.cc +33 -0
  714. data/src/core/lib/security/credentials/alts/check_gcp_environment_windows.cc +102 -0
  715. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc +127 -0
  716. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.cc +46 -0
  717. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.h +75 -0
  718. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +59 -0
  719. data/src/core/lib/security/credentials/composite/composite_credentials.cc +229 -0
  720. data/src/core/lib/security/credentials/composite/composite_credentials.h +106 -0
  721. data/src/core/lib/security/credentials/credentials.cc +162 -0
  722. data/src/core/lib/security/credentials/credentials.h +283 -0
  723. data/src/core/lib/security/credentials/credentials_metadata.cc +62 -0
  724. data/src/core/lib/security/credentials/fake/fake_credentials.cc +112 -0
  725. data/src/core/lib/security/credentials/fake/fake_credentials.h +87 -0
  726. data/src/core/lib/security/credentials/google_default/credentials_generic.cc +41 -0
  727. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +383 -0
  728. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +87 -0
  729. data/src/core/lib/security/credentials/iam/iam_credentials.cc +80 -0
  730. data/src/core/lib/security/credentials/iam/iam_credentials.h +49 -0
  731. data/src/core/lib/security/credentials/jwt/json_token.cc +288 -0
  732. data/src/core/lib/security/credentials/jwt/json_token.h +75 -0
  733. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +172 -0
  734. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +80 -0
  735. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +925 -0
  736. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +122 -0
  737. data/src/core/lib/security/credentials/local/local_credentials.cc +64 -0
  738. data/src/core/lib/security/credentials/local/local_credentials.h +61 -0
  739. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +771 -0
  740. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +171 -0
  741. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +269 -0
  742. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +72 -0
  743. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +364 -0
  744. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +99 -0
  745. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +245 -0
  746. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +313 -0
  747. data/src/core/lib/security/credentials/tls/tls_credentials.cc +128 -0
  748. data/src/core/lib/security/credentials/tls/tls_credentials.h +62 -0
  749. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +301 -0
  750. data/src/core/lib/security/security_connector/alts/alts_security_connector.h +76 -0
  751. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +324 -0
  752. data/src/core/lib/security/security_connector/fake/fake_security_connector.h +45 -0
  753. data/src/core/lib/security/security_connector/load_system_roots.h +29 -0
  754. data/src/core/lib/security/security_connector/load_system_roots_fallback.cc +32 -0
  755. data/src/core/lib/security/security_connector/load_system_roots_linux.cc +171 -0
  756. data/src/core/lib/security/security_connector/load_system_roots_linux.h +44 -0
  757. data/src/core/lib/security/security_connector/local/local_security_connector.cc +281 -0
  758. data/src/core/lib/security/security_connector/local/local_security_connector.h +59 -0
  759. data/src/core/lib/security/security_connector/security_connector.cc +129 -0
  760. data/src/core/lib/security/security_connector/security_connector.h +176 -0
  761. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +439 -0
  762. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +77 -0
  763. data/src/core/lib/security/security_connector/ssl_utils.cc +563 -0
  764. data/src/core/lib/security/security_connector/ssl_utils.h +184 -0
  765. data/src/core/lib/security/security_connector/ssl_utils_config.cc +32 -0
  766. data/src/core/lib/security/security_connector/ssl_utils_config.h +30 -0
  767. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +603 -0
  768. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +183 -0
  769. data/src/core/lib/security/transport/auth_filters.h +35 -0
  770. data/src/core/lib/security/transport/client_auth_filter.cc +466 -0
  771. data/src/core/lib/security/transport/secure_endpoint.cc +446 -0
  772. data/src/core/lib/security/transport/secure_endpoint.h +41 -0
  773. data/src/core/lib/security/transport/security_handshaker.cc +574 -0
  774. data/src/core/lib/security/transport/security_handshaker.h +45 -0
  775. data/src/core/lib/security/transport/server_auth_filter.cc +326 -0
  776. data/src/core/lib/security/transport/target_authority_table.cc +75 -0
  777. data/src/core/lib/security/transport/target_authority_table.h +40 -0
  778. data/src/core/lib/security/transport/tsi_error.cc +29 -0
  779. data/src/core/lib/security/transport/tsi_error.h +29 -0
  780. data/src/core/lib/security/util/json_util.cc +73 -0
  781. data/src/core/lib/security/util/json_util.h +44 -0
  782. data/src/core/lib/slice/b64.cc +239 -0
  783. data/src/core/lib/slice/b64.h +50 -0
  784. data/src/core/lib/slice/percent_encoding.cc +169 -0
  785. data/src/core/lib/slice/percent_encoding.h +65 -0
  786. data/src/core/lib/slice/slice.cc +559 -0
  787. data/src/core/lib/slice/slice_buffer.cc +413 -0
  788. data/src/core/lib/slice/slice_hash_table.h +199 -0
  789. data/src/core/lib/slice/slice_intern.cc +375 -0
  790. data/src/core/lib/slice/slice_internal.h +364 -0
  791. data/src/core/lib/slice/slice_string_helpers.cc +127 -0
  792. data/src/core/lib/slice/slice_string_helpers.h +49 -0
  793. data/src/core/lib/slice/slice_utils.h +200 -0
  794. data/src/core/lib/slice/slice_weak_hash_table.h +102 -0
  795. data/src/core/lib/surface/api_trace.cc +24 -0
  796. data/src/core/lib/surface/api_trace.h +52 -0
  797. data/src/core/lib/surface/byte_buffer.cc +92 -0
  798. data/src/core/lib/surface/byte_buffer_reader.cc +101 -0
  799. data/src/core/lib/surface/call.cc +2044 -0
  800. data/src/core/lib/surface/call.h +125 -0
  801. data/src/core/lib/surface/call_details.cc +41 -0
  802. data/src/core/lib/surface/call_log_batch.cc +111 -0
  803. data/src/core/lib/surface/call_test_only.h +43 -0
  804. data/src/core/lib/surface/channel.cc +543 -0
  805. data/src/core/lib/surface/channel.h +158 -0
  806. data/src/core/lib/surface/channel_init.cc +109 -0
  807. data/src/core/lib/surface/channel_init.h +78 -0
  808. data/src/core/lib/surface/channel_ping.cc +64 -0
  809. data/src/core/lib/surface/channel_stack_type.cc +58 -0
  810. data/src/core/lib/surface/channel_stack_type.h +47 -0
  811. data/src/core/lib/surface/completion_queue.cc +1438 -0
  812. data/src/core/lib/surface/completion_queue.h +97 -0
  813. data/src/core/lib/surface/completion_queue_factory.cc +88 -0
  814. data/src/core/lib/surface/completion_queue_factory.h +38 -0
  815. data/src/core/lib/surface/event_string.cc +61 -0
  816. data/src/core/lib/surface/event_string.h +31 -0
  817. data/src/core/lib/surface/init.cc +250 -0
  818. data/src/core/lib/surface/init.h +27 -0
  819. data/src/core/lib/surface/init_secure.cc +81 -0
  820. data/src/core/lib/surface/lame_client.cc +191 -0
  821. data/src/core/lib/surface/lame_client.h +28 -0
  822. data/src/core/lib/surface/metadata_array.cc +36 -0
  823. data/src/core/lib/surface/server.cc +1800 -0
  824. data/src/core/lib/surface/server.h +99 -0
  825. data/src/core/lib/surface/validate_metadata.cc +105 -0
  826. data/src/core/lib/surface/validate_metadata.h +41 -0
  827. data/src/core/lib/surface/version.cc +28 -0
  828. data/src/core/lib/transport/bdp_estimator.cc +87 -0
  829. data/src/core/lib/transport/bdp_estimator.h +94 -0
  830. data/src/core/lib/transport/byte_stream.cc +158 -0
  831. data/src/core/lib/transport/byte_stream.h +165 -0
  832. data/src/core/lib/transport/connectivity_state.cc +180 -0
  833. data/src/core/lib/transport/connectivity_state.h +131 -0
  834. data/src/core/lib/transport/error_utils.cc +141 -0
  835. data/src/core/lib/transport/error_utils.h +46 -0
  836. data/src/core/lib/transport/http2_errors.h +41 -0
  837. data/src/core/lib/transport/metadata.cc +679 -0
  838. data/src/core/lib/transport/metadata.h +446 -0
  839. data/src/core/lib/transport/metadata_batch.cc +392 -0
  840. data/src/core/lib/transport/metadata_batch.h +191 -0
  841. data/src/core/lib/transport/pid_controller.cc +51 -0
  842. data/src/core/lib/transport/pid_controller.h +116 -0
  843. data/src/core/lib/transport/static_metadata.cc +1230 -0
  844. data/src/core/lib/transport/static_metadata.h +597 -0
  845. data/src/core/lib/transport/status_conversion.cc +92 -0
  846. data/src/core/lib/transport/status_conversion.h +38 -0
  847. data/src/core/lib/transport/status_metadata.cc +61 -0
  848. data/src/core/lib/transport/status_metadata.h +48 -0
  849. data/src/core/lib/transport/timeout_encoding.cc +151 -0
  850. data/src/core/lib/transport/timeout_encoding.h +38 -0
  851. data/src/core/lib/transport/transport.cc +259 -0
  852. data/src/core/lib/transport/transport.h +456 -0
  853. data/src/core/lib/transport/transport_impl.h +71 -0
  854. data/src/core/lib/transport/transport_op_string.cc +169 -0
  855. data/src/core/lib/uri/uri_parser.cc +314 -0
  856. data/src/core/lib/uri/uri_parser.h +49 -0
  857. data/src/core/plugin_registry/grpc_plugin_registry.cc +121 -0
  858. data/src/core/tsi/alts/crypt/aes_gcm.cc +687 -0
  859. data/src/core/tsi/alts/crypt/gsec.cc +189 -0
  860. data/src/core/tsi/alts/crypt/gsec.h +454 -0
  861. data/src/core/tsi/alts/frame_protector/alts_counter.cc +118 -0
  862. data/src/core/tsi/alts/frame_protector/alts_counter.h +98 -0
  863. data/src/core/tsi/alts/frame_protector/alts_crypter.cc +66 -0
  864. data/src/core/tsi/alts/frame_protector/alts_crypter.h +255 -0
  865. data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +407 -0
  866. data/src/core/tsi/alts/frame_protector/alts_frame_protector.h +55 -0
  867. data/src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.cc +114 -0
  868. data/src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.h +114 -0
  869. data/src/core/tsi/alts/frame_protector/alts_seal_privacy_integrity_crypter.cc +105 -0
  870. data/src/core/tsi/alts/frame_protector/alts_unseal_privacy_integrity_crypter.cc +103 -0
  871. data/src/core/tsi/alts/frame_protector/frame_handler.cc +218 -0
  872. data/src/core/tsi/alts/frame_protector/frame_handler.h +236 -0
  873. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +899 -0
  874. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +161 -0
  875. data/src/core/tsi/alts/handshaker/alts_shared_resource.cc +83 -0
  876. data/src/core/tsi/alts/handshaker/alts_shared_resource.h +73 -0
  877. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +674 -0
  878. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +104 -0
  879. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +88 -0
  880. data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +64 -0
  881. data/src/core/tsi/alts/handshaker/alts_tsi_utils.h +53 -0
  882. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +223 -0
  883. data/src/core/tsi/alts/handshaker/transport_security_common_api.h +171 -0
  884. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +226 -0
  885. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.h +54 -0
  886. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.cc +144 -0
  887. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.h +49 -0
  888. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol.h +91 -0
  889. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +174 -0
  890. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.h +99 -0
  891. data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.cc +476 -0
  892. data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.h +199 -0
  893. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +307 -0
  894. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.h +57 -0
  895. data/src/core/tsi/fake_transport_security.cc +789 -0
  896. data/src/core/tsi/fake_transport_security.h +47 -0
  897. data/src/core/tsi/local_transport_security.cc +211 -0
  898. data/src/core/tsi/local_transport_security.h +51 -0
  899. data/src/core/tsi/ssl/session_cache/ssl_session.h +71 -0
  900. data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +57 -0
  901. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +214 -0
  902. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +90 -0
  903. data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +75 -0
  904. data/src/core/tsi/ssl_transport_security.cc +2124 -0
  905. data/src/core/tsi/ssl_transport_security.h +353 -0
  906. data/src/core/tsi/ssl_types.h +42 -0
  907. data/src/core/tsi/transport_security.cc +370 -0
  908. data/src/core/tsi/transport_security.h +127 -0
  909. data/src/core/tsi/transport_security_grpc.cc +73 -0
  910. data/src/core/tsi/transport_security_grpc.h +79 -0
  911. data/src/core/tsi/transport_security_interface.h +476 -0
  912. data/src/ruby/bin/math_client.rb +140 -0
  913. data/src/ruby/bin/math_pb.rb +34 -0
  914. data/src/ruby/bin/math_server.rb +191 -0
  915. data/src/ruby/bin/math_services_pb.rb +51 -0
  916. data/src/ruby/bin/noproto_client.rb +93 -0
  917. data/src/ruby/bin/noproto_server.rb +97 -0
  918. data/src/ruby/ext/grpc/ext-export.clang +1 -0
  919. data/src/ruby/ext/grpc/ext-export.gcc +6 -0
  920. data/src/ruby/ext/grpc/extconf.rb +107 -0
  921. data/src/ruby/ext/grpc/rb_byte_buffer.c +64 -0
  922. data/src/ruby/ext/grpc/rb_byte_buffer.h +35 -0
  923. data/src/ruby/ext/grpc/rb_call.c +1050 -0
  924. data/src/ruby/ext/grpc/rb_call.h +53 -0
  925. data/src/ruby/ext/grpc/rb_call_credentials.c +297 -0
  926. data/src/ruby/ext/grpc/rb_call_credentials.h +31 -0
  927. data/src/ruby/ext/grpc/rb_channel.c +835 -0
  928. data/src/ruby/ext/grpc/rb_channel.h +34 -0
  929. data/src/ruby/ext/grpc/rb_channel_args.c +155 -0
  930. data/src/ruby/ext/grpc/rb_channel_args.h +38 -0
  931. data/src/ruby/ext/grpc/rb_channel_credentials.c +267 -0
  932. data/src/ruby/ext/grpc/rb_channel_credentials.h +32 -0
  933. data/src/ruby/ext/grpc/rb_completion_queue.c +100 -0
  934. data/src/ruby/ext/grpc/rb_completion_queue.h +36 -0
  935. data/src/ruby/ext/grpc/rb_compression_options.c +470 -0
  936. data/src/ruby/ext/grpc/rb_compression_options.h +29 -0
  937. data/src/ruby/ext/grpc/rb_enable_cpp.cc +22 -0
  938. data/src/ruby/ext/grpc/rb_event_thread.c +143 -0
  939. data/src/ruby/ext/grpc/rb_event_thread.h +21 -0
  940. data/src/ruby/ext/grpc/rb_grpc.c +328 -0
  941. data/src/ruby/ext/grpc/rb_grpc.h +76 -0
  942. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +573 -0
  943. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +865 -0
  944. data/src/ruby/ext/grpc/rb_loader.c +57 -0
  945. data/src/ruby/ext/grpc/rb_loader.h +25 -0
  946. data/src/ruby/ext/grpc/rb_server.c +372 -0
  947. data/src/ruby/ext/grpc/rb_server.h +32 -0
  948. data/src/ruby/ext/grpc/rb_server_credentials.c +243 -0
  949. data/src/ruby/ext/grpc/rb_server_credentials.h +32 -0
  950. data/src/ruby/lib/grpc.rb +37 -0
  951. data/src/ruby/lib/grpc/core/status_codes.rb +135 -0
  952. data/src/ruby/lib/grpc/core/time_consts.rb +56 -0
  953. data/src/ruby/lib/grpc/errors.rb +277 -0
  954. data/src/ruby/lib/grpc/generic/active_call.rb +669 -0
  955. data/src/ruby/lib/grpc/generic/bidi_call.rb +233 -0
  956. data/src/ruby/lib/grpc/generic/client_stub.rb +501 -0
  957. data/src/ruby/lib/grpc/generic/interceptor_registry.rb +53 -0
  958. data/src/ruby/lib/grpc/generic/interceptors.rb +186 -0
  959. data/src/ruby/lib/grpc/generic/rpc_desc.rb +204 -0
  960. data/src/ruby/lib/grpc/generic/rpc_server.rb +551 -0
  961. data/src/ruby/lib/grpc/generic/service.rb +211 -0
  962. data/src/ruby/lib/grpc/google_rpc_status_utils.rb +40 -0
  963. data/src/ruby/lib/grpc/grpc.rb +24 -0
  964. data/src/ruby/lib/grpc/logconfig.rb +44 -0
  965. data/src/ruby/lib/grpc/notifier.rb +45 -0
  966. data/src/ruby/lib/grpc/structs.rb +15 -0
  967. data/src/ruby/lib/grpc/version.rb +18 -0
  968. data/src/ruby/pb/README.md +42 -0
  969. data/src/ruby/pb/generate_proto_ruby.sh +51 -0
  970. data/src/ruby/pb/grpc/health/checker.rb +75 -0
  971. data/src/ruby/pb/grpc/health/v1/health_pb.rb +31 -0
  972. data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +62 -0
  973. data/src/ruby/pb/grpc/testing/duplicate/echo_duplicate_services_pb.rb +44 -0
  974. data/src/ruby/pb/grpc/testing/metrics_pb.rb +28 -0
  975. data/src/ruby/pb/grpc/testing/metrics_services_pb.rb +49 -0
  976. data/src/ruby/pb/src/proto/grpc/testing/empty_pb.rb +17 -0
  977. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +105 -0
  978. data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +16 -0
  979. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +118 -0
  980. data/src/ruby/spec/call_credentials_spec.rb +42 -0
  981. data/src/ruby/spec/call_spec.rb +180 -0
  982. data/src/ruby/spec/channel_connection_spec.rb +126 -0
  983. data/src/ruby/spec/channel_credentials_spec.rb +82 -0
  984. data/src/ruby/spec/channel_spec.rb +234 -0
  985. data/src/ruby/spec/client_auth_spec.rb +126 -0
  986. data/src/ruby/spec/client_server_spec.rb +664 -0
  987. data/src/ruby/spec/compression_options_spec.rb +149 -0
  988. data/src/ruby/spec/debug_message_spec.rb +134 -0
  989. data/src/ruby/spec/error_sanity_spec.rb +49 -0
  990. data/src/ruby/spec/errors_spec.rb +142 -0
  991. data/src/ruby/spec/generic/active_call_spec.rb +672 -0
  992. data/src/ruby/spec/generic/client_interceptors_spec.rb +153 -0
  993. data/src/ruby/spec/generic/client_stub_spec.rb +1083 -0
  994. data/src/ruby/spec/generic/interceptor_registry_spec.rb +65 -0
  995. data/src/ruby/spec/generic/rpc_desc_spec.rb +374 -0
  996. data/src/ruby/spec/generic/rpc_server_pool_spec.rb +127 -0
  997. data/src/ruby/spec/generic/rpc_server_spec.rb +748 -0
  998. data/src/ruby/spec/generic/server_interceptors_spec.rb +218 -0
  999. data/src/ruby/spec/generic/service_spec.rb +263 -0
  1000. data/src/ruby/spec/google_rpc_status_utils_spec.rb +282 -0
  1001. data/src/ruby/spec/pb/codegen/grpc/testing/package_options.proto +28 -0
  1002. data/src/ruby/spec/pb/codegen/grpc/testing/package_options_import.proto +22 -0
  1003. data/src/ruby/spec/pb/codegen/grpc/testing/package_options_import2.proto +23 -0
  1004. data/src/ruby/spec/pb/codegen/grpc/testing/package_options_ruby_style.proto +41 -0
  1005. data/src/ruby/spec/pb/codegen/package_option_spec.rb +82 -0
  1006. data/src/ruby/spec/pb/duplicate/codegen_spec.rb +57 -0
  1007. data/src/ruby/spec/pb/health/checker_spec.rb +236 -0
  1008. data/src/ruby/spec/server_credentials_spec.rb +79 -0
  1009. data/src/ruby/spec/server_spec.rb +209 -0
  1010. data/src/ruby/spec/spec_helper.rb +61 -0
  1011. data/src/ruby/spec/support/helpers.rb +107 -0
  1012. data/src/ruby/spec/support/services.rb +160 -0
  1013. data/src/ruby/spec/testdata/README +1 -0
  1014. data/src/ruby/spec/testdata/ca.pem +20 -0
  1015. data/src/ruby/spec/testdata/client.key +28 -0
  1016. data/src/ruby/spec/testdata/client.pem +20 -0
  1017. data/src/ruby/spec/testdata/server1.key +28 -0
  1018. data/src/ruby/spec/testdata/server1.pem +22 -0
  1019. data/src/ruby/spec/time_consts_spec.rb +74 -0
  1020. data/third_party/abseil-cpp/absl/algorithm/algorithm.h +159 -0
  1021. data/third_party/abseil-cpp/absl/base/attributes.h +621 -0
  1022. data/third_party/abseil-cpp/absl/base/call_once.h +226 -0
  1023. data/third_party/abseil-cpp/absl/base/casts.h +184 -0
  1024. data/third_party/abseil-cpp/absl/base/config.h +671 -0
  1025. data/third_party/abseil-cpp/absl/base/const_init.h +76 -0
  1026. data/third_party/abseil-cpp/absl/base/dynamic_annotations.cc +129 -0
  1027. data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +389 -0
  1028. data/third_party/abseil-cpp/absl/base/internal/atomic_hook.h +200 -0
  1029. data/third_party/abseil-cpp/absl/base/internal/bits.h +218 -0
  1030. data/third_party/abseil-cpp/absl/base/internal/cycleclock.cc +107 -0
  1031. data/third_party/abseil-cpp/absl/base/internal/cycleclock.h +94 -0
  1032. data/third_party/abseil-cpp/absl/base/internal/endian.h +266 -0
  1033. data/third_party/abseil-cpp/absl/base/internal/errno_saver.h +43 -0
  1034. data/third_party/abseil-cpp/absl/base/internal/hide_ptr.h +51 -0
  1035. data/third_party/abseil-cpp/absl/base/internal/identity.h +37 -0
  1036. data/third_party/abseil-cpp/absl/base/internal/inline_variable.h +107 -0
  1037. data/third_party/abseil-cpp/absl/base/internal/invoke.h +187 -0
  1038. data/third_party/abseil-cpp/absl/base/internal/low_level_scheduling.h +107 -0
  1039. data/third_party/abseil-cpp/absl/base/internal/per_thread_tls.h +52 -0
  1040. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +240 -0
  1041. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +183 -0
  1042. data/third_party/abseil-cpp/absl/base/internal/scheduling_mode.h +58 -0
  1043. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +233 -0
  1044. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +243 -0
  1045. data/third_party/abseil-cpp/absl/base/internal/spinlock_akaros.inc +35 -0
  1046. data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +66 -0
  1047. data/third_party/abseil-cpp/absl/base/internal/spinlock_posix.inc +46 -0
  1048. data/third_party/abseil-cpp/absl/base/internal/spinlock_wait.cc +81 -0
  1049. data/third_party/abseil-cpp/absl/base/internal/spinlock_wait.h +93 -0
  1050. data/third_party/abseil-cpp/absl/base/internal/spinlock_win32.inc +37 -0
  1051. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +416 -0
  1052. data/third_party/abseil-cpp/absl/base/internal/sysinfo.h +66 -0
  1053. data/third_party/abseil-cpp/absl/base/internal/thread_annotations.h +271 -0
  1054. data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +152 -0
  1055. data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +259 -0
  1056. data/third_party/abseil-cpp/absl/base/internal/throw_delegate.cc +108 -0
  1057. data/third_party/abseil-cpp/absl/base/internal/throw_delegate.h +75 -0
  1058. data/third_party/abseil-cpp/absl/base/internal/tsan_mutex_interface.h +66 -0
  1059. data/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +158 -0
  1060. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +140 -0
  1061. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +124 -0
  1062. data/third_party/abseil-cpp/absl/base/log_severity.cc +27 -0
  1063. data/third_party/abseil-cpp/absl/base/log_severity.h +121 -0
  1064. data/third_party/abseil-cpp/absl/base/macros.h +220 -0
  1065. data/third_party/abseil-cpp/absl/base/optimization.h +181 -0
  1066. data/third_party/abseil-cpp/absl/base/options.h +211 -0
  1067. data/third_party/abseil-cpp/absl/base/policy_checks.h +111 -0
  1068. data/third_party/abseil-cpp/absl/base/port.h +26 -0
  1069. data/third_party/abseil-cpp/absl/base/thread_annotations.h +280 -0
  1070. data/third_party/abseil-cpp/absl/container/inlined_vector.h +848 -0
  1071. data/third_party/abseil-cpp/absl/container/internal/compressed_tuple.h +265 -0
  1072. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +892 -0
  1073. data/third_party/abseil-cpp/absl/memory/memory.h +695 -0
  1074. data/third_party/abseil-cpp/absl/meta/type_traits.h +759 -0
  1075. data/third_party/abseil-cpp/absl/numeric/int128.cc +404 -0
  1076. data/third_party/abseil-cpp/absl/numeric/int128.h +1091 -0
  1077. data/third_party/abseil-cpp/absl/numeric/int128_have_intrinsic.inc +302 -0
  1078. data/third_party/abseil-cpp/absl/numeric/int128_no_intrinsic.inc +308 -0
  1079. data/third_party/abseil-cpp/absl/strings/ascii.cc +200 -0
  1080. data/third_party/abseil-cpp/absl/strings/ascii.h +242 -0
  1081. data/third_party/abseil-cpp/absl/strings/charconv.cc +984 -0
  1082. data/third_party/abseil-cpp/absl/strings/charconv.h +119 -0
  1083. data/third_party/abseil-cpp/absl/strings/escaping.cc +949 -0
  1084. data/third_party/abseil-cpp/absl/strings/escaping.h +164 -0
  1085. data/third_party/abseil-cpp/absl/strings/internal/char_map.h +156 -0
  1086. data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.cc +359 -0
  1087. data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.h +423 -0
  1088. data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +504 -0
  1089. data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.h +99 -0
  1090. data/third_party/abseil-cpp/absl/strings/internal/escaping.cc +180 -0
  1091. data/third_party/abseil-cpp/absl/strings/internal/escaping.h +58 -0
  1092. data/third_party/abseil-cpp/absl/strings/internal/memutil.cc +112 -0
  1093. data/third_party/abseil-cpp/absl/strings/internal/memutil.h +148 -0
  1094. data/third_party/abseil-cpp/absl/strings/internal/ostringstream.cc +36 -0
  1095. data/third_party/abseil-cpp/absl/strings/internal/ostringstream.h +89 -0
  1096. data/third_party/abseil-cpp/absl/strings/internal/resize_uninitialized.h +73 -0
  1097. data/third_party/abseil-cpp/absl/strings/internal/stl_type_traits.h +248 -0
  1098. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +388 -0
  1099. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +432 -0
  1100. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +245 -0
  1101. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +209 -0
  1102. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +326 -0
  1103. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +51 -0
  1104. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +415 -0
  1105. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +493 -0
  1106. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.h +23 -0
  1107. data/third_party/abseil-cpp/absl/strings/internal/str_format/output.cc +72 -0
  1108. data/third_party/abseil-cpp/absl/strings/internal/str_format/output.h +104 -0
  1109. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +334 -0
  1110. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +333 -0
  1111. data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +314 -0
  1112. data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +455 -0
  1113. data/third_party/abseil-cpp/absl/strings/internal/utf8.cc +53 -0
  1114. data/third_party/abseil-cpp/absl/strings/internal/utf8.h +50 -0
  1115. data/third_party/abseil-cpp/absl/strings/match.cc +40 -0
  1116. data/third_party/abseil-cpp/absl/strings/match.h +90 -0
  1117. data/third_party/abseil-cpp/absl/strings/numbers.cc +965 -0
  1118. data/third_party/abseil-cpp/absl/strings/numbers.h +266 -0
  1119. data/third_party/abseil-cpp/absl/strings/str_cat.cc +246 -0
  1120. data/third_party/abseil-cpp/absl/strings/str_cat.h +408 -0
  1121. data/third_party/abseil-cpp/absl/strings/str_format.h +537 -0
  1122. data/third_party/abseil-cpp/absl/strings/str_join.h +293 -0
  1123. data/third_party/abseil-cpp/absl/strings/str_replace.cc +82 -0
  1124. data/third_party/abseil-cpp/absl/strings/str_replace.h +219 -0
  1125. data/third_party/abseil-cpp/absl/strings/str_split.cc +139 -0
  1126. data/third_party/abseil-cpp/absl/strings/str_split.h +513 -0
  1127. data/third_party/abseil-cpp/absl/strings/string_view.cc +235 -0
  1128. data/third_party/abseil-cpp/absl/strings/string_view.h +622 -0
  1129. data/third_party/abseil-cpp/absl/strings/strip.h +91 -0
  1130. data/third_party/abseil-cpp/absl/strings/substitute.cc +171 -0
  1131. data/third_party/abseil-cpp/absl/strings/substitute.h +693 -0
  1132. data/third_party/abseil-cpp/absl/time/civil_time.cc +175 -0
  1133. data/third_party/abseil-cpp/absl/time/civil_time.h +538 -0
  1134. data/third_party/abseil-cpp/absl/time/clock.cc +569 -0
  1135. data/third_party/abseil-cpp/absl/time/clock.h +74 -0
  1136. data/third_party/abseil-cpp/absl/time/duration.cc +922 -0
  1137. data/third_party/abseil-cpp/absl/time/format.cc +153 -0
  1138. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time.h +332 -0
  1139. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +622 -0
  1140. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +384 -0
  1141. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/zone_info_source.h +102 -0
  1142. data/third_party/abseil-cpp/absl/time/internal/cctz/src/civil_time_detail.cc +94 -0
  1143. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.cc +140 -0
  1144. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.h +52 -0
  1145. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +922 -0
  1146. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.cc +45 -0
  1147. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.h +76 -0
  1148. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.cc +121 -0
  1149. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.h +93 -0
  1150. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +958 -0
  1151. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.h +138 -0
  1152. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +308 -0
  1153. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.h +55 -0
  1154. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +187 -0
  1155. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.cc +159 -0
  1156. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.h +132 -0
  1157. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +122 -0
  1158. data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +115 -0
  1159. data/third_party/abseil-cpp/absl/time/internal/get_current_time_chrono.inc +31 -0
  1160. data/third_party/abseil-cpp/absl/time/internal/get_current_time_posix.inc +24 -0
  1161. data/third_party/abseil-cpp/absl/time/time.cc +499 -0
  1162. data/third_party/abseil-cpp/absl/time/time.h +1584 -0
  1163. data/third_party/abseil-cpp/absl/types/bad_optional_access.cc +48 -0
  1164. data/third_party/abseil-cpp/absl/types/bad_optional_access.h +78 -0
  1165. data/third_party/abseil-cpp/absl/types/internal/optional.h +396 -0
  1166. data/third_party/abseil-cpp/absl/types/internal/span.h +128 -0
  1167. data/third_party/abseil-cpp/absl/types/optional.h +776 -0
  1168. data/third_party/abseil-cpp/absl/types/span.h +713 -0
  1169. data/third_party/abseil-cpp/absl/utility/utility.h +350 -0
  1170. data/third_party/address_sorting/address_sorting.c +375 -0
  1171. data/third_party/address_sorting/address_sorting_internal.h +70 -0
  1172. data/third_party/address_sorting/address_sorting_posix.c +97 -0
  1173. data/third_party/address_sorting/address_sorting_windows.c +95 -0
  1174. data/third_party/address_sorting/include/address_sorting/address_sorting.h +113 -0
  1175. data/third_party/boringssl-with-bazel/err_data.c +1439 -0
  1176. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c +271 -0
  1177. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +123 -0
  1178. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_d2i_fp.c +93 -0
  1179. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_dup.c +87 -0
  1180. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_enum.c +195 -0
  1181. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_gentm.c +261 -0
  1182. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_i2d_fp.c +88 -0
  1183. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_int.c +420 -0
  1184. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_mbstr.c +305 -0
  1185. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +286 -0
  1186. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_octet.c +77 -0
  1187. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_print.c +93 -0
  1188. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c +313 -0
  1189. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +212 -0
  1190. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +151 -0
  1191. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utctm.c +303 -0
  1192. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utf8.c +236 -0
  1193. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +446 -0
  1194. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_locl.h +104 -0
  1195. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_par.c +80 -0
  1196. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn_pack.c +105 -0
  1197. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_enum.c +93 -0
  1198. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_int.c +97 -0
  1199. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_string.c +91 -0
  1200. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +1244 -0
  1201. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +664 -0
  1202. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c +244 -0
  1203. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_new.c +387 -0
  1204. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_typ.c +131 -0
  1205. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_utl.c +280 -0
  1206. data/third_party/boringssl-with-bazel/src/crypto/asn1/time_support.c +206 -0
  1207. data/third_party/boringssl-with-bazel/src/crypto/base64/base64.c +466 -0
  1208. data/third_party/boringssl-with-bazel/src/crypto/bio/bio.c +700 -0
  1209. data/third_party/boringssl-with-bazel/src/crypto/bio/bio_mem.c +330 -0
  1210. data/third_party/boringssl-with-bazel/src/crypto/bio/connect.c +545 -0
  1211. data/third_party/boringssl-with-bazel/src/crypto/bio/fd.c +279 -0
  1212. data/third_party/boringssl-with-bazel/src/crypto/bio/file.c +317 -0
  1213. data/third_party/boringssl-with-bazel/src/crypto/bio/hexdump.c +192 -0
  1214. data/third_party/boringssl-with-bazel/src/crypto/bio/internal.h +111 -0
  1215. data/third_party/boringssl-with-bazel/src/crypto/bio/pair.c +488 -0
  1216. data/third_party/boringssl-with-bazel/src/crypto/bio/printf.c +115 -0
  1217. data/third_party/boringssl-with-bazel/src/crypto/bio/socket.c +206 -0
  1218. data/third_party/boringssl-with-bazel/src/crypto/bio/socket_helper.c +118 -0
  1219. data/third_party/boringssl-with-bazel/src/crypto/bn_extra/bn_asn1.c +64 -0
  1220. data/third_party/boringssl-with-bazel/src/crypto/bn_extra/convert.c +470 -0
  1221. data/third_party/boringssl-with-bazel/src/crypto/buf/buf.c +172 -0
  1222. data/third_party/boringssl-with-bazel/src/crypto/bytestring/asn1_compat.c +52 -0
  1223. data/third_party/boringssl-with-bazel/src/crypto/bytestring/ber.c +265 -0
  1224. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbb.c +719 -0
  1225. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbs.c +688 -0
  1226. data/third_party/boringssl-with-bazel/src/crypto/bytestring/internal.h +96 -0
  1227. data/third_party/boringssl-with-bazel/src/crypto/bytestring/unicode.c +155 -0
  1228. data/third_party/boringssl-with-bazel/src/crypto/chacha/chacha.c +184 -0
  1229. data/third_party/boringssl-with-bazel/src/crypto/chacha/internal.h +45 -0
  1230. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/cipher_extra.c +143 -0
  1231. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/derive_key.c +152 -0
  1232. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_aesccm.c +447 -0
  1233. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_aesctrhmac.c +283 -0
  1234. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_aesgcmsiv.c +891 -0
  1235. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_chacha20poly1305.c +418 -0
  1236. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_null.c +85 -0
  1237. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_rc2.c +462 -0
  1238. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_rc4.c +87 -0
  1239. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_tls.c +688 -0
  1240. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h +128 -0
  1241. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +491 -0
  1242. data/third_party/boringssl-with-bazel/src/crypto/cmac/cmac.c +278 -0
  1243. data/third_party/boringssl-with-bazel/src/crypto/conf/conf.c +810 -0
  1244. data/third_party/boringssl-with-bazel/src/crypto/conf/conf_def.h +127 -0
  1245. data/third_party/boringssl-with-bazel/src/crypto/conf/internal.h +31 -0
  1246. data/third_party/boringssl-with-bazel/src/crypto/cpu-aarch64-fuchsia.c +55 -0
  1247. data/third_party/boringssl-with-bazel/src/crypto/cpu-aarch64-linux.c +62 -0
  1248. data/third_party/boringssl-with-bazel/src/crypto/cpu-arm-linux.c +220 -0
  1249. data/third_party/boringssl-with-bazel/src/crypto/cpu-arm-linux.h +201 -0
  1250. data/third_party/boringssl-with-bazel/src/crypto/cpu-arm.c +38 -0
  1251. data/third_party/boringssl-with-bazel/src/crypto/cpu-intel.c +291 -0
  1252. data/third_party/boringssl-with-bazel/src/crypto/cpu-ppc64le.c +38 -0
  1253. data/third_party/boringssl-with-bazel/src/crypto/crypto.c +226 -0
  1254. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519.c +2159 -0
  1255. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519_tables.h +7872 -0
  1256. data/third_party/boringssl-with-bazel/src/crypto/curve25519/internal.h +146 -0
  1257. data/third_party/boringssl-with-bazel/src/crypto/curve25519/spake25519.c +539 -0
  1258. data/third_party/boringssl-with-bazel/src/crypto/dh/check.c +217 -0
  1259. data/third_party/boringssl-with-bazel/src/crypto/dh/dh.c +533 -0
  1260. data/third_party/boringssl-with-bazel/src/crypto/dh/dh_asn1.c +160 -0
  1261. data/third_party/boringssl-with-bazel/src/crypto/dh/params.c +93 -0
  1262. data/third_party/boringssl-with-bazel/src/crypto/digest_extra/digest_extra.c +240 -0
  1263. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +980 -0
  1264. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa_asn1.c +339 -0
  1265. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/ec_asn1.c +574 -0
  1266. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/ec_derive.c +95 -0
  1267. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c +425 -0
  1268. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h +78 -0
  1269. data/third_party/boringssl-with-bazel/src/crypto/ecdh_extra/ecdh_extra.c +124 -0
  1270. data/third_party/boringssl-with-bazel/src/crypto/ecdsa_extra/ecdsa_asn1.c +267 -0
  1271. data/third_party/boringssl-with-bazel/src/crypto/engine/engine.c +99 -0
  1272. data/third_party/boringssl-with-bazel/src/crypto/err/err.c +850 -0
  1273. data/third_party/boringssl-with-bazel/src/crypto/err/internal.h +58 -0
  1274. data/third_party/boringssl-with-bazel/src/crypto/evp/digestsign.c +231 -0
  1275. data/third_party/boringssl-with-bazel/src/crypto/evp/evp.c +443 -0
  1276. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +388 -0
  1277. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_ctx.c +484 -0
  1278. data/third_party/boringssl-with-bazel/src/crypto/evp/internal.h +269 -0
  1279. data/third_party/boringssl-with-bazel/src/crypto/evp/p_dsa_asn1.c +273 -0
  1280. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ec.c +286 -0
  1281. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ec_asn1.c +255 -0
  1282. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ed25519.c +104 -0
  1283. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ed25519_asn1.c +221 -0
  1284. data/third_party/boringssl-with-bazel/src/crypto/evp/p_rsa.c +648 -0
  1285. data/third_party/boringssl-with-bazel/src/crypto/evp/p_rsa_asn1.c +194 -0
  1286. data/third_party/boringssl-with-bazel/src/crypto/evp/p_x25519.c +110 -0
  1287. data/third_party/boringssl-with-bazel/src/crypto/evp/p_x25519_asn1.c +248 -0
  1288. data/third_party/boringssl-with-bazel/src/crypto/evp/pbkdf.c +146 -0
  1289. data/third_party/boringssl-with-bazel/src/crypto/evp/print.c +489 -0
  1290. data/third_party/boringssl-with-bazel/src/crypto/evp/scrypt.c +213 -0
  1291. data/third_party/boringssl-with-bazel/src/crypto/evp/sign.c +151 -0
  1292. data/third_party/boringssl-with-bazel/src/crypto/ex_data.c +261 -0
  1293. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/aes.c +108 -0
  1294. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/aes_nohw.c +1282 -0
  1295. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/internal.h +238 -0
  1296. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/key_wrap.c +236 -0
  1297. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/mode_wrappers.c +106 -0
  1298. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +263 -0
  1299. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/add.c +316 -0
  1300. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/asm/x86_64-gcc.c +541 -0
  1301. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/bn.c +445 -0
  1302. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/bytes.c +230 -0
  1303. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/cmp.c +200 -0
  1304. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/ctx.c +236 -0
  1305. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div.c +886 -0
  1306. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div_extra.c +87 -0
  1307. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/exponentiation.c +1288 -0
  1308. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd.c +378 -0
  1309. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd_extra.c +325 -0
  1310. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/generic.c +711 -0
  1311. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +694 -0
  1312. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/jacobi.c +146 -0
  1313. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery.c +502 -0
  1314. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery_inv.c +186 -0
  1315. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/mul.c +749 -0
  1316. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/prime.c +1068 -0
  1317. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/random.c +341 -0
  1318. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/rsaz_exp.c +226 -0
  1319. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/rsaz_exp.h +104 -0
  1320. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/shift.c +364 -0
  1321. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/sqrt.c +502 -0
  1322. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/aead.c +284 -0
  1323. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +620 -0
  1324. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +1302 -0
  1325. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_des.c +237 -0
  1326. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/internal.h +128 -0
  1327. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/delocate.h +89 -0
  1328. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/des/des.c +785 -0
  1329. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/des/internal.h +240 -0
  1330. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digest.c +271 -0
  1331. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digests.c +296 -0
  1332. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/internal.h +112 -0
  1333. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/md32_common.h +268 -0
  1334. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +1252 -0
  1335. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +465 -0
  1336. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_montgomery.c +524 -0
  1337. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/felem.c +100 -0
  1338. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +775 -0
  1339. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/oct.c +328 -0
  1340. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c +1178 -0
  1341. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64-table.h +9497 -0
  1342. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64.c +632 -0
  1343. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64.h +153 -0
  1344. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.c +736 -0
  1345. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256_table.h +297 -0
  1346. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/scalar.c +175 -0
  1347. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple.c +357 -0
  1348. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c +270 -0
  1349. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/util.c +255 -0
  1350. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/wnaf.c +270 -0
  1351. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdh/ecdh.c +122 -0
  1352. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +328 -0
  1353. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/fips_shared_support.c +32 -0
  1354. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/hmac/hmac.c +228 -0
  1355. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/is_fips.c +29 -0
  1356. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md4/md4.c +256 -0
  1357. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/internal.h +37 -0
  1358. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/md5.c +301 -0
  1359. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cbc.c +167 -0
  1360. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cfb.c +202 -0
  1361. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ctr.c +200 -0
  1362. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm.c +729 -0
  1363. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm_nohw.c +304 -0
  1364. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/internal.h +441 -0
  1365. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ofb.c +96 -0
  1366. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/polyval.c +91 -0
  1367. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/ctrdrbg.c +202 -0
  1368. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.c +137 -0
  1369. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.h +49 -0
  1370. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/getrandom_fillin.h +64 -0
  1371. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +163 -0
  1372. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +378 -0
  1373. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +391 -0
  1374. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/blinding.c +243 -0
  1375. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h +127 -0
  1376. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/padding.c +695 -0
  1377. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +898 -0
  1378. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +1358 -0
  1379. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +654 -0
  1380. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/internal.h +53 -0
  1381. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1-altivec.c +361 -0
  1382. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +371 -0
  1383. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +343 -0
  1384. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +544 -0
  1385. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/tls/internal.h +39 -0
  1386. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/tls/kdf.c +165 -0
  1387. data/third_party/boringssl-with-bazel/src/crypto/hkdf/hkdf.c +112 -0
  1388. data/third_party/boringssl-with-bazel/src/crypto/hrss/hrss.c +2100 -0
  1389. data/third_party/boringssl-with-bazel/src/crypto/hrss/internal.h +61 -0
  1390. data/third_party/boringssl-with-bazel/src/crypto/internal.h +834 -0
  1391. data/third_party/boringssl-with-bazel/src/crypto/lhash/lhash.c +348 -0
  1392. data/third_party/boringssl-with-bazel/src/crypto/mem.c +359 -0
  1393. data/third_party/boringssl-with-bazel/src/crypto/obj/obj.c +549 -0
  1394. data/third_party/boringssl-with-bazel/src/crypto/obj/obj_dat.h +11585 -0
  1395. data/third_party/boringssl-with-bazel/src/crypto/obj/obj_xref.c +122 -0
  1396. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_all.c +261 -0
  1397. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_info.c +360 -0
  1398. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_lib.c +777 -0
  1399. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_oth.c +87 -0
  1400. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pk8.c +257 -0
  1401. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pkey.c +218 -0
  1402. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_x509.c +65 -0
  1403. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_xaux.c +65 -0
  1404. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/internal.h +49 -0
  1405. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7.c +159 -0
  1406. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c +385 -0
  1407. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/internal.h +131 -0
  1408. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/p5_pbev2.c +316 -0
  1409. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8.c +530 -0
  1410. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +1305 -0
  1411. data/third_party/boringssl-with-bazel/src/crypto/poly1305/internal.h +41 -0
  1412. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305.c +318 -0
  1413. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_arm.c +305 -0
  1414. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_vec.c +856 -0
  1415. data/third_party/boringssl-with-bazel/src/crypto/pool/internal.h +45 -0
  1416. data/third_party/boringssl-with-bazel/src/crypto/pool/pool.c +220 -0
  1417. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/deterministic.c +52 -0
  1418. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/forkunsafe.c +46 -0
  1419. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/fuchsia.c +30 -0
  1420. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/rand_extra.c +70 -0
  1421. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/windows.c +69 -0
  1422. data/third_party/boringssl-with-bazel/src/crypto/rc4/rc4.c +98 -0
  1423. data/third_party/boringssl-with-bazel/src/crypto/refcount_c11.c +67 -0
  1424. data/third_party/boringssl-with-bazel/src/crypto/refcount_lock.c +53 -0
  1425. data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/rsa_asn1.c +325 -0
  1426. data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/rsa_print.c +22 -0
  1427. data/third_party/boringssl-with-bazel/src/crypto/siphash/siphash.c +82 -0
  1428. data/third_party/boringssl-with-bazel/src/crypto/stack/stack.c +431 -0
  1429. data/third_party/boringssl-with-bazel/src/crypto/thread.c +110 -0
  1430. data/third_party/boringssl-with-bazel/src/crypto/thread_none.c +59 -0
  1431. data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +210 -0
  1432. data/third_party/boringssl-with-bazel/src/crypto/thread_win.c +260 -0
  1433. data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +278 -0
  1434. data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +1474 -0
  1435. data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +720 -0
  1436. data/third_party/boringssl-with-bazel/src/crypto/x509/a_digest.c +96 -0
  1437. data/third_party/boringssl-with-bazel/src/crypto/x509/a_sign.c +128 -0
  1438. data/third_party/boringssl-with-bazel/src/crypto/x509/a_strex.c +653 -0
  1439. data/third_party/boringssl-with-bazel/src/crypto/x509/a_verify.c +114 -0
  1440. data/third_party/boringssl-with-bazel/src/crypto/x509/algorithm.c +153 -0
  1441. data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +842 -0
  1442. data/third_party/boringssl-with-bazel/src/crypto/x509/by_dir.c +458 -0
  1443. data/third_party/boringssl-with-bazel/src/crypto/x509/by_file.c +275 -0
  1444. data/third_party/boringssl-with-bazel/src/crypto/x509/charmap.h +15 -0
  1445. data/third_party/boringssl-with-bazel/src/crypto/x509/i2d_pr.c +83 -0
  1446. data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +66 -0
  1447. data/third_party/boringssl-with-bazel/src/crypto/x509/rsa_pss.c +385 -0
  1448. data/third_party/boringssl-with-bazel/src/crypto/x509/t_crl.c +125 -0
  1449. data/third_party/boringssl-with-bazel/src/crypto/x509/t_req.c +244 -0
  1450. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c +544 -0
  1451. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509a.c +111 -0
  1452. data/third_party/boringssl-with-bazel/src/crypto/x509/vpm_int.h +71 -0
  1453. data/third_party/boringssl-with-bazel/src/crypto/x509/x509.c +157 -0
  1454. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c +381 -0
  1455. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +476 -0
  1456. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_d2.c +106 -0
  1457. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_def.c +103 -0
  1458. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_ext.c +206 -0
  1459. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_lu.c +834 -0
  1460. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_obj.c +198 -0
  1461. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_r2x.c +116 -0
  1462. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +341 -0
  1463. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +185 -0
  1464. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +326 -0
  1465. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_txt.c +204 -0
  1466. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_v3.c +278 -0
  1467. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +2487 -0
  1468. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vpm.c +671 -0
  1469. data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +210 -0
  1470. data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +389 -0
  1471. data/third_party/boringssl-with-bazel/src/crypto/x509/x509rset.c +81 -0
  1472. data/third_party/boringssl-with-bazel/src/crypto/x509/x509spki.c +137 -0
  1473. data/third_party/boringssl-with-bazel/src/crypto/x509/x_algor.c +151 -0
  1474. data/third_party/boringssl-with-bazel/src/crypto/x509/x_all.c +399 -0
  1475. data/third_party/boringssl-with-bazel/src/crypto/x509/x_attrib.c +111 -0
  1476. data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +541 -0
  1477. data/third_party/boringssl-with-bazel/src/crypto/x509/x_exten.c +75 -0
  1478. data/third_party/boringssl-with-bazel/src/crypto/x509/x_info.c +98 -0
  1479. data/third_party/boringssl-with-bazel/src/crypto/x509/x_name.c +554 -0
  1480. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pkey.c +106 -0
  1481. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +368 -0
  1482. data/third_party/boringssl-with-bazel/src/crypto/x509/x_req.c +109 -0
  1483. data/third_party/boringssl-with-bazel/src/crypto/x509/x_sig.c +69 -0
  1484. data/third_party/boringssl-with-bazel/src/crypto/x509/x_spki.c +80 -0
  1485. data/third_party/boringssl-with-bazel/src/crypto/x509/x_val.c +69 -0
  1486. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +334 -0
  1487. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509a.c +198 -0
  1488. data/third_party/boringssl-with-bazel/src/crypto/x509v3/ext_dat.h +141 -0
  1489. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +56 -0
  1490. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_cache.c +286 -0
  1491. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_data.c +130 -0
  1492. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_int.h +217 -0
  1493. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_lib.c +155 -0
  1494. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_map.c +130 -0
  1495. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_node.c +189 -0
  1496. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_tree.c +842 -0
  1497. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akey.c +207 -0
  1498. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akeya.c +72 -0
  1499. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +629 -0
  1500. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bcons.c +133 -0
  1501. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bitst.c +141 -0
  1502. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_conf.c +463 -0
  1503. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +503 -0
  1504. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_crld.c +561 -0
  1505. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_enum.c +100 -0
  1506. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_extku.c +148 -0
  1507. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_genn.c +246 -0
  1508. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ia5.c +122 -0
  1509. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_info.c +218 -0
  1510. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_int.c +91 -0
  1511. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +371 -0
  1512. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ncons.c +501 -0
  1513. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ocsp.c +68 -0
  1514. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pci.c +288 -0
  1515. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pcia.c +57 -0
  1516. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pcons.c +139 -0
  1517. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pku.c +110 -0
  1518. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pmaps.c +154 -0
  1519. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +229 -0
  1520. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +843 -0
  1521. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +155 -0
  1522. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_sxnet.c +274 -0
  1523. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +1395 -0
  1524. data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +459 -0
  1525. data/third_party/boringssl-with-bazel/src/include/openssl/aes.h +195 -0
  1526. data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +121 -0
  1527. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +911 -0
  1528. data/third_party/boringssl-with-bazel/src/include/openssl/asn1_mac.h +18 -0
  1529. data/third_party/boringssl-with-bazel/src/include/openssl/asn1t.h +892 -0
  1530. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +575 -0
  1531. data/third_party/boringssl-with-bazel/src/include/openssl/base64.h +190 -0
  1532. data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +933 -0
  1533. data/third_party/boringssl-with-bazel/src/include/openssl/blowfish.h +93 -0
  1534. data/third_party/boringssl-with-bazel/src/include/openssl/bn.h +1057 -0
  1535. data/third_party/boringssl-with-bazel/src/include/openssl/buf.h +137 -0
  1536. data/third_party/boringssl-with-bazel/src/include/openssl/buffer.h +18 -0
  1537. data/third_party/boringssl-with-bazel/src/include/openssl/bytestring.h +561 -0
  1538. data/third_party/boringssl-with-bazel/src/include/openssl/cast.h +96 -0
  1539. data/third_party/boringssl-with-bazel/src/include/openssl/chacha.h +41 -0
  1540. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +638 -0
  1541. data/third_party/boringssl-with-bazel/src/include/openssl/cmac.h +91 -0
  1542. data/third_party/boringssl-with-bazel/src/include/openssl/conf.h +180 -0
  1543. data/third_party/boringssl-with-bazel/src/include/openssl/cpu.h +212 -0
  1544. data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +149 -0
  1545. data/third_party/boringssl-with-bazel/src/include/openssl/curve25519.h +201 -0
  1546. data/third_party/boringssl-with-bazel/src/include/openssl/des.h +177 -0
  1547. data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +319 -0
  1548. data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +331 -0
  1549. data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +457 -0
  1550. data/third_party/boringssl-with-bazel/src/include/openssl/dtls1.h +16 -0
  1551. data/third_party/boringssl-with-bazel/src/include/openssl/e_os2.h +18 -0
  1552. data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +424 -0
  1553. data/third_party/boringssl-with-bazel/src/include/openssl/ec_key.h +372 -0
  1554. data/third_party/boringssl-with-bazel/src/include/openssl/ecdh.h +118 -0
  1555. data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +205 -0
  1556. data/third_party/boringssl-with-bazel/src/include/openssl/engine.h +109 -0
  1557. data/third_party/boringssl-with-bazel/src/include/openssl/err.h +465 -0
  1558. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +1050 -0
  1559. data/third_party/boringssl-with-bazel/src/include/openssl/ex_data.h +203 -0
  1560. data/third_party/boringssl-with-bazel/src/include/openssl/hkdf.h +64 -0
  1561. data/third_party/boringssl-with-bazel/src/include/openssl/hmac.h +186 -0
  1562. data/third_party/boringssl-with-bazel/src/include/openssl/hrss.h +100 -0
  1563. data/third_party/boringssl-with-bazel/src/include/openssl/is_boringssl.h +16 -0
  1564. data/third_party/boringssl-with-bazel/src/include/openssl/lhash.h +282 -0
  1565. data/third_party/boringssl-with-bazel/src/include/openssl/md4.h +108 -0
  1566. data/third_party/boringssl-with-bazel/src/include/openssl/md5.h +109 -0
  1567. data/third_party/boringssl-with-bazel/src/include/openssl/mem.h +175 -0
  1568. data/third_party/boringssl-with-bazel/src/include/openssl/nid.h +4259 -0
  1569. data/third_party/boringssl-with-bazel/src/include/openssl/obj.h +236 -0
  1570. data/third_party/boringssl-with-bazel/src/include/openssl/obj_mac.h +18 -0
  1571. data/third_party/boringssl-with-bazel/src/include/openssl/objects.h +18 -0
  1572. data/third_party/boringssl-with-bazel/src/include/openssl/opensslconf.h +67 -0
  1573. data/third_party/boringssl-with-bazel/src/include/openssl/opensslv.h +18 -0
  1574. data/third_party/boringssl-with-bazel/src/include/openssl/ossl_typ.h +18 -0
  1575. data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +435 -0
  1576. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs12.h +18 -0
  1577. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +215 -0
  1578. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +269 -0
  1579. data/third_party/boringssl-with-bazel/src/include/openssl/poly1305.h +49 -0
  1580. data/third_party/boringssl-with-bazel/src/include/openssl/pool.h +102 -0
  1581. data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +111 -0
  1582. data/third_party/boringssl-with-bazel/src/include/openssl/rc4.h +96 -0
  1583. data/third_party/boringssl-with-bazel/src/include/openssl/ripemd.h +108 -0
  1584. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +818 -0
  1585. data/third_party/boringssl-with-bazel/src/include/openssl/safestack.h +16 -0
  1586. data/third_party/boringssl-with-bazel/src/include/openssl/sha.h +294 -0
  1587. data/third_party/boringssl-with-bazel/src/include/openssl/siphash.h +37 -0
  1588. data/third_party/boringssl-with-bazel/src/include/openssl/span.h +199 -0
  1589. data/third_party/boringssl-with-bazel/src/include/openssl/srtp.h +18 -0
  1590. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +5198 -0
  1591. data/third_party/boringssl-with-bazel/src/include/openssl/ssl3.h +333 -0
  1592. data/third_party/boringssl-with-bazel/src/include/openssl/stack.h +542 -0
  1593. data/third_party/boringssl-with-bazel/src/include/openssl/thread.h +191 -0
  1594. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +632 -0
  1595. data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +291 -0
  1596. data/third_party/boringssl-with-bazel/src/include/openssl/type_check.h +90 -0
  1597. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +1207 -0
  1598. data/third_party/boringssl-with-bazel/src/include/openssl/x509_vfy.h +681 -0
  1599. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +831 -0
  1600. data/third_party/boringssl-with-bazel/src/ssl/bio_ssl.cc +179 -0
  1601. data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +837 -0
  1602. data/third_party/boringssl-with-bazel/src/ssl/d1_lib.cc +268 -0
  1603. data/third_party/boringssl-with-bazel/src/ssl/d1_pkt.cc +273 -0
  1604. data/third_party/boringssl-with-bazel/src/ssl/d1_srtp.cc +232 -0
  1605. data/third_party/boringssl-with-bazel/src/ssl/dtls_method.cc +200 -0
  1606. data/third_party/boringssl-with-bazel/src/ssl/dtls_record.cc +353 -0
  1607. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +675 -0
  1608. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +703 -0
  1609. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +1890 -0
  1610. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +1805 -0
  1611. data/third_party/boringssl-with-bazel/src/ssl/internal.h +3572 -0
  1612. data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +724 -0
  1613. data/third_party/boringssl-with-bazel/src/ssl/s3_lib.cc +221 -0
  1614. data/third_party/boringssl-with-bazel/src/ssl/s3_pkt.cc +458 -0
  1615. data/third_party/boringssl-with-bazel/src/ssl/ssl_aead_ctx.cc +432 -0
  1616. data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +856 -0
  1617. data/third_party/boringssl-with-bazel/src/ssl/ssl_buffer.cc +306 -0
  1618. data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +1019 -0
  1619. data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +1718 -0
  1620. data/third_party/boringssl-with-bazel/src/ssl/ssl_file.cc +585 -0
  1621. data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +397 -0
  1622. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +3015 -0
  1623. data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +835 -0
  1624. data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +1333 -0
  1625. data/third_party/boringssl-with-bazel/src/ssl/ssl_stat.cc +230 -0
  1626. data/third_party/boringssl-with-bazel/src/ssl/ssl_transcript.cc +277 -0
  1627. data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +394 -0
  1628. data/third_party/boringssl-with-bazel/src/ssl/ssl_x509.cc +1358 -0
  1629. data/third_party/boringssl-with-bazel/src/ssl/t1_enc.cc +365 -0
  1630. data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +3870 -0
  1631. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +689 -0
  1632. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +1017 -0
  1633. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +513 -0
  1634. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +1096 -0
  1635. data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +317 -0
  1636. data/third_party/boringssl-with-bazel/src/ssl/tls_record.cc +703 -0
  1637. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_32.h +981 -0
  1638. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_64.h +619 -0
  1639. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_32.h +3147 -0
  1640. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_64.h +1226 -0
  1641. data/third_party/cares/ares_build.h +223 -0
  1642. data/third_party/cares/cares/ares.h +670 -0
  1643. data/third_party/cares/cares/ares__close_sockets.c +61 -0
  1644. data/third_party/cares/cares/ares__get_hostent.c +261 -0
  1645. data/third_party/cares/cares/ares__read_line.c +73 -0
  1646. data/third_party/cares/cares/ares__timeval.c +111 -0
  1647. data/third_party/cares/cares/ares_cancel.c +63 -0
  1648. data/third_party/cares/cares/ares_create_query.c +206 -0
  1649. data/third_party/cares/cares/ares_data.c +222 -0
  1650. data/third_party/cares/cares/ares_data.h +72 -0
  1651. data/third_party/cares/cares/ares_destroy.c +113 -0
  1652. data/third_party/cares/cares/ares_dns.h +103 -0
  1653. data/third_party/cares/cares/ares_expand_name.c +209 -0
  1654. data/third_party/cares/cares/ares_expand_string.c +70 -0
  1655. data/third_party/cares/cares/ares_fds.c +59 -0
  1656. data/third_party/cares/cares/ares_free_hostent.c +41 -0
  1657. data/third_party/cares/cares/ares_free_string.c +25 -0
  1658. data/third_party/cares/cares/ares_getenv.c +30 -0
  1659. data/third_party/cares/cares/ares_getenv.h +26 -0
  1660. data/third_party/cares/cares/ares_gethostbyaddr.c +294 -0
  1661. data/third_party/cares/cares/ares_gethostbyname.c +529 -0
  1662. data/third_party/cares/cares/ares_getnameinfo.c +453 -0
  1663. data/third_party/cares/cares/ares_getopt.c +122 -0
  1664. data/third_party/cares/cares/ares_getopt.h +53 -0
  1665. data/third_party/cares/cares/ares_getsock.c +66 -0
  1666. data/third_party/cares/cares/ares_inet_net_pton.h +25 -0
  1667. data/third_party/cares/cares/ares_init.c +2615 -0
  1668. data/third_party/cares/cares/ares_iphlpapi.h +221 -0
  1669. data/third_party/cares/cares/ares_ipv6.h +78 -0
  1670. data/third_party/cares/cares/ares_library_init.c +195 -0
  1671. data/third_party/cares/cares/ares_library_init.h +43 -0
  1672. data/third_party/cares/cares/ares_llist.c +63 -0
  1673. data/third_party/cares/cares/ares_llist.h +39 -0
  1674. data/third_party/cares/cares/ares_mkquery.c +24 -0
  1675. data/third_party/cares/cares/ares_nowarn.c +260 -0
  1676. data/third_party/cares/cares/ares_nowarn.h +61 -0
  1677. data/third_party/cares/cares/ares_options.c +406 -0
  1678. data/third_party/cares/cares/ares_parse_a_reply.c +264 -0
  1679. data/third_party/cares/cares/ares_parse_aaaa_reply.c +264 -0
  1680. data/third_party/cares/cares/ares_parse_mx_reply.c +170 -0
  1681. data/third_party/cares/cares/ares_parse_naptr_reply.c +194 -0
  1682. data/third_party/cares/cares/ares_parse_ns_reply.c +183 -0
  1683. data/third_party/cares/cares/ares_parse_ptr_reply.c +221 -0
  1684. data/third_party/cares/cares/ares_parse_soa_reply.c +133 -0
  1685. data/third_party/cares/cares/ares_parse_srv_reply.c +179 -0
  1686. data/third_party/cares/cares/ares_parse_txt_reply.c +220 -0
  1687. data/third_party/cares/cares/ares_platform.c +11042 -0
  1688. data/third_party/cares/cares/ares_platform.h +43 -0
  1689. data/third_party/cares/cares/ares_private.h +382 -0
  1690. data/third_party/cares/cares/ares_process.c +1473 -0
  1691. data/third_party/cares/cares/ares_query.c +186 -0
  1692. data/third_party/cares/cares/ares_rules.h +125 -0
  1693. data/third_party/cares/cares/ares_search.c +323 -0
  1694. data/third_party/cares/cares/ares_send.c +137 -0
  1695. data/third_party/cares/cares/ares_setup.h +217 -0
  1696. data/third_party/cares/cares/ares_strcasecmp.c +66 -0
  1697. data/third_party/cares/cares/ares_strcasecmp.h +30 -0
  1698. data/third_party/cares/cares/ares_strdup.c +49 -0
  1699. data/third_party/cares/cares/ares_strdup.h +24 -0
  1700. data/third_party/cares/cares/ares_strerror.c +56 -0
  1701. data/third_party/cares/cares/ares_strsplit.c +174 -0
  1702. data/third_party/cares/cares/ares_strsplit.h +43 -0
  1703. data/third_party/cares/cares/ares_timeout.c +88 -0
  1704. data/third_party/cares/cares/ares_version.c +11 -0
  1705. data/third_party/cares/cares/ares_version.h +24 -0
  1706. data/third_party/cares/cares/ares_writev.c +79 -0
  1707. data/third_party/cares/cares/bitncmp.c +59 -0
  1708. data/third_party/cares/cares/bitncmp.h +26 -0
  1709. data/third_party/cares/cares/config-win32.h +351 -0
  1710. data/third_party/cares/cares/inet_net_pton.c +450 -0
  1711. data/third_party/cares/cares/inet_ntop.c +207 -0
  1712. data/third_party/cares/cares/setup_once.h +554 -0
  1713. data/third_party/cares/cares/windows_port.c +22 -0
  1714. data/third_party/cares/config_darwin/ares_config.h +428 -0
  1715. data/third_party/cares/config_freebsd/ares_config.h +505 -0
  1716. data/third_party/cares/config_linux/ares_config.h +461 -0
  1717. data/third_party/cares/config_openbsd/ares_config.h +505 -0
  1718. data/third_party/upb/upb/decode.c +609 -0
  1719. data/third_party/upb/upb/decode.h +21 -0
  1720. data/third_party/upb/upb/encode.c +378 -0
  1721. data/third_party/upb/upb/encode.h +21 -0
  1722. data/third_party/upb/upb/generated_util.h +105 -0
  1723. data/third_party/upb/upb/msg.c +111 -0
  1724. data/third_party/upb/upb/msg.h +69 -0
  1725. data/third_party/upb/upb/port.c +26 -0
  1726. data/third_party/upb/upb/port_def.inc +150 -0
  1727. data/third_party/upb/upb/port_undef.inc +21 -0
  1728. data/third_party/upb/upb/table.c +913 -0
  1729. data/third_party/upb/upb/table.int.h +507 -0
  1730. data/third_party/upb/upb/upb.c +261 -0
  1731. data/third_party/upb/upb/upb.h +364 -0
  1732. data/third_party/zlib/adler32.c +186 -0
  1733. data/third_party/zlib/compress.c +86 -0
  1734. data/third_party/zlib/crc32.c +442 -0
  1735. data/third_party/zlib/crc32.h +441 -0
  1736. data/third_party/zlib/deflate.c +2163 -0
  1737. data/third_party/zlib/deflate.h +349 -0
  1738. data/third_party/zlib/gzclose.c +25 -0
  1739. data/third_party/zlib/gzguts.h +218 -0
  1740. data/third_party/zlib/gzlib.c +637 -0
  1741. data/third_party/zlib/gzread.c +654 -0
  1742. data/third_party/zlib/gzwrite.c +665 -0
  1743. data/third_party/zlib/infback.c +640 -0
  1744. data/third_party/zlib/inffast.c +323 -0
  1745. data/third_party/zlib/inffast.h +11 -0
  1746. data/third_party/zlib/inffixed.h +94 -0
  1747. data/third_party/zlib/inflate.c +1561 -0
  1748. data/third_party/zlib/inflate.h +125 -0
  1749. data/third_party/zlib/inftrees.c +304 -0
  1750. data/third_party/zlib/inftrees.h +62 -0
  1751. data/third_party/zlib/trees.c +1203 -0
  1752. data/third_party/zlib/trees.h +128 -0
  1753. data/third_party/zlib/uncompr.c +93 -0
  1754. data/third_party/zlib/zconf.h +534 -0
  1755. data/third_party/zlib/zlib.h +1912 -0
  1756. data/third_party/zlib/zutil.c +325 -0
  1757. data/third_party/zlib/zutil.h +271 -0
  1758. metadata +2029 -0
@@ -0,0 +1,88 @@
1
+ //
2
+ // Copyright 2019 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
+ #ifndef GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_XDS_XDS_BOOTSTRAP_H
18
+ #define GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_XDS_XDS_BOOTSTRAP_H
19
+
20
+ #include <grpc/support/port_platform.h>
21
+
22
+ #include <memory>
23
+ #include <string>
24
+ #include <vector>
25
+
26
+ #include "absl/container/inlined_vector.h"
27
+
28
+ #include <grpc/impl/codegen/slice.h>
29
+
30
+ #include "src/core/lib/gprpp/map.h"
31
+ #include "src/core/lib/gprpp/memory.h"
32
+ #include "src/core/lib/iomgr/error.h"
33
+ #include "src/core/lib/json/json.h"
34
+
35
+ namespace grpc_core {
36
+
37
+ class XdsClient;
38
+
39
+ class XdsBootstrap {
40
+ public:
41
+ struct Node {
42
+ std::string id;
43
+ std::string cluster;
44
+ std::string locality_region;
45
+ std::string locality_zone;
46
+ std::string locality_subzone;
47
+ Json metadata;
48
+ };
49
+
50
+ struct ChannelCreds {
51
+ std::string type;
52
+ Json config;
53
+ };
54
+
55
+ struct XdsServer {
56
+ std::string server_uri;
57
+ absl::InlinedVector<ChannelCreds, 1> channel_creds;
58
+ };
59
+
60
+ // If *error is not GRPC_ERROR_NONE after returning, then there was an
61
+ // error reading the file.
62
+ static std::unique_ptr<XdsBootstrap> ReadFromFile(XdsClient* client,
63
+ TraceFlag* tracer,
64
+ grpc_error** error);
65
+
66
+ // Do not instantiate directly -- use ReadFromFile() above instead.
67
+ XdsBootstrap(Json json, grpc_error** error);
68
+
69
+ // TODO(roth): We currently support only one server. Fix this when we
70
+ // add support for fallback for the xds channel.
71
+ const XdsServer& server() const { return servers_[0]; }
72
+ const Node* node() const { return node_.get(); }
73
+
74
+ private:
75
+ grpc_error* ParseXdsServerList(Json* json);
76
+ grpc_error* ParseXdsServer(Json* json, size_t idx);
77
+ grpc_error* ParseChannelCredsArray(Json* json, XdsServer* server);
78
+ grpc_error* ParseChannelCreds(Json* json, size_t idx, XdsServer* server);
79
+ grpc_error* ParseNode(Json* json);
80
+ grpc_error* ParseLocality(Json* json);
81
+
82
+ absl::InlinedVector<XdsServer, 1> servers_;
83
+ std::unique_ptr<Node> node_;
84
+ };
85
+
86
+ } // namespace grpc_core
87
+
88
+ #endif /* GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_XDS_XDS_BOOTSTRAP_H */
@@ -0,0 +1,46 @@
1
+ /*
2
+ *
3
+ * Copyright 2018 gRPC authors.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ *
17
+ */
18
+
19
+ #ifndef GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_XDS_XDS_CHANNEL_H
20
+ #define GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_XDS_XDS_CHANNEL_H
21
+
22
+ #include <grpc/support/port_platform.h>
23
+
24
+ #include <grpc/impl/codegen/grpc_types.h>
25
+
26
+ #include "src/core/ext/filters/client_channel/xds/xds_bootstrap.h"
27
+ #include "src/core/lib/iomgr/error.h"
28
+
29
+ namespace grpc_core {
30
+
31
+ /// Makes any necessary modifications to \a args for use in the xds
32
+ /// balancer channel.
33
+ ///
34
+ /// Takes ownership of \a args.
35
+ ///
36
+ /// Caller takes ownership of the returned args.
37
+ grpc_channel_args* ModifyXdsChannelArgs(grpc_channel_args* args);
38
+
39
+ grpc_channel* CreateXdsChannel(const XdsBootstrap& bootstrap,
40
+ const grpc_channel_args& args,
41
+ grpc_error** error);
42
+
43
+ } // namespace grpc_core
44
+
45
+ #endif /* GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_XDS_XDS_CHANNEL_H \
46
+ */
@@ -0,0 +1,26 @@
1
+ //
2
+ // Copyright 2019 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
+ #ifndef GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_XDS_XDS_CHANNEL_ARGS_H
18
+ #define GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_XDS_XDS_CHANNEL_ARGS_H
19
+
20
+ // Boolean channel arg indicating whether the target is an xds server.
21
+ #define GRPC_ARG_ADDRESS_IS_XDS_SERVER "grpc.address_is_xds_server"
22
+
23
+ // Pointer channel arg containing a ref to the XdsClient object.
24
+ #define GRPC_ARG_XDS_CLIENT "grpc.xds_client"
25
+
26
+ #endif /* GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_XDS_XDS_CHANNEL_ARGS_H */
@@ -0,0 +1,106 @@
1
+ /*
2
+ *
3
+ * Copyright 2018 gRPC authors.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ *
17
+ */
18
+
19
+ #include <grpc/support/port_platform.h>
20
+
21
+ #include "src/core/ext/filters/client_channel/xds/xds_channel.h"
22
+
23
+ #include <string.h>
24
+
25
+ #include "absl/container/inlined_vector.h"
26
+
27
+ #include <grpc/grpc_security.h>
28
+ #include <grpc/support/alloc.h>
29
+ #include <grpc/support/string_util.h>
30
+
31
+ #include "src/core/ext/filters/client_channel/client_channel.h"
32
+ #include "src/core/ext/filters/client_channel/server_address.h"
33
+ #include "src/core/lib/channel/channel_args.h"
34
+ #include "src/core/lib/gpr/string.h"
35
+ #include "src/core/lib/iomgr/sockaddr_utils.h"
36
+ #include "src/core/lib/security/credentials/credentials.h"
37
+ #include "src/core/lib/security/credentials/fake/fake_credentials.h"
38
+ #include "src/core/lib/security/transport/target_authority_table.h"
39
+ #include "src/core/lib/slice/slice_internal.h"
40
+
41
+ namespace grpc_core {
42
+
43
+ grpc_channel_args* ModifyXdsChannelArgs(grpc_channel_args* args) {
44
+ absl::InlinedVector<const char*, 1> args_to_remove;
45
+ absl::InlinedVector<grpc_arg, 2> args_to_add;
46
+ // Substitute the channel credentials with a version without call
47
+ // credentials: the load balancer is not necessarily trusted to handle
48
+ // bearer token credentials.
49
+ grpc_channel_credentials* channel_credentials =
50
+ grpc_channel_credentials_find_in_args(args);
51
+ RefCountedPtr<grpc_channel_credentials> creds_sans_call_creds;
52
+ if (channel_credentials != nullptr) {
53
+ creds_sans_call_creds =
54
+ channel_credentials->duplicate_without_call_credentials();
55
+ GPR_ASSERT(creds_sans_call_creds != nullptr);
56
+ args_to_remove.emplace_back(GRPC_ARG_CHANNEL_CREDENTIALS);
57
+ args_to_add.emplace_back(
58
+ grpc_channel_credentials_to_arg(creds_sans_call_creds.get()));
59
+ }
60
+ grpc_channel_args* result = grpc_channel_args_copy_and_add_and_remove(
61
+ args, args_to_remove.data(), args_to_remove.size(), args_to_add.data(),
62
+ args_to_add.size());
63
+ // Clean up.
64
+ grpc_channel_args_destroy(args);
65
+ return result;
66
+ }
67
+
68
+ grpc_channel* CreateXdsChannel(const XdsBootstrap& bootstrap,
69
+ const grpc_channel_args& args,
70
+ grpc_error** error) {
71
+ grpc_channel_credentials* creds = nullptr;
72
+ RefCountedPtr<grpc_channel_credentials> creds_to_unref;
73
+ if (!bootstrap.server().channel_creds.empty()) {
74
+ for (size_t i = 0; i < bootstrap.server().channel_creds.size(); ++i) {
75
+ if (bootstrap.server().channel_creds[i].type == "google_default") {
76
+ creds = grpc_google_default_credentials_create();
77
+ break;
78
+ } else if (bootstrap.server().channel_creds[i].type == "fake") {
79
+ creds = grpc_fake_transport_security_credentials_create();
80
+ break;
81
+ }
82
+ }
83
+ if (creds == nullptr) {
84
+ *error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
85
+ "no supported credential types found");
86
+ return nullptr;
87
+ }
88
+ creds_to_unref.reset(creds);
89
+ } else {
90
+ creds = grpc_channel_credentials_find_in_args(&args);
91
+ if (creds == nullptr) {
92
+ // Built with security but parent channel is insecure.
93
+ return grpc_insecure_channel_create(bootstrap.server().server_uri.c_str(),
94
+ &args, nullptr);
95
+ }
96
+ }
97
+ const char* arg_to_remove = GRPC_ARG_CHANNEL_CREDENTIALS;
98
+ grpc_channel_args* new_args =
99
+ grpc_channel_args_copy_and_remove(&args, &arg_to_remove, 1);
100
+ grpc_channel* channel = grpc_secure_channel_create(
101
+ creds, bootstrap.server().server_uri.c_str(), new_args, nullptr);
102
+ grpc_channel_args_destroy(new_args);
103
+ return channel;
104
+ }
105
+
106
+ } // namespace grpc_core
@@ -0,0 +1,2367 @@
1
+ /*
2
+ *
3
+ * Copyright 2018 gRPC authors.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ *
17
+ */
18
+
19
+ #include <grpc/support/port_platform.h>
20
+
21
+ #include <inttypes.h>
22
+ #include <limits.h>
23
+ #include <string.h>
24
+
25
+ #include "absl/container/inlined_vector.h"
26
+ #include "absl/strings/str_format.h"
27
+ #include "absl/strings/str_join.h"
28
+ #include "absl/strings/string_view.h"
29
+
30
+ #include <grpc/byte_buffer_reader.h>
31
+ #include <grpc/grpc.h>
32
+ #include <grpc/support/alloc.h>
33
+ #include <grpc/support/string_util.h>
34
+ #include <grpc/support/time.h>
35
+
36
+ #include "src/core/ext/filters/client_channel/client_channel.h"
37
+ #include "src/core/ext/filters/client_channel/parse_address.h"
38
+ #include "src/core/ext/filters/client_channel/server_address.h"
39
+ #include "src/core/ext/filters/client_channel/service_config.h"
40
+ #include "src/core/ext/filters/client_channel/xds/xds_api.h"
41
+ #include "src/core/ext/filters/client_channel/xds/xds_channel.h"
42
+ #include "src/core/ext/filters/client_channel/xds/xds_channel_args.h"
43
+ #include "src/core/ext/filters/client_channel/xds/xds_client.h"
44
+ #include "src/core/ext/filters/client_channel/xds/xds_client_stats.h"
45
+ #include "src/core/lib/backoff/backoff.h"
46
+ #include "src/core/lib/channel/channel_args.h"
47
+ #include "src/core/lib/channel/channel_stack.h"
48
+ #include "src/core/lib/gpr/string.h"
49
+ #include "src/core/lib/gprpp/map.h"
50
+ #include "src/core/lib/gprpp/memory.h"
51
+ #include "src/core/lib/gprpp/orphanable.h"
52
+ #include "src/core/lib/gprpp/ref_counted_ptr.h"
53
+ #include "src/core/lib/gprpp/sync.h"
54
+ #include "src/core/lib/iomgr/sockaddr.h"
55
+ #include "src/core/lib/iomgr/sockaddr_utils.h"
56
+ #include "src/core/lib/iomgr/timer.h"
57
+ #include "src/core/lib/iomgr/work_serializer.h"
58
+ #include "src/core/lib/slice/slice_hash_table.h"
59
+ #include "src/core/lib/slice/slice_internal.h"
60
+ #include "src/core/lib/slice/slice_string_helpers.h"
61
+ #include "src/core/lib/surface/call.h"
62
+ #include "src/core/lib/surface/channel.h"
63
+ #include "src/core/lib/surface/channel_init.h"
64
+ #include "src/core/lib/transport/static_metadata.h"
65
+
66
+ #define GRPC_XDS_INITIAL_CONNECT_BACKOFF_SECONDS 1
67
+ #define GRPC_XDS_RECONNECT_BACKOFF_MULTIPLIER 1.6
68
+ #define GRPC_XDS_RECONNECT_MAX_BACKOFF_SECONDS 120
69
+ #define GRPC_XDS_RECONNECT_JITTER 0.2
70
+ #define GRPC_XDS_MIN_CLIENT_LOAD_REPORTING_INTERVAL_MS 1000
71
+
72
+ namespace grpc_core {
73
+
74
+ TraceFlag grpc_xds_client_trace(false, "xds_client");
75
+
76
+ //
77
+ // Internal class declarations
78
+ //
79
+
80
+ // An xds call wrapper that can restart a call upon failure. Holds a ref to
81
+ // the xds channel. The template parameter is the kind of wrapped xds call.
82
+ template <typename T>
83
+ class XdsClient::ChannelState::RetryableCall
84
+ : public InternallyRefCounted<RetryableCall<T>> {
85
+ public:
86
+ explicit RetryableCall(RefCountedPtr<ChannelState> chand);
87
+
88
+ void Orphan() override;
89
+
90
+ void OnCallFinishedLocked();
91
+
92
+ T* calld() const { return calld_.get(); }
93
+ ChannelState* chand() const { return chand_.get(); }
94
+
95
+ bool IsCurrentCallOnChannel() const;
96
+
97
+ private:
98
+ void StartNewCallLocked();
99
+ void StartRetryTimerLocked();
100
+ static void OnRetryTimer(void* arg, grpc_error* error);
101
+ void OnRetryTimerLocked(grpc_error* error);
102
+
103
+ // The wrapped xds call that talks to the xds server. It's instantiated
104
+ // every time we start a new call. It's null during call retry backoff.
105
+ OrphanablePtr<T> calld_;
106
+ // The owning xds channel.
107
+ RefCountedPtr<ChannelState> chand_;
108
+
109
+ // Retry state.
110
+ BackOff backoff_;
111
+ grpc_timer retry_timer_;
112
+ grpc_closure on_retry_timer_;
113
+ bool retry_timer_callback_pending_ = false;
114
+
115
+ bool shutting_down_ = false;
116
+ };
117
+
118
+ // Contains an ADS call to the xds server.
119
+ class XdsClient::ChannelState::AdsCallState
120
+ : public InternallyRefCounted<AdsCallState> {
121
+ public:
122
+ // The ctor and dtor should not be used directly.
123
+ explicit AdsCallState(RefCountedPtr<RetryableCall<AdsCallState>> parent);
124
+ ~AdsCallState() override;
125
+
126
+ void Orphan() override;
127
+
128
+ RetryableCall<AdsCallState>* parent() const { return parent_.get(); }
129
+ ChannelState* chand() const { return parent_->chand(); }
130
+ XdsClient* xds_client() const { return chand()->xds_client(); }
131
+ bool seen_response() const { return seen_response_; }
132
+
133
+ void Subscribe(const std::string& type_url, const std::string& name);
134
+ void Unsubscribe(const std::string& type_url, const std::string& name,
135
+ bool delay_unsubscription);
136
+
137
+ bool HasSubscribedResources() const;
138
+
139
+ private:
140
+ class ResourceState : public InternallyRefCounted<ResourceState> {
141
+ public:
142
+ ResourceState(const std::string& type_url, const std::string& name)
143
+ : type_url_(type_url), name_(name) {
144
+ GRPC_CLOSURE_INIT(&timer_callback_, OnTimer, this,
145
+ grpc_schedule_on_exec_ctx);
146
+ }
147
+
148
+ void Orphan() override {
149
+ Finish();
150
+ Unref();
151
+ }
152
+
153
+ void Start(RefCountedPtr<AdsCallState> ads_calld) {
154
+ if (sent_) return;
155
+ sent_ = true;
156
+ ads_calld_ = std::move(ads_calld);
157
+ Ref().release();
158
+ timer_pending_ = true;
159
+ grpc_timer_init(
160
+ &timer_,
161
+ ExecCtx::Get()->Now() + ads_calld_->xds_client()->request_timeout_,
162
+ &timer_callback_);
163
+ }
164
+
165
+ void Finish() {
166
+ if (timer_pending_) {
167
+ grpc_timer_cancel(&timer_);
168
+ timer_pending_ = false;
169
+ }
170
+ }
171
+
172
+ private:
173
+ static void OnTimer(void* arg, grpc_error* error) {
174
+ ResourceState* self = static_cast<ResourceState*>(arg);
175
+ GRPC_ERROR_REF(error); // ref owned by lambda
176
+ self->ads_calld_->xds_client()->work_serializer_->Run(
177
+ [self, error]() { self->OnTimerLocked(error); }, DEBUG_LOCATION);
178
+ }
179
+
180
+ void OnTimerLocked(grpc_error* error) {
181
+ if (error == GRPC_ERROR_NONE && timer_pending_) {
182
+ timer_pending_ = false;
183
+ char* msg;
184
+ gpr_asprintf(
185
+ &msg,
186
+ "timeout obtaining resource {type=%s name=%s} from xds server",
187
+ type_url_.c_str(), name_.c_str());
188
+ grpc_error* watcher_error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(msg);
189
+ gpr_free(msg);
190
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
191
+ gpr_log(GPR_INFO, "[xds_client %p] %s", ads_calld_->xds_client(),
192
+ grpc_error_string(watcher_error));
193
+ }
194
+ if (type_url_ == XdsApi::kLdsTypeUrl ||
195
+ type_url_ == XdsApi::kRdsTypeUrl) {
196
+ ads_calld_->xds_client()->service_config_watcher_->OnError(
197
+ watcher_error);
198
+ } else if (type_url_ == XdsApi::kCdsTypeUrl) {
199
+ ClusterState& state = ads_calld_->xds_client()->cluster_map_[name_];
200
+ for (const auto& p : state.watchers) {
201
+ p.first->OnError(GRPC_ERROR_REF(watcher_error));
202
+ }
203
+ GRPC_ERROR_UNREF(watcher_error);
204
+ } else if (type_url_ == XdsApi::kEdsTypeUrl) {
205
+ EndpointState& state = ads_calld_->xds_client()->endpoint_map_[name_];
206
+ for (const auto& p : state.watchers) {
207
+ p.first->OnError(GRPC_ERROR_REF(watcher_error));
208
+ }
209
+ GRPC_ERROR_UNREF(watcher_error);
210
+ } else {
211
+ GPR_UNREACHABLE_CODE(return );
212
+ }
213
+ }
214
+ ads_calld_.reset();
215
+ Unref();
216
+ GRPC_ERROR_UNREF(error);
217
+ }
218
+
219
+ const std::string type_url_;
220
+ const std::string name_;
221
+
222
+ RefCountedPtr<AdsCallState> ads_calld_;
223
+ bool sent_ = false;
224
+ bool timer_pending_ = false;
225
+ grpc_timer timer_;
226
+ grpc_closure timer_callback_;
227
+ };
228
+
229
+ struct ResourceTypeState {
230
+ ~ResourceTypeState() { GRPC_ERROR_UNREF(error); }
231
+
232
+ // Version, nonce, and error for this resource type.
233
+ std::string version;
234
+ std::string nonce;
235
+ grpc_error* error = GRPC_ERROR_NONE;
236
+
237
+ // Subscribed resources of this type.
238
+ std::map<std::string /* name */, OrphanablePtr<ResourceState>>
239
+ subscribed_resources;
240
+ };
241
+
242
+ void SendMessageLocked(const std::string& type_url);
243
+
244
+ void AcceptLdsUpdate(absl::optional<XdsApi::LdsUpdate> lds_update);
245
+ void AcceptRdsUpdate(absl::optional<XdsApi::RdsUpdate> rds_update);
246
+ void AcceptCdsUpdate(XdsApi::CdsUpdateMap cds_update_map);
247
+ void AcceptEdsUpdate(XdsApi::EdsUpdateMap eds_update_map);
248
+
249
+ static void OnRequestSent(void* arg, grpc_error* error);
250
+ void OnRequestSentLocked(grpc_error* error);
251
+ static void OnResponseReceived(void* arg, grpc_error* error);
252
+ void OnResponseReceivedLocked();
253
+ static void OnStatusReceived(void* arg, grpc_error* error);
254
+ void OnStatusReceivedLocked(grpc_error* error);
255
+
256
+ bool IsCurrentCallOnChannel() const;
257
+
258
+ std::set<absl::string_view> ResourceNamesForRequest(
259
+ const std::string& type_url);
260
+
261
+ // The owning RetryableCall<>.
262
+ RefCountedPtr<RetryableCall<AdsCallState>> parent_;
263
+
264
+ bool sent_initial_message_ = false;
265
+ bool seen_response_ = false;
266
+
267
+ // Always non-NULL.
268
+ grpc_call* call_;
269
+
270
+ // recv_initial_metadata
271
+ grpc_metadata_array initial_metadata_recv_;
272
+
273
+ // send_message
274
+ grpc_byte_buffer* send_message_payload_ = nullptr;
275
+ grpc_closure on_request_sent_;
276
+
277
+ // recv_message
278
+ grpc_byte_buffer* recv_message_payload_ = nullptr;
279
+ grpc_closure on_response_received_;
280
+
281
+ // recv_trailing_metadata
282
+ grpc_metadata_array trailing_metadata_recv_;
283
+ grpc_status_code status_code_;
284
+ grpc_slice status_details_;
285
+ grpc_closure on_status_received_;
286
+
287
+ // Resource types for which requests need to be sent.
288
+ std::set<std::string /*type_url*/> buffered_requests_;
289
+
290
+ // State for each resource type.
291
+ std::map<std::string /*type_url*/, ResourceTypeState> state_map_;
292
+ };
293
+
294
+ // Contains an LRS call to the xds server.
295
+ class XdsClient::ChannelState::LrsCallState
296
+ : public InternallyRefCounted<LrsCallState> {
297
+ public:
298
+ // The ctor and dtor should not be used directly.
299
+ explicit LrsCallState(RefCountedPtr<RetryableCall<LrsCallState>> parent);
300
+ ~LrsCallState() override;
301
+
302
+ void Orphan() override;
303
+
304
+ void MaybeStartReportingLocked();
305
+
306
+ RetryableCall<LrsCallState>* parent() { return parent_.get(); }
307
+ ChannelState* chand() const { return parent_->chand(); }
308
+ XdsClient* xds_client() const { return chand()->xds_client(); }
309
+ bool seen_response() const { return seen_response_; }
310
+
311
+ private:
312
+ // Reports client-side load stats according to a fixed interval.
313
+ class Reporter : public InternallyRefCounted<Reporter> {
314
+ public:
315
+ Reporter(RefCountedPtr<LrsCallState> parent, grpc_millis report_interval)
316
+ : parent_(std::move(parent)), report_interval_(report_interval) {
317
+ GRPC_CLOSURE_INIT(&on_next_report_timer_, OnNextReportTimer, this,
318
+ grpc_schedule_on_exec_ctx);
319
+ GRPC_CLOSURE_INIT(&on_report_done_, OnReportDone, this,
320
+ grpc_schedule_on_exec_ctx);
321
+ ScheduleNextReportLocked();
322
+ }
323
+
324
+ void Orphan() override;
325
+
326
+ private:
327
+ void ScheduleNextReportLocked();
328
+ static void OnNextReportTimer(void* arg, grpc_error* error);
329
+ void OnNextReportTimerLocked(grpc_error* error);
330
+ void SendReportLocked();
331
+ static void OnReportDone(void* arg, grpc_error* error);
332
+ void OnReportDoneLocked(grpc_error* error);
333
+
334
+ bool IsCurrentReporterOnCall() const {
335
+ return this == parent_->reporter_.get();
336
+ }
337
+ XdsClient* xds_client() const { return parent_->xds_client(); }
338
+
339
+ // The owning LRS call.
340
+ RefCountedPtr<LrsCallState> parent_;
341
+
342
+ // The load reporting state.
343
+ const grpc_millis report_interval_;
344
+ bool last_report_counters_were_zero_ = false;
345
+ bool next_report_timer_callback_pending_ = false;
346
+ grpc_timer next_report_timer_;
347
+ grpc_closure on_next_report_timer_;
348
+ grpc_closure on_report_done_;
349
+ };
350
+
351
+ static void OnInitialRequestSent(void* arg, grpc_error* error);
352
+ void OnInitialRequestSentLocked();
353
+ static void OnResponseReceived(void* arg, grpc_error* error);
354
+ void OnResponseReceivedLocked();
355
+ static void OnStatusReceived(void* arg, grpc_error* error);
356
+ void OnStatusReceivedLocked(grpc_error* error);
357
+
358
+ bool IsCurrentCallOnChannel() const;
359
+
360
+ // The owning RetryableCall<>.
361
+ RefCountedPtr<RetryableCall<LrsCallState>> parent_;
362
+ bool seen_response_ = false;
363
+
364
+ // Always non-NULL.
365
+ grpc_call* call_;
366
+
367
+ // recv_initial_metadata
368
+ grpc_metadata_array initial_metadata_recv_;
369
+
370
+ // send_message
371
+ grpc_byte_buffer* send_message_payload_ = nullptr;
372
+ grpc_closure on_initial_request_sent_;
373
+
374
+ // recv_message
375
+ grpc_byte_buffer* recv_message_payload_ = nullptr;
376
+ grpc_closure on_response_received_;
377
+
378
+ // recv_trailing_metadata
379
+ grpc_metadata_array trailing_metadata_recv_;
380
+ grpc_status_code status_code_;
381
+ grpc_slice status_details_;
382
+ grpc_closure on_status_received_;
383
+
384
+ // Load reporting state.
385
+ bool send_all_clusters_ = false;
386
+ std::set<std::string> cluster_names_; // Asked for by the LRS server.
387
+ grpc_millis load_reporting_interval_ = 0;
388
+ OrphanablePtr<Reporter> reporter_;
389
+ };
390
+
391
+ //
392
+ // XdsClient::ChannelState::StateWatcher
393
+ //
394
+
395
+ class XdsClient::ChannelState::StateWatcher
396
+ : public AsyncConnectivityStateWatcherInterface {
397
+ public:
398
+ explicit StateWatcher(RefCountedPtr<ChannelState> parent)
399
+ : AsyncConnectivityStateWatcherInterface(
400
+ parent->xds_client()->work_serializer_),
401
+ parent_(std::move(parent)) {}
402
+
403
+ private:
404
+ void OnConnectivityStateChange(grpc_connectivity_state new_state) override {
405
+ if (!parent_->shutting_down_ &&
406
+ new_state == GRPC_CHANNEL_TRANSIENT_FAILURE) {
407
+ // In TRANSIENT_FAILURE. Notify all watchers of error.
408
+ gpr_log(GPR_INFO,
409
+ "[xds_client %p] xds channel in state TRANSIENT_FAILURE",
410
+ parent_->xds_client());
411
+ parent_->xds_client()->NotifyOnError(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
412
+ "xds channel in TRANSIENT_FAILURE"));
413
+ }
414
+ }
415
+
416
+ RefCountedPtr<ChannelState> parent_;
417
+ };
418
+
419
+ //
420
+ // XdsClient::ChannelState
421
+ //
422
+
423
+ namespace {
424
+
425
+ // Returns the channel args for the xds channel.
426
+ grpc_channel_args* BuildXdsChannelArgs(const grpc_channel_args& args) {
427
+ static const char* args_to_remove[] = {
428
+ // LB policy name, since we want to use the default (pick_first) in
429
+ // the LB channel.
430
+ GRPC_ARG_LB_POLICY_NAME,
431
+ // The service config that contains the LB config. We don't want to
432
+ // recursively use xds in the LB channel.
433
+ GRPC_ARG_SERVICE_CONFIG,
434
+ // The channel arg for the server URI, since that will be different for
435
+ // the xds channel than for the parent channel. The client channel
436
+ // factory will re-add this arg with the right value.
437
+ GRPC_ARG_SERVER_URI,
438
+ // The xds channel should use the authority indicated by the target
439
+ // authority table (see \a ModifyXdsChannelArgs),
440
+ // as opposed to the authority from the parent channel.
441
+ GRPC_ARG_DEFAULT_AUTHORITY,
442
+ // Just as for \a GRPC_ARG_DEFAULT_AUTHORITY, the xds channel should be
443
+ // treated as a stand-alone channel and not inherit this argument from the
444
+ // args of the parent channel.
445
+ GRPC_SSL_TARGET_NAME_OVERRIDE_ARG,
446
+ // Don't want to pass down channelz node from parent; the balancer
447
+ // channel will get its own.
448
+ GRPC_ARG_CHANNELZ_CHANNEL_NODE,
449
+ // Keepalive interval. We are explicitly setting our own value below.
450
+ GRPC_ARG_KEEPALIVE_TIME_MS,
451
+ };
452
+ // Channel args to add.
453
+ absl::InlinedVector<grpc_arg, 3> args_to_add;
454
+ // Keepalive interval.
455
+ args_to_add.emplace_back(grpc_channel_arg_integer_create(
456
+ const_cast<char*>(GRPC_ARG_KEEPALIVE_TIME_MS), 5000));
457
+ // A channel arg indicating that the target is an xds server.
458
+ // TODO(roth): Once we figure out our fallback and credentials story, decide
459
+ // whether this is actually needed. Note that it's currently used by the
460
+ // fake security connector as well.
461
+ args_to_add.emplace_back(grpc_channel_arg_integer_create(
462
+ const_cast<char*>(GRPC_ARG_ADDRESS_IS_XDS_SERVER), 1));
463
+ // The parent channel's channelz uuid.
464
+ channelz::ChannelNode* channelz_node = nullptr;
465
+ const grpc_arg* arg =
466
+ grpc_channel_args_find(&args, GRPC_ARG_CHANNELZ_CHANNEL_NODE);
467
+ if (arg != nullptr && arg->type == GRPC_ARG_POINTER &&
468
+ arg->value.pointer.p != nullptr) {
469
+ channelz_node = static_cast<channelz::ChannelNode*>(arg->value.pointer.p);
470
+ args_to_add.emplace_back(
471
+ channelz::MakeParentUuidArg(channelz_node->uuid()));
472
+ }
473
+ // Construct channel args.
474
+ grpc_channel_args* new_args = grpc_channel_args_copy_and_add_and_remove(
475
+ &args, args_to_remove, GPR_ARRAY_SIZE(args_to_remove), args_to_add.data(),
476
+ args_to_add.size());
477
+ // Make any necessary modifications for security.
478
+ return ModifyXdsChannelArgs(new_args);
479
+ }
480
+
481
+ } // namespace
482
+
483
+ XdsClient::ChannelState::ChannelState(RefCountedPtr<XdsClient> xds_client,
484
+ grpc_channel* channel)
485
+ : InternallyRefCounted<ChannelState>(&grpc_xds_client_trace),
486
+ xds_client_(std::move(xds_client)),
487
+ channel_(channel) {
488
+ GPR_ASSERT(channel_ != nullptr);
489
+ StartConnectivityWatchLocked();
490
+ }
491
+
492
+ XdsClient::ChannelState::~ChannelState() {
493
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
494
+ gpr_log(GPR_INFO, "[xds_client %p] Destroying xds channel %p", xds_client(),
495
+ this);
496
+ }
497
+ grpc_channel_destroy(channel_);
498
+ }
499
+
500
+ void XdsClient::ChannelState::Orphan() {
501
+ shutting_down_ = true;
502
+ CancelConnectivityWatchLocked();
503
+ ads_calld_.reset();
504
+ lrs_calld_.reset();
505
+ Unref(DEBUG_LOCATION, "ChannelState+orphaned");
506
+ }
507
+
508
+ XdsClient::ChannelState::AdsCallState* XdsClient::ChannelState::ads_calld()
509
+ const {
510
+ return ads_calld_->calld();
511
+ }
512
+
513
+ XdsClient::ChannelState::LrsCallState* XdsClient::ChannelState::lrs_calld()
514
+ const {
515
+ return lrs_calld_->calld();
516
+ }
517
+
518
+ bool XdsClient::ChannelState::HasActiveAdsCall() const {
519
+ return ads_calld_->calld() != nullptr;
520
+ }
521
+
522
+ void XdsClient::ChannelState::MaybeStartLrsCall() {
523
+ if (lrs_calld_ != nullptr) return;
524
+ lrs_calld_.reset(
525
+ new RetryableCall<LrsCallState>(Ref(DEBUG_LOCATION, "ChannelState+lrs")));
526
+ }
527
+
528
+ void XdsClient::ChannelState::StopLrsCall() { lrs_calld_.reset(); }
529
+
530
+ void XdsClient::ChannelState::StartConnectivityWatchLocked() {
531
+ grpc_channel_element* client_channel_elem =
532
+ grpc_channel_stack_last_element(grpc_channel_get_channel_stack(channel_));
533
+ GPR_ASSERT(client_channel_elem->filter == &grpc_client_channel_filter);
534
+ watcher_ = new StateWatcher(Ref());
535
+ grpc_client_channel_start_connectivity_watch(
536
+ client_channel_elem, GRPC_CHANNEL_IDLE,
537
+ OrphanablePtr<AsyncConnectivityStateWatcherInterface>(watcher_));
538
+ }
539
+
540
+ void XdsClient::ChannelState::CancelConnectivityWatchLocked() {
541
+ grpc_channel_element* client_channel_elem =
542
+ grpc_channel_stack_last_element(grpc_channel_get_channel_stack(channel_));
543
+ GPR_ASSERT(client_channel_elem->filter == &grpc_client_channel_filter);
544
+ grpc_client_channel_stop_connectivity_watch(client_channel_elem, watcher_);
545
+ }
546
+
547
+ void XdsClient::ChannelState::Subscribe(const std::string& type_url,
548
+ const std::string& name) {
549
+ if (ads_calld_ == nullptr) {
550
+ // Start the ADS call if this is the first request.
551
+ ads_calld_.reset(new RetryableCall<AdsCallState>(
552
+ Ref(DEBUG_LOCATION, "ChannelState+ads")));
553
+ // Note: AdsCallState's ctor will automatically subscribe to all
554
+ // resources that the XdsClient already has watchers for, so we can
555
+ // return here.
556
+ return;
557
+ }
558
+ // If the ADS call is in backoff state, we don't need to do anything now
559
+ // because when the call is restarted it will resend all necessary requests.
560
+ if (ads_calld() == nullptr) return;
561
+ // Subscribe to this resource if the ADS call is active.
562
+ ads_calld()->Subscribe(type_url, name);
563
+ }
564
+
565
+ void XdsClient::ChannelState::Unsubscribe(const std::string& type_url,
566
+ const std::string& name,
567
+ bool delay_unsubscription) {
568
+ if (ads_calld_ != nullptr) {
569
+ ads_calld_->calld()->Unsubscribe(type_url, name, delay_unsubscription);
570
+ if (!ads_calld_->calld()->HasSubscribedResources()) ads_calld_.reset();
571
+ }
572
+ }
573
+
574
+ //
575
+ // XdsClient::ChannelState::RetryableCall<>
576
+ //
577
+
578
+ template <typename T>
579
+ XdsClient::ChannelState::RetryableCall<T>::RetryableCall(
580
+ RefCountedPtr<ChannelState> chand)
581
+ : chand_(std::move(chand)),
582
+ backoff_(
583
+ BackOff::Options()
584
+ .set_initial_backoff(GRPC_XDS_INITIAL_CONNECT_BACKOFF_SECONDS *
585
+ 1000)
586
+ .set_multiplier(GRPC_XDS_RECONNECT_BACKOFF_MULTIPLIER)
587
+ .set_jitter(GRPC_XDS_RECONNECT_JITTER)
588
+ .set_max_backoff(GRPC_XDS_RECONNECT_MAX_BACKOFF_SECONDS * 1000)) {
589
+ // Closure Initialization
590
+ GRPC_CLOSURE_INIT(&on_retry_timer_, OnRetryTimer, this,
591
+ grpc_schedule_on_exec_ctx);
592
+ StartNewCallLocked();
593
+ }
594
+
595
+ template <typename T>
596
+ void XdsClient::ChannelState::RetryableCall<T>::Orphan() {
597
+ shutting_down_ = true;
598
+ calld_.reset();
599
+ if (retry_timer_callback_pending_) grpc_timer_cancel(&retry_timer_);
600
+ this->Unref(DEBUG_LOCATION, "RetryableCall+orphaned");
601
+ }
602
+
603
+ template <typename T>
604
+ void XdsClient::ChannelState::RetryableCall<T>::OnCallFinishedLocked() {
605
+ const bool seen_response = calld_->seen_response();
606
+ calld_.reset();
607
+ if (seen_response) {
608
+ // If we lost connection to the xds server, reset backoff and restart the
609
+ // call immediately.
610
+ backoff_.Reset();
611
+ StartNewCallLocked();
612
+ } else {
613
+ // If we failed to connect to the xds server, retry later.
614
+ StartRetryTimerLocked();
615
+ }
616
+ }
617
+
618
+ template <typename T>
619
+ void XdsClient::ChannelState::RetryableCall<T>::StartNewCallLocked() {
620
+ if (shutting_down_) return;
621
+ GPR_ASSERT(chand_->channel_ != nullptr);
622
+ GPR_ASSERT(calld_ == nullptr);
623
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
624
+ gpr_log(GPR_INFO,
625
+ "[xds_client %p] Start new call from retryable call (chand: %p, "
626
+ "retryable call: %p)",
627
+ chand()->xds_client(), chand(), this);
628
+ }
629
+ calld_ = MakeOrphanable<T>(
630
+ this->Ref(DEBUG_LOCATION, "RetryableCall+start_new_call"));
631
+ }
632
+
633
+ template <typename T>
634
+ void XdsClient::ChannelState::RetryableCall<T>::StartRetryTimerLocked() {
635
+ if (shutting_down_) return;
636
+ const grpc_millis next_attempt_time = backoff_.NextAttemptTime();
637
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
638
+ grpc_millis timeout = GPR_MAX(next_attempt_time - ExecCtx::Get()->Now(), 0);
639
+ gpr_log(GPR_INFO,
640
+ "[xds_client %p] Failed to connect to xds server (chand: %p) "
641
+ "retry timer will fire in %" PRId64 "ms.",
642
+ chand()->xds_client(), chand(), timeout);
643
+ }
644
+ this->Ref(DEBUG_LOCATION, "RetryableCall+retry_timer_start").release();
645
+ grpc_timer_init(&retry_timer_, next_attempt_time, &on_retry_timer_);
646
+ retry_timer_callback_pending_ = true;
647
+ }
648
+
649
+ template <typename T>
650
+ void XdsClient::ChannelState::RetryableCall<T>::OnRetryTimer(
651
+ void* arg, grpc_error* error) {
652
+ RetryableCall* calld = static_cast<RetryableCall*>(arg);
653
+ GRPC_ERROR_REF(error); // ref owned by lambda
654
+ calld->chand_->xds_client()->work_serializer_->Run(
655
+ [calld, error]() { calld->OnRetryTimerLocked(error); }, DEBUG_LOCATION);
656
+ }
657
+
658
+ template <typename T>
659
+ void XdsClient::ChannelState::RetryableCall<T>::OnRetryTimerLocked(
660
+ grpc_error* error) {
661
+ retry_timer_callback_pending_ = false;
662
+ if (!shutting_down_ && error == GRPC_ERROR_NONE) {
663
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
664
+ gpr_log(
665
+ GPR_INFO,
666
+ "[xds_client %p] Retry timer fires (chand: %p, retryable call: %p)",
667
+ chand()->xds_client(), chand(), this);
668
+ }
669
+ StartNewCallLocked();
670
+ }
671
+ this->Unref(DEBUG_LOCATION, "RetryableCall+retry_timer_done");
672
+ GRPC_ERROR_UNREF(error);
673
+ }
674
+
675
+ //
676
+ // XdsClient::ChannelState::AdsCallState
677
+ //
678
+
679
+ XdsClient::ChannelState::AdsCallState::AdsCallState(
680
+ RefCountedPtr<RetryableCall<AdsCallState>> parent)
681
+ : InternallyRefCounted<AdsCallState>(&grpc_xds_client_trace),
682
+ parent_(std::move(parent)) {
683
+ // Init the ADS call. Note that the call will progress every time there's
684
+ // activity in xds_client()->interested_parties_, which is comprised of
685
+ // the polling entities from client_channel.
686
+ GPR_ASSERT(xds_client() != nullptr);
687
+ GPR_ASSERT(!xds_client()->server_name_.empty());
688
+ // Create a call with the specified method name.
689
+ call_ = grpc_channel_create_pollset_set_call(
690
+ chand()->channel_, nullptr, GRPC_PROPAGATE_DEFAULTS,
691
+ xds_client()->interested_parties_,
692
+ GRPC_MDSTR_SLASH_ENVOY_DOT_SERVICE_DOT_DISCOVERY_DOT_V2_DOT_AGGREGATEDDISCOVERYSERVICE_SLASH_STREAMAGGREGATEDRESOURCES,
693
+ nullptr, GRPC_MILLIS_INF_FUTURE, nullptr);
694
+ GPR_ASSERT(call_ != nullptr);
695
+ // Init data associated with the call.
696
+ grpc_metadata_array_init(&initial_metadata_recv_);
697
+ grpc_metadata_array_init(&trailing_metadata_recv_);
698
+ // Start the call.
699
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
700
+ gpr_log(GPR_INFO,
701
+ "[xds_client %p] Starting ADS call (chand: %p, calld: %p, "
702
+ "call: %p)",
703
+ xds_client(), chand(), this, call_);
704
+ }
705
+ // Create the ops.
706
+ grpc_call_error call_error;
707
+ grpc_op ops[3];
708
+ memset(ops, 0, sizeof(ops));
709
+ // Op: send initial metadata.
710
+ grpc_op* op = ops;
711
+ op->op = GRPC_OP_SEND_INITIAL_METADATA;
712
+ op->data.send_initial_metadata.count = 0;
713
+ op->flags = GRPC_INITIAL_METADATA_WAIT_FOR_READY |
714
+ GRPC_INITIAL_METADATA_WAIT_FOR_READY_EXPLICITLY_SET;
715
+ op->reserved = nullptr;
716
+ op++;
717
+ call_error = grpc_call_start_batch_and_execute(call_, ops, (size_t)(op - ops),
718
+ nullptr);
719
+ GPR_ASSERT(GRPC_CALL_OK == call_error);
720
+ // Op: send request message.
721
+ GRPC_CLOSURE_INIT(&on_request_sent_, OnRequestSent, this,
722
+ grpc_schedule_on_exec_ctx);
723
+ if (xds_client()->service_config_watcher_ != nullptr) {
724
+ Subscribe(XdsApi::kLdsTypeUrl, xds_client()->server_name_);
725
+ if (xds_client()->lds_result_.has_value() &&
726
+ !xds_client()->lds_result_->route_config_name.empty()) {
727
+ Subscribe(XdsApi::kRdsTypeUrl,
728
+ xds_client()->lds_result_->route_config_name);
729
+ }
730
+ }
731
+ for (const auto& p : xds_client()->cluster_map_) {
732
+ Subscribe(XdsApi::kCdsTypeUrl, std::string(p.first));
733
+ }
734
+ for (const auto& p : xds_client()->endpoint_map_) {
735
+ Subscribe(XdsApi::kEdsTypeUrl, std::string(p.first));
736
+ }
737
+ // Op: recv initial metadata.
738
+ op = ops;
739
+ op->op = GRPC_OP_RECV_INITIAL_METADATA;
740
+ op->data.recv_initial_metadata.recv_initial_metadata =
741
+ &initial_metadata_recv_;
742
+ op->flags = 0;
743
+ op->reserved = nullptr;
744
+ op++;
745
+ // Op: recv response.
746
+ op->op = GRPC_OP_RECV_MESSAGE;
747
+ op->data.recv_message.recv_message = &recv_message_payload_;
748
+ op->flags = 0;
749
+ op->reserved = nullptr;
750
+ op++;
751
+ Ref(DEBUG_LOCATION, "ADS+OnResponseReceivedLocked").release();
752
+ GRPC_CLOSURE_INIT(&on_response_received_, OnResponseReceived, this,
753
+ grpc_schedule_on_exec_ctx);
754
+ call_error = grpc_call_start_batch_and_execute(call_, ops, (size_t)(op - ops),
755
+ &on_response_received_);
756
+ GPR_ASSERT(GRPC_CALL_OK == call_error);
757
+ // Op: recv server status.
758
+ op = ops;
759
+ op->op = GRPC_OP_RECV_STATUS_ON_CLIENT;
760
+ op->data.recv_status_on_client.trailing_metadata = &trailing_metadata_recv_;
761
+ op->data.recv_status_on_client.status = &status_code_;
762
+ op->data.recv_status_on_client.status_details = &status_details_;
763
+ op->flags = 0;
764
+ op->reserved = nullptr;
765
+ op++;
766
+ // This callback signals the end of the call, so it relies on the initial
767
+ // ref instead of a new ref. When it's invoked, it's the initial ref that is
768
+ // unreffed.
769
+ GRPC_CLOSURE_INIT(&on_status_received_, OnStatusReceived, this,
770
+ grpc_schedule_on_exec_ctx);
771
+ call_error = grpc_call_start_batch_and_execute(call_, ops, (size_t)(op - ops),
772
+ &on_status_received_);
773
+ GPR_ASSERT(GRPC_CALL_OK == call_error);
774
+ }
775
+
776
+ XdsClient::ChannelState::AdsCallState::~AdsCallState() {
777
+ grpc_metadata_array_destroy(&initial_metadata_recv_);
778
+ grpc_metadata_array_destroy(&trailing_metadata_recv_);
779
+ grpc_byte_buffer_destroy(send_message_payload_);
780
+ grpc_byte_buffer_destroy(recv_message_payload_);
781
+ grpc_slice_unref_internal(status_details_);
782
+ GPR_ASSERT(call_ != nullptr);
783
+ grpc_call_unref(call_);
784
+ }
785
+
786
+ void XdsClient::ChannelState::AdsCallState::Orphan() {
787
+ GPR_ASSERT(call_ != nullptr);
788
+ // If we are here because xds_client wants to cancel the call,
789
+ // on_status_received_ will complete the cancellation and clean up. Otherwise,
790
+ // we are here because xds_client has to orphan a failed call, then the
791
+ // following cancellation will be a no-op.
792
+ grpc_call_cancel(call_, nullptr);
793
+ state_map_.clear();
794
+ // Note that the initial ref is hold by on_status_received_. So the
795
+ // corresponding unref happens in on_status_received_ instead of here.
796
+ }
797
+
798
+ void XdsClient::ChannelState::AdsCallState::SendMessageLocked(
799
+ const std::string& type_url) {
800
+ // Buffer message sending if an existing message is in flight.
801
+ if (send_message_payload_ != nullptr) {
802
+ buffered_requests_.insert(type_url);
803
+ return;
804
+ }
805
+ auto& state = state_map_[type_url];
806
+ grpc_slice request_payload_slice;
807
+ std::set<absl::string_view> resource_names =
808
+ ResourceNamesForRequest(type_url);
809
+ request_payload_slice = xds_client()->api_.CreateAdsRequest(
810
+ type_url, resource_names, state.version, state.nonce,
811
+ GRPC_ERROR_REF(state.error), !sent_initial_message_);
812
+ if (type_url != XdsApi::kLdsTypeUrl && type_url != XdsApi::kRdsTypeUrl &&
813
+ type_url != XdsApi::kCdsTypeUrl && type_url != XdsApi::kEdsTypeUrl) {
814
+ state_map_.erase(type_url);
815
+ }
816
+ sent_initial_message_ = true;
817
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
818
+ gpr_log(GPR_INFO,
819
+ "[xds_client %p] sending ADS request: type=%s version=%s nonce=%s "
820
+ "error=%s resources=%s",
821
+ xds_client(), type_url.c_str(), state.version.c_str(),
822
+ state.nonce.c_str(), grpc_error_string(state.error),
823
+ absl::StrJoin(resource_names, " ").c_str());
824
+ }
825
+ GRPC_ERROR_UNREF(state.error);
826
+ state.error = GRPC_ERROR_NONE;
827
+ // Create message payload.
828
+ send_message_payload_ =
829
+ grpc_raw_byte_buffer_create(&request_payload_slice, 1);
830
+ grpc_slice_unref_internal(request_payload_slice);
831
+ // Send the message.
832
+ grpc_op op;
833
+ memset(&op, 0, sizeof(op));
834
+ op.op = GRPC_OP_SEND_MESSAGE;
835
+ op.data.send_message.send_message = send_message_payload_;
836
+ Ref(DEBUG_LOCATION, "ADS+OnRequestSentLocked").release();
837
+ GRPC_CLOSURE_INIT(&on_request_sent_, OnRequestSent, this,
838
+ grpc_schedule_on_exec_ctx);
839
+ grpc_call_error call_error =
840
+ grpc_call_start_batch_and_execute(call_, &op, 1, &on_request_sent_);
841
+ if (GPR_UNLIKELY(call_error != GRPC_CALL_OK)) {
842
+ gpr_log(GPR_ERROR,
843
+ "[xds_client %p] calld=%p call_error=%d sending ADS message",
844
+ xds_client(), this, call_error);
845
+ GPR_ASSERT(GRPC_CALL_OK == call_error);
846
+ }
847
+ }
848
+
849
+ void XdsClient::ChannelState::AdsCallState::Subscribe(
850
+ const std::string& type_url, const std::string& name) {
851
+ auto& state = state_map_[type_url].subscribed_resources[name];
852
+ if (state == nullptr) {
853
+ state = MakeOrphanable<ResourceState>(type_url, name);
854
+ SendMessageLocked(type_url);
855
+ }
856
+ }
857
+
858
+ void XdsClient::ChannelState::AdsCallState::Unsubscribe(
859
+ const std::string& type_url, const std::string& name,
860
+ bool delay_unsubscription) {
861
+ state_map_[type_url].subscribed_resources.erase(name);
862
+ if (!delay_unsubscription) SendMessageLocked(type_url);
863
+ }
864
+
865
+ bool XdsClient::ChannelState::AdsCallState::HasSubscribedResources() const {
866
+ for (const auto& p : state_map_) {
867
+ if (!p.second.subscribed_resources.empty()) return true;
868
+ }
869
+ return false;
870
+ }
871
+
872
+ void XdsClient::ChannelState::AdsCallState::AcceptLdsUpdate(
873
+ absl::optional<XdsApi::LdsUpdate> lds_update) {
874
+ if (!lds_update.has_value()) {
875
+ gpr_log(GPR_INFO,
876
+ "[xds_client %p] LDS update does not include requested resource",
877
+ xds_client());
878
+ if (xds_client()->lds_result_.has_value() &&
879
+ !xds_client()->lds_result_->route_config_name.empty()) {
880
+ Unsubscribe(XdsApi::kRdsTypeUrl,
881
+ xds_client()->lds_result_->route_config_name,
882
+ /*delay_unsubscription=*/false);
883
+ xds_client()->rds_result_.reset();
884
+ }
885
+ xds_client()->lds_result_.reset();
886
+ xds_client()->service_config_watcher_->OnResourceDoesNotExist();
887
+ return;
888
+ }
889
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
890
+ gpr_log(GPR_INFO,
891
+ "[xds_client %p] LDS update received: route_config_name=%s",
892
+ xds_client(),
893
+ (!lds_update->route_config_name.empty()
894
+ ? lds_update->route_config_name.c_str()
895
+ : "<inlined>"));
896
+ if (lds_update->rds_update.has_value()) {
897
+ gpr_log(GPR_INFO, " RouteConfiguration contains %" PRIuPTR " routes",
898
+ lds_update->rds_update.value().routes.size());
899
+ for (const auto& route : lds_update->rds_update.value().routes) {
900
+ gpr_log(GPR_INFO,
901
+ " route: { service=\"%s\", "
902
+ "method=\"%s\" }, cluster=\"%s\" }",
903
+ route.service.c_str(), route.method.c_str(),
904
+ route.cluster_name.c_str());
905
+ }
906
+ }
907
+ }
908
+ auto& lds_state = state_map_[XdsApi::kLdsTypeUrl];
909
+ auto& state = lds_state.subscribed_resources[xds_client()->server_name_];
910
+ if (state != nullptr) state->Finish();
911
+ // Ignore identical update.
912
+ if (xds_client()->lds_result_ == lds_update) {
913
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
914
+ gpr_log(GPR_INFO,
915
+ "[xds_client %p] LDS update identical to current, ignoring.",
916
+ xds_client());
917
+ }
918
+ return;
919
+ }
920
+ if (xds_client()->lds_result_.has_value() &&
921
+ !xds_client()->lds_result_->route_config_name.empty()) {
922
+ Unsubscribe(
923
+ XdsApi::kRdsTypeUrl, xds_client()->lds_result_->route_config_name,
924
+ /*delay_unsubscription=*/!lds_update->route_config_name.empty());
925
+ xds_client()->rds_result_.reset();
926
+ }
927
+ xds_client()->lds_result_ = std::move(lds_update);
928
+ if (xds_client()->lds_result_->rds_update.has_value()) {
929
+ // If the RouteConfiguration was found inlined in LDS response, notify
930
+ // the watcher immediately.
931
+ RefCountedPtr<ServiceConfig> service_config;
932
+ grpc_error* error = xds_client()->CreateServiceConfig(
933
+ xds_client()->lds_result_->rds_update.value(), &service_config);
934
+ if (error == GRPC_ERROR_NONE) {
935
+ xds_client()->service_config_watcher_->OnServiceConfigChanged(
936
+ std::move(service_config));
937
+ } else {
938
+ xds_client()->service_config_watcher_->OnError(error);
939
+ }
940
+ } else {
941
+ // Send RDS request for dynamic resolution.
942
+ Subscribe(XdsApi::kRdsTypeUrl,
943
+ xds_client()->lds_result_->route_config_name);
944
+ }
945
+ }
946
+
947
+ void XdsClient::ChannelState::AdsCallState::AcceptRdsUpdate(
948
+ absl::optional<XdsApi::RdsUpdate> rds_update) {
949
+ if (!rds_update.has_value()) {
950
+ gpr_log(GPR_INFO,
951
+ "[xds_client %p] RDS update does not include requested resource",
952
+ xds_client());
953
+ xds_client()->rds_result_.reset();
954
+ xds_client()->service_config_watcher_->OnResourceDoesNotExist();
955
+ return;
956
+ }
957
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
958
+ gpr_log(GPR_INFO,
959
+ "[xds_client %p] RDS update received; RouteConfiguration contains "
960
+ "%" PRIuPTR " routes",
961
+ this, rds_update.value().routes.size());
962
+ for (const auto& route : rds_update.value().routes) {
963
+ gpr_log(GPR_INFO,
964
+ " route: { service=\"%s\", "
965
+ "method=\"%s\" }, cluster=\"%s\" }",
966
+ route.service.c_str(), route.method.c_str(),
967
+ route.cluster_name.c_str());
968
+ }
969
+ }
970
+ auto& rds_state = state_map_[XdsApi::kRdsTypeUrl];
971
+ auto& state =
972
+ rds_state
973
+ .subscribed_resources[xds_client()->lds_result_->route_config_name];
974
+ if (state != nullptr) state->Finish();
975
+ // Ignore identical update.
976
+ if (xds_client()->rds_result_ == rds_update) {
977
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
978
+ gpr_log(GPR_INFO,
979
+ "[xds_client %p] RDS update identical to current, ignoring.",
980
+ xds_client());
981
+ }
982
+ return;
983
+ }
984
+ xds_client()->rds_result_ = std::move(rds_update);
985
+ // Notify the watcher.
986
+ RefCountedPtr<ServiceConfig> service_config;
987
+ grpc_error* error = xds_client()->CreateServiceConfig(
988
+ xds_client()->rds_result_.value(), &service_config);
989
+ if (error == GRPC_ERROR_NONE) {
990
+ xds_client()->service_config_watcher_->OnServiceConfigChanged(
991
+ std::move(service_config));
992
+ } else {
993
+ xds_client()->service_config_watcher_->OnError(error);
994
+ }
995
+ }
996
+
997
+ void XdsClient::ChannelState::AdsCallState::AcceptCdsUpdate(
998
+ XdsApi::CdsUpdateMap cds_update_map) {
999
+ auto& cds_state = state_map_[XdsApi::kCdsTypeUrl];
1000
+ std::set<std::string> eds_resource_names_seen;
1001
+ for (auto& p : cds_update_map) {
1002
+ const char* cluster_name = p.first.c_str();
1003
+ XdsApi::CdsUpdate& cds_update = p.second;
1004
+ auto& state = cds_state.subscribed_resources[cluster_name];
1005
+ if (state != nullptr) state->Finish();
1006
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
1007
+ gpr_log(GPR_INFO,
1008
+ "[xds_client %p] CDS update (cluster=%s) received: "
1009
+ "eds_service_name=%s, lrs_load_reporting_server_name=%s",
1010
+ xds_client(), cluster_name, cds_update.eds_service_name.c_str(),
1011
+ cds_update.lrs_load_reporting_server_name.has_value()
1012
+ ? cds_update.lrs_load_reporting_server_name.value().c_str()
1013
+ : "(N/A)");
1014
+ }
1015
+ // Record the EDS resource names seen.
1016
+ eds_resource_names_seen.insert(cds_update.eds_service_name.empty()
1017
+ ? cluster_name
1018
+ : cds_update.eds_service_name);
1019
+ // Ignore identical update.
1020
+ ClusterState& cluster_state = xds_client()->cluster_map_[cluster_name];
1021
+ if (cluster_state.update.has_value() &&
1022
+ cds_update.eds_service_name == cluster_state.update->eds_service_name &&
1023
+ cds_update.lrs_load_reporting_server_name ==
1024
+ cluster_state.update->lrs_load_reporting_server_name) {
1025
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
1026
+ gpr_log(GPR_INFO,
1027
+ "[xds_client %p] CDS update identical to current, ignoring.",
1028
+ xds_client());
1029
+ }
1030
+ continue;
1031
+ }
1032
+ // Update the cluster state.
1033
+ cluster_state.update = std::move(cds_update);
1034
+ // Notify all watchers.
1035
+ for (const auto& p : cluster_state.watchers) {
1036
+ p.first->OnClusterChanged(cluster_state.update.value());
1037
+ }
1038
+ }
1039
+ // For any subscribed resource that is not present in the update,
1040
+ // remove it from the cache and notify watchers that it does not exist.
1041
+ for (const auto& p : cds_state.subscribed_resources) {
1042
+ const std::string& cluster_name = p.first;
1043
+ if (cds_update_map.find(cluster_name) == cds_update_map.end()) {
1044
+ ClusterState& cluster_state = xds_client()->cluster_map_[cluster_name];
1045
+ cluster_state.update.reset();
1046
+ for (const auto& p : cluster_state.watchers) {
1047
+ p.first->OnResourceDoesNotExist();
1048
+ }
1049
+ }
1050
+ }
1051
+ // For any EDS resource that is no longer referred to by any CDS
1052
+ // resources, remove it from the cache and notify watchers that it
1053
+ // does not exist.
1054
+ auto& eds_state = state_map_[XdsApi::kEdsTypeUrl];
1055
+ for (const auto& p : eds_state.subscribed_resources) {
1056
+ const std::string& eds_resource_name = p.first;
1057
+ if (eds_resource_names_seen.find(eds_resource_name) ==
1058
+ eds_resource_names_seen.end()) {
1059
+ EndpointState& endpoint_state =
1060
+ xds_client()->endpoint_map_[eds_resource_name];
1061
+ endpoint_state.update.reset();
1062
+ for (const auto& p : endpoint_state.watchers) {
1063
+ p.first->OnResourceDoesNotExist();
1064
+ }
1065
+ }
1066
+ }
1067
+ }
1068
+
1069
+ void XdsClient::ChannelState::AdsCallState::AcceptEdsUpdate(
1070
+ XdsApi::EdsUpdateMap eds_update_map) {
1071
+ auto& eds_state = state_map_[XdsApi::kEdsTypeUrl];
1072
+ for (auto& p : eds_update_map) {
1073
+ const char* eds_service_name = p.first.c_str();
1074
+ XdsApi::EdsUpdate& eds_update = p.second;
1075
+ auto& state = eds_state.subscribed_resources[eds_service_name];
1076
+ if (state != nullptr) state->Finish();
1077
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
1078
+ gpr_log(GPR_INFO,
1079
+ "[xds_client %p] EDS response with %" PRIuPTR
1080
+ " priorities and %" PRIuPTR
1081
+ " drop categories received (drop_all=%d)",
1082
+ xds_client(), eds_update.priority_list_update.size(),
1083
+ eds_update.drop_config->drop_category_list().size(),
1084
+ eds_update.drop_config->drop_all());
1085
+ for (size_t priority = 0;
1086
+ priority < eds_update.priority_list_update.size(); ++priority) {
1087
+ const auto* locality_map_update = eds_update.priority_list_update.Find(
1088
+ static_cast<uint32_t>(priority));
1089
+ gpr_log(GPR_INFO,
1090
+ "[xds_client %p] Priority %" PRIuPTR " contains %" PRIuPTR
1091
+ " localities",
1092
+ xds_client(), priority, locality_map_update->size());
1093
+ size_t locality_count = 0;
1094
+ for (const auto& p : locality_map_update->localities) {
1095
+ const auto& locality = p.second;
1096
+ gpr_log(GPR_INFO,
1097
+ "[xds_client %p] Priority %" PRIuPTR ", locality %" PRIuPTR
1098
+ " %s has weight %d, contains %" PRIuPTR " server addresses",
1099
+ xds_client(), priority, locality_count,
1100
+ locality.name->AsHumanReadableString(), locality.lb_weight,
1101
+ locality.serverlist.size());
1102
+ for (size_t i = 0; i < locality.serverlist.size(); ++i) {
1103
+ std::string ipport = grpc_sockaddr_to_string(
1104
+ &locality.serverlist[i].address(), false);
1105
+ gpr_log(GPR_INFO,
1106
+ "[xds_client %p] Priority %" PRIuPTR ", locality %" PRIuPTR
1107
+ " %s, server address %" PRIuPTR ": %s",
1108
+ xds_client(), priority, locality_count,
1109
+ locality.name->AsHumanReadableString(), i, ipport.c_str());
1110
+ }
1111
+ ++locality_count;
1112
+ }
1113
+ }
1114
+ for (size_t i = 0;
1115
+ i < eds_update.drop_config->drop_category_list().size(); ++i) {
1116
+ const XdsApi::DropConfig::DropCategory& drop_category =
1117
+ eds_update.drop_config->drop_category_list()[i];
1118
+ gpr_log(GPR_INFO,
1119
+ "[xds_client %p] Drop category %s has drop rate %d per million",
1120
+ xds_client(), drop_category.name.c_str(),
1121
+ drop_category.parts_per_million);
1122
+ }
1123
+ }
1124
+ EndpointState& endpoint_state =
1125
+ xds_client()->endpoint_map_[eds_service_name];
1126
+ // Ignore identical update.
1127
+ if (endpoint_state.update.has_value()) {
1128
+ const XdsApi::EdsUpdate& prev_update = endpoint_state.update.value();
1129
+ const bool priority_list_changed =
1130
+ prev_update.priority_list_update != eds_update.priority_list_update;
1131
+ const bool drop_config_changed =
1132
+ prev_update.drop_config == nullptr ||
1133
+ *prev_update.drop_config != *eds_update.drop_config;
1134
+ if (!priority_list_changed && !drop_config_changed) {
1135
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
1136
+ gpr_log(GPR_INFO,
1137
+ "[xds_client %p] EDS update identical to current, ignoring.",
1138
+ xds_client());
1139
+ }
1140
+ continue;
1141
+ }
1142
+ }
1143
+ // Update the cluster state.
1144
+ endpoint_state.update = std::move(eds_update);
1145
+ // Notify all watchers.
1146
+ for (const auto& p : endpoint_state.watchers) {
1147
+ p.first->OnEndpointChanged(endpoint_state.update.value());
1148
+ }
1149
+ }
1150
+ }
1151
+
1152
+ void XdsClient::ChannelState::AdsCallState::OnRequestSent(void* arg,
1153
+ grpc_error* error) {
1154
+ AdsCallState* ads_calld = static_cast<AdsCallState*>(arg);
1155
+ GRPC_ERROR_REF(error); // ref owned by lambda
1156
+ ads_calld->xds_client()->work_serializer_->Run(
1157
+ [ads_calld, error]() { ads_calld->OnRequestSentLocked(error); },
1158
+ DEBUG_LOCATION);
1159
+ }
1160
+
1161
+ void XdsClient::ChannelState::AdsCallState::OnRequestSentLocked(
1162
+ grpc_error* error) {
1163
+ if (IsCurrentCallOnChannel() && error == GRPC_ERROR_NONE) {
1164
+ // Clean up the sent message.
1165
+ grpc_byte_buffer_destroy(send_message_payload_);
1166
+ send_message_payload_ = nullptr;
1167
+ // Continue to send another pending message if any.
1168
+ // TODO(roth): The current code to handle buffered messages has the
1169
+ // advantage of sending only the most recent list of resource names for
1170
+ // each resource type (no matter how many times that resource type has
1171
+ // been requested to send while the current message sending is still
1172
+ // pending). But its disadvantage is that we send the requests in fixed
1173
+ // order of resource types. We need to fix this if we are seeing some
1174
+ // resource type(s) starved due to frequent requests of other resource
1175
+ // type(s).
1176
+ auto it = buffered_requests_.begin();
1177
+ if (it != buffered_requests_.end()) {
1178
+ SendMessageLocked(*it);
1179
+ buffered_requests_.erase(it);
1180
+ }
1181
+ }
1182
+ Unref(DEBUG_LOCATION, "ADS+OnRequestSentLocked");
1183
+ GRPC_ERROR_UNREF(error);
1184
+ }
1185
+
1186
+ void XdsClient::ChannelState::AdsCallState::OnResponseReceived(
1187
+ void* arg, grpc_error* /* error */) {
1188
+ AdsCallState* ads_calld = static_cast<AdsCallState*>(arg);
1189
+ ads_calld->xds_client()->work_serializer_->Run(
1190
+ [ads_calld]() { ads_calld->OnResponseReceivedLocked(); }, DEBUG_LOCATION);
1191
+ }
1192
+
1193
+ void XdsClient::ChannelState::AdsCallState::OnResponseReceivedLocked() {
1194
+ // Empty payload means the call was cancelled.
1195
+ if (!IsCurrentCallOnChannel() || recv_message_payload_ == nullptr) {
1196
+ Unref(DEBUG_LOCATION, "ADS+OnResponseReceivedLocked");
1197
+ return;
1198
+ }
1199
+ // Read the response.
1200
+ grpc_byte_buffer_reader bbr;
1201
+ grpc_byte_buffer_reader_init(&bbr, recv_message_payload_);
1202
+ grpc_slice response_slice = grpc_byte_buffer_reader_readall(&bbr);
1203
+ grpc_byte_buffer_reader_destroy(&bbr);
1204
+ grpc_byte_buffer_destroy(recv_message_payload_);
1205
+ recv_message_payload_ = nullptr;
1206
+ // TODO(juanlishen): When we convert this to use the xds protocol, the
1207
+ // balancer will send us a fallback timeout such that we should go into
1208
+ // fallback mode if we have lost contact with the balancer after a certain
1209
+ // period of time. We will need to save the timeout value here, and then
1210
+ // when the balancer call ends, we will need to start a timer for the
1211
+ // specified period of time, and if the timer fires, we go into fallback
1212
+ // mode. We will also need to cancel the timer when we receive a serverlist
1213
+ // from the balancer.
1214
+ // Parse the response.
1215
+ absl::optional<XdsApi::LdsUpdate> lds_update;
1216
+ absl::optional<XdsApi::RdsUpdate> rds_update;
1217
+ XdsApi::CdsUpdateMap cds_update_map;
1218
+ XdsApi::EdsUpdateMap eds_update_map;
1219
+ std::string version;
1220
+ std::string nonce;
1221
+ std::string type_url;
1222
+ // Note that ParseAdsResponse() also validates the response.
1223
+ grpc_error* parse_error = xds_client()->api_.ParseAdsResponse(
1224
+ response_slice, xds_client()->server_name_,
1225
+ ResourceNamesForRequest(XdsApi::kRdsTypeUrl),
1226
+ ResourceNamesForRequest(XdsApi::kCdsTypeUrl),
1227
+ ResourceNamesForRequest(XdsApi::kEdsTypeUrl), &lds_update, &rds_update,
1228
+ &cds_update_map, &eds_update_map, &version, &nonce, &type_url);
1229
+ grpc_slice_unref_internal(response_slice);
1230
+ if (type_url.empty()) {
1231
+ // Ignore unparsable response.
1232
+ gpr_log(GPR_ERROR,
1233
+ "[xds_client %p] Error parsing ADS response (%s) -- ignoring",
1234
+ xds_client(), grpc_error_string(parse_error));
1235
+ GRPC_ERROR_UNREF(parse_error);
1236
+ } else {
1237
+ // Update nonce.
1238
+ auto& state = state_map_[type_url];
1239
+ state.nonce = std::move(nonce);
1240
+ // NACK or ACK the response.
1241
+ if (parse_error != GRPC_ERROR_NONE) {
1242
+ GRPC_ERROR_UNREF(state.error);
1243
+ state.error = parse_error;
1244
+ // NACK unacceptable update.
1245
+ gpr_log(GPR_ERROR,
1246
+ "[xds_client %p] ADS response invalid for resource type %s "
1247
+ "version %s, will NACK: nonce=%s error=%s",
1248
+ xds_client(), type_url.c_str(), version.c_str(),
1249
+ state.nonce.c_str(), grpc_error_string(parse_error));
1250
+ SendMessageLocked(type_url);
1251
+ } else {
1252
+ seen_response_ = true;
1253
+ // Accept the ADS response according to the type_url.
1254
+ if (type_url == XdsApi::kLdsTypeUrl) {
1255
+ AcceptLdsUpdate(std::move(lds_update));
1256
+ } else if (type_url == XdsApi::kRdsTypeUrl) {
1257
+ AcceptRdsUpdate(std::move(rds_update));
1258
+ } else if (type_url == XdsApi::kCdsTypeUrl) {
1259
+ AcceptCdsUpdate(std::move(cds_update_map));
1260
+ } else if (type_url == XdsApi::kEdsTypeUrl) {
1261
+ AcceptEdsUpdate(std::move(eds_update_map));
1262
+ }
1263
+ state.version = std::move(version);
1264
+ // ACK the update.
1265
+ SendMessageLocked(type_url);
1266
+ // Start load reporting if needed.
1267
+ auto& lrs_call = chand()->lrs_calld_;
1268
+ if (lrs_call != nullptr) {
1269
+ LrsCallState* lrs_calld = lrs_call->calld();
1270
+ if (lrs_calld != nullptr) lrs_calld->MaybeStartReportingLocked();
1271
+ }
1272
+ }
1273
+ }
1274
+ if (xds_client()->shutting_down_) {
1275
+ Unref(DEBUG_LOCATION, "ADS+OnResponseReceivedLocked+xds_shutdown");
1276
+ return;
1277
+ }
1278
+ // Keep listening for updates.
1279
+ grpc_op op;
1280
+ memset(&op, 0, sizeof(op));
1281
+ op.op = GRPC_OP_RECV_MESSAGE;
1282
+ op.data.recv_message.recv_message = &recv_message_payload_;
1283
+ op.flags = 0;
1284
+ op.reserved = nullptr;
1285
+ GPR_ASSERT(call_ != nullptr);
1286
+ // Reuse the "ADS+OnResponseReceivedLocked" ref taken in ctor.
1287
+ const grpc_call_error call_error =
1288
+ grpc_call_start_batch_and_execute(call_, &op, 1, &on_response_received_);
1289
+ GPR_ASSERT(GRPC_CALL_OK == call_error);
1290
+ }
1291
+
1292
+ void XdsClient::ChannelState::AdsCallState::OnStatusReceived(
1293
+ void* arg, grpc_error* error) {
1294
+ AdsCallState* ads_calld = static_cast<AdsCallState*>(arg);
1295
+ GRPC_ERROR_REF(error); // ref owned by lambda
1296
+ ads_calld->xds_client()->work_serializer_->Run(
1297
+ [ads_calld, error]() { ads_calld->OnStatusReceivedLocked(error); },
1298
+ DEBUG_LOCATION);
1299
+ }
1300
+
1301
+ void XdsClient::ChannelState::AdsCallState::OnStatusReceivedLocked(
1302
+ grpc_error* error) {
1303
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
1304
+ char* status_details = grpc_slice_to_c_string(status_details_);
1305
+ gpr_log(GPR_INFO,
1306
+ "[xds_client %p] ADS call status received. Status = %d, details "
1307
+ "= '%s', (chand: %p, ads_calld: %p, call: %p), error '%s'",
1308
+ xds_client(), status_code_, status_details, chand(), this, call_,
1309
+ grpc_error_string(error));
1310
+ gpr_free(status_details);
1311
+ }
1312
+ // Ignore status from a stale call.
1313
+ if (IsCurrentCallOnChannel()) {
1314
+ // Try to restart the call.
1315
+ parent_->OnCallFinishedLocked();
1316
+ // Send error to all watchers.
1317
+ xds_client()->NotifyOnError(
1318
+ GRPC_ERROR_CREATE_FROM_STATIC_STRING("xds call failed"));
1319
+ }
1320
+ Unref(DEBUG_LOCATION, "ADS+OnStatusReceivedLocked");
1321
+ GRPC_ERROR_UNREF(error);
1322
+ }
1323
+
1324
+ bool XdsClient::ChannelState::AdsCallState::IsCurrentCallOnChannel() const {
1325
+ // If the retryable ADS call is null (which only happens when the xds channel
1326
+ // is shutting down), all the ADS calls are stale.
1327
+ if (chand()->ads_calld_ == nullptr) return false;
1328
+ return this == chand()->ads_calld_->calld();
1329
+ }
1330
+
1331
+ std::set<absl::string_view>
1332
+ XdsClient::ChannelState::AdsCallState::ResourceNamesForRequest(
1333
+ const std::string& type_url) {
1334
+ std::set<absl::string_view> resource_names;
1335
+ auto it = state_map_.find(type_url);
1336
+ if (it != state_map_.end()) {
1337
+ for (auto& p : it->second.subscribed_resources) {
1338
+ resource_names.insert(p.first);
1339
+ OrphanablePtr<ResourceState>& state = p.second;
1340
+ state->Start(Ref());
1341
+ }
1342
+ }
1343
+ return resource_names;
1344
+ }
1345
+
1346
+ //
1347
+ // XdsClient::ChannelState::LrsCallState::Reporter
1348
+ //
1349
+
1350
+ void XdsClient::ChannelState::LrsCallState::Reporter::Orphan() {
1351
+ if (next_report_timer_callback_pending_) {
1352
+ grpc_timer_cancel(&next_report_timer_);
1353
+ }
1354
+ }
1355
+
1356
+ void XdsClient::ChannelState::LrsCallState::Reporter::
1357
+ ScheduleNextReportLocked() {
1358
+ const grpc_millis next_report_time = ExecCtx::Get()->Now() + report_interval_;
1359
+ grpc_timer_init(&next_report_timer_, next_report_time,
1360
+ &on_next_report_timer_);
1361
+ next_report_timer_callback_pending_ = true;
1362
+ }
1363
+
1364
+ void XdsClient::ChannelState::LrsCallState::Reporter::OnNextReportTimer(
1365
+ void* arg, grpc_error* error) {
1366
+ Reporter* self = static_cast<Reporter*>(arg);
1367
+ GRPC_ERROR_REF(error); // ref owned by lambda
1368
+ self->xds_client()->work_serializer_->Run(
1369
+ [self, error]() { self->OnNextReportTimerLocked(error); },
1370
+ DEBUG_LOCATION);
1371
+ }
1372
+
1373
+ void XdsClient::ChannelState::LrsCallState::Reporter::OnNextReportTimerLocked(
1374
+ grpc_error* error) {
1375
+ next_report_timer_callback_pending_ = false;
1376
+ if (error != GRPC_ERROR_NONE || !IsCurrentReporterOnCall()) {
1377
+ Unref(DEBUG_LOCATION, "Reporter+timer");
1378
+ } else {
1379
+ SendReportLocked();
1380
+ }
1381
+ GRPC_ERROR_UNREF(error);
1382
+ }
1383
+
1384
+ namespace {
1385
+
1386
+ bool LoadReportCountersAreZero(const XdsApi::ClusterLoadReportMap& snapshot) {
1387
+ for (const auto& p : snapshot) {
1388
+ const XdsApi::ClusterLoadReport& cluster_snapshot = p.second;
1389
+ for (const auto& q : cluster_snapshot.dropped_requests) {
1390
+ if (q.second > 0) return false;
1391
+ }
1392
+ for (const auto& q : cluster_snapshot.locality_stats) {
1393
+ const XdsClusterLocalityStats::Snapshot& locality_snapshot = q.second;
1394
+ if (!locality_snapshot.IsZero()) return false;
1395
+ }
1396
+ }
1397
+ return true;
1398
+ }
1399
+
1400
+ } // namespace
1401
+
1402
+ void XdsClient::ChannelState::LrsCallState::Reporter::SendReportLocked() {
1403
+ // Construct snapshot from all reported stats.
1404
+ XdsApi::ClusterLoadReportMap snapshot = xds_client()->BuildLoadReportSnapshot(
1405
+ parent_->send_all_clusters_, parent_->cluster_names_);
1406
+ // Skip client load report if the counters were all zero in the last
1407
+ // report and they are still zero in this one.
1408
+ const bool old_val = last_report_counters_were_zero_;
1409
+ last_report_counters_were_zero_ = LoadReportCountersAreZero(snapshot);
1410
+ if (old_val && last_report_counters_were_zero_) {
1411
+ ScheduleNextReportLocked();
1412
+ return;
1413
+ }
1414
+ // Create a request that contains the snapshot.
1415
+ grpc_slice request_payload_slice =
1416
+ xds_client()->api_.CreateLrsRequest(std::move(snapshot));
1417
+ parent_->send_message_payload_ =
1418
+ grpc_raw_byte_buffer_create(&request_payload_slice, 1);
1419
+ grpc_slice_unref_internal(request_payload_slice);
1420
+ // Send the report.
1421
+ grpc_op op;
1422
+ memset(&op, 0, sizeof(op));
1423
+ op.op = GRPC_OP_SEND_MESSAGE;
1424
+ op.data.send_message.send_message = parent_->send_message_payload_;
1425
+ grpc_call_error call_error = grpc_call_start_batch_and_execute(
1426
+ parent_->call_, &op, 1, &on_report_done_);
1427
+ if (GPR_UNLIKELY(call_error != GRPC_CALL_OK)) {
1428
+ gpr_log(GPR_ERROR,
1429
+ "[xds_client %p] calld=%p call_error=%d sending client load report",
1430
+ xds_client(), this, call_error);
1431
+ GPR_ASSERT(GRPC_CALL_OK == call_error);
1432
+ }
1433
+ }
1434
+
1435
+ void XdsClient::ChannelState::LrsCallState::Reporter::OnReportDone(
1436
+ void* arg, grpc_error* error) {
1437
+ Reporter* self = static_cast<Reporter*>(arg);
1438
+ GRPC_ERROR_REF(error); // ref owned by lambda
1439
+ self->xds_client()->work_serializer_->Run(
1440
+ [self, error]() { self->OnReportDoneLocked(error); }, DEBUG_LOCATION);
1441
+ }
1442
+
1443
+ void XdsClient::ChannelState::LrsCallState::Reporter::OnReportDoneLocked(
1444
+ grpc_error* error) {
1445
+ grpc_byte_buffer_destroy(parent_->send_message_payload_);
1446
+ parent_->send_message_payload_ = nullptr;
1447
+ // If there are no more registered stats to report, cancel the call.
1448
+ if (xds_client()->load_report_map_.empty()) {
1449
+ parent_->chand()->StopLrsCall();
1450
+ Unref(DEBUG_LOCATION, "Reporter+report_done+no_more_reporters");
1451
+ return;
1452
+ }
1453
+ if (error != GRPC_ERROR_NONE || !IsCurrentReporterOnCall()) {
1454
+ // If this reporter is no longer the current one on the call, the reason
1455
+ // might be that it was orphaned for a new one due to config update.
1456
+ if (!IsCurrentReporterOnCall()) {
1457
+ parent_->MaybeStartReportingLocked();
1458
+ }
1459
+ Unref(DEBUG_LOCATION, "Reporter+report_done");
1460
+ } else {
1461
+ ScheduleNextReportLocked();
1462
+ }
1463
+ GRPC_ERROR_UNREF(error);
1464
+ }
1465
+
1466
+ //
1467
+ // XdsClient::ChannelState::LrsCallState
1468
+ //
1469
+
1470
+ XdsClient::ChannelState::LrsCallState::LrsCallState(
1471
+ RefCountedPtr<RetryableCall<LrsCallState>> parent)
1472
+ : InternallyRefCounted<LrsCallState>(&grpc_xds_client_trace),
1473
+ parent_(std::move(parent)) {
1474
+ // Init the LRS call. Note that the call will progress every time there's
1475
+ // activity in xds_client()->interested_parties_, which is comprised of
1476
+ // the polling entities from client_channel.
1477
+ GPR_ASSERT(xds_client() != nullptr);
1478
+ GPR_ASSERT(!xds_client()->server_name_.empty());
1479
+ call_ = grpc_channel_create_pollset_set_call(
1480
+ chand()->channel_, nullptr, GRPC_PROPAGATE_DEFAULTS,
1481
+ xds_client()->interested_parties_,
1482
+ GRPC_MDSTR_SLASH_ENVOY_DOT_SERVICE_DOT_LOAD_STATS_DOT_V2_DOT_LOADREPORTINGSERVICE_SLASH_STREAMLOADSTATS,
1483
+ nullptr, GRPC_MILLIS_INF_FUTURE, nullptr);
1484
+ GPR_ASSERT(call_ != nullptr);
1485
+ // Init the request payload.
1486
+ grpc_slice request_payload_slice =
1487
+ xds_client()->api_.CreateLrsInitialRequest(xds_client()->server_name_);
1488
+ send_message_payload_ =
1489
+ grpc_raw_byte_buffer_create(&request_payload_slice, 1);
1490
+ grpc_slice_unref_internal(request_payload_slice);
1491
+ // Init other data associated with the LRS call.
1492
+ grpc_metadata_array_init(&initial_metadata_recv_);
1493
+ grpc_metadata_array_init(&trailing_metadata_recv_);
1494
+ // Start the call.
1495
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
1496
+ gpr_log(GPR_INFO,
1497
+ "[xds_client %p] Starting LRS call (chand: %p, calld: %p, "
1498
+ "call: %p)",
1499
+ xds_client(), chand(), this, call_);
1500
+ }
1501
+ // Create the ops.
1502
+ grpc_call_error call_error;
1503
+ grpc_op ops[3];
1504
+ memset(ops, 0, sizeof(ops));
1505
+ // Op: send initial metadata.
1506
+ grpc_op* op = ops;
1507
+ op->op = GRPC_OP_SEND_INITIAL_METADATA;
1508
+ op->data.send_initial_metadata.count = 0;
1509
+ op->flags = GRPC_INITIAL_METADATA_WAIT_FOR_READY |
1510
+ GRPC_INITIAL_METADATA_WAIT_FOR_READY_EXPLICITLY_SET;
1511
+ op->reserved = nullptr;
1512
+ op++;
1513
+ // Op: send request message.
1514
+ GPR_ASSERT(send_message_payload_ != nullptr);
1515
+ op->op = GRPC_OP_SEND_MESSAGE;
1516
+ op->data.send_message.send_message = send_message_payload_;
1517
+ op->flags = 0;
1518
+ op->reserved = nullptr;
1519
+ op++;
1520
+ Ref(DEBUG_LOCATION, "LRS+OnInitialRequestSentLocked").release();
1521
+ GRPC_CLOSURE_INIT(&on_initial_request_sent_, OnInitialRequestSent, this,
1522
+ grpc_schedule_on_exec_ctx);
1523
+ call_error = grpc_call_start_batch_and_execute(call_, ops, (size_t)(op - ops),
1524
+ &on_initial_request_sent_);
1525
+ GPR_ASSERT(GRPC_CALL_OK == call_error);
1526
+ // Op: recv initial metadata.
1527
+ op = ops;
1528
+ op->op = GRPC_OP_RECV_INITIAL_METADATA;
1529
+ op->data.recv_initial_metadata.recv_initial_metadata =
1530
+ &initial_metadata_recv_;
1531
+ op->flags = 0;
1532
+ op->reserved = nullptr;
1533
+ op++;
1534
+ // Op: recv response.
1535
+ op->op = GRPC_OP_RECV_MESSAGE;
1536
+ op->data.recv_message.recv_message = &recv_message_payload_;
1537
+ op->flags = 0;
1538
+ op->reserved = nullptr;
1539
+ op++;
1540
+ Ref(DEBUG_LOCATION, "LRS+OnResponseReceivedLocked").release();
1541
+ GRPC_CLOSURE_INIT(&on_response_received_, OnResponseReceived, this,
1542
+ grpc_schedule_on_exec_ctx);
1543
+ call_error = grpc_call_start_batch_and_execute(call_, ops, (size_t)(op - ops),
1544
+ &on_response_received_);
1545
+ GPR_ASSERT(GRPC_CALL_OK == call_error);
1546
+ // Op: recv server status.
1547
+ op = ops;
1548
+ op->op = GRPC_OP_RECV_STATUS_ON_CLIENT;
1549
+ op->data.recv_status_on_client.trailing_metadata = &trailing_metadata_recv_;
1550
+ op->data.recv_status_on_client.status = &status_code_;
1551
+ op->data.recv_status_on_client.status_details = &status_details_;
1552
+ op->flags = 0;
1553
+ op->reserved = nullptr;
1554
+ op++;
1555
+ // This callback signals the end of the call, so it relies on the initial
1556
+ // ref instead of a new ref. When it's invoked, it's the initial ref that is
1557
+ // unreffed.
1558
+ GRPC_CLOSURE_INIT(&on_status_received_, OnStatusReceived, this,
1559
+ grpc_schedule_on_exec_ctx);
1560
+ call_error = grpc_call_start_batch_and_execute(call_, ops, (size_t)(op - ops),
1561
+ &on_status_received_);
1562
+ GPR_ASSERT(GRPC_CALL_OK == call_error);
1563
+ }
1564
+
1565
+ XdsClient::ChannelState::LrsCallState::~LrsCallState() {
1566
+ grpc_metadata_array_destroy(&initial_metadata_recv_);
1567
+ grpc_metadata_array_destroy(&trailing_metadata_recv_);
1568
+ grpc_byte_buffer_destroy(send_message_payload_);
1569
+ grpc_byte_buffer_destroy(recv_message_payload_);
1570
+ grpc_slice_unref_internal(status_details_);
1571
+ GPR_ASSERT(call_ != nullptr);
1572
+ grpc_call_unref(call_);
1573
+ }
1574
+
1575
+ void XdsClient::ChannelState::LrsCallState::Orphan() {
1576
+ reporter_.reset();
1577
+ GPR_ASSERT(call_ != nullptr);
1578
+ // If we are here because xds_client wants to cancel the call,
1579
+ // on_status_received_ will complete the cancellation and clean up. Otherwise,
1580
+ // we are here because xds_client has to orphan a failed call, then the
1581
+ // following cancellation will be a no-op.
1582
+ grpc_call_cancel(call_, nullptr);
1583
+ // Note that the initial ref is hold by on_status_received_. So the
1584
+ // corresponding unref happens in on_status_received_ instead of here.
1585
+ }
1586
+
1587
+ void XdsClient::ChannelState::LrsCallState::MaybeStartReportingLocked() {
1588
+ // Don't start again if already started.
1589
+ if (reporter_ != nullptr) return;
1590
+ // Don't start if the previous send_message op (of the initial request or the
1591
+ // last report of the previous reporter) hasn't completed.
1592
+ if (send_message_payload_ != nullptr) return;
1593
+ // Don't start if no LRS response has arrived.
1594
+ if (!seen_response()) return;
1595
+ // Don't start if the ADS call hasn't received any valid response. Note that
1596
+ // this must be the first channel because it is the current channel but its
1597
+ // ADS call hasn't seen any response.
1598
+ if (chand()->ads_calld_ == nullptr ||
1599
+ chand()->ads_calld_->calld() == nullptr ||
1600
+ !chand()->ads_calld_->calld()->seen_response()) {
1601
+ return;
1602
+ }
1603
+ // Start reporting.
1604
+ reporter_ = MakeOrphanable<Reporter>(
1605
+ Ref(DEBUG_LOCATION, "LRS+load_report+start"), load_reporting_interval_);
1606
+ }
1607
+
1608
+ void XdsClient::ChannelState::LrsCallState::OnInitialRequestSent(
1609
+ void* arg, grpc_error* /*error*/) {
1610
+ LrsCallState* lrs_calld = static_cast<LrsCallState*>(arg);
1611
+ lrs_calld->xds_client()->work_serializer_->Run(
1612
+ [lrs_calld]() { lrs_calld->OnInitialRequestSentLocked(); },
1613
+ DEBUG_LOCATION);
1614
+ }
1615
+
1616
+ void XdsClient::ChannelState::LrsCallState::OnInitialRequestSentLocked() {
1617
+ // Clear the send_message_payload_.
1618
+ grpc_byte_buffer_destroy(send_message_payload_);
1619
+ send_message_payload_ = nullptr;
1620
+ MaybeStartReportingLocked();
1621
+ Unref(DEBUG_LOCATION, "LRS+OnInitialRequestSentLocked");
1622
+ }
1623
+
1624
+ void XdsClient::ChannelState::LrsCallState::OnResponseReceived(
1625
+ void* arg, grpc_error* /*error*/) {
1626
+ LrsCallState* lrs_calld = static_cast<LrsCallState*>(arg);
1627
+ lrs_calld->xds_client()->work_serializer_->Run(
1628
+ [lrs_calld]() { lrs_calld->OnResponseReceivedLocked(); }, DEBUG_LOCATION);
1629
+ }
1630
+
1631
+ void XdsClient::ChannelState::LrsCallState::OnResponseReceivedLocked() {
1632
+ // Empty payload means the call was cancelled.
1633
+ if (!IsCurrentCallOnChannel() || recv_message_payload_ == nullptr) {
1634
+ Unref(DEBUG_LOCATION, "LRS+OnResponseReceivedLocked");
1635
+ return;
1636
+ }
1637
+ // Read the response.
1638
+ grpc_byte_buffer_reader bbr;
1639
+ grpc_byte_buffer_reader_init(&bbr, recv_message_payload_);
1640
+ grpc_slice response_slice = grpc_byte_buffer_reader_readall(&bbr);
1641
+ grpc_byte_buffer_reader_destroy(&bbr);
1642
+ grpc_byte_buffer_destroy(recv_message_payload_);
1643
+ recv_message_payload_ = nullptr;
1644
+ // This anonymous lambda is a hack to avoid the usage of goto.
1645
+ [&]() {
1646
+ // Parse the response.
1647
+ bool send_all_clusters = false;
1648
+ std::set<std::string> new_cluster_names;
1649
+ grpc_millis new_load_reporting_interval;
1650
+ grpc_error* parse_error = xds_client()->api_.ParseLrsResponse(
1651
+ response_slice, &send_all_clusters, &new_cluster_names,
1652
+ &new_load_reporting_interval);
1653
+ if (parse_error != GRPC_ERROR_NONE) {
1654
+ gpr_log(GPR_ERROR,
1655
+ "[xds_client %p] LRS response parsing failed. error=%s",
1656
+ xds_client(), grpc_error_string(parse_error));
1657
+ GRPC_ERROR_UNREF(parse_error);
1658
+ return;
1659
+ }
1660
+ seen_response_ = true;
1661
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
1662
+ gpr_log(
1663
+ GPR_INFO,
1664
+ "[xds_client %p] LRS response received, %" PRIuPTR
1665
+ " cluster names, send_all_clusters=%d, load_report_interval=%" PRId64
1666
+ "ms",
1667
+ xds_client(), new_cluster_names.size(), send_all_clusters,
1668
+ new_load_reporting_interval);
1669
+ size_t i = 0;
1670
+ for (const auto& name : new_cluster_names) {
1671
+ gpr_log(GPR_INFO, "[xds_client %p] cluster_name %" PRIuPTR ": %s",
1672
+ xds_client(), i++, name.c_str());
1673
+ }
1674
+ }
1675
+ if (new_load_reporting_interval <
1676
+ GRPC_XDS_MIN_CLIENT_LOAD_REPORTING_INTERVAL_MS) {
1677
+ new_load_reporting_interval =
1678
+ GRPC_XDS_MIN_CLIENT_LOAD_REPORTING_INTERVAL_MS;
1679
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
1680
+ gpr_log(GPR_INFO,
1681
+ "[xds_client %p] Increased load_report_interval to minimum "
1682
+ "value %dms",
1683
+ xds_client(), GRPC_XDS_MIN_CLIENT_LOAD_REPORTING_INTERVAL_MS);
1684
+ }
1685
+ }
1686
+ // Ignore identical update.
1687
+ if (send_all_clusters == send_all_clusters_ &&
1688
+ cluster_names_ == new_cluster_names &&
1689
+ load_reporting_interval_ == new_load_reporting_interval) {
1690
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
1691
+ gpr_log(GPR_INFO,
1692
+ "[xds_client %p] Incoming LRS response identical to current, "
1693
+ "ignoring.",
1694
+ xds_client());
1695
+ }
1696
+ return;
1697
+ }
1698
+ // Stop current load reporting (if any) to adopt the new config.
1699
+ reporter_.reset();
1700
+ // Record the new config.
1701
+ send_all_clusters_ = send_all_clusters;
1702
+ cluster_names_ = std::move(new_cluster_names);
1703
+ load_reporting_interval_ = new_load_reporting_interval;
1704
+ // Try starting sending load report.
1705
+ MaybeStartReportingLocked();
1706
+ }();
1707
+ grpc_slice_unref_internal(response_slice);
1708
+ if (xds_client()->shutting_down_) {
1709
+ Unref(DEBUG_LOCATION, "LRS+OnResponseReceivedLocked+xds_shutdown");
1710
+ return;
1711
+ }
1712
+ // Keep listening for LRS config updates.
1713
+ grpc_op op;
1714
+ memset(&op, 0, sizeof(op));
1715
+ op.op = GRPC_OP_RECV_MESSAGE;
1716
+ op.data.recv_message.recv_message = &recv_message_payload_;
1717
+ op.flags = 0;
1718
+ op.reserved = nullptr;
1719
+ GPR_ASSERT(call_ != nullptr);
1720
+ // Reuse the "OnResponseReceivedLocked" ref taken in ctor.
1721
+ const grpc_call_error call_error =
1722
+ grpc_call_start_batch_and_execute(call_, &op, 1, &on_response_received_);
1723
+ GPR_ASSERT(GRPC_CALL_OK == call_error);
1724
+ }
1725
+
1726
+ void XdsClient::ChannelState::LrsCallState::OnStatusReceived(
1727
+ void* arg, grpc_error* error) {
1728
+ LrsCallState* lrs_calld = static_cast<LrsCallState*>(arg);
1729
+ GRPC_ERROR_REF(error); // ref owned by lambda
1730
+ lrs_calld->xds_client()->work_serializer_->Run(
1731
+ [lrs_calld, error]() { lrs_calld->OnStatusReceivedLocked(error); },
1732
+ DEBUG_LOCATION);
1733
+ }
1734
+
1735
+ void XdsClient::ChannelState::LrsCallState::OnStatusReceivedLocked(
1736
+ grpc_error* error) {
1737
+ GPR_ASSERT(call_ != nullptr);
1738
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
1739
+ char* status_details = grpc_slice_to_c_string(status_details_);
1740
+ gpr_log(GPR_INFO,
1741
+ "[xds_client %p] LRS call status received. Status = %d, details "
1742
+ "= '%s', (chand: %p, calld: %p, call: %p), error '%s'",
1743
+ xds_client(), status_code_, status_details, chand(), this, call_,
1744
+ grpc_error_string(error));
1745
+ gpr_free(status_details);
1746
+ }
1747
+ // Ignore status from a stale call.
1748
+ if (IsCurrentCallOnChannel()) {
1749
+ GPR_ASSERT(!xds_client()->shutting_down_);
1750
+ // Try to restart the call.
1751
+ parent_->OnCallFinishedLocked();
1752
+ }
1753
+ Unref(DEBUG_LOCATION, "LRS+OnStatusReceivedLocked");
1754
+ GRPC_ERROR_UNREF(error);
1755
+ }
1756
+
1757
+ bool XdsClient::ChannelState::LrsCallState::IsCurrentCallOnChannel() const {
1758
+ // If the retryable LRS call is null (which only happens when the xds channel
1759
+ // is shutting down), all the LRS calls are stale.
1760
+ if (chand()->lrs_calld_ == nullptr) return false;
1761
+ return this == chand()->lrs_calld_->calld();
1762
+ }
1763
+
1764
+ //
1765
+ // XdsClient
1766
+ //
1767
+
1768
+ namespace {
1769
+
1770
+ grpc_millis GetRequestTimeout(const grpc_channel_args& args) {
1771
+ return grpc_channel_args_find_integer(
1772
+ &args, GRPC_ARG_XDS_RESOURCE_DOES_NOT_EXIST_TIMEOUT_MS,
1773
+ {15000, 0, INT_MAX});
1774
+ }
1775
+
1776
+ } // namespace
1777
+
1778
+ XdsClient::XdsClient(std::shared_ptr<WorkSerializer> work_serializer,
1779
+ grpc_pollset_set* interested_parties,
1780
+ absl::string_view server_name,
1781
+ std::unique_ptr<ServiceConfigWatcherInterface> watcher,
1782
+ const grpc_channel_args& channel_args, grpc_error** error)
1783
+ : InternallyRefCounted<XdsClient>(&grpc_xds_client_trace),
1784
+ request_timeout_(GetRequestTimeout(channel_args)),
1785
+ work_serializer_(std::move(work_serializer)),
1786
+ interested_parties_(interested_parties),
1787
+ bootstrap_(
1788
+ XdsBootstrap::ReadFromFile(this, &grpc_xds_client_trace, error)),
1789
+ api_(this, &grpc_xds_client_trace,
1790
+ bootstrap_ == nullptr ? nullptr : bootstrap_->node()),
1791
+ server_name_(server_name),
1792
+ service_config_watcher_(std::move(watcher)) {
1793
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
1794
+ gpr_log(GPR_INFO, "[xds_client %p] creating xds client", this);
1795
+ }
1796
+ if (*error != GRPC_ERROR_NONE) {
1797
+ gpr_log(GPR_ERROR, "[xds_client %p] failed to read bootstrap file: %s",
1798
+ this, grpc_error_string(*error));
1799
+ return;
1800
+ }
1801
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
1802
+ gpr_log(GPR_INFO, "[xds_client %p] creating channel to %s", this,
1803
+ bootstrap_->server().server_uri.c_str());
1804
+ }
1805
+ grpc_channel_args* new_args = BuildXdsChannelArgs(channel_args);
1806
+ grpc_channel* channel = CreateXdsChannel(*bootstrap_, *new_args, error);
1807
+ grpc_channel_args_destroy(new_args);
1808
+ if (*error != GRPC_ERROR_NONE) {
1809
+ gpr_log(GPR_ERROR, "[xds_client %p] failed to create xds channel: %s", this,
1810
+ grpc_error_string(*error));
1811
+ return;
1812
+ }
1813
+ chand_ = MakeOrphanable<ChannelState>(
1814
+ Ref(DEBUG_LOCATION, "XdsClient+ChannelState"), channel);
1815
+ if (service_config_watcher_ != nullptr) {
1816
+ chand_->Subscribe(XdsApi::kLdsTypeUrl, std::string(server_name));
1817
+ }
1818
+ }
1819
+
1820
+ XdsClient::~XdsClient() {
1821
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
1822
+ gpr_log(GPR_INFO, "[xds_client %p] destroying xds client", this);
1823
+ }
1824
+ }
1825
+
1826
+ void XdsClient::Orphan() {
1827
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
1828
+ gpr_log(GPR_INFO, "[xds_client %p] shutting down xds client", this);
1829
+ }
1830
+ shutting_down_ = true;
1831
+ chand_.reset();
1832
+ // We do not clear cluster_map_ and endpoint_map_ if the xds client was
1833
+ // created by the XdsResolver because the maps contain refs for watchers which
1834
+ // in turn hold refs to the loadbalancing policies. At this point, it is
1835
+ // possible for ADS calls to be in progress. Unreffing the loadbalancing
1836
+ // policies before those calls are done would lead to issues such as
1837
+ // https://github.com/grpc/grpc/issues/20928.
1838
+ if (service_config_watcher_ != nullptr) {
1839
+ cluster_map_.clear();
1840
+ endpoint_map_.clear();
1841
+ }
1842
+ Unref(DEBUG_LOCATION, "XdsClient::Orphan()");
1843
+ }
1844
+
1845
+ void XdsClient::WatchClusterData(
1846
+ absl::string_view cluster_name,
1847
+ std::unique_ptr<ClusterWatcherInterface> watcher) {
1848
+ std::string cluster_name_str = std::string(cluster_name);
1849
+ ClusterState& cluster_state = cluster_map_[cluster_name_str];
1850
+ ClusterWatcherInterface* w = watcher.get();
1851
+ cluster_state.watchers[w] = std::move(watcher);
1852
+ // If we've already received an CDS update, notify the new watcher
1853
+ // immediately.
1854
+ if (cluster_state.update.has_value()) {
1855
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
1856
+ gpr_log(GPR_INFO, "[xds_client %p] returning cached cluster data for %s",
1857
+ this, cluster_name_str.c_str());
1858
+ }
1859
+ w->OnClusterChanged(cluster_state.update.value());
1860
+ }
1861
+ chand_->Subscribe(XdsApi::kCdsTypeUrl, cluster_name_str);
1862
+ }
1863
+
1864
+ void XdsClient::CancelClusterDataWatch(absl::string_view cluster_name,
1865
+ ClusterWatcherInterface* watcher,
1866
+ bool delay_unsubscription) {
1867
+ if (shutting_down_) return;
1868
+ std::string cluster_name_str = std::string(cluster_name);
1869
+ ClusterState& cluster_state = cluster_map_[cluster_name_str];
1870
+ auto it = cluster_state.watchers.find(watcher);
1871
+ if (it != cluster_state.watchers.end()) {
1872
+ cluster_state.watchers.erase(it);
1873
+ if (cluster_state.watchers.empty()) {
1874
+ cluster_map_.erase(cluster_name_str);
1875
+ chand_->Unsubscribe(XdsApi::kCdsTypeUrl, cluster_name_str,
1876
+ delay_unsubscription);
1877
+ }
1878
+ }
1879
+ }
1880
+
1881
+ void XdsClient::WatchEndpointData(
1882
+ absl::string_view eds_service_name,
1883
+ std::unique_ptr<EndpointWatcherInterface> watcher) {
1884
+ std::string eds_service_name_str = std::string(eds_service_name);
1885
+ EndpointState& endpoint_state = endpoint_map_[eds_service_name_str];
1886
+ EndpointWatcherInterface* w = watcher.get();
1887
+ endpoint_state.watchers[w] = std::move(watcher);
1888
+ // If we've already received an EDS update, notify the new watcher
1889
+ // immediately.
1890
+ if (endpoint_state.update.has_value()) {
1891
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
1892
+ gpr_log(GPR_INFO, "[xds_client %p] returning cached endpoint data for %s",
1893
+ this, eds_service_name_str.c_str());
1894
+ }
1895
+ w->OnEndpointChanged(endpoint_state.update.value());
1896
+ }
1897
+ chand_->Subscribe(XdsApi::kEdsTypeUrl, eds_service_name_str);
1898
+ }
1899
+
1900
+ void XdsClient::CancelEndpointDataWatch(absl::string_view eds_service_name,
1901
+ EndpointWatcherInterface* watcher,
1902
+ bool delay_unsubscription) {
1903
+ if (shutting_down_) return;
1904
+ std::string eds_service_name_str = std::string(eds_service_name);
1905
+ EndpointState& endpoint_state = endpoint_map_[eds_service_name_str];
1906
+ auto it = endpoint_state.watchers.find(watcher);
1907
+ if (it != endpoint_state.watchers.end()) {
1908
+ endpoint_state.watchers.erase(it);
1909
+ if (endpoint_state.watchers.empty()) {
1910
+ endpoint_map_.erase(eds_service_name_str);
1911
+ chand_->Unsubscribe(XdsApi::kEdsTypeUrl, eds_service_name_str,
1912
+ delay_unsubscription);
1913
+ }
1914
+ }
1915
+ }
1916
+
1917
+ RefCountedPtr<XdsClusterDropStats> XdsClient::AddClusterDropStats(
1918
+ absl::string_view lrs_server, absl::string_view cluster_name,
1919
+ absl::string_view eds_service_name) {
1920
+ // TODO(roth): When we add support for direct federation, use the
1921
+ // server name specified in lrs_server.
1922
+ auto key =
1923
+ std::make_pair(std::string(cluster_name), std::string(eds_service_name));
1924
+ // We jump through some hoops here to make sure that the absl::string_views
1925
+ // stored in the XdsClusterDropStats object point to the strings
1926
+ // in the load_report_map_ key, so that they have the same lifetime.
1927
+ auto it = load_report_map_
1928
+ .emplace(std::make_pair(std::move(key), LoadReportState()))
1929
+ .first;
1930
+ auto cluster_drop_stats = MakeRefCounted<XdsClusterDropStats>(
1931
+ Ref(DEBUG_LOCATION, "DropStats"), lrs_server,
1932
+ it->first.first /*cluster_name*/, it->first.second /*eds_service_name*/);
1933
+ it->second.drop_stats.insert(cluster_drop_stats.get());
1934
+ chand_->MaybeStartLrsCall();
1935
+ return cluster_drop_stats;
1936
+ }
1937
+
1938
+ void XdsClient::RemoveClusterDropStats(
1939
+ absl::string_view /*lrs_server*/, absl::string_view cluster_name,
1940
+ absl::string_view eds_service_name,
1941
+ XdsClusterDropStats* cluster_drop_stats) {
1942
+ auto load_report_it = load_report_map_.find(
1943
+ std::make_pair(std::string(cluster_name), std::string(eds_service_name)));
1944
+ if (load_report_it == load_report_map_.end()) return;
1945
+ LoadReportState& load_report_state = load_report_it->second;
1946
+ // TODO(roth): When we add support for direct federation, use the
1947
+ // server name specified in lrs_server.
1948
+ auto it = load_report_state.drop_stats.find(cluster_drop_stats);
1949
+ if (it != load_report_state.drop_stats.end()) {
1950
+ // Record final drop stats in deleted_drop_stats, which will be
1951
+ // added to the next load report.
1952
+ for (const auto& p : cluster_drop_stats->GetSnapshotAndReset()) {
1953
+ load_report_state.deleted_drop_stats[p.first] += p.second;
1954
+ }
1955
+ load_report_state.drop_stats.erase(it);
1956
+ }
1957
+ }
1958
+
1959
+ RefCountedPtr<XdsClusterLocalityStats> XdsClient::AddClusterLocalityStats(
1960
+ absl::string_view lrs_server, absl::string_view cluster_name,
1961
+ absl::string_view eds_service_name,
1962
+ RefCountedPtr<XdsLocalityName> locality) {
1963
+ // TODO(roth): When we add support for direct federation, use the
1964
+ // server name specified in lrs_server.
1965
+ auto key =
1966
+ std::make_pair(std::string(cluster_name), std::string(eds_service_name));
1967
+ // We jump through some hoops here to make sure that the absl::string_views
1968
+ // stored in the XdsClusterLocalityStats object point to the strings
1969
+ // in the load_report_map_ key, so that they have the same lifetime.
1970
+ auto it = load_report_map_
1971
+ .emplace(std::make_pair(std::move(key), LoadReportState()))
1972
+ .first;
1973
+ auto cluster_locality_stats = MakeRefCounted<XdsClusterLocalityStats>(
1974
+ Ref(DEBUG_LOCATION, "LocalityStats"), lrs_server,
1975
+ it->first.first /*cluster_name*/, it->first.second /*eds_service_name*/,
1976
+ locality);
1977
+ it->second.locality_stats[std::move(locality)].locality_stats.insert(
1978
+ cluster_locality_stats.get());
1979
+ chand_->MaybeStartLrsCall();
1980
+ return cluster_locality_stats;
1981
+ }
1982
+
1983
+ void XdsClient::RemoveClusterLocalityStats(
1984
+ absl::string_view /*lrs_server*/, absl::string_view cluster_name,
1985
+ absl::string_view eds_service_name,
1986
+ const RefCountedPtr<XdsLocalityName>& locality,
1987
+ XdsClusterLocalityStats* cluster_locality_stats) {
1988
+ auto load_report_it = load_report_map_.find(
1989
+ std::make_pair(std::string(cluster_name), std::string(eds_service_name)));
1990
+ if (load_report_it == load_report_map_.end()) return;
1991
+ LoadReportState& load_report_state = load_report_it->second;
1992
+ // TODO(roth): When we add support for direct federation, use the
1993
+ // server name specified in lrs_server.
1994
+ auto locality_it = load_report_state.locality_stats.find(locality);
1995
+ if (locality_it == load_report_state.locality_stats.end()) return;
1996
+ auto& locality_set = locality_it->second.locality_stats;
1997
+ auto it = locality_set.find(cluster_locality_stats);
1998
+ if (it != locality_set.end()) {
1999
+ // Record final snapshot in deleted_locality_stats, which will be
2000
+ // added to the next load report.
2001
+ locality_it->second.deleted_locality_stats.emplace_back(
2002
+ cluster_locality_stats->GetSnapshotAndReset());
2003
+ locality_set.erase(it);
2004
+ }
2005
+ }
2006
+
2007
+ void XdsClient::ResetBackoff() {
2008
+ if (chand_ != nullptr) {
2009
+ grpc_channel_reset_connect_backoff(chand_->channel());
2010
+ }
2011
+ }
2012
+
2013
+ namespace {
2014
+ std::string CreateServiceConfigActionCluster(const std::string& cluster_name) {
2015
+ return absl::StrFormat(
2016
+ " \"cds:%s\":{\n"
2017
+ " \"childPolicy\":[ {\n"
2018
+ " \"cds_experimental\":{\n"
2019
+ " \"cluster\": \"%s\"\n"
2020
+ " }\n"
2021
+ " } ]\n"
2022
+ " }",
2023
+ cluster_name, cluster_name);
2024
+ }
2025
+
2026
+ std::string CreateServiceConfigRoute(const std::string& action_name,
2027
+ const std::string& service,
2028
+ const std::string& method) {
2029
+ return absl::StrFormat(
2030
+ " { \n"
2031
+ " \"methodName\": {\n"
2032
+ " \"service\": \"%s\",\n"
2033
+ " \"method\": \"%s\"\n"
2034
+ " },\n"
2035
+ " \"action\": \"%s\"\n"
2036
+ " }",
2037
+ service, method, action_name);
2038
+ }
2039
+
2040
+ // Create the service config for one weighted cluster.
2041
+ std::string CreateServiceConfigActionWeightedCluster(
2042
+ const std::string& name,
2043
+ const std::vector<XdsApi::RdsUpdate::RdsRoute::ClusterWeight>& clusters) {
2044
+ std::vector<std::string> config_parts;
2045
+ config_parts.push_back(
2046
+ absl::StrFormat(" \"weighted:%s\":{\n"
2047
+ " \"childPolicy\":[ {\n"
2048
+ " \"weighted_target_experimental\":{\n"
2049
+ " \"targets\":{\n",
2050
+ name));
2051
+ std::vector<std::string> weighted_targets;
2052
+ weighted_targets.reserve(clusters.size());
2053
+ for (const auto& cluster_weight : clusters) {
2054
+ weighted_targets.push_back(absl::StrFormat(
2055
+ " \"%s\":{\n"
2056
+ " \"weight\":%d,\n"
2057
+ " \"childPolicy\":[ {\n"
2058
+ " \"cds_experimental\":{\n"
2059
+ " \"cluster\": \"%s\"\n"
2060
+ " }\n"
2061
+ " } ]\n"
2062
+ " }",
2063
+ cluster_weight.name, cluster_weight.weight, cluster_weight.name));
2064
+ }
2065
+ config_parts.push_back(absl::StrJoin(weighted_targets, ",\n"));
2066
+ config_parts.push_back(
2067
+ " }\n"
2068
+ " }\n"
2069
+ " } ]\n"
2070
+ " }");
2071
+ return absl::StrJoin(config_parts, "");
2072
+ }
2073
+
2074
+ struct WeightedClustersKeys {
2075
+ std::string cluster_names_key;
2076
+ std::string cluster_weights_key;
2077
+ };
2078
+
2079
+ // Returns the cluster names and weights key or the cluster names only key.
2080
+ WeightedClustersKeys GetWeightedClustersKey(
2081
+ const std::vector<XdsApi::RdsUpdate::RdsRoute::ClusterWeight>&
2082
+ weighted_clusters) {
2083
+ std::set<std::string> cluster_names;
2084
+ std::set<std::string> cluster_weights;
2085
+ for (const auto& cluster_weight : weighted_clusters) {
2086
+ cluster_names.emplace(absl::StrFormat("%s", cluster_weight.name));
2087
+ cluster_weights.emplace(
2088
+ absl::StrFormat("%s_%d", cluster_weight.name, cluster_weight.weight));
2089
+ }
2090
+ return {absl::StrJoin(cluster_names, "_"),
2091
+ absl::StrJoin(cluster_weights, "_")};
2092
+ }
2093
+
2094
+ } // namespace
2095
+
2096
+ std::string XdsClient::WeightedClustersActionName(
2097
+ const std::vector<XdsApi::RdsUpdate::RdsRoute::ClusterWeight>&
2098
+ weighted_clusters) {
2099
+ WeightedClustersKeys keys = GetWeightedClustersKey(weighted_clusters);
2100
+ auto cluster_names_map_it =
2101
+ weighted_cluster_index_map_.find(keys.cluster_names_key);
2102
+ GPR_ASSERT(cluster_names_map_it != weighted_cluster_index_map_.end());
2103
+ const auto& cluster_weights_map =
2104
+ cluster_names_map_it->second.cluster_weights_map;
2105
+ auto cluster_weights_map_it =
2106
+ cluster_weights_map.find(keys.cluster_weights_key);
2107
+ GPR_ASSERT(cluster_weights_map_it != cluster_weights_map.end());
2108
+ return absl::StrFormat("%s_%d", keys.cluster_names_key,
2109
+ cluster_weights_map_it->second);
2110
+ }
2111
+
2112
+ void XdsClient::UpdateWeightedClusterIndexMap(
2113
+ const XdsApi::RdsUpdate& rds_update) {
2114
+ // Construct a list of unique WeightedCluster
2115
+ // actions which we need to process: to find action names
2116
+ std::map<std::string /* cluster_weights_key */,
2117
+ std::string /* cluster_names_key */>
2118
+ actions_to_process;
2119
+ for (const auto& route : rds_update.routes) {
2120
+ if (!route.weighted_clusters.empty()) {
2121
+ WeightedClustersKeys keys =
2122
+ GetWeightedClustersKey(route.weighted_clusters);
2123
+ auto action_it = actions_to_process.find(keys.cluster_weights_key);
2124
+ if (action_it == actions_to_process.end()) {
2125
+ actions_to_process[std::move(keys.cluster_weights_key)] =
2126
+ std::move(keys.cluster_names_key);
2127
+ }
2128
+ }
2129
+ }
2130
+ // First pass of all unique WeightedCluster actions: if the exact same
2131
+ // weighted target policy (same clusters and weights) appears in the old map,
2132
+ // then that old action name is taken again and should be moved to the new
2133
+ // map; any other action names from the old set of actions are candidates for
2134
+ // reuse.
2135
+ XdsClient::WeightedClusterIndexMap new_weighted_cluster_index_map;
2136
+ for (auto action_it = actions_to_process.begin();
2137
+ action_it != actions_to_process.end();) {
2138
+ const std::string& cluster_names_key = action_it->second;
2139
+ const std::string& cluster_weights_key = action_it->first;
2140
+ auto old_cluster_names_map_it =
2141
+ weighted_cluster_index_map_.find(cluster_names_key);
2142
+ if (old_cluster_names_map_it != weighted_cluster_index_map_.end()) {
2143
+ // Add cluster_names_key to the new map and copy next_index.
2144
+ auto& new_cluster_names_info =
2145
+ new_weighted_cluster_index_map[cluster_names_key];
2146
+ new_cluster_names_info.next_index =
2147
+ old_cluster_names_map_it->second.next_index;
2148
+ // Lookup cluster_weights_key in old map.
2149
+ auto& old_cluster_weights_map =
2150
+ old_cluster_names_map_it->second.cluster_weights_map;
2151
+ auto old_cluster_weights_map_it =
2152
+ old_cluster_weights_map.find(cluster_weights_key);
2153
+ if (old_cluster_weights_map_it != old_cluster_weights_map.end()) {
2154
+ // same policy found, move from old map to new map.
2155
+ new_cluster_names_info.cluster_weights_map[cluster_weights_key] =
2156
+ old_cluster_weights_map_it->second;
2157
+ old_cluster_weights_map.erase(old_cluster_weights_map_it);
2158
+ // This action has been added to new map, so no need to process it
2159
+ // again.
2160
+ action_it = actions_to_process.erase(action_it);
2161
+ continue;
2162
+ }
2163
+ }
2164
+ ++action_it;
2165
+ }
2166
+ // Second pass of all remaining unique WeightedCluster actions: if clusters
2167
+ // for a new action are the same as an old unused action, reuse the name. If
2168
+ // clusters differ, use a brand new name.
2169
+ for (const auto& action : actions_to_process) {
2170
+ const std::string& cluster_names_key = action.second;
2171
+ const std::string& cluster_weights_key = action.first;
2172
+ auto& new_cluster_names_info =
2173
+ new_weighted_cluster_index_map[cluster_names_key];
2174
+ auto& old_cluster_weights_map =
2175
+ weighted_cluster_index_map_[cluster_names_key].cluster_weights_map;
2176
+ auto old_cluster_weights_it = old_cluster_weights_map.begin();
2177
+ if (old_cluster_weights_it != old_cluster_weights_map.end()) {
2178
+ // There is something to reuse: this action uses the same set
2179
+ // of clusters as a previous action and that action name is not
2180
+ // already taken.
2181
+ new_cluster_names_info.cluster_weights_map[cluster_weights_key] =
2182
+ old_cluster_weights_it->second;
2183
+ // Remove the name from being able to reuse again.
2184
+ old_cluster_weights_map.erase(old_cluster_weights_it);
2185
+ } else {
2186
+ // There is nothing to reuse, take the next index to use and
2187
+ // increment.
2188
+ new_cluster_names_info.cluster_weights_map[cluster_weights_key] =
2189
+ new_cluster_names_info.next_index++;
2190
+ }
2191
+ }
2192
+ weighted_cluster_index_map_ = std::move(new_weighted_cluster_index_map);
2193
+ }
2194
+
2195
+ grpc_error* XdsClient::CreateServiceConfig(
2196
+ const XdsApi::RdsUpdate& rds_update,
2197
+ RefCountedPtr<ServiceConfig>* service_config) {
2198
+ UpdateWeightedClusterIndexMap(rds_update);
2199
+ std::vector<std::string> actions_vector;
2200
+ std::vector<std::string> route_table;
2201
+ std::set<std::string> actions_set;
2202
+ for (const auto& route : rds_update.routes) {
2203
+ const std::string action_name =
2204
+ route.weighted_clusters.empty()
2205
+ ? route.cluster_name
2206
+ : WeightedClustersActionName(route.weighted_clusters);
2207
+ if (actions_set.find(action_name) == actions_set.end()) {
2208
+ actions_set.emplace(action_name);
2209
+ actions_vector.push_back(
2210
+ route.weighted_clusters.empty()
2211
+ ? CreateServiceConfigActionCluster(action_name)
2212
+ : CreateServiceConfigActionWeightedCluster(
2213
+ action_name, route.weighted_clusters));
2214
+ }
2215
+ route_table.push_back(CreateServiceConfigRoute(
2216
+ absl::StrFormat("%s:%s",
2217
+ route.weighted_clusters.empty() ? "cds" : "weighted",
2218
+ action_name),
2219
+ route.service, route.method));
2220
+ }
2221
+ std::vector<std::string> config_parts;
2222
+ config_parts.push_back(
2223
+ "{\n"
2224
+ " \"loadBalancingConfig\":[\n"
2225
+ " { \"xds_routing_experimental\":{\n"
2226
+ " \"actions\":{\n");
2227
+ config_parts.push_back(absl::StrJoin(actions_vector, ",\n"));
2228
+ config_parts.push_back(
2229
+ " },\n"
2230
+ " \"routes\":[\n");
2231
+ config_parts.push_back(absl::StrJoin(route_table, ",\n"));
2232
+ config_parts.push_back(
2233
+ " ]\n"
2234
+ " } }\n"
2235
+ " ]\n"
2236
+ "}");
2237
+ std::string json = absl::StrJoin(config_parts, "");
2238
+ grpc_error* error = GRPC_ERROR_NONE;
2239
+ *service_config = ServiceConfig::Create(json.c_str(), &error);
2240
+ return error;
2241
+ }
2242
+
2243
+ XdsApi::ClusterLoadReportMap XdsClient::BuildLoadReportSnapshot(
2244
+ bool send_all_clusters, const std::set<std::string>& clusters) {
2245
+ XdsApi::ClusterLoadReportMap snapshot_map;
2246
+ for (auto load_report_it = load_report_map_.begin();
2247
+ load_report_it != load_report_map_.end();) {
2248
+ // Cluster key is cluster and EDS service name.
2249
+ const auto& cluster_key = load_report_it->first;
2250
+ LoadReportState& load_report = load_report_it->second;
2251
+ // If the CDS response for a cluster indicates to use LRS but the
2252
+ // LRS server does not say that it wants reports for this cluster,
2253
+ // then we'll have stats objects here whose data we're not going to
2254
+ // include in the load report. However, we still need to clear out
2255
+ // the data from the stats objects, so that if the LRS server starts
2256
+ // asking for the data in the future, we don't incorrectly include
2257
+ // data from previous reporting intervals in that future report.
2258
+ const bool record_stats =
2259
+ send_all_clusters || clusters.find(cluster_key.first) != clusters.end();
2260
+ XdsApi::ClusterLoadReport snapshot;
2261
+ // Aggregate drop stats.
2262
+ snapshot.dropped_requests = std::move(load_report.deleted_drop_stats);
2263
+ for (auto& drop_stats : load_report.drop_stats) {
2264
+ for (const auto& p : drop_stats->GetSnapshotAndReset()) {
2265
+ snapshot.dropped_requests[p.first] += p.second;
2266
+ }
2267
+ }
2268
+ // Aggregate locality stats.
2269
+ for (auto it = load_report.locality_stats.begin();
2270
+ it != load_report.locality_stats.end();) {
2271
+ const RefCountedPtr<XdsLocalityName>& locality_name = it->first;
2272
+ auto& locality_state = it->second;
2273
+ XdsClusterLocalityStats::Snapshot& locality_snapshot =
2274
+ snapshot.locality_stats[locality_name];
2275
+ for (auto& locality_stats : locality_state.locality_stats) {
2276
+ locality_snapshot += locality_stats->GetSnapshotAndReset();
2277
+ }
2278
+ // Add final snapshots from recently deleted locality stats objects.
2279
+ for (auto& deleted_locality_stats :
2280
+ locality_state.deleted_locality_stats) {
2281
+ locality_snapshot += deleted_locality_stats;
2282
+ }
2283
+ locality_state.deleted_locality_stats.clear();
2284
+ // If the only thing left in this entry was final snapshots from
2285
+ // deleted locality stats objects, remove the entry.
2286
+ if (locality_state.locality_stats.empty()) {
2287
+ it = load_report.locality_stats.erase(it);
2288
+ } else {
2289
+ ++it;
2290
+ }
2291
+ }
2292
+ if (record_stats) {
2293
+ // Compute load report interval.
2294
+ const grpc_millis now = ExecCtx::Get()->Now();
2295
+ snapshot.load_report_interval = now - load_report.last_report_time;
2296
+ load_report.last_report_time = now;
2297
+ // Record snapshot.
2298
+ snapshot_map[cluster_key] = std::move(snapshot);
2299
+ }
2300
+ // If the only thing left in this entry was final snapshots from
2301
+ // deleted stats objects, remove the entry.
2302
+ if (load_report.locality_stats.empty() && load_report.drop_stats.empty()) {
2303
+ load_report_it = load_report_map_.erase(load_report_it);
2304
+ } else {
2305
+ ++load_report_it;
2306
+ }
2307
+ }
2308
+ return snapshot_map;
2309
+ }
2310
+
2311
+ void XdsClient::NotifyOnError(grpc_error* error) {
2312
+ if (service_config_watcher_ != nullptr) {
2313
+ service_config_watcher_->OnError(GRPC_ERROR_REF(error));
2314
+ }
2315
+ for (const auto& p : cluster_map_) {
2316
+ const ClusterState& cluster_state = p.second;
2317
+ for (const auto& p : cluster_state.watchers) {
2318
+ p.first->OnError(GRPC_ERROR_REF(error));
2319
+ }
2320
+ }
2321
+ for (const auto& p : endpoint_map_) {
2322
+ const EndpointState& endpoint_state = p.second;
2323
+ for (const auto& p : endpoint_state.watchers) {
2324
+ p.first->OnError(GRPC_ERROR_REF(error));
2325
+ }
2326
+ }
2327
+ GRPC_ERROR_UNREF(error);
2328
+ }
2329
+
2330
+ void* XdsClient::ChannelArgCopy(void* p) {
2331
+ XdsClient* xds_client = static_cast<XdsClient*>(p);
2332
+ xds_client->Ref(DEBUG_LOCATION, "channel arg").release();
2333
+ return p;
2334
+ }
2335
+
2336
+ void XdsClient::ChannelArgDestroy(void* p) {
2337
+ XdsClient* xds_client = static_cast<XdsClient*>(p);
2338
+ xds_client->Unref(DEBUG_LOCATION, "channel arg");
2339
+ }
2340
+
2341
+ int XdsClient::ChannelArgCmp(void* p, void* q) { return GPR_ICMP(p, q); }
2342
+
2343
+ const grpc_arg_pointer_vtable XdsClient::kXdsClientVtable = {
2344
+ XdsClient::ChannelArgCopy, XdsClient::ChannelArgDestroy,
2345
+ XdsClient::ChannelArgCmp};
2346
+
2347
+ grpc_arg XdsClient::MakeChannelArg() const {
2348
+ return grpc_channel_arg_pointer_create(const_cast<char*>(GRPC_ARG_XDS_CLIENT),
2349
+ const_cast<XdsClient*>(this),
2350
+ &XdsClient::kXdsClientVtable);
2351
+ }
2352
+
2353
+ RefCountedPtr<XdsClient> XdsClient::GetFromChannelArgs(
2354
+ const grpc_channel_args& args) {
2355
+ XdsClient* xds_client =
2356
+ grpc_channel_args_find_pointer<XdsClient>(&args, GRPC_ARG_XDS_CLIENT);
2357
+ if (xds_client != nullptr) return xds_client->Ref();
2358
+ return nullptr;
2359
+ }
2360
+
2361
+ grpc_channel_args* XdsClient::RemoveFromChannelArgs(
2362
+ const grpc_channel_args& args) {
2363
+ const char* arg_name = GRPC_ARG_XDS_CLIENT;
2364
+ return grpc_channel_args_copy_and_remove(&args, &arg_name, 1);
2365
+ }
2366
+
2367
+ } // namespace grpc_core