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