grpc 1.30.0 → 1.46.3

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 (2443) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +1497 -18376
  3. data/etc/roots.pem +592 -899
  4. data/include/grpc/byte_buffer.h +1 -1
  5. data/include/grpc/byte_buffer_reader.h +1 -1
  6. data/include/grpc/compression.h +1 -1
  7. data/include/grpc/event_engine/README.md +38 -0
  8. data/include/grpc/event_engine/endpoint_config.h +43 -0
  9. data/include/grpc/event_engine/event_engine.h +399 -0
  10. data/include/grpc/event_engine/internal/memory_allocator_impl.h +68 -0
  11. data/include/grpc/event_engine/memory_allocator.h +226 -0
  12. data/include/grpc/event_engine/memory_request.h +57 -0
  13. data/include/grpc/event_engine/port.h +39 -0
  14. data/include/grpc/fork.h +1 -1
  15. data/include/grpc/grpc.h +90 -25
  16. data/include/grpc/grpc_posix.h +22 -18
  17. data/include/grpc/grpc_security.h +563 -315
  18. data/include/grpc/grpc_security_constants.h +20 -14
  19. data/include/grpc/impl/codegen/README.md +22 -0
  20. data/include/grpc/impl/codegen/atm.h +5 -3
  21. data/include/grpc/impl/codegen/atm_gcc_atomic.h +2 -0
  22. data/include/grpc/impl/codegen/atm_gcc_sync.h +2 -0
  23. data/include/grpc/impl/codegen/atm_windows.h +6 -0
  24. data/include/grpc/impl/codegen/byte_buffer.h +3 -1
  25. data/include/grpc/impl/codegen/byte_buffer_reader.h +2 -0
  26. data/include/grpc/impl/codegen/compression_types.h +2 -2
  27. data/include/grpc/impl/codegen/connectivity_state.h +2 -0
  28. data/include/grpc/impl/codegen/fork.h +2 -0
  29. data/include/grpc/impl/codegen/gpr_slice.h +2 -0
  30. data/include/grpc/impl/codegen/gpr_types.h +2 -0
  31. data/include/grpc/impl/codegen/grpc_types.h +84 -53
  32. data/include/grpc/impl/codegen/log.h +2 -2
  33. data/include/grpc/impl/codegen/port_platform.h +100 -97
  34. data/include/grpc/impl/codegen/propagation_bits.h +2 -0
  35. data/include/grpc/impl/codegen/slice.h +6 -1
  36. data/include/grpc/impl/codegen/status.h +2 -0
  37. data/include/grpc/impl/codegen/sync.h +8 -5
  38. data/include/grpc/impl/codegen/sync_abseil.h +2 -0
  39. data/include/grpc/impl/codegen/sync_custom.h +2 -0
  40. data/include/grpc/impl/codegen/sync_generic.h +3 -0
  41. data/include/grpc/impl/codegen/sync_posix.h +4 -2
  42. data/include/grpc/impl/codegen/sync_windows.h +6 -0
  43. data/include/grpc/module.modulemap +14 -14
  44. data/include/grpc/slice.h +1 -12
  45. data/include/grpc/slice_buffer.h +3 -3
  46. data/include/grpc/status.h +1 -1
  47. data/include/grpc/support/atm.h +1 -1
  48. data/include/grpc/support/atm_gcc_atomic.h +1 -1
  49. data/include/grpc/support/atm_gcc_sync.h +1 -1
  50. data/include/grpc/support/atm_windows.h +1 -1
  51. data/include/grpc/support/log.h +1 -1
  52. data/include/grpc/support/port_platform.h +1 -1
  53. data/include/grpc/support/sync.h +4 -4
  54. data/include/grpc/support/sync_abseil.h +1 -1
  55. data/include/grpc/support/sync_custom.h +1 -1
  56. data/include/grpc/support/sync_generic.h +1 -1
  57. data/include/grpc/support/sync_posix.h +1 -1
  58. data/include/grpc/support/sync_windows.h +1 -1
  59. data/include/grpc/support/time.h +9 -9
  60. data/src/core/ext/filters/census/grpc_context.cc +1 -0
  61. data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +309 -0
  62. data/src/core/ext/filters/channel_idle/channel_idle_filter.h +122 -0
  63. data/src/core/ext/filters/channel_idle/idle_filter_state.cc +96 -0
  64. data/src/core/ext/filters/channel_idle/idle_filter_state.h +66 -0
  65. data/src/core/ext/filters/client_channel/backend_metric.cc +33 -35
  66. data/src/core/ext/filters/client_channel/backend_metric.h +4 -3
  67. data/src/core/ext/filters/client_channel/backup_poller.cc +20 -14
  68. data/src/core/ext/filters/client_channel/backup_poller.h +1 -0
  69. data/src/core/ext/filters/client_channel/channel_connectivity.cc +158 -202
  70. data/src/core/ext/filters/client_channel/client_channel.cc +2284 -3096
  71. data/src/core/ext/filters/client_channel/client_channel.h +566 -63
  72. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +6 -5
  73. data/src/core/ext/filters/client_channel/client_channel_channelz.h +2 -5
  74. data/src/core/ext/filters/client_channel/client_channel_factory.cc +2 -1
  75. data/src/core/ext/filters/client_channel/client_channel_factory.h +18 -19
  76. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +19 -22
  77. data/src/core/ext/filters/client_channel/config_selector.cc +59 -0
  78. data/src/core/ext/filters/client_channel/config_selector.h +145 -0
  79. data/src/core/ext/filters/client_channel/connector.h +20 -20
  80. data/src/core/ext/filters/client_channel/dynamic_filters.cc +189 -0
  81. data/src/core/ext/filters/client_channel/dynamic_filters.h +99 -0
  82. data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +27 -143
  83. data/src/core/ext/filters/client_channel/global_subchannel_pool.h +16 -24
  84. data/src/core/ext/filters/client_channel/health/health_check_client.cc +129 -572
  85. data/src/core/ext/filters/client_channel/health/health_check_client.h +24 -158
  86. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +60 -62
  87. data/src/core/ext/filters/client_channel/http_connect_handshaker.h +10 -2
  88. data/src/core/ext/filters/client_channel/http_proxy.cc +113 -117
  89. data/src/core/ext/filters/client_channel/http_proxy.h +17 -0
  90. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +52 -38
  91. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +12 -9
  92. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +16 -9
  93. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +1 -1
  94. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +12 -24
  95. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +519 -388
  96. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +3 -6
  97. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +1 -14
  98. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +1 -4
  99. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +4 -3
  100. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +6 -5
  101. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +20 -21
  102. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +4 -4
  103. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +106 -75
  104. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +307 -211
  105. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +804 -0
  106. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +37 -0
  107. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +2542 -0
  108. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +84 -84
  109. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +32 -49
  110. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +138 -96
  111. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +443 -156
  112. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +52 -24
  113. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h +29 -0
  114. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +872 -0
  115. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +710 -0
  116. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +1215 -0
  117. data/src/core/ext/filters/client_channel/lb_policy.cc +23 -29
  118. data/src/core/ext/filters/client_channel/lb_policy.h +178 -142
  119. data/src/core/ext/filters/client_channel/lb_policy_factory.h +2 -1
  120. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +13 -10
  121. data/src/core/ext/filters/client_channel/lb_policy_registry.h +1 -1
  122. data/src/core/ext/filters/client_channel/local_subchannel_pool.cc +27 -67
  123. data/src/core/ext/filters/client_channel/local_subchannel_pool.h +10 -9
  124. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +133 -0
  125. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +304 -339
  126. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +22 -42
  127. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_event_engine.cc +31 -0
  128. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +31 -24
  129. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +58 -72
  130. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +524 -230
  131. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +44 -26
  132. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_event_engine.cc +28 -0
  133. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +2 -2
  134. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +98 -247
  135. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +60 -62
  136. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +10 -7
  137. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +400 -0
  138. data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +201 -0
  139. data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +106 -0
  140. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +71 -63
  141. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +983 -101
  142. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +28 -0
  143. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +57 -314
  144. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +40 -62
  145. data/src/core/ext/filters/client_channel/retry_filter.cc +2655 -0
  146. data/src/core/ext/filters/client_channel/retry_filter.h +30 -0
  147. data/src/core/ext/filters/client_channel/retry_service_config.cc +314 -0
  148. data/src/core/ext/filters/client_channel/retry_service_config.h +102 -0
  149. data/src/core/ext/filters/client_channel/retry_throttle.cc +17 -60
  150. data/src/core/ext/filters/client_channel/retry_throttle.h +15 -7
  151. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +157 -0
  152. data/src/core/ext/filters/client_channel/subchannel.cc +284 -397
  153. data/src/core/ext/filters/client_channel/subchannel.h +116 -161
  154. data/src/core/ext/filters/client_channel/subchannel_interface.h +41 -5
  155. data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +38 -9
  156. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +27 -12
  157. data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +544 -0
  158. data/src/core/ext/filters/client_channel/subchannel_stream_client.h +214 -0
  159. data/src/core/ext/filters/deadline/deadline_filter.cc +120 -114
  160. data/src/core/ext/filters/deadline/deadline_filter.h +9 -12
  161. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +258 -0
  162. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +62 -0
  163. data/src/core/ext/filters/fault_injection/service_config_parser.cc +179 -0
  164. data/src/core/ext/filters/fault_injection/service_config_parser.h +91 -0
  165. data/src/core/ext/filters/http/client/http_client_filter.cc +84 -539
  166. data/src/core/ext/filters/http/client/http_client_filter.h +21 -4
  167. data/src/core/ext/filters/http/client_authority_filter.cc +39 -103
  168. data/src/core/ext/filters/http/client_authority_filter.h +24 -5
  169. data/src/core/ext/filters/http/http_filters_plugin.cc +55 -69
  170. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +67 -157
  171. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +103 -75
  172. data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +3 -1
  173. data/src/core/ext/filters/http/server/http_server_filter.cc +89 -295
  174. data/src/core/ext/filters/message_size/message_size_filter.cc +101 -130
  175. data/src/core/ext/filters/message_size/message_size_filter.h +17 -3
  176. data/src/core/ext/filters/rbac/rbac_filter.cc +162 -0
  177. data/src/core/ext/filters/rbac/rbac_filter.h +76 -0
  178. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +606 -0
  179. data/src/core/ext/filters/rbac/rbac_service_config_parser.h +75 -0
  180. data/src/core/ext/filters/server_config_selector/server_config_selector.cc +61 -0
  181. data/src/core/ext/filters/server_config_selector/server_config_selector.h +71 -0
  182. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +143 -0
  183. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.h +32 -0
  184. data/src/core/ext/transport/chttp2/alpn/alpn.cc +2 -1
  185. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +335 -46
  186. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +22 -5
  187. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +1005 -355
  188. data/src/core/ext/transport/chttp2/server/chttp2_server.h +16 -2
  189. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +11 -9
  190. data/src/core/ext/transport/chttp2/transport/bin_decoder.h +2 -1
  191. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +1 -0
  192. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +807 -778
  193. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +24 -5
  194. data/src/core/ext/transport/chttp2/transport/context_list.cc +4 -6
  195. data/src/core/ext/transport/chttp2/transport/context_list.h +4 -6
  196. data/src/core/ext/transport/chttp2/transport/flow_control.cc +89 -67
  197. data/src/core/ext/transport/chttp2/transport/flow_control.h +52 -38
  198. data/src/core/ext/transport/chttp2/transport/frame_data.cc +30 -30
  199. data/src/core/ext/transport/chttp2/transport/frame_data.h +11 -10
  200. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +25 -25
  201. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +7 -6
  202. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +19 -20
  203. data/src/core/ext/transport/chttp2/transport/frame_ping.h +8 -6
  204. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +23 -22
  205. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +7 -6
  206. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +55 -22
  207. data/src/core/ext/transport/chttp2/transport/frame_settings.h +9 -7
  208. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +25 -25
  209. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +5 -6
  210. data/src/core/ext/transport/chttp2/transport/hpack_constants.h +41 -0
  211. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +516 -749
  212. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +183 -71
  213. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +86 -0
  214. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +71 -0
  215. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +814 -1196
  216. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +101 -83
  217. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +239 -0
  218. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +115 -0
  219. data/src/core/ext/transport/chttp2/transport/internal.h +79 -78
  220. data/src/core/ext/transport/chttp2/transport/parsing.cc +177 -327
  221. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +2 -2
  222. data/src/core/ext/transport/chttp2/transport/varint.cc +13 -7
  223. data/src/core/ext/transport/chttp2/transport/varint.h +39 -28
  224. data/src/core/ext/transport/chttp2/transport/writing.cc +145 -190
  225. data/src/core/ext/transport/inproc/inproc_plugin.cc +0 -4
  226. data/src/core/ext/transport/inproc/inproc_transport.cc +262 -237
  227. data/src/core/ext/transport/inproc/inproc_transport.h +1 -4
  228. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.c +117 -0
  229. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.h +482 -0
  230. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.c +121 -0
  231. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.h +553 -0
  232. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +444 -0
  233. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +2156 -0
  234. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.c +56 -0
  235. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.h +151 -0
  236. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.c +62 -0
  237. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.h +160 -0
  238. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.c +46 -0
  239. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.h +124 -0
  240. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.c +43 -0
  241. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.h +102 -0
  242. data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.c +43 -0
  243. data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.h +97 -0
  244. data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.c +106 -0
  245. data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.h +605 -0
  246. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.c +48 -0
  247. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.h +103 -0
  248. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.c +44 -1
  249. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +53 -2
  250. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +31 -5
  251. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +59 -14
  252. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +270 -0
  253. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +1240 -0
  254. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +411 -0
  255. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +2161 -0
  256. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +95 -0
  257. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +382 -0
  258. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +543 -0
  259. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +2961 -0
  260. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +48 -0
  261. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +103 -0
  262. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +89 -0
  263. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +545 -0
  264. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.c +299 -0
  265. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.h +1381 -0
  266. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +145 -0
  267. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +636 -0
  268. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +49 -0
  269. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +116 -0
  270. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +419 -0
  271. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +1783 -0
  272. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +163 -0
  273. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +778 -0
  274. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +47 -0
  275. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +100 -0
  276. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +47 -0
  277. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +103 -0
  278. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.c +58 -0
  279. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.h +151 -0
  280. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +269 -0
  281. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +1277 -0
  282. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +220 -0
  283. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +1219 -0
  284. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +49 -0
  285. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +122 -0
  286. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +322 -0
  287. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +1686 -0
  288. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +40 -0
  289. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +84 -0
  290. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.c +60 -0
  291. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.h +169 -0
  292. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c +47 -0
  293. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +144 -0
  294. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +56 -0
  295. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +178 -0
  296. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.c +48 -0
  297. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.h +118 -0
  298. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +106 -0
  299. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +348 -0
  300. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +144 -0
  301. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +623 -0
  302. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +129 -0
  303. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +568 -0
  304. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +46 -0
  305. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +94 -0
  306. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +165 -0
  307. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +886 -0
  308. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +186 -0
  309. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +941 -0
  310. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +63 -0
  311. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +234 -0
  312. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +56 -0
  313. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +154 -0
  314. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.c +53 -0
  315. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.h +136 -0
  316. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +165 -0
  317. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +716 -0
  318. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +174 -0
  319. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +721 -0
  320. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +209 -0
  321. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +1008 -0
  322. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +101 -0
  323. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +443 -0
  324. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +1051 -0
  325. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +5956 -0
  326. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +79 -0
  327. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +255 -0
  328. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.c +222 -0
  329. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.h +1052 -0
  330. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.c +44 -0
  331. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.h +88 -0
  332. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.c +49 -0
  333. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.h +103 -0
  334. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +63 -0
  335. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +167 -0
  336. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.c +52 -0
  337. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.h +134 -0
  338. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.c +63 -0
  339. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.h +250 -0
  340. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.c +47 -0
  341. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.h +94 -0
  342. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.c +69 -0
  343. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.h +213 -0
  344. data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.c +32 -0
  345. data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.h +42 -0
  346. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.c +71 -0
  347. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.h +218 -0
  348. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.c +54 -0
  349. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.h +146 -0
  350. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +42 -0
  351. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +85 -0
  352. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +96 -0
  353. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +375 -0
  354. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +94 -0
  355. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +433 -0
  356. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.c +64 -0
  357. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +183 -0
  358. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +55 -0
  359. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +168 -0
  360. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +463 -0
  361. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +2606 -0
  362. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c +28 -0
  363. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h +38 -0
  364. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +175 -0
  365. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +880 -0
  366. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +88 -0
  367. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +308 -0
  368. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +191 -0
  369. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +1035 -0
  370. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.c +62 -0
  371. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.h +160 -0
  372. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +38 -0
  373. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +70 -0
  374. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +165 -0
  375. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +755 -0
  376. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +68 -0
  377. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +210 -0
  378. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +138 -0
  379. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +631 -0
  380. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.c +48 -0
  381. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.h +112 -0
  382. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.c +76 -0
  383. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.h +249 -0
  384. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.c +74 -0
  385. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.h +214 -0
  386. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +62 -0
  387. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +188 -0
  388. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +49 -0
  389. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +117 -0
  390. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +48 -0
  391. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +113 -0
  392. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +47 -0
  393. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +100 -0
  394. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +80 -0
  395. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +234 -0
  396. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +67 -0
  397. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +218 -0
  398. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +60 -0
  399. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +170 -0
  400. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +78 -0
  401. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +294 -0
  402. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +107 -0
  403. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +429 -0
  404. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +107 -0
  405. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +419 -0
  406. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.c +66 -0
  407. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.h +201 -0
  408. data/src/core/ext/upb-generated/envoy/type/v3/http.upb.c +26 -0
  409. data/src/core/ext/upb-generated/envoy/type/v3/http.upb.h +39 -0
  410. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.c +42 -0
  411. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.h +139 -0
  412. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.c +54 -0
  413. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +139 -0
  414. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +66 -0
  415. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +196 -0
  416. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_unit.upb.c +26 -0
  417. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_unit.upb.h +41 -0
  418. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +43 -0
  419. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +97 -0
  420. data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.c +51 -0
  421. data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.h +127 -0
  422. data/src/core/ext/upb-generated/google/api/annotations.upb.c +23 -1
  423. data/src/core/ext/upb-generated/google/api/annotations.upb.h +25 -2
  424. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +271 -0
  425. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +1236 -0
  426. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +283 -0
  427. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +1338 -0
  428. data/src/core/ext/upb-generated/google/api/http.upb.c +44 -29
  429. data/src/core/ext/upb-generated/google/api/http.upb.h +241 -100
  430. data/src/core/ext/upb-generated/google/api/httpbody.upb.c +46 -0
  431. data/src/core/ext/upb-generated/google/api/httpbody.upb.h +111 -0
  432. data/src/core/ext/upb-generated/google/protobuf/any.upb.c +19 -6
  433. data/src/core/ext/upb-generated/google/protobuf/any.upb.h +48 -18
  434. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +374 -283
  435. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +2368 -969
  436. data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +19 -6
  437. data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +46 -16
  438. data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +16 -3
  439. data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +31 -11
  440. data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +48 -32
  441. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +203 -101
  442. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +19 -6
  443. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +46 -16
  444. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +58 -37
  445. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +313 -112
  446. data/src/core/ext/upb-generated/google/rpc/status.upb.c +22 -9
  447. data/src/core/ext/upb-generated/google/rpc/status.upb.h +63 -26
  448. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.c +84 -0
  449. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.h +319 -0
  450. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +33 -19
  451. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +118 -60
  452. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +136 -108
  453. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +777 -337
  454. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +28 -13
  455. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +99 -34
  456. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +23 -9
  457. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +74 -27
  458. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +82 -62
  459. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +460 -184
  460. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +70 -0
  461. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +208 -0
  462. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.c +175 -0
  463. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.h +764 -0
  464. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +76 -14
  465. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +217 -43
  466. data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +55 -0
  467. data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +108 -0
  468. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.c +22 -1
  469. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +18 -2
  470. data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +32 -6
  471. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +66 -16
  472. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +53 -0
  473. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +99 -0
  474. data/src/core/ext/upb-generated/validate/validate.upb.c +407 -295
  475. data/src/core/ext/upb-generated/validate/validate.upb.h +3024 -1084
  476. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.c +110 -0
  477. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.h +278 -0
  478. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.c +55 -0
  479. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.h +108 -0
  480. data/src/core/ext/upb-generated/xds/annotations/v3/sensitive.upb.c +38 -0
  481. data/src/core/ext/upb-generated/xds/annotations/v3/sensitive.upb.h +46 -0
  482. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +105 -0
  483. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +290 -0
  484. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.c +53 -0
  485. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.h +99 -0
  486. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +41 -0
  487. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +79 -0
  488. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +66 -0
  489. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +200 -0
  490. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +56 -0
  491. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +115 -0
  492. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.c +46 -0
  493. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.h +103 -0
  494. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +49 -0
  495. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +127 -0
  496. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +68 -0
  497. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +240 -0
  498. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +49 -0
  499. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +121 -0
  500. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +73 -0
  501. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +187 -0
  502. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.c +207 -0
  503. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.h +878 -0
  504. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.c +52 -0
  505. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.h +143 -0
  506. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.c +65 -0
  507. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.h +218 -0
  508. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.c +46 -0
  509. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +103 -0
  510. data/src/core/ext/upbdefs-generated/envoy/admin/v3/certs.upbdefs.c +84 -0
  511. data/src/core/ext/upbdefs-generated/envoy/admin/v3/certs.upbdefs.h +55 -0
  512. data/src/core/ext/upbdefs-generated/envoy/admin/v3/clusters.upbdefs.c +127 -0
  513. data/src/core/ext/upbdefs-generated/envoy/admin/v3/clusters.upbdefs.h +50 -0
  514. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.c +309 -0
  515. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.h +140 -0
  516. data/src/core/ext/upbdefs-generated/envoy/admin/v3/init_dump.upbdefs.c +43 -0
  517. data/src/core/ext/upbdefs-generated/envoy/admin/v3/init_dump.upbdefs.h +40 -0
  518. data/src/core/ext/upbdefs-generated/envoy/admin/v3/listeners.upbdefs.c +53 -0
  519. data/src/core/ext/upbdefs-generated/envoy/admin/v3/listeners.upbdefs.h +40 -0
  520. data/src/core/ext/upbdefs-generated/envoy/admin/v3/memory.upbdefs.c +49 -0
  521. data/src/core/ext/upbdefs-generated/envoy/admin/v3/memory.upbdefs.h +35 -0
  522. data/src/core/ext/upbdefs-generated/envoy/admin/v3/metrics.upbdefs.c +46 -0
  523. data/src/core/ext/upbdefs-generated/envoy/admin/v3/metrics.upbdefs.h +35 -0
  524. data/src/core/ext/upbdefs-generated/envoy/admin/v3/mutex_stats.upbdefs.c +46 -0
  525. data/src/core/ext/upbdefs-generated/envoy/admin/v3/mutex_stats.upbdefs.h +35 -0
  526. data/src/core/ext/upbdefs-generated/envoy/admin/v3/server_info.upbdefs.c +142 -0
  527. data/src/core/ext/upbdefs-generated/envoy/admin/v3/server_info.upbdefs.h +40 -0
  528. data/src/core/ext/upbdefs-generated/envoy/admin/v3/tap.upbdefs.c +51 -0
  529. data/src/core/ext/upbdefs-generated/envoy/admin/v3/tap.upbdefs.h +35 -0
  530. data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.c +48 -0
  531. data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.h +30 -0
  532. data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.c +38 -0
  533. data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.h +35 -0
  534. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +222 -0
  535. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.h +105 -0
  536. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +393 -0
  537. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.h +120 -0
  538. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.c +98 -0
  539. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.h +45 -0
  540. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +557 -0
  541. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +155 -0
  542. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.c +51 -0
  543. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.h +35 -0
  544. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.c +138 -0
  545. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.h +35 -0
  546. data/src/core/ext/upbdefs-generated/envoy/config/common/matcher/v3/matcher.upbdefs.c +206 -0
  547. data/src/core/ext/upbdefs-generated/envoy/config/common/matcher/v3/matcher.upbdefs.h +105 -0
  548. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.c +112 -0
  549. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.h +65 -0
  550. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.c +54 -0
  551. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.h +35 -0
  552. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +267 -0
  553. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.h +150 -0
  554. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +168 -0
  555. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.h +65 -0
  556. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.c +53 -0
  557. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.h +35 -0
  558. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.c +47 -0
  559. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.h +35 -0
  560. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_method_list.upbdefs.c +53 -0
  561. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_method_list.upbdefs.h +40 -0
  562. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.c +235 -0
  563. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.h +100 -0
  564. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +228 -0
  565. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.h +75 -0
  566. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.c +53 -0
  567. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.h +35 -0
  568. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +298 -0
  569. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.h +110 -0
  570. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.c +41 -0
  571. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.h +35 -0
  572. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/resolver.upbdefs.c +55 -0
  573. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/resolver.upbdefs.h +40 -0
  574. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.c +57 -0
  575. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.h +35 -0
  576. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +70 -0
  577. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.h +35 -0
  578. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/udp_socket_config.upbdefs.c +49 -0
  579. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/udp_socket_config.upbdefs.h +35 -0
  580. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.c +99 -0
  581. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.h +50 -0
  582. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +128 -0
  583. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.h +60 -0
  584. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.c +136 -0
  585. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.h +55 -0
  586. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.c +48 -0
  587. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.h +35 -0
  588. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +197 -0
  589. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.h +60 -0
  590. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.c +190 -0
  591. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.h +65 -0
  592. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.c +88 -0
  593. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.h +35 -0
  594. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +63 -0
  595. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.h +40 -0
  596. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/metrics_service.upbdefs.c +69 -0
  597. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/metrics_service.upbdefs.h +35 -0
  598. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.c +125 -0
  599. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.h +70 -0
  600. data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.c +134 -0
  601. data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.h +75 -0
  602. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.c +190 -0
  603. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.h +70 -0
  604. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +115 -0
  605. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.h +45 -0
  606. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +896 -0
  607. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +295 -0
  608. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.c +77 -0
  609. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.h +45 -0
  610. data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.c +188 -0
  611. data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.h +85 -0
  612. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/datadog.upbdefs.c +54 -0
  613. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/datadog.upbdefs.h +35 -0
  614. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/dynamic_ot.upbdefs.c +57 -0
  615. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/dynamic_ot.upbdefs.h +35 -0
  616. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.c +57 -0
  617. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.h +40 -0
  618. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/lightstep.upbdefs.c +72 -0
  619. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/lightstep.upbdefs.h +35 -0
  620. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opencensus.upbdefs.c +99 -0
  621. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opencensus.upbdefs.h +35 -0
  622. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/service.upbdefs.c +52 -0
  623. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/service.upbdefs.h +35 -0
  624. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/skywalking.upbdefs.c +71 -0
  625. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/skywalking.upbdefs.h +40 -0
  626. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/trace.upbdefs.c +57 -0
  627. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/trace.upbdefs.h +30 -0
  628. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/xray.upbdefs.c +75 -0
  629. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/xray.upbdefs.h +40 -0
  630. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/zipkin.upbdefs.c +77 -0
  631. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/zipkin.upbdefs.h +35 -0
  632. data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.c +50 -0
  633. data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.h +35 -0
  634. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.c +92 -0
  635. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.h +55 -0
  636. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.c +117 -0
  637. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.h +45 -0
  638. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.c +59 -0
  639. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.h +40 -0
  640. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c +78 -0
  641. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.h +35 -0
  642. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +551 -0
  643. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h +130 -0
  644. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.c +48 -0
  645. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.h +30 -0
  646. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +210 -0
  647. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.h +65 -0
  648. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c +91 -0
  649. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.h +45 -0
  650. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +254 -0
  651. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.h +65 -0
  652. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upbdefs.c +58 -0
  653. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upbdefs.h +40 -0
  654. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.c +58 -0
  655. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.h +35 -0
  656. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +128 -0
  657. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.h +65 -0
  658. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.c +76 -0
  659. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.h +40 -0
  660. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +153 -0
  661. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.h +55 -0
  662. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/cookie.upbdefs.c +46 -0
  663. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/cookie.upbdefs.h +35 -0
  664. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/path_transformation.upbdefs.c +56 -0
  665. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/path_transformation.upbdefs.h +50 -0
  666. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/http_inputs.upbdefs.c +52 -0
  667. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/http_inputs.upbdefs.h +50 -0
  668. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.c +61 -0
  669. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.h +40 -0
  670. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.c +54 -0
  671. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.h +35 -0
  672. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.c +52 -0
  673. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.h +35 -0
  674. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.c +51 -0
  675. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.h +35 -0
  676. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +70 -0
  677. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.h +45 -0
  678. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.c +65 -0
  679. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.h +40 -0
  680. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.c +58 -0
  681. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.h +40 -0
  682. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.c +75 -0
  683. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.h +45 -0
  684. data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.c +78 -0
  685. data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.h +65 -0
  686. data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.c +85 -0
  687. data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.h +55 -0
  688. data/src/core/ext/upbdefs-generated/envoy/type/v3/hash_policy.upbdefs.c +53 -0
  689. data/src/core/ext/upbdefs-generated/envoy/type/v3/hash_policy.upbdefs.h +45 -0
  690. data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.c +36 -0
  691. data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.h +30 -0
  692. data/src/core/ext/upbdefs-generated/envoy/type/v3/http_status.upbdefs.c +94 -0
  693. data/src/core/ext/upbdefs-generated/envoy/type/v3/http_status.upbdefs.h +35 -0
  694. data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.c +54 -0
  695. data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.h +40 -0
  696. data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.c +48 -0
  697. data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.h +45 -0
  698. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_unit.upbdefs.c +38 -0
  699. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_unit.upbdefs.h +30 -0
  700. data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.c +44 -0
  701. data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.h +35 -0
  702. data/src/core/ext/upbdefs-generated/envoy/type/v3/token_bucket.upbdefs.c +57 -0
  703. data/src/core/ext/upbdefs-generated/envoy/type/v3/token_bucket.upbdefs.h +35 -0
  704. data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.c +40 -0
  705. data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.h +30 -0
  706. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/checked.upbdefs.c +154 -0
  707. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/checked.upbdefs.h +95 -0
  708. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/syntax.upbdefs.c +153 -0
  709. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/syntax.upbdefs.h +100 -0
  710. data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.c +52 -0
  711. data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.h +45 -0
  712. data/src/core/ext/upbdefs-generated/google/api/httpbody.upbdefs.c +39 -0
  713. data/src/core/ext/upbdefs-generated/google/api/httpbody.upbdefs.h +35 -0
  714. data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.c +34 -0
  715. data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.h +35 -0
  716. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +329 -0
  717. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.h +165 -0
  718. data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.c +35 -0
  719. data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.h +35 -0
  720. data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.c +32 -0
  721. data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.h +35 -0
  722. data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.c +54 -0
  723. data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.h +50 -0
  724. data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.c +35 -0
  725. data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.h +35 -0
  726. data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.c +45 -0
  727. data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.h +75 -0
  728. data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.c +37 -0
  729. data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.h +35 -0
  730. data/src/core/ext/upbdefs-generated/opencensus/proto/trace/v1/trace_config.upbdefs.c +67 -0
  731. data/src/core/ext/upbdefs-generated/opencensus/proto/trace/v1/trace_config.upbdefs.h +50 -0
  732. data/src/core/ext/upbdefs-generated/src/proto/grpc/lookup/v1/rls_config.upbdefs.c +99 -0
  733. data/src/core/ext/upbdefs-generated/src/proto/grpc/lookup/v1/rls_config.upbdefs.h +75 -0
  734. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.c +62 -0
  735. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.h +45 -0
  736. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.c +47 -0
  737. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.h +35 -0
  738. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.c +34 -0
  739. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.h +30 -0
  740. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.c +46 -0
  741. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.h +35 -0
  742. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.c +39 -0
  743. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.h +35 -0
  744. data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.c +283 -0
  745. data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.h +145 -0
  746. data/src/core/ext/upbdefs-generated/xds/annotations/v3/migrate.upbdefs.c +63 -0
  747. data/src/core/ext/upbdefs-generated/xds/annotations/v3/migrate.upbdefs.h +45 -0
  748. data/src/core/ext/upbdefs-generated/xds/annotations/v3/security.upbdefs.c +47 -0
  749. data/src/core/ext/upbdefs-generated/xds/annotations/v3/security.upbdefs.h +35 -0
  750. data/src/core/ext/upbdefs-generated/xds/annotations/v3/sensitive.upbdefs.c +35 -0
  751. data/src/core/ext/upbdefs-generated/xds/annotations/v3/sensitive.upbdefs.h +30 -0
  752. data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.c +64 -0
  753. data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.h +50 -0
  754. data/src/core/ext/upbdefs-generated/xds/annotations/v3/versioning.upbdefs.c +40 -0
  755. data/src/core/ext/upbdefs-generated/xds/annotations/v3/versioning.upbdefs.h +35 -0
  756. data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.c +38 -0
  757. data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.h +35 -0
  758. data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.c +56 -0
  759. data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.h +40 -0
  760. data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.c +39 -0
  761. data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.h +40 -0
  762. data/src/core/ext/upbdefs-generated/xds/core/v3/extension.upbdefs.c +41 -0
  763. data/src/core/ext/upbdefs-generated/xds/core/v3/extension.upbdefs.h +35 -0
  764. data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.c +45 -0
  765. data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.h +35 -0
  766. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.c +61 -0
  767. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.h +40 -0
  768. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.c +46 -0
  769. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.h +35 -0
  770. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/matcher.upbdefs.c +126 -0
  771. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/matcher.upbdefs.h +80 -0
  772. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/regex.upbdefs.c +40 -0
  773. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/regex.upbdefs.h +40 -0
  774. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/string.upbdefs.c +52 -0
  775. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/string.upbdefs.h +40 -0
  776. data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.c +40 -0
  777. data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.h +35 -0
  778. data/src/core/ext/xds/certificate_provider_factory.h +61 -0
  779. data/src/core/ext/xds/certificate_provider_registry.cc +103 -0
  780. data/src/core/ext/xds/certificate_provider_registry.h +57 -0
  781. data/src/core/ext/xds/certificate_provider_store.cc +95 -0
  782. data/src/core/ext/xds/certificate_provider_store.h +121 -0
  783. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +144 -0
  784. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +69 -0
  785. data/src/core/ext/xds/upb_utils.h +67 -0
  786. data/src/core/ext/xds/xds_api.cc +730 -0
  787. data/src/core/ext/xds/xds_api.h +191 -0
  788. data/src/core/ext/xds/xds_bootstrap.cc +570 -0
  789. data/src/core/ext/xds/xds_bootstrap.h +143 -0
  790. data/src/core/ext/xds/xds_certificate_provider.cc +407 -0
  791. data/src/core/ext/xds/xds_certificate_provider.h +159 -0
  792. data/src/core/ext/xds/xds_channel_args.h +32 -0
  793. data/src/core/ext/xds/xds_channel_stack_modifier.cc +109 -0
  794. data/src/core/ext/xds/xds_channel_stack_modifier.h +53 -0
  795. data/src/core/ext/xds/xds_client.cc +2512 -0
  796. data/src/core/ext/xds/xds_client.h +348 -0
  797. data/src/core/ext/xds/xds_client_stats.cc +160 -0
  798. data/src/core/ext/xds/xds_client_stats.h +241 -0
  799. data/src/core/ext/xds/xds_cluster.cc +453 -0
  800. data/src/core/ext/xds/xds_cluster.h +108 -0
  801. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +142 -0
  802. data/src/core/ext/xds/xds_cluster_specifier_plugin.h +79 -0
  803. data/src/core/ext/xds/xds_common_types.cc +388 -0
  804. data/src/core/ext/xds/xds_common_types.h +95 -0
  805. data/src/core/ext/xds/xds_endpoint.cc +371 -0
  806. data/src/core/ext/xds/xds_endpoint.h +135 -0
  807. data/src/core/ext/xds/xds_http_fault_filter.cc +227 -0
  808. data/src/core/ext/xds/xds_http_fault_filter.h +64 -0
  809. data/src/core/ext/xds/xds_http_filters.cc +122 -0
  810. data/src/core/ext/xds/xds_http_filters.h +133 -0
  811. data/src/core/ext/xds/xds_http_rbac_filter.cc +563 -0
  812. data/src/core/ext/xds/xds_http_rbac_filter.h +54 -0
  813. data/src/core/ext/xds/xds_listener.cc +1039 -0
  814. data/src/core/ext/xds/xds_listener.h +220 -0
  815. data/src/core/ext/xds/xds_resource_type.cc +33 -0
  816. data/src/core/ext/xds/xds_resource_type.h +98 -0
  817. data/src/core/ext/xds/xds_resource_type_impl.h +87 -0
  818. data/src/core/ext/xds/xds_route_config.cc +1122 -0
  819. data/src/core/ext/xds/xds_route_config.h +218 -0
  820. data/src/core/ext/xds/xds_routing.cc +250 -0
  821. data/src/core/ext/xds/xds_routing.h +101 -0
  822. data/src/core/ext/xds/xds_server_config_fetcher.cc +1314 -0
  823. data/src/core/lib/address_utils/parse_address.cc +340 -0
  824. data/src/core/lib/address_utils/parse_address.h +82 -0
  825. data/src/core/lib/address_utils/sockaddr_utils.cc +409 -0
  826. data/src/core/lib/address_utils/sockaddr_utils.h +95 -0
  827. data/src/core/lib/avl/avl.h +452 -88
  828. data/src/core/lib/backoff/backoff.cc +9 -38
  829. data/src/core/lib/backoff/backoff.h +11 -11
  830. data/src/core/lib/channel/call_finalization.h +86 -0
  831. data/src/core/lib/channel/call_tracer.h +88 -0
  832. data/src/core/lib/channel/channel_args.cc +182 -24
  833. data/src/core/lib/channel/channel_args.h +214 -2
  834. data/src/core/lib/channel/channel_args_preconditioning.cc +42 -0
  835. data/src/core/lib/channel/channel_args_preconditioning.h +61 -0
  836. data/src/core/lib/channel/channel_stack.cc +37 -15
  837. data/src/core/lib/channel/channel_stack.h +57 -16
  838. data/src/core/lib/channel/channel_stack_builder.cc +24 -283
  839. data/src/core/lib/channel/channel_stack_builder.h +118 -157
  840. data/src/core/lib/channel/channel_stack_builder_impl.cc +102 -0
  841. data/src/core/lib/channel/channel_stack_builder_impl.h +48 -0
  842. data/src/core/lib/channel/channel_trace.cc +14 -18
  843. data/src/core/lib/channel/channel_trace.h +3 -2
  844. data/src/core/lib/channel/channelz.cc +191 -137
  845. data/src/core/lib/channel/channelz.h +76 -53
  846. data/src/core/lib/channel/channelz_registry.cc +37 -19
  847. data/src/core/lib/channel/channelz_registry.h +4 -2
  848. data/src/core/lib/channel/connected_channel.cc +14 -10
  849. data/src/core/lib/channel/connected_channel.h +2 -2
  850. data/src/core/lib/channel/context.h +14 -0
  851. data/src/core/lib/channel/handshaker.cc +14 -54
  852. data/src/core/lib/channel/handshaker.h +10 -28
  853. data/src/core/lib/channel/handshaker_factory.h +10 -2
  854. data/src/core/lib/channel/handshaker_registry.cc +15 -70
  855. data/src/core/lib/channel/handshaker_registry.h +29 -12
  856. data/src/core/lib/channel/promise_based_filter.cc +1002 -0
  857. data/src/core/lib/channel/promise_based_filter.h +437 -0
  858. data/src/core/lib/channel/status_util.cc +12 -2
  859. data/src/core/lib/channel/status_util.h +11 -2
  860. data/src/core/lib/compression/compression.cc +22 -110
  861. data/src/core/lib/compression/compression_internal.cc +139 -202
  862. data/src/core/lib/compression/compression_internal.h +67 -71
  863. data/src/core/lib/compression/message_compress.cc +13 -13
  864. data/src/core/lib/compression/message_compress.h +2 -2
  865. data/src/core/lib/config/core_configuration.cc +104 -0
  866. data/src/core/lib/config/core_configuration.h +196 -0
  867. data/src/core/lib/debug/stats.cc +1 -1
  868. data/src/core/lib/debug/stats.h +4 -3
  869. data/src/core/lib/debug/stats_data.cc +17 -19
  870. data/src/core/lib/debug/stats_data.h +6 -8
  871. data/src/core/lib/debug/trace.cc +1 -0
  872. data/src/core/lib/debug/trace.h +4 -3
  873. data/src/core/lib/event_engine/channel_args_endpoint_config.cc +46 -0
  874. data/src/core/lib/event_engine/channel_args_endpoint_config.h +42 -0
  875. data/src/core/lib/event_engine/default_event_engine_factory.cc +27 -0
  876. data/src/core/lib/event_engine/event_engine.cc +52 -0
  877. data/src/core/lib/event_engine/event_engine_factory.h +36 -0
  878. data/src/core/lib/event_engine/memory_allocator.cc +66 -0
  879. data/src/core/lib/event_engine/resolved_address.cc +39 -0
  880. data/src/core/lib/event_engine/sockaddr.cc +40 -0
  881. data/src/core/lib/event_engine/sockaddr.h +44 -0
  882. data/src/core/lib/gpr/alloc.cc +7 -5
  883. data/src/core/lib/gpr/atm.cc +1 -1
  884. data/src/core/lib/gpr/cpu_iphone.cc +10 -2
  885. data/src/core/lib/gpr/cpu_posix.cc +1 -1
  886. data/src/core/lib/gpr/env_linux.cc +1 -2
  887. data/src/core/lib/gpr/env_posix.cc +2 -3
  888. data/src/core/lib/gpr/log.cc +61 -19
  889. data/src/core/lib/gpr/log_android.cc +3 -2
  890. data/src/core/lib/gpr/log_linux.cc +30 -13
  891. data/src/core/lib/gpr/log_posix.cc +25 -10
  892. data/src/core/lib/gpr/log_windows.cc +18 -4
  893. data/src/core/lib/gpr/murmur_hash.cc +5 -3
  894. data/src/core/lib/gpr/spinlock.h +10 -2
  895. data/src/core/lib/gpr/string.cc +35 -33
  896. data/src/core/lib/gpr/string.h +11 -10
  897. data/src/core/lib/gpr/sync.cc +6 -6
  898. data/src/core/lib/gpr/sync_abseil.cc +10 -12
  899. data/src/core/lib/gpr/sync_posix.cc +6 -11
  900. data/src/core/lib/gpr/sync_windows.cc +2 -2
  901. data/src/core/lib/gpr/time.cc +17 -15
  902. data/src/core/lib/gpr/time_precise.cc +5 -2
  903. data/src/core/lib/gpr/time_precise.h +6 -2
  904. data/src/core/lib/gpr/time_windows.cc +3 -2
  905. data/src/core/lib/gpr/tls.h +126 -36
  906. data/src/core/lib/gpr/tmpfile_posix.cc +1 -2
  907. data/src/core/lib/gpr/useful.h +97 -31
  908. data/src/core/lib/gpr/wrap_memcpy.cc +2 -1
  909. data/src/core/lib/gprpp/atomic_utils.h +47 -0
  910. data/src/core/lib/gprpp/bitset.h +207 -0
  911. data/src/core/lib/gprpp/capture.h +76 -0
  912. data/src/core/lib/gprpp/chunked_vector.h +253 -0
  913. data/src/core/lib/gprpp/construct_destruct.h +39 -0
  914. data/src/core/lib/gprpp/cpp_impl_of.h +49 -0
  915. data/src/core/lib/gprpp/debug_location.h +2 -0
  916. data/src/core/lib/gprpp/dual_ref_counted.h +330 -0
  917. data/src/core/lib/gprpp/examine_stack.cc +43 -0
  918. data/src/core/lib/gprpp/examine_stack.h +46 -0
  919. data/src/core/lib/gprpp/fork.cc +16 -14
  920. data/src/core/lib/gprpp/fork.h +4 -4
  921. data/src/core/lib/gprpp/global_config.h +1 -2
  922. data/src/core/lib/gprpp/global_config_env.cc +18 -16
  923. data/src/core/lib/gprpp/global_config_env.h +2 -2
  924. data/src/core/lib/gprpp/global_config_generic.h +2 -2
  925. data/src/core/lib/gprpp/manual_constructor.h +12 -10
  926. data/src/core/lib/gprpp/match.h +73 -0
  927. data/src/core/lib/gprpp/memory.h +9 -3
  928. data/src/core/lib/gprpp/mpscq.cc +9 -9
  929. data/src/core/lib/gprpp/mpscq.h +6 -5
  930. data/src/core/lib/gprpp/orphanable.h +11 -15
  931. data/src/core/lib/gprpp/overload.h +59 -0
  932. data/src/core/lib/gprpp/ref_counted.h +125 -86
  933. data/src/core/lib/gprpp/ref_counted_ptr.h +166 -7
  934. data/src/core/lib/gprpp/single_set_ptr.h +87 -0
  935. data/src/core/lib/gprpp/stat.h +38 -0
  936. data/src/core/lib/gprpp/stat_posix.cc +49 -0
  937. data/src/core/lib/gprpp/stat_windows.cc +48 -0
  938. data/src/core/lib/gprpp/status_helper.cc +435 -0
  939. data/src/core/lib/gprpp/status_helper.h +181 -0
  940. data/src/core/lib/gprpp/sync.h +106 -43
  941. data/src/core/lib/gprpp/table.h +434 -0
  942. data/src/core/lib/gprpp/thd.h +3 -3
  943. data/src/core/lib/gprpp/thd_posix.cc +47 -42
  944. data/src/core/lib/gprpp/thd_windows.cc +7 -12
  945. data/src/core/lib/gprpp/time.cc +198 -0
  946. data/src/core/lib/gprpp/time.h +292 -0
  947. data/src/core/lib/gprpp/time_util.cc +77 -0
  948. data/src/core/lib/gprpp/time_util.h +42 -0
  949. data/src/core/lib/http/format_request.cc +29 -25
  950. data/src/core/lib/http/format_request.h +8 -6
  951. data/src/core/lib/http/httpcli.cc +304 -211
  952. data/src/core/lib/http/httpcli.h +183 -86
  953. data/src/core/lib/http/httpcli_security_connector.cc +75 -85
  954. data/src/core/lib/http/httpcli_ssl_credentials.h +37 -0
  955. data/src/core/lib/http/parser.cc +145 -54
  956. data/src/core/lib/http/parser.h +20 -6
  957. data/src/core/lib/iomgr/buffer_list.cc +16 -17
  958. data/src/core/lib/iomgr/buffer_list.h +23 -25
  959. data/src/core/lib/iomgr/call_combiner.cc +60 -25
  960. data/src/core/lib/iomgr/call_combiner.h +12 -14
  961. data/src/core/lib/iomgr/cfstream_handle.cc +7 -6
  962. data/src/core/lib/iomgr/cfstream_handle.h +1 -1
  963. data/src/core/lib/iomgr/closure.h +33 -12
  964. data/src/core/lib/iomgr/combiner.cc +48 -37
  965. data/src/core/lib/iomgr/combiner.h +3 -2
  966. data/src/core/lib/iomgr/dualstack_socket_posix.cc +1 -0
  967. data/src/core/lib/iomgr/endpoint.cc +6 -6
  968. data/src/core/lib/iomgr/endpoint.h +10 -9
  969. data/src/core/lib/iomgr/endpoint_cfstream.cc +56 -60
  970. data/src/core/lib/iomgr/endpoint_cfstream.h +4 -4
  971. data/src/core/lib/iomgr/endpoint_pair.h +1 -0
  972. data/src/core/lib/iomgr/endpoint_pair_event_engine.cc +32 -0
  973. data/src/core/lib/iomgr/endpoint_pair_posix.cc +19 -17
  974. data/src/core/lib/iomgr/endpoint_pair_windows.cc +5 -6
  975. data/src/core/lib/iomgr/error.cc +287 -111
  976. data/src/core/lib/iomgr/error.h +278 -114
  977. data/src/core/lib/iomgr/error_cfstream.cc +17 -10
  978. data/src/core/lib/iomgr/error_cfstream.h +2 -2
  979. data/src/core/lib/iomgr/error_internal.h +7 -2
  980. data/src/core/lib/iomgr/ev_apple.cc +19 -15
  981. data/src/core/lib/iomgr/ev_apple.h +1 -1
  982. data/src/core/lib/iomgr/ev_epoll1_linux.cc +64 -64
  983. data/src/core/lib/iomgr/ev_poll_posix.cc +82 -79
  984. data/src/core/lib/iomgr/ev_posix.cc +21 -22
  985. data/src/core/lib/iomgr/ev_posix.h +9 -9
  986. data/src/core/lib/iomgr/event_engine/closure.cc +77 -0
  987. data/src/core/lib/iomgr/event_engine/closure.h +42 -0
  988. data/src/core/lib/iomgr/event_engine/endpoint.cc +172 -0
  989. data/src/core/lib/iomgr/event_engine/endpoint.h +52 -0
  990. data/src/core/lib/iomgr/event_engine/iomgr.cc +85 -0
  991. data/src/core/lib/iomgr/event_engine/pollset.cc +87 -0
  992. data/src/core/lib/iomgr/event_engine/pollset.h +25 -0
  993. data/src/core/lib/iomgr/event_engine/promise.h +51 -0
  994. data/src/core/lib/iomgr/event_engine/resolved_address_internal.cc +47 -0
  995. data/src/core/lib/iomgr/event_engine/resolved_address_internal.h +37 -0
  996. data/src/core/lib/iomgr/event_engine/resolver.cc +133 -0
  997. data/src/core/lib/iomgr/event_engine/resolver.h +56 -0
  998. data/src/core/lib/iomgr/event_engine/tcp.cc +296 -0
  999. data/src/core/lib/iomgr/event_engine/timer.cc +62 -0
  1000. data/src/core/lib/iomgr/exec_ctx.cc +30 -99
  1001. data/src/core/lib/iomgr/exec_ctx.h +42 -63
  1002. data/src/core/lib/iomgr/executor/mpmcqueue.cc +15 -16
  1003. data/src/core/lib/iomgr/executor/mpmcqueue.h +11 -15
  1004. data/src/core/lib/iomgr/executor/threadpool.cc +4 -5
  1005. data/src/core/lib/iomgr/executor/threadpool.h +8 -7
  1006. data/src/core/lib/iomgr/executor.cc +37 -45
  1007. data/src/core/lib/iomgr/executor.h +4 -4
  1008. data/src/core/lib/iomgr/fork_posix.cc +2 -1
  1009. data/src/core/lib/iomgr/grpc_if_nametoindex_posix.cc +2 -2
  1010. data/src/core/lib/iomgr/grpc_if_nametoindex_unsupported.cc +2 -2
  1011. data/src/core/lib/iomgr/internal_errqueue.cc +3 -2
  1012. data/src/core/lib/iomgr/iocp_windows.cc +10 -9
  1013. data/src/core/lib/iomgr/iocp_windows.h +1 -1
  1014. data/src/core/lib/iomgr/iomgr.cc +6 -4
  1015. data/src/core/lib/iomgr/iomgr.h +3 -3
  1016. data/src/core/lib/iomgr/iomgr_internal.cc +8 -12
  1017. data/src/core/lib/iomgr/iomgr_internal.h +6 -5
  1018. data/src/core/lib/iomgr/iomgr_posix.cc +5 -4
  1019. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +44 -15
  1020. data/src/core/lib/iomgr/iomgr_windows.cc +4 -5
  1021. data/src/core/lib/iomgr/load_file.cc +6 -6
  1022. data/src/core/lib/iomgr/load_file.h +2 -2
  1023. data/src/core/lib/iomgr/lockfree_event.cc +38 -15
  1024. data/src/core/lib/iomgr/lockfree_event.h +2 -2
  1025. data/src/core/lib/iomgr/polling_entity.cc +2 -2
  1026. data/src/core/lib/iomgr/polling_entity.h +6 -0
  1027. data/src/core/lib/iomgr/pollset.cc +5 -5
  1028. data/src/core/lib/iomgr/pollset.h +9 -9
  1029. data/src/core/lib/iomgr/pollset_set_windows.cc +1 -0
  1030. data/src/core/lib/iomgr/pollset_windows.cc +6 -6
  1031. data/src/core/lib/iomgr/port.h +9 -37
  1032. data/src/core/lib/iomgr/python_util.h +6 -5
  1033. data/src/core/lib/iomgr/resolve_address.cc +10 -24
  1034. data/src/core/lib/iomgr/resolve_address.h +48 -43
  1035. data/src/core/lib/iomgr/resolve_address_impl.h +59 -0
  1036. data/src/core/lib/iomgr/resolve_address_posix.cc +91 -83
  1037. data/src/core/lib/iomgr/resolve_address_posix.h +47 -0
  1038. data/src/core/lib/iomgr/resolve_address_windows.cc +106 -89
  1039. data/src/core/lib/iomgr/resolve_address_windows.h +47 -0
  1040. data/src/core/lib/iomgr/resolved_address.h +39 -0
  1041. data/src/core/lib/iomgr/sockaddr.h +2 -1
  1042. data/src/core/lib/iomgr/sockaddr_utils_posix.cc +62 -0
  1043. data/src/core/lib/iomgr/socket_factory_posix.cc +8 -7
  1044. data/src/core/lib/iomgr/socket_factory_posix.h +1 -0
  1045. data/src/core/lib/iomgr/socket_mutator.cc +20 -6
  1046. data/src/core/lib/iomgr/socket_mutator.h +27 -3
  1047. data/src/core/lib/iomgr/socket_utils_common_posix.cc +124 -99
  1048. data/src/core/lib/iomgr/socket_utils_linux.cc +4 -4
  1049. data/src/core/lib/iomgr/socket_utils_posix.cc +2 -2
  1050. data/src/core/lib/iomgr/socket_utils_posix.h +22 -22
  1051. data/src/core/lib/iomgr/socket_utils_windows.cc +2 -2
  1052. data/src/core/lib/iomgr/socket_windows.cc +4 -5
  1053. data/src/core/lib/iomgr/tcp_client.cc +4 -4
  1054. data/src/core/lib/iomgr/tcp_client.h +5 -2
  1055. data/src/core/lib/iomgr/tcp_client_cfstream.cc +19 -37
  1056. data/src/core/lib/iomgr/tcp_client_posix.cc +51 -67
  1057. data/src/core/lib/iomgr/tcp_client_posix.h +7 -6
  1058. data/src/core/lib/iomgr/tcp_client_windows.cc +21 -21
  1059. data/src/core/lib/iomgr/tcp_posix.cc +256 -209
  1060. data/src/core/lib/iomgr/tcp_posix.h +17 -12
  1061. data/src/core/lib/iomgr/tcp_server.cc +9 -10
  1062. data/src/core/lib/iomgr/tcp_server.h +21 -17
  1063. data/src/core/lib/iomgr/tcp_server_posix.cc +98 -86
  1064. data/src/core/lib/iomgr/tcp_server_utils_posix.h +36 -32
  1065. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +28 -27
  1066. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +14 -19
  1067. data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +4 -4
  1068. data/src/core/lib/iomgr/tcp_server_windows.cc +38 -41
  1069. data/src/core/lib/iomgr/tcp_windows.cc +56 -57
  1070. data/src/core/lib/iomgr/tcp_windows.h +3 -3
  1071. data/src/core/lib/iomgr/timer.cc +3 -2
  1072. data/src/core/lib/iomgr/timer.h +17 -8
  1073. data/src/core/lib/iomgr/timer_generic.cc +129 -139
  1074. data/src/core/lib/iomgr/timer_generic.h +1 -0
  1075. data/src/core/lib/iomgr/timer_heap.cc +2 -3
  1076. data/src/core/lib/iomgr/timer_manager.cc +19 -18
  1077. data/src/core/lib/iomgr/unix_sockets_posix.cc +33 -41
  1078. data/src/core/lib/iomgr/unix_sockets_posix.h +9 -6
  1079. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +15 -11
  1080. data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +3 -3
  1081. data/src/core/lib/iomgr/wakeup_fd_nospecial.cc +2 -1
  1082. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +8 -9
  1083. data/src/core/lib/iomgr/wakeup_fd_posix.cc +4 -3
  1084. data/src/core/lib/iomgr/wakeup_fd_posix.h +8 -6
  1085. data/src/core/lib/iomgr/work_serializer.cc +120 -44
  1086. data/src/core/lib/iomgr/work_serializer.h +33 -5
  1087. data/src/core/lib/json/json.h +13 -3
  1088. data/src/core/lib/json/json_reader.cc +112 -70
  1089. data/src/core/lib/json/json_util.cc +126 -0
  1090. data/src/core/lib/json/json_util.h +154 -0
  1091. data/src/core/lib/json/json_writer.cc +2 -4
  1092. data/src/core/lib/matchers/matchers.cc +327 -0
  1093. data/src/core/lib/matchers/matchers.h +160 -0
  1094. data/src/core/lib/profiling/basic_timers.cc +8 -6
  1095. data/src/core/lib/profiling/stap_timers.cc +2 -2
  1096. data/src/core/lib/promise/activity.cc +121 -0
  1097. data/src/core/lib/promise/activity.h +540 -0
  1098. data/src/core/lib/promise/arena_promise.h +188 -0
  1099. data/src/core/lib/promise/call_push_pull.h +144 -0
  1100. data/src/core/lib/promise/context.h +86 -0
  1101. data/src/core/lib/promise/detail/basic_seq.h +496 -0
  1102. data/src/core/lib/promise/detail/promise_factory.h +189 -0
  1103. data/src/core/lib/promise/detail/promise_like.h +85 -0
  1104. data/src/core/lib/promise/detail/status.h +50 -0
  1105. data/src/core/lib/promise/detail/switch.h +1455 -0
  1106. data/src/core/lib/promise/exec_ctx_wakeup_scheduler.h +48 -0
  1107. data/src/core/lib/promise/intra_activity_waiter.h +49 -0
  1108. data/src/core/lib/promise/latch.h +104 -0
  1109. data/src/core/lib/promise/loop.h +134 -0
  1110. data/src/core/lib/promise/map.h +88 -0
  1111. data/src/core/lib/promise/poll.h +66 -0
  1112. data/src/core/lib/promise/promise.h +95 -0
  1113. data/src/core/lib/promise/race.h +84 -0
  1114. data/src/core/lib/promise/seq.h +89 -0
  1115. data/src/core/lib/promise/sleep.cc +74 -0
  1116. data/src/core/lib/promise/sleep.h +66 -0
  1117. data/src/core/lib/promise/try_seq.h +157 -0
  1118. data/src/core/lib/resolver/resolver.cc +79 -0
  1119. data/src/core/lib/resolver/resolver.h +135 -0
  1120. data/src/core/lib/resolver/resolver_factory.h +76 -0
  1121. data/src/core/lib/resolver/resolver_registry.cc +156 -0
  1122. data/src/core/lib/resolver/resolver_registry.h +113 -0
  1123. data/src/core/lib/resolver/server_address.cc +170 -0
  1124. data/src/core/lib/resolver/server_address.h +144 -0
  1125. data/src/core/lib/resource_quota/api.cc +83 -0
  1126. data/src/core/lib/resource_quota/api.h +40 -0
  1127. data/src/core/lib/resource_quota/arena.cc +107 -0
  1128. data/src/core/lib/resource_quota/arena.h +142 -0
  1129. data/src/core/lib/resource_quota/memory_quota.cc +478 -0
  1130. data/src/core/lib/resource_quota/memory_quota.h +457 -0
  1131. data/src/core/lib/resource_quota/resource_quota.cc +33 -0
  1132. data/src/core/lib/resource_quota/resource_quota.h +66 -0
  1133. data/src/core/lib/resource_quota/thread_quota.cc +43 -0
  1134. data/src/core/lib/resource_quota/thread_quota.h +57 -0
  1135. data/src/core/lib/resource_quota/trace.cc +19 -0
  1136. data/src/core/lib/resource_quota/trace.h +24 -0
  1137. data/src/core/lib/security/authorization/authorization_engine.h +44 -0
  1138. data/src/core/lib/security/authorization/authorization_policy_provider.h +40 -0
  1139. data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +46 -0
  1140. data/src/core/lib/security/authorization/evaluate_args.cc +212 -0
  1141. data/src/core/lib/security/authorization/evaluate_args.h +92 -0
  1142. data/src/core/lib/security/authorization/grpc_authorization_engine.cc +60 -0
  1143. data/src/core/lib/security/authorization/grpc_authorization_engine.h +62 -0
  1144. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +106 -0
  1145. data/src/core/lib/security/authorization/grpc_server_authz_filter.h +50 -0
  1146. data/src/core/lib/security/authorization/matchers.cc +227 -0
  1147. data/src/core/lib/security/authorization/matchers.h +211 -0
  1148. data/src/core/lib/security/authorization/rbac_policy.cc +442 -0
  1149. data/src/core/lib/security/authorization/rbac_policy.h +171 -0
  1150. data/src/core/lib/security/context/security_context.cc +19 -13
  1151. data/src/core/lib/security/context/security_context.h +12 -3
  1152. data/src/core/lib/security/credentials/alts/alts_credentials.cc +8 -6
  1153. data/src/core/lib/security/credentials/alts/alts_credentials.h +11 -1
  1154. data/src/core/lib/security/credentials/alts/check_gcp_environment.cc +1 -1
  1155. data/src/core/lib/security/credentials/alts/check_gcp_environment_linux.cc +2 -2
  1156. data/src/core/lib/security/credentials/alts/check_gcp_environment_no_op.cc +2 -2
  1157. data/src/core/lib/security/credentials/alts/check_gcp_environment_windows.cc +2 -2
  1158. data/src/core/lib/security/credentials/call_creds_util.cc +87 -0
  1159. data/src/core/lib/security/credentials/call_creds_util.h +42 -0
  1160. data/src/core/lib/security/credentials/channel_creds_registry.h +97 -0
  1161. data/src/core/lib/security/credentials/channel_creds_registry_init.cc +70 -0
  1162. data/src/core/lib/security/credentials/composite/composite_credentials.cc +28 -86
  1163. data/src/core/lib/security/credentials/composite/composite_credentials.h +23 -10
  1164. data/src/core/lib/security/credentials/credentials.cc +18 -17
  1165. data/src/core/lib/security/credentials/credentials.h +92 -90
  1166. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +419 -0
  1167. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +82 -0
  1168. data/src/core/lib/security/credentials/external/aws_request_signer.cc +214 -0
  1169. data/src/core/lib/security/credentials/external/aws_request_signer.h +72 -0
  1170. data/src/core/lib/security/credentials/external/external_account_credentials.cc +544 -0
  1171. data/src/core/lib/security/credentials/external/external_account_credentials.h +118 -0
  1172. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +135 -0
  1173. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +49 -0
  1174. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +230 -0
  1175. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +61 -0
  1176. data/src/core/lib/security/credentials/fake/fake_credentials.cc +26 -29
  1177. data/src/core/lib/security/credentials/fake/fake_credentials.h +22 -21
  1178. data/src/core/lib/security/credentials/google_default/credentials_generic.cc +8 -7
  1179. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +169 -82
  1180. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +9 -3
  1181. data/src/core/lib/security/credentials/iam/iam_credentials.cc +23 -29
  1182. data/src/core/lib/security/credentials/iam/iam_credentials.h +15 -9
  1183. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +63 -0
  1184. data/src/core/lib/security/credentials/insecure/insecure_credentials.h +57 -0
  1185. data/src/core/lib/security/credentials/jwt/json_token.cc +10 -12
  1186. data/src/core/lib/security/credentials/jwt/json_token.h +2 -1
  1187. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +61 -53
  1188. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +31 -18
  1189. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +70 -62
  1190. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +4 -4
  1191. data/src/core/lib/security/credentials/local/local_credentials.cc +8 -7
  1192. data/src/core/lib/security/credentials/local/local_credentials.h +11 -1
  1193. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +216 -251
  1194. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +67 -38
  1195. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +100 -158
  1196. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +56 -27
  1197. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +36 -22
  1198. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +26 -6
  1199. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +348 -0
  1200. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +217 -0
  1201. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +454 -0
  1202. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +195 -0
  1203. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +209 -0
  1204. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +145 -0
  1205. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +62 -184
  1206. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +98 -294
  1207. data/src/core/lib/security/credentials/tls/tls_credentials.cc +40 -21
  1208. data/src/core/lib/security/credentials/tls/tls_credentials.h +9 -3
  1209. data/src/core/lib/security/credentials/tls/tls_utils.cc +123 -0
  1210. data/src/core/lib/security/credentials/tls/tls_utils.h +51 -0
  1211. data/src/core/lib/security/credentials/xds/xds_credentials.cc +237 -0
  1212. data/src/core/lib/security/credentials/xds/xds_credentials.h +100 -0
  1213. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +23 -19
  1214. data/src/core/lib/security/security_connector/alts/alts_security_connector.h +3 -3
  1215. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +37 -43
  1216. data/src/core/lib/security/security_connector/fake/fake_security_connector.h +0 -2
  1217. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +111 -0
  1218. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +92 -0
  1219. data/src/core/lib/security/security_connector/load_system_roots.h +4 -0
  1220. data/src/core/lib/security/security_connector/load_system_roots_fallback.cc +1 -0
  1221. data/src/core/lib/security/security_connector/load_system_roots_linux.cc +5 -6
  1222. data/src/core/lib/security/security_connector/load_system_roots_linux.h +2 -0
  1223. data/src/core/lib/security/security_connector/local/local_security_connector.cc +35 -27
  1224. data/src/core/lib/security/security_connector/security_connector.cc +14 -18
  1225. data/src/core/lib/security/security_connector/security_connector.h +38 -27
  1226. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +43 -32
  1227. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +6 -2
  1228. data/src/core/lib/security/security_connector/ssl_utils.cc +119 -65
  1229. data/src/core/lib/security/security_connector/ssl_utils.h +40 -40
  1230. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +646 -423
  1231. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +187 -104
  1232. data/src/core/lib/security/transport/auth_filters.h +37 -8
  1233. data/src/core/lib/security/transport/client_auth_filter.cc +102 -358
  1234. data/src/core/lib/security/transport/secure_endpoint.cc +214 -149
  1235. data/src/core/lib/security/transport/secure_endpoint.h +2 -1
  1236. data/src/core/lib/security/transport/security_handshaker.cc +172 -94
  1237. data/src/core/lib/security/transport/security_handshaker.h +2 -1
  1238. data/src/core/lib/security/transport/server_auth_filter.cc +58 -47
  1239. data/src/core/lib/security/transport/tsi_error.cc +5 -6
  1240. data/src/core/lib/security/transport/tsi_error.h +2 -1
  1241. data/src/core/lib/security/util/json_util.cc +10 -13
  1242. data/src/core/lib/security/util/json_util.h +2 -1
  1243. data/src/core/lib/service_config/service_config.h +82 -0
  1244. data/src/core/lib/service_config/service_config_call_data.h +72 -0
  1245. data/src/core/lib/service_config/service_config_impl.cc +230 -0
  1246. data/src/core/lib/service_config/service_config_impl.h +125 -0
  1247. data/src/core/lib/service_config/service_config_parser.cc +93 -0
  1248. data/src/core/lib/service_config/service_config_parser.h +106 -0
  1249. data/src/core/lib/slice/percent_encoding.cc +84 -97
  1250. data/src/core/lib/slice/percent_encoding.h +23 -28
  1251. data/src/core/lib/slice/slice.cc +111 -181
  1252. data/src/core/lib/slice/slice.h +384 -0
  1253. data/src/core/lib/slice/slice_api.cc +39 -0
  1254. data/src/core/lib/slice/slice_buffer.cc +12 -8
  1255. data/src/core/lib/slice/slice_internal.h +17 -277
  1256. data/src/core/lib/slice/slice_refcount.cc +35 -0
  1257. data/src/core/lib/slice/slice_refcount.h +46 -0
  1258. data/src/core/lib/slice/slice_refcount_base.h +61 -0
  1259. data/src/core/lib/slice/slice_split.cc +100 -0
  1260. data/src/core/lib/slice/slice_split.h +40 -0
  1261. data/src/core/lib/slice/slice_string_helpers.cc +0 -83
  1262. data/src/core/lib/slice/slice_string_helpers.h +0 -11
  1263. data/src/core/lib/surface/api_trace.cc +2 -1
  1264. data/src/core/lib/surface/api_trace.h +1 -0
  1265. data/src/core/lib/surface/builtins.cc +49 -0
  1266. data/src/core/lib/surface/builtins.h +26 -0
  1267. data/src/core/lib/surface/byte_buffer_reader.cc +1 -1
  1268. data/src/core/lib/surface/call.cc +1171 -1248
  1269. data/src/core/lib/surface/call.h +16 -24
  1270. data/src/core/lib/surface/call_details.cc +10 -10
  1271. data/src/core/lib/surface/call_log_batch.cc +2 -2
  1272. data/src/core/lib/surface/channel.cc +96 -135
  1273. data/src/core/lib/surface/channel.h +31 -22
  1274. data/src/core/lib/surface/channel_init.cc +22 -76
  1275. data/src/core/lib/surface/channel_init.h +44 -40
  1276. data/src/core/lib/surface/channel_ping.cc +2 -3
  1277. data/src/core/lib/surface/channel_stack_type.cc +2 -1
  1278. data/src/core/lib/surface/completion_queue.cc +154 -162
  1279. data/src/core/lib/surface/completion_queue.h +18 -17
  1280. data/src/core/lib/surface/completion_queue_factory.cc +3 -3
  1281. data/src/core/lib/surface/completion_queue_factory.h +1 -0
  1282. data/src/core/lib/surface/event_string.cc +1 -0
  1283. data/src/core/lib/surface/init.cc +121 -83
  1284. data/src/core/lib/surface/init.h +10 -4
  1285. data/src/core/lib/surface/lame_client.cc +80 -72
  1286. data/src/core/lib/surface/lame_client.h +5 -0
  1287. data/src/core/lib/surface/metadata_array.cc +2 -2
  1288. data/src/core/lib/surface/server.cc +1142 -1373
  1289. data/src/core/lib/surface/server.h +467 -71
  1290. data/src/core/lib/surface/validate_metadata.cc +55 -24
  1291. data/src/core/lib/surface/validate_metadata.h +6 -2
  1292. data/src/core/lib/surface/version.cc +2 -2
  1293. data/src/core/lib/transport/bdp_estimator.cc +11 -12
  1294. data/src/core/lib/transport/bdp_estimator.h +4 -3
  1295. data/src/core/lib/transport/byte_stream.cc +11 -5
  1296. data/src/core/lib/transport/byte_stream.h +12 -11
  1297. data/src/core/lib/transport/connectivity_state.cc +27 -19
  1298. data/src/core/lib/transport/connectivity_state.h +28 -14
  1299. data/src/core/lib/transport/error_utils.cc +73 -21
  1300. data/src/core/lib/transport/error_utils.h +17 -4
  1301. data/src/core/lib/transport/metadata_batch.h +1355 -152
  1302. data/src/core/lib/transport/parsed_metadata.cc +37 -0
  1303. data/src/core/lib/transport/parsed_metadata.h +401 -0
  1304. data/src/core/lib/transport/pid_controller.cc +4 -4
  1305. data/src/core/lib/transport/status_conversion.cc +2 -2
  1306. data/src/core/lib/transport/status_conversion.h +1 -1
  1307. data/src/core/lib/transport/timeout_encoding.cc +208 -71
  1308. data/src/core/lib/transport/timeout_encoding.h +40 -10
  1309. data/src/core/lib/transport/transport.cc +18 -36
  1310. data/src/core/lib/transport/transport.h +129 -15
  1311. data/src/core/lib/transport/transport_impl.h +14 -0
  1312. data/src/core/lib/transport/transport_op_string.cc +13 -35
  1313. data/src/core/lib/uri/uri_parser.cc +305 -254
  1314. data/src/core/lib/uri/uri_parser.h +92 -38
  1315. data/src/core/plugin_registry/grpc_plugin_registry.cc +76 -68
  1316. data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +85 -0
  1317. data/src/core/tsi/alts/crypt/aes_gcm.cc +6 -3
  1318. data/src/core/tsi/alts/crypt/gsec.cc +5 -4
  1319. data/src/core/tsi/alts/crypt/gsec.h +5 -0
  1320. data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +13 -12
  1321. data/src/core/tsi/alts/frame_protector/frame_handler.cc +18 -17
  1322. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +77 -68
  1323. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +2 -3
  1324. data/src/core/tsi/alts/handshaker/alts_shared_resource.cc +9 -1
  1325. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +103 -64
  1326. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +1 -1
  1327. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +2 -1
  1328. data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +2 -2
  1329. data/src/core/tsi/alts/handshaker/alts_tsi_utils.h +1 -1
  1330. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +5 -5
  1331. data/src/core/tsi/alts/handshaker/transport_security_common_api.h +2 -2
  1332. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +2 -2
  1333. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +1 -1
  1334. data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.cc +8 -6
  1335. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +6 -6
  1336. data/src/core/tsi/fake_transport_security.cc +32 -12
  1337. data/src/core/tsi/local_transport_security.cc +46 -87
  1338. data/src/core/tsi/local_transport_security.h +6 -10
  1339. data/src/core/tsi/ssl/key_logging/ssl_key_logging.cc +141 -0
  1340. data/src/core/tsi/ssl/key_logging/ssl_key_logging.h +81 -0
  1341. data/src/core/tsi/ssl/session_cache/ssl_session.h +2 -4
  1342. data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +1 -1
  1343. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +20 -55
  1344. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +9 -9
  1345. data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +2 -2
  1346. data/src/core/tsi/ssl_transport_security.cc +422 -129
  1347. data/src/core/tsi/ssl_transport_security.h +68 -16
  1348. data/src/core/tsi/transport_security.cc +25 -11
  1349. data/src/core/tsi/transport_security.h +16 -1
  1350. data/src/core/tsi/transport_security_grpc.h +1 -0
  1351. data/src/core/tsi/transport_security_interface.h +34 -1
  1352. data/src/ruby/bin/math_services_pb.rb +5 -5
  1353. data/src/ruby/ext/grpc/extconf.rb +34 -11
  1354. data/src/ruby/ext/grpc/rb_byte_buffer.c +2 -1
  1355. data/src/ruby/ext/grpc/rb_call.c +8 -7
  1356. data/src/ruby/ext/grpc/rb_call.h +4 -0
  1357. data/src/ruby/ext/grpc/rb_call_credentials.c +62 -17
  1358. data/src/ruby/ext/grpc/rb_channel.c +24 -10
  1359. data/src/ruby/ext/grpc/rb_channel_args.c +2 -2
  1360. data/src/ruby/ext/grpc/rb_channel_credentials.c +24 -5
  1361. data/src/ruby/ext/grpc/rb_channel_credentials.h +5 -0
  1362. data/src/ruby/ext/grpc/rb_completion_queue.c +3 -2
  1363. data/src/ruby/ext/grpc/rb_compression_options.c +6 -5
  1364. data/src/ruby/ext/grpc/rb_enable_cpp.cc +1 -1
  1365. data/src/ruby/ext/grpc/rb_event_thread.c +4 -2
  1366. data/src/ruby/ext/grpc/rb_grpc.c +9 -4
  1367. data/src/ruby/ext/grpc/rb_grpc.h +1 -0
  1368. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +76 -48
  1369. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +130 -88
  1370. data/src/ruby/ext/grpc/rb_server.c +26 -10
  1371. data/src/ruby/ext/grpc/rb_server_credentials.c +22 -6
  1372. data/src/ruby/ext/grpc/rb_server_credentials.h +5 -0
  1373. data/src/ruby/ext/grpc/rb_xds_channel_credentials.c +218 -0
  1374. data/src/ruby/ext/grpc/rb_xds_channel_credentials.h +37 -0
  1375. data/src/ruby/ext/grpc/rb_xds_server_credentials.c +170 -0
  1376. data/src/ruby/ext/grpc/rb_xds_server_credentials.h +37 -0
  1377. data/src/ruby/lib/grpc/generic/active_call.rb +7 -1
  1378. data/src/ruby/lib/grpc/generic/client_stub.rb +5 -3
  1379. data/src/ruby/lib/grpc/generic/interceptors.rb +1 -1
  1380. data/src/ruby/lib/grpc/grpc.rb +1 -1
  1381. data/src/ruby/lib/grpc/version.rb +1 -1
  1382. data/src/ruby/pb/generate_proto_ruby.sh +1 -0
  1383. data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +3 -3
  1384. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +40 -0
  1385. data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +1 -0
  1386. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +50 -16
  1387. data/src/ruby/pb/test/client.rb +769 -0
  1388. data/src/ruby/pb/test/server.rb +252 -0
  1389. data/src/ruby/pb/test/xds_client.rb +415 -0
  1390. data/src/ruby/spec/call_spec.rb +1 -1
  1391. data/src/ruby/spec/channel_credentials_spec.rb +42 -0
  1392. data/src/ruby/spec/channel_spec.rb +17 -6
  1393. data/src/ruby/spec/client_auth_spec.rb +27 -1
  1394. data/src/ruby/spec/client_server_spec.rb +1 -1
  1395. data/src/ruby/spec/errors_spec.rb +1 -1
  1396. data/src/ruby/spec/generic/active_call_spec.rb +21 -10
  1397. data/src/ruby/spec/generic/client_stub_spec.rb +4 -4
  1398. data/src/ruby/spec/generic/rpc_server_spec.rb +1 -1
  1399. data/src/ruby/spec/pb/codegen/grpc/testing/package_options_import2.proto +23 -0
  1400. data/src/ruby/spec/pb/codegen/grpc/testing/package_options_ruby_style.proto +2 -0
  1401. data/src/ruby/spec/pb/codegen/grpc/testing/same_package_service_name.proto +27 -0
  1402. data/src/ruby/spec/pb/codegen/grpc/testing/same_ruby_package_service_name.proto +29 -0
  1403. data/src/ruby/spec/pb/codegen/package_option_spec.rb +27 -7
  1404. data/src/ruby/spec/server_credentials_spec.rb +25 -0
  1405. data/src/ruby/spec/server_spec.rb +22 -0
  1406. data/src/ruby/spec/support/services.rb +10 -4
  1407. data/src/ruby/spec/user_agent_spec.rb +74 -0
  1408. data/third_party/abseil-cpp/absl/algorithm/container.h +1774 -0
  1409. data/third_party/abseil-cpp/absl/base/attributes.h +169 -55
  1410. data/third_party/abseil-cpp/absl/base/call_once.h +3 -10
  1411. data/third_party/abseil-cpp/absl/base/casts.h +9 -6
  1412. data/third_party/abseil-cpp/absl/base/config.h +150 -49
  1413. data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +417 -335
  1414. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +169 -0
  1415. data/third_party/abseil-cpp/absl/base/internal/dynamic_annotations.h +398 -0
  1416. data/third_party/abseil-cpp/absl/base/internal/endian.h +61 -0
  1417. data/third_party/abseil-cpp/absl/base/internal/fast_type_id.h +48 -0
  1418. data/third_party/abseil-cpp/absl/base/internal/invoke.h +4 -4
  1419. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +620 -0
  1420. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.h +126 -0
  1421. data/third_party/abseil-cpp/absl/base/internal/low_level_scheduling.h +31 -4
  1422. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +35 -33
  1423. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +17 -5
  1424. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +36 -40
  1425. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +36 -31
  1426. data/third_party/abseil-cpp/absl/base/internal/spinlock_akaros.inc +2 -2
  1427. data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +11 -3
  1428. data/third_party/abseil-cpp/absl/base/internal/spinlock_posix.inc +2 -2
  1429. data/third_party/abseil-cpp/absl/base/internal/spinlock_wait.h +13 -11
  1430. data/third_party/abseil-cpp/absl/base/internal/spinlock_win32.inc +5 -5
  1431. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +97 -5
  1432. data/third_party/abseil-cpp/absl/base/internal/sysinfo.h +8 -0
  1433. data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +9 -6
  1434. data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +58 -52
  1435. data/third_party/abseil-cpp/absl/base/internal/throw_delegate.cc +111 -7
  1436. data/third_party/abseil-cpp/absl/base/internal/tsan_mutex_interface.h +3 -1
  1437. data/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +0 -76
  1438. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +17 -3
  1439. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +7 -7
  1440. data/third_party/abseil-cpp/absl/base/log_severity.h +4 -4
  1441. data/third_party/abseil-cpp/absl/base/macros.h +47 -109
  1442. data/third_party/abseil-cpp/absl/base/optimization.h +69 -6
  1443. data/third_party/abseil-cpp/absl/base/options.h +31 -4
  1444. data/third_party/abseil-cpp/absl/base/policy_checks.h +1 -1
  1445. data/third_party/abseil-cpp/absl/base/port.h +0 -1
  1446. data/third_party/abseil-cpp/absl/base/thread_annotations.h +95 -40
  1447. data/third_party/abseil-cpp/absl/container/fixed_array.h +527 -0
  1448. data/third_party/abseil-cpp/absl/container/flat_hash_map.h +606 -0
  1449. data/third_party/abseil-cpp/absl/container/inlined_vector.h +141 -134
  1450. data/third_party/abseil-cpp/absl/container/internal/common.h +206 -0
  1451. data/third_party/abseil-cpp/absl/container/internal/compressed_tuple.h +34 -9
  1452. data/third_party/abseil-cpp/absl/container/internal/container_memory.h +460 -0
  1453. data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +163 -0
  1454. data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +208 -0
  1455. data/third_party/abseil-cpp/absl/container/internal/hashtable_debug_hooks.h +85 -0
  1456. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +190 -0
  1457. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +281 -0
  1458. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler_force_weak_definition.cc +31 -0
  1459. data/third_party/abseil-cpp/absl/container/internal/have_sse.h +50 -0
  1460. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +469 -429
  1461. data/third_party/abseil-cpp/absl/container/internal/layout.h +743 -0
  1462. data/third_party/abseil-cpp/absl/container/internal/raw_hash_map.h +198 -0
  1463. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +67 -0
  1464. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +2034 -0
  1465. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +139 -0
  1466. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.h +32 -0
  1467. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +1959 -0
  1468. data/third_party/abseil-cpp/absl/debugging/internal/demangle.h +71 -0
  1469. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +383 -0
  1470. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +138 -0
  1471. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +199 -0
  1472. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +134 -0
  1473. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +87 -0
  1474. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +110 -0
  1475. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +108 -0
  1476. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +253 -0
  1477. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +234 -0
  1478. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_unimplemented-inl.inc +24 -0
  1479. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +93 -0
  1480. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +364 -0
  1481. data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +153 -0
  1482. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +191 -0
  1483. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.h +158 -0
  1484. data/third_party/abseil-cpp/absl/debugging/stacktrace.cc +142 -0
  1485. data/third_party/abseil-cpp/absl/debugging/stacktrace.h +231 -0
  1486. data/third_party/abseil-cpp/absl/debugging/symbolize.cc +38 -0
  1487. data/third_party/abseil-cpp/absl/debugging/symbolize.h +99 -0
  1488. data/third_party/abseil-cpp/absl/debugging/symbolize_darwin.inc +101 -0
  1489. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +1574 -0
  1490. data/third_party/abseil-cpp/absl/debugging/symbolize_emscripten.inc +72 -0
  1491. data/third_party/abseil-cpp/absl/debugging/symbolize_unimplemented.inc +40 -0
  1492. data/third_party/abseil-cpp/absl/debugging/symbolize_win32.inc +81 -0
  1493. data/third_party/abseil-cpp/absl/functional/bind_front.h +184 -0
  1494. data/third_party/abseil-cpp/absl/functional/function_ref.h +142 -0
  1495. data/third_party/abseil-cpp/absl/functional/internal/front_binder.h +95 -0
  1496. data/third_party/abseil-cpp/absl/functional/internal/function_ref.h +106 -0
  1497. data/third_party/abseil-cpp/absl/hash/hash.h +347 -0
  1498. data/third_party/abseil-cpp/absl/hash/internal/city.cc +349 -0
  1499. data/third_party/abseil-cpp/absl/hash/internal/city.h +78 -0
  1500. data/third_party/abseil-cpp/absl/hash/internal/hash.cc +69 -0
  1501. data/third_party/abseil-cpp/absl/hash/internal/hash.h +1096 -0
  1502. data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.cc +123 -0
  1503. data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.h +50 -0
  1504. data/third_party/abseil-cpp/absl/memory/memory.h +4 -0
  1505. data/third_party/abseil-cpp/absl/meta/type_traits.h +49 -11
  1506. data/third_party/abseil-cpp/absl/numeric/bits.h +177 -0
  1507. data/third_party/abseil-cpp/absl/numeric/int128.cc +16 -37
  1508. data/third_party/abseil-cpp/absl/numeric/int128.h +159 -85
  1509. data/third_party/abseil-cpp/absl/numeric/int128_have_intrinsic.inc +19 -25
  1510. data/third_party/abseil-cpp/absl/numeric/int128_no_intrinsic.inc +73 -70
  1511. data/third_party/abseil-cpp/absl/numeric/internal/bits.h +358 -0
  1512. data/third_party/abseil-cpp/absl/numeric/internal/representation.h +55 -0
  1513. data/third_party/abseil-cpp/absl/profiling/internal/exponential_biased.cc +93 -0
  1514. data/third_party/abseil-cpp/absl/profiling/internal/exponential_biased.h +130 -0
  1515. data/third_party/abseil-cpp/absl/profiling/internal/sample_recorder.h +230 -0
  1516. data/third_party/abseil-cpp/absl/random/bernoulli_distribution.h +200 -0
  1517. data/third_party/abseil-cpp/absl/random/beta_distribution.h +427 -0
  1518. data/third_party/abseil-cpp/absl/random/discrete_distribution.cc +98 -0
  1519. data/third_party/abseil-cpp/absl/random/discrete_distribution.h +247 -0
  1520. data/third_party/abseil-cpp/absl/random/distributions.h +452 -0
  1521. data/third_party/abseil-cpp/absl/random/exponential_distribution.h +165 -0
  1522. data/third_party/abseil-cpp/absl/random/gaussian_distribution.cc +104 -0
  1523. data/third_party/abseil-cpp/absl/random/gaussian_distribution.h +275 -0
  1524. data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +92 -0
  1525. data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +268 -0
  1526. data/third_party/abseil-cpp/absl/random/internal/fastmath.h +57 -0
  1527. data/third_party/abseil-cpp/absl/random/internal/generate_real.h +144 -0
  1528. data/third_party/abseil-cpp/absl/random/internal/iostream_state_saver.h +245 -0
  1529. data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +150 -0
  1530. data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +308 -0
  1531. data/third_party/abseil-cpp/absl/random/internal/platform.h +171 -0
  1532. data/third_party/abseil-cpp/absl/random/internal/pool_urbg.cc +253 -0
  1533. data/third_party/abseil-cpp/absl/random/internal/pool_urbg.h +131 -0
  1534. data/third_party/abseil-cpp/absl/random/internal/randen.cc +91 -0
  1535. data/third_party/abseil-cpp/absl/random/internal/randen.h +102 -0
  1536. data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +221 -0
  1537. data/third_party/abseil-cpp/absl/random/internal/randen_detect.h +33 -0
  1538. data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +239 -0
  1539. data/third_party/abseil-cpp/absl/random/internal/randen_hwaes.cc +526 -0
  1540. data/third_party/abseil-cpp/absl/random/internal/randen_hwaes.h +50 -0
  1541. data/third_party/abseil-cpp/absl/random/internal/randen_round_keys.cc +462 -0
  1542. data/third_party/abseil-cpp/absl/random/internal/randen_slow.cc +471 -0
  1543. data/third_party/abseil-cpp/absl/random/internal/randen_slow.h +40 -0
  1544. data/third_party/abseil-cpp/absl/random/internal/randen_traits.h +88 -0
  1545. data/third_party/abseil-cpp/absl/random/internal/salted_seed_seq.h +167 -0
  1546. data/third_party/abseil-cpp/absl/random/internal/seed_material.cc +267 -0
  1547. data/third_party/abseil-cpp/absl/random/internal/seed_material.h +104 -0
  1548. data/third_party/abseil-cpp/absl/random/internal/traits.h +101 -0
  1549. data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +244 -0
  1550. data/third_party/abseil-cpp/absl/random/internal/wide_multiply.h +111 -0
  1551. data/third_party/abseil-cpp/absl/random/log_uniform_int_distribution.h +257 -0
  1552. data/third_party/abseil-cpp/absl/random/poisson_distribution.h +258 -0
  1553. data/third_party/abseil-cpp/absl/random/random.h +189 -0
  1554. data/third_party/abseil-cpp/absl/random/seed_gen_exception.cc +46 -0
  1555. data/third_party/abseil-cpp/absl/random/seed_gen_exception.h +55 -0
  1556. data/third_party/abseil-cpp/absl/random/seed_sequences.cc +29 -0
  1557. data/third_party/abseil-cpp/absl/random/seed_sequences.h +110 -0
  1558. data/third_party/abseil-cpp/absl/random/uniform_int_distribution.h +275 -0
  1559. data/third_party/abseil-cpp/absl/random/uniform_real_distribution.h +202 -0
  1560. data/third_party/abseil-cpp/absl/random/zipf_distribution.h +271 -0
  1561. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +69 -0
  1562. data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +396 -0
  1563. data/third_party/abseil-cpp/absl/status/status.cc +444 -0
  1564. data/third_party/abseil-cpp/absl/status/status.h +882 -0
  1565. data/third_party/abseil-cpp/absl/status/status_payload_printer.cc +38 -0
  1566. data/third_party/abseil-cpp/absl/status/status_payload_printer.h +51 -0
  1567. data/third_party/abseil-cpp/absl/status/statusor.cc +103 -0
  1568. data/third_party/abseil-cpp/absl/status/statusor.h +770 -0
  1569. data/third_party/abseil-cpp/absl/strings/charconv.cc +10 -10
  1570. data/third_party/abseil-cpp/absl/strings/charconv.h +3 -2
  1571. data/third_party/abseil-cpp/absl/strings/cord.cc +2047 -0
  1572. data/third_party/abseil-cpp/absl/strings/cord.h +1521 -0
  1573. data/third_party/abseil-cpp/absl/strings/escaping.cc +13 -13
  1574. data/third_party/abseil-cpp/absl/strings/internal/char_map.h +1 -1
  1575. data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.cc +1 -1
  1576. data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.h +2 -2
  1577. data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +9 -9
  1578. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +89 -0
  1579. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +620 -0
  1580. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +1128 -0
  1581. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.h +939 -0
  1582. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.cc +185 -0
  1583. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.h +265 -0
  1584. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.cc +68 -0
  1585. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.h +211 -0
  1586. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.cc +129 -0
  1587. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.h +50 -0
  1588. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +146 -0
  1589. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +771 -0
  1590. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.h +607 -0
  1591. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring_reader.h +118 -0
  1592. data/third_party/abseil-cpp/absl/strings/internal/cordz_functions.cc +96 -0
  1593. data/third_party/abseil-cpp/absl/strings/internal/cordz_functions.h +85 -0
  1594. data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.cc +139 -0
  1595. data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.h +131 -0
  1596. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +445 -0
  1597. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.h +298 -0
  1598. data/third_party/abseil-cpp/absl/strings/internal/cordz_statistics.h +87 -0
  1599. data/third_party/abseil-cpp/absl/strings/internal/cordz_update_scope.h +71 -0
  1600. data/third_party/abseil-cpp/absl/strings/internal/cordz_update_tracker.h +121 -0
  1601. data/third_party/abseil-cpp/absl/strings/internal/resize_uninitialized.h +48 -2
  1602. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +236 -136
  1603. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +158 -64
  1604. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +19 -6
  1605. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +30 -22
  1606. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +21 -14
  1607. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +37 -13
  1608. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +183 -153
  1609. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +1017 -87
  1610. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.h +17 -3
  1611. data/third_party/abseil-cpp/absl/strings/internal/str_format/output.h +4 -12
  1612. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +82 -77
  1613. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +51 -27
  1614. data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +49 -74
  1615. data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +64 -0
  1616. data/third_party/abseil-cpp/absl/strings/match.cc +6 -3
  1617. data/third_party/abseil-cpp/absl/strings/match.h +16 -6
  1618. data/third_party/abseil-cpp/absl/strings/numbers.cc +133 -5
  1619. data/third_party/abseil-cpp/absl/strings/numbers.h +44 -10
  1620. data/third_party/abseil-cpp/absl/strings/str_cat.cc +8 -8
  1621. data/third_party/abseil-cpp/absl/strings/str_cat.h +1 -1
  1622. data/third_party/abseil-cpp/absl/strings/str_format.h +290 -15
  1623. data/third_party/abseil-cpp/absl/strings/str_join.h +1 -1
  1624. data/third_party/abseil-cpp/absl/strings/str_split.cc +2 -2
  1625. data/third_party/abseil-cpp/absl/strings/str_split.h +39 -4
  1626. data/third_party/abseil-cpp/absl/strings/string_view.cc +16 -21
  1627. data/third_party/abseil-cpp/absl/strings/string_view.h +143 -55
  1628. data/third_party/abseil-cpp/absl/strings/substitute.cc +7 -6
  1629. data/third_party/abseil-cpp/absl/strings/substitute.h +109 -81
  1630. data/third_party/abseil-cpp/absl/synchronization/barrier.cc +52 -0
  1631. data/third_party/abseil-cpp/absl/synchronization/barrier.h +79 -0
  1632. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.cc +67 -0
  1633. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.h +101 -0
  1634. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +140 -0
  1635. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.h +60 -0
  1636. data/third_party/abseil-cpp/absl/synchronization/internal/futex.h +154 -0
  1637. data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +698 -0
  1638. data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.h +141 -0
  1639. data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +156 -0
  1640. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +106 -0
  1641. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +115 -0
  1642. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +428 -0
  1643. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +155 -0
  1644. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +2751 -0
  1645. data/third_party/abseil-cpp/absl/synchronization/mutex.h +1082 -0
  1646. data/third_party/abseil-cpp/absl/synchronization/notification.cc +78 -0
  1647. data/third_party/abseil-cpp/absl/synchronization/notification.h +123 -0
  1648. data/third_party/abseil-cpp/absl/time/civil_time.cc +9 -11
  1649. data/third_party/abseil-cpp/absl/time/clock.cc +146 -130
  1650. data/third_party/abseil-cpp/absl/time/clock.h +2 -2
  1651. data/third_party/abseil-cpp/absl/time/duration.cc +93 -61
  1652. data/third_party/abseil-cpp/absl/time/format.cc +43 -36
  1653. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +33 -27
  1654. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +97 -22
  1655. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/zone_info_source.h +1 -1
  1656. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.cc +1 -1
  1657. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +136 -29
  1658. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.h +2 -1
  1659. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.cc +13 -21
  1660. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.h +1 -1
  1661. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +219 -150
  1662. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.h +4 -5
  1663. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +15 -8
  1664. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +49 -0
  1665. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +3 -3
  1666. data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +1 -1
  1667. data/third_party/abseil-cpp/absl/time/time.cc +4 -3
  1668. data/third_party/abseil-cpp/absl/time/time.h +107 -75
  1669. data/third_party/abseil-cpp/absl/types/bad_optional_access.h +1 -1
  1670. data/third_party/abseil-cpp/absl/types/bad_variant_access.cc +64 -0
  1671. data/third_party/abseil-cpp/absl/types/bad_variant_access.h +82 -0
  1672. data/third_party/abseil-cpp/absl/types/internal/variant.h +1646 -0
  1673. data/third_party/abseil-cpp/absl/types/optional.h +9 -9
  1674. data/third_party/abseil-cpp/absl/types/span.h +51 -38
  1675. data/third_party/abseil-cpp/absl/types/variant.h +866 -0
  1676. data/third_party/abseil-cpp/absl/utility/utility.h +2 -2
  1677. data/third_party/address_sorting/address_sorting_posix.c +1 -0
  1678. data/third_party/address_sorting/include/address_sorting/address_sorting.h +2 -0
  1679. data/third_party/boringssl-with-bazel/err_data.c +775 -721
  1680. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c +72 -59
  1681. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +22 -23
  1682. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_d2i_fp.c +0 -2
  1683. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_enum.c +5 -5
  1684. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_gentm.c +6 -1
  1685. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_int.c +6 -6
  1686. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_mbstr.c +16 -23
  1687. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +70 -57
  1688. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_octet.c +3 -3
  1689. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_print.c +19 -29
  1690. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strex.c +650 -0
  1691. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c +106 -153
  1692. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +6 -6
  1693. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +23 -11
  1694. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utctm.c +3 -42
  1695. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utf8.c +1 -1
  1696. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +74 -68
  1697. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_par.c +1 -1
  1698. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn_pack.c +25 -29
  1699. data/third_party/boringssl-with-bazel/src/crypto/{x509 → asn1}/charmap.h +0 -0
  1700. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_int.c +6 -1
  1701. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_string.c +1 -1
  1702. data/third_party/boringssl-with-bazel/src/crypto/asn1/internal.h +224 -0
  1703. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +79 -354
  1704. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +327 -281
  1705. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c +15 -26
  1706. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_new.c +20 -75
  1707. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_typ.c +8 -8
  1708. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_utl.c +3 -2
  1709. data/third_party/boringssl-with-bazel/src/crypto/asn1/time_support.c +1 -1
  1710. data/third_party/boringssl-with-bazel/src/crypto/base64/base64.c +24 -8
  1711. data/third_party/boringssl-with-bazel/src/crypto/bio/bio.c +2 -0
  1712. data/third_party/boringssl-with-bazel/src/crypto/bio/bio_mem.c +1 -7
  1713. data/third_party/boringssl-with-bazel/src/crypto/bio/connect.c +1 -5
  1714. data/third_party/boringssl-with-bazel/src/crypto/bio/fd.c +0 -4
  1715. data/third_party/boringssl-with-bazel/src/crypto/bio/file.c +1 -7
  1716. data/third_party/boringssl-with-bazel/src/crypto/bio/pair.c +1 -6
  1717. data/third_party/boringssl-with-bazel/src/crypto/bio/socket.c +3 -17
  1718. data/third_party/boringssl-with-bazel/src/crypto/bio/socket_helper.c +4 -0
  1719. data/third_party/boringssl-with-bazel/src/crypto/blake2/blake2.c +156 -0
  1720. data/third_party/boringssl-with-bazel/src/crypto/bn_extra/bn_asn1.c +3 -10
  1721. data/third_party/boringssl-with-bazel/src/crypto/bytestring/ber.c +11 -10
  1722. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbb.c +9 -0
  1723. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbs.c +68 -45
  1724. data/third_party/boringssl-with-bazel/src/crypto/chacha/chacha.c +38 -47
  1725. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/cipher_extra.c +49 -65
  1726. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_chacha20poly1305.c +6 -81
  1727. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_tls.c +1 -88
  1728. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h +101 -3
  1729. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +120 -273
  1730. data/third_party/boringssl-with-bazel/src/crypto/conf/conf.c +14 -3
  1731. data/third_party/boringssl-with-bazel/src/crypto/cpu-aarch64-win.c +41 -0
  1732. data/third_party/boringssl-with-bazel/src/crypto/cpu-arm-linux.c +11 -2
  1733. data/third_party/boringssl-with-bazel/src/crypto/cpu-arm.c +3 -3
  1734. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519.c +1 -1
  1735. data/third_party/boringssl-with-bazel/src/crypto/curve25519/internal.h +1 -1
  1736. data/third_party/boringssl-with-bazel/src/crypto/{dh → dh_extra}/dh_asn1.c +0 -0
  1737. data/third_party/boringssl-with-bazel/src/crypto/dh_extra/params.c +272 -0
  1738. data/third_party/boringssl-with-bazel/src/crypto/digest_extra/digest_extra.c +31 -3
  1739. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +30 -43
  1740. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa_asn1.c +55 -4
  1741. data/third_party/boringssl-with-bazel/src/crypto/dsa/internal.h +34 -0
  1742. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/ec_asn1.c +2 -17
  1743. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c +12 -52
  1744. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h +0 -22
  1745. data/third_party/boringssl-with-bazel/src/crypto/err/err.c +87 -80
  1746. data/third_party/boringssl-with-bazel/src/crypto/evp/evp.c +13 -0
  1747. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +161 -2
  1748. data/third_party/boringssl-with-bazel/src/crypto/evp/p_dsa_asn1.c +6 -2
  1749. data/third_party/boringssl-with-bazel/src/crypto/evp/scrypt.c +32 -34
  1750. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/mode_wrappers.c +17 -1
  1751. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +4 -1
  1752. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/bn.c +13 -20
  1753. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div.c +28 -12
  1754. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd_extra.c +3 -2
  1755. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +26 -5
  1756. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/prime.c +0 -4
  1757. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/sqrt.c +5 -9
  1758. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +44 -16
  1759. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +208 -37
  1760. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/des/des.c +10 -11
  1761. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/des/internal.h +1 -3
  1762. data/third_party/boringssl-with-bazel/src/crypto/{dh → fipsmodule/dh}/check.c +0 -0
  1763. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/dh.c +456 -0
  1764. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digest.c +11 -0
  1765. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digests.c +10 -2
  1766. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/md32_common.h +87 -160
  1767. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +16 -0
  1768. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +9 -2
  1769. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +2 -5
  1770. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c +13 -11
  1771. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64.c +24 -23
  1772. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.c +20 -16
  1773. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c +2 -2
  1774. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/util.c +3 -3
  1775. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +105 -95
  1776. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/internal.h +39 -0
  1777. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md4/md4.c +56 -72
  1778. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/md5.c +56 -73
  1779. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cbc.c +33 -22
  1780. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cfb.c +9 -8
  1781. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ctr.c +9 -8
  1782. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm.c +17 -13
  1783. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm_nohw.c +1 -1
  1784. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/internal.h +1 -22
  1785. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ofb.c +2 -1
  1786. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +30 -9
  1787. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +123 -44
  1788. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +30 -20
  1789. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h +4 -0
  1790. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +80 -43
  1791. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +120 -62
  1792. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/fips.c +79 -0
  1793. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +238 -18
  1794. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +93 -107
  1795. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +91 -113
  1796. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +50 -86
  1797. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +618 -0
  1798. data/third_party/boringssl-with-bazel/src/crypto/hrss/hrss.c +219 -121
  1799. data/third_party/boringssl-with-bazel/src/crypto/hrss/internal.h +9 -2
  1800. data/third_party/boringssl-with-bazel/src/crypto/internal.h +125 -0
  1801. data/third_party/boringssl-with-bazel/src/crypto/lhash/internal.h +253 -0
  1802. data/third_party/boringssl-with-bazel/src/crypto/lhash/lhash.c +28 -23
  1803. data/third_party/boringssl-with-bazel/src/crypto/mem.c +75 -24
  1804. data/third_party/boringssl-with-bazel/src/crypto/obj/obj.c +10 -6
  1805. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_all.c +0 -9
  1806. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_info.c +0 -2
  1807. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_lib.c +0 -8
  1808. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pk8.c +0 -2
  1809. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pkey.c +0 -4
  1810. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/internal.h +16 -7
  1811. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7.c +38 -4
  1812. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c +156 -15
  1813. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/internal.h +7 -1
  1814. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8.c +1 -1
  1815. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +132 -54
  1816. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305.c +11 -8
  1817. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_arm.c +13 -11
  1818. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_vec.c +4 -0
  1819. data/third_party/boringssl-with-bazel/src/crypto/pool/internal.h +5 -1
  1820. data/third_party/boringssl-with-bazel/src/crypto/pool/pool.c +59 -22
  1821. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/deterministic.c +4 -0
  1822. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/fuchsia.c +4 -0
  1823. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/passive.c +34 -0
  1824. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/rand_extra.c +5 -1
  1825. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/windows.c +4 -0
  1826. data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/rsa_asn1.c +1 -2
  1827. data/third_party/boringssl-with-bazel/src/crypto/siphash/siphash.c +6 -6
  1828. data/third_party/boringssl-with-bazel/src/crypto/stack/stack.c +7 -13
  1829. data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +0 -28
  1830. data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +110 -70
  1831. data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +348 -423
  1832. data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +217 -79
  1833. data/third_party/boringssl-with-bazel/src/crypto/trust_token/voprf.c +766 -0
  1834. data/third_party/boringssl-with-bazel/src/crypto/x509/a_verify.c +15 -11
  1835. data/third_party/boringssl-with-bazel/src/crypto/x509/algorithm.c +11 -1
  1836. data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +5 -21
  1837. data/third_party/boringssl-with-bazel/src/crypto/x509/by_dir.c +1 -0
  1838. data/third_party/boringssl-with-bazel/src/crypto/x509/by_file.c +2 -0
  1839. data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +351 -13
  1840. data/third_party/boringssl-with-bazel/src/crypto/x509/name_print.c +246 -0
  1841. data/third_party/boringssl-with-bazel/src/crypto/x509/rsa_pss.c +20 -5
  1842. data/third_party/boringssl-with-bazel/src/crypto/x509/t_crl.c +13 -8
  1843. data/third_party/boringssl-with-bazel/src/crypto/x509/t_req.c +2 -0
  1844. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c +1 -180
  1845. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509a.c +7 -2
  1846. data/third_party/boringssl-with-bazel/src/crypto/x509/x509.c +0 -67
  1847. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c +24 -47
  1848. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +24 -39
  1849. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_ext.c +29 -23
  1850. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_lu.c +1 -5
  1851. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_obj.c +2 -1
  1852. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +52 -89
  1853. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +67 -12
  1854. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +9 -4
  1855. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_txt.c +67 -67
  1856. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_v3.c +29 -26
  1857. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +82 -113
  1858. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vpm.c +54 -74
  1859. data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +99 -25
  1860. data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +11 -12
  1861. data/third_party/boringssl-with-bazel/src/crypto/x509/x509rset.c +3 -0
  1862. data/third_party/boringssl-with-bazel/src/crypto/x509/x_algor.c +21 -19
  1863. data/third_party/boringssl-with-bazel/src/crypto/x509/x_all.c +13 -26
  1864. data/third_party/boringssl-with-bazel/src/crypto/x509/x_attrib.c +21 -34
  1865. data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +52 -28
  1866. data/third_party/boringssl-with-bazel/src/crypto/x509/x_exten.c +2 -0
  1867. data/third_party/boringssl-with-bazel/src/crypto/x509/x_name.c +49 -59
  1868. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pkey.c +2 -2
  1869. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +21 -172
  1870. data/third_party/boringssl-with-bazel/src/crypto/x509/x_req.c +5 -8
  1871. data/third_party/boringssl-with-bazel/src/crypto/x509/x_sig.c +25 -0
  1872. data/third_party/boringssl-with-bazel/src/crypto/x509/x_val.c +2 -0
  1873. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +75 -15
  1874. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509a.c +5 -2
  1875. data/third_party/boringssl-with-bazel/src/crypto/x509v3/ext_dat.h +1 -4
  1876. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +244 -11
  1877. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_cache.c +2 -1
  1878. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_data.c +7 -5
  1879. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_lib.c +1 -1
  1880. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_map.c +2 -1
  1881. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_node.c +1 -1
  1882. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_tree.c +5 -4
  1883. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akey.c +27 -8
  1884. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +43 -32
  1885. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bitst.c +6 -3
  1886. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_conf.c +33 -28
  1887. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +10 -13
  1888. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_crld.c +4 -2
  1889. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_enum.c +7 -1
  1890. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_genn.c +42 -22
  1891. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ia5.c +3 -4
  1892. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_info.c +1 -1
  1893. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +48 -40
  1894. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ncons.c +112 -55
  1895. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pci.c +2 -1
  1896. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +15 -14
  1897. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +128 -42
  1898. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +8 -7
  1899. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +86 -44
  1900. data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +25 -4
  1901. data/third_party/boringssl-with-bazel/src/include/openssl/aes.h +16 -4
  1902. data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +119 -0
  1903. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +1801 -673
  1904. data/third_party/boringssl-with-bazel/src/include/openssl/asn1t.h +5 -179
  1905. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +67 -15
  1906. data/third_party/boringssl-with-bazel/src/include/openssl/base64.h +8 -0
  1907. data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +7 -1
  1908. data/third_party/boringssl-with-bazel/src/include/openssl/blake2.h +62 -0
  1909. data/third_party/boringssl-with-bazel/src/include/openssl/bn.h +3 -3
  1910. data/third_party/boringssl-with-bazel/src/include/openssl/bytestring.h +32 -7
  1911. data/third_party/boringssl-with-bazel/src/include/openssl/chacha.h +1 -1
  1912. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +42 -7
  1913. data/third_party/boringssl-with-bazel/src/include/openssl/conf.h +8 -5
  1914. data/third_party/boringssl-with-bazel/src/include/openssl/cpu.h +22 -32
  1915. data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +25 -5
  1916. data/third_party/boringssl-with-bazel/src/include/openssl/des.h +6 -0
  1917. data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +66 -32
  1918. data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +19 -2
  1919. data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +27 -41
  1920. data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +20 -2
  1921. data/third_party/boringssl-with-bazel/src/include/openssl/ec_key.h +12 -27
  1922. data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +41 -10
  1923. data/third_party/boringssl-with-bazel/src/include/openssl/err.h +3 -2
  1924. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +108 -75
  1925. data/third_party/boringssl-with-bazel/src/include/openssl/evp_errors.h +99 -0
  1926. data/third_party/boringssl-with-bazel/src/include/openssl/hkdf.h +4 -0
  1927. data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +350 -0
  1928. data/third_party/boringssl-with-bazel/src/include/openssl/hrss.h +14 -12
  1929. data/third_party/boringssl-with-bazel/src/include/openssl/lhash.h +4 -205
  1930. data/third_party/boringssl-with-bazel/src/include/openssl/mem.h +12 -3
  1931. data/third_party/boringssl-with-bazel/src/include/openssl/obj.h +26 -6
  1932. data/third_party/boringssl-with-bazel/src/include/openssl/opensslconf.h +3 -0
  1933. data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +194 -146
  1934. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +42 -18
  1935. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +15 -2
  1936. data/third_party/boringssl-with-bazel/src/include/openssl/pool.h +7 -1
  1937. data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +5 -2
  1938. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +128 -91
  1939. data/third_party/boringssl-with-bazel/src/include/openssl/span.h +39 -16
  1940. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +570 -144
  1941. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +53 -38
  1942. data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +43 -24
  1943. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +2041 -829
  1944. data/third_party/boringssl-with-bazel/src/include/openssl/x509_vfy.h +16 -679
  1945. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +642 -452
  1946. data/third_party/boringssl-with-bazel/src/ssl/bio_ssl.cc +18 -5
  1947. data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +16 -18
  1948. data/third_party/boringssl-with-bazel/src/ssl/d1_srtp.cc +1 -1
  1949. data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +1084 -0
  1950. data/third_party/boringssl-with-bazel/src/ssl/extensions.cc +4325 -0
  1951. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +336 -25
  1952. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +108 -53
  1953. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +317 -221
  1954. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +187 -36
  1955. data/third_party/boringssl-with-bazel/src/ssl/internal.h +554 -173
  1956. data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +9 -3
  1957. data/third_party/boringssl-with-bazel/src/ssl/s3_lib.cc +0 -2
  1958. data/third_party/boringssl-with-bazel/src/ssl/s3_pkt.cc +14 -19
  1959. data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +55 -15
  1960. data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +7 -12
  1961. data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +10 -11
  1962. data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +34 -31
  1963. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +167 -110
  1964. data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +2 -0
  1965. data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +147 -138
  1966. data/third_party/boringssl-with-bazel/src/ssl/ssl_stat.cc +3 -0
  1967. data/third_party/boringssl-with-bazel/src/ssl/ssl_transcript.cc +12 -17
  1968. data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +16 -8
  1969. data/third_party/boringssl-with-bazel/src/ssl/ssl_x509.cc +28 -23
  1970. data/third_party/boringssl-with-bazel/src/ssl/t1_enc.cc +47 -28
  1971. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +80 -36
  1972. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +316 -211
  1973. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +160 -91
  1974. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +398 -145
  1975. data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +4 -2
  1976. data/third_party/boringssl-with-bazel/src/ssl/tls_record.cc +5 -3
  1977. data/third_party/cares/cares/include/ares.h +742 -0
  1978. data/third_party/cares/cares/include/ares_dns.h +112 -0
  1979. data/third_party/cares/cares/{ares_rules.h → include/ares_rules.h} +0 -0
  1980. data/third_party/cares/cares/include/ares_version.h +24 -0
  1981. data/third_party/cares/cares/src/lib/ares__close_sockets.c +61 -0
  1982. data/third_party/cares/cares/src/lib/ares__get_hostent.c +260 -0
  1983. data/third_party/cares/cares/src/lib/ares__parse_into_addrinfo.c +260 -0
  1984. data/third_party/cares/cares/{ares__read_line.c → src/lib/ares__read_line.c} +0 -0
  1985. data/third_party/cares/cares/src/lib/ares__readaddrinfo.c +264 -0
  1986. data/third_party/cares/cares/src/lib/ares__sortaddrinfo.c +499 -0
  1987. data/third_party/cares/cares/{ares__timeval.c → src/lib/ares__timeval.c} +0 -0
  1988. data/third_party/cares/cares/src/lib/ares_android.c +444 -0
  1989. data/third_party/cares/cares/src/lib/ares_android.h +27 -0
  1990. data/third_party/cares/cares/{ares_cancel.c → src/lib/ares_cancel.c} +0 -0
  1991. data/third_party/cares/cares/src/lib/ares_create_query.c +197 -0
  1992. data/third_party/cares/cares/src/lib/ares_data.c +240 -0
  1993. data/third_party/cares/cares/src/lib/ares_data.h +74 -0
  1994. data/third_party/cares/cares/{ares_destroy.c → src/lib/ares_destroy.c} +0 -0
  1995. data/third_party/cares/cares/src/lib/ares_expand_name.c +300 -0
  1996. data/third_party/cares/cares/src/lib/ares_expand_string.c +67 -0
  1997. data/third_party/cares/cares/{ares_fds.c → src/lib/ares_fds.c} +0 -0
  1998. data/third_party/cares/cares/src/lib/ares_free_hostent.c +43 -0
  1999. data/third_party/cares/cares/{ares_free_string.c → src/lib/ares_free_string.c} +0 -0
  2000. data/third_party/cares/cares/src/lib/ares_freeaddrinfo.c +59 -0
  2001. data/third_party/cares/cares/src/lib/ares_getaddrinfo.c +772 -0
  2002. data/third_party/cares/cares/src/lib/ares_getenv.c +28 -0
  2003. data/third_party/cares/cares/{ares_getenv.h → src/lib/ares_getenv.h} +0 -0
  2004. data/third_party/cares/cares/src/lib/ares_gethostbyaddr.c +287 -0
  2005. data/third_party/cares/cares/src/lib/ares_gethostbyname.c +534 -0
  2006. data/third_party/cares/cares/src/lib/ares_getnameinfo.c +447 -0
  2007. data/third_party/cares/cares/{ares_getsock.c → src/lib/ares_getsock.c} +0 -0
  2008. data/third_party/cares/cares/{ares_inet_net_pton.h → src/lib/ares_inet_net_pton.h} +0 -0
  2009. data/third_party/cares/cares/src/lib/ares_init.c +2654 -0
  2010. data/third_party/cares/cares/{ares_iphlpapi.h → src/lib/ares_iphlpapi.h} +0 -0
  2011. data/third_party/cares/cares/src/lib/ares_ipv6.h +85 -0
  2012. data/third_party/cares/cares/src/lib/ares_library_init.c +200 -0
  2013. data/third_party/cares/cares/src/lib/ares_library_init.h +43 -0
  2014. data/third_party/cares/cares/{ares_llist.c → src/lib/ares_llist.c} +0 -0
  2015. data/third_party/cares/cares/{ares_llist.h → src/lib/ares_llist.h} +0 -0
  2016. data/third_party/cares/cares/{ares_mkquery.c → src/lib/ares_mkquery.c} +0 -0
  2017. data/third_party/cares/cares/src/lib/ares_nameser.h +482 -0
  2018. data/third_party/cares/cares/{ares_nowarn.c → src/lib/ares_nowarn.c} +0 -0
  2019. data/third_party/cares/cares/{ares_nowarn.h → src/lib/ares_nowarn.h} +0 -0
  2020. data/third_party/cares/cares/{ares_options.c → src/lib/ares_options.c} +0 -0
  2021. data/third_party/cares/cares/src/lib/ares_parse_a_reply.c +209 -0
  2022. data/third_party/cares/cares/src/lib/ares_parse_aaaa_reply.c +212 -0
  2023. data/third_party/cares/cares/src/lib/ares_parse_caa_reply.c +199 -0
  2024. data/third_party/cares/cares/src/lib/ares_parse_mx_reply.c +164 -0
  2025. data/third_party/cares/cares/src/lib/ares_parse_naptr_reply.c +183 -0
  2026. data/third_party/cares/cares/src/lib/ares_parse_ns_reply.c +177 -0
  2027. data/third_party/cares/cares/src/lib/ares_parse_ptr_reply.c +228 -0
  2028. data/third_party/cares/cares/src/lib/ares_parse_soa_reply.c +179 -0
  2029. data/third_party/cares/cares/src/lib/ares_parse_srv_reply.c +168 -0
  2030. data/third_party/cares/cares/src/lib/ares_parse_txt_reply.c +214 -0
  2031. data/third_party/cares/cares/{ares_platform.c → src/lib/ares_platform.c} +0 -0
  2032. data/third_party/cares/cares/{ares_platform.h → src/lib/ares_platform.h} +0 -0
  2033. data/third_party/cares/cares/src/lib/ares_private.h +423 -0
  2034. data/third_party/cares/cares/src/lib/ares_process.c +1548 -0
  2035. data/third_party/cares/cares/src/lib/ares_query.c +180 -0
  2036. data/third_party/cares/cares/src/lib/ares_search.c +321 -0
  2037. data/third_party/cares/cares/src/lib/ares_send.c +131 -0
  2038. data/third_party/cares/cares/src/lib/ares_setup.h +220 -0
  2039. data/third_party/cares/cares/{ares_strcasecmp.c → src/lib/ares_strcasecmp.c} +0 -0
  2040. data/third_party/cares/cares/{ares_strcasecmp.h → src/lib/ares_strcasecmp.h} +0 -0
  2041. data/third_party/cares/cares/{ares_strdup.c → src/lib/ares_strdup.c} +0 -0
  2042. data/third_party/cares/cares/{ares_strdup.h → src/lib/ares_strdup.h} +0 -0
  2043. data/third_party/cares/cares/{ares_strerror.c → src/lib/ares_strerror.c} +0 -0
  2044. data/third_party/cares/cares/src/lib/ares_strsplit.c +178 -0
  2045. data/third_party/cares/cares/{ares_strsplit.h → src/lib/ares_strsplit.h} +0 -0
  2046. data/third_party/cares/cares/{ares_timeout.c → src/lib/ares_timeout.c} +0 -0
  2047. data/third_party/cares/cares/{ares_version.c → src/lib/ares_version.c} +0 -0
  2048. data/third_party/cares/cares/{ares_writev.c → src/lib/ares_writev.c} +0 -0
  2049. data/third_party/cares/cares/src/lib/ares_writev.h +36 -0
  2050. data/third_party/cares/cares/{bitncmp.c → src/lib/bitncmp.c} +0 -0
  2051. data/third_party/cares/cares/{bitncmp.h → src/lib/bitncmp.h} +0 -0
  2052. data/third_party/cares/cares/src/lib/config-dos.h +115 -0
  2053. data/third_party/cares/cares/{config-win32.h → src/lib/config-win32.h} +0 -0
  2054. data/third_party/cares/cares/src/lib/inet_net_pton.c +444 -0
  2055. data/third_party/cares/cares/src/lib/inet_ntop.c +201 -0
  2056. data/third_party/cares/cares/{setup_once.h → src/lib/setup_once.h} +0 -0
  2057. data/third_party/cares/cares/{windows_port.c → src/lib/windows_port.c} +0 -0
  2058. data/third_party/re2/re2/bitmap256.h +117 -0
  2059. data/third_party/re2/re2/bitstate.cc +385 -0
  2060. data/third_party/re2/re2/compile.cc +1261 -0
  2061. data/third_party/re2/re2/dfa.cc +2118 -0
  2062. data/third_party/re2/re2/filtered_re2.cc +137 -0
  2063. data/third_party/re2/re2/filtered_re2.h +114 -0
  2064. data/third_party/re2/re2/mimics_pcre.cc +197 -0
  2065. data/third_party/re2/re2/nfa.cc +713 -0
  2066. data/third_party/re2/re2/onepass.cc +623 -0
  2067. data/third_party/re2/re2/parse.cc +2483 -0
  2068. data/third_party/re2/re2/perl_groups.cc +119 -0
  2069. data/third_party/re2/re2/pod_array.h +55 -0
  2070. data/third_party/re2/re2/prefilter.cc +711 -0
  2071. data/third_party/re2/re2/prefilter.h +108 -0
  2072. data/third_party/re2/re2/prefilter_tree.cc +407 -0
  2073. data/third_party/re2/re2/prefilter_tree.h +139 -0
  2074. data/third_party/re2/re2/prog.cc +1166 -0
  2075. data/third_party/re2/re2/prog.h +455 -0
  2076. data/third_party/re2/re2/re2.cc +1331 -0
  2077. data/third_party/re2/re2/re2.h +1017 -0
  2078. data/third_party/re2/re2/regexp.cc +987 -0
  2079. data/third_party/re2/re2/regexp.h +665 -0
  2080. data/third_party/re2/re2/set.cc +176 -0
  2081. data/third_party/re2/re2/set.h +85 -0
  2082. data/third_party/re2/re2/simplify.cc +665 -0
  2083. data/third_party/re2/re2/sparse_array.h +392 -0
  2084. data/third_party/re2/re2/sparse_set.h +264 -0
  2085. data/third_party/re2/re2/stringpiece.cc +65 -0
  2086. data/third_party/re2/re2/stringpiece.h +210 -0
  2087. data/third_party/re2/re2/tostring.cc +351 -0
  2088. data/third_party/re2/re2/unicode_casefold.cc +582 -0
  2089. data/third_party/re2/re2/unicode_casefold.h +78 -0
  2090. data/third_party/re2/re2/unicode_groups.cc +6269 -0
  2091. data/third_party/re2/re2/unicode_groups.h +67 -0
  2092. data/third_party/re2/re2/walker-inl.h +246 -0
  2093. data/third_party/re2/util/benchmark.h +156 -0
  2094. data/third_party/re2/util/flags.h +26 -0
  2095. data/third_party/re2/util/logging.h +109 -0
  2096. data/third_party/re2/util/malloc_counter.h +19 -0
  2097. data/third_party/re2/util/mix.h +41 -0
  2098. data/third_party/re2/util/mutex.h +148 -0
  2099. data/third_party/re2/util/pcre.cc +1025 -0
  2100. data/third_party/re2/util/pcre.h +681 -0
  2101. data/third_party/re2/util/rune.cc +260 -0
  2102. data/third_party/re2/util/strutil.cc +149 -0
  2103. data/third_party/re2/util/strutil.h +21 -0
  2104. data/third_party/re2/util/test.h +50 -0
  2105. data/third_party/re2/util/utf.h +44 -0
  2106. data/third_party/re2/util/util.h +42 -0
  2107. data/third_party/upb/third_party/utf8_range/naive.c +92 -0
  2108. data/third_party/upb/third_party/utf8_range/range2-neon.c +157 -0
  2109. data/third_party/upb/third_party/utf8_range/range2-sse.c +170 -0
  2110. data/third_party/upb/third_party/utf8_range/utf8_range.h +9 -0
  2111. data/third_party/upb/upb/decode.c +997 -481
  2112. data/third_party/upb/upb/decode.h +79 -6
  2113. data/third_party/upb/upb/decode_fast.c +1055 -0
  2114. data/third_party/upb/upb/decode_fast.h +153 -0
  2115. data/third_party/upb/upb/decode_internal.h +211 -0
  2116. data/third_party/upb/upb/def.c +3261 -0
  2117. data/third_party/upb/upb/def.h +409 -0
  2118. data/third_party/upb/upb/def.hpp +438 -0
  2119. data/third_party/upb/upb/encode.c +459 -233
  2120. data/third_party/upb/upb/encode.h +56 -6
  2121. data/third_party/upb/upb/json_encode.c +776 -0
  2122. data/third_party/upb/upb/json_encode.h +62 -0
  2123. data/third_party/upb/upb/msg.c +387 -70
  2124. data/third_party/upb/upb/msg.h +90 -45
  2125. data/third_party/upb/upb/msg_internal.h +831 -0
  2126. data/third_party/upb/upb/port_def.inc +195 -84
  2127. data/third_party/upb/upb/port_undef.inc +48 -7
  2128. data/third_party/upb/upb/reflection.c +480 -0
  2129. data/third_party/upb/upb/reflection.h +220 -0
  2130. data/third_party/upb/upb/reflection.hpp +37 -0
  2131. data/third_party/upb/upb/table.c +441 -428
  2132. data/third_party/upb/upb/table_internal.h +385 -0
  2133. data/third_party/upb/upb/text_encode.c +472 -0
  2134. data/third_party/upb/upb/text_encode.h +64 -0
  2135. data/third_party/upb/upb/upb.c +255 -154
  2136. data/third_party/upb/upb/upb.h +235 -226
  2137. data/third_party/upb/upb/upb.hpp +115 -0
  2138. data/third_party/upb/upb/upb_internal.h +68 -0
  2139. data/third_party/xxhash/xxhash.h +5580 -0
  2140. data/third_party/zlib/crc32.c +966 -292
  2141. data/third_party/zlib/crc32.h +9441 -436
  2142. data/third_party/zlib/deflate.c +78 -30
  2143. data/third_party/zlib/deflate.h +12 -15
  2144. data/third_party/zlib/gzguts.h +3 -2
  2145. data/third_party/zlib/gzlib.c +5 -3
  2146. data/third_party/zlib/gzread.c +5 -7
  2147. data/third_party/zlib/gzwrite.c +25 -13
  2148. data/third_party/zlib/infback.c +2 -1
  2149. data/third_party/zlib/inffast.c +14 -14
  2150. data/third_party/zlib/inflate.c +39 -8
  2151. data/third_party/zlib/inflate.h +3 -2
  2152. data/third_party/zlib/inftrees.c +3 -3
  2153. data/third_party/zlib/trees.c +27 -48
  2154. data/third_party/zlib/zlib.h +123 -100
  2155. data/third_party/zlib/zutil.c +2 -2
  2156. data/third_party/zlib/zutil.h +12 -9
  2157. metadata +1175 -359
  2158. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +0 -45
  2159. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +0 -121
  2160. data/src/core/ext/filters/client_channel/lb_policy/xds/eds.cc +0 -938
  2161. data/src/core/ext/filters/client_channel/lb_policy/xds/lrs.cc +0 -528
  2162. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_routing.cc +0 -834
  2163. data/src/core/ext/filters/client_channel/parse_address.cc +0 -238
  2164. data/src/core/ext/filters/client_channel/parse_address.h +0 -53
  2165. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +0 -484
  2166. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +0 -177
  2167. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +0 -68
  2168. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc +0 -38
  2169. data/src/core/ext/filters/client_channel/resolver.cc +0 -85
  2170. data/src/core/ext/filters/client_channel/resolver.h +0 -144
  2171. data/src/core/ext/filters/client_channel/resolver_factory.h +0 -73
  2172. data/src/core/ext/filters/client_channel/resolver_registry.cc +0 -197
  2173. data/src/core/ext/filters/client_channel/resolver_registry.h +0 -89
  2174. data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +0 -348
  2175. data/src/core/ext/filters/client_channel/resolving_lb_policy.h +0 -123
  2176. data/src/core/ext/filters/client_channel/server_address.cc +0 -48
  2177. data/src/core/ext/filters/client_channel/server_address.h +0 -90
  2178. data/src/core/ext/filters/client_channel/service_config.cc +0 -221
  2179. data/src/core/ext/filters/client_channel/service_config.h +0 -123
  2180. data/src/core/ext/filters/client_channel/service_config_call_data.h +0 -68
  2181. data/src/core/ext/filters/client_channel/service_config_parser.cc +0 -87
  2182. data/src/core/ext/filters/client_channel/service_config_parser.h +0 -89
  2183. data/src/core/ext/filters/client_channel/xds/xds_api.cc +0 -1906
  2184. data/src/core/ext/filters/client_channel/xds/xds_api.h +0 -280
  2185. data/src/core/ext/filters/client_channel/xds/xds_bootstrap.cc +0 -342
  2186. data/src/core/ext/filters/client_channel/xds/xds_bootstrap.h +0 -88
  2187. data/src/core/ext/filters/client_channel/xds/xds_channel.h +0 -46
  2188. data/src/core/ext/filters/client_channel/xds/xds_channel_args.h +0 -26
  2189. data/src/core/ext/filters/client_channel/xds/xds_channel_secure.cc +0 -106
  2190. data/src/core/ext/filters/client_channel/xds/xds_client.cc +0 -2367
  2191. data/src/core/ext/filters/client_channel/xds/xds_client.h +0 -309
  2192. data/src/core/ext/filters/client_channel/xds/xds_client_stats.cc +0 -115
  2193. data/src/core/ext/filters/client_channel/xds/xds_client_stats.h +0 -211
  2194. data/src/core/ext/filters/client_idle/client_idle_filter.cc +0 -440
  2195. data/src/core/ext/filters/max_age/max_age_filter.cc +0 -556
  2196. data/src/core/ext/filters/max_age/max_age_filter.h +0 -26
  2197. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +0 -210
  2198. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.h +0 -27
  2199. data/src/core/ext/filters/workarounds/workaround_utils.cc +0 -53
  2200. data/src/core/ext/filters/workarounds/workaround_utils.h +0 -39
  2201. data/src/core/ext/transport/chttp2/client/authority.cc +0 -42
  2202. data/src/core/ext/transport/chttp2/client/authority.h +0 -36
  2203. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +0 -112
  2204. data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +0 -79
  2205. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +0 -225
  2206. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +0 -45
  2207. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +0 -75
  2208. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +0 -86
  2209. data/src/core/ext/transport/chttp2/transport/chttp2_plugin.cc +0 -37
  2210. data/src/core/ext/transport/chttp2/transport/hpack_table.cc +0 -246
  2211. data/src/core/ext/transport/chttp2/transport/hpack_table.h +0 -148
  2212. data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +0 -66
  2213. data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +0 -58
  2214. data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.c +0 -21
  2215. data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.h +0 -35
  2216. data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.c +0 -114
  2217. data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.h +0 -418
  2218. data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.c +0 -72
  2219. data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.h +0 -197
  2220. data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.c +0 -105
  2221. data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.h +0 -378
  2222. data/src/core/ext/upb-generated/envoy/api/v2/cds.upb.c +0 -28
  2223. data/src/core/ext/upb-generated/envoy/api/v2/cds.upb.h +0 -53
  2224. data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.c +0 -74
  2225. data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.h +0 -218
  2226. data/src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.c +0 -35
  2227. data/src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.h +0 -69
  2228. data/src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.c +0 -55
  2229. data/src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.h +0 -305
  2230. data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.c +0 -403
  2231. data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.h +0 -1447
  2232. data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.c +0 -112
  2233. data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.h +0 -328
  2234. data/src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.c +0 -35
  2235. data/src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.h +0 -78
  2236. data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c +0 -313
  2237. data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.h +0 -897
  2238. data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.c +0 -96
  2239. data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.h +0 -322
  2240. data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.c +0 -34
  2241. data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.h +0 -72
  2242. data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.c +0 -197
  2243. data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.h +0 -642
  2244. data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.c +0 -172
  2245. data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.h +0 -673
  2246. data/src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.c +0 -36
  2247. data/src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.h +0 -80
  2248. data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.c +0 -152
  2249. data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.h +0 -518
  2250. data/src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.c +0 -34
  2251. data/src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.h +0 -89
  2252. data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c +0 -129
  2253. data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.h +0 -392
  2254. data/src/core/ext/upb-generated/envoy/api/v2/eds.upb.c +0 -31
  2255. data/src/core/ext/upb-generated/envoy/api/v2/eds.upb.h +0 -53
  2256. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.c +0 -18
  2257. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.h +0 -33
  2258. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.c +0 -91
  2259. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.h +0 -266
  2260. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.c +0 -112
  2261. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.h +0 -324
  2262. data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.c +0 -92
  2263. data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.h +0 -240
  2264. data/src/core/ext/upb-generated/envoy/api/v2/lds.upb.c +0 -31
  2265. data/src/core/ext/upb-generated/envoy/api/v2/lds.upb.h +0 -53
  2266. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.c +0 -18
  2267. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.h +0 -33
  2268. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.c +0 -145
  2269. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.h +0 -527
  2270. data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.c +0 -43
  2271. data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.h +0 -112
  2272. data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.c +0 -109
  2273. data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.h +0 -399
  2274. data/src/core/ext/upb-generated/envoy/api/v2/rds.upb.c +0 -30
  2275. data/src/core/ext/upb-generated/envoy/api/v2/rds.upb.h +0 -53
  2276. data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.c +0 -18
  2277. data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.h +0 -33
  2278. data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.c +0 -815
  2279. data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.h +0 -3032
  2280. data/src/core/ext/upb-generated/envoy/api/v2/route.upb.c +0 -63
  2281. data/src/core/ext/upb-generated/envoy/api/v2/route.upb.h +0 -199
  2282. data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.c +0 -59
  2283. data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.h +0 -134
  2284. data/src/core/ext/upb-generated/envoy/api/v2/srds.upb.c +0 -28
  2285. data/src/core/ext/upb-generated/envoy/api/v2/srds.upb.h +0 -53
  2286. data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.c +0 -228
  2287. data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.h +0 -725
  2288. data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.c +0 -316
  2289. data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.h +0 -1132
  2290. data/src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.c +0 -33
  2291. data/src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.h +0 -65
  2292. data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.c +0 -51
  2293. data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.h +0 -125
  2294. data/src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.c +0 -24
  2295. data/src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.h +0 -50
  2296. data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.c +0 -54
  2297. data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h +0 -134
  2298. data/src/core/ext/upb-generated/envoy/type/http.upb.c +0 -17
  2299. data/src/core/ext/upb-generated/envoy/type/http.upb.h +0 -36
  2300. data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.c +0 -63
  2301. data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.h +0 -144
  2302. data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.c +0 -53
  2303. data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.h +0 -133
  2304. data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.c +0 -88
  2305. data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.h +0 -258
  2306. data/src/core/ext/upb-generated/envoy/type/percent.upb.c +0 -39
  2307. data/src/core/ext/upb-generated/envoy/type/percent.upb.h +0 -87
  2308. data/src/core/ext/upb-generated/envoy/type/range.upb.c +0 -50
  2309. data/src/core/ext/upb-generated/envoy/type/range.upb.h +0 -112
  2310. data/src/core/ext/upb-generated/envoy/type/semantic_version.upb.c +0 -29
  2311. data/src/core/ext/upb-generated/envoy/type/semantic_version.upb.h +0 -62
  2312. data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.c +0 -89
  2313. data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.h +0 -249
  2314. data/src/core/ext/upb-generated/gogoproto/gogo.upb.c +0 -17
  2315. data/src/core/ext/upb-generated/gogoproto/gogo.upb.h +0 -30
  2316. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c +0 -58
  2317. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h +0 -144
  2318. data/src/core/lib/avl/avl.cc +0 -306
  2319. data/src/core/lib/compression/algorithm_metadata.h +0 -61
  2320. data/src/core/lib/compression/compression_args.cc +0 -134
  2321. data/src/core/lib/compression/compression_args.h +0 -56
  2322. data/src/core/lib/compression/stream_compression.cc +0 -80
  2323. data/src/core/lib/compression/stream_compression.h +0 -116
  2324. data/src/core/lib/compression/stream_compression_gzip.cc +0 -230
  2325. data/src/core/lib/compression/stream_compression_gzip.h +0 -28
  2326. data/src/core/lib/compression/stream_compression_identity.cc +0 -92
  2327. data/src/core/lib/compression/stream_compression_identity.h +0 -29
  2328. data/src/core/lib/gpr/arena.h +0 -47
  2329. data/src/core/lib/gpr/tls_gcc.h +0 -52
  2330. data/src/core/lib/gpr/tls_msvc.h +0 -52
  2331. data/src/core/lib/gpr/tls_pthread.cc +0 -30
  2332. data/src/core/lib/gpr/tls_pthread.h +0 -56
  2333. data/src/core/lib/gprpp/arena.cc +0 -103
  2334. data/src/core/lib/gprpp/arena.h +0 -120
  2335. data/src/core/lib/gprpp/atomic.h +0 -104
  2336. data/src/core/lib/gprpp/map.h +0 -53
  2337. data/src/core/lib/iomgr/endpoint_pair_uv.cc +0 -40
  2338. data/src/core/lib/iomgr/ev_epollex_linux.cc +0 -1656
  2339. data/src/core/lib/iomgr/ev_epollex_linux.h +0 -30
  2340. data/src/core/lib/iomgr/iomgr_custom.cc +0 -79
  2341. data/src/core/lib/iomgr/iomgr_custom.h +0 -49
  2342. data/src/core/lib/iomgr/iomgr_posix.h +0 -26
  2343. data/src/core/lib/iomgr/iomgr_uv.cc +0 -43
  2344. data/src/core/lib/iomgr/is_epollexclusive_available.cc +0 -105
  2345. data/src/core/lib/iomgr/is_epollexclusive_available.h +0 -36
  2346. data/src/core/lib/iomgr/poller/eventmanager_libuv.cc +0 -87
  2347. data/src/core/lib/iomgr/poller/eventmanager_libuv.h +0 -88
  2348. data/src/core/lib/iomgr/pollset_custom.cc +0 -106
  2349. data/src/core/lib/iomgr/pollset_custom.h +0 -35
  2350. data/src/core/lib/iomgr/pollset_set_custom.cc +0 -48
  2351. data/src/core/lib/iomgr/pollset_set_custom.h +0 -26
  2352. data/src/core/lib/iomgr/pollset_uv.cc +0 -93
  2353. data/src/core/lib/iomgr/pollset_uv.h +0 -32
  2354. data/src/core/lib/iomgr/resolve_address_custom.cc +0 -173
  2355. data/src/core/lib/iomgr/resolve_address_custom.h +0 -45
  2356. data/src/core/lib/iomgr/resource_quota.cc +0 -1013
  2357. data/src/core/lib/iomgr/resource_quota.h +0 -177
  2358. data/src/core/lib/iomgr/sockaddr_custom.h +0 -54
  2359. data/src/core/lib/iomgr/sockaddr_utils.cc +0 -293
  2360. data/src/core/lib/iomgr/sockaddr_utils.h +0 -79
  2361. data/src/core/lib/iomgr/socket_utils_uv.cc +0 -49
  2362. data/src/core/lib/iomgr/sys_epoll_wrapper.h +0 -30
  2363. data/src/core/lib/iomgr/tcp_client_custom.cc +0 -163
  2364. data/src/core/lib/iomgr/tcp_custom.cc +0 -370
  2365. data/src/core/lib/iomgr/tcp_custom.h +0 -84
  2366. data/src/core/lib/iomgr/tcp_server_custom.cc +0 -485
  2367. data/src/core/lib/iomgr/tcp_uv.cc +0 -419
  2368. data/src/core/lib/iomgr/timer_custom.cc +0 -95
  2369. data/src/core/lib/iomgr/timer_custom.h +0 -43
  2370. data/src/core/lib/iomgr/timer_uv.cc +0 -66
  2371. data/src/core/lib/iomgr/udp_server.cc +0 -747
  2372. data/src/core/lib/iomgr/udp_server.h +0 -101
  2373. data/src/core/lib/security/credentials/credentials_metadata.cc +0 -62
  2374. data/src/core/lib/security/transport/target_authority_table.cc +0 -75
  2375. data/src/core/lib/security/transport/target_authority_table.h +0 -40
  2376. data/src/core/lib/slice/slice_hash_table.h +0 -199
  2377. data/src/core/lib/slice/slice_intern.cc +0 -375
  2378. data/src/core/lib/slice/slice_utils.h +0 -200
  2379. data/src/core/lib/slice/slice_weak_hash_table.h +0 -102
  2380. data/src/core/lib/surface/init_secure.cc +0 -81
  2381. data/src/core/lib/transport/metadata.cc +0 -679
  2382. data/src/core/lib/transport/metadata.h +0 -446
  2383. data/src/core/lib/transport/metadata_batch.cc +0 -392
  2384. data/src/core/lib/transport/static_metadata.cc +0 -1230
  2385. data/src/core/lib/transport/static_metadata.h +0 -597
  2386. data/src/core/lib/transport/status_metadata.cc +0 -61
  2387. data/src/core/lib/transport/status_metadata.h +0 -48
  2388. data/third_party/abseil-cpp/absl/base/dynamic_annotations.cc +0 -129
  2389. data/third_party/abseil-cpp/absl/base/internal/bits.h +0 -218
  2390. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_locl.h +0 -104
  2391. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_enum.c +0 -93
  2392. data/third_party/boringssl-with-bazel/src/crypto/dh/dh.c +0 -533
  2393. data/third_party/boringssl-with-bazel/src/crypto/dh/params.c +0 -93
  2394. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/is_fips.c +0 -29
  2395. data/third_party/boringssl-with-bazel/src/crypto/x509/a_strex.c +0 -653
  2396. data/third_party/boringssl-with-bazel/src/crypto/x509/vpm_int.h +0 -71
  2397. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_r2x.c +0 -116
  2398. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_int.h +0 -217
  2399. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pku.c +0 -110
  2400. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_sxnet.c +0 -274
  2401. data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +0 -3870
  2402. data/third_party/cares/cares/ares.h +0 -670
  2403. data/third_party/cares/cares/ares__close_sockets.c +0 -61
  2404. data/third_party/cares/cares/ares__get_hostent.c +0 -261
  2405. data/third_party/cares/cares/ares_create_query.c +0 -206
  2406. data/third_party/cares/cares/ares_data.c +0 -222
  2407. data/third_party/cares/cares/ares_data.h +0 -72
  2408. data/third_party/cares/cares/ares_dns.h +0 -103
  2409. data/third_party/cares/cares/ares_expand_name.c +0 -209
  2410. data/third_party/cares/cares/ares_expand_string.c +0 -70
  2411. data/third_party/cares/cares/ares_free_hostent.c +0 -41
  2412. data/third_party/cares/cares/ares_getenv.c +0 -30
  2413. data/third_party/cares/cares/ares_gethostbyaddr.c +0 -294
  2414. data/third_party/cares/cares/ares_gethostbyname.c +0 -529
  2415. data/third_party/cares/cares/ares_getnameinfo.c +0 -453
  2416. data/third_party/cares/cares/ares_getopt.c +0 -122
  2417. data/third_party/cares/cares/ares_getopt.h +0 -53
  2418. data/third_party/cares/cares/ares_init.c +0 -2615
  2419. data/third_party/cares/cares/ares_ipv6.h +0 -78
  2420. data/third_party/cares/cares/ares_library_init.c +0 -195
  2421. data/third_party/cares/cares/ares_library_init.h +0 -43
  2422. data/third_party/cares/cares/ares_parse_a_reply.c +0 -264
  2423. data/third_party/cares/cares/ares_parse_aaaa_reply.c +0 -264
  2424. data/third_party/cares/cares/ares_parse_mx_reply.c +0 -170
  2425. data/third_party/cares/cares/ares_parse_naptr_reply.c +0 -194
  2426. data/third_party/cares/cares/ares_parse_ns_reply.c +0 -183
  2427. data/third_party/cares/cares/ares_parse_ptr_reply.c +0 -221
  2428. data/third_party/cares/cares/ares_parse_soa_reply.c +0 -133
  2429. data/third_party/cares/cares/ares_parse_srv_reply.c +0 -179
  2430. data/third_party/cares/cares/ares_parse_txt_reply.c +0 -220
  2431. data/third_party/cares/cares/ares_private.h +0 -382
  2432. data/third_party/cares/cares/ares_process.c +0 -1473
  2433. data/third_party/cares/cares/ares_query.c +0 -186
  2434. data/third_party/cares/cares/ares_search.c +0 -323
  2435. data/third_party/cares/cares/ares_send.c +0 -137
  2436. data/third_party/cares/cares/ares_setup.h +0 -217
  2437. data/third_party/cares/cares/ares_strsplit.c +0 -174
  2438. data/third_party/cares/cares/ares_version.h +0 -24
  2439. data/third_party/cares/cares/inet_net_pton.c +0 -450
  2440. data/third_party/cares/cares/inet_ntop.c +0 -207
  2441. data/third_party/upb/upb/generated_util.h +0 -105
  2442. data/third_party/upb/upb/port.c +0 -26
  2443. data/third_party/upb/upb/table.int.h +0 -507
