grpc 1.42.0 → 1.52.0

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

Potentially problematic release.


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

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