@@ -0,0 +1,2542 @@
1
+ //
2
+ // Copyright 2020 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
+ // Implementation of the Route Lookup Service (RLS) LB policy
18
+ //
19
+ // The policy queries a route lookup service for the name of the actual service
20
+ // to use. A child policy that recognizes the name as a field of its
21
+ // configuration will take further load balancing action on the request.
22
+
23
+ #include <grpc/support/port_platform.h>
24
+
25
+ #include <stdlib.h>
26
+
27
+ #include <algorithm>
28
+ #include <deque>
29
+ #include <functional>
30
+ #include <list>
31
+ #include <map>
32
+ #include <random>
33
+ #include <string>
34
+ #include <unordered_map>
35
+ #include <utility>
36
+
37
+ #include "absl/container/inlined_vector.h"
38
+ #include "absl/hash/hash.h"
39
+ #include "absl/memory/memory.h"
40
+ #include "absl/strings/str_cat.h"
41
+ #include "absl/strings/str_join.h"
42
+ #include "absl/strings/string_view.h"
43
+ #include "absl/strings/strip.h"
44
+ #include "upb/upb.hpp"
45
+
46
+ #include <grpc/grpc.h>
47
+ #include <grpc/grpc_security.h>
48
+ #include <grpc/impl/codegen/byte_buffer_reader.h>
49
+ #include <grpc/impl/codegen/grpc_types.h>
50
+ #include <grpc/support/time.h>
51
+
52
+ #include "src/core/ext/filters/client_channel/client_channel.h"
53
+ #include "src/core/ext/filters/client_channel/lb_policy.h"
54
+ #include "src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h"
55
+ #include "src/core/ext/filters/client_channel/lb_policy_factory.h"
56
+ #include "src/core/ext/filters/client_channel/lb_policy_registry.h"
57
+ #include "src/core/lib/backoff/backoff.h"
58
+ #include "src/core/lib/config/core_configuration.h"
59
+ #include "src/core/lib/gpr/env.h"
60
+ #include "src/core/lib/gpr/string.h"
61
+ #include "src/core/lib/gprpp/dual_ref_counted.h"
62
+ #include "src/core/lib/gprpp/orphanable.h"
63
+ #include "src/core/lib/gprpp/ref_counted.h"
64
+ #include "src/core/lib/gprpp/sync.h"
65
+ #include "src/core/lib/iomgr/exec_ctx.h"
66
+ #include "src/core/lib/iomgr/timer.h"
67
+ #include "src/core/lib/json/json.h"
68
+ #include "src/core/lib/json/json_util.h"
69
+ #include "src/core/lib/resolver/resolver_registry.h"
70
+ #include "src/core/lib/security/credentials/credentials.h"
71
+ #include "src/core/lib/security/credentials/fake/fake_credentials.h"
72
+ #include "src/core/lib/service_config/service_config_impl.h"
73
+ #include "src/core/lib/surface/call.h"
74
+ #include "src/core/lib/surface/channel.h"
75
+ #include "src/core/lib/transport/connectivity_state.h"
76
+ #include "src/core/lib/transport/error_utils.h"
77
+ #include "src/core/lib/uri/uri_parser.h"
78
+ #include "src/proto/grpc/lookup/v1/rls.upb.h"
79
+
80
+ namespace grpc_core {
81
+
82
+ TraceFlag grpc_lb_rls_trace(false, "rls_lb");
83
+
84
+ namespace {
85
+
86
+ const char* kRls = "rls_experimental";
87
+ const char kGrpc[] = "grpc";
88
+ const char* kRlsRequestPath = "/grpc.lookup.v1.RouteLookupService/RouteLookup";
89
+ const char* kFakeTargetFieldValue = "fake_target_field_value";
90
+ const char* kRlsHeaderKey = "X-Google-RLS-Data";
91
+
92
+ const Duration kDefaultLookupServiceTimeout = Duration::Seconds(10);
93
+ const Duration kMaxMaxAge = Duration::Minutes(5);
94
+ const Duration kMinExpirationTime = Duration::Seconds(5);
95
+ const Duration kCacheBackoffInitial = Duration::Seconds(1);
96
+ const double kCacheBackoffMultiplier = 1.6;
97
+ const double kCacheBackoffJitter = 0.2;
98
+ const Duration kCacheBackoffMax = Duration::Minutes(2);
99
+ const Duration kDefaultThrottleWindowSize = Duration::Seconds(30);
100
+ const double kDefaultThrottleRatioForSuccesses = 2.0;
101
+ const int kDefaultThrottlePadding = 8;
102
+ const Duration kCacheCleanupTimerInterval = Duration::Minutes(1);
103
+ const int64_t kMaxCacheSizeBytes = 5 * 1024 * 1024;
104
+
105
+ // Parsed RLS LB policy configuration.
106
+ class RlsLbConfig : public LoadBalancingPolicy::Config {
107
+ public:
108
+ struct KeyBuilder {
109
+ std::map<std::string /*key*/, std::vector<std::string /*header*/>>
110
+ header_keys;
111
+ std::string host_key;
112
+ std::string service_key;
113
+ std::string method_key;
114
+ std::map<std::string /*key*/, std::string /*value*/> constant_keys;
115
+ };
116
+ using KeyBuilderMap = std::unordered_map<std::string /*path*/, KeyBuilder>;
117
+
118
+ struct RouteLookupConfig {
119
+ KeyBuilderMap key_builder_map;
120
+ std::string lookup_service;
121
+ Duration lookup_service_timeout;
122
+ Duration max_age;
123
+ Duration stale_age;
124
+ int64_t cache_size_bytes = 0;
125
+ std::string default_target;
126
+ };
127
+
128
+ RlsLbConfig(RouteLookupConfig route_lookup_config,
129
+ std::string rls_channel_service_config, Json child_policy_config,
130
+ std::string child_policy_config_target_field_name,
131
+ RefCountedPtr<LoadBalancingPolicy::Config>
132
+ default_child_policy_parsed_config)
133
+ : route_lookup_config_(std::move(route_lookup_config)),
134
+ rls_channel_service_config_(std::move(rls_channel_service_config)),
135
+ child_policy_config_(std::move(child_policy_config)),
136
+ child_policy_config_target_field_name_(
137
+ std::move(child_policy_config_target_field_name)),
138
+ default_child_policy_parsed_config_(
139
+ std::move(default_child_policy_parsed_config)) {}
140
+
141
+ const char* name() const override { return kRls; }
142
+
143
+ const KeyBuilderMap& key_builder_map() const {
144
+ return route_lookup_config_.key_builder_map;
145
+ }
146
+ const std::string& lookup_service() const {
147
+ return route_lookup_config_.lookup_service;
148
+ }
149
+ Duration lookup_service_timeout() const {
150
+ return route_lookup_config_.lookup_service_timeout;
151
+ }
152
+ Duration max_age() const { return route_lookup_config_.max_age; }
153
+ Duration stale_age() const { return route_lookup_config_.stale_age; }
154
+ int64_t cache_size_bytes() const {
155
+ return route_lookup_config_.cache_size_bytes;
156
+ }
157
+ const std::string& default_target() const {
158
+ return route_lookup_config_.default_target;
159
+ }
160
+ const std::string& rls_channel_service_config() const {
161
+ return rls_channel_service_config_;
162
+ }
163
+ const Json& child_policy_config() const { return child_policy_config_; }
164
+ const std::string& child_policy_config_target_field_name() const {
165
+ return child_policy_config_target_field_name_;
166
+ }
167
+ RefCountedPtr<LoadBalancingPolicy::Config>
168
+ default_child_policy_parsed_config() const {
169
+ return default_child_policy_parsed_config_;
170
+ }
171
+
172
+ private:
173
+ RouteLookupConfig route_lookup_config_;
174
+ std::string rls_channel_service_config_;
175
+ Json child_policy_config_;
176
+ std::string child_policy_config_target_field_name_;
177
+ RefCountedPtr<LoadBalancingPolicy::Config>
178
+ default_child_policy_parsed_config_;
179
+ };
180
+
181
+ // RLS LB policy.
182
+ class RlsLb : public LoadBalancingPolicy {
183
+ public:
184
+ explicit RlsLb(Args args);
185
+
186
+ const char* name() const override { return kRls; }
187
+ void UpdateLocked(UpdateArgs args) override;
188
+ void ExitIdleLocked() override;
189
+ void ResetBackoffLocked() override;
190
+
191
+ private:
192
+ // Key to access entries in the cache and the request map.
193
+ struct RequestKey {
194
+ std::map<std::string, std::string> key_map;
195
+
196
+ bool operator==(const RequestKey& rhs) const {
197
+ return key_map == rhs.key_map;
198
+ }
199
+
200
+ template <typename H>
201
+ friend H AbslHashValue(H h, const RequestKey& key) {
202
+ std::hash<std::string> string_hasher;
203
+ for (auto& kv : key.key_map) {
204
+ h = H::combine(std::move(h), string_hasher(kv.first),
205
+ string_hasher(kv.second));
206
+ }
207
+ return h;
208
+ }
209
+
210
+ size_t Size() const {
211
+ size_t size = sizeof(RequestKey);
212
+ for (auto& kv : key_map) {
213
+ size += kv.first.length() + kv.second.length();
214
+ }
215
+ return size;
216
+ }
217
+
218
+ std::string ToString() const {
219
+ return absl::StrCat(
220
+ "{", absl::StrJoin(key_map, ",", absl::PairFormatter("=")), "}");
221
+ }
222
+ };
223
+
224
+ // Data from an RLS response.
225
+ struct ResponseInfo {
226
+ absl::Status status;
227
+ std::vector<std::string> targets;
228
+ std::string header_data;
229
+
230
+ std::string ToString() const {
231
+ return absl::StrFormat("{status=%s, targets=[%s], header_data=\"%s\"}",
232
+ status.ToString(), absl::StrJoin(targets, ","),
233
+ header_data);
234
+ }
235
+ };
236
+
237
+ // Wraps a child policy for a given RLS target.
238
+ class ChildPolicyWrapper : public DualRefCounted<ChildPolicyWrapper> {
239
+ public:
240
+ ChildPolicyWrapper(RefCountedPtr<RlsLb> lb_policy, std::string target);
241
+
242
+ // Note: We are forced to disable lock analysis here because
243
+ // Orphan() is called by OrphanablePtr<>, which cannot have lock
244
+ // annotations for this particular caller.
245
+ void Orphan() override ABSL_NO_THREAD_SAFETY_ANALYSIS;
246
+
247
+ const std::string& target() const { return target_; }
248
+
249
+ PickResult Pick(PickArgs args) ABSL_EXCLUSIVE_LOCKS_REQUIRED(&RlsLb::mu_) {
250
+ return picker_->Pick(args);
251
+ }
252
+
253
+ // Updates for the child policy are handled in two phases:
254
+ // 1. In StartUpdate(), we parse and validate the new child policy
255
+ // config and store the parsed config.
256
+ // 2. In MaybeFinishUpdate(), we actually pass the parsed config to the
257
+ // child policy's UpdateLocked() method.
258
+ //
259
+ // The reason we do this is to avoid deadlocks. In StartUpdate(),
260
+ // if the new config fails to validate, then we need to set
261
+ // picker_ to an instance that will fail all requests, which
262
+ // requires holding the lock. However, we cannot call the child
263
+ // policy's UpdateLocked() method from MaybeFinishUpdate() while
264
+ // holding the lock, since that would cause a deadlock: the child's
265
+ // UpdateLocked() will call the helper's UpdateState() method, which
266
+ // will try to acquire the lock to set picker_. So StartUpdate() is
267
+ // called while we are still holding the lock, but MaybeFinishUpdate()
268
+ // is called after releasing it.
269
+ //
270
+ // Both methods grab the data they need from the parent object.
271
+ void StartUpdate() ABSL_EXCLUSIVE_LOCKS_REQUIRED(&RlsLb::mu_);
272
+ // Does not take ownership of channel_args.
273
+ void MaybeFinishUpdate() ABSL_LOCKS_EXCLUDED(&RlsLb::mu_);
274
+
275
+ void ExitIdleLocked() {
276
+ if (child_policy_ != nullptr) child_policy_->ExitIdleLocked();
277
+ }
278
+
279
+ void ResetBackoffLocked() {
280
+ if (child_policy_ != nullptr) child_policy_->ResetBackoffLocked();
281
+ }
282
+
283
+ // Gets the connectivity state of the child policy. Once the child policy
284
+ // reports TRANSIENT_FAILURE, the function will always return
285
+ // TRANSIENT_FAILURE state instead of the actual state of the child policy
286
+ // until the child policy reports another READY state.
287
+ grpc_connectivity_state connectivity_state() const
288
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(&RlsLb::mu_) {
289
+ return connectivity_state_;
290
+ }
291
+
292
+ private:
293
+ // ChannelControlHelper object that allows the child policy to update state
294
+ // with the wrapper.
295
+ class ChildPolicyHelper : public LoadBalancingPolicy::ChannelControlHelper {
296
+ public:
297
+ explicit ChildPolicyHelper(WeakRefCountedPtr<ChildPolicyWrapper> wrapper)
298
+ : wrapper_(std::move(wrapper)) {}
299
+ ~ChildPolicyHelper() override {
300
+ wrapper_.reset(DEBUG_LOCATION, "ChildPolicyHelper");
301
+ }
302
+
303
+ RefCountedPtr<SubchannelInterface> CreateSubchannel(
304
+ ServerAddress address, const grpc_channel_args& args) override;
305
+ void UpdateState(grpc_connectivity_state state,
306
+ const absl::Status& status,
307
+ std::unique_ptr<SubchannelPicker> picker) override;
308
+ void RequestReresolution() override;
309
+ absl::string_view GetAuthority() override;
310
+ void AddTraceEvent(TraceSeverity severity,
311
+ absl::string_view message) override;
312
+
313
+ private:
314
+ WeakRefCountedPtr<ChildPolicyWrapper> wrapper_;
315
+ };
316
+
317
+ RefCountedPtr<RlsLb> lb_policy_;
318
+ std::string target_;
319
+
320
+ bool is_shutdown_ = false;
321
+
322
+ OrphanablePtr<ChildPolicyHandler> child_policy_;
323
+ RefCountedPtr<LoadBalancingPolicy::Config> pending_config_;
324
+
325
+ grpc_connectivity_state connectivity_state_ ABSL_GUARDED_BY(&RlsLb::mu_) =
326
+ GRPC_CHANNEL_IDLE;
327
+ std::unique_ptr<LoadBalancingPolicy::SubchannelPicker> picker_
328
+ ABSL_GUARDED_BY(&RlsLb::mu_);
329
+ };
330
+
331
+ // A picker that uses the cache and the request map in the LB policy
332
+ // (synchronized via a mutex) to determine how to route requests.
333
+ class Picker : public LoadBalancingPolicy::SubchannelPicker {
334
+ public:
335
+ explicit Picker(RefCountedPtr<RlsLb> lb_policy);
336
+ ~Picker() override;
337
+
338
+ PickResult Pick(PickArgs args) override;
339
+
340
+ private:
341
+ RefCountedPtr<RlsLb> lb_policy_;
342
+ RefCountedPtr<RlsLbConfig> config_;
343
+ RefCountedPtr<ChildPolicyWrapper> default_child_policy_;
344
+ };
345
+
346
+ // An LRU cache with adjustable size.
347
+ class Cache {
348
+ public:
349
+ using Iterator = std::list<RequestKey>::iterator;
350
+
351
+ class Entry : public InternallyRefCounted<Entry> {
352
+ public:
353
+ Entry(RefCountedPtr<RlsLb> lb_policy, const RequestKey& key);
354
+
355
+ // Notify the entry when it's evicted from the cache. Performs shut down.
356
+ // Note: We are forced to disable lock analysis here because
357
+ // Orphan() is called by OrphanablePtr<>, which cannot have lock
358
+ // annotations for this particular caller.
359
+ void Orphan() override ABSL_NO_THREAD_SAFETY_ANALYSIS;
360
+
361
+ const absl::Status& status() const
362
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(&RlsLb::mu_) {
363
+ return status_;
364
+ }
365
+ Timestamp backoff_time() const
366
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(&RlsLb::mu_) {
367
+ return backoff_time_;
368
+ }
369
+ Timestamp backoff_expiration_time() const
370
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(&RlsLb::mu_) {
371
+ return backoff_expiration_time_;
372
+ }
373
+ Timestamp data_expiration_time() const
374
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(&RlsLb::mu_) {
375
+ return data_expiration_time_;
376
+ }
377
+ const std::string& header_data() const
378
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(&RlsLb::mu_) {
379
+ return header_data_;
380
+ }
381
+ Timestamp stale_time() const ABSL_EXCLUSIVE_LOCKS_REQUIRED(&RlsLb::mu_) {
382
+ return stale_time_;
383
+ }
384
+ Timestamp min_expiration_time() const
385
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(&RlsLb::mu_) {
386
+ return min_expiration_time_;
387
+ }
388
+
389
+ std::unique_ptr<BackOff> TakeBackoffState()
390
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(&RlsLb::mu_) {
391
+ return std::move(backoff_state_);
392
+ }
393
+
394
+ // Cache size of entry.
395
+ size_t Size() const ABSL_EXCLUSIVE_LOCKS_REQUIRED(&RlsLb::mu_);
396
+
397
+ // Pick subchannel for request based on the entry's state.
398
+ PickResult Pick(PickArgs args) ABSL_EXCLUSIVE_LOCKS_REQUIRED(&RlsLb::mu_);
399
+
400
+ // If the cache entry is in backoff state, resets the backoff and, if
401
+ // applicable, its backoff timer. The method does not update the LB
402
+ // policy's picker; the caller is responsible for that if necessary.
403
+ void ResetBackoff() ABSL_EXCLUSIVE_LOCKS_REQUIRED(&RlsLb::mu_);
404
+
405
+ // Check if the entry should be removed by the clean-up timer.
406
+ bool ShouldRemove() const ABSL_EXCLUSIVE_LOCKS_REQUIRED(&RlsLb::mu_);
407
+
408
+ // Check if the entry can be evicted from the cache, i.e. the
409
+ // min_expiration_time_ has passed.
410
+ bool CanEvict() const ABSL_EXCLUSIVE_LOCKS_REQUIRED(&RlsLb::mu_);
411
+
412
+ // Updates the entry upon reception of a new RLS response.
413
+ // Returns a list of child policy wrappers on which FinishUpdate()
414
+ // needs to be called after releasing the lock.
415
+ std::vector<ChildPolicyWrapper*> OnRlsResponseLocked(
416
+ ResponseInfo response, std::unique_ptr<BackOff> backoff_state)
417
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(&RlsLb::mu_);
418
+
419
+ // Moves entry to the end of the LRU list.
420
+ void MarkUsed() ABSL_EXCLUSIVE_LOCKS_REQUIRED(&RlsLb::mu_);
421
+
422
+ private:
423
+ class BackoffTimer : public InternallyRefCounted<BackoffTimer> {
424
+ public:
425
+ BackoffTimer(RefCountedPtr<Entry> entry, Timestamp backoff_time);
426
+
427
+ // Note: We are forced to disable lock analysis here because
428
+ // Orphan() is called by OrphanablePtr<>, which cannot have lock
429
+ // annotations for this particular caller.
430
+ void Orphan() override ABSL_NO_THREAD_SAFETY_ANALYSIS;
431
+
432
+ private:
433
+ static void OnBackoffTimer(void* args, grpc_error_handle error);
434
+
435
+ RefCountedPtr<Entry> entry_;
436
+ bool armed_ ABSL_GUARDED_BY(&RlsLb::mu_) = true;
437
+ grpc_timer backoff_timer_;
438
+ grpc_closure backoff_timer_callback_;
439
+ };
440
+
441
+ RefCountedPtr<RlsLb> lb_policy_;
442
+
443
+ bool is_shutdown_ ABSL_GUARDED_BY(&RlsLb::mu_) = false;
444
+
445
+ // Backoff states
446
+ absl::Status status_ ABSL_GUARDED_BY(&RlsLb::mu_);
447
+ std::unique_ptr<BackOff> backoff_state_ ABSL_GUARDED_BY(&RlsLb::mu_);
448
+ Timestamp backoff_time_ ABSL_GUARDED_BY(&RlsLb::mu_) =
449
+ Timestamp::InfPast();
450
+ Timestamp backoff_expiration_time_ ABSL_GUARDED_BY(&RlsLb::mu_) =
451
+ Timestamp::InfPast();
452
+ OrphanablePtr<BackoffTimer> backoff_timer_;
453
+
454
+ // RLS response states
455
+ std::vector<RefCountedPtr<ChildPolicyWrapper>> child_policy_wrappers_
456
+ ABSL_GUARDED_BY(&RlsLb::mu_);
457
+ std::string header_data_ ABSL_GUARDED_BY(&RlsLb::mu_);
458
+ Timestamp data_expiration_time_ ABSL_GUARDED_BY(&RlsLb::mu_) =
459
+ Timestamp::InfPast();
460
+ Timestamp stale_time_ ABSL_GUARDED_BY(&RlsLb::mu_) = Timestamp::InfPast();
461
+
462
+ Timestamp min_expiration_time_ ABSL_GUARDED_BY(&RlsLb::mu_);
463
+ Cache::Iterator lru_iterator_ ABSL_GUARDED_BY(&RlsLb::mu_);
464
+ };
465
+
466
+ explicit Cache(RlsLb* lb_policy);
467
+
468
+ // Finds an entry from the cache that corresponds to a key. If an entry is
469
+ // not found, nullptr is returned. Otherwise, the entry is considered
470
+ // recently used and its order in the LRU list of the cache is updated.
471
+ Entry* Find(const RequestKey& key)
472
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(&RlsLb::mu_);
473
+
474
+ // Finds an entry from the cache that corresponds to a key. If an entry is
475
+ // not found, an entry is created, inserted in the cache, and returned to
476
+ // the caller. Otherwise, the entry found is returned to the caller. The
477
+ // entry returned to the user is considered recently used and its order in
478
+ // the LRU list of the cache is updated.
479
+ Entry* FindOrInsert(const RequestKey& key)
480
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(&RlsLb::mu_);
481
+
482
+ // Resizes the cache. If the new cache size is greater than the current size
483
+ // of the cache, do nothing. Otherwise, evict the oldest entries that
484
+ // exceed the new size limit of the cache.
485
+ void Resize(size_t bytes) ABSL_EXCLUSIVE_LOCKS_REQUIRED(&RlsLb::mu_);
486
+
487
+ // Resets backoff of all the cache entries.
488
+ void ResetAllBackoff() ABSL_EXCLUSIVE_LOCKS_REQUIRED(&RlsLb::mu_);
489
+
490
+ // Shutdown the cache; clean-up and orphan all the stored cache entries.
491
+ void Shutdown() ABSL_EXCLUSIVE_LOCKS_REQUIRED(&RlsLb::mu_);
492
+
493
+ private:
494
+ static void OnCleanupTimer(void* arg, grpc_error_handle error);
495
+
496
+ // Returns the entry size for a given key.
497
+ static size_t EntrySizeForKey(const RequestKey& key);
498
+
499
+ // Evicts oversized cache elements when the current size is greater than
500
+ // the specified limit.
501
+ void MaybeShrinkSize(size_t bytes)
502
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(&RlsLb::mu_);
503
+
504
+ RlsLb* lb_policy_;
505
+
506
+ size_t size_limit_ ABSL_GUARDED_BY(&RlsLb::mu_) = 0;
507
+ size_t size_ ABSL_GUARDED_BY(&RlsLb::mu_) = 0;
508
+
509
+ std::list<RequestKey> lru_list_ ABSL_GUARDED_BY(&RlsLb::mu_);
510
+ std::unordered_map<RequestKey, OrphanablePtr<Entry>, absl::Hash<RequestKey>>
511
+ map_ ABSL_GUARDED_BY(&RlsLb::mu_);
512
+ grpc_timer cleanup_timer_;
513
+ grpc_closure timer_callback_;
514
+ };
515
+
516
+ // Channel for communicating with the RLS server.
517
+ // Contains throttling logic for RLS requests.
518
+ class RlsChannel : public InternallyRefCounted<RlsChannel> {
519
+ public:
520
+ explicit RlsChannel(RefCountedPtr<RlsLb> lb_policy);
521
+
522
+ // Shuts down the channel.
523
+ void Orphan() override;
524
+
525
+ // Starts an RLS call.
526
+ // If stale_entry is non-null, it points to the entry containing
527
+ // stale data for the key.
528
+ void StartRlsCall(const RequestKey& key, Cache::Entry* stale_entry)
529
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(&RlsLb::mu_);
530
+
531
+ // Reports the result of an RLS call to the throttle.
532
+ void ReportResponseLocked(bool response_succeeded)
533
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(&RlsLb::mu_);
534
+
535
+ // Checks if a proposed RLS call should be throttled.
536
+ bool ShouldThrottle() ABSL_EXCLUSIVE_LOCKS_REQUIRED(&RlsLb::mu_) {
537
+ return throttle_.ShouldThrottle();
538
+ }
539
+
540
+ // Resets the channel's backoff.
541
+ void ResetBackoff();
542
+
543
+ grpc_channel* channel() const { return channel_; }
544
+
545
+ private:
546
+ // Watches the state of the RLS channel. Notifies the LB policy when
547
+ // the channel was previously in TRANSIENT_FAILURE and then becomes READY.
548
+ class StateWatcher : public AsyncConnectivityStateWatcherInterface {
549
+ public:
550
+ explicit StateWatcher(RefCountedPtr<RlsChannel> rls_channel)
551
+ : AsyncConnectivityStateWatcherInterface(
552
+ rls_channel->lb_policy_->work_serializer()),
553
+ rls_channel_(std::move(rls_channel)) {}
554
+
555
+ private:
556
+ void OnConnectivityStateChange(grpc_connectivity_state new_state,
557
+ const absl::Status& status) override;
558
+
559
+ RefCountedPtr<RlsChannel> rls_channel_;
560
+ bool was_transient_failure_ = false;
561
+ };
562
+
563
+ // Throttle state for RLS requests.
564
+ class Throttle {
565
+ public:
566
+ explicit Throttle(
567
+ Duration window_size = kDefaultThrottleWindowSize,
568
+ float ratio_for_successes = kDefaultThrottleRatioForSuccesses,
569
+ int padding = kDefaultThrottlePadding)
570
+ : window_size_(window_size),
571
+ ratio_for_successes_(ratio_for_successes),
572
+ padding_(padding) {}
573
+
574
+ bool ShouldThrottle() ABSL_EXCLUSIVE_LOCKS_REQUIRED(&RlsLb::mu_);
575
+
576
+ void RegisterResponse(bool success)
577
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(&RlsLb::mu_);
578
+
579
+ private:
580
+ Duration window_size_;
581
+ double ratio_for_successes_;
582
+ int padding_;
583
+ std::mt19937 rng_{std::random_device()()};
584
+
585
+ // Logged timestamp of requests.
586
+ std::deque<Timestamp> requests_ ABSL_GUARDED_BY(&RlsLb::mu_);
587
+
588
+ // Logged timestamps of failures.
589
+ std::deque<Timestamp> failures_ ABSL_GUARDED_BY(&RlsLb::mu_);
590
+ };
591
+
592
+ RefCountedPtr<RlsLb> lb_policy_;
593
+ bool is_shutdown_ = false;
594
+
595
+ grpc_channel* channel_ = nullptr;
596
+ RefCountedPtr<channelz::ChannelNode> parent_channelz_node_;
597
+ StateWatcher* watcher_ = nullptr;
598
+ Throttle throttle_ ABSL_GUARDED_BY(&RlsLb::mu_);
599
+ };
600
+
601
+ // A pending RLS request. Instances will be tracked in request_map_.
602
+ class RlsRequest : public InternallyRefCounted<RlsRequest> {
603
+ public:
604
+ // Asynchronously starts a call on rls_channel for key.
605
+ // Stores backoff_state, which will be transferred to the data cache
606
+ // if the RLS request fails.
607
+ RlsRequest(RefCountedPtr<RlsLb> lb_policy, RlsLb::RequestKey key,
608
+ RefCountedPtr<RlsChannel> rls_channel,
609
+ std::unique_ptr<BackOff> backoff_state,
610
+ grpc_lookup_v1_RouteLookupRequest_Reason reason,
611
+ std::string stale_header_data);
612
+ ~RlsRequest() override;
613
+
614
+ // Shuts down the request. If the request is still in flight, it is
615
+ // cancelled, in which case no response will be added to the cache.
616
+ void Orphan() override;
617
+
618
+ private:
619
+ // Callback to be invoked to start the call.
620
+ static void StartCall(void* arg, grpc_error_handle error);
621
+
622
+ // Helper for StartCall() that runs within the WorkSerializer.
623
+ void StartCallLocked();
624
+
625
+ // Callback to be invoked when the call is completed.
626
+ static void OnRlsCallComplete(void* arg, grpc_error_handle error);
627
+
628
+ // Call completion callback running on LB policy WorkSerializer.
629
+ void OnRlsCallCompleteLocked(grpc_error_handle error);
630
+
631
+ grpc_byte_buffer* MakeRequestProto();
632
+ ResponseInfo ParseResponseProto();
633
+
634
+ RefCountedPtr<RlsLb> lb_policy_;
635
+ RlsLb::RequestKey key_;
636
+ RefCountedPtr<RlsChannel> rls_channel_;
637
+ std::unique_ptr<BackOff> backoff_state_;
638
+ grpc_lookup_v1_RouteLookupRequest_Reason reason_;
639
+ std::string stale_header_data_;
640
+
641
+ // RLS call state.
642
+ Timestamp deadline_;
643
+ grpc_closure call_start_cb_;
644
+ grpc_closure call_complete_cb_;
645
+ grpc_call* call_ = nullptr;
646
+ grpc_byte_buffer* send_message_ = nullptr;
647
+ grpc_metadata_array recv_initial_metadata_;
648
+ grpc_byte_buffer* recv_message_ = nullptr;
649
+ grpc_metadata_array recv_trailing_metadata_;
650
+ grpc_status_code status_recv_;
651
+ grpc_slice status_details_recv_;
652
+ };
653
+
654
+ void ShutdownLocked() override;
655
+
656
+ // Returns a new picker to the channel to trigger reprocessing of
657
+ // pending picks. Schedules the actual picker update on the ExecCtx
658
+ // to be run later, so it's safe to invoke this while holding the lock.
659
+ void UpdatePickerAsync();
660
+ // Hops into work serializer and calls UpdatePickerLocked().
661
+ static void UpdatePickerCallback(void* arg, grpc_error_handle error);
662
+ // Updates the picker in the work serializer.
663
+ void UpdatePickerLocked() ABSL_LOCKS_EXCLUDED(&mu_);
664
+
665
+ // The name of the server for the channel.
666
+ std::string server_name_;
667
+
668
+ // Mutex to guard LB policy state that is accessed by the picker.
669
+ Mutex mu_;
670
+ bool is_shutdown_ ABSL_GUARDED_BY(mu_) = false;
671
+ Cache cache_ ABSL_GUARDED_BY(mu_);
672
+ // Maps an RLS request key to an RlsRequest object that represents a pending
673
+ // RLS request.
674
+ std::unordered_map<RequestKey, OrphanablePtr<RlsRequest>,
675
+ absl::Hash<RequestKey>>
676
+ request_map_ ABSL_GUARDED_BY(mu_);
677
+ // The channel on which RLS requests are sent.
678
+ // Note that this channel may be swapped out when the RLS policy gets
679
+ // an update. However, when that happens, any existing entries in
680
+ // request_map_ will continue to use the previous channel.
681
+ OrphanablePtr<RlsChannel> rls_channel_ ABSL_GUARDED_BY(mu_);
682
+
683
+ // Accessed only from within WorkSerializer.
684
+ absl::StatusOr<ServerAddressList> addresses_;
685
+ const grpc_channel_args* channel_args_ = nullptr;
686
+ RefCountedPtr<RlsLbConfig> config_;
687
+ RefCountedPtr<ChildPolicyWrapper> default_child_policy_;
688
+ std::map<std::string /*target*/, ChildPolicyWrapper*> child_policy_map_;
689
+ };
690
+
691
+ //
692
+ // RlsLb::ChildPolicyWrapper
693
+ //
694
+
695
+ RlsLb::ChildPolicyWrapper::ChildPolicyWrapper(RefCountedPtr<RlsLb> lb_policy,
696
+ std::string target)
697
+ : DualRefCounted<ChildPolicyWrapper>(
698
+ GRPC_TRACE_FLAG_ENABLED(grpc_lb_rls_trace) ? "ChildPolicyWrapper"
699
+ : nullptr),
700
+ lb_policy_(lb_policy),
701
+ target_(std::move(target)),
702
+ picker_(absl::make_unique<QueuePicker>(std::move(lb_policy))) {
703
+ lb_policy_->child_policy_map_.emplace(target_, this);
704
+ }
705
+
706
+ void RlsLb::ChildPolicyWrapper::Orphan() {
707
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_rls_trace)) {
708
+ gpr_log(GPR_INFO, "[rlslb %p] ChildPolicyWrapper=%p [%s]: shutdown",
709
+ lb_policy_.get(), this, target_.c_str());
710
+ }
711
+ is_shutdown_ = true;
712
+ lb_policy_->child_policy_map_.erase(target_);
713
+ if (child_policy_ != nullptr) {
714
+ grpc_pollset_set_del_pollset_set(child_policy_->interested_parties(),
715
+ lb_policy_->interested_parties());
716
+ child_policy_.reset();
717
+ }
718
+ picker_.reset();
719
+ }
720
+
721
+ grpc_error_handle InsertOrUpdateChildPolicyField(const std::string& field,
722
+ const std::string& value,
723
+ Json* config) {
724
+ if (config->type() != Json::Type::ARRAY) {
725
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
726
+ "child policy configuration is not an array");
727
+ }
728
+ std::vector<grpc_error_handle> error_list;
729
+ for (Json& child_json : *config->mutable_array()) {
730
+ if (child_json.type() != Json::Type::OBJECT) {
731
+ error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
732
+ "child policy item is not an object"));
733
+ } else {
734
+ Json::Object& child = *child_json.mutable_object();
735
+ if (child.size() != 1) {
736
+ error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
737
+ "child policy item contains more than one field"));
738
+ } else {
739
+ Json& child_config_json = child.begin()->second;
740
+ if (child_config_json.type() != Json::Type::OBJECT) {
741
+ error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
742
+ "child policy item config is not an object"));
743
+ } else {
744
+ Json::Object& child_config = *child_config_json.mutable_object();
745
+ child_config[field] = Json(value);
746
+ }
747
+ }
748
+ }
749
+ }
750
+ return GRPC_ERROR_CREATE_FROM_VECTOR_AND_CPP_STRING(
751
+ absl::StrCat("errors when inserting field \"", field,
752
+ "\" for child policy"),
753
+ &error_list);
754
+ }
755
+
756
+ void RlsLb::ChildPolicyWrapper::StartUpdate() {
757
+ Json child_policy_config = lb_policy_->config_->child_policy_config();
758
+ grpc_error_handle error = InsertOrUpdateChildPolicyField(
759
+ lb_policy_->config_->child_policy_config_target_field_name(), target_,
760
+ &child_policy_config);
761
+ GPR_ASSERT(error == GRPC_ERROR_NONE);
762
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_rls_trace)) {
763
+ gpr_log(
764
+ GPR_INFO,
765
+ "[rlslb %p] ChildPolicyWrapper=%p [%s]: validating update, config: %s",
766
+ lb_policy_.get(), this, target_.c_str(),
767
+ child_policy_config.Dump().c_str());
768
+ }
769
+ pending_config_ = LoadBalancingPolicyRegistry::ParseLoadBalancingConfig(
770
+ child_policy_config, &error);
771
+ // Returned RLS target fails the validation.
772
+ if (error != GRPC_ERROR_NONE) {
773
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_rls_trace)) {
774
+ gpr_log(GPR_INFO,
775
+ "[rlslb %p] ChildPolicyWrapper=%p [%s]: config failed to parse: "
776
+ "%s; config: %s",
777
+ lb_policy_.get(), this, target_.c_str(),
778
+ grpc_error_std_string(error).c_str(),
779
+ child_policy_config.Dump().c_str());
780
+ }
781
+ pending_config_.reset();
782
+ picker_ = absl::make_unique<TransientFailurePicker>(
783
+ grpc_error_to_absl_status(error));
784
+ GRPC_ERROR_UNREF(error);
785
+ child_policy_.reset();
786
+ }
787
+ }
788
+
789
+ void RlsLb::ChildPolicyWrapper::MaybeFinishUpdate() {
790
+ // If pending_config_ is not set, that means StartUpdate() failed, so
791
+ // there's nothing to do here.
792
+ if (pending_config_ == nullptr) return;
793
+ // If child policy doesn't yet exist, create it.
794
+ if (child_policy_ == nullptr) {
795
+ Args create_args;
796
+ create_args.work_serializer = lb_policy_->work_serializer();
797
+ create_args.channel_control_helper = absl::make_unique<ChildPolicyHelper>(
798
+ WeakRef(DEBUG_LOCATION, "ChildPolicyHelper"));
799
+ create_args.args = lb_policy_->channel_args_;
800
+ child_policy_ = MakeOrphanable<ChildPolicyHandler>(std::move(create_args),
801
+ &grpc_lb_rls_trace);
802
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_rls_trace)) {
803
+ gpr_log(GPR_INFO,
804
+ "[rlslb %p] ChildPolicyWrapper=%p [%s], created new child policy "
805
+ "handler %p",
806
+ lb_policy_.get(), this, target_.c_str(), child_policy_.get());
807
+ }
808
+ grpc_pollset_set_add_pollset_set(child_policy_->interested_parties(),
809
+ lb_policy_->interested_parties());
810
+ }
811
+ // Send the child the updated config.
812
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_rls_trace)) {
813
+ gpr_log(GPR_INFO,
814
+ "[rlslb %p] ChildPolicyWrapper=%p [%s], updating child policy "
815
+ "handler %p",
816
+ lb_policy_.get(), this, target_.c_str(), child_policy_.get());
817
+ }
818
+ UpdateArgs update_args;
819
+ update_args.config = std::move(pending_config_);
820
+ update_args.addresses = lb_policy_->addresses_;
821
+ update_args.args = grpc_channel_args_copy(lb_policy_->channel_args_);
822
+ child_policy_->UpdateLocked(std::move(update_args));
823
+ }
824
+
825
+ //
826
+ // RlsLb::ChildPolicyWrapper::ChildPolicyHelper
827
+ //
828
+
829
+ RefCountedPtr<SubchannelInterface>
830
+ RlsLb::ChildPolicyWrapper::ChildPolicyHelper::CreateSubchannel(
831
+ ServerAddress address, const grpc_channel_args& args) {
832
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_rls_trace)) {
833
+ gpr_log(GPR_INFO,
834
+ "[rlslb %p] ChildPolicyWrapper=%p [%s] ChildPolicyHelper=%p: "
835
+ "CreateSubchannel() for %s",
836
+ wrapper_->lb_policy_.get(), wrapper_.get(),
837
+ wrapper_->target_.c_str(), this, address.ToString().c_str());
838
+ }
839
+ if (wrapper_->is_shutdown_) return nullptr;
840
+ return wrapper_->lb_policy_->channel_control_helper()->CreateSubchannel(
841
+ std::move(address), args);
842
+ }
843
+
844
+ void RlsLb::ChildPolicyWrapper::ChildPolicyHelper::UpdateState(
845
+ grpc_connectivity_state state, const absl::Status& status,
846
+ std::unique_ptr<SubchannelPicker> picker) {
847
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_rls_trace)) {
848
+ gpr_log(GPR_INFO,
849
+ "[rlslb %p] ChildPolicyWrapper=%p [%s] ChildPolicyHelper=%p: "
850
+ "UpdateState(state=%s, status=%s, picker=%p)",
851
+ wrapper_->lb_policy_.get(), wrapper_.get(),
852
+ wrapper_->target_.c_str(), this, ConnectivityStateName(state),
853
+ status.ToString().c_str(), picker.get());
854
+ }
855
+ {
856
+ MutexLock lock(&wrapper_->lb_policy_->mu_);
857
+ if (wrapper_->is_shutdown_) return;
858
+ if (wrapper_->connectivity_state_ == GRPC_CHANNEL_TRANSIENT_FAILURE &&
859
+ state != GRPC_CHANNEL_READY) {
860
+ return;
861
+ }
862
+ wrapper_->connectivity_state_ = state;
863
+ GPR_DEBUG_ASSERT(picker != nullptr);
864
+ if (picker != nullptr) {
865
+ wrapper_->picker_ = std::move(picker);
866
+ }
867
+ }
868
+ wrapper_->lb_policy_->UpdatePickerLocked();
869
+ }
870
+
871
+ void RlsLb::ChildPolicyWrapper::ChildPolicyHelper::RequestReresolution() {
872
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_rls_trace)) {
873
+ gpr_log(GPR_INFO,
874
+ "[rlslb %p] ChildPolicyWrapper=%p [%s] ChildPolicyHelper=%p: "
875
+ "RequestReresolution",
876
+ wrapper_->lb_policy_.get(), wrapper_.get(),
877
+ wrapper_->target_.c_str(), this);
878
+ }
879
+ if (wrapper_->is_shutdown_) return;
880
+ wrapper_->lb_policy_->channel_control_helper()->RequestReresolution();
881
+ }
882
+
883
+ absl::string_view RlsLb::ChildPolicyWrapper::ChildPolicyHelper::GetAuthority() {
884
+ return wrapper_->lb_policy_->channel_control_helper()->GetAuthority();
885
+ }
886
+
887
+ void RlsLb::ChildPolicyWrapper::ChildPolicyHelper::AddTraceEvent(
888
+ TraceSeverity severity, absl::string_view message) {
889
+ if (wrapper_->is_shutdown_) return;
890
+ wrapper_->lb_policy_->channel_control_helper()->AddTraceEvent(severity,
891
+ message);
892
+ }
893
+
894
+ //
895
+ // RlsLb::Picker
896
+ //
897
+
898
+ // Builds the key to be used for a request based on path and initial_metadata.
899
+ std::map<std::string, std::string> BuildKeyMap(
900
+ const RlsLbConfig::KeyBuilderMap& key_builder_map, absl::string_view path,
901
+ const std::string& host,
902
+ const LoadBalancingPolicy::MetadataInterface* initial_metadata) {
903
+ size_t last_slash_pos = path.npos; // May need this a few times, so cache it.
904
+ // Find key builder for this path.
905
+ auto it = key_builder_map.find(std::string(path));
906
+ if (it == key_builder_map.end()) {
907
+ // Didn't find exact match, try method wildcard.
908
+ last_slash_pos = path.rfind("/");
909
+ GPR_DEBUG_ASSERT(last_slash_pos != path.npos);
910
+ if (GPR_UNLIKELY(last_slash_pos == path.npos)) return {};
911
+ std::string service(path.substr(0, last_slash_pos + 1));
912
+ it = key_builder_map.find(service);
913
+ if (it == key_builder_map.end()) return {};
914
+ }
915
+ const RlsLbConfig::KeyBuilder* key_builder = &it->second;
916
+ // Construct key map using key builder.
917
+ std::map<std::string, std::string> key_map;
918
+ // Add header keys.
919
+ for (const auto& p : key_builder->header_keys) {
920
+ const std::string& key = p.first;
921
+ const std::vector<std::string>& header_names = p.second;
922
+ for (const std::string& header_name : header_names) {
923
+ std::string buffer;
924
+ absl::optional<absl::string_view> value =
925
+ initial_metadata->Lookup(header_name, &buffer);
926
+ if (value.has_value()) {
927
+ key_map[key] = std::string(*value);
928
+ break;
929
+ }
930
+ }
931
+ }
932
+ // Add constant keys.
933
+ key_map.insert(key_builder->constant_keys.begin(),
934
+ key_builder->constant_keys.end());
935
+ // Add host key.
936
+ if (!key_builder->host_key.empty()) {
937
+ key_map[key_builder->host_key] = host;
938
+ }
939
+ // Add service key.
940
+ if (!key_builder->service_key.empty()) {
941
+ if (last_slash_pos == path.npos) {
942
+ last_slash_pos = path.rfind("/");
943
+ GPR_DEBUG_ASSERT(last_slash_pos != path.npos);
944
+ if (GPR_UNLIKELY(last_slash_pos == path.npos)) return {};
945
+ }
946
+ key_map[key_builder->service_key] =
947
+ std::string(path.substr(1, last_slash_pos - 1));
948
+ }
949
+ // Add method key.
950
+ if (!key_builder->method_key.empty()) {
951
+ if (last_slash_pos == path.npos) {
952
+ last_slash_pos = path.rfind("/");
953
+ GPR_DEBUG_ASSERT(last_slash_pos != path.npos);
954
+ if (GPR_UNLIKELY(last_slash_pos == path.npos)) return {};
955
+ }
956
+ key_map[key_builder->method_key] =
957
+ std::string(path.substr(last_slash_pos + 1));
958
+ }
959
+ return key_map;
960
+ }
961
+
962
+ RlsLb::Picker::Picker(RefCountedPtr<RlsLb> lb_policy)
963
+ : lb_policy_(std::move(lb_policy)), config_(lb_policy_->config_) {
964
+ if (lb_policy_->default_child_policy_ != nullptr) {
965
+ default_child_policy_ =
966
+ lb_policy_->default_child_policy_->Ref(DEBUG_LOCATION, "Picker");
967
+ }
968
+ }
969
+
970
+ RlsLb::Picker::~Picker() {
971
+ // It's not safe to unref the default child policy in the picker,
972
+ // since that needs to be done in the WorkSerializer.
973
+ if (default_child_policy_ != nullptr) {
974
+ auto* default_child_policy = default_child_policy_.release();
975
+ lb_policy_->work_serializer()->Run(
976
+ [default_child_policy]() {
977
+ default_child_policy->Unref(DEBUG_LOCATION, "Picker");
978
+ },
979
+ DEBUG_LOCATION);
980
+ }
981
+ }
982
+
983
+ LoadBalancingPolicy::PickResult RlsLb::Picker::Pick(PickArgs args) {
984
+ // Construct key for request.
985
+ RequestKey key = {BuildKeyMap(config_->key_builder_map(), args.path,
986
+ lb_policy_->server_name_,
987
+ args.initial_metadata)};
988
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_rls_trace)) {
989
+ gpr_log(GPR_INFO, "[rlslb %p] picker=%p: request keys: %s",
990
+ lb_policy_.get(), this, key.ToString().c_str());
991
+ }
992
+ Timestamp now = ExecCtx::Get()->Now();
993
+ MutexLock lock(&lb_policy_->mu_);
994
+ if (lb_policy_->is_shutdown_) {
995
+ return PickResult::Fail(
996
+ absl::UnavailableError("LB policy already shut down"));
997
+ }
998
+ // Check if there's a cache entry.
999
+ Cache::Entry* entry = lb_policy_->cache_.Find(key);
1000
+ // If there is no cache entry, or if the cache entry is not in backoff
1001
+ // and has a stale time in the past, and there is not already a
1002
+ // pending RLS request for this key, then try to start a new RLS request.
1003
+ if ((entry == nullptr ||
1004
+ (entry->stale_time() < now && entry->backoff_time() < now)) &&
1005
+ lb_policy_->request_map_.find(key) == lb_policy_->request_map_.end()) {
1006
+ // Check if requests are being throttled.
1007
+ if (lb_policy_->rls_channel_->ShouldThrottle()) {
1008
+ // Request is throttled.
1009
+ // If there is no non-expired data in the cache, then we use the
1010
+ // default target if set, or else we fail the pick.
1011
+ if (entry == nullptr || entry->data_expiration_time() < now) {
1012
+ if (default_child_policy_ != nullptr) {
1013
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_rls_trace)) {
1014
+ gpr_log(GPR_INFO,
1015
+ "[rlslb %p] picker=%p: RLS call throttled; "
1016
+ "using default target",
1017
+ lb_policy_.get(), this);
1018
+ }
1019
+ return default_child_policy_->Pick(args);
1020
+ }
1021
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_rls_trace)) {
1022
+ gpr_log(GPR_INFO,
1023
+ "[rlslb %p] picker=%p: RLS call throttled; failing pick",
1024
+ lb_policy_.get(), this);
1025
+ }
1026
+ return PickResult::Fail(
1027
+ absl::UnavailableError("RLS request throttled"));
1028
+ }
1029
+ }
1030
+ // Start the RLS call.
1031
+ lb_policy_->rls_channel_->StartRlsCall(
1032
+ key, (entry == nullptr || entry->data_expiration_time() < now) ? nullptr
1033
+ : entry);
1034
+ }
1035
+ // If the cache entry exists, see if it has usable data.
1036
+ if (entry != nullptr) {
1037
+ // If the entry has non-expired data, use it.
1038
+ if (entry->data_expiration_time() >= now) {
1039
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_rls_trace)) {
1040
+ gpr_log(GPR_INFO, "[rlslb %p] picker=%p: using cache entry %p",
1041
+ lb_policy_.get(), this, entry);
1042
+ }
1043
+ return entry->Pick(args);
1044
+ }
1045
+ // If the entry is in backoff, then use the default target if set,
1046
+ // or else fail the pick.
1047
+ if (entry->backoff_time() >= now) {
1048
+ if (default_child_policy_ != nullptr) {
1049
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_rls_trace)) {
1050
+ gpr_log(
1051
+ GPR_INFO,
1052
+ "[rlslb %p] picker=%p: RLS call in backoff; using default target",
1053
+ lb_policy_.get(), this);
1054
+ }
1055
+ return default_child_policy_->Pick(args);
1056
+ }
1057
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_rls_trace)) {
1058
+ gpr_log(GPR_INFO,
1059
+ "[rlslb %p] picker=%p: RLS call in backoff; failing pick",
1060
+ lb_policy_.get(), this);
1061
+ }
1062
+ return PickResult::Fail(entry->status());
1063
+ }
1064
+ }
1065
+ // RLS call pending. Queue the pick.
1066
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_rls_trace)) {
1067
+ gpr_log(GPR_INFO, "[rlslb %p] picker=%p: RLS request pending; queuing pick",
1068
+ lb_policy_.get(), this);
1069
+ }
1070
+ return PickResult::Queue();
1071
+ }
1072
+
1073
+ //
1074
+ // RlsLb::Cache::Entry::BackoffTimer
1075
+ //
1076
+
1077
+ RlsLb::Cache::Entry::BackoffTimer::BackoffTimer(RefCountedPtr<Entry> entry,
1078
+ Timestamp backoff_time)
1079
+ : entry_(std::move(entry)) {
1080
+ GRPC_CLOSURE_INIT(&backoff_timer_callback_, OnBackoffTimer, this, nullptr);
1081
+ Ref(DEBUG_LOCATION, "BackoffTimer").release();
1082
+ grpc_timer_init(&backoff_timer_, backoff_time, &backoff_timer_callback_);
1083
+ }
1084
+
1085
+ void RlsLb::Cache::Entry::BackoffTimer::Orphan() {
1086
+ if (armed_) {
1087
+ armed_ = false;
1088
+ grpc_timer_cancel(&backoff_timer_);
1089
+ }
1090
+ Unref(DEBUG_LOCATION, "Orphan");
1091
+ }
1092
+
1093
+ void RlsLb::Cache::Entry::BackoffTimer::OnBackoffTimer(
1094
+ void* arg, grpc_error_handle /*error*/) {
1095
+ auto* self = static_cast<BackoffTimer*>(arg);
1096
+ self->entry_->lb_policy_->work_serializer()->Run(
1097
+ [self]() {
1098
+ RefCountedPtr<BackoffTimer> backoff_timer(self);
1099
+ {
1100
+ MutexLock lock(&self->entry_->lb_policy_->mu_);
1101
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_rls_trace)) {
1102
+ gpr_log(GPR_INFO,
1103
+ "[rlslb %p] cache entry=%p %s, armed_=%d: "
1104
+ "backoff timer fired",
1105
+ self->entry_->lb_policy_.get(), self->entry_.get(),
1106
+ self->entry_->is_shutdown_
1107
+ ? "(shut down)"
1108
+ : self->entry_->lru_iterator_->ToString().c_str(),
1109
+ self->armed_);
1110
+ }
1111
+ bool cancelled = !self->armed_;
1112
+ self->armed_ = false;
1113
+ if (cancelled) return;
1114
+ }
1115
+ // The pick was in backoff state and there could be a pick queued if
1116
+ // wait_for_ready is true. We'll update the picker for that case.
1117
+ self->entry_->lb_policy_->UpdatePickerLocked();
1118
+ },
1119
+ DEBUG_LOCATION);
1120
+ }
1121
+
1122
+ //
1123
+ // RlsLb::Cache::Entry
1124
+ //
1125
+
1126
+ std::unique_ptr<BackOff> MakeCacheEntryBackoff() {
1127
+ return absl::make_unique<BackOff>(
1128
+ BackOff::Options()
1129
+ .set_initial_backoff(kCacheBackoffInitial)
1130
+ .set_multiplier(kCacheBackoffMultiplier)
1131
+ .set_jitter(kCacheBackoffJitter)
1132
+ .set_max_backoff(kCacheBackoffMax));
1133
+ }
1134
+
1135
+ RlsLb::Cache::Entry::Entry(RefCountedPtr<RlsLb> lb_policy,
1136
+ const RequestKey& key)
1137
+ : InternallyRefCounted<Entry>(
1138
+ GRPC_TRACE_FLAG_ENABLED(grpc_lb_rls_trace) ? "CacheEntry" : nullptr),
1139
+ lb_policy_(std::move(lb_policy)),
1140
+ backoff_state_(MakeCacheEntryBackoff()),
1141
+ min_expiration_time_(ExecCtx::Get()->Now() + kMinExpirationTime),
1142
+ lru_iterator_(lb_policy_->cache_.lru_list_.insert(
1143
+ lb_policy_->cache_.lru_list_.end(), key)) {}
1144
+
1145
+ void RlsLb::Cache::Entry::Orphan() {
1146
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_rls_trace)) {
1147
+ gpr_log(GPR_INFO, "[rlslb %p] cache entry=%p %s: cache entry evicted",
1148
+ lb_policy_.get(), this, lru_iterator_->ToString().c_str());
1149
+ }
1150
+ is_shutdown_ = true;
1151
+ lb_policy_->cache_.lru_list_.erase(lru_iterator_);
1152
+ lru_iterator_ = lb_policy_->cache_.lru_list_.end(); // Just in case.
1153
+ backoff_state_.reset();
1154
+ if (backoff_timer_ != nullptr) {
1155
+ backoff_timer_.reset();
1156
+ lb_policy_->UpdatePickerAsync();
1157
+ }
1158
+ child_policy_wrappers_.clear();
1159
+ Unref(DEBUG_LOCATION, "Orphan");
1160
+ }
1161
+
1162
+ size_t RlsLb::Cache::Entry::Size() const {
1163
+ // lru_iterator_ is not valid once we're shut down.
1164
+ GPR_ASSERT(!is_shutdown_);
1165
+ return lb_policy_->cache_.EntrySizeForKey(*lru_iterator_);
1166
+ }
1167
+
1168
+ LoadBalancingPolicy::PickResult RlsLb::Cache::Entry::Pick(PickArgs args) {
1169
+ for (const auto& child_policy_wrapper : child_policy_wrappers_) {
1170
+ if (child_policy_wrapper->connectivity_state() ==
1171
+ GRPC_CHANNEL_TRANSIENT_FAILURE) {
1172
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_rls_trace)) {
1173
+ gpr_log(GPR_INFO,
1174
+ "[rlslb %p] cache entry=%p %s: target %s in state "
1175
+ "TRANSIENT_FAILURE; skipping",
1176
+ lb_policy_.get(), this, lru_iterator_->ToString().c_str(),
1177
+ child_policy_wrapper->target().c_str());
1178
+ }
1179
+ continue;
1180
+ }
1181
+ // Child policy not in TRANSIENT_FAILURE, so delegate.
1182
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_rls_trace)) {
1183
+ gpr_log(
1184
+ GPR_INFO,
1185
+ "[rlslb %p] cache entry=%p %s: target %s in state %s; "
1186
+ "delegating",
1187
+ lb_policy_.get(), this, lru_iterator_->ToString().c_str(),
1188
+ child_policy_wrapper->target().c_str(),
1189
+ ConnectivityStateName(child_policy_wrapper->connectivity_state()));
1190
+ }
1191
+ // Add header data.
1192
+ if (!header_data_.empty()) {
1193
+ char* copied_header_data =
1194
+ static_cast<char*>(args.call_state->Alloc(header_data_.length() + 1));
1195
+ strcpy(copied_header_data, header_data_.c_str());
1196
+ args.initial_metadata->Add(kRlsHeaderKey, copied_header_data);
1197
+ }
1198
+ return child_policy_wrapper->Pick(args);
1199
+ }
1200
+ // No child policy found.
1201
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_rls_trace)) {
1202
+ gpr_log(GPR_INFO,
1203
+ "[rlslb %p] cache entry=%p %s: no healthy target found; "
1204
+ "failing pick",
1205
+ lb_policy_.get(), this, lru_iterator_->ToString().c_str());
1206
+ }
1207
+ return PickResult::Fail(
1208
+ absl::UnavailableError("all RLS targets unreachable"));
1209
+ }
1210
+
1211
+ void RlsLb::Cache::Entry::ResetBackoff() {
1212
+ backoff_time_ = Timestamp::InfPast();
1213
+ backoff_timer_.reset();
1214
+ }
1215
+
1216
+ bool RlsLb::Cache::Entry::ShouldRemove() const {
1217
+ Timestamp now = ExecCtx::Get()->Now();
1218
+ return data_expiration_time_ < now && backoff_expiration_time_ < now;
1219
+ }
1220
+
1221
+ bool RlsLb::Cache::Entry::CanEvict() const {
1222
+ Timestamp now = ExecCtx::Get()->Now();
1223
+ return min_expiration_time_ < now;
1224
+ }
1225
+
1226
+ void RlsLb::Cache::Entry::MarkUsed() {
1227
+ auto& lru_list = lb_policy_->cache_.lru_list_;
1228
+ auto new_it = lru_list.insert(lru_list.end(), *lru_iterator_);
1229
+ lru_list.erase(lru_iterator_);
1230
+ lru_iterator_ = new_it;
1231
+ }
1232
+
1233
+ std::vector<RlsLb::ChildPolicyWrapper*>
1234
+ RlsLb::Cache::Entry::OnRlsResponseLocked(
1235
+ ResponseInfo response, std::unique_ptr<BackOff> backoff_state) {
1236
+ // Move the entry to the end of the LRU list.
1237
+ MarkUsed();
1238
+ // If the request failed, store the failed status and update the
1239
+ // backoff state.
1240
+ if (!response.status.ok()) {
1241
+ status_ = response.status;
1242
+ if (backoff_state != nullptr) {
1243
+ backoff_state_ = std::move(backoff_state);
1244
+ } else {
1245
+ backoff_state_ = MakeCacheEntryBackoff();
1246
+ }
1247
+ backoff_time_ = backoff_state_->NextAttemptTime();
1248
+ Timestamp now = ExecCtx::Get()->Now();
1249
+ backoff_expiration_time_ = now + (backoff_time_ - now) * 2;
1250
+ backoff_timer_ = MakeOrphanable<BackoffTimer>(
1251
+ Ref(DEBUG_LOCATION, "BackoffTimer"), backoff_time_);
1252
+ lb_policy_->UpdatePickerAsync();
1253
+ return {};
1254
+ }
1255
+ // Request succeeded, so store the result.
1256
+ header_data_ = std::move(response.header_data);
1257
+ Timestamp now = ExecCtx::Get()->Now();
1258
+ data_expiration_time_ = now + lb_policy_->config_->max_age();
1259
+ stale_time_ = now + lb_policy_->config_->stale_age();
1260
+ status_ = absl::OkStatus();
1261
+ backoff_state_.reset();
1262
+ backoff_time_ = Timestamp::InfPast();
1263
+ backoff_expiration_time_ = Timestamp::InfPast();
1264
+ // Check if we need to update this list of targets.
1265
+ bool targets_changed = [&]() ABSL_EXCLUSIVE_LOCKS_REQUIRED(&RlsLb::mu_) {
1266
+ if (child_policy_wrappers_.size() != response.targets.size()) return true;
1267
+ for (size_t i = 0; i < response.targets.size(); ++i) {
1268
+ if (child_policy_wrappers_[i]->target() != response.targets[i]) {
1269
+ return true;
1270
+ }
1271
+ }
1272
+ return false;
1273
+ }();
1274
+ if (!targets_changed) {
1275
+ // Targets didn't change, so we're not updating the list of child
1276
+ // policies. Return a new picker so that any queued requests can be
1277
+ // re-processed.
1278
+ lb_policy_->UpdatePickerAsync();
1279
+ return {};
1280
+ }
1281
+ // Target list changed, so update it.
1282
+ std::set<absl::string_view> old_targets;
1283
+ for (RefCountedPtr<ChildPolicyWrapper>& child_policy_wrapper :
1284
+ child_policy_wrappers_) {
1285
+ old_targets.emplace(child_policy_wrapper->target());
1286
+ }
1287
+ bool update_picker = false;
1288
+ std::vector<ChildPolicyWrapper*> child_policies_to_finish_update;
1289
+ std::vector<RefCountedPtr<ChildPolicyWrapper>> new_child_policy_wrappers;
1290
+ new_child_policy_wrappers.reserve(response.targets.size());
1291
+ for (std::string& target : response.targets) {
1292
+ auto it = lb_policy_->child_policy_map_.find(target);
1293
+ if (it == lb_policy_->child_policy_map_.end()) {
1294
+ auto new_child = MakeRefCounted<ChildPolicyWrapper>(
1295
+ lb_policy_->Ref(DEBUG_LOCATION, "ChildPolicyWrapper"), target);
1296
+ new_child->StartUpdate();
1297
+ child_policies_to_finish_update.push_back(new_child.get());
1298
+ new_child_policy_wrappers.emplace_back(std::move(new_child));
1299
+ } else {
1300
+ new_child_policy_wrappers.emplace_back(
1301
+ it->second->Ref(DEBUG_LOCATION, "CacheEntry"));
1302
+ // If the target already existed but was not previously used for
1303
+ // this key, then we'll need to update the picker, since we
1304
+ // didn't actually create a new child policy, which would have
1305
+ // triggered an RLS picker update when it returned its first picker.
1306
+ if (old_targets.find(target) == old_targets.end()) {
1307
+ update_picker = true;
1308
+ }
1309
+ }
1310
+ }
1311
+ child_policy_wrappers_ = std::move(new_child_policy_wrappers);
1312
+ if (update_picker) {
1313
+ lb_policy_->UpdatePickerAsync();
1314
+ }
1315
+ return child_policies_to_finish_update;
1316
+ }
1317
+
1318
+ //
1319
+ // RlsLb::Cache
1320
+ //
1321
+
1322
+ RlsLb::Cache::Cache(RlsLb* lb_policy) : lb_policy_(lb_policy) {
1323
+ Timestamp now = ExecCtx::Get()->Now();
1324
+ lb_policy_->Ref(DEBUG_LOCATION, "CacheCleanupTimer").release();
1325
+ GRPC_CLOSURE_INIT(&timer_callback_, OnCleanupTimer, this, nullptr);
1326
+ grpc_timer_init(&cleanup_timer_, now + kCacheCleanupTimerInterval,
1327
+ &timer_callback_);
1328
+ }
1329
+
1330
+ RlsLb::Cache::Entry* RlsLb::Cache::Find(const RequestKey& key) {
1331
+ auto it = map_.find(key);
1332
+ if (it == map_.end()) return nullptr;
1333
+ it->second->MarkUsed();
1334
+ return it->second.get();
1335
+ }
1336
+
1337
+ RlsLb::Cache::Entry* RlsLb::Cache::FindOrInsert(const RequestKey& key) {
1338
+ auto it = map_.find(key);
1339
+ // If not found, create new entry.
1340
+ if (it == map_.end()) {
1341
+ size_t entry_size = EntrySizeForKey(key);
1342
+ MaybeShrinkSize(size_limit_ - std::min(size_limit_, entry_size));
1343
+ Entry* entry =
1344
+ new Entry(lb_policy_->Ref(DEBUG_LOCATION, "CacheEntry"), key);
1345
+ map_.emplace(key, OrphanablePtr<Entry>(entry));
1346
+ size_ += entry_size;
1347
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_rls_trace)) {
1348
+ gpr_log(GPR_INFO, "[rlslb %p] key=%s: cache entry added, entry=%p",
1349
+ lb_policy_, key.ToString().c_str(), entry);
1350
+ }
1351
+ return entry;
1352
+ }
1353
+ // Entry found, so use it.
1354
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_rls_trace)) {
1355
+ gpr_log(GPR_INFO, "[rlslb %p] key=%s: found cache entry %p", lb_policy_,
1356
+ key.ToString().c_str(), it->second.get());
1357
+ }
1358
+ it->second->MarkUsed();
1359
+ return it->second.get();
1360
+ }
1361
+
1362
+ void RlsLb::Cache::Resize(size_t bytes) {
1363
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_rls_trace)) {
1364
+ gpr_log(GPR_INFO, "[rlslb %p] resizing cache to %" PRIuPTR " bytes",
1365
+ lb_policy_, bytes);
1366
+ }
1367
+ size_limit_ = bytes;
1368
+ MaybeShrinkSize(size_limit_);
1369
+ }
1370
+
1371
+ void RlsLb::Cache::ResetAllBackoff() {
1372
+ for (auto& p : map_) {
1373
+ p.second->ResetBackoff();
1374
+ }
1375
+ lb_policy_->UpdatePickerAsync();
1376
+ }
1377
+
1378
+ void RlsLb::Cache::Shutdown() {
1379
+ map_.clear();
1380
+ lru_list_.clear();
1381
+ grpc_timer_cancel(&cleanup_timer_);
1382
+ }
1383
+
1384
+ void RlsLb::Cache::OnCleanupTimer(void* arg, grpc_error_handle error) {
1385
+ Cache* cache = static_cast<Cache*>(arg);
1386
+ (void)GRPC_ERROR_REF(error);
1387
+ cache->lb_policy_->work_serializer()->Run(
1388
+ [cache, error]() {
1389
+ RefCountedPtr<RlsLb> lb_policy(cache->lb_policy_);
1390
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_rls_trace)) {
1391
+ gpr_log(GPR_INFO, "[rlslb %p] cache cleanup timer fired (%s)",
1392
+ cache->lb_policy_, grpc_error_std_string(error).c_str());
1393
+ }
1394
+ if (error == GRPC_ERROR_CANCELLED) return;
1395
+ MutexLock lock(&lb_policy->mu_);
1396
+ if (lb_policy->is_shutdown_) return;
1397
+ for (auto it = cache->map_.begin(); it != cache->map_.end();) {
1398
+ if (GPR_UNLIKELY(it->second->ShouldRemove() &&
1399
+ it->second->CanEvict())) {
1400
+ cache->size_ -= it->second->Size();
1401
+ it = cache->map_.erase(it);
1402
+ } else {
1403
+ ++it;
1404
+ }
1405
+ }
1406
+ Timestamp now = ExecCtx::Get()->Now();
1407
+ lb_policy.release();
1408
+ grpc_timer_init(&cache->cleanup_timer_,
1409
+ now + kCacheCleanupTimerInterval,
1410
+ &cache->timer_callback_);
1411
+ },
1412
+ DEBUG_LOCATION);
1413
+ }
1414
+
1415
+ size_t RlsLb::Cache::EntrySizeForKey(const RequestKey& key) {
1416
+ // Key is stored twice, once in LRU list and again in the cache map.
1417
+ return (key.Size() * 2) + sizeof(Entry);
1418
+ }
1419
+
1420
+ void RlsLb::Cache::MaybeShrinkSize(size_t bytes) {
1421
+ while (size_ > bytes) {
1422
+ auto lru_it = lru_list_.begin();
1423
+ if (GPR_UNLIKELY(lru_it == lru_list_.end())) break;
1424
+ auto map_it = map_.find(*lru_it);
1425
+ GPR_ASSERT(map_it != map_.end());
1426
+ if (!map_it->second->CanEvict()) break;
1427
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_rls_trace)) {
1428
+ gpr_log(GPR_INFO, "[rlslb %p] LRU eviction: removing entry %p %s",
1429
+ lb_policy_, map_it->second.get(), lru_it->ToString().c_str());
1430
+ }
1431
+ size_ -= map_it->second->Size();
1432
+ map_.erase(map_it);
1433
+ }
1434
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_rls_trace)) {
1435
+ gpr_log(GPR_INFO,
1436
+ "[rlslb %p] LRU pass complete: desired size=%" PRIuPTR
1437
+ " size=%" PRIuPTR,
1438
+ lb_policy_, bytes, size_);
1439
+ }
1440
+ }
1441
+
1442
+ //
1443
+ // RlsLb::RlsChannel::StateWatcher
1444
+ //
1445
+
1446
+ void RlsLb::RlsChannel::StateWatcher::OnConnectivityStateChange(
1447
+ grpc_connectivity_state new_state, const absl::Status& status) {
1448
+ auto* lb_policy = rls_channel_->lb_policy_.get();
1449
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_rls_trace)) {
1450
+ gpr_log(GPR_INFO,
1451
+ "[rlslb %p] RlsChannel=%p StateWatcher=%p: "
1452
+ "state changed to %s (%s)",
1453
+ lb_policy, rls_channel_.get(), this,
1454
+ ConnectivityStateName(new_state), status.ToString().c_str());
1455
+ }
1456
+ if (rls_channel_->is_shutdown_) return;
1457
+ MutexLock lock(&lb_policy->mu_);
1458
+ if (new_state == GRPC_CHANNEL_READY && was_transient_failure_) {
1459
+ was_transient_failure_ = false;
1460
+ // Reset the backoff of all cache entries, so that we don't
1461
+ // double-penalize if an RLS request fails while the channel is
1462
+ // down, since the throttling for the channel being down is handled
1463
+ // at the channel level instead of in the individual cache entries.
1464
+ lb_policy->cache_.ResetAllBackoff();
1465
+ } else if (new_state == GRPC_CHANNEL_TRANSIENT_FAILURE) {
1466
+ was_transient_failure_ = true;
1467
+ }
1468
+ }
1469
+
1470
+ //
1471
+ // RlsLb::RlsChannel::Throttle
1472
+ //
1473
+
1474
+ bool RlsLb::RlsChannel::Throttle::ShouldThrottle() {
1475
+ Timestamp now = ExecCtx::Get()->Now();
1476
+ while (!requests_.empty() && now - requests_.front() > window_size_) {
1477
+ requests_.pop_front();
1478
+ }
1479
+ while (!failures_.empty() && now - failures_.front() > window_size_) {
1480
+ failures_.pop_front();
1481
+ }
1482
+ // Compute probability of throttling.
1483
+ float num_requests = requests_.size();
1484
+ float num_successes = num_requests - failures_.size();
1485
+ // Note: it's possible that this ratio will be negative, in which case
1486
+ // no throttling will be done.
1487
+ float throttle_probability =
1488
+ (num_requests - (num_successes * ratio_for_successes_)) /
1489
+ (num_requests + padding_);
1490
+ // Generate a random number for the request.
1491
+ std::uniform_real_distribution<float> dist(0, 1.0);
1492
+ // Check if we should throttle the request.
1493
+ bool throttle = dist(rng_) < throttle_probability;
1494
+ // If we're throttling, record the request and the failure.
1495
+ if (throttle) {
1496
+ requests_.push_back(now);
1497
+ failures_.push_back(now);
1498
+ }
1499
+ return throttle;
1500
+ }
1501
+
1502
+ void RlsLb::RlsChannel::Throttle::RegisterResponse(bool success) {
1503
+ Timestamp now = ExecCtx::Get()->Now();
1504
+ requests_.push_back(now);
1505
+ if (!success) failures_.push_back(now);
1506
+ }
1507
+
1508
+ //
1509
+ // RlsLb::RlsChannel
1510
+ //
1511
+
1512
+ RlsLb::RlsChannel::RlsChannel(RefCountedPtr<RlsLb> lb_policy)
1513
+ : InternallyRefCounted<RlsChannel>(
1514
+ GRPC_TRACE_FLAG_ENABLED(grpc_lb_rls_trace) ? "RlsChannel" : nullptr),
1515
+ lb_policy_(std::move(lb_policy)) {
1516
+ // Get channel creds from parent channel.
1517
+ // TODO(roth): Once we eliminate insecure builds, get this via a
1518
+ // method on the helper instead of digging through channel args.
1519
+ grpc_channel_credentials* creds =
1520
+ grpc_channel_credentials_find_in_args(lb_policy_->channel_args_);
1521
+ // Use the parent channel's authority.
1522
+ std::string authority(lb_policy_->channel_control_helper()->GetAuthority());
1523
+ absl::InlinedVector<grpc_arg, 3> args = {
1524
+ grpc_channel_arg_string_create(
1525
+ const_cast<char*>(GRPC_ARG_DEFAULT_AUTHORITY),
1526
+ const_cast<char*>(authority.c_str())),
1527
+ grpc_channel_arg_integer_create(
1528
+ const_cast<char*>(GRPC_ARG_CHANNELZ_IS_INTERNAL_CHANNEL), 1),
1529
+ };
1530
+ // Propagate fake security connector expected targets, if any.
1531
+ // (This is ugly, but it seems better than propagating all channel args
1532
+ // from the parent channel by default and then having a giant
1533
+ // exclude list of args to strip out, like we do in grpclb.)
1534
+ const char* fake_security_expected_targets = grpc_channel_args_find_string(
1535
+ lb_policy_->channel_args_, GRPC_ARG_FAKE_SECURITY_EXPECTED_TARGETS);
1536
+ if (fake_security_expected_targets != nullptr) {
1537
+ args.push_back(grpc_channel_arg_string_create(
1538
+ const_cast<char*>(GRPC_ARG_FAKE_SECURITY_EXPECTED_TARGETS),
1539
+ const_cast<char*>(fake_security_expected_targets)));
1540
+ }
1541
+ // Add service config args if needed.
1542
+ const std::string& service_config =
1543
+ lb_policy_->config_->rls_channel_service_config();
1544
+ if (!service_config.empty()) {
1545
+ args.push_back(grpc_channel_arg_string_create(
1546
+ const_cast<char*>(GRPC_ARG_SERVICE_CONFIG),
1547
+ const_cast<char*>(service_config.c_str())));
1548
+ args.push_back(grpc_channel_arg_integer_create(
1549
+ const_cast<char*>(GRPC_ARG_SERVICE_CONFIG_DISABLE_RESOLUTION), 1));
1550
+ }
1551
+ grpc_channel_args rls_channel_args = {args.size(), args.data()};
1552
+ channel_ = grpc_channel_create(lb_policy_->config_->lookup_service().c_str(),
1553
+ creds, &rls_channel_args);
1554
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_rls_trace)) {
1555
+ gpr_log(GPR_INFO, "[rlslb %p] RlsChannel=%p: created channel %p for %s",
1556
+ lb_policy_.get(), this, channel_,
1557
+ lb_policy_->config_->lookup_service().c_str());
1558
+ }
1559
+ if (channel_ != nullptr) {
1560
+ // Set up channelz linkage.
1561
+ channelz::ChannelNode* child_channelz_node =
1562
+ grpc_channel_get_channelz_node(channel_);
1563
+ channelz::ChannelNode* parent_channelz_node =
1564
+ grpc_channel_args_find_pointer<channelz::ChannelNode>(
1565
+ lb_policy_->channel_args_, GRPC_ARG_CHANNELZ_CHANNEL_NODE);
1566
+ if (child_channelz_node != nullptr && parent_channelz_node != nullptr) {
1567
+ parent_channelz_node->AddChildChannel(child_channelz_node->uuid());
1568
+ parent_channelz_node_ = parent_channelz_node->Ref();
1569
+ }
1570
+ // Start connectivity watch.
1571
+ ClientChannel* client_channel = ClientChannel::GetFromChannel(channel_);
1572
+ GPR_ASSERT(client_channel != nullptr);
1573
+ watcher_ = new StateWatcher(Ref(DEBUG_LOCATION, "StateWatcher"));
1574
+ client_channel->AddConnectivityWatcher(
1575
+ GRPC_CHANNEL_IDLE,
1576
+ OrphanablePtr<AsyncConnectivityStateWatcherInterface>(watcher_));
1577
+ }
1578
+ }
1579
+
1580
+ void RlsLb::RlsChannel::Orphan() {
1581
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_rls_trace)) {
1582
+ gpr_log(GPR_INFO, "[rlslb %p] RlsChannel=%p, channel=%p: shutdown",
1583
+ lb_policy_.get(), this, channel_);
1584
+ }
1585
+ is_shutdown_ = true;
1586
+ if (channel_ != nullptr) {
1587
+ // Remove channelz linkage.
1588
+ if (parent_channelz_node_ != nullptr) {
1589
+ channelz::ChannelNode* child_channelz_node =
1590
+ grpc_channel_get_channelz_node(channel_);
1591
+ GPR_ASSERT(child_channelz_node != nullptr);
1592
+ parent_channelz_node_->RemoveChildChannel(child_channelz_node->uuid());
1593
+ }
1594
+ // Stop connectivity watch.
1595
+ if (watcher_ != nullptr) {
1596
+ ClientChannel* client_channel = ClientChannel::GetFromChannel(channel_);
1597
+ GPR_ASSERT(client_channel != nullptr);
1598
+ client_channel->RemoveConnectivityWatcher(watcher_);
1599
+ watcher_ = nullptr;
1600
+ }
1601
+ grpc_channel_destroy(channel_);
1602
+ }
1603
+ Unref(DEBUG_LOCATION, "Orphan");
1604
+ }
1605
+
1606
+ void RlsLb::RlsChannel::StartRlsCall(const RequestKey& key,
1607
+ Cache::Entry* stale_entry) {
1608
+ std::unique_ptr<BackOff> backoff_state;
1609
+ grpc_lookup_v1_RouteLookupRequest_Reason reason =
1610
+ grpc_lookup_v1_RouteLookupRequest_REASON_MISS;
1611
+ std::string stale_header_data;
1612
+ if (stale_entry != nullptr) {
1613
+ backoff_state = stale_entry->TakeBackoffState();
1614
+ reason = grpc_lookup_v1_RouteLookupRequest_REASON_STALE;
1615
+ stale_header_data = stale_entry->header_data();
1616
+ }
1617
+ lb_policy_->request_map_.emplace(
1618
+ key, MakeOrphanable<RlsRequest>(
1619
+ lb_policy_->Ref(DEBUG_LOCATION, "RlsRequest"), key,
1620
+ lb_policy_->rls_channel_->Ref(DEBUG_LOCATION, "RlsRequest"),
1621
+ std::move(backoff_state), reason, std::move(stale_header_data)));
1622
+ }
1623
+
1624
+ void RlsLb::RlsChannel::ReportResponseLocked(bool response_succeeded) {
1625
+ throttle_.RegisterResponse(response_succeeded);
1626
+ }
1627
+
1628
+ void RlsLb::RlsChannel::ResetBackoff() {
1629
+ GPR_DEBUG_ASSERT(channel_ != nullptr);
1630
+ grpc_channel_reset_connect_backoff(channel_);
1631
+ }
1632
+
1633
+ //
1634
+ // RlsLb::RlsRequest
1635
+ //
1636
+
1637
+ RlsLb::RlsRequest::RlsRequest(RefCountedPtr<RlsLb> lb_policy, RequestKey key,
1638
+ RefCountedPtr<RlsChannel> rls_channel,
1639
+ std::unique_ptr<BackOff> backoff_state,
1640
+ grpc_lookup_v1_RouteLookupRequest_Reason reason,
1641
+ std::string stale_header_data)
1642
+ : InternallyRefCounted<RlsRequest>(
1643
+ GRPC_TRACE_FLAG_ENABLED(grpc_lb_rls_trace) ? "RlsRequest" : nullptr),
1644
+ lb_policy_(std::move(lb_policy)),
1645
+ key_(std::move(key)),
1646
+ rls_channel_(std::move(rls_channel)),
1647
+ backoff_state_(std::move(backoff_state)),
1648
+ reason_(reason),
1649
+ stale_header_data_(std::move(stale_header_data)) {
1650
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_rls_trace)) {
1651
+ gpr_log(GPR_INFO,
1652
+ "[rlslb %p] rls_request=%p: RLS request created for key %s",
1653
+ lb_policy_.get(), this, key_.ToString().c_str());
1654
+ }
1655
+ GRPC_CLOSURE_INIT(&call_complete_cb_, OnRlsCallComplete, this, nullptr);
1656
+ ExecCtx::Run(
1657
+ DEBUG_LOCATION,
1658
+ GRPC_CLOSURE_INIT(&call_start_cb_, StartCall,
1659
+ Ref(DEBUG_LOCATION, "StartCall").release(), nullptr),
1660
+ GRPC_ERROR_NONE);
1661
+ }
1662
+
1663
+ RlsLb::RlsRequest::~RlsRequest() { GPR_ASSERT(call_ == nullptr); }
1664
+
1665
+ void RlsLb::RlsRequest::Orphan() {
1666
+ if (call_ != nullptr) {
1667
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_rls_trace)) {
1668
+ gpr_log(GPR_INFO, "[rlslb %p] rls_request=%p %s: cancelling RLS call",
1669
+ lb_policy_.get(), this, key_.ToString().c_str());
1670
+ }
1671
+ grpc_call_cancel_internal(call_);
1672
+ }
1673
+ Unref(DEBUG_LOCATION, "Orphan");
1674
+ }
1675
+
1676
+ void RlsLb::RlsRequest::StartCall(void* arg, grpc_error_handle /*error*/) {
1677
+ auto* request = static_cast<RlsRequest*>(arg);
1678
+ request->lb_policy_->work_serializer()->Run(
1679
+ [request]() {
1680
+ request->StartCallLocked();
1681
+ request->Unref(DEBUG_LOCATION, "StartCall");
1682
+ },
1683
+ DEBUG_LOCATION);
1684
+ }
1685
+
1686
+ void RlsLb::RlsRequest::StartCallLocked() {
1687
+ {
1688
+ MutexLock lock(&lb_policy_->mu_);
1689
+ if (lb_policy_->is_shutdown_) return;
1690
+ }
1691
+ Timestamp now = ExecCtx::Get()->Now();
1692
+ deadline_ = now + lb_policy_->config_->lookup_service_timeout();
1693
+ grpc_metadata_array_init(&recv_initial_metadata_);
1694
+ grpc_metadata_array_init(&recv_trailing_metadata_);
1695
+ call_ = grpc_channel_create_pollset_set_call(
1696
+ rls_channel_->channel(), nullptr, GRPC_PROPAGATE_DEFAULTS,
1697
+ lb_policy_->interested_parties(),
1698
+ grpc_slice_from_static_string(kRlsRequestPath), nullptr, deadline_,
1699
+ nullptr);
1700
+ grpc_op ops[6];
1701
+ memset(ops, 0, sizeof(ops));
1702
+ grpc_op* op = ops;
1703
+ op->op = GRPC_OP_SEND_INITIAL_METADATA;
1704
+ ++op;
1705
+ op->op = GRPC_OP_SEND_MESSAGE;
1706
+ send_message_ = MakeRequestProto();
1707
+ op->data.send_message.send_message = send_message_;
1708
+ ++op;
1709
+ op->op = GRPC_OP_SEND_CLOSE_FROM_CLIENT;
1710
+ ++op;
1711
+ op->op = GRPC_OP_RECV_INITIAL_METADATA;
1712
+ op->data.recv_initial_metadata.recv_initial_metadata =
1713
+ &recv_initial_metadata_;
1714
+ ++op;
1715
+ op->op = GRPC_OP_RECV_MESSAGE;
1716
+ op->data.recv_message.recv_message = &recv_message_;
1717
+ ++op;
1718
+ op->op = GRPC_OP_RECV_STATUS_ON_CLIENT;
1719
+ op->data.recv_status_on_client.trailing_metadata = &recv_trailing_metadata_;
1720
+ op->data.recv_status_on_client.status = &status_recv_;
1721
+ op->data.recv_status_on_client.status_details = &status_details_recv_;
1722
+ ++op;
1723
+ Ref(DEBUG_LOCATION, "OnRlsCallComplete").release();
1724
+ auto call_error = grpc_call_start_batch_and_execute(
1725
+ call_, ops, static_cast<size_t>(op - ops), &call_complete_cb_);
1726
+ GPR_ASSERT(call_error == GRPC_CALL_OK);
1727
+ }
1728
+
1729
+ void RlsLb::RlsRequest::OnRlsCallComplete(void* arg, grpc_error_handle error) {
1730
+ auto* request = static_cast<RlsRequest*>(arg);
1731
+ (void)GRPC_ERROR_REF(error);
1732
+ request->lb_policy_->work_serializer()->Run(
1733
+ [request, error]() {
1734
+ request->OnRlsCallCompleteLocked(error);
1735
+ request->Unref(DEBUG_LOCATION, "OnRlsCallComplete");
1736
+ },
1737
+ DEBUG_LOCATION);
1738
+ }
1739
+
1740
+ void RlsLb::RlsRequest::OnRlsCallCompleteLocked(grpc_error_handle error) {
1741
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_rls_trace)) {
1742
+ std::string status_message(StringViewFromSlice(status_details_recv_));
1743
+ gpr_log(GPR_INFO,
1744
+ "[rlslb %p] rls_request=%p %s, error=%s, status={%d, %s} RLS call "
1745
+ "response received",
1746
+ lb_policy_.get(), this, key_.ToString().c_str(),
1747
+ grpc_error_std_string(error).c_str(), status_recv_,
1748
+ status_message.c_str());
1749
+ }
1750
+ // Parse response.
1751
+ ResponseInfo response;
1752
+ if (error != GRPC_ERROR_NONE) {
1753
+ grpc_status_code code;
1754
+ std::string message;
1755
+ grpc_error_get_status(error, deadline_, &code, &message,
1756
+ /*http_error=*/nullptr, /*error_string=*/nullptr);
1757
+ response.status =
1758
+ absl::Status(static_cast<absl::StatusCode>(code), message);
1759
+ } else if (status_recv_ != GRPC_STATUS_OK) {
1760
+ response.status = absl::Status(static_cast<absl::StatusCode>(status_recv_),
1761
+ StringViewFromSlice(status_details_recv_));
1762
+ } else {
1763
+ response = ParseResponseProto();
1764
+ }
1765
+ // Clean up call state.
1766
+ grpc_byte_buffer_destroy(send_message_);
1767
+ grpc_byte_buffer_destroy(recv_message_);
1768
+ grpc_metadata_array_destroy(&recv_initial_metadata_);
1769
+ grpc_metadata_array_destroy(&recv_trailing_metadata_);
1770
+ grpc_slice_unref_internal(status_details_recv_);
1771
+ grpc_call_unref(call_);
1772
+ call_ = nullptr;
1773
+ // Return result to cache.
1774
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_rls_trace)) {
1775
+ gpr_log(GPR_INFO, "[rlslb %p] rls_request=%p %s: response info: %s",
1776
+ lb_policy_.get(), this, key_.ToString().c_str(),
1777
+ response.ToString().c_str());
1778
+ }
1779
+ std::vector<ChildPolicyWrapper*> child_policies_to_finish_update;
1780
+ {
1781
+ MutexLock lock(&lb_policy_->mu_);
1782
+ if (lb_policy_->is_shutdown_) return;
1783
+ rls_channel_->ReportResponseLocked(response.status.ok());
1784
+ Cache::Entry* cache_entry = lb_policy_->cache_.FindOrInsert(key_);
1785
+ child_policies_to_finish_update = cache_entry->OnRlsResponseLocked(
1786
+ std::move(response), std::move(backoff_state_));
1787
+ lb_policy_->request_map_.erase(key_);
1788
+ }
1789
+ // Now that we've released the lock, finish the update on any newly
1790
+ // created child policies.
1791
+ for (ChildPolicyWrapper* child : child_policies_to_finish_update) {
1792
+ child->MaybeFinishUpdate();
1793
+ }
1794
+ }
1795
+
1796
+ grpc_byte_buffer* RlsLb::RlsRequest::MakeRequestProto() {
1797
+ upb::Arena arena;
1798
+ grpc_lookup_v1_RouteLookupRequest* req =
1799
+ grpc_lookup_v1_RouteLookupRequest_new(arena.ptr());
1800
+ grpc_lookup_v1_RouteLookupRequest_set_target_type(
1801
+ req, upb_StringView_FromDataAndSize(kGrpc, sizeof(kGrpc) - 1));
1802
+ for (const auto& kv : key_.key_map) {
1803
+ grpc_lookup_v1_RouteLookupRequest_key_map_set(
1804
+ req, upb_StringView_FromDataAndSize(kv.first.data(), kv.first.size()),
1805
+ upb_StringView_FromDataAndSize(kv.second.data(), kv.second.size()),
1806
+ arena.ptr());
1807
+ }
1808
+ grpc_lookup_v1_RouteLookupRequest_set_reason(req, reason_);
1809
+ if (!stale_header_data_.empty()) {
1810
+ grpc_lookup_v1_RouteLookupRequest_set_stale_header_data(
1811
+ req, upb_StringView_FromDataAndSize(stale_header_data_.data(),
1812
+ stale_header_data_.size()));
1813
+ }
1814
+ size_t len;
1815
+ char* buf =
1816
+ grpc_lookup_v1_RouteLookupRequest_serialize(req, arena.ptr(), &len);
1817
+ grpc_slice send_slice = grpc_slice_from_copied_buffer(buf, len);
1818
+ grpc_byte_buffer* byte_buffer = grpc_raw_byte_buffer_create(&send_slice, 1);
1819
+ grpc_slice_unref_internal(send_slice);
1820
+ return byte_buffer;
1821
+ }
1822
+
1823
+ RlsLb::ResponseInfo RlsLb::RlsRequest::ParseResponseProto() {
1824
+ ResponseInfo response_info;
1825
+ upb::Arena arena;
1826
+ grpc_byte_buffer_reader bbr;
1827
+ grpc_byte_buffer_reader_init(&bbr, recv_message_);
1828
+ grpc_slice recv_slice = grpc_byte_buffer_reader_readall(&bbr);
1829
+ grpc_byte_buffer_reader_destroy(&bbr);
1830
+ grpc_lookup_v1_RouteLookupResponse* response =
1831
+ grpc_lookup_v1_RouteLookupResponse_parse(
1832
+ reinterpret_cast<const char*>(GRPC_SLICE_START_PTR(recv_slice)),
1833
+ GRPC_SLICE_LENGTH(recv_slice), arena.ptr());
1834
+ grpc_slice_unref_internal(recv_slice);
1835
+ if (response == nullptr) {
1836
+ response_info.status = absl::InternalError("cannot parse RLS response");
1837
+ return response_info;
1838
+ }
1839
+ size_t num_targets;
1840
+ const upb_StringView* targets_strview =
1841
+ grpc_lookup_v1_RouteLookupResponse_targets(response, &num_targets);
1842
+ if (num_targets == 0) {
1843
+ response_info.status =
1844
+ absl::InvalidArgumentError("RLS response has no target entry");
1845
+ return response_info;
1846
+ }
1847
+ response_info.targets.reserve(num_targets);
1848
+ for (size_t i = 0; i < num_targets; ++i) {
1849
+ response_info.targets.emplace_back(targets_strview[i].data,
1850
+ targets_strview[i].size);
1851
+ }
1852
+ upb_StringView header_data_strview =
1853
+ grpc_lookup_v1_RouteLookupResponse_header_data(response);
1854
+ response_info.header_data =
1855
+ std::string(header_data_strview.data, header_data_strview.size);
1856
+ return response_info;
1857
+ }
1858
+
1859
+ //
1860
+ // RlsLb
1861
+ //
1862
+
1863
+ std::string GetServerUri(const grpc_channel_args* args) {
1864
+ const char* server_uri_str =
1865
+ grpc_channel_args_find_string(args, GRPC_ARG_SERVER_URI);
1866
+ GPR_ASSERT(server_uri_str != nullptr);
1867
+ absl::StatusOr<URI> uri = URI::Parse(server_uri_str);
1868
+ GPR_ASSERT(uri.ok());
1869
+ return std::string(absl::StripPrefix(uri->path(), "/"));
1870
+ }
1871
+
1872
+ RlsLb::RlsLb(Args args)
1873
+ : LoadBalancingPolicy(std::move(args)),
1874
+ server_name_(GetServerUri(args.args)),
1875
+ cache_(this) {
1876
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_rls_trace)) {
1877
+ gpr_log(GPR_INFO, "[rlslb %p] policy created", this);
1878
+ }
1879
+ }
1880
+
1881
+ void RlsLb::UpdateLocked(UpdateArgs args) {
1882
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_rls_trace)) {
1883
+ gpr_log(GPR_INFO, "[rlslb %p] policy updated", this);
1884
+ }
1885
+ // Swap out config.
1886
+ RefCountedPtr<RlsLbConfig> old_config = std::move(config_);
1887
+ config_ = std::move(args.config);
1888
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_rls_trace) &&
1889
+ (old_config == nullptr ||
1890
+ old_config->child_policy_config() != config_->child_policy_config())) {
1891
+ gpr_log(GPR_INFO, "[rlslb %p] updated child policy config: %s", this,
1892
+ config_->child_policy_config().Dump().c_str());
1893
+ }
1894
+ // Swap out addresses.
1895
+ // If the new address list is an error and we have an existing address list,
1896
+ // stick with the existing addresses.
1897
+ absl::StatusOr<ServerAddressList> old_addresses;
1898
+ if (args.addresses.ok()) {
1899
+ old_addresses = std::move(addresses_);
1900
+ addresses_ = std::move(args.addresses);
1901
+ } else {
1902
+ old_addresses = addresses_;
1903
+ }
1904
+ // Swap out channel args.
1905
+ grpc_channel_args_destroy(channel_args_);
1906
+ channel_args_ = grpc_channel_args_copy(args.args);
1907
+ // Determine whether we need to update all child policies.
1908
+ bool update_child_policies =
1909
+ old_config == nullptr ||
1910
+ old_config->child_policy_config() != config_->child_policy_config() ||
1911
+ old_addresses != addresses_ ||
1912
+ grpc_channel_args_compare(args.args, channel_args_) != 0;
1913
+ // If default target changes, swap out child policy.
1914
+ bool created_default_child = false;
1915
+ if (old_config == nullptr ||
1916
+ config_->default_target() != old_config->default_target()) {
1917
+ if (config_->default_target().empty()) {
1918
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_rls_trace)) {
1919
+ gpr_log(GPR_INFO, "[rlslb %p] unsetting default target", this);
1920
+ }
1921
+ default_child_policy_.reset();
1922
+ } else {
1923
+ auto it = child_policy_map_.find(config_->default_target());
1924
+ if (it == child_policy_map_.end()) {
1925
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_rls_trace)) {
1926
+ gpr_log(GPR_INFO, "[rlslb %p] creating new default target", this);
1927
+ }
1928
+ default_child_policy_ = MakeRefCounted<ChildPolicyWrapper>(
1929
+ Ref(DEBUG_LOCATION, "ChildPolicyWrapper"),
1930
+ config_->default_target());
1931
+ created_default_child = true;
1932
+ } else {
1933
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_rls_trace)) {
1934
+ gpr_log(GPR_INFO,
1935
+ "[rlslb %p] using existing child for default target", this);
1936
+ }
1937
+ default_child_policy_ =
1938
+ it->second->Ref(DEBUG_LOCATION, "DefaultChildPolicy");
1939
+ }
1940
+ }
1941
+ }
1942
+ // Now grab the lock to swap out the state it guards.
1943
+ {
1944
+ MutexLock lock(&mu_);
1945
+ // Swap out RLS channel if needed.
1946
+ if (old_config == nullptr ||
1947
+ config_->lookup_service() != old_config->lookup_service()) {
1948
+ rls_channel_ =
1949
+ MakeOrphanable<RlsChannel>(Ref(DEBUG_LOCATION, "RlsChannel"));
1950
+ }
1951
+ // Resize cache if needed.
1952
+ if (old_config == nullptr ||
1953
+ config_->cache_size_bytes() != old_config->cache_size_bytes()) {
1954
+ cache_.Resize(config_->cache_size_bytes());
1955
+ }
1956
+ // Start update of child policies if needed.
1957
+ if (update_child_policies) {
1958
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_rls_trace)) {
1959
+ gpr_log(GPR_INFO, "[rlslb %p] starting child policy updates", this);
1960
+ }
1961
+ for (auto& p : child_policy_map_) {
1962
+ p.second->StartUpdate();
1963
+ }
1964
+ } else if (created_default_child) {
1965
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_rls_trace)) {
1966
+ gpr_log(GPR_INFO, "[rlslb %p] starting default child policy update",
1967
+ this);
1968
+ }
1969
+ default_child_policy_->StartUpdate();
1970
+ }
1971
+ }
1972
+ // Now that we've released the lock, finish update of child policies.
1973
+ if (update_child_policies) {
1974
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_rls_trace)) {
1975
+ gpr_log(GPR_INFO, "[rlslb %p] finishing child policy updates", this);
1976
+ }
1977
+ for (auto& p : child_policy_map_) {
1978
+ p.second->MaybeFinishUpdate();
1979
+ }
1980
+ } else if (created_default_child) {
1981
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_rls_trace)) {
1982
+ gpr_log(GPR_INFO, "[rlslb %p] finishing default child policy update",
1983
+ this);
1984
+ }
1985
+ default_child_policy_->MaybeFinishUpdate();
1986
+ }
1987
+ // In principle, we need to update the picker here only if the config
1988
+ // fields used by the picker have changed. However, it seems fragile
1989
+ // to check individual fields, since the picker logic could change in
1990
+ // the future to use additional config fields, and we might not
1991
+ // remember to update the code here. So for now, we just unconditionally
1992
+ // update the picker here, even though it's probably redundant.
1993
+ UpdatePickerLocked();
1994
+ }
1995
+
1996
+ void RlsLb::ExitIdleLocked() {
1997
+ MutexLock lock(&mu_);
1998
+ for (auto& child_entry : child_policy_map_) {
1999
+ child_entry.second->ExitIdleLocked();
2000
+ }
2001
+ }
2002
+
2003
+ void RlsLb::ResetBackoffLocked() {
2004
+ {
2005
+ MutexLock lock(&mu_);
2006
+ rls_channel_->ResetBackoff();
2007
+ cache_.ResetAllBackoff();
2008
+ }
2009
+ for (auto& child : child_policy_map_) {
2010
+ child.second->ResetBackoffLocked();
2011
+ }
2012
+ }
2013
+
2014
+ void RlsLb::ShutdownLocked() {
2015
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_rls_trace)) {
2016
+ gpr_log(GPR_INFO, "[rlslb %p] policy shutdown", this);
2017
+ }
2018
+ MutexLock lock(&mu_);
2019
+ is_shutdown_ = true;
2020
+ config_.reset(DEBUG_LOCATION, "ShutdownLocked");
2021
+ if (channel_args_ != nullptr) {
2022
+ grpc_channel_args_destroy(channel_args_);
2023
+ }
2024
+ cache_.Shutdown();
2025
+ request_map_.clear();
2026
+ rls_channel_.reset();
2027
+ default_child_policy_.reset();
2028
+ }
2029
+
2030
+ void RlsLb::UpdatePickerAsync() {
2031
+ // Run via the ExecCtx, since the caller may be holding the lock, and
2032
+ // we don't want to be doing that when we hop into the WorkSerializer,
2033
+ // in case the WorkSerializer callback happens to run inline.
2034
+ ExecCtx::Run(
2035
+ DEBUG_LOCATION,
2036
+ GRPC_CLOSURE_CREATE(UpdatePickerCallback,
2037
+ Ref(DEBUG_LOCATION, "UpdatePickerCallback").release(),
2038
+ grpc_schedule_on_exec_ctx),
2039
+ GRPC_ERROR_NONE);
2040
+ }
2041
+
2042
+ void RlsLb::UpdatePickerCallback(void* arg, grpc_error_handle /*error*/) {
2043
+ auto* rls_lb = static_cast<RlsLb*>(arg);
2044
+ rls_lb->work_serializer()->Run(
2045
+ [rls_lb]() {
2046
+ RefCountedPtr<RlsLb> lb_policy(rls_lb);
2047
+ lb_policy->UpdatePickerLocked();
2048
+ lb_policy.reset(DEBUG_LOCATION, "UpdatePickerCallback");
2049
+ },
2050
+ DEBUG_LOCATION);
2051
+ }
2052
+
2053
+ void RlsLb::UpdatePickerLocked() {
2054
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_rls_trace)) {
2055
+ gpr_log(GPR_INFO, "[rlslb %p] updating picker", this);
2056
+ }
2057
+ grpc_connectivity_state state = GRPC_CHANNEL_IDLE;
2058
+ if (!child_policy_map_.empty()) {
2059
+ state = GRPC_CHANNEL_TRANSIENT_FAILURE;
2060
+ int num_idle = 0;
2061
+ int num_connecting = 0;
2062
+ {
2063
+ MutexLock lock(&mu_);
2064
+ if (is_shutdown_) return;
2065
+ for (auto& p : child_policy_map_) {
2066
+ grpc_connectivity_state child_state = p.second->connectivity_state();
2067
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_rls_trace)) {
2068
+ gpr_log(GPR_INFO, "[rlslb %p] target %s in state %s", this,
2069
+ p.second->target().c_str(),
2070
+ ConnectivityStateName(child_state));
2071
+ }
2072
+ if (child_state == GRPC_CHANNEL_READY) {
2073
+ state = GRPC_CHANNEL_READY;
2074
+ break;
2075
+ } else if (child_state == GRPC_CHANNEL_CONNECTING) {
2076
+ ++num_connecting;
2077
+ } else if (child_state == GRPC_CHANNEL_IDLE) {
2078
+ ++num_idle;
2079
+ }
2080
+ }
2081
+ if (state != GRPC_CHANNEL_READY) {
2082
+ if (num_connecting > 0) {
2083
+ state = GRPC_CHANNEL_CONNECTING;
2084
+ } else if (num_idle > 0) {
2085
+ state = GRPC_CHANNEL_IDLE;
2086
+ }
2087
+ }
2088
+ }
2089
+ }
2090
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_rls_trace)) {
2091
+ gpr_log(GPR_INFO, "[rlslb %p] reporting state %s", this,
2092
+ ConnectivityStateName(state));
2093
+ }
2094
+ absl::Status status;
2095
+ if (state == GRPC_CHANNEL_TRANSIENT_FAILURE) {
2096
+ status = absl::UnavailableError("no children available");
2097
+ }
2098
+ channel_control_helper()->UpdateState(
2099
+ state, status, absl::make_unique<Picker>(Ref(DEBUG_LOCATION, "Picker")));
2100
+ }
2101
+
2102
+ //
2103
+ // RlsLbFactory
2104
+ //
2105
+
2106
+ grpc_error_handle ParseJsonHeaders(size_t idx, const Json& json,
2107
+ std::string* key,
2108
+ std::vector<std::string>* headers) {
2109
+ if (json.type() != Json::Type::OBJECT) {
2110
+ return GRPC_ERROR_CREATE_FROM_CPP_STRING(absl::StrCat(
2111
+ "field:headers index:", idx, " error:type should be OBJECT"));
2112
+ }
2113
+ std::vector<grpc_error_handle> error_list;
2114
+ // requiredMatch must not be present.
2115
+ if (json.object_value().find("requiredMatch") != json.object_value().end()) {
2116
+ error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
2117
+ "field:requiredMatch error:must not be present"));
2118
+ }
2119
+ // Find key.
2120
+ if (ParseJsonObjectField(json.object_value(), "key", key, &error_list) &&
2121
+ key->empty()) {
2122
+ error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
2123
+ "field:key error:must be non-empty"));
2124
+ }
2125
+ // Find headers.
2126
+ const Json::Array* headers_json = nullptr;
2127
+ ParseJsonObjectField(json.object_value(), "names", &headers_json,
2128
+ &error_list);
2129
+ if (headers_json != nullptr) {
2130
+ if (headers_json->empty()) {
2131
+ error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
2132
+ "field:names error:list is empty"));
2133
+ } else {
2134
+ size_t name_idx = 0;
2135
+ for (const Json& name_json : *headers_json) {
2136
+ if (name_json.type() != Json::Type::STRING) {
2137
+ error_list.push_back(GRPC_ERROR_CREATE_FROM_CPP_STRING(absl::StrCat(
2138
+ "field:names index:", name_idx, " error:type should be STRING")));
2139
+ } else if (name_json.string_value().empty()) {
2140
+ error_list.push_back(GRPC_ERROR_CREATE_FROM_CPP_STRING(
2141
+ absl::StrCat("field:names index:", name_idx,
2142
+ " error:header name must be non-empty")));
2143
+ } else {
2144
+ headers->push_back(name_json.string_value());
2145
+ }
2146
+ ++name_idx;
2147
+ }
2148
+ }
2149
+ }
2150
+ return GRPC_ERROR_CREATE_FROM_VECTOR_AND_CPP_STRING(
2151
+ absl::StrCat("field:headers index:", idx), &error_list);
2152
+ }
2153
+
2154
+ std::string ParseJsonMethodName(size_t idx, const Json& json,
2155
+ grpc_error_handle* error) {
2156
+ if (json.type() != Json::Type::OBJECT) {
2157
+ *error = GRPC_ERROR_CREATE_FROM_CPP_STRING(absl::StrCat(
2158
+ "field:names index:", idx, " error:type should be OBJECT"));
2159
+ return "";
2160
+ }
2161
+ std::vector<grpc_error_handle> error_list;
2162
+ // Find service name.
2163
+ absl::string_view service_name;
2164
+ ParseJsonObjectField(json.object_value(), "service", &service_name,
2165
+ &error_list);
2166
+ // Find method name.
2167
+ absl::string_view method_name;
2168
+ ParseJsonObjectField(json.object_value(), "method", &method_name, &error_list,
2169
+ /*required=*/false);
2170
+ // Return error, if any.
2171
+ *error = GRPC_ERROR_CREATE_FROM_VECTOR_AND_CPP_STRING(
2172
+ absl::StrCat("field:names index:", idx), &error_list);
2173
+ // Construct path.
2174
+ return absl::StrCat("/", service_name, "/", method_name);
2175
+ }
2176
+
2177
+ grpc_error_handle ParseGrpcKeybuilder(
2178
+ size_t idx, const Json& json, RlsLbConfig::KeyBuilderMap* key_builder_map) {
2179
+ if (json.type() != Json::Type::OBJECT) {
2180
+ return GRPC_ERROR_CREATE_FROM_CPP_STRING(absl::StrCat(
2181
+ "field:grpc_keybuilders index:", idx, " error:type should be OBJECT"));
2182
+ }
2183
+ std::vector<grpc_error_handle> error_list;
2184
+ // Parse names.
2185
+ std::set<std::string> names;
2186
+ const Json::Array* names_array = nullptr;
2187
+ if (ParseJsonObjectField(json.object_value(), "names", &names_array,
2188
+ &error_list)) {
2189
+ if (names_array->empty()) {
2190
+ error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
2191
+ "field:names error:list is empty"));
2192
+ } else {
2193
+ size_t name_idx = 0;
2194
+ for (const Json& name_json : *names_array) {
2195
+ grpc_error_handle child_error = GRPC_ERROR_NONE;
2196
+ std::string name =
2197
+ ParseJsonMethodName(name_idx++, name_json, &child_error);
2198
+ if (child_error != GRPC_ERROR_NONE) {
2199
+ error_list.push_back(child_error);
2200
+ } else {
2201
+ bool inserted = names.insert(name).second;
2202
+ if (!inserted) {
2203
+ error_list.push_back(GRPC_ERROR_CREATE_FROM_CPP_STRING(
2204
+ absl::StrCat("field:names error:duplicate entry for ", name)));
2205
+ }
2206
+ }
2207
+ }
2208
+ }
2209
+ }
2210
+ // Helper function to check for duplicate keys.
2211
+ std::set<std::string> all_keys;
2212
+ auto duplicate_key_check_func = [&all_keys,
2213
+ &error_list](const std::string& key) {
2214
+ auto it = all_keys.find(key);
2215
+ if (it != all_keys.end()) {
2216
+ error_list.push_back(GRPC_ERROR_CREATE_FROM_CPP_STRING(
2217
+ absl::StrCat("key \"", key, "\" listed multiple times")));
2218
+ } else {
2219
+ all_keys.insert(key);
2220
+ }
2221
+ };
2222
+ // Parse headers.
2223
+ RlsLbConfig::KeyBuilder key_builder;
2224
+ const Json::Array* headers_array = nullptr;
2225
+ ParseJsonObjectField(json.object_value(), "headers", &headers_array,
2226
+ &error_list, /*required=*/false);
2227
+ if (headers_array != nullptr) {
2228
+ size_t header_idx = 0;
2229
+ for (const Json& header_json : *headers_array) {
2230
+ std::string key;
2231
+ std::vector<std::string> headers;
2232
+ grpc_error_handle child_error =
2233
+ ParseJsonHeaders(header_idx++, header_json, &key, &headers);
2234
+ if (child_error != GRPC_ERROR_NONE) {
2235
+ error_list.push_back(child_error);
2236
+ } else {
2237
+ duplicate_key_check_func(key);
2238
+ key_builder.header_keys.emplace(key, std::move(headers));
2239
+ }
2240
+ }
2241
+ }
2242
+ // Parse extraKeys.
2243
+ const Json::Object* extra_keys = nullptr;
2244
+ ParseJsonObjectField(json.object_value(), "extraKeys", &extra_keys,
2245
+ &error_list, /*required=*/false);
2246
+ if (extra_keys != nullptr) {
2247
+ std::vector<grpc_error_handle> extra_keys_errors;
2248
+ if (ParseJsonObjectField(*extra_keys, "host", &key_builder.host_key,
2249
+ &extra_keys_errors, /*required=*/false) &&
2250
+ key_builder.host_key.empty()) {
2251
+ extra_keys_errors.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
2252
+ "field:host error:must be non-empty"));
2253
+ }
2254
+ if (!key_builder.host_key.empty()) {
2255
+ duplicate_key_check_func(key_builder.host_key);
2256
+ }
2257
+ if (ParseJsonObjectField(*extra_keys, "service", &key_builder.service_key,
2258
+ &extra_keys_errors, /*required=*/false) &&
2259
+ key_builder.service_key.empty()) {
2260
+ extra_keys_errors.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
2261
+ "field:service error:must be non-empty"));
2262
+ }
2263
+ if (!key_builder.service_key.empty()) {
2264
+ duplicate_key_check_func(key_builder.service_key);
2265
+ }
2266
+ if (ParseJsonObjectField(*extra_keys, "method", &key_builder.method_key,
2267
+ &extra_keys_errors, /*required=*/false) &&
2268
+ key_builder.method_key.empty()) {
2269
+ extra_keys_errors.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
2270
+ "field:method error:must be non-empty"));
2271
+ }
2272
+ if (!key_builder.method_key.empty()) {
2273
+ duplicate_key_check_func(key_builder.method_key);
2274
+ }
2275
+ if (!extra_keys_errors.empty()) {
2276
+ error_list.push_back(
2277
+ GRPC_ERROR_CREATE_FROM_VECTOR("field:extraKeys", &extra_keys_errors));
2278
+ }
2279
+ }
2280
+ // Parse constantKeys.
2281
+ const Json::Object* constant_keys = nullptr;
2282
+ ParseJsonObjectField(json.object_value(), "constantKeys", &constant_keys,
2283
+ &error_list, /*required=*/false);
2284
+ if (constant_keys != nullptr) {
2285
+ std::vector<grpc_error_handle> constant_keys_errors;
2286
+ for (const auto& p : *constant_keys) {
2287
+ const std::string& key = p.first;
2288
+ const Json& value = p.second;
2289
+ if (key.empty()) {
2290
+ constant_keys_errors.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
2291
+ "error:keys must be non-empty"));
2292
+ }
2293
+ duplicate_key_check_func(key);
2294
+ ExtractJsonString(value, key, &key_builder.constant_keys[key],
2295
+ &constant_keys_errors);
2296
+ }
2297
+ if (!constant_keys_errors.empty()) {
2298
+ error_list.push_back(GRPC_ERROR_CREATE_FROM_VECTOR(
2299
+ "field:constantKeys", &constant_keys_errors));
2300
+ }
2301
+ }
2302
+ // Insert key_builder into key_builder_map.
2303
+ for (const std::string& name : names) {
2304
+ bool inserted = key_builder_map->emplace(name, key_builder).second;
2305
+ if (!inserted) {
2306
+ error_list.push_back(GRPC_ERROR_CREATE_FROM_CPP_STRING(
2307
+ absl::StrCat("field:names error:duplicate entry for ", name)));
2308
+ }
2309
+ }
2310
+ return GRPC_ERROR_CREATE_FROM_VECTOR_AND_CPP_STRING(
2311
+ absl::StrCat("index:", idx), &error_list);
2312
+ }
2313
+
2314
+ RlsLbConfig::KeyBuilderMap ParseGrpcKeybuilders(
2315
+ const Json::Array& key_builder_list, grpc_error_handle* error) {
2316
+ RlsLbConfig::KeyBuilderMap key_builder_map;
2317
+ if (key_builder_list.empty()) {
2318
+ *error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
2319
+ "field:grpcKeybuilders error:list is empty");
2320
+ return key_builder_map;
2321
+ }
2322
+ std::vector<grpc_error_handle> error_list;
2323
+ size_t idx = 0;
2324
+ for (const Json& key_builder : key_builder_list) {
2325
+ grpc_error_handle child_error =
2326
+ ParseGrpcKeybuilder(idx++, key_builder, &key_builder_map);
2327
+ if (child_error != GRPC_ERROR_NONE) error_list.push_back(child_error);
2328
+ }
2329
+ *error = GRPC_ERROR_CREATE_FROM_VECTOR("field:grpcKeybuilders", &error_list);
2330
+ return key_builder_map;
2331
+ }
2332
+
2333
+ RlsLbConfig::RouteLookupConfig ParseRouteLookupConfig(
2334
+ const Json::Object& json, grpc_error_handle* error) {
2335
+ std::vector<grpc_error_handle> error_list;
2336
+ RlsLbConfig::RouteLookupConfig route_lookup_config;
2337
+ // Parse grpcKeybuilders.
2338
+ const Json::Array* keybuilder_list = nullptr;
2339
+ ParseJsonObjectField(json, "grpcKeybuilders", &keybuilder_list, &error_list);
2340
+ if (keybuilder_list != nullptr) {
2341
+ grpc_error_handle child_error = GRPC_ERROR_NONE;
2342
+ route_lookup_config.key_builder_map =
2343
+ ParseGrpcKeybuilders(*keybuilder_list, &child_error);
2344
+ if (child_error != GRPC_ERROR_NONE) error_list.push_back(child_error);
2345
+ }
2346
+ // Parse lookupService.
2347
+ if (ParseJsonObjectField(json, "lookupService",
2348
+ &route_lookup_config.lookup_service, &error_list)) {
2349
+ if (!CoreConfiguration::Get().resolver_registry().IsValidTarget(
2350
+ route_lookup_config.lookup_service)) {
2351
+ error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
2352
+ "field:lookupService error:must be valid gRPC target URI"));
2353
+ }
2354
+ }
2355
+ // Parse lookupServiceTimeout.
2356
+ route_lookup_config.lookup_service_timeout = kDefaultLookupServiceTimeout;
2357
+ ParseJsonObjectFieldAsDuration(json, "lookupServiceTimeout",
2358
+ &route_lookup_config.lookup_service_timeout,
2359
+ &error_list, /*required=*/false);
2360
+ // Parse maxAge.
2361
+ route_lookup_config.max_age = kMaxMaxAge;
2362
+ bool max_age_set = ParseJsonObjectFieldAsDuration(
2363
+ json, "maxAge", &route_lookup_config.max_age, &error_list,
2364
+ /*required=*/false);
2365
+ // Clamp maxAge to the max allowed value.
2366
+ if (route_lookup_config.max_age > kMaxMaxAge) {
2367
+ route_lookup_config.max_age = kMaxMaxAge;
2368
+ }
2369
+ // Parse staleAge.
2370
+ route_lookup_config.stale_age = kMaxMaxAge;
2371
+ bool stale_age_set = ParseJsonObjectFieldAsDuration(
2372
+ json, "staleAge", &route_lookup_config.stale_age, &error_list,
2373
+ /*required=*/false);
2374
+ // If staleAge is set, then maxAge must also be set.
2375
+ if (stale_age_set && !max_age_set) {
2376
+ error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
2377
+ "field:maxAge error:must be set if staleAge is set"));
2378
+ }
2379
+ // Ignore staleAge if greater than or equal to maxAge.
2380
+ if (route_lookup_config.stale_age >= route_lookup_config.max_age) {
2381
+ route_lookup_config.stale_age = route_lookup_config.max_age;
2382
+ }
2383
+ // Parse cacheSizeBytes.
2384
+ ParseJsonObjectField(json, "cacheSizeBytes",
2385
+ &route_lookup_config.cache_size_bytes, &error_list);
2386
+ if (route_lookup_config.cache_size_bytes <= 0) {
2387
+ error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
2388
+ "field:cacheSizeBytes error:must be greater than 0"));
2389
+ }
2390
+ // Clamp cacheSizeBytes to the max allowed value.
2391
+ if (route_lookup_config.cache_size_bytes > kMaxCacheSizeBytes) {
2392
+ route_lookup_config.cache_size_bytes = kMaxCacheSizeBytes;
2393
+ }
2394
+ // Parse defaultTarget.
2395
+ if (ParseJsonObjectField(json, "defaultTarget",
2396
+ &route_lookup_config.default_target, &error_list,
2397
+ /*required=*/false)) {
2398
+ if (route_lookup_config.default_target.empty()) {
2399
+ error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
2400
+ "field:defaultTarget error:must be non-empty if set"));
2401
+ }
2402
+ }
2403
+ *error =
2404
+ GRPC_ERROR_CREATE_FROM_VECTOR("field:routeLookupConfig", &error_list);
2405
+ return route_lookup_config;
2406
+ }
2407
+
2408
+ grpc_error_handle ValidateChildPolicyList(
2409
+ const Json& child_policy_list,
2410
+ const std::string& child_policy_config_target_field_name,
2411
+ const std::string& default_target, Json* child_policy_config,
2412
+ RefCountedPtr<LoadBalancingPolicy::Config>*
2413
+ default_child_policy_parsed_config) {
2414
+ // Add target to each entry in the config proto.
2415
+ *child_policy_config = child_policy_list;
2416
+ std::string target =
2417
+ default_target.empty() ? kFakeTargetFieldValue : default_target;
2418
+ grpc_error_handle error = InsertOrUpdateChildPolicyField(
2419
+ child_policy_config_target_field_name, target, child_policy_config);
2420
+ if (error != GRPC_ERROR_NONE) return error;
2421
+ // Parse the config.
2422
+ RefCountedPtr<LoadBalancingPolicy::Config> parsed_config =
2423
+ LoadBalancingPolicyRegistry::ParseLoadBalancingConfig(
2424
+ *child_policy_config, &error);
2425
+ if (error != GRPC_ERROR_NONE) return error;
2426
+ // Find the chosen config and return it in JSON form.
2427
+ // We remove all non-selected configs, and in the selected config, we leave
2428
+ // the target field in place, set to the default value. This slightly
2429
+ // optimizes what we need to do later when we update a child policy for a
2430
+ // given target.
2431
+ if (parsed_config != nullptr) {
2432
+ for (Json& config : *(child_policy_config->mutable_array())) {
2433
+ if (config.object_value().begin()->first == parsed_config->name()) {
2434
+ Json save_config = std::move(config);
2435
+ child_policy_config->mutable_array()->clear();
2436
+ child_policy_config->mutable_array()->push_back(std::move(save_config));
2437
+ break;
2438
+ }
2439
+ }
2440
+ }
2441
+ // If default target is set, return the parsed config.
2442
+ if (!default_target.empty()) {
2443
+ *default_child_policy_parsed_config = std::move(parsed_config);
2444
+ }
2445
+ return GRPC_ERROR_NONE;
2446
+ }
2447
+
2448
+ class RlsLbFactory : public LoadBalancingPolicyFactory {
2449
+ public:
2450
+ const char* name() const override { return kRls; }
2451
+
2452
+ OrphanablePtr<LoadBalancingPolicy> CreateLoadBalancingPolicy(
2453
+ LoadBalancingPolicy::Args args) const override {
2454
+ return MakeOrphanable<RlsLb>(std::move(args));
2455
+ }
2456
+
2457
+ RefCountedPtr<LoadBalancingPolicy::Config> ParseLoadBalancingConfig(
2458
+ const Json& config, grpc_error_handle* error) const override {
2459
+ std::vector<grpc_error_handle> error_list;
2460
+ // Parse routeLookupConfig.
2461
+ RlsLbConfig::RouteLookupConfig route_lookup_config;
2462
+ const Json::Object* route_lookup_config_json = nullptr;
2463
+ if (ParseJsonObjectField(config.object_value(), "routeLookupConfig",
2464
+ &route_lookup_config_json, &error_list)) {
2465
+ grpc_error_handle child_error = GRPC_ERROR_NONE;
2466
+ route_lookup_config =
2467
+ ParseRouteLookupConfig(*route_lookup_config_json, &child_error);
2468
+ if (child_error != GRPC_ERROR_NONE) error_list.push_back(child_error);
2469
+ }
2470
+ // Parse routeLookupChannelServiceConfig.
2471
+ std::string rls_channel_service_config;
2472
+ const Json::Object* rls_channel_service_config_json_obj = nullptr;
2473
+ if (ParseJsonObjectField(config.object_value(),
2474
+ "routeLookupChannelServiceConfig",
2475
+ &rls_channel_service_config_json_obj, &error_list,
2476
+ /*required=*/false)) {
2477
+ grpc_error_handle child_error = GRPC_ERROR_NONE;
2478
+ Json rls_channel_service_config_json(
2479
+ *rls_channel_service_config_json_obj);
2480
+ rls_channel_service_config = rls_channel_service_config_json.Dump();
2481
+ auto service_config = MakeRefCounted<ServiceConfigImpl>(
2482
+ /*args=*/nullptr, rls_channel_service_config,
2483
+ std::move(rls_channel_service_config_json), &child_error);
2484
+ if (child_error != GRPC_ERROR_NONE) {
2485
+ error_list.push_back(GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
2486
+ "field:routeLookupChannelServiceConfig", &child_error, 1));
2487
+ GRPC_ERROR_UNREF(child_error);
2488
+ }
2489
+ }
2490
+ // Parse childPolicyConfigTargetFieldName.
2491
+ std::string child_policy_config_target_field_name;
2492
+ if (ParseJsonObjectField(
2493
+ config.object_value(), "childPolicyConfigTargetFieldName",
2494
+ &child_policy_config_target_field_name, &error_list)) {
2495
+ if (child_policy_config_target_field_name.empty()) {
2496
+ error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
2497
+ "field:childPolicyConfigTargetFieldName error:must be non-empty"));
2498
+ }
2499
+ }
2500
+ // Parse childPolicy.
2501
+ Json child_policy_config;
2502
+ RefCountedPtr<LoadBalancingPolicy::Config>
2503
+ default_child_policy_parsed_config;
2504
+ auto it = config.object_value().find("childPolicy");
2505
+ if (it == config.object_value().end()) {
2506
+ error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
2507
+ "field:childPolicy error:does not exist."));
2508
+ } else if (it->second.type() != Json::Type::ARRAY) {
2509
+ error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
2510
+ "field:childPolicy error:type should be ARRAY"));
2511
+ } else {
2512
+ grpc_error_handle child_error = ValidateChildPolicyList(
2513
+ it->second, child_policy_config_target_field_name,
2514
+ route_lookup_config.default_target, &child_policy_config,
2515
+ &default_child_policy_parsed_config);
2516
+ if (child_error != GRPC_ERROR_NONE) {
2517
+ error_list.push_back(GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
2518
+ "field:childPolicy", &child_error, 1));
2519
+ GRPC_ERROR_UNREF(child_error);
2520
+ }
2521
+ }
2522
+ // Return result.
2523
+ *error = GRPC_ERROR_CREATE_FROM_VECTOR(
2524
+ "errors parsing RLS LB policy config", &error_list);
2525
+ return MakeRefCounted<RlsLbConfig>(
2526
+ std::move(route_lookup_config), std::move(rls_channel_service_config),
2527
+ std::move(child_policy_config),
2528
+ std::move(child_policy_config_target_field_name),
2529
+ std::move(default_child_policy_parsed_config));
2530
+ }
2531
+ };
2532
+
2533
+ } // namespace
2534
+
2535
+ void RlsLbPluginInit() {
2536
+ LoadBalancingPolicyRegistry::Builder::RegisterLoadBalancingPolicyFactory(
2537
+ absl::make_unique<RlsLbFactory>());
2538
+ }
2539
+
2540
+ void RlsLbPluginShutdown() {}
2541
+
2542
+ } // namespace grpc_core