grpc 1.47.0 → 1.53.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 (1777) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +386 -162
  3. data/include/grpc/byte_buffer.h +76 -1
  4. data/include/grpc/byte_buffer_reader.h +19 -1
  5. data/include/grpc/compression.h +2 -2
  6. data/include/grpc/event_engine/endpoint_config.h +11 -5
  7. data/include/grpc/event_engine/event_engine.h +87 -32
  8. data/include/grpc/event_engine/internal/memory_allocator_impl.h +1 -1
  9. data/include/grpc/event_engine/internal/slice_cast.h +67 -0
  10. data/include/grpc/event_engine/memory_allocator.h +1 -1
  11. data/include/grpc/event_engine/slice.h +24 -4
  12. data/include/grpc/event_engine/slice_buffer.h +52 -5
  13. data/include/grpc/fork.h +25 -1
  14. data/include/grpc/grpc.h +4 -14
  15. data/include/grpc/grpc_posix.h +1 -1
  16. data/include/grpc/impl/codegen/atm.h +3 -71
  17. data/include/grpc/impl/codegen/atm_gcc_atomic.h +3 -67
  18. data/include/grpc/impl/codegen/atm_gcc_sync.h +3 -61
  19. data/include/grpc/impl/codegen/atm_windows.h +3 -108
  20. data/include/grpc/impl/codegen/byte_buffer.h +4 -78
  21. data/include/grpc/impl/codegen/byte_buffer_reader.h +4 -19
  22. data/include/grpc/impl/codegen/compression_types.h +5 -83
  23. data/include/grpc/impl/codegen/connectivity_state.h +5 -21
  24. data/include/grpc/impl/codegen/fork.h +4 -25
  25. data/include/grpc/impl/codegen/gpr_types.h +4 -35
  26. data/include/grpc/impl/codegen/grpc_types.h +5 -791
  27. data/include/grpc/impl/codegen/log.h +3 -86
  28. data/include/grpc/impl/codegen/port_platform.h +3 -763
  29. data/include/grpc/impl/codegen/propagation_bits.h +3 -28
  30. data/include/grpc/impl/codegen/slice.h +3 -106
  31. data/include/grpc/impl/codegen/status.h +4 -131
  32. data/include/grpc/impl/codegen/sync.h +3 -42
  33. data/include/grpc/impl/codegen/sync_abseil.h +3 -12
  34. data/include/grpc/impl/codegen/sync_custom.h +3 -14
  35. data/include/grpc/impl/codegen/sync_generic.h +3 -25
  36. data/include/grpc/impl/codegen/sync_posix.h +3 -28
  37. data/include/grpc/impl/codegen/sync_windows.h +3 -16
  38. data/include/grpc/impl/compression_types.h +109 -0
  39. data/include/grpc/impl/connectivity_state.h +47 -0
  40. data/include/grpc/impl/grpc_types.h +827 -0
  41. data/include/grpc/impl/propagation_bits.h +54 -0
  42. data/include/grpc/impl/slice_type.h +112 -0
  43. data/include/grpc/load_reporting.h +1 -1
  44. data/include/grpc/module.modulemap +5 -1
  45. data/include/grpc/slice.h +1 -1
  46. data/include/grpc/status.h +131 -1
  47. data/include/grpc/support/atm.h +70 -1
  48. data/include/grpc/support/atm_gcc_atomic.h +59 -1
  49. data/include/grpc/support/atm_gcc_sync.h +58 -1
  50. data/include/grpc/support/atm_windows.h +105 -1
  51. data/include/grpc/support/log.h +87 -1
  52. data/include/grpc/support/log_windows.h +1 -1
  53. data/include/grpc/support/port_platform.h +767 -1
  54. data/include/grpc/support/string_util.h +1 -1
  55. data/include/grpc/support/sync.h +35 -2
  56. data/include/grpc/support/sync_abseil.h +11 -1
  57. data/include/grpc/support/sync_custom.h +13 -1
  58. data/include/grpc/support/sync_generic.h +24 -1
  59. data/include/grpc/support/sync_posix.h +27 -1
  60. data/include/grpc/support/sync_windows.h +15 -1
  61. data/include/grpc/support/time.h +31 -6
  62. data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +148 -0
  63. data/src/core/ext/filters/backend_metrics/backend_metric_filter.h +52 -0
  64. data/src/core/ext/filters/backend_metrics/backend_metric_provider.h +29 -0
  65. data/src/core/ext/filters/census/grpc_context.cc +19 -17
  66. data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +49 -31
  67. data/src/core/ext/filters/channel_idle/channel_idle_filter.h +22 -5
  68. data/src/core/ext/filters/channel_idle/idle_filter_state.h +6 -4
  69. data/src/core/ext/filters/client_channel/backend_metric.cc +2 -0
  70. data/src/core/ext/filters/client_channel/backend_metric.h +3 -3
  71. data/src/core/ext/filters/client_channel/backup_poller.cc +30 -30
  72. data/src/core/ext/filters/client_channel/backup_poller.h +24 -24
  73. data/src/core/ext/filters/client_channel/channel_connectivity.cc +52 -29
  74. data/src/core/ext/filters/client_channel/client_channel.cc +348 -441
  75. data/src/core/ext/filters/client_channel/client_channel.h +46 -24
  76. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +17 -19
  77. data/src/core/ext/filters/client_channel/client_channel_channelz.h +22 -22
  78. data/src/core/ext/filters/client_channel/client_channel_factory.cc +17 -46
  79. data/src/core/ext/filters/client_channel/client_channel_factory.h +5 -13
  80. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +18 -34
  81. data/src/core/ext/filters/client_channel/client_channel_service_config.cc +153 -0
  82. data/src/core/ext/filters/client_channel/{resolver_result_parsing.h → client_channel_service_config.h} +26 -26
  83. data/src/core/ext/filters/client_channel/config_selector.h +27 -23
  84. data/src/core/ext/filters/client_channel/connector.h +13 -10
  85. data/src/core/ext/filters/client_channel/dynamic_filters.cc +29 -54
  86. data/src/core/ext/filters/client_channel/dynamic_filters.h +10 -11
  87. data/src/core/ext/filters/client_channel/global_subchannel_pool.h +21 -21
  88. data/src/core/ext/filters/client_channel/health/health_check_client.cc +4 -5
  89. data/src/core/ext/filters/client_channel/health/health_check_client.h +3 -3
  90. data/src/core/ext/filters/client_channel/http_proxy.cc +90 -110
  91. data/src/core/ext/filters/client_channel/http_proxy.h +36 -32
  92. data/src/core/ext/filters/client_channel/lb_call_state_internal.h +39 -0
  93. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +4 -5
  94. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +3 -3
  95. data/src/core/ext/filters/client_channel/lb_policy/backend_metric_data.h +21 -21
  96. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +27 -18
  97. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +14 -14
  98. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +66 -132
  99. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +41 -24
  100. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +361 -366
  101. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +26 -27
  102. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +12 -4
  103. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +9 -7
  104. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +18 -20
  105. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +21 -22
  106. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +19 -19
  107. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +22 -24
  108. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +28 -98
  109. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.h +5 -5
  110. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric_internal.h +117 -0
  111. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +418 -327
  112. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +46 -6
  113. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +140 -154
  114. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +304 -387
  115. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +388 -363
  116. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +19 -11
  117. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +578 -628
  118. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +154 -138
  119. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +134 -115
  120. data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/static_stride_scheduler.cc +128 -0
  121. data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/static_stride_scheduler.h +71 -0
  122. data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/weighted_round_robin.cc +972 -0
  123. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +202 -224
  124. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +124 -139
  125. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_attributes.cc +42 -0
  126. data/src/core/ext/filters/client_channel/lb_policy/xds/{xds.h → xds_attributes.h} +15 -17
  127. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h +3 -3
  128. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +154 -258
  129. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +183 -214
  130. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +361 -411
  131. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.cc +819 -0
  132. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.h +67 -0
  133. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_wrr_locality.cc +369 -0
  134. data/src/core/ext/filters/client_channel/local_subchannel_pool.h +21 -21
  135. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +15 -18
  136. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +452 -175
  137. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +42 -43
  138. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +22 -23
  139. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +88 -83
  140. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +276 -202
  141. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +69 -57
  142. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_posix.cc +18 -18
  143. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +18 -18
  144. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.h +20 -21
  145. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +32 -23
  146. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +9 -21
  147. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +15 -4
  148. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +83 -57
  149. data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +123 -67
  150. data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +25 -17
  151. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +9 -19
  152. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +293 -286
  153. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +6 -4
  154. data/src/core/ext/filters/client_channel/retry_filter.cc +135 -172
  155. data/src/core/ext/filters/client_channel/retry_filter.h +4 -3
  156. data/src/core/ext/filters/client_channel/retry_service_config.cc +193 -224
  157. data/src/core/ext/filters/client_channel/retry_service_config.h +22 -28
  158. data/src/core/ext/filters/client_channel/retry_throttle.cc +27 -29
  159. data/src/core/ext/filters/client_channel/retry_throttle.h +29 -28
  160. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +13 -13
  161. data/src/core/ext/filters/client_channel/subchannel.cc +275 -323
  162. data/src/core/ext/filters/client_channel/subchannel.h +45 -75
  163. data/src/core/ext/filters/client_channel/subchannel_interface_internal.h +4 -4
  164. data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +6 -76
  165. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +37 -46
  166. data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +23 -111
  167. data/src/core/ext/filters/client_channel/subchannel_stream_client.h +8 -12
  168. data/src/core/ext/filters/deadline/deadline_filter.cc +90 -76
  169. data/src/core/ext/filters/deadline/deadline_filter.h +14 -12
  170. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +43 -18
  171. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +20 -11
  172. data/src/core/ext/filters/fault_injection/fault_injection_service_config_parser.cc +118 -0
  173. data/src/core/ext/filters/fault_injection/{service_config_parser.h → fault_injection_service_config_parser.h} +34 -13
  174. data/src/core/ext/filters/http/client/http_client_filter.cc +61 -48
  175. data/src/core/ext/filters/http/client/http_client_filter.h +29 -22
  176. data/src/core/ext/filters/http/client_authority_filter.cc +28 -28
  177. data/src/core/ext/filters/http/client_authority_filter.h +27 -24
  178. data/src/core/ext/filters/http/http_filters_plugin.cc +43 -51
  179. data/src/core/ext/filters/http/message_compress/compression_filter.cc +307 -0
  180. data/src/core/ext/filters/http/message_compress/compression_filter.h +139 -0
  181. data/src/core/ext/filters/http/server/http_server_filter.cc +63 -56
  182. data/src/core/ext/filters/http/server/http_server_filter.h +28 -23
  183. data/src/core/ext/filters/message_size/message_size_filter.cc +109 -123
  184. data/src/core/ext/filters/message_size/message_size_filter.h +34 -17
  185. data/src/core/ext/filters/rbac/rbac_filter.cc +28 -16
  186. data/src/core/ext/filters/rbac/rbac_filter.h +11 -3
  187. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +736 -523
  188. data/src/core/ext/filters/rbac/rbac_service_config_parser.h +18 -7
  189. data/src/core/ext/filters/server_config_selector/server_config_selector.h +20 -8
  190. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +28 -12
  191. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.h +4 -3
  192. data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +219 -0
  193. data/src/core/ext/filters/stateful_session/stateful_session_filter.h +66 -0
  194. data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.cc +82 -0
  195. data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.h +93 -0
  196. data/src/core/ext/transport/chttp2/alpn/alpn.cc +18 -18
  197. data/src/core/ext/transport/chttp2/alpn/alpn.h +24 -24
  198. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +109 -131
  199. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +30 -24
  200. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +167 -203
  201. data/src/core/ext/transport/chttp2/server/chttp2_server.h +25 -27
  202. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +22 -22
  203. data/src/core/ext/transport/chttp2/transport/bin_decoder.h +33 -33
  204. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +30 -30
  205. data/src/core/ext/transport/chttp2/transport/bin_encoder.h +29 -29
  206. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +714 -1060
  207. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +24 -24
  208. data/src/core/ext/transport/chttp2/transport/context_list.cc +19 -19
  209. data/src/core/ext/transport/chttp2/transport/context_list.h +28 -28
  210. data/src/core/ext/transport/chttp2/transport/decode_huff.cc +251 -0
  211. data/src/core/ext/transport/chttp2/transport/decode_huff.h +971 -0
  212. data/src/core/ext/transport/chttp2/transport/flow_control.cc +347 -301
  213. data/src/core/ext/transport/chttp2/transport/flow_control.h +245 -326
  214. data/src/core/ext/transport/chttp2/transport/frame.h +21 -21
  215. data/src/core/ext/transport/chttp2/transport/frame_data.cc +84 -239
  216. data/src/core/ext/transport/chttp2/transport/frame_data.h +36 -62
  217. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +38 -36
  218. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +20 -20
  219. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +27 -26
  220. data/src/core/ext/transport/chttp2/transport/frame_ping.h +22 -22
  221. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +30 -25
  222. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +21 -21
  223. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +35 -77
  224. data/src/core/ext/transport/chttp2/transport/frame_settings.h +22 -22
  225. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +31 -33
  226. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +21 -21
  227. data/src/core/ext/transport/chttp2/transport/hpack_constants.h +10 -4
  228. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +159 -208
  229. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +46 -61
  230. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +2 -2
  231. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +11 -5
  232. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +96 -542
  233. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +23 -23
  234. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +28 -38
  235. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +32 -27
  236. data/src/core/ext/transport/chttp2/transport/http2_settings.cc +21 -19
  237. data/src/core/ext/transport/chttp2/transport/http2_settings.h +39 -37
  238. data/src/core/ext/transport/chttp2/transport/http_trace.cc +19 -0
  239. data/src/core/ext/transport/chttp2/transport/http_trace.h +24 -0
  240. data/src/core/ext/transport/chttp2/transport/huffsyms.cc +20 -20
  241. data/src/core/ext/transport/chttp2/transport/huffsyms.h +21 -21
  242. data/src/core/ext/transport/chttp2/transport/internal.h +225 -296
  243. data/src/core/ext/transport/chttp2/transport/parsing.cc +333 -129
  244. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +19 -23
  245. data/src/core/ext/transport/chttp2/transport/stream_map.cc +23 -23
  246. data/src/core/ext/transport/chttp2/transport/stream_map.h +33 -33
  247. data/src/core/ext/transport/chttp2/transport/varint.cc +19 -20
  248. data/src/core/ext/transport/chttp2/transport/varint.h +37 -34
  249. data/src/core/ext/transport/chttp2/transport/writing.cc +85 -94
  250. data/src/core/ext/transport/inproc/inproc_plugin.cc +17 -18
  251. data/src/core/ext/transport/inproc/inproc_transport.cc +223 -273
  252. data/src/core/ext/transport/inproc/inproc_transport.h +23 -21
  253. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.c +5 -5
  254. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.h +30 -10
  255. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.c +6 -5
  256. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.h +33 -8
  257. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +8 -327
  258. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +83 -1723
  259. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.c +388 -0
  260. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.h +1953 -0
  261. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.c +2 -2
  262. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.h +12 -4
  263. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.c +6 -4
  264. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.h +33 -4
  265. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.c +1 -1
  266. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.h +6 -2
  267. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.c +1 -1
  268. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.h +6 -2
  269. data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.h +6 -2
  270. data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.h +12 -4
  271. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.c +1 -1
  272. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.h +6 -2
  273. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +1 -1
  274. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +7 -3
  275. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +14 -14
  276. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +90 -30
  277. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +25 -19
  278. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +168 -34
  279. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +3 -3
  280. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +18 -6
  281. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +35 -43
  282. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +195 -116
  283. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +1 -1
  284. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +6 -2
  285. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +1 -1
  286. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +6 -2
  287. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.c +11 -11
  288. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.h +84 -28
  289. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +35 -12
  290. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +179 -14
  291. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +1 -1
  292. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +6 -2
  293. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +25 -23
  294. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +156 -48
  295. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +7 -7
  296. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +42 -14
  297. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +1 -1
  298. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +6 -2
  299. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +1 -1
  300. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +6 -2
  301. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.c +2 -2
  302. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.h +12 -4
  303. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +12 -12
  304. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +78 -26
  305. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +23 -20
  306. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +137 -69
  307. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +1 -1
  308. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +6 -2
  309. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +23 -21
  310. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +132 -44
  311. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +1 -1
  312. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +6 -2
  313. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.c +2 -2
  314. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.h +12 -4
  315. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c +17 -2
  316. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +67 -2
  317. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +1 -1
  318. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +6 -2
  319. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.c +1 -1
  320. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.h +6 -2
  321. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +3 -3
  322. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +18 -6
  323. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +15 -9
  324. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +73 -18
  325. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +3 -3
  326. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +30 -10
  327. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +1 -1
  328. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +6 -2
  329. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +39 -13
  330. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +194 -15
  331. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +5 -5
  332. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +42 -14
  333. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +5 -3
  334. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +28 -2
  335. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +7 -4
  336. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +36 -4
  337. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.c +1 -1
  338. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.h +6 -2
  339. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +6 -6
  340. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +48 -16
  341. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +8 -8
  342. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +54 -18
  343. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +26 -11
  344. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +124 -14
  345. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +19 -15
  346. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +78 -69
  347. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +168 -82
  348. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +887 -166
  349. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +3 -3
  350. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +18 -6
  351. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.c +34 -15
  352. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.h +161 -22
  353. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.c +3 -2
  354. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.h +15 -2
  355. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.c +1 -1
  356. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.h +6 -2
  357. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +2 -2
  358. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +12 -4
  359. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.c +1 -1
  360. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.h +6 -2
  361. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.c +1 -1
  362. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.h +6 -2
  363. data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.c +47 -0
  364. data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.h +107 -0
  365. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.c +1 -1
  366. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.h +6 -2
  367. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.c +2 -2
  368. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.h +12 -4
  369. data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.c +1 -0
  370. data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.h +1 -0
  371. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.c +2 -2
  372. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.h +12 -4
  373. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.c +7 -6
  374. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.h +27 -14
  375. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +1 -1
  376. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +6 -2
  377. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +2 -2
  378. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +30 -10
  379. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +2 -2
  380. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +18 -6
  381. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.c +11 -4
  382. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +58 -4
  383. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +6 -3
  384. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +29 -2
  385. data/src/core/ext/upb-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.c +62 -0
  386. data/src/core/ext/upb-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.h +179 -0
  387. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +38 -27
  388. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +207 -52
  389. data/src/core/ext/upb-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb.c +46 -0
  390. data/src/core/ext/upb-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb.h +98 -0
  391. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/client_side_weighted_round_robin/v3/client_side_weighted_round_robin.upb.c +54 -0
  392. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/client_side_weighted_round_robin/v3/client_side_weighted_round_robin.upb.h +188 -0
  393. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/common/v3/common.upb.c +111 -0
  394. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/common/v3/common.upb.h +444 -0
  395. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.c +56 -0
  396. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h +192 -0
  397. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.c +46 -0
  398. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.h +98 -0
  399. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +10 -8
  400. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +66 -14
  401. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +3 -3
  402. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +18 -6
  403. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +13 -11
  404. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +73 -23
  405. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.c +2 -2
  406. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.h +12 -4
  407. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +1 -1
  408. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +6 -2
  409. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +133 -16
  410. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +656 -12
  411. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +2 -2
  412. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +12 -4
  413. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +5 -5
  414. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +30 -10
  415. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.c +1 -1
  416. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.h +6 -2
  417. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.c +4 -4
  418. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.h +24 -8
  419. data/src/core/ext/upb-generated/envoy/type/matcher/v3/filter_state.upb.c +47 -0
  420. data/src/core/ext/upb-generated/envoy/type/matcher/v3/filter_state.upb.h +113 -0
  421. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.c +4 -4
  422. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.h +24 -8
  423. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +2 -2
  424. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +12 -4
  425. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +1 -1
  426. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +6 -2
  427. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +1 -1
  428. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +6 -2
  429. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +1 -1
  430. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +6 -2
  431. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +3 -3
  432. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +18 -6
  433. data/src/core/ext/upb-generated/envoy/type/matcher/v3/status_code_input.upb.c +43 -0
  434. data/src/core/ext/upb-generated/envoy/type/matcher/v3/status_code_input.upb.h +114 -0
  435. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +1 -1
  436. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +12 -4
  437. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +2 -2
  438. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +12 -4
  439. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +3 -3
  440. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +18 -6
  441. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +7 -7
  442. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +42 -14
  443. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +5 -5
  444. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +30 -10
  445. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.c +3 -3
  446. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.h +18 -6
  447. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.c +1 -1
  448. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.h +6 -2
  449. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +12 -4
  450. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +2 -2
  451. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +18 -6
  452. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_strategy.upb.c +63 -0
  453. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_strategy.upb.h +202 -0
  454. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_unit.upb.h +3 -1
  455. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +1 -1
  456. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +6 -2
  457. data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.h +6 -2
  458. data/src/core/ext/upb-generated/google/api/annotations.upb.h +1 -1
  459. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +11 -11
  460. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +66 -22
  461. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +9 -9
  462. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +72 -24
  463. data/src/core/ext/upb-generated/google/api/http.upb.c +3 -3
  464. data/src/core/ext/upb-generated/google/api/http.upb.h +18 -6
  465. data/src/core/ext/upb-generated/google/api/httpbody.upb.c +1 -1
  466. data/src/core/ext/upb-generated/google/api/httpbody.upb.h +6 -2
  467. data/src/core/ext/upb-generated/google/protobuf/any.upb.c +1 -1
  468. data/src/core/ext/upb-generated/google/protobuf/any.upb.h +6 -2
  469. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +44 -43
  470. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +177 -55
  471. data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +1 -1
  472. data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +6 -2
  473. data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +1 -1
  474. data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +6 -2
  475. data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +2 -2
  476. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +18 -6
  477. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +1 -1
  478. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +6 -2
  479. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +6 -6
  480. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +54 -18
  481. data/src/core/ext/upb-generated/google/rpc/status.upb.c +1 -1
  482. data/src/core/ext/upb-generated/google/rpc/status.upb.h +6 -2
  483. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.c +2 -2
  484. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.h +24 -8
  485. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +6 -2
  486. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +7 -7
  487. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +60 -20
  488. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +1 -1
  489. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +12 -4
  490. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +2 -2
  491. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +12 -4
  492. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +6 -6
  493. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +54 -18
  494. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +2 -2
  495. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +12 -4
  496. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.c +7 -7
  497. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.h +42 -14
  498. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +3 -3
  499. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +23 -11
  500. data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +1 -1
  501. data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +7 -3
  502. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +7 -3
  503. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +1 -1
  504. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +7 -3
  505. data/src/core/ext/upb-generated/validate/validate.upb.c +22 -22
  506. data/src/core/ext/upb-generated/validate/validate.upb.h +139 -47
  507. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.c +3 -3
  508. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.h +23 -11
  509. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.c +1 -1
  510. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.h +7 -3
  511. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +3 -3
  512. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +27 -11
  513. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.c +1 -1
  514. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.h +7 -3
  515. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +1 -1
  516. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +6 -2
  517. data/src/core/ext/upb-generated/xds/core/v3/cidr.upb.c +47 -0
  518. data/src/core/ext/upb-generated/xds/core/v3/cidr.upb.h +107 -0
  519. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +2 -2
  520. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +12 -4
  521. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +1 -1
  522. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +6 -2
  523. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.c +1 -1
  524. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.h +6 -2
  525. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +1 -1
  526. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +6 -2
  527. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +1 -1
  528. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +12 -4
  529. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +1 -1
  530. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +6 -2
  531. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +3 -2
  532. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +15 -2
  533. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.c +1 -2
  534. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.h +6 -2
  535. data/src/core/ext/upb-generated/xds/type/matcher/v3/cel.upb.c +46 -0
  536. data/src/core/ext/upb-generated/xds/type/matcher/v3/cel.upb.h +98 -0
  537. data/src/core/ext/upb-generated/xds/type/matcher/v3/domain.upb.c +62 -0
  538. data/src/core/ext/upb-generated/xds/type/matcher/v3/domain.upb.h +174 -0
  539. data/src/core/ext/upb-generated/xds/type/matcher/v3/http_inputs.upb.c +36 -0
  540. data/src/core/ext/upb-generated/xds/type/matcher/v3/http_inputs.upb.h +74 -0
  541. data/src/core/ext/upb-generated/xds/type/matcher/v3/ip.upb.c +65 -0
  542. data/src/core/ext/upb-generated/xds/type/matcher/v3/ip.upb.h +191 -0
  543. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.c +6 -6
  544. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.h +54 -18
  545. data/src/core/ext/upb-generated/xds/type/matcher/v3/range.upb.c +127 -0
  546. data/src/core/ext/upb-generated/xds/type/matcher/v3/range.upb.h +474 -0
  547. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.c +2 -2
  548. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.h +12 -4
  549. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.c +1 -1
  550. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.h +12 -4
  551. data/src/core/ext/upb-generated/xds/type/v3/cel.upb.c +67 -0
  552. data/src/core/ext/upb-generated/xds/type/v3/cel.upb.h +214 -0
  553. data/src/core/ext/upb-generated/xds/type/v3/range.upb.c +64 -0
  554. data/src/core/ext/upb-generated/xds/type/v3/range.upb.h +208 -0
  555. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.c +1 -2
  556. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +6 -2
  557. data/src/core/ext/upbdefs-generated/envoy/admin/v3/clusters.upbdefs.c +54 -53
  558. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.c +67 -274
  559. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.h +0 -85
  560. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.c +277 -0
  561. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.h +125 -0
  562. data/src/core/ext/upbdefs-generated/envoy/admin/v3/listeners.upbdefs.c +14 -11
  563. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +107 -107
  564. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +199 -187
  565. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +232 -222
  566. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +0 -5
  567. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.c +95 -75
  568. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.h +5 -0
  569. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +187 -183
  570. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +81 -75
  571. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +190 -186
  572. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.c +7 -3
  573. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.h +5 -0
  574. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +16 -16
  575. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +71 -66
  576. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +164 -137
  577. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.h +5 -0
  578. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.c +16 -12
  579. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +39 -31
  580. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.c +140 -129
  581. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.h +5 -0
  582. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +82 -74
  583. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.h +2 -2
  584. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +740 -667
  585. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +20 -0
  586. data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.c +150 -139
  587. data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.h +5 -0
  588. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/datadog.upbdefs.c +16 -14
  589. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.c +48 -0
  590. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.h +35 -0
  591. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/trace.upbdefs.c +16 -12
  592. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/zipkin.upbdefs.c +20 -18
  593. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.c +46 -25
  594. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c +53 -42
  595. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.c +60 -0
  596. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.h +40 -0
  597. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +485 -467
  598. data/src/core/ext/upbdefs-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upbdefs.c +50 -0
  599. data/src/core/ext/upbdefs-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upbdefs.h +35 -0
  600. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +21 -18
  601. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +149 -145
  602. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +156 -84
  603. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.h +35 -0
  604. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +113 -113
  605. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/filter_state.upbdefs.c +48 -0
  606. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/filter_state.upbdefs.h +35 -0
  607. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +29 -28
  608. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/status_code_input.upbdefs.c +40 -0
  609. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/status_code_input.upbdefs.h +40 -0
  610. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_strategy.upbdefs.c +69 -0
  611. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_strategy.upbdefs.h +40 -0
  612. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_unit.upbdefs.c +10 -9
  613. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +92 -90
  614. data/src/core/ext/upbdefs-generated/xds/core/v3/cidr.upbdefs.c +45 -0
  615. data/src/core/ext/upbdefs-generated/xds/core/v3/cidr.upbdefs.h +35 -0
  616. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/cel.upbdefs.c +43 -0
  617. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/cel.upbdefs.h +35 -0
  618. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/domain.upbdefs.c +51 -0
  619. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/domain.upbdefs.h +40 -0
  620. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/http_inputs.upbdefs.c +36 -0
  621. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/http_inputs.upbdefs.h +35 -0
  622. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/ip.upbdefs.c +55 -0
  623. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/ip.upbdefs.h +40 -0
  624. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/matcher.upbdefs.c +9 -9
  625. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/range.upbdefs.c +71 -0
  626. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/range.upbdefs.h +60 -0
  627. data/src/core/ext/upbdefs-generated/xds/type/v3/cel.upbdefs.c +60 -0
  628. data/src/core/ext/upbdefs-generated/xds/type/v3/cel.upbdefs.h +40 -0
  629. data/src/core/ext/upbdefs-generated/xds/type/v3/range.upbdefs.c +36 -0
  630. data/src/core/ext/upbdefs-generated/xds/type/v3/range.upbdefs.h +45 -0
  631. data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.c +4 -7
  632. data/src/core/ext/xds/certificate_provider_store.cc +65 -3
  633. data/src/core/ext/xds/certificate_provider_store.h +21 -4
  634. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +17 -10
  635. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +12 -4
  636. data/src/core/ext/xds/upb_utils.h +3 -25
  637. data/src/core/ext/xds/xds_api.cc +90 -196
  638. data/src/core/ext/xds/xds_api.h +41 -39
  639. data/src/core/ext/xds/xds_bootstrap.cc +5 -537
  640. data/src/core/ext/xds/xds_bootstrap.h +41 -96
  641. data/src/core/ext/xds/xds_bootstrap_grpc.cc +362 -0
  642. data/src/core/ext/xds/xds_bootstrap_grpc.h +184 -0
  643. data/src/core/ext/xds/xds_certificate_provider.cc +31 -25
  644. data/src/core/ext/xds/xds_certificate_provider.h +28 -4
  645. data/src/core/ext/xds/xds_channel_args.h +3 -3
  646. data/src/core/ext/xds/xds_channel_stack_modifier.cc +15 -5
  647. data/src/core/ext/xds/xds_channel_stack_modifier.h +16 -4
  648. data/src/core/ext/xds/xds_client.cc +833 -1324
  649. data/src/core/ext/xds/xds_client.h +57 -61
  650. data/src/core/ext/xds/xds_client_grpc.cc +235 -0
  651. data/src/core/ext/xds/xds_client_grpc.h +79 -0
  652. data/src/core/ext/xds/xds_client_stats.cc +24 -25
  653. data/src/core/ext/xds/xds_client_stats.h +26 -24
  654. data/src/core/ext/xds/xds_cluster.cc +413 -245
  655. data/src/core/ext/xds/xds_cluster.h +66 -40
  656. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +67 -77
  657. data/src/core/ext/xds/xds_cluster_specifier_plugin.h +47 -29
  658. data/src/core/ext/xds/xds_common_types.cc +238 -123
  659. data/src/core/ext/xds/xds_common_types.h +29 -16
  660. data/src/core/ext/xds/xds_endpoint.cc +265 -162
  661. data/src/core/ext/xds/xds_endpoint.h +19 -15
  662. data/src/core/ext/xds/xds_health_status.cc +80 -0
  663. data/src/core/ext/xds/xds_health_status.h +109 -0
  664. data/src/core/ext/xds/xds_http_fault_filter.cc +66 -57
  665. data/src/core/ext/xds/xds_http_fault_filter.h +19 -25
  666. data/src/core/ext/xds/xds_http_filters.cc +70 -71
  667. data/src/core/ext/xds/xds_http_filters.h +73 -25
  668. data/src/core/ext/xds/xds_http_rbac_filter.cc +168 -225
  669. data/src/core/ext/xds/xds_http_rbac_filter.h +22 -18
  670. data/src/core/ext/xds/xds_http_stateful_session_filter.cc +218 -0
  671. data/src/core/ext/xds/xds_http_stateful_session_filter.h +58 -0
  672. data/src/core/ext/xds/xds_lb_policy_registry.cc +334 -0
  673. data/src/core/ext/xds/xds_lb_policy_registry.h +71 -0
  674. data/src/core/ext/xds/xds_listener.cc +557 -475
  675. data/src/core/ext/xds/xds_listener.h +57 -51
  676. data/src/core/ext/xds/xds_resource_type.h +28 -22
  677. data/src/core/ext/xds/xds_resource_type_impl.h +18 -17
  678. data/src/core/ext/xds/xds_route_config.cc +592 -570
  679. data/src/core/ext/xds/xds_route_config.h +74 -40
  680. data/src/core/ext/xds/xds_routing.cc +21 -7
  681. data/src/core/ext/xds/xds_routing.h +17 -12
  682. data/src/core/ext/xds/xds_server_config_fetcher.cc +227 -179
  683. data/src/core/ext/xds/xds_transport.h +86 -0
  684. data/src/core/ext/xds/xds_transport_grpc.cc +356 -0
  685. data/src/core/ext/xds/xds_transport_grpc.h +135 -0
  686. data/src/core/lib/address_utils/parse_address.cc +52 -52
  687. data/src/core/lib/address_utils/parse_address.h +46 -42
  688. data/src/core/lib/address_utils/sockaddr_utils.cc +38 -35
  689. data/src/core/lib/address_utils/sockaddr_utils.h +38 -36
  690. data/src/core/lib/avl/avl.h +54 -32
  691. data/src/core/lib/backoff/backoff.cc +19 -21
  692. data/src/core/lib/backoff/backoff.h +21 -21
  693. data/src/core/lib/channel/call_finalization.h +4 -6
  694. data/src/core/lib/channel/call_tracer.h +17 -8
  695. data/src/core/lib/channel/channel_args.cc +108 -39
  696. data/src/core/lib/channel/channel_args.h +285 -111
  697. data/src/core/lib/channel/channel_args_preconditioning.cc +1 -0
  698. data/src/core/lib/channel/channel_args_preconditioning.h +4 -4
  699. data/src/core/lib/channel/channel_fwd.h +26 -0
  700. data/src/core/lib/channel/channel_stack.cc +60 -58
  701. data/src/core/lib/channel/channel_stack.h +149 -146
  702. data/src/core/lib/channel/channel_stack_builder.cc +21 -24
  703. data/src/core/lib/channel/channel_stack_builder.h +19 -14
  704. data/src/core/lib/channel/channel_stack_builder_impl.cc +55 -26
  705. data/src/core/lib/channel/channel_stack_builder_impl.h +6 -3
  706. data/src/core/lib/channel/channel_trace.cc +24 -26
  707. data/src/core/lib/channel/channel_trace.h +22 -22
  708. data/src/core/lib/channel/channelz.cc +44 -54
  709. data/src/core/lib/channel/channelz.h +40 -32
  710. data/src/core/lib/channel/channelz_registry.cc +21 -22
  711. data/src/core/lib/channel/channelz_registry.h +21 -21
  712. data/src/core/lib/channel/connected_channel.cc +1264 -65
  713. data/src/core/lib/channel/connected_channel.h +21 -24
  714. data/src/core/lib/channel/context.h +25 -21
  715. data/src/core/lib/channel/promise_based_filter.cc +1544 -280
  716. data/src/core/lib/channel/promise_based_filter.h +466 -99
  717. data/src/core/lib/channel/status_util.cc +62 -17
  718. data/src/core/lib/channel/status_util.h +39 -22
  719. data/src/core/lib/compression/compression.cc +24 -19
  720. data/src/core/lib/compression/compression_internal.cc +43 -53
  721. data/src/core/lib/compression/compression_internal.h +27 -26
  722. data/src/core/lib/compression/message_compress.cc +28 -26
  723. data/src/core/lib/compression/message_compress.h +28 -29
  724. data/src/core/lib/config/core_configuration.cc +5 -1
  725. data/src/core/lib/config/core_configuration.h +84 -38
  726. data/src/core/lib/debug/event_log.cc +88 -0
  727. data/src/core/lib/debug/event_log.h +81 -0
  728. data/src/core/lib/debug/histogram_view.cc +69 -0
  729. data/src/core/lib/debug/histogram_view.h +37 -0
  730. data/src/core/lib/debug/stats.cc +48 -152
  731. data/src/core/lib/debug/stats.h +50 -57
  732. data/src/core/lib/debug/stats_data.cc +302 -645
  733. data/src/core/lib/debug/stats_data.h +293 -545
  734. data/src/core/lib/debug/trace.cc +18 -20
  735. data/src/core/lib/debug/trace.h +27 -48
  736. data/src/core/lib/event_engine/channel_args_endpoint_config.cc +15 -18
  737. data/src/core/lib/event_engine/channel_args_endpoint_config.h +16 -10
  738. data/src/core/lib/event_engine/common_closures.h +71 -0
  739. data/src/core/lib/event_engine/default_event_engine.cc +99 -0
  740. data/src/core/lib/event_engine/default_event_engine.h +73 -0
  741. data/src/core/lib/event_engine/default_event_engine_factory.cc +20 -5
  742. data/src/core/lib/event_engine/{event_engine_factory.h → default_event_engine_factory.h} +4 -12
  743. data/src/core/lib/event_engine/event_engine.cc +3 -40
  744. data/src/core/lib/event_engine/executor/executor.h +38 -0
  745. data/src/core/lib/event_engine/forkable.cc +106 -0
  746. data/src/core/lib/event_engine/forkable.h +61 -0
  747. data/src/core/lib/event_engine/handle_containers.h +10 -3
  748. data/src/core/lib/event_engine/memory_allocator.cc +1 -1
  749. data/src/core/lib/event_engine/poller.h +62 -0
  750. data/src/core/lib/event_engine/posix.h +158 -0
  751. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +642 -0
  752. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h +139 -0
  753. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +899 -0
  754. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +97 -0
  755. data/src/core/lib/event_engine/posix_engine/event_poller.h +111 -0
  756. data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +74 -0
  757. data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.h +33 -0
  758. data/src/core/lib/event_engine/posix_engine/internal_errqueue.cc +77 -0
  759. data/src/core/lib/event_engine/posix_engine/internal_errqueue.h +179 -0
  760. data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +265 -0
  761. data/src/core/lib/event_engine/posix_engine/lockfree_event.h +73 -0
  762. data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +1305 -0
  763. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +717 -0
  764. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +640 -0
  765. data/src/core/lib/event_engine/posix_engine/posix_engine.h +259 -0
  766. data/src/core/lib/event_engine/posix_engine/posix_engine_closure.h +80 -0
  767. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +289 -0
  768. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.h +279 -0
  769. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +379 -0
  770. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.h +91 -0
  771. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +853 -0
  772. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +316 -0
  773. data/src/core/lib/event_engine/posix_engine/timer.cc +311 -0
  774. data/src/core/lib/event_engine/posix_engine/timer.h +194 -0
  775. data/src/core/lib/event_engine/posix_engine/timer_heap.cc +107 -0
  776. data/src/core/lib/event_engine/posix_engine/timer_heap.h +56 -0
  777. data/src/core/lib/event_engine/posix_engine/timer_manager.cc +173 -0
  778. data/src/core/lib/event_engine/posix_engine/timer_manager.h +114 -0
  779. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +332 -0
  780. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.h +185 -0
  781. data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.cc +127 -0
  782. data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.h +45 -0
  783. data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.cc +150 -0
  784. data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.h +45 -0
  785. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h +76 -0
  786. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.cc +67 -0
  787. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h +37 -0
  788. data/src/core/lib/event_engine/resolved_address.cc +19 -0
  789. data/src/core/lib/event_engine/resolved_address_internal.h +34 -0
  790. data/src/core/lib/event_engine/shim.cc +56 -0
  791. data/src/core/lib/event_engine/shim.h +33 -0
  792. data/src/core/lib/event_engine/slice.cc +8 -7
  793. data/src/core/lib/event_engine/slice_buffer.cc +2 -2
  794. data/src/core/lib/event_engine/tcp_socket_utils.cc +389 -0
  795. data/src/core/lib/event_engine/tcp_socket_utils.h +90 -0
  796. data/src/core/lib/event_engine/thread_local.cc +29 -0
  797. data/src/core/lib/event_engine/thread_local.h +32 -0
  798. data/src/core/lib/event_engine/thread_pool.cc +253 -0
  799. data/src/core/lib/event_engine/thread_pool.h +141 -0
  800. data/src/core/lib/event_engine/time_util.cc +30 -0
  801. data/src/core/lib/event_engine/time_util.h +32 -0
  802. data/src/core/lib/event_engine/trace.cc +6 -0
  803. data/src/core/lib/event_engine/trace.h +16 -3
  804. data/src/core/lib/event_engine/utils.cc +44 -0
  805. data/src/core/lib/event_engine/utils.h +44 -0
  806. data/src/core/lib/event_engine/windows/iocp.cc +140 -0
  807. data/src/core/lib/event_engine/windows/iocp.h +69 -0
  808. data/src/core/lib/event_engine/windows/win_socket.cc +219 -0
  809. data/src/core/lib/event_engine/windows/win_socket.h +129 -0
  810. data/src/core/lib/event_engine/windows/windows_endpoint.cc +331 -0
  811. data/src/core/lib/event_engine/windows/windows_endpoint.h +103 -0
  812. data/src/core/lib/event_engine/windows/windows_engine.cc +388 -0
  813. data/src/core/lib/event_engine/windows/windows_engine.h +163 -0
  814. data/src/core/lib/experiments/config.cc +161 -0
  815. data/src/core/lib/experiments/config.h +53 -0
  816. data/src/core/lib/experiments/experiments.cc +81 -0
  817. data/src/core/lib/experiments/experiments.h +117 -0
  818. data/src/core/lib/gpr/alloc.cc +19 -25
  819. data/src/core/lib/gpr/alloc.h +20 -20
  820. data/src/core/lib/gpr/atm.cc +17 -17
  821. data/src/core/lib/gpr/cpu_iphone.cc +24 -24
  822. data/src/core/lib/gpr/cpu_linux.cc +28 -23
  823. data/src/core/lib/gpr/cpu_posix.cc +23 -22
  824. data/src/core/lib/gpr/cpu_windows.cc +20 -18
  825. data/src/core/lib/gpr/log.cc +27 -19
  826. data/src/core/lib/gpr/log_android.cc +22 -20
  827. data/src/core/lib/gpr/log_linux.cc +24 -24
  828. data/src/core/lib/gpr/log_posix.cc +20 -19
  829. data/src/core/lib/gpr/log_windows.cc +25 -25
  830. data/src/core/lib/gpr/spinlock.h +20 -20
  831. data/src/core/lib/gpr/string.cc +25 -24
  832. data/src/core/lib/gpr/string.h +61 -61
  833. data/src/core/lib/gpr/string_posix.cc +24 -24
  834. data/src/core/lib/gpr/string_util_windows.cc +25 -52
  835. data/src/core/lib/gpr/string_windows.cc +24 -24
  836. data/src/core/lib/gpr/sync.cc +25 -25
  837. data/src/core/lib/gpr/sync_abseil.cc +36 -40
  838. data/src/core/lib/gpr/sync_posix.cc +22 -34
  839. data/src/core/lib/gpr/sync_windows.cc +29 -27
  840. data/src/core/lib/gpr/time.cc +34 -30
  841. data/src/core/lib/gpr/time_posix.cc +41 -45
  842. data/src/core/lib/gpr/time_precise.cc +22 -22
  843. data/src/core/lib/gpr/time_precise.h +21 -22
  844. data/src/core/lib/gpr/time_windows.cc +35 -29
  845. data/src/core/lib/gpr/tmpfile.h +24 -24
  846. data/src/core/lib/gpr/tmpfile_msys.cc +21 -20
  847. data/src/core/lib/gpr/tmpfile_posix.cc +22 -20
  848. data/src/core/lib/gpr/tmpfile_windows.cc +28 -29
  849. data/src/core/lib/gpr/useful.h +83 -30
  850. data/src/core/lib/gpr/wrap_memcpy.cc +23 -23
  851. data/src/core/lib/gprpp/atomic_utils.h +20 -20
  852. data/src/core/lib/gprpp/bitset.h +30 -16
  853. data/src/core/lib/gprpp/chunked_vector.h +3 -3
  854. data/src/core/lib/gprpp/construct_destruct.h +3 -3
  855. data/src/core/lib/gprpp/cpp_impl_of.h +3 -3
  856. data/src/core/{ext/xds/xds_resource_type.cc → lib/gprpp/crash.cc} +12 -12
  857. data/src/core/lib/gprpp/crash.h +34 -0
  858. data/src/core/lib/gprpp/debug_location.h +60 -31
  859. data/src/core/lib/gprpp/dual_ref_counted.h +3 -3
  860. data/src/core/lib/gprpp/env.h +53 -0
  861. data/src/core/lib/gprpp/env_linux.cc +80 -0
  862. data/src/core/lib/gprpp/env_posix.cc +47 -0
  863. data/src/core/lib/gprpp/env_windows.cc +56 -0
  864. data/src/core/lib/gprpp/examine_stack.cc +17 -17
  865. data/src/core/lib/gprpp/examine_stack.h +21 -21
  866. data/src/core/lib/gprpp/fork.cc +56 -48
  867. data/src/core/lib/gprpp/fork.h +29 -35
  868. data/src/core/lib/gprpp/global_config.h +20 -20
  869. data/src/core/lib/gprpp/global_config_custom.h +20 -20
  870. data/src/core/lib/gprpp/global_config_env.cc +25 -23
  871. data/src/core/lib/gprpp/global_config_env.h +26 -26
  872. data/src/core/lib/gprpp/global_config_generic.h +21 -21
  873. data/src/core/lib/gprpp/host_port.cc +28 -26
  874. data/src/core/lib/gprpp/host_port.h +32 -31
  875. data/src/core/lib/gprpp/load_file.cc +75 -0
  876. data/src/core/lib/gprpp/load_file.h +33 -0
  877. data/src/core/lib/gprpp/manual_constructor.h +21 -88
  878. data/src/core/lib/gprpp/match.h +3 -3
  879. data/src/core/lib/gprpp/memory.h +21 -21
  880. data/src/core/lib/gprpp/mpscq.cc +17 -17
  881. data/src/core/lib/gprpp/mpscq.h +21 -21
  882. data/src/core/lib/gprpp/no_destruct.h +95 -0
  883. data/src/core/lib/gprpp/notification.h +67 -0
  884. data/src/core/lib/gprpp/orphanable.h +21 -21
  885. data/src/core/lib/gprpp/overload.h +3 -3
  886. data/src/core/lib/gprpp/packed_table.h +40 -0
  887. data/src/core/lib/gprpp/per_cpu.h +46 -0
  888. data/src/core/lib/gprpp/ref_counted.h +21 -21
  889. data/src/core/lib/gprpp/ref_counted_ptr.h +41 -54
  890. data/src/core/lib/gprpp/single_set_ptr.h +3 -3
  891. data/src/core/lib/gprpp/sorted_pack.h +98 -0
  892. data/src/core/lib/gprpp/stat.h +3 -3
  893. data/src/core/lib/gprpp/stat_posix.cc +5 -4
  894. data/src/core/lib/gprpp/stat_windows.cc +4 -2
  895. data/src/core/lib/gprpp/status_helper.cc +49 -33
  896. data/src/core/lib/gprpp/status_helper.h +9 -5
  897. data/src/core/lib/gprpp/strerror.cc +43 -0
  898. data/src/core/lib/gprpp/strerror.h +29 -0
  899. data/src/core/lib/gprpp/sync.h +23 -23
  900. data/src/core/lib/gprpp/table.h +12 -4
  901. data/src/core/lib/gprpp/tchar.cc +49 -0
  902. data/src/core/lib/gprpp/tchar.h +33 -0
  903. data/src/core/lib/gprpp/thd.h +23 -23
  904. data/src/core/lib/gprpp/thd_posix.cc +30 -31
  905. data/src/core/lib/gprpp/thd_windows.cc +26 -26
  906. data/src/core/lib/gprpp/time.cc +44 -9
  907. data/src/core/lib/gprpp/time.h +73 -4
  908. data/src/core/lib/gprpp/time_averaged_stats.cc +60 -0
  909. data/src/core/lib/gprpp/time_averaged_stats.h +79 -0
  910. data/src/core/lib/gprpp/time_util.h +4 -4
  911. data/src/core/lib/gprpp/unique_type_name.h +21 -21
  912. data/src/core/lib/gprpp/validation_errors.cc +61 -0
  913. data/src/core/lib/gprpp/validation_errors.h +127 -0
  914. data/src/core/lib/{iomgr → gprpp}/work_serializer.cc +34 -18
  915. data/src/core/lib/{iomgr → gprpp}/work_serializer.h +21 -28
  916. data/src/core/lib/handshaker/proxy_mapper.h +53 -0
  917. data/src/core/lib/handshaker/proxy_mapper_registry.cc +71 -0
  918. data/src/core/lib/handshaker/proxy_mapper_registry.h +75 -0
  919. data/src/core/lib/http/format_request.cc +24 -22
  920. data/src/core/lib/http/format_request.h +21 -21
  921. data/src/core/lib/http/httpcli.cc +79 -88
  922. data/src/core/lib/http/httpcli.h +47 -31
  923. data/src/core/lib/http/httpcli_security_connector.cc +47 -38
  924. data/src/core/lib/http/httpcli_ssl_credentials.h +6 -4
  925. data/src/core/lib/http/parser.cc +78 -90
  926. data/src/core/lib/http/parser.h +38 -35
  927. data/src/core/lib/iomgr/block_annotate.h +23 -23
  928. data/src/core/lib/iomgr/buffer_list.cc +156 -136
  929. data/src/core/lib/iomgr/buffer_list.h +123 -101
  930. data/src/core/lib/iomgr/call_combiner.cc +32 -64
  931. data/src/core/lib/iomgr/call_combiner.h +24 -25
  932. data/src/core/lib/iomgr/cfstream_handle.cc +33 -36
  933. data/src/core/lib/iomgr/cfstream_handle.h +25 -25
  934. data/src/core/lib/iomgr/closure.cc +27 -0
  935. data/src/core/lib/iomgr/closure.h +95 -58
  936. data/src/core/lib/iomgr/combiner.cc +20 -39
  937. data/src/core/lib/iomgr/combiner.h +20 -20
  938. data/src/core/lib/iomgr/dualstack_socket_posix.cc +21 -21
  939. data/src/core/lib/iomgr/dynamic_annotations.h +22 -22
  940. data/src/core/lib/iomgr/endpoint.cc +17 -17
  941. data/src/core/lib/iomgr/endpoint.h +49 -49
  942. data/src/core/lib/iomgr/endpoint_cfstream.cc +44 -43
  943. data/src/core/lib/iomgr/endpoint_cfstream.h +32 -32
  944. data/src/core/lib/iomgr/endpoint_pair.h +20 -20
  945. data/src/core/lib/iomgr/endpoint_pair_posix.cc +34 -28
  946. data/src/core/lib/iomgr/endpoint_pair_windows.cc +30 -21
  947. data/src/core/lib/iomgr/error.cc +51 -834
  948. data/src/core/lib/iomgr/error.h +45 -317
  949. data/src/core/lib/iomgr/error_cfstream.cc +18 -23
  950. data/src/core/lib/iomgr/error_cfstream.h +21 -21
  951. data/src/core/lib/iomgr/ev_apple.cc +21 -21
  952. data/src/core/lib/iomgr/ev_apple.h +21 -21
  953. data/src/core/lib/iomgr/ev_epoll1_linux.cc +263 -248
  954. data/src/core/lib/iomgr/ev_epoll1_linux.h +21 -21
  955. data/src/core/lib/iomgr/ev_poll_posix.cc +296 -271
  956. data/src/core/lib/iomgr/ev_poll_posix.h +22 -22
  957. data/src/core/lib/iomgr/ev_posix.cc +87 -117
  958. data/src/core/lib/iomgr/ev_posix.h +93 -87
  959. data/src/core/lib/iomgr/ev_windows.cc +18 -18
  960. data/src/core/lib/iomgr/event_engine_shims/closure.cc +62 -0
  961. data/src/core/lib/iomgr/event_engine_shims/closure.h +39 -0
  962. data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +430 -0
  963. data/src/core/lib/iomgr/event_engine_shims/endpoint.h +43 -0
  964. data/src/core/lib/iomgr/event_engine_shims/tcp_client.cc +91 -0
  965. data/src/core/lib/iomgr/event_engine_shims/tcp_client.h +44 -0
  966. data/src/core/lib/iomgr/exec_ctx.cc +34 -56
  967. data/src/core/lib/iomgr/exec_ctx.h +151 -175
  968. data/src/core/lib/iomgr/executor.cc +21 -31
  969. data/src/core/lib/iomgr/executor.h +27 -30
  970. data/src/core/lib/iomgr/fork_posix.cc +30 -27
  971. data/src/core/lib/iomgr/fork_windows.cc +21 -21
  972. data/src/core/lib/iomgr/gethostname.h +20 -20
  973. data/src/core/lib/iomgr/gethostname_fallback.cc +17 -17
  974. data/src/core/lib/iomgr/gethostname_host_name_max.cc +17 -17
  975. data/src/core/lib/iomgr/gethostname_sysconf.cc +17 -17
  976. data/src/core/lib/iomgr/grpc_if_nametoindex.h +22 -22
  977. data/src/core/lib/iomgr/grpc_if_nametoindex_posix.cc +20 -19
  978. data/src/core/lib/iomgr/grpc_if_nametoindex_unsupported.cc +20 -19
  979. data/src/core/lib/iomgr/internal_errqueue.cc +4 -2
  980. data/src/core/lib/iomgr/internal_errqueue.h +83 -83
  981. data/src/core/lib/iomgr/iocp_windows.cc +23 -23
  982. data/src/core/lib/iomgr/iocp_windows.h +21 -21
  983. data/src/core/lib/iomgr/iomgr.cc +25 -19
  984. data/src/core/lib/iomgr/iomgr.h +35 -35
  985. data/src/core/lib/iomgr/iomgr_fwd.h +4 -3
  986. data/src/core/lib/iomgr/iomgr_internal.cc +17 -17
  987. data/src/core/lib/iomgr/iomgr_internal.h +28 -28
  988. data/src/core/lib/iomgr/iomgr_posix.cc +21 -20
  989. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +21 -19
  990. data/src/core/lib/iomgr/iomgr_windows.cc +24 -22
  991. data/src/core/lib/iomgr/load_file.cc +24 -27
  992. data/src/core/lib/iomgr/load_file.h +22 -22
  993. data/src/core/lib/iomgr/lockfree_event.cc +114 -131
  994. data/src/core/lib/iomgr/lockfree_event.h +23 -23
  995. data/src/core/lib/iomgr/nameser.h +86 -86
  996. data/src/core/lib/iomgr/polling_entity.cc +25 -21
  997. data/src/core/lib/iomgr/polling_entity.h +29 -29
  998. data/src/core/lib/iomgr/pollset.cc +17 -17
  999. data/src/core/lib/iomgr/pollset.h +55 -55
  1000. data/src/core/lib/iomgr/pollset_set.cc +17 -17
  1001. data/src/core/lib/iomgr/pollset_set.h +25 -26
  1002. data/src/core/lib/iomgr/pollset_set_windows.cc +18 -18
  1003. data/src/core/lib/iomgr/pollset_set_windows.h +20 -20
  1004. data/src/core/lib/iomgr/pollset_windows.cc +32 -31
  1005. data/src/core/lib/iomgr/pollset_windows.h +24 -24
  1006. data/src/core/lib/iomgr/port.h +34 -31
  1007. data/src/core/lib/iomgr/python_util.h +24 -24
  1008. data/src/core/lib/iomgr/resolve_address.cc +26 -20
  1009. data/src/core/lib/iomgr/resolve_address.h +54 -31
  1010. data/src/core/lib/iomgr/resolve_address_impl.h +5 -4
  1011. data/src/core/lib/iomgr/resolve_address_posix.cc +74 -49
  1012. data/src/core/lib/iomgr/resolve_address_posix.h +23 -10
  1013. data/src/core/lib/iomgr/resolve_address_windows.cc +59 -26
  1014. data/src/core/lib/iomgr/resolve_address_windows.h +23 -10
  1015. data/src/core/lib/iomgr/resolved_address.h +3 -3
  1016. data/src/core/lib/iomgr/sockaddr.h +23 -23
  1017. data/src/core/lib/iomgr/sockaddr_posix.h +21 -21
  1018. data/src/core/lib/iomgr/sockaddr_utils_posix.cc +20 -18
  1019. data/src/core/lib/iomgr/sockaddr_windows.h +21 -21
  1020. data/src/core/lib/iomgr/socket_factory_posix.cc +18 -18
  1021. data/src/core/lib/iomgr/socket_factory_posix.h +32 -32
  1022. data/src/core/lib/iomgr/socket_mutator.cc +19 -18
  1023. data/src/core/lib/iomgr/socket_mutator.h +39 -39
  1024. data/src/core/lib/iomgr/socket_utils.h +27 -27
  1025. data/src/core/lib/iomgr/socket_utils_common_posix.cc +80 -100
  1026. data/src/core/lib/iomgr/socket_utils_linux.cc +18 -17
  1027. data/src/core/lib/iomgr/socket_utils_posix.cc +103 -19
  1028. data/src/core/lib/iomgr/socket_utils_posix.h +176 -84
  1029. data/src/core/lib/iomgr/socket_utils_windows.cc +20 -19
  1030. data/src/core/lib/iomgr/socket_windows.cc +37 -36
  1031. data/src/core/lib/iomgr/socket_windows.h +59 -61
  1032. data/src/core/lib/iomgr/systemd_utils.cc +116 -0
  1033. data/src/core/lib/iomgr/systemd_utils.h +33 -0
  1034. data/src/core/lib/iomgr/tcp_client.cc +28 -24
  1035. data/src/core/lib/iomgr/tcp_client.h +49 -38
  1036. data/src/core/lib/iomgr/tcp_client_cfstream.cc +39 -36
  1037. data/src/core/lib/iomgr/tcp_client_posix.cc +236 -105
  1038. data/src/core/lib/iomgr/tcp_client_posix.h +55 -52
  1039. data/src/core/lib/iomgr/tcp_client_windows.cc +64 -51
  1040. data/src/core/lib/iomgr/tcp_posix.cc +502 -341
  1041. data/src/core/lib/iomgr/tcp_posix.h +32 -30
  1042. data/src/core/lib/iomgr/tcp_server.cc +33 -24
  1043. data/src/core/lib/iomgr/tcp_server.h +78 -69
  1044. data/src/core/lib/iomgr/tcp_server_posix.cc +358 -124
  1045. data/src/core/lib/iomgr/tcp_server_utils_posix.h +68 -55
  1046. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +93 -58
  1047. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +40 -40
  1048. data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +19 -19
  1049. data/src/core/lib/iomgr/tcp_server_windows.cc +106 -116
  1050. data/src/core/lib/iomgr/tcp_windows.cc +109 -94
  1051. data/src/core/lib/iomgr/tcp_windows.h +34 -35
  1052. data/src/core/lib/iomgr/timer.cc +17 -17
  1053. data/src/core/lib/iomgr/timer.h +68 -68
  1054. data/src/core/lib/iomgr/timer_generic.cc +125 -134
  1055. data/src/core/lib/iomgr/timer_generic.h +21 -21
  1056. data/src/core/lib/iomgr/timer_heap.cc +25 -25
  1057. data/src/core/lib/iomgr/timer_heap.h +22 -22
  1058. data/src/core/lib/iomgr/timer_manager.cc +31 -31
  1059. data/src/core/lib/iomgr/timer_manager.h +27 -27
  1060. data/src/core/lib/iomgr/unix_sockets_posix.cc +20 -21
  1061. data/src/core/lib/iomgr/unix_sockets_posix.h +21 -21
  1062. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +19 -17
  1063. data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +23 -23
  1064. data/src/core/lib/iomgr/wakeup_fd_nospecial.cc +23 -23
  1065. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +29 -26
  1066. data/src/core/lib/iomgr/wakeup_fd_pipe.h +20 -20
  1067. data/src/core/lib/iomgr/wakeup_fd_posix.cc +33 -30
  1068. data/src/core/lib/iomgr/wakeup_fd_posix.h +52 -54
  1069. data/src/core/lib/json/json.h +22 -25
  1070. data/src/core/{ext/filters/http/message_compress/message_decompress_filter.h → lib/json/json_args.h} +13 -10
  1071. data/src/core/lib/json/json_channel_args.h +42 -0
  1072. data/src/core/lib/json/json_object_loader.cc +217 -0
  1073. data/src/core/lib/json/json_object_loader.h +634 -0
  1074. data/src/core/lib/json/json_reader.cc +115 -90
  1075. data/src/core/lib/json/json_util.cc +14 -41
  1076. data/src/core/lib/json/json_util.h +7 -7
  1077. data/src/core/lib/json/json_writer.cc +56 -56
  1078. data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy.cc +26 -58
  1079. data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy.h +32 -41
  1080. data/src/core/lib/load_balancing/lb_policy_factory.h +49 -0
  1081. data/src/core/lib/load_balancing/lb_policy_registry.cc +142 -0
  1082. data/src/core/lib/load_balancing/lb_policy_registry.h +82 -0
  1083. data/src/core/{ext/filters/client_channel → lib/load_balancing}/subchannel_interface.h +18 -31
  1084. data/src/core/lib/matchers/matchers.cc +12 -7
  1085. data/src/core/lib/matchers/matchers.h +5 -3
  1086. data/src/core/lib/promise/activity.cc +22 -7
  1087. data/src/core/lib/promise/activity.h +110 -52
  1088. data/src/core/lib/promise/arena_promise.h +105 -72
  1089. data/src/core/lib/promise/context.h +17 -10
  1090. data/src/core/lib/promise/detail/basic_join.h +197 -0
  1091. data/src/core/lib/promise/detail/basic_seq.h +27 -32
  1092. data/src/core/lib/promise/detail/promise_factory.h +61 -13
  1093. data/src/core/lib/promise/detail/promise_like.h +3 -3
  1094. data/src/core/lib/promise/detail/status.h +31 -3
  1095. data/src/core/lib/promise/detail/switch.h +21 -21
  1096. data/src/core/lib/promise/exec_ctx_wakeup_scheduler.h +23 -15
  1097. data/src/core/lib/promise/if.h +195 -0
  1098. data/src/core/lib/promise/interceptor_list.h +308 -0
  1099. data/src/core/lib/promise/intra_activity_waiter.h +9 -3
  1100. data/src/core/lib/promise/latch.h +110 -22
  1101. data/src/core/lib/promise/loop.h +12 -9
  1102. data/src/core/lib/promise/map.h +4 -6
  1103. data/src/core/lib/promise/pipe.h +608 -0
  1104. data/src/core/lib/promise/poll.h +129 -11
  1105. data/src/core/lib/promise/promise.h +5 -5
  1106. data/src/core/lib/promise/race.h +6 -9
  1107. data/src/core/lib/promise/seq.h +32 -12
  1108. data/src/core/lib/promise/sleep.cc +56 -42
  1109. data/src/core/lib/promise/sleep.h +40 -32
  1110. data/src/core/lib/promise/trace.cc +20 -0
  1111. data/src/core/lib/promise/trace.h +24 -0
  1112. data/src/core/lib/promise/try_join.h +82 -0
  1113. data/src/core/lib/promise/try_seq.h +39 -21
  1114. data/src/core/lib/resolver/resolver.cc +17 -59
  1115. data/src/core/lib/resolver/resolver.h +21 -18
  1116. data/src/core/lib/resolver/resolver_factory.h +10 -8
  1117. data/src/core/lib/resolver/resolver_registry.cc +17 -9
  1118. data/src/core/lib/resolver/resolver_registry.h +15 -5
  1119. data/src/core/lib/resolver/server_address.cc +38 -32
  1120. data/src/core/lib/resolver/server_address.h +32 -31
  1121. data/src/core/lib/resource_quota/api.cc +10 -2
  1122. data/src/core/lib/resource_quota/api.h +10 -4
  1123. data/src/core/lib/resource_quota/arena.cc +85 -21
  1124. data/src/core/lib/resource_quota/arena.h +196 -23
  1125. data/src/core/lib/resource_quota/memory_quota.cc +287 -108
  1126. data/src/core/lib/resource_quota/memory_quota.h +175 -59
  1127. data/src/core/lib/resource_quota/periodic_update.cc +78 -0
  1128. data/src/core/lib/resource_quota/periodic_update.h +71 -0
  1129. data/src/core/lib/resource_quota/resource_quota.h +4 -4
  1130. data/src/core/lib/resource_quota/thread_quota.h +3 -3
  1131. data/src/core/lib/resource_quota/trace.h +3 -3
  1132. data/src/core/lib/security/authorization/authorization_engine.h +3 -3
  1133. data/src/core/lib/security/authorization/authorization_policy_provider.h +10 -3
  1134. data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +3 -0
  1135. data/src/core/lib/security/authorization/evaluate_args.cc +17 -8
  1136. data/src/core/lib/security/authorization/evaluate_args.h +9 -6
  1137. data/src/core/lib/security/authorization/grpc_authorization_engine.cc +5 -1
  1138. data/src/core/lib/security/authorization/grpc_authorization_engine.h +10 -3
  1139. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +16 -3
  1140. data/src/core/lib/security/authorization/grpc_server_authz_filter.h +16 -5
  1141. data/src/core/lib/security/authorization/matchers.cc +44 -30
  1142. data/src/core/lib/security/authorization/matchers.h +10 -3
  1143. data/src/core/lib/security/authorization/rbac_policy.cc +6 -2
  1144. data/src/core/lib/security/authorization/rbac_policy.h +10 -3
  1145. data/src/core/{ext/xds → lib/security/certificate_provider}/certificate_provider_factory.h +9 -4
  1146. data/src/core/lib/security/certificate_provider/certificate_provider_registry.cc +60 -0
  1147. data/src/core/lib/security/certificate_provider/certificate_provider_registry.h +70 -0
  1148. data/src/core/lib/security/context/security_context.cc +27 -25
  1149. data/src/core/lib/security/context/security_context.h +56 -34
  1150. data/src/core/lib/security/credentials/alts/alts_credentials.cc +23 -22
  1151. data/src/core/lib/security/credentials/alts/alts_credentials.h +61 -57
  1152. data/src/core/lib/security/credentials/alts/check_gcp_environment.cc +19 -19
  1153. data/src/core/lib/security/credentials/alts/check_gcp_environment.h +43 -43
  1154. data/src/core/lib/security/credentials/alts/check_gcp_environment_linux.cc +17 -17
  1155. data/src/core/lib/security/credentials/alts/check_gcp_environment_no_op.cc +18 -17
  1156. data/src/core/lib/security/credentials/alts/check_gcp_environment_windows.cc +18 -17
  1157. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc +20 -22
  1158. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.cc +18 -18
  1159. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.h +38 -39
  1160. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +19 -22
  1161. data/src/core/lib/security/credentials/call_creds_util.cc +8 -0
  1162. data/src/core/lib/security/credentials/call_creds_util.h +4 -3
  1163. data/src/core/lib/security/credentials/channel_creds_registry.h +9 -4
  1164. data/src/core/lib/security/credentials/channel_creds_registry_init.cc +13 -3
  1165. data/src/core/lib/security/credentials/composite/composite_credentials.cc +27 -31
  1166. data/src/core/lib/security/credentials/composite/composite_credentials.h +40 -29
  1167. data/src/core/lib/security/credentials/credentials.cc +23 -26
  1168. data/src/core/lib/security/credentials/credentials.h +62 -55
  1169. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +123 -76
  1170. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +13 -3
  1171. data/src/core/lib/security/credentials/external/aws_request_signer.cc +14 -3
  1172. data/src/core/lib/security/credentials/external/aws_request_signer.h +3 -3
  1173. data/src/core/lib/security/credentials/external/external_account_credentials.cc +83 -68
  1174. data/src/core/lib/security/credentials/external/external_account_credentials.h +14 -3
  1175. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +29 -26
  1176. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +9 -3
  1177. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +42 -31
  1178. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +13 -3
  1179. data/src/core/lib/security/credentials/fake/fake_credentials.cc +30 -36
  1180. data/src/core/lib/security/credentials/fake/fake_credentials.h +49 -42
  1181. data/src/core/lib/security/credentials/google_default/credentials_generic.cc +23 -25
  1182. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +129 -107
  1183. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +31 -25
  1184. data/src/core/lib/security/credentials/iam/iam_credentials.cc +27 -20
  1185. data/src/core/lib/security/credentials/iam/iam_credentials.h +31 -21
  1186. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +7 -3
  1187. data/src/core/lib/security/credentials/insecure/insecure_credentials.h +10 -6
  1188. data/src/core/lib/security/credentials/jwt/json_token.cc +40 -29
  1189. data/src/core/lib/security/credentials/jwt/json_token.h +36 -36
  1190. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +29 -27
  1191. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +35 -21
  1192. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +113 -89
  1193. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +49 -47
  1194. data/src/core/lib/security/credentials/local/local_credentials.cc +24 -24
  1195. data/src/core/lib/security/credentials/local/local_credentials.h +32 -26
  1196. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +85 -81
  1197. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +42 -21
  1198. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +31 -30
  1199. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +47 -23
  1200. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +36 -40
  1201. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +35 -23
  1202. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +22 -30
  1203. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +16 -17
  1204. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +55 -48
  1205. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +22 -9
  1206. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +10 -3
  1207. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +9 -10
  1208. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +22 -23
  1209. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +3 -3
  1210. data/src/core/lib/security/credentials/tls/tls_credentials.cc +36 -44
  1211. data/src/core/lib/security/credentials/tls/tls_credentials.h +28 -25
  1212. data/src/core/lib/security/credentials/tls/tls_utils.cc +5 -1
  1213. data/src/core/lib/security/credentials/tls/tls_utils.h +4 -4
  1214. data/src/core/lib/security/credentials/xds/xds_credentials.cc +21 -32
  1215. data/src/core/lib/security/credentials/xds/xds_credentials.h +19 -5
  1216. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +60 -54
  1217. data/src/core/lib/security/security_connector/alts/alts_security_connector.h +49 -47
  1218. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +74 -78
  1219. data/src/core/lib/security/security_connector/fake/fake_security_connector.h +25 -26
  1220. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +15 -6
  1221. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +26 -15
  1222. data/src/core/lib/security/security_connector/load_system_roots.h +20 -20
  1223. data/src/core/lib/security/security_connector/load_system_roots_fallback.cc +22 -20
  1224. data/src/core/lib/security/security_connector/{load_system_roots_linux.cc → load_system_roots_supported.cc} +43 -38
  1225. data/src/core/lib/security/security_connector/load_system_roots_supported.h +45 -0
  1226. data/src/core/lib/security/security_connector/local/local_security_connector.cc +64 -47
  1227. data/src/core/lib/security/security_connector/local/local_security_connector.h +49 -46
  1228. data/src/core/lib/security/security_connector/security_connector.cc +37 -35
  1229. data/src/core/lib/security/security_connector/security_connector.h +57 -44
  1230. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +54 -45
  1231. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +44 -43
  1232. data/src/core/lib/security/security_connector/ssl_utils.cc +47 -39
  1233. data/src/core/lib/security/security_connector/ssl_utils.h +45 -42
  1234. data/src/core/lib/security/security_connector/ssl_utils_config.cc +22 -22
  1235. data/src/core/lib/security/security_connector/ssl_utils_config.h +21 -22
  1236. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +58 -56
  1237. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +48 -28
  1238. data/src/core/lib/security/transport/auth_filters.h +53 -24
  1239. data/src/core/lib/security/transport/client_auth_filter.cc +51 -32
  1240. data/src/core/lib/security/transport/secure_endpoint.cc +112 -68
  1241. data/src/core/lib/security/transport/secure_endpoint.h +28 -27
  1242. data/src/core/lib/security/transport/security_handshaker.cc +139 -109
  1243. data/src/core/lib/security/transport/security_handshaker.h +27 -22
  1244. data/src/core/lib/security/transport/server_auth_filter.cc +157 -267
  1245. data/src/core/lib/security/transport/tsi_error.cc +23 -20
  1246. data/src/core/lib/security/transport/tsi_error.h +20 -20
  1247. data/src/core/lib/security/util/json_util.cc +24 -24
  1248. data/src/core/lib/security/util/json_util.h +21 -23
  1249. data/src/core/lib/service_config/service_config.h +15 -4
  1250. data/src/core/lib/service_config/service_config_call_data.h +11 -4
  1251. data/src/core/lib/service_config/service_config_impl.cc +107 -153
  1252. data/src/core/lib/service_config/service_config_impl.h +19 -26
  1253. data/src/core/lib/service_config/service_config_parser.cc +10 -30
  1254. data/src/core/lib/service_config/service_config_parser.h +13 -21
  1255. data/src/core/lib/slice/b64.cc +26 -26
  1256. data/src/core/lib/slice/b64.h +32 -32
  1257. data/src/core/lib/slice/percent_encoding.cc +21 -30
  1258. data/src/core/lib/slice/percent_encoding.h +28 -28
  1259. data/src/core/lib/slice/slice.cc +57 -45
  1260. data/src/core/lib/slice/slice.h +57 -18
  1261. data/src/core/lib/slice/slice_buffer.cc +93 -60
  1262. data/src/core/lib/slice/slice_buffer.h +72 -10
  1263. data/src/core/lib/slice/slice_internal.h +34 -42
  1264. data/src/core/lib/slice/slice_refcount.cc +3 -18
  1265. data/src/core/lib/slice/slice_refcount.h +53 -18
  1266. data/src/core/lib/slice/slice_string_helpers.cc +17 -37
  1267. data/src/core/lib/slice/slice_string_helpers.h +21 -25
  1268. data/src/core/lib/surface/api_trace.cc +17 -17
  1269. data/src/core/lib/surface/api_trace.h +25 -25
  1270. data/src/core/lib/surface/builtins.h +3 -3
  1271. data/src/core/lib/surface/byte_buffer.cc +22 -23
  1272. data/src/core/lib/surface/byte_buffer_reader.cc +23 -23
  1273. data/src/core/lib/surface/call.cc +2205 -471
  1274. data/src/core/lib/surface/call.h +121 -42
  1275. data/src/core/lib/surface/call_details.cc +20 -21
  1276. data/src/core/lib/surface/call_log_batch.cc +19 -18
  1277. data/src/core/lib/surface/call_test_only.h +33 -33
  1278. data/src/core/lib/surface/call_trace.cc +123 -0
  1279. data/src/core/lib/surface/call_trace.h +30 -0
  1280. data/src/core/lib/surface/channel.cc +65 -69
  1281. data/src/core/lib/surface/channel.h +45 -35
  1282. data/src/core/lib/surface/channel_init.cc +17 -17
  1283. data/src/core/lib/surface/channel_init.h +20 -20
  1284. data/src/core/lib/surface/channel_ping.cc +20 -20
  1285. data/src/core/lib/surface/channel_stack_type.cc +21 -17
  1286. data/src/core/lib/surface/channel_stack_type.h +22 -20
  1287. data/src/core/lib/surface/completion_queue.cc +188 -218
  1288. data/src/core/lib/surface/completion_queue.h +39 -41
  1289. data/src/core/lib/surface/completion_queue_factory.cc +33 -28
  1290. data/src/core/lib/surface/completion_queue_factory.h +22 -22
  1291. data/src/core/lib/surface/event_string.cc +18 -17
  1292. data/src/core/lib/surface/event_string.h +22 -22
  1293. data/src/core/lib/surface/init.cc +44 -73
  1294. data/src/core/lib/surface/init.h +20 -20
  1295. data/src/core/lib/surface/init_internally.cc +25 -0
  1296. data/src/core/lib/surface/init_internally.h +37 -0
  1297. data/src/core/lib/surface/lame_client.cc +33 -30
  1298. data/src/core/lib/surface/lame_client.h +23 -23
  1299. data/src/core/lib/surface/metadata_array.cc +17 -18
  1300. data/src/core/lib/surface/server.cc +349 -130
  1301. data/src/core/lib/surface/server.h +24 -22
  1302. data/src/core/lib/surface/validate_metadata.cc +32 -43
  1303. data/src/core/lib/surface/validate_metadata.h +21 -21
  1304. data/src/core/lib/surface/version.cc +21 -21
  1305. data/src/core/lib/transport/bdp_estimator.cc +18 -20
  1306. data/src/core/lib/transport/bdp_estimator.h +21 -22
  1307. data/src/core/lib/transport/connectivity_state.cc +19 -20
  1308. data/src/core/lib/transport/connectivity_state.h +23 -23
  1309. data/src/core/lib/transport/error_utils.cc +54 -78
  1310. data/src/core/lib/transport/error_utils.h +24 -24
  1311. data/src/core/lib/transport/handshaker.cc +66 -54
  1312. data/src/core/lib/transport/handshaker.h +51 -47
  1313. data/src/core/lib/transport/handshaker_factory.h +49 -24
  1314. data/src/core/lib/transport/handshaker_registry.cc +27 -20
  1315. data/src/core/lib/transport/handshaker_registry.h +25 -28
  1316. data/src/core/lib/transport/http2_errors.h +22 -22
  1317. data/src/core/lib/transport/http_connect_handshaker.cc +56 -57
  1318. data/src/core/lib/transport/http_connect_handshaker.h +21 -21
  1319. data/src/core/lib/transport/metadata_batch.cc +22 -4
  1320. data/src/core/lib/transport/metadata_batch.h +129 -35
  1321. data/src/core/lib/transport/parsed_metadata.cc +2 -6
  1322. data/src/core/lib/transport/parsed_metadata.h +7 -5
  1323. data/src/core/lib/transport/pid_controller.cc +20 -20
  1324. data/src/core/lib/transport/pid_controller.h +27 -27
  1325. data/src/core/lib/transport/status_conversion.cc +23 -25
  1326. data/src/core/lib/transport/status_conversion.h +22 -22
  1327. data/src/core/lib/transport/tcp_connect_handshaker.cc +34 -42
  1328. data/src/core/lib/transport/tcp_connect_handshaker.h +3 -3
  1329. data/src/core/lib/transport/timeout_encoding.cc +22 -22
  1330. data/src/core/lib/transport/timeout_encoding.h +20 -20
  1331. data/src/core/lib/transport/transport.cc +85 -46
  1332. data/src/core/lib/transport/transport.h +219 -215
  1333. data/src/core/lib/transport/transport_fwd.h +20 -0
  1334. data/src/core/lib/transport/transport_impl.h +46 -46
  1335. data/src/core/lib/transport/transport_op_string.cc +32 -30
  1336. data/src/core/lib/uri/uri_parser.cc +1 -1
  1337. data/src/core/lib/uri/uri_parser.h +3 -3
  1338. data/src/core/plugin_registry/grpc_plugin_registry.cc +53 -73
  1339. data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +20 -39
  1340. data/src/core/tsi/alts/crypt/aes_gcm.cc +20 -20
  1341. data/src/core/tsi/alts/crypt/gsec.cc +26 -26
  1342. data/src/core/tsi/alts/crypt/gsec.h +336 -336
  1343. data/src/core/tsi/alts/frame_protector/alts_counter.cc +23 -23
  1344. data/src/core/tsi/alts/frame_protector/alts_counter.h +68 -68
  1345. data/src/core/tsi/alts/frame_protector/alts_crypter.cc +19 -19
  1346. data/src/core/tsi/alts/frame_protector/alts_crypter.h +209 -209
  1347. data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +72 -71
  1348. data/src/core/tsi/alts/frame_protector/alts_frame_protector.h +40 -40
  1349. data/src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.cc +18 -18
  1350. data/src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.h +82 -83
  1351. data/src/core/tsi/alts/frame_protector/alts_seal_privacy_integrity_crypter.cc +22 -22
  1352. data/src/core/tsi/alts/frame_protector/alts_unseal_privacy_integrity_crypter.cc +22 -22
  1353. data/src/core/tsi/alts/frame_protector/frame_handler.cc +26 -25
  1354. data/src/core/tsi/alts/frame_protector/frame_handler.h +169 -169
  1355. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +117 -97
  1356. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +104 -104
  1357. data/src/core/tsi/alts/handshaker/alts_shared_resource.cc +18 -17
  1358. data/src/core/tsi/alts/handshaker/alts_shared_resource.h +43 -44
  1359. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +51 -43
  1360. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +60 -60
  1361. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +24 -24
  1362. data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +21 -20
  1363. data/src/core/tsi/alts/handshaker/alts_tsi_utils.h +38 -38
  1364. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +19 -19
  1365. data/src/core/tsi/alts/handshaker/transport_security_common_api.h +105 -104
  1366. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +45 -44
  1367. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.h +40 -41
  1368. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.cc +38 -36
  1369. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.h +35 -36
  1370. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol.h +67 -68
  1371. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +32 -31
  1372. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.h +55 -56
  1373. data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.cc +54 -53
  1374. data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.h +141 -142
  1375. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +67 -58
  1376. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.h +43 -44
  1377. data/src/core/tsi/fake_transport_security.cc +146 -110
  1378. data/src/core/tsi/fake_transport_security.h +36 -30
  1379. data/src/core/tsi/local_transport_security.cc +43 -38
  1380. data/src/core/tsi/local_transport_security.h +33 -33
  1381. data/src/core/tsi/ssl/key_logging/ssl_key_logging.cc +9 -4
  1382. data/src/core/tsi/ssl/key_logging/ssl_key_logging.h +3 -3
  1383. data/src/core/tsi/ssl/session_cache/ssl_session.h +21 -21
  1384. data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +19 -19
  1385. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +18 -17
  1386. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +31 -22
  1387. data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +25 -20
  1388. data/src/core/tsi/ssl_transport_security.cc +299 -370
  1389. data/src/core/tsi/ssl_transport_security.h +206 -203
  1390. data/src/core/tsi/ssl_transport_security_utils.cc +250 -0
  1391. data/src/core/tsi/ssl_transport_security_utils.h +147 -0
  1392. data/src/core/tsi/ssl_types.h +27 -27
  1393. data/src/core/tsi/transport_security.cc +44 -32
  1394. data/src/core/tsi/transport_security.h +49 -48
  1395. data/src/core/tsi/transport_security_grpc.cc +23 -22
  1396. data/src/core/tsi/transport_security_grpc.h +44 -41
  1397. data/src/core/tsi/transport_security_interface.h +344 -332
  1398. data/src/ruby/ext/grpc/ext-export-truffleruby-with-ruby-abi-version.clang +2 -0
  1399. data/src/ruby/ext/grpc/ext-export-truffleruby-with-ruby-abi-version.gcc +7 -0
  1400. data/src/ruby/ext/grpc/ext-export-with-ruby-abi-version.clang +2 -0
  1401. data/src/ruby/ext/grpc/ext-export-with-ruby-abi-version.gcc +7 -0
  1402. data/src/ruby/ext/grpc/ext-export.gcc +1 -1
  1403. data/src/ruby/ext/grpc/extconf.rb +97 -19
  1404. data/src/ruby/ext/grpc/rb_call.c +1 -0
  1405. data/src/ruby/ext/grpc/rb_channel.c +1 -0
  1406. data/src/ruby/ext/grpc/rb_channel_args.c +1 -0
  1407. data/src/ruby/ext/grpc/rb_compression_options.c +1 -1
  1408. data/src/ruby/ext/grpc/rb_grpc.c +1 -0
  1409. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +38 -38
  1410. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +60 -60
  1411. data/src/ruby/ext/grpc/rb_loader.c +6 -2
  1412. data/src/ruby/lib/grpc/errors.rb +1 -1
  1413. data/src/ruby/lib/grpc/generic/bidi_call.rb +2 -0
  1414. data/src/ruby/lib/grpc/version.rb +1 -1
  1415. data/src/ruby/pb/generate_proto_ruby.sh +0 -6
  1416. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +4 -0
  1417. data/src/ruby/spec/channel_spec.rb +5 -43
  1418. data/src/ruby/spec/client_server_spec.rb +20 -8
  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 +57 -58
  1424. data/third_party/abseil-cpp/absl/base/attributes.h +88 -41
  1425. data/third_party/abseil-cpp/absl/base/casts.h +61 -68
  1426. data/third_party/abseil-cpp/absl/base/config.h +221 -39
  1427. data/third_party/abseil-cpp/absl/base/internal/cycleclock.cc +12 -42
  1428. data/third_party/abseil-cpp/absl/base/internal/cycleclock.h +52 -2
  1429. data/third_party/abseil-cpp/absl/base/internal/cycleclock_config.h +55 -0
  1430. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +5 -4
  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 +2 -0
  1433. data/third_party/abseil-cpp/absl/base/internal/inline_variable.h +3 -3
  1434. data/third_party/abseil-cpp/absl/base/internal/invoke.h +54 -0
  1435. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +2 -2
  1436. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.h +1 -1
  1437. data/third_party/abseil-cpp/absl/base/internal/prefetch.h +138 -0
  1438. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +39 -28
  1439. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +36 -36
  1440. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +6 -3
  1441. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +10 -6
  1442. data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +2 -5
  1443. data/third_party/abseil-cpp/absl/base/internal/spinlock_win32.inc +4 -1
  1444. data/third_party/abseil-cpp/absl/base/internal/strerror.cc +88 -0
  1445. data/third_party/abseil-cpp/absl/base/internal/strerror.h +39 -0
  1446. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +14 -11
  1447. data/third_party/abseil-cpp/absl/base/internal/thread_annotations.h +9 -0
  1448. data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +2 -1
  1449. data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +4 -0
  1450. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +6 -7
  1451. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +12 -40
  1452. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock_config.h +62 -0
  1453. data/third_party/abseil-cpp/absl/base/log_severity.cc +28 -0
  1454. data/third_party/abseil-cpp/absl/base/log_severity.h +51 -0
  1455. data/third_party/abseil-cpp/absl/base/macros.h +4 -21
  1456. data/third_party/abseil-cpp/absl/base/optimization.h +76 -16
  1457. data/third_party/abseil-cpp/absl/base/options.h +1 -7
  1458. data/third_party/abseil-cpp/absl/base/policy_checks.h +15 -13
  1459. data/third_party/abseil-cpp/absl/base/thread_annotations.h +2 -2
  1460. data/third_party/abseil-cpp/absl/container/fixed_array.h +9 -5
  1461. data/third_party/abseil-cpp/absl/container/flat_hash_map.h +11 -4
  1462. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +15 -16
  1463. data/third_party/abseil-cpp/absl/container/inlined_vector.h +84 -25
  1464. data/third_party/abseil-cpp/absl/container/internal/common.h +9 -8
  1465. data/third_party/abseil-cpp/absl/container/internal/common_policy_traits.h +132 -0
  1466. data/third_party/abseil-cpp/absl/container/internal/container_memory.h +23 -29
  1467. data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +4 -55
  1468. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +116 -23
  1469. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +40 -54
  1470. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +165 -66
  1471. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +159 -4
  1472. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +1121 -470
  1473. data/third_party/abseil-cpp/absl/crc/crc32c.cc +99 -0
  1474. data/third_party/abseil-cpp/absl/crc/crc32c.h +183 -0
  1475. data/third_party/abseil-cpp/absl/crc/internal/cpu_detect.cc +256 -0
  1476. data/third_party/abseil-cpp/absl/crc/internal/cpu_detect.h +57 -0
  1477. data/third_party/abseil-cpp/absl/crc/internal/crc.cc +468 -0
  1478. data/third_party/abseil-cpp/absl/crc/internal/crc.h +91 -0
  1479. data/third_party/abseil-cpp/absl/crc/internal/crc32_x86_arm_combined_simd.h +269 -0
  1480. data/third_party/abseil-cpp/absl/crc/internal/crc32c.h +39 -0
  1481. data/third_party/abseil-cpp/absl/crc/internal/crc32c_inline.h +72 -0
  1482. data/third_party/abseil-cpp/absl/crc/internal/crc_cord_state.cc +130 -0
  1483. data/third_party/abseil-cpp/absl/crc/internal/crc_cord_state.h +159 -0
  1484. data/third_party/abseil-cpp/absl/crc/internal/crc_internal.h +179 -0
  1485. data/third_party/abseil-cpp/absl/crc/internal/crc_memcpy.h +119 -0
  1486. data/third_party/abseil-cpp/absl/crc/internal/crc_memcpy_fallback.cc +75 -0
  1487. data/third_party/abseil-cpp/absl/crc/internal/crc_memcpy_x86_64.cc +434 -0
  1488. data/third_party/abseil-cpp/absl/crc/internal/crc_non_temporal_memcpy.cc +93 -0
  1489. data/third_party/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +725 -0
  1490. data/third_party/abseil-cpp/absl/crc/internal/non_temporal_arm_intrinsics.h +79 -0
  1491. data/third_party/abseil-cpp/absl/crc/internal/non_temporal_memcpy.h +180 -0
  1492. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +45 -88
  1493. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +67 -38
  1494. data/third_party/abseil-cpp/absl/debugging/internal/demangle.h +1 -1
  1495. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +16 -13
  1496. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +3 -2
  1497. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +19 -12
  1498. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +8 -3
  1499. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +2 -1
  1500. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +1 -1
  1501. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +8 -3
  1502. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +59 -102
  1503. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +5 -4
  1504. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +41 -11
  1505. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +18 -4
  1506. data/third_party/abseil-cpp/absl/debugging/symbolize.cc +6 -1
  1507. data/third_party/abseil-cpp/absl/debugging/symbolize_darwin.inc +3 -2
  1508. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +164 -101
  1509. data/third_party/abseil-cpp/absl/debugging/symbolize_win32.inc +7 -6
  1510. data/third_party/abseil-cpp/absl/functional/any_invocable.h +316 -0
  1511. data/third_party/abseil-cpp/absl/functional/bind_front.h +10 -1
  1512. data/third_party/abseil-cpp/absl/functional/function_ref.h +2 -1
  1513. data/third_party/abseil-cpp/absl/functional/internal/any_invocable.h +878 -0
  1514. data/third_party/abseil-cpp/absl/hash/hash.h +82 -8
  1515. data/third_party/abseil-cpp/absl/hash/internal/city.cc +10 -10
  1516. data/third_party/abseil-cpp/absl/hash/internal/hash.h +235 -26
  1517. data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.cc +3 -14
  1518. data/third_party/abseil-cpp/absl/memory/memory.h +26 -447
  1519. data/third_party/abseil-cpp/absl/meta/type_traits.h +104 -12
  1520. data/third_party/abseil-cpp/absl/numeric/bits.h +1 -1
  1521. data/third_party/abseil-cpp/absl/numeric/int128.cc +14 -10
  1522. data/third_party/abseil-cpp/absl/numeric/int128.h +2 -2
  1523. data/third_party/abseil-cpp/absl/profiling/internal/sample_recorder.h +33 -10
  1524. data/third_party/abseil-cpp/absl/random/bernoulli_distribution.h +4 -4
  1525. data/third_party/abseil-cpp/absl/random/distributions.h +3 -3
  1526. data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +3 -0
  1527. data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +4 -2
  1528. data/third_party/abseil-cpp/absl/random/internal/generate_real.h +2 -2
  1529. data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +59 -48
  1530. data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +3 -24
  1531. data/third_party/abseil-cpp/absl/random/internal/pool_urbg.cc +9 -9
  1532. data/third_party/abseil-cpp/absl/random/internal/randen.h +5 -11
  1533. data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +6 -2
  1534. data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +48 -23
  1535. data/third_party/abseil-cpp/absl/random/internal/salted_seed_seq.h +24 -26
  1536. data/third_party/abseil-cpp/absl/random/internal/seed_material.cc +2 -2
  1537. data/third_party/abseil-cpp/absl/random/internal/traits.h +53 -5
  1538. data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +5 -5
  1539. data/third_party/abseil-cpp/absl/random/internal/wide_multiply.h +33 -48
  1540. data/third_party/abseil-cpp/absl/random/log_uniform_int_distribution.h +9 -10
  1541. data/third_party/abseil-cpp/absl/random/poisson_distribution.h +7 -4
  1542. data/third_party/abseil-cpp/absl/random/random.h +6 -6
  1543. data/third_party/abseil-cpp/absl/random/seed_sequences.h +1 -0
  1544. data/third_party/abseil-cpp/absl/random/uniform_int_distribution.h +2 -2
  1545. data/third_party/abseil-cpp/absl/random/uniform_real_distribution.h +1 -1
  1546. data/third_party/abseil-cpp/absl/random/zipf_distribution.h +4 -3
  1547. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +18 -0
  1548. data/third_party/abseil-cpp/absl/status/status.cc +193 -14
  1549. data/third_party/abseil-cpp/absl/status/status.h +24 -14
  1550. data/third_party/abseil-cpp/absl/status/statusor.h +9 -3
  1551. data/third_party/abseil-cpp/absl/strings/ascii.cc +5 -5
  1552. data/third_party/abseil-cpp/absl/strings/ascii.h +4 -4
  1553. data/third_party/abseil-cpp/absl/strings/charconv.cc +534 -96
  1554. data/third_party/abseil-cpp/absl/strings/cord.cc +257 -924
  1555. data/third_party/abseil-cpp/absl/strings/cord.h +268 -156
  1556. data/third_party/abseil-cpp/absl/strings/cord_analysis.cc +188 -0
  1557. data/third_party/abseil-cpp/absl/strings/cord_analysis.h +44 -0
  1558. data/third_party/abseil-cpp/absl/strings/cord_buffer.cc +30 -0
  1559. data/third_party/abseil-cpp/absl/strings/cord_buffer.h +575 -0
  1560. data/third_party/abseil-cpp/absl/strings/escaping.cc +73 -62
  1561. data/third_party/abseil-cpp/absl/strings/escaping.h +24 -19
  1562. data/third_party/abseil-cpp/absl/strings/internal/char_map.h +14 -12
  1563. data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.cc +4 -4
  1564. data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +2 -2
  1565. data/third_party/abseil-cpp/absl/strings/internal/cord_data_edge.h +63 -0
  1566. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +20 -32
  1567. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +441 -150
  1568. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +157 -53
  1569. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.h +70 -73
  1570. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.cc +8 -6
  1571. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.h +4 -2
  1572. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.cc +3 -2
  1573. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.h +5 -4
  1574. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.cc +7 -74
  1575. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.cc +56 -0
  1576. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.h +103 -0
  1577. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +58 -17
  1578. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +13 -11
  1579. data/third_party/abseil-cpp/absl/strings/internal/cordz_functions.h +7 -15
  1580. data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.h +3 -3
  1581. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +19 -43
  1582. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.h +7 -7
  1583. data/third_party/abseil-cpp/absl/strings/internal/cordz_statistics.h +5 -4
  1584. data/third_party/abseil-cpp/absl/strings/internal/cordz_update_tracker.h +4 -2
  1585. data/third_party/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.cc +93 -0
  1586. data/third_party/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.h +34 -0
  1587. data/third_party/abseil-cpp/absl/strings/internal/escaping.cc +18 -15
  1588. data/third_party/abseil-cpp/absl/strings/internal/escaping.h +7 -9
  1589. data/third_party/abseil-cpp/absl/strings/internal/has_absl_stringify.h +55 -0
  1590. data/third_party/abseil-cpp/absl/strings/internal/memutil.cc +9 -6
  1591. data/third_party/abseil-cpp/absl/strings/internal/ostringstream.cc +14 -7
  1592. data/third_party/abseil-cpp/absl/strings/internal/ostringstream.h +35 -10
  1593. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +113 -46
  1594. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +127 -30
  1595. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +3 -2
  1596. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +42 -10
  1597. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +56 -289
  1598. data/third_party/abseil-cpp/absl/strings/internal/str_format/constexpr_parser.h +351 -0
  1599. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +6 -6
  1600. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +9 -4
  1601. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +215 -181
  1602. data/third_party/abseil-cpp/absl/strings/internal/str_format/output.h +2 -1
  1603. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +10 -209
  1604. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +14 -103
  1605. data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +9 -6
  1606. data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +2 -1
  1607. data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +10 -2
  1608. data/third_party/abseil-cpp/absl/strings/internal/stringify_sink.cc +28 -0
  1609. data/third_party/abseil-cpp/absl/strings/internal/stringify_sink.h +57 -0
  1610. data/third_party/abseil-cpp/absl/strings/internal/utf8.cc +9 -9
  1611. data/third_party/abseil-cpp/absl/strings/numbers.cc +42 -39
  1612. data/third_party/abseil-cpp/absl/strings/numbers.h +26 -23
  1613. data/third_party/abseil-cpp/absl/strings/str_cat.cc +9 -6
  1614. data/third_party/abseil-cpp/absl/strings/str_cat.h +70 -16
  1615. data/third_party/abseil-cpp/absl/strings/str_format.h +71 -9
  1616. data/third_party/abseil-cpp/absl/strings/str_join.h +9 -15
  1617. data/third_party/abseil-cpp/absl/strings/str_split.h +1 -2
  1618. data/third_party/abseil-cpp/absl/strings/string_view.cc +8 -19
  1619. data/third_party/abseil-cpp/absl/strings/string_view.h +6 -12
  1620. data/third_party/abseil-cpp/absl/strings/strip.h +8 -6
  1621. data/third_party/abseil-cpp/absl/strings/substitute.cc +8 -6
  1622. data/third_party/abseil-cpp/absl/strings/substitute.h +55 -21
  1623. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +9 -6
  1624. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.h +0 -4
  1625. data/third_party/abseil-cpp/absl/synchronization/internal/futex.h +20 -17
  1626. data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +37 -31
  1627. data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +22 -8
  1628. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +0 -4
  1629. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +1 -6
  1630. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +0 -25
  1631. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +10 -4
  1632. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +172 -88
  1633. data/third_party/abseil-cpp/absl/synchronization/mutex.h +102 -55
  1634. data/third_party/abseil-cpp/absl/synchronization/notification.cc +0 -1
  1635. data/third_party/abseil-cpp/absl/synchronization/notification.h +3 -3
  1636. data/third_party/abseil-cpp/absl/time/civil_time.cc +26 -0
  1637. data/third_party/abseil-cpp/absl/time/civil_time.h +25 -0
  1638. data/third_party/abseil-cpp/absl/time/clock.cc +17 -11
  1639. data/third_party/abseil-cpp/absl/time/duration.cc +12 -11
  1640. data/third_party/abseil-cpp/absl/time/format.cc +2 -1
  1641. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +11 -7
  1642. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +1 -1
  1643. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +26 -5
  1644. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +7 -6
  1645. data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +36 -35
  1646. data/third_party/abseil-cpp/absl/time/time.cc +2 -2
  1647. data/third_party/abseil-cpp/absl/time/time.h +268 -169
  1648. data/third_party/abseil-cpp/absl/types/internal/optional.h +8 -0
  1649. data/third_party/abseil-cpp/absl/types/internal/span.h +30 -19
  1650. data/third_party/abseil-cpp/absl/types/internal/variant.h +28 -40
  1651. data/third_party/abseil-cpp/absl/types/optional.h +17 -14
  1652. data/third_party/abseil-cpp/absl/types/span.h +31 -8
  1653. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_genn.c +1 -1
  1654. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +1 -2
  1655. data/third_party/re2/re2/bitstate.cc +3 -3
  1656. data/third_party/re2/re2/dfa.cc +13 -13
  1657. data/third_party/re2/re2/nfa.cc +4 -4
  1658. data/third_party/re2/re2/onepass.cc +2 -2
  1659. data/third_party/re2/re2/prefilter_tree.cc +27 -59
  1660. data/third_party/re2/re2/prefilter_tree.h +3 -2
  1661. data/third_party/re2/re2/prog.cc +11 -2
  1662. data/third_party/re2/re2/prog.h +17 -5
  1663. data/third_party/re2/re2/re2.cc +6 -11
  1664. data/third_party/re2/re2/re2.h +1 -1
  1665. data/third_party/re2/re2/regexp.cc +1 -2
  1666. data/third_party/re2/re2/stringpiece.h +10 -7
  1667. data/third_party/re2/re2/unicode_casefold.cc +25 -11
  1668. data/third_party/re2/re2/unicode_groups.cc +319 -151
  1669. data/third_party/re2/re2/walker-inl.h +3 -2
  1670. data/third_party/re2/util/mutex.h +4 -4
  1671. data/third_party/upb/third_party/utf8_range/utf8_range.h +1 -1
  1672. data/third_party/upb/upb/arena.c +277 -0
  1673. data/third_party/upb/upb/arena.h +225 -0
  1674. data/third_party/upb/upb/array.c +114 -0
  1675. data/third_party/upb/upb/array.h +83 -0
  1676. data/third_party/upb/upb/collections.h +36 -0
  1677. data/third_party/upb/upb/decode.c +161 -65
  1678. data/third_party/upb/upb/decode.h +1 -0
  1679. data/third_party/upb/upb/decode_fast.c +1 -1
  1680. data/third_party/upb/upb/def.c +10 -2
  1681. data/third_party/upb/upb/def.h +8 -1
  1682. data/third_party/upb/upb/def.hpp +7 -4
  1683. data/third_party/upb/upb/encode.c +29 -20
  1684. data/third_party/upb/upb/encode.h +16 -6
  1685. data/third_party/upb/upb/extension_registry.c +93 -0
  1686. data/third_party/upb/upb/extension_registry.h +84 -0
  1687. data/third_party/upb/upb/{decode_internal.h → internal/decode.h} +5 -5
  1688. data/third_party/upb/upb/internal/table.h +385 -0
  1689. data/third_party/upb/upb/{upb_internal.h → internal/upb.h} +3 -3
  1690. data/third_party/upb/upb/internal/vsnprintf_compat.h +52 -0
  1691. data/third_party/upb/upb/json_decode.c +1512 -0
  1692. data/third_party/upb/upb/json_decode.h +47 -0
  1693. data/third_party/upb/upb/json_encode.c +7 -3
  1694. data/third_party/upb/upb/json_encode.h +6 -3
  1695. data/third_party/upb/upb/map.c +108 -0
  1696. data/third_party/upb/upb/map.h +117 -0
  1697. data/third_party/upb/upb/message_value.h +66 -0
  1698. data/third_party/upb/upb/mini_table.c +1147 -0
  1699. data/third_party/upb/upb/mini_table.h +189 -0
  1700. data/third_party/upb/upb/mini_table.hpp +112 -0
  1701. data/third_party/upb/upb/msg.c +2 -62
  1702. data/third_party/upb/upb/msg.h +2 -45
  1703. data/third_party/upb/upb/msg_internal.h +28 -22
  1704. data/third_party/upb/upb/port_def.inc +2 -1
  1705. data/third_party/upb/upb/port_undef.inc +1 -0
  1706. data/third_party/upb/upb/reflection.c +2 -159
  1707. data/third_party/upb/upb/reflection.h +2 -112
  1708. data/third_party/upb/upb/status.c +86 -0
  1709. data/third_party/upb/upb/status.h +66 -0
  1710. data/third_party/upb/upb/table.c +2 -2
  1711. data/third_party/upb/upb/table_internal.h +3 -352
  1712. data/third_party/upb/upb/text_encode.c +3 -2
  1713. data/third_party/upb/upb/upb.c +4 -290
  1714. data/third_party/upb/upb/upb.h +7 -196
  1715. data/third_party/zlib/compress.c +3 -3
  1716. data/third_party/zlib/crc32.c +21 -12
  1717. data/third_party/zlib/deflate.c +112 -106
  1718. data/third_party/zlib/deflate.h +2 -2
  1719. data/third_party/zlib/gzlib.c +1 -1
  1720. data/third_party/zlib/gzread.c +3 -5
  1721. data/third_party/zlib/gzwrite.c +1 -1
  1722. data/third_party/zlib/infback.c +10 -7
  1723. data/third_party/zlib/inflate.c +5 -2
  1724. data/third_party/zlib/inftrees.c +2 -2
  1725. data/third_party/zlib/inftrees.h +1 -1
  1726. data/third_party/zlib/trees.c +61 -62
  1727. data/third_party/zlib/uncompr.c +2 -2
  1728. data/third_party/zlib/zconf.h +16 -3
  1729. data/third_party/zlib/zlib.h +10 -10
  1730. data/third_party/zlib/zutil.c +9 -7
  1731. data/third_party/zlib/zutil.h +1 -0
  1732. metadata +339 -78
  1733. data/include/grpc/impl/codegen/gpr_slice.h +0 -71
  1734. data/src/core/ext/filters/client_channel/lb_policy_factory.h +0 -50
  1735. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +0 -192
  1736. data/src/core/ext/filters/client_channel/lb_policy_registry.h +0 -70
  1737. data/src/core/ext/filters/client_channel/proxy_mapper.h +0 -54
  1738. data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +0 -91
  1739. data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +0 -55
  1740. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +0 -180
  1741. data/src/core/ext/filters/fault_injection/service_config_parser.cc +0 -179
  1742. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +0 -457
  1743. data/src/core/ext/filters/http/message_compress/message_compress_filter.h +0 -53
  1744. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +0 -388
  1745. data/src/core/ext/filters/server_config_selector/server_config_selector.cc +0 -61
  1746. data/src/core/ext/xds/certificate_provider_registry.cc +0 -103
  1747. data/src/core/ext/xds/certificate_provider_registry.h +0 -57
  1748. data/src/core/lib/event_engine/iomgr_engine.cc +0 -206
  1749. data/src/core/lib/event_engine/iomgr_engine.h +0 -118
  1750. data/src/core/lib/gpr/env.h +0 -40
  1751. data/src/core/lib/gpr/env_linux.cc +0 -75
  1752. data/src/core/lib/gpr/env_posix.cc +0 -46
  1753. data/src/core/lib/gpr/env_windows.cc +0 -74
  1754. data/src/core/lib/gpr/murmur_hash.cc +0 -82
  1755. data/src/core/lib/gpr/murmur_hash.h +0 -29
  1756. data/src/core/lib/gpr/string_windows.h +0 -32
  1757. data/src/core/lib/gpr/tls.h +0 -156
  1758. data/src/core/lib/iomgr/error_internal.h +0 -66
  1759. data/src/core/lib/iomgr/executor/mpmcqueue.cc +0 -182
  1760. data/src/core/lib/iomgr/executor/mpmcqueue.h +0 -171
  1761. data/src/core/lib/iomgr/executor/threadpool.cc +0 -136
  1762. data/src/core/lib/iomgr/executor/threadpool.h +0 -150
  1763. data/src/core/lib/iomgr/time_averaged_stats.cc +0 -64
  1764. data/src/core/lib/iomgr/time_averaged_stats.h +0 -72
  1765. data/src/core/lib/profiling/basic_timers.cc +0 -295
  1766. data/src/core/lib/profiling/stap_timers.cc +0 -50
  1767. data/src/core/lib/profiling/timers.h +0 -94
  1768. data/src/core/lib/promise/call_push_pull.h +0 -148
  1769. data/src/core/lib/security/security_connector/load_system_roots_linux.h +0 -46
  1770. data/src/core/lib/slice/slice_api.cc +0 -39
  1771. data/src/core/lib/slice/slice_buffer_api.cc +0 -35
  1772. data/src/core/lib/slice/slice_refcount_base.h +0 -60
  1773. data/src/core/lib/slice/slice_split.cc +0 -103
  1774. data/src/core/lib/slice/slice_split.h +0 -36
  1775. data/src/core/lib/transport/byte_stream.cc +0 -165
  1776. data/src/core/lib/transport/byte_stream.h +0 -170
  1777. data/third_party/abseil-cpp/absl/container/internal/have_sse.h +0 -50
@@ -53,22 +53,23 @@
53
53
 
54
54
  #include "src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h"
55
55
 
56
+ #include <grpc/event_engine/event_engine.h>
57
+
56
58
  // IWYU pragma: no_include <sys/socket.h>
57
59
 
58
60
  #include <inttypes.h>
59
- #include <limits.h>
60
- #include <stdlib.h>
61
61
  #include <string.h>
62
62
 
63
63
  #include <algorithm>
64
+ #include <initializer_list>
64
65
  #include <map>
65
66
  #include <memory>
66
67
  #include <string>
68
+ #include <type_traits>
67
69
  #include <utility>
68
70
  #include <vector>
69
71
 
70
72
  #include "absl/container/inlined_vector.h"
71
- #include "absl/memory/memory.h"
72
73
  #include "absl/status/status.h"
73
74
  #include "absl/status/statusor.h"
74
75
  #include "absl/strings/str_cat.h"
@@ -83,25 +84,20 @@
83
84
  #include <grpc/byte_buffer.h>
84
85
  #include <grpc/byte_buffer_reader.h>
85
86
  #include <grpc/grpc.h>
86
- #include <grpc/impl/codegen/connectivity_state.h>
87
- #include <grpc/impl/codegen/grpc_types.h>
88
- #include <grpc/impl/codegen/propagation_bits.h>
87
+ #include <grpc/impl/connectivity_state.h>
88
+ #include <grpc/impl/propagation_bits.h>
89
89
  #include <grpc/slice.h>
90
90
  #include <grpc/status.h>
91
91
  #include <grpc/support/alloc.h>
92
92
  #include <grpc/support/log.h>
93
93
 
94
94
  #include "src/core/ext/filters/client_channel/client_channel.h"
95
- #include "src/core/ext/filters/client_channel/lb_policy.h"
96
95
  #include "src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h"
97
96
  #include "src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h"
98
97
  #include "src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h"
99
98
  #include "src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h"
100
99
  #include "src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h"
101
- #include "src/core/ext/filters/client_channel/lb_policy_factory.h"
102
- #include "src/core/ext/filters/client_channel/lb_policy_registry.h"
103
100
  #include "src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h"
104
- #include "src/core/ext/filters/client_channel/subchannel_interface.h"
105
101
  #include "src/core/lib/address_utils/sockaddr_utils.h"
106
102
  #include "src/core/lib/backoff/backoff.h"
107
103
  #include "src/core/lib/channel/channel_args.h"
@@ -111,11 +107,15 @@
111
107
  #include "src/core/lib/debug/trace.h"
112
108
  #include "src/core/lib/gpr/string.h"
113
109
  #include "src/core/lib/gpr/useful.h"
110
+ #include "src/core/lib/gprpp/crash.h"
114
111
  #include "src/core/lib/gprpp/debug_location.h"
115
112
  #include "src/core/lib/gprpp/orphanable.h"
116
113
  #include "src/core/lib/gprpp/ref_counted.h"
117
114
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
115
+ #include "src/core/lib/gprpp/status_helper.h"
118
116
  #include "src/core/lib/gprpp/time.h"
117
+ #include "src/core/lib/gprpp/validation_errors.h"
118
+ #include "src/core/lib/gprpp/work_serializer.h"
119
119
  #include "src/core/lib/iomgr/closure.h"
120
120
  #include "src/core/lib/iomgr/error.h"
121
121
  #include "src/core/lib/iomgr/exec_ctx.h"
@@ -123,14 +123,17 @@
123
123
  #include "src/core/lib/iomgr/resolved_address.h"
124
124
  #include "src/core/lib/iomgr/sockaddr.h"
125
125
  #include "src/core/lib/iomgr/socket_utils.h"
126
- #include "src/core/lib/iomgr/timer.h"
127
- #include "src/core/lib/iomgr/work_serializer.h"
128
126
  #include "src/core/lib/json/json.h"
127
+ #include "src/core/lib/json/json_args.h"
128
+ #include "src/core/lib/json/json_object_loader.h"
129
+ #include "src/core/lib/load_balancing/lb_policy.h"
130
+ #include "src/core/lib/load_balancing/lb_policy_factory.h"
131
+ #include "src/core/lib/load_balancing/lb_policy_registry.h"
132
+ #include "src/core/lib/load_balancing/subchannel_interface.h"
129
133
  #include "src/core/lib/resolver/resolver.h"
130
134
  #include "src/core/lib/resolver/server_address.h"
131
135
  #include "src/core/lib/security/credentials/credentials.h"
132
136
  #include "src/core/lib/slice/slice.h"
133
- #include "src/core/lib/slice/slice_refcount.h"
134
137
  #include "src/core/lib/slice/slice_string_helpers.h"
135
138
  #include "src/core/lib/surface/call.h"
136
139
  #include "src/core/lib/surface/channel.h"
@@ -155,15 +158,55 @@ const char kGrpcLbAddressAttributeKey[] = "grpclb";
155
158
 
156
159
  namespace {
157
160
 
158
- constexpr char kGrpclb[] = "grpclb";
161
+ using ::grpc_event_engine::experimental::EventEngine;
162
+
163
+ constexpr absl::string_view kGrpclb = "grpclb";
159
164
 
160
165
  class GrpcLbConfig : public LoadBalancingPolicy::Config {
161
166
  public:
162
- GrpcLbConfig(RefCountedPtr<LoadBalancingPolicy::Config> child_policy,
163
- std::string service_name)
164
- : child_policy_(std::move(child_policy)),
165
- service_name_(std::move(service_name)) {}
166
- const char* name() const override { return kGrpclb; }
167
+ GrpcLbConfig() = default;
168
+
169
+ GrpcLbConfig(const GrpcLbConfig&) = delete;
170
+ GrpcLbConfig& operator=(const GrpcLbConfig&) = delete;
171
+
172
+ GrpcLbConfig(GrpcLbConfig&& other) = delete;
173
+ GrpcLbConfig& operator=(GrpcLbConfig&& other) = delete;
174
+
175
+ static const JsonLoaderInterface* JsonLoader(const JsonArgs&) {
176
+ static const auto* loader =
177
+ JsonObjectLoader<GrpcLbConfig>()
178
+ // Note: "childPolicy" field requires custom parsing, so
179
+ // it's handled in JsonPostLoad() instead.
180
+ .OptionalField("serviceName", &GrpcLbConfig::service_name_)
181
+ .Finish();
182
+ return loader;
183
+ }
184
+
185
+ void JsonPostLoad(const Json& json, const JsonArgs&,
186
+ ValidationErrors* errors) {
187
+ ValidationErrors::ScopedField field(errors, ".childPolicy");
188
+ Json child_policy_config_json_tmp;
189
+ const Json* child_policy_config_json;
190
+ auto it = json.object_value().find("childPolicy");
191
+ if (it == json.object_value().end()) {
192
+ child_policy_config_json_tmp = Json::Array{Json::Object{
193
+ {"round_robin", Json::Object()},
194
+ }};
195
+ child_policy_config_json = &child_policy_config_json_tmp;
196
+ } else {
197
+ child_policy_config_json = &it->second;
198
+ }
199
+ auto child_policy_config =
200
+ CoreConfiguration::Get().lb_policy_registry().ParseLoadBalancingConfig(
201
+ *child_policy_config_json);
202
+ if (!child_policy_config.ok()) {
203
+ errors->AddError(child_policy_config.status().message());
204
+ return;
205
+ }
206
+ child_policy_ = std::move(*child_policy_config);
207
+ }
208
+
209
+ absl::string_view name() const override { return kGrpclb; }
167
210
 
168
211
  RefCountedPtr<LoadBalancingPolicy::Config> child_policy() const {
169
212
  return child_policy_;
@@ -180,9 +223,9 @@ class GrpcLb : public LoadBalancingPolicy {
180
223
  public:
181
224
  explicit GrpcLb(Args args);
182
225
 
183
- const char* name() const override { return kGrpclb; }
226
+ absl::string_view name() const override { return kGrpclb; }
184
227
 
185
- void UpdateLocked(UpdateArgs args) override;
228
+ absl::Status UpdateLocked(UpdateArgs args) override;
186
229
  void ResetBackoffLocked() override;
187
230
 
188
231
  private:
@@ -212,13 +255,14 @@ class GrpcLb : public LoadBalancingPolicy {
212
255
  void ScheduleNextClientLoadReportLocked();
213
256
  void SendClientLoadReportLocked();
214
257
 
215
- static void MaybeSendClientLoadReport(void* arg, grpc_error_handle error);
258
+ // EventEngine callbacks
259
+ void MaybeSendClientLoadReportLocked();
260
+
216
261
  static void ClientLoadReportDone(void* arg, grpc_error_handle error);
217
262
  static void OnInitialRequestSent(void* arg, grpc_error_handle error);
218
263
  static void OnBalancerMessageReceived(void* arg, grpc_error_handle error);
219
264
  static void OnBalancerStatusReceived(void* arg, grpc_error_handle error);
220
265
 
221
- void MaybeSendClientLoadReportLocked(grpc_error_handle error);
222
266
  void ClientLoadReportDoneLocked(grpc_error_handle error);
223
267
  void OnInitialRequestSentLocked();
224
268
  void OnBalancerMessageReceivedLocked();
@@ -253,13 +297,11 @@ class GrpcLb : public LoadBalancingPolicy {
253
297
  // Created after the first serverlist is received.
254
298
  RefCountedPtr<GrpcLbClientStats> client_stats_;
255
299
  Duration client_stats_report_interval_;
256
- grpc_timer client_load_report_timer_;
257
- bool client_load_report_timer_callback_pending_ = false;
300
+ absl::optional<EventEngine::TaskHandle> client_load_report_handle_;
258
301
  bool last_client_load_report_counters_were_zero_ = false;
259
302
  bool client_load_report_is_due_ = false;
260
- // The closure used for either the load report timer or the callback for
261
- // completion of sending the load report.
262
- grpc_closure client_load_report_closure_;
303
+ // The closure used for the completion of sending the load report.
304
+ grpc_closure client_load_report_done_closure_;
263
305
  };
264
306
 
265
307
  class SubchannelWrapper : public DelegatingSubchannel {
@@ -296,8 +338,8 @@ class GrpcLb : public LoadBalancingPolicy {
296
338
  client_stats_(std::move(client_stats)) {}
297
339
 
298
340
  std::unique_ptr<AttributeInterface> Copy() const override {
299
- return absl::make_unique<TokenAndClientStatsAttribute>(lb_token_,
300
- client_stats_);
341
+ return std::make_unique<TokenAndClientStatsAttribute>(lb_token_,
342
+ client_stats_);
301
343
  }
302
344
 
303
345
  int Cmp(const AttributeInterface* other_base) const override {
@@ -365,7 +407,7 @@ class GrpcLb : public LoadBalancingPolicy {
365
407
  class Picker : public SubchannelPicker {
366
408
  public:
367
409
  Picker(RefCountedPtr<Serverlist> serverlist,
368
- std::unique_ptr<SubchannelPicker> child_picker,
410
+ RefCountedPtr<SubchannelPicker> child_picker,
369
411
  RefCountedPtr<GrpcLbClientStats> client_stats)
370
412
  : serverlist_(std::move(serverlist)),
371
413
  child_picker_(std::move(child_picker)),
@@ -374,10 +416,43 @@ class GrpcLb : public LoadBalancingPolicy {
374
416
  PickResult Pick(PickArgs args) override;
375
417
 
376
418
  private:
419
+ // A subchannel call tracker that unrefs the GrpcLbClientStats object
420
+ // in the case where the subchannel call is never actually started,
421
+ // since the client load reporting filter will not be able to do it
422
+ // in that case.
423
+ class SubchannelCallTracker : public SubchannelCallTrackerInterface {
424
+ public:
425
+ SubchannelCallTracker(
426
+ RefCountedPtr<GrpcLbClientStats> client_stats,
427
+ std::unique_ptr<SubchannelCallTrackerInterface> original_call_tracker)
428
+ : client_stats_(std::move(client_stats)),
429
+ original_call_tracker_(std::move(original_call_tracker)) {}
430
+
431
+ void Start() override {
432
+ if (original_call_tracker_ != nullptr) {
433
+ original_call_tracker_->Start();
434
+ }
435
+ // If we're actually starting the subchannel call, then the
436
+ // client load reporting filter will take ownership of the ref
437
+ // passed down to it via metadata.
438
+ client_stats_.release();
439
+ }
440
+
441
+ void Finish(FinishArgs args) override {
442
+ if (original_call_tracker_ != nullptr) {
443
+ original_call_tracker_->Finish(args);
444
+ }
445
+ }
446
+
447
+ private:
448
+ RefCountedPtr<GrpcLbClientStats> client_stats_;
449
+ std::unique_ptr<SubchannelCallTrackerInterface> original_call_tracker_;
450
+ };
451
+
377
452
  // Serverlist to be used for determining drops.
378
453
  RefCountedPtr<Serverlist> serverlist_;
379
454
 
380
- std::unique_ptr<SubchannelPicker> child_picker_;
455
+ RefCountedPtr<SubchannelPicker> child_picker_;
381
456
  RefCountedPtr<GrpcLbClientStats> client_stats_;
382
457
  };
383
458
 
@@ -387,11 +462,12 @@ class GrpcLb : public LoadBalancingPolicy {
387
462
  : parent_(std::move(parent)) {}
388
463
 
389
464
  RefCountedPtr<SubchannelInterface> CreateSubchannel(
390
- ServerAddress address, const grpc_channel_args& args) override;
465
+ ServerAddress address, const ChannelArgs& args) override;
391
466
  void UpdateState(grpc_connectivity_state state, const absl::Status& status,
392
- std::unique_ptr<SubchannelPicker> picker) override;
467
+ RefCountedPtr<SubchannelPicker> picker) override;
393
468
  void RequestReresolution() override;
394
469
  absl::string_view GetAuthority() override;
470
+ grpc_event_engine::experimental::EventEngine* GetEventEngine() override;
395
471
  void AddTraceEvent(TraceSeverity severity,
396
472
  absl::string_view message) override;
397
473
 
@@ -419,7 +495,8 @@ class GrpcLb : public LoadBalancingPolicy {
419
495
  "entering fallback mode",
420
496
  parent_.get(), status.ToString().c_str());
421
497
  parent_->fallback_at_startup_checks_pending_ = false;
422
- grpc_timer_cancel(&parent_->lb_fallback_timer_);
498
+ parent_->channel_control_helper()->GetEventEngine()->Cancel(
499
+ *parent_->lb_fallback_timer_handle_);
423
500
  parent_->fallback_mode_ = true;
424
501
  parent_->CreateOrUpdateChildPolicyLocked();
425
502
  // Cancel the watch, since we don't care about the channel state once we
@@ -431,39 +508,34 @@ class GrpcLb : public LoadBalancingPolicy {
431
508
  RefCountedPtr<GrpcLb> parent_;
432
509
  };
433
510
 
434
- ~GrpcLb() override;
435
-
436
511
  void ShutdownLocked() override;
437
512
 
438
513
  // Helper functions used in UpdateLocked().
439
- void UpdateBalancerChannelLocked(const grpc_channel_args& args);
514
+ absl::Status UpdateBalancerChannelLocked(const ChannelArgs& args);
440
515
 
441
516
  void CancelBalancerChannelConnectivityWatchLocked();
442
517
 
443
518
  // Methods for dealing with fallback state.
444
519
  void MaybeEnterFallbackModeAfterStartup();
445
- static void OnFallbackTimer(void* arg, grpc_error_handle error);
446
- void OnFallbackTimerLocked(grpc_error_handle error);
520
+ void OnFallbackTimerLocked();
447
521
 
448
522
  // Methods for dealing with the balancer call.
449
523
  void StartBalancerCallLocked();
450
524
  void StartBalancerCallRetryTimerLocked();
451
- static void OnBalancerCallRetryTimer(void* arg, grpc_error_handle error);
452
- void OnBalancerCallRetryTimerLocked(grpc_error_handle error);
525
+ void OnBalancerCallRetryTimerLocked();
453
526
 
454
527
  // Methods for dealing with the child policy.
455
- grpc_channel_args* CreateChildPolicyArgsLocked(
528
+ ChannelArgs CreateChildPolicyArgsLocked(
456
529
  bool is_backend_from_grpclb_load_balancer);
457
530
  OrphanablePtr<LoadBalancingPolicy> CreateChildPolicyLocked(
458
- const grpc_channel_args* args);
531
+ const ChannelArgs& args);
459
532
  void CreateOrUpdateChildPolicyLocked();
460
533
 
461
534
  // Subchannel caching.
462
535
  void CacheDeletedSubchannelLocked(
463
536
  RefCountedPtr<SubchannelInterface> subchannel);
464
537
  void StartSubchannelCacheTimerLocked();
465
- static void OnSubchannelCacheTimer(void* arg, grpc_error_handle error);
466
- void OnSubchannelCacheTimerLocked(grpc_error_handle error);
538
+ void OnSubchannelCacheTimerLocked();
467
539
 
468
540
  // Who the client is trying to communicate with.
469
541
  std::string server_name_;
@@ -471,7 +543,7 @@ class GrpcLb : public LoadBalancingPolicy {
471
543
  RefCountedPtr<GrpcLbConfig> config_;
472
544
 
473
545
  // Current channel args from the resolver.
474
- grpc_channel_args* args_ = nullptr;
546
+ ChannelArgs args_;
475
547
 
476
548
  // Internal state.
477
549
  bool shutting_down_ = false;
@@ -494,9 +566,7 @@ class GrpcLb : public LoadBalancingPolicy {
494
566
  const Duration lb_call_timeout_;
495
567
  // Balancer call retry state.
496
568
  BackOff lb_call_backoff_;
497
- bool retry_timer_callback_pending_ = false;
498
- grpc_timer lb_call_retry_timer_;
499
- grpc_closure lb_on_call_retry_;
569
+ absl::optional<EventEngine::TaskHandle> lb_call_retry_timer_handle_;
500
570
 
501
571
  // The deserialized response from the balancer. May be nullptr until one
502
572
  // such response has arrived.
@@ -514,8 +584,7 @@ class GrpcLb : public LoadBalancingPolicy {
514
584
  // we have not received a serverlist from the balancer.
515
585
  const Duration fallback_at_startup_timeout_;
516
586
  bool fallback_at_startup_checks_pending_ = false;
517
- grpc_timer lb_fallback_timer_;
518
- grpc_closure lb_on_fallback_;
587
+ absl::optional<EventEngine::TaskHandle> lb_fallback_timer_handle_;
519
588
 
520
589
  // The child policy to use for the backends.
521
590
  OrphanablePtr<LoadBalancingPolicy> child_policy_;
@@ -527,9 +596,7 @@ class GrpcLb : public LoadBalancingPolicy {
527
596
  std::map<Timestamp /*deletion time*/,
528
597
  std::vector<RefCountedPtr<SubchannelInterface>>>
529
598
  cached_subchannels_;
530
- grpc_timer subchannel_cache_timer_;
531
- grpc_closure on_subchannel_cache_timer_;
532
- bool subchannel_cache_timer_pending_ = false;
599
+ absl::optional<EventEngine::TaskHandle> subchannel_cache_timer_handle_;
533
600
  };
534
601
 
535
602
  //
@@ -544,8 +611,8 @@ void ParseServer(const GrpcLbServer& server, grpc_resolved_address* addr) {
544
611
  memset(addr, 0, sizeof(*addr));
545
612
  if (server.drop) return;
546
613
  const uint16_t netorder_port = grpc_htons(static_cast<uint16_t>(server.port));
547
- /* the addresses are given in binary format (a in(6)_addr struct) in
548
- * server->ip_address.bytes. */
614
+ // the addresses are given in binary format (a in(6)_addr struct) in
615
+ // server->ip_address.bytes.
549
616
  if (server.ip_size == 4) {
550
617
  addr->len = static_cast<socklen_t>(sizeof(grpc_sockaddr_in));
551
618
  grpc_sockaddr_in* addr4 = reinterpret_cast<grpc_sockaddr_in*>(&addr->addr);
@@ -632,10 +699,10 @@ ServerAddressList GrpcLb::Serverlist::GetServerAddressList(
632
699
  std::map<const char*, std::unique_ptr<ServerAddress::AttributeInterface>>
633
700
  attributes;
634
701
  attributes[kGrpcLbAddressAttributeKey] =
635
- absl::make_unique<TokenAndClientStatsAttribute>(std::move(lb_token),
636
- stats);
702
+ std::make_unique<TokenAndClientStatsAttribute>(std::move(lb_token),
703
+ stats);
637
704
  // Add address.
638
- addresses.emplace_back(addr, /*args=*/nullptr, std::move(attributes));
705
+ addresses.emplace_back(addr, ChannelArgs(), std::move(attributes));
639
706
  }
640
707
  return addresses;
641
708
  }
@@ -686,7 +753,10 @@ GrpcLb::PickResult GrpcLb::Picker::Pick(PickArgs args) {
686
753
  // client_load_reporting filter.
687
754
  GrpcLbClientStats* client_stats = subchannel_wrapper->client_stats();
688
755
  if (client_stats != nullptr) {
689
- client_stats->Ref().release(); // Ref passed via metadata.
756
+ complete_pick->subchannel_call_tracker =
757
+ std::make_unique<SubchannelCallTracker>(
758
+ client_stats->Ref(),
759
+ std::move(complete_pick->subchannel_call_tracker));
690
760
  // The metadata value is a hack: we pretend the pointer points to
691
761
  // a string and rely on the client_load_reporting filter to know
692
762
  // how to interpret it.
@@ -717,16 +787,15 @@ GrpcLb::PickResult GrpcLb::Picker::Pick(PickArgs args) {
717
787
  //
718
788
 
719
789
  RefCountedPtr<SubchannelInterface> GrpcLb::Helper::CreateSubchannel(
720
- ServerAddress address, const grpc_channel_args& args) {
790
+ ServerAddress address, const ChannelArgs& args) {
721
791
  if (parent_->shutting_down_) return nullptr;
722
792
  const TokenAndClientStatsAttribute* attribute =
723
793
  static_cast<const TokenAndClientStatsAttribute*>(
724
794
  address.GetAttribute(kGrpcLbAddressAttributeKey));
725
795
  if (attribute == nullptr) {
726
- gpr_log(GPR_ERROR,
727
- "[grpclb %p] no TokenAndClientStatsAttribute for address %p",
728
- parent_.get(), address.ToString().c_str());
729
- abort();
796
+ Crash(absl::StrFormat(
797
+ "[grpclb %p] no TokenAndClientStatsAttribute for address %p",
798
+ parent_.get(), address.ToString().c_str()));
730
799
  }
731
800
  std::string lb_token = attribute->lb_token();
732
801
  RefCountedPtr<GrpcLbClientStats> client_stats = attribute->client_stats();
@@ -739,7 +808,7 @@ RefCountedPtr<SubchannelInterface> GrpcLb::Helper::CreateSubchannel(
739
808
 
740
809
  void GrpcLb::Helper::UpdateState(grpc_connectivity_state state,
741
810
  const absl::Status& status,
742
- std::unique_ptr<SubchannelPicker> picker) {
811
+ RefCountedPtr<SubchannelPicker> picker) {
743
812
  if (parent_->shutting_down_) return;
744
813
  // Record whether child policy reports READY.
745
814
  parent_->child_policy_ready_ = state == GRPC_CHANNEL_READY;
@@ -774,8 +843,8 @@ void GrpcLb::Helper::UpdateState(grpc_connectivity_state state,
774
843
  }
775
844
  parent_->channel_control_helper()->UpdateState(
776
845
  state, status,
777
- absl::make_unique<Picker>(std::move(serverlist), std::move(picker),
778
- std::move(client_stats)));
846
+ MakeRefCounted<Picker>(std::move(serverlist), std::move(picker),
847
+ std::move(client_stats)));
779
848
  }
780
849
 
781
850
  void GrpcLb::Helper::RequestReresolution() {
@@ -794,6 +863,10 @@ absl::string_view GrpcLb::Helper::GetAuthority() {
794
863
  return parent_->channel_control_helper()->GetAuthority();
795
864
  }
796
865
 
866
+ grpc_event_engine::experimental::EventEngine* GrpcLb::Helper::GetEventEngine() {
867
+ return parent_->channel_control_helper()->GetEventEngine();
868
+ }
869
+
797
870
  void GrpcLb::Helper::AddTraceEvent(TraceSeverity severity,
798
871
  absl::string_view message) {
799
872
  if (parent_->shutting_down_) return;
@@ -823,12 +896,12 @@ GrpcLb::BalancerCallState::BalancerCallState(
823
896
  OnBalancerMessageReceived, this, grpc_schedule_on_exec_ctx);
824
897
  GRPC_CLOSURE_INIT(&lb_on_balancer_status_received_, OnBalancerStatusReceived,
825
898
  this, grpc_schedule_on_exec_ctx);
826
- GRPC_CLOSURE_INIT(&client_load_report_closure_, MaybeSendClientLoadReport,
899
+ GRPC_CLOSURE_INIT(&client_load_report_done_closure_, ClientLoadReportDone,
827
900
  this, grpc_schedule_on_exec_ctx);
828
901
  const Timestamp deadline =
829
902
  grpclb_policy()->lb_call_timeout_ == Duration::Zero()
830
903
  ? Timestamp::InfFuture()
831
- : ExecCtx::Get()->Now() + grpclb_policy()->lb_call_timeout_;
904
+ : Timestamp::Now() + grpclb_policy()->lb_call_timeout_;
832
905
  lb_call_ = grpc_channel_create_pollset_set_call(
833
906
  grpclb_policy()->lb_channel_, nullptr, GRPC_PROPAGATE_DEFAULTS,
834
907
  grpclb_policy_->interested_parties(),
@@ -843,7 +916,7 @@ GrpcLb::BalancerCallState::BalancerCallState(
843
916
  arena.ptr());
844
917
  send_message_payload_ =
845
918
  grpc_raw_byte_buffer_create(&request_payload_slice, 1);
846
- grpc_slice_unref_internal(request_payload_slice);
919
+ CSliceUnref(request_payload_slice);
847
920
  // Init other data associated with the LB call.
848
921
  grpc_metadata_array_init(&lb_initial_metadata_recv_);
849
922
  grpc_metadata_array_init(&lb_trailing_metadata_recv_);
@@ -856,7 +929,7 @@ GrpcLb::BalancerCallState::~BalancerCallState() {
856
929
  grpc_metadata_array_destroy(&lb_trailing_metadata_recv_);
857
930
  grpc_byte_buffer_destroy(send_message_payload_);
858
931
  grpc_byte_buffer_destroy(recv_message_payload_);
859
- grpc_slice_unref_internal(lb_call_status_details_);
932
+ CSliceUnref(lb_call_status_details_);
860
933
  }
861
934
 
862
935
  void GrpcLb::BalancerCallState::Orphan() {
@@ -866,8 +939,10 @@ void GrpcLb::BalancerCallState::Orphan() {
866
939
  // up. Otherwise, we are here because grpclb_policy has to orphan a failed
867
940
  // call, then the following cancellation will be a no-op.
868
941
  grpc_call_cancel_internal(lb_call_);
869
- if (client_load_report_timer_callback_pending_) {
870
- grpc_timer_cancel(&client_load_report_timer_);
942
+ if (client_load_report_handle_.has_value() &&
943
+ grpclb_policy()->channel_control_helper()->GetEventEngine()->Cancel(
944
+ client_load_report_handle_.value())) {
945
+ Unref(DEBUG_LOCATION, "client_load_report cancelled");
871
946
  }
872
947
  // Note that the initial ref is hold by lb_on_balancer_status_received_
873
948
  // instead of the caller of this function. So the corresponding unref happens
@@ -951,34 +1026,20 @@ void GrpcLb::BalancerCallState::StartQuery() {
951
1026
  }
952
1027
 
953
1028
  void GrpcLb::BalancerCallState::ScheduleNextClientLoadReportLocked() {
954
- // InvalidateNow to avoid getting stuck re-initializing this timer
955
- // in a loop while draining the currently-held WorkSerializer.
956
- // Also see https://github.com/grpc/grpc/issues/26079.
957
- ExecCtx::Get()->InvalidateNow();
958
- const Timestamp next_client_load_report_time =
959
- ExecCtx::Get()->Now() + client_stats_report_interval_;
960
- GRPC_CLOSURE_INIT(&client_load_report_closure_, MaybeSendClientLoadReport,
961
- this, grpc_schedule_on_exec_ctx);
962
- grpc_timer_init(&client_load_report_timer_, next_client_load_report_time,
963
- &client_load_report_closure_);
964
- client_load_report_timer_callback_pending_ = true;
1029
+ client_load_report_handle_ =
1030
+ grpclb_policy()->channel_control_helper()->GetEventEngine()->RunAfter(
1031
+ client_stats_report_interval_, [this] {
1032
+ ApplicationCallbackExecCtx callback_exec_ctx;
1033
+ ExecCtx exec_ctx;
1034
+ grpclb_policy()->work_serializer()->Run(
1035
+ [this] { MaybeSendClientLoadReportLocked(); }, DEBUG_LOCATION);
1036
+ });
965
1037
  }
966
1038
 
967
- void GrpcLb::BalancerCallState::MaybeSendClientLoadReport(
968
- void* arg, grpc_error_handle error) {
969
- BalancerCallState* lb_calld = static_cast<BalancerCallState*>(arg);
970
- (void)GRPC_ERROR_REF(error); // ref owned by lambda
971
- lb_calld->grpclb_policy()->work_serializer()->Run(
972
- [lb_calld, error]() { lb_calld->MaybeSendClientLoadReportLocked(error); },
973
- DEBUG_LOCATION);
974
- }
975
-
976
- void GrpcLb::BalancerCallState::MaybeSendClientLoadReportLocked(
977
- grpc_error_handle error) {
978
- client_load_report_timer_callback_pending_ = false;
979
- if (error != GRPC_ERROR_NONE || this != grpclb_policy()->lb_calld_.get()) {
1039
+ void GrpcLb::BalancerCallState::MaybeSendClientLoadReportLocked() {
1040
+ client_load_report_handle_.reset();
1041
+ if (this != grpclb_policy()->lb_calld_.get()) {
980
1042
  Unref(DEBUG_LOCATION, "client_load_report");
981
- GRPC_ERROR_UNREF(error);
982
1043
  return;
983
1044
  }
984
1045
  // If we've already sent the initial request, then we can go ahead and send
@@ -1025,16 +1086,14 @@ void GrpcLb::BalancerCallState::SendClientLoadReportLocked() {
1025
1086
  num_calls_finished_known_received, drop_token_counts.get(), arena.ptr());
1026
1087
  send_message_payload_ =
1027
1088
  grpc_raw_byte_buffer_create(&request_payload_slice, 1);
1028
- grpc_slice_unref_internal(request_payload_slice);
1089
+ CSliceUnref(request_payload_slice);
1029
1090
  // Send the report.
1030
1091
  grpc_op op;
1031
1092
  memset(&op, 0, sizeof(op));
1032
1093
  op.op = GRPC_OP_SEND_MESSAGE;
1033
1094
  op.data.send_message.send_message = send_message_payload_;
1034
- GRPC_CLOSURE_INIT(&client_load_report_closure_, ClientLoadReportDone, this,
1035
- grpc_schedule_on_exec_ctx);
1036
1095
  grpc_call_error call_error = grpc_call_start_batch_and_execute(
1037
- lb_call_, &op, 1, &client_load_report_closure_);
1096
+ lb_call_, &op, 1, &client_load_report_done_closure_);
1038
1097
  if (GPR_UNLIKELY(call_error != GRPC_CALL_OK)) {
1039
1098
  gpr_log(GPR_ERROR,
1040
1099
  "[grpclb %p] lb_calld=%p call_error=%d sending client load report",
@@ -1046,7 +1105,6 @@ void GrpcLb::BalancerCallState::SendClientLoadReportLocked() {
1046
1105
  void GrpcLb::BalancerCallState::ClientLoadReportDone(void* arg,
1047
1106
  grpc_error_handle error) {
1048
1107
  BalancerCallState* lb_calld = static_cast<BalancerCallState*>(arg);
1049
- (void)GRPC_ERROR_REF(error); // ref owned by lambda
1050
1108
  lb_calld->grpclb_policy()->work_serializer()->Run(
1051
1109
  [lb_calld, error]() { lb_calld->ClientLoadReportDoneLocked(error); },
1052
1110
  DEBUG_LOCATION);
@@ -1056,9 +1114,8 @@ void GrpcLb::BalancerCallState::ClientLoadReportDoneLocked(
1056
1114
  grpc_error_handle error) {
1057
1115
  grpc_byte_buffer_destroy(send_message_payload_);
1058
1116
  send_message_payload_ = nullptr;
1059
- if (error != GRPC_ERROR_NONE || this != grpclb_policy()->lb_calld_.get()) {
1117
+ if (!error.ok() || this != grpclb_policy()->lb_calld_.get()) {
1060
1118
  Unref(DEBUG_LOCATION, "client_load_report");
1061
- GRPC_ERROR_UNREF(error);
1062
1119
  return;
1063
1120
  }
1064
1121
  ScheduleNextClientLoadReportLocked();
@@ -1198,7 +1255,8 @@ void GrpcLb::BalancerCallState::OnBalancerMessageReceivedLocked() {
1198
1255
  }
1199
1256
  if (grpclb_policy()->fallback_at_startup_checks_pending_) {
1200
1257
  grpclb_policy()->fallback_at_startup_checks_pending_ = false;
1201
- grpc_timer_cancel(&grpclb_policy()->lb_fallback_timer_);
1258
+ grpclb_policy()->channel_control_helper()->GetEventEngine()->Cancel(
1259
+ *grpclb_policy()->lb_fallback_timer_handle_);
1202
1260
  grpclb_policy()->CancelBalancerChannelConnectivityWatchLocked();
1203
1261
  }
1204
1262
  // Update the serverlist in the GrpcLb instance. This serverlist
@@ -1216,7 +1274,8 @@ void GrpcLb::BalancerCallState::OnBalancerMessageReceivedLocked() {
1216
1274
  grpclb_policy());
1217
1275
  if (grpclb_policy()->fallback_at_startup_checks_pending_) {
1218
1276
  grpclb_policy()->fallback_at_startup_checks_pending_ = false;
1219
- grpc_timer_cancel(&grpclb_policy()->lb_fallback_timer_);
1277
+ grpclb_policy()->channel_control_helper()->GetEventEngine()->Cancel(
1278
+ *grpclb_policy()->lb_fallback_timer_handle_);
1220
1279
  grpclb_policy()->CancelBalancerChannelConnectivityWatchLocked();
1221
1280
  }
1222
1281
  grpclb_policy()->fallback_mode_ = true;
@@ -1230,7 +1289,7 @@ void GrpcLb::BalancerCallState::OnBalancerMessageReceivedLocked() {
1230
1289
  }
1231
1290
  }
1232
1291
  }
1233
- grpc_slice_unref_internal(response_slice);
1292
+ CSliceUnref(response_slice);
1234
1293
  if (!grpclb_policy()->shutting_down_) {
1235
1294
  // Keep listening for serverlist updates.
1236
1295
  grpc_op op;
@@ -1251,7 +1310,6 @@ void GrpcLb::BalancerCallState::OnBalancerMessageReceivedLocked() {
1251
1310
  void GrpcLb::BalancerCallState::OnBalancerStatusReceived(
1252
1311
  void* arg, grpc_error_handle error) {
1253
1312
  BalancerCallState* lb_calld = static_cast<BalancerCallState*>(arg);
1254
- (void)GRPC_ERROR_REF(error); // owned by lambda
1255
1313
  lb_calld->grpclb_policy()->work_serializer()->Run(
1256
1314
  [lb_calld, error]() { lb_calld->OnBalancerStatusReceivedLocked(error); },
1257
1315
  DEBUG_LOCATION);
@@ -1266,10 +1324,9 @@ void GrpcLb::BalancerCallState::OnBalancerStatusReceivedLocked(
1266
1324
  "[grpclb %p] lb_calld=%p: Status from LB server received. "
1267
1325
  "Status = %d, details = '%s', (lb_call: %p), error '%s'",
1268
1326
  grpclb_policy(), this, lb_call_status_, status_details, lb_call_,
1269
- grpc_error_std_string(error).c_str());
1327
+ StatusToString(error).c_str());
1270
1328
  gpr_free(status_details);
1271
1329
  }
1272
- GRPC_ERROR_UNREF(error);
1273
1330
  // If this lb_calld is still in use, this call ended because of a failure so
1274
1331
  // we want to retry connecting. Otherwise, we have deliberately ended this
1275
1332
  // call and no further action is required.
@@ -1285,7 +1342,8 @@ void GrpcLb::BalancerCallState::OnBalancerStatusReceivedLocked(
1285
1342
  "serverlist; entering fallback mode",
1286
1343
  grpclb_policy());
1287
1344
  grpclb_policy()->fallback_at_startup_checks_pending_ = false;
1288
- grpc_timer_cancel(&grpclb_policy()->lb_fallback_timer_);
1345
+ grpclb_policy()->channel_control_helper()->GetEventEngine()->Cancel(
1346
+ *grpclb_policy()->lb_fallback_timer_handle_);
1289
1347
  grpclb_policy()->CancelBalancerChannelConnectivityWatchLocked();
1290
1348
  grpclb_policy()->fallback_mode_ = true;
1291
1349
  grpclb_policy()->CreateOrUpdateChildPolicyLocked();
@@ -1313,102 +1371,104 @@ void GrpcLb::BalancerCallState::OnBalancerStatusReceivedLocked(
1313
1371
  // helper code for creating balancer channel
1314
1372
  //
1315
1373
 
1316
- ServerAddressList ExtractBalancerAddresses(const grpc_channel_args& args) {
1374
+ ServerAddressList ExtractBalancerAddresses(const ChannelArgs& args) {
1317
1375
  const ServerAddressList* addresses =
1318
1376
  FindGrpclbBalancerAddressesInChannelArgs(args);
1319
1377
  if (addresses != nullptr) return *addresses;
1320
1378
  return ServerAddressList();
1321
1379
  }
1322
1380
 
1323
- /* Returns the channel args for the LB channel, used to create a bidirectional
1324
- * stream for the reception of load balancing updates.
1325
- *
1326
- * Inputs:
1327
- * - \a response_generator: in order to propagate updates from the resolver
1328
- * above the grpclb policy.
1329
- * - \a args: other args inherited from the grpclb policy. */
1330
- grpc_channel_args* BuildBalancerChannelArgs(
1381
+ // Returns the channel args for the LB channel, used to create a bidirectional
1382
+ // stream for the reception of load balancing updates.
1383
+ //
1384
+ // Inputs:
1385
+ // - \a response_generator: in order to propagate updates from the resolver
1386
+ // above the grpclb policy.
1387
+ // - \a args: other args inherited from the grpclb policy.
1388
+ ChannelArgs BuildBalancerChannelArgs(
1331
1389
  FakeResolverResponseGenerator* response_generator,
1332
- const grpc_channel_args* args) {
1333
- // Channel args to remove.
1334
- static const char* args_to_remove[] = {
1335
- // LB policy name, since we want to use the default (pick_first) in
1336
- // the LB channel.
1337
- GRPC_ARG_LB_POLICY_NAME,
1338
- // Strip out the service config, since we don't want the LB policy
1339
- // config specified for the parent channel to affect the LB channel.
1340
- GRPC_ARG_SERVICE_CONFIG,
1341
- // The channel arg for the server URI, since that will be different for
1342
- // the LB channel than for the parent channel. The client channel
1343
- // factory will re-add this arg with the right value.
1344
- GRPC_ARG_SERVER_URI,
1345
- // The fake resolver response generator, because we are replacing it
1346
- // with the one from the grpclb policy, used to propagate updates to
1347
- // the LB channel.
1348
- GRPC_ARG_FAKE_RESOLVER_RESPONSE_GENERATOR,
1349
- // The LB channel should use the authority indicated by the target
1350
- // authority table (see \a ModifyGrpclbBalancerChannelArgs),
1351
- // as opposed to the authority from the parent channel.
1352
- GRPC_ARG_DEFAULT_AUTHORITY,
1353
- // Just as for \a GRPC_ARG_DEFAULT_AUTHORITY, the LB channel should be
1354
- // treated as a stand-alone channel and not inherit this argument from the
1355
- // args of the parent channel.
1356
- GRPC_SSL_TARGET_NAME_OVERRIDE_ARG,
1357
- // Don't want to pass down channelz node from parent; the balancer
1358
- // channel will get its own.
1359
- GRPC_ARG_CHANNELZ_CHANNEL_NODE,
1360
- // Remove the channel args for channel credentials and replace it
1361
- // with a version that does not contain call credentials. The loadbalancer
1362
- // is not necessarily trusted to handle bearer token credentials.
1363
- GRPC_ARG_CHANNEL_CREDENTIALS,
1364
- };
1390
+ const ChannelArgs& args) {
1391
+ ChannelArgs grpclb_channel_args;
1392
+ const grpc_channel_args* lb_channel_specific_args =
1393
+ args.GetPointer<grpc_channel_args>(
1394
+ GRPC_ARG_EXPERIMENTAL_GRPCLB_CHANNEL_ARGS);
1395
+ if (lb_channel_specific_args != nullptr) {
1396
+ grpclb_channel_args = ChannelArgs::FromC(lb_channel_specific_args);
1397
+ } else {
1398
+ // Set grpclb_channel_args based on the parent channel's channel args.
1399
+ grpclb_channel_args =
1400
+ args
1401
+ // LB policy name, since we want to use the default (pick_first) in
1402
+ // the LB channel.
1403
+ .Remove(GRPC_ARG_LB_POLICY_NAME)
1404
+ // Strip out the service config, since we don't want the LB policy
1405
+ // config specified for the parent channel to affect the LB channel.
1406
+ .Remove(GRPC_ARG_SERVICE_CONFIG)
1407
+ // The channel arg for the server URI, since that will be different
1408
+ // for the LB channel than for the parent channel. The client
1409
+ // channel factory will re-add this arg with the right value.
1410
+ .Remove(GRPC_ARG_SERVER_URI)
1411
+ // The fake resolver response generator, because we are replacing it
1412
+ // with the one from the grpclb policy, used to propagate updates to
1413
+ // the LB channel.
1414
+ .Remove(GRPC_ARG_FAKE_RESOLVER_RESPONSE_GENERATOR)
1415
+ // The LB channel should use the authority indicated by the target
1416
+ // authority table (see \a ModifyGrpclbBalancerChannelArgs),
1417
+ // as opposed to the authority from the parent channel.
1418
+ .Remove(GRPC_ARG_DEFAULT_AUTHORITY)
1419
+ // Just as for \a GRPC_ARG_DEFAULT_AUTHORITY, the LB channel should
1420
+ // be treated as a stand-alone channel and not inherit this argument
1421
+ // from the args of the parent channel.
1422
+ .Remove(GRPC_SSL_TARGET_NAME_OVERRIDE_ARG)
1423
+ // Don't want to pass down channelz node from parent; the balancer
1424
+ // channel will get its own.
1425
+ .Remove(GRPC_ARG_CHANNELZ_CHANNEL_NODE)
1426
+ // Remove the channel args for channel credentials and replace it
1427
+ // with a version that does not contain call credentials. The
1428
+ // loadbalancer is not necessarily trusted to handle bearer token
1429
+ // credentials.
1430
+ .Remove(GRPC_ARG_CHANNEL_CREDENTIALS);
1431
+ }
1365
1432
  // Create channel args for channel credentials that does not contain bearer
1366
1433
  // token credentials.
1367
- grpc_channel_credentials* channel_credentials =
1368
- grpc_channel_credentials_find_in_args(args);
1434
+ auto* channel_credentials = args.GetObject<grpc_channel_credentials>();
1369
1435
  GPR_ASSERT(channel_credentials != nullptr);
1370
1436
  RefCountedPtr<grpc_channel_credentials> creds_sans_call_creds =
1371
1437
  channel_credentials->duplicate_without_call_credentials();
1372
1438
  GPR_ASSERT(creds_sans_call_creds != nullptr);
1373
- // Channel args to add.
1374
- absl::InlinedVector<grpc_arg, 4> args_to_add = {
1375
- // The fake resolver response generator, which we use to inject
1376
- // address updates into the LB channel.
1377
- FakeResolverResponseGenerator::MakeChannelArg(response_generator),
1439
+ return grpclb_channel_args
1378
1440
  // A channel arg indicating the target is a grpclb load balancer.
1379
- grpc_channel_arg_integer_create(
1380
- const_cast<char*>(GRPC_ARG_ADDRESS_IS_GRPCLB_LOAD_BALANCER), 1),
1441
+ .Set(GRPC_ARG_ADDRESS_IS_GRPCLB_LOAD_BALANCER, 1)
1381
1442
  // Tells channelz that this is an internal channel.
1382
- grpc_channel_arg_integer_create(
1383
- const_cast<char*>(GRPC_ARG_CHANNELZ_IS_INTERNAL_CHANNEL), 1),
1443
+ .Set(GRPC_ARG_CHANNELZ_IS_INTERNAL_CHANNEL, 1)
1384
1444
  // A channel args for new channel credentials that does not contain bearer
1385
1445
  // tokens.
1386
- grpc_channel_credentials_to_arg(creds_sans_call_creds.get()),
1387
- };
1388
- return grpc_channel_args_copy_and_add_and_remove(
1389
- args, args_to_remove, GPR_ARRAY_SIZE(args_to_remove), args_to_add.data(),
1390
- args_to_add.size());
1446
+ .SetObject(creds_sans_call_creds)
1447
+ // The fake resolver response generator, which we use to inject
1448
+ // address updates into the LB channel.
1449
+ .SetObject(response_generator->Ref());
1391
1450
  }
1392
1451
 
1393
1452
  //
1394
1453
  // ctor and dtor
1395
1454
  //
1396
1455
 
1397
- std::string GetServerNameFromChannelArgs(const grpc_channel_args* args) {
1398
- const char* server_uri =
1399
- grpc_channel_args_find_string(args, GRPC_ARG_SERVER_URI);
1400
- GPR_ASSERT(server_uri != nullptr);
1401
- absl::StatusOr<URI> uri = URI::Parse(server_uri);
1456
+ std::string GetServerNameFromChannelArgs(const ChannelArgs& args) {
1457
+ absl::StatusOr<URI> uri =
1458
+ URI::Parse(args.GetString(GRPC_ARG_SERVER_URI).value());
1402
1459
  GPR_ASSERT(uri.ok() && !uri->path().empty());
1403
1460
  return std::string(absl::StripPrefix(uri->path(), "/"));
1404
1461
  }
1405
1462
 
1406
1463
  GrpcLb::GrpcLb(Args args)
1407
1464
  : LoadBalancingPolicy(std::move(args)),
1408
- server_name_(GetServerNameFromChannelArgs(args.args)),
1465
+ server_name_(GetServerNameFromChannelArgs(channel_args())),
1409
1466
  response_generator_(MakeRefCounted<FakeResolverResponseGenerator>()),
1410
- lb_call_timeout_(Duration::Milliseconds(grpc_channel_args_find_integer(
1411
- args.args, GRPC_ARG_GRPCLB_CALL_TIMEOUT_MS, {0, 0, INT_MAX}))),
1467
+ lb_call_timeout_(std::max(
1468
+ Duration::Zero(),
1469
+ channel_args()
1470
+ .GetDurationFromIntMillis(GRPC_ARG_GRPCLB_CALL_TIMEOUT_MS)
1471
+ .value_or(Duration::Zero()))),
1412
1472
  lb_call_backoff_(
1413
1473
  BackOff::Options()
1414
1474
  .set_initial_backoff(Duration::Seconds(
@@ -1417,45 +1477,43 @@ GrpcLb::GrpcLb(Args args)
1417
1477
  .set_jitter(GRPC_GRPCLB_RECONNECT_JITTER)
1418
1478
  .set_max_backoff(Duration::Seconds(
1419
1479
  GRPC_GRPCLB_RECONNECT_MAX_BACKOFF_SECONDS))),
1420
- fallback_at_startup_timeout_(
1421
- Duration::Milliseconds(grpc_channel_args_find_integer(
1422
- args.args, GRPC_ARG_GRPCLB_FALLBACK_TIMEOUT_MS,
1423
- {GRPC_GRPCLB_DEFAULT_FALLBACK_TIMEOUT_MS, 0, INT_MAX}))),
1424
- subchannel_cache_interval_(
1425
- Duration::Milliseconds(grpc_channel_args_find_integer(
1426
- args.args, GRPC_ARG_GRPCLB_SUBCHANNEL_CACHE_INTERVAL_MS,
1427
- {GRPC_GRPCLB_DEFAULT_SUBCHANNEL_DELETION_DELAY_MS, 0,
1428
- INT_MAX}))) {
1480
+ fallback_at_startup_timeout_(std::max(
1481
+ Duration::Zero(),
1482
+ channel_args()
1483
+ .GetDurationFromIntMillis(GRPC_ARG_GRPCLB_FALLBACK_TIMEOUT_MS)
1484
+ .value_or(Duration::Milliseconds(
1485
+ GRPC_GRPCLB_DEFAULT_FALLBACK_TIMEOUT_MS)))),
1486
+ subchannel_cache_interval_(std::max(
1487
+ Duration::Zero(),
1488
+ channel_args()
1489
+ .GetDurationFromIntMillis(
1490
+ GRPC_ARG_GRPCLB_SUBCHANNEL_CACHE_INTERVAL_MS)
1491
+ .value_or(Duration::Milliseconds(
1492
+ GRPC_GRPCLB_DEFAULT_SUBCHANNEL_DELETION_DELAY_MS)))) {
1429
1493
  if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_glb_trace)) {
1430
1494
  gpr_log(GPR_INFO,
1431
1495
  "[grpclb %p] Will use '%s' as the server name for LB request.",
1432
1496
  this, server_name_.c_str());
1433
1497
  }
1434
- // Closure Initialization
1435
- GRPC_CLOSURE_INIT(&lb_on_fallback_, &GrpcLb::OnFallbackTimer, this,
1436
- grpc_schedule_on_exec_ctx);
1437
- GRPC_CLOSURE_INIT(&lb_on_call_retry_, &GrpcLb::OnBalancerCallRetryTimer, this,
1438
- grpc_schedule_on_exec_ctx);
1439
- GRPC_CLOSURE_INIT(&on_subchannel_cache_timer_, &OnSubchannelCacheTimer, this,
1440
- nullptr);
1441
1498
  }
1442
1499
 
1443
- GrpcLb::~GrpcLb() { grpc_channel_args_destroy(args_); }
1444
-
1445
1500
  void GrpcLb::ShutdownLocked() {
1446
1501
  shutting_down_ = true;
1447
1502
  lb_calld_.reset();
1448
- if (subchannel_cache_timer_pending_) {
1449
- subchannel_cache_timer_pending_ = false;
1450
- grpc_timer_cancel(&subchannel_cache_timer_);
1503
+ if (subchannel_cache_timer_handle_.has_value()) {
1504
+ channel_control_helper()->GetEventEngine()->Cancel(
1505
+ *subchannel_cache_timer_handle_);
1506
+ subchannel_cache_timer_handle_.reset();
1451
1507
  }
1452
1508
  cached_subchannels_.clear();
1453
- if (retry_timer_callback_pending_) {
1454
- grpc_timer_cancel(&lb_call_retry_timer_);
1509
+ if (lb_call_retry_timer_handle_.has_value()) {
1510
+ channel_control_helper()->GetEventEngine()->Cancel(
1511
+ *lb_call_retry_timer_handle_);
1455
1512
  }
1456
1513
  if (fallback_at_startup_checks_pending_) {
1457
1514
  fallback_at_startup_checks_pending_ = false;
1458
- grpc_timer_cancel(&lb_fallback_timer_);
1515
+ channel_control_helper()->GetEventEngine()->Cancel(
1516
+ *lb_fallback_timer_handle_);
1459
1517
  CancelBalancerChannelConnectivityWatchLocked();
1460
1518
  }
1461
1519
  if (child_policy_ != nullptr) {
@@ -1492,7 +1550,7 @@ void GrpcLb::ResetBackoffLocked() {
1492
1550
  }
1493
1551
  }
1494
1552
 
1495
- void GrpcLb::UpdateLocked(UpdateArgs args) {
1553
+ absl::Status GrpcLb::UpdateLocked(UpdateArgs args) {
1496
1554
  const bool is_initial_update = lb_channel_ == nullptr;
1497
1555
  config_ = args.config;
1498
1556
  GPR_ASSERT(config_ != nullptr);
@@ -1503,12 +1561,12 @@ void GrpcLb::UpdateLocked(UpdateArgs args) {
1503
1561
  for (ServerAddress& address : *fallback_backend_addresses_) {
1504
1562
  address = address.WithAttribute(
1505
1563
  kGrpcLbAddressAttributeKey,
1506
- absl::make_unique<TokenAndClientStatsAttribute>("", nullptr));
1564
+ std::make_unique<TokenAndClientStatsAttribute>("", nullptr));
1507
1565
  }
1508
1566
  }
1509
1567
  resolution_note_ = std::move(args.resolution_note);
1510
1568
  // Update balancer channel.
1511
- UpdateBalancerChannelLocked(*args.args);
1569
+ absl::Status status = UpdateBalancerChannelLocked(args.args);
1512
1570
  // Update the existing child policy, if any.
1513
1571
  if (child_policy_ != nullptr) CreateOrUpdateChildPolicyLocked();
1514
1572
  // If this is the initial update, start the fallback-at-startup checks
@@ -1516,9 +1574,18 @@ void GrpcLb::UpdateLocked(UpdateArgs args) {
1516
1574
  if (is_initial_update) {
1517
1575
  fallback_at_startup_checks_pending_ = true;
1518
1576
  // Start timer.
1519
- Timestamp deadline = ExecCtx::Get()->Now() + fallback_at_startup_timeout_;
1520
- Ref(DEBUG_LOCATION, "on_fallback_timer").release(); // Ref for callback
1521
- grpc_timer_init(&lb_fallback_timer_, deadline, &lb_on_fallback_);
1577
+ lb_fallback_timer_handle_ =
1578
+ channel_control_helper()->GetEventEngine()->RunAfter(
1579
+ fallback_at_startup_timeout_,
1580
+ [self = static_cast<RefCountedPtr<GrpcLb>>(
1581
+ Ref(DEBUG_LOCATION, "on_fallback_timer"))]() mutable {
1582
+ ApplicationCallbackExecCtx callback_exec_ctx;
1583
+ ExecCtx exec_ctx;
1584
+ auto self_ptr = self.get();
1585
+ self_ptr->work_serializer()->Run(
1586
+ [self = std::move(self)]() { self->OnFallbackTimerLocked(); },
1587
+ DEBUG_LOCATION);
1588
+ });
1522
1589
  // Start watching the channel's connectivity state. If the channel
1523
1590
  // goes into state TRANSIENT_FAILURE before the timer fires, we go into
1524
1591
  // fallback mode even if the fallback timeout has not elapsed.
@@ -1533,43 +1600,40 @@ void GrpcLb::UpdateLocked(UpdateArgs args) {
1533
1600
  // Start balancer call.
1534
1601
  StartBalancerCallLocked();
1535
1602
  }
1603
+ return status;
1536
1604
  }
1537
1605
 
1538
1606
  //
1539
1607
  // helpers for UpdateLocked()
1540
1608
  //
1541
1609
 
1542
- void GrpcLb::UpdateBalancerChannelLocked(const grpc_channel_args& args) {
1610
+ absl::Status GrpcLb::UpdateBalancerChannelLocked(const ChannelArgs& args) {
1543
1611
  // Make sure that GRPC_ARG_LB_POLICY_NAME is set in channel args,
1544
1612
  // since we use this to trigger the client_load_reporting filter.
1545
- static const char* args_to_remove[] = {GRPC_ARG_LB_POLICY_NAME};
1546
- grpc_arg new_arg = grpc_channel_arg_string_create(
1547
- const_cast<char*>(GRPC_ARG_LB_POLICY_NAME), const_cast<char*>("grpclb"));
1548
- grpc_channel_args_destroy(args_);
1549
- args_ = grpc_channel_args_copy_and_add_and_remove(
1550
- &args, args_to_remove, GPR_ARRAY_SIZE(args_to_remove), &new_arg, 1);
1551
- // Construct args for balancer channel.
1613
+ args_ = args.Set(GRPC_ARG_LB_POLICY_NAME, "grpclb");
1614
+ // Get balancer addresses.
1552
1615
  ServerAddressList balancer_addresses = ExtractBalancerAddresses(args);
1553
- grpc_channel_args* lb_channel_args =
1554
- BuildBalancerChannelArgs(response_generator_.get(), &args);
1616
+ absl::Status status;
1617
+ if (balancer_addresses.empty()) {
1618
+ status = absl::UnavailableError("balancer address list must be non-empty");
1619
+ }
1620
+ // Construct args for balancer channel.
1621
+ ChannelArgs lb_channel_args =
1622
+ BuildBalancerChannelArgs(response_generator_.get(), args);
1555
1623
  // Create balancer channel if needed.
1556
1624
  if (lb_channel_ == nullptr) {
1557
1625
  std::string uri_str = absl::StrCat("fake:///", server_name_);
1558
- grpc_channel_credentials* creds =
1559
- grpc_channel_credentials_find_in_args(lb_channel_args);
1626
+ auto* creds = lb_channel_args.GetObject<grpc_channel_credentials>();
1560
1627
  GPR_ASSERT(creds != nullptr);
1561
- const char* arg_to_remove = GRPC_ARG_CHANNEL_CREDENTIALS;
1562
- grpc_channel_args* new_args =
1563
- grpc_channel_args_copy_and_remove(lb_channel_args, &arg_to_remove, 1);
1564
- lb_channel_ = grpc_channel_create(uri_str.c_str(), creds, new_args);
1628
+ lb_channel_ = grpc_channel_create(
1629
+ uri_str.c_str(), creds,
1630
+ lb_channel_args.Remove(GRPC_ARG_CHANNEL_CREDENTIALS).ToC().get());
1565
1631
  GPR_ASSERT(lb_channel_ != nullptr);
1566
- grpc_channel_args_destroy(new_args);
1567
1632
  // Set up channelz linkage.
1568
1633
  channelz::ChannelNode* child_channelz_node =
1569
1634
  grpc_channel_get_channelz_node(lb_channel_);
1570
1635
  channelz::ChannelNode* parent_channelz_node =
1571
- grpc_channel_args_find_pointer<channelz::ChannelNode>(
1572
- &args, GRPC_ARG_CHANNELZ_CHANNEL_NODE);
1636
+ args.GetObject<channelz::ChannelNode>();
1573
1637
  if (child_channelz_node != nullptr && parent_channelz_node != nullptr) {
1574
1638
  parent_channelz_node->AddChildChannel(child_channelz_node->uuid());
1575
1639
  parent_channelz_node_ = parent_channelz_node->Ref();
@@ -1581,6 +1645,8 @@ void GrpcLb::UpdateBalancerChannelLocked(const grpc_channel_args& args) {
1581
1645
  result.addresses = std::move(balancer_addresses);
1582
1646
  result.args = lb_channel_args;
1583
1647
  response_generator_->SetResponse(std::move(result));
1648
+ // Return status.
1649
+ return status;
1584
1650
  }
1585
1651
 
1586
1652
  void GrpcLb::CancelBalancerChannelConnectivityWatchLocked() {
@@ -1609,10 +1675,9 @@ void GrpcLb::StartBalancerCallLocked() {
1609
1675
  }
1610
1676
 
1611
1677
  void GrpcLb::StartBalancerCallRetryTimerLocked() {
1612
- Timestamp next_try = lb_call_backoff_.NextAttemptTime();
1678
+ Duration timeout = lb_call_backoff_.NextAttemptTime() - Timestamp::Now();
1613
1679
  if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_glb_trace)) {
1614
1680
  gpr_log(GPR_INFO, "[grpclb %p] Connection to LB server lost...", this);
1615
- Duration timeout = next_try - ExecCtx::Get()->Now();
1616
1681
  if (timeout > Duration::Zero()) {
1617
1682
  gpr_log(GPR_INFO, "[grpclb %p] ... retry_timer_active in %" PRId64 "ms.",
1618
1683
  this, timeout.millis());
@@ -1621,35 +1686,30 @@ void GrpcLb::StartBalancerCallRetryTimerLocked() {
1621
1686
  this);
1622
1687
  }
1623
1688
  }
1624
- // TODO(roth): We currently track this ref manually. Once the
1625
- // ClosureRef API is ready, we should pass the RefCountedPtr<> along
1626
- // with the callback.
1627
- auto self = Ref(DEBUG_LOCATION, "on_balancer_call_retry_timer");
1628
- self.release();
1629
- retry_timer_callback_pending_ = true;
1630
- grpc_timer_init(&lb_call_retry_timer_, next_try, &lb_on_call_retry_);
1631
- }
1632
-
1633
- void GrpcLb::OnBalancerCallRetryTimer(void* arg, grpc_error_handle error) {
1634
- GrpcLb* grpclb_policy = static_cast<GrpcLb*>(arg);
1635
- (void)GRPC_ERROR_REF(error); // ref owned by lambda
1636
- grpclb_policy->work_serializer()->Run(
1637
- [grpclb_policy, error]() {
1638
- grpclb_policy->OnBalancerCallRetryTimerLocked(error);
1639
- },
1640
- DEBUG_LOCATION);
1689
+ lb_call_retry_timer_handle_ =
1690
+ channel_control_helper()->GetEventEngine()->RunAfter(
1691
+ timeout,
1692
+ [self = static_cast<RefCountedPtr<GrpcLb>>(
1693
+ Ref(DEBUG_LOCATION, "on_balancer_call_retry_timer"))]() mutable {
1694
+ ApplicationCallbackExecCtx callback_exec_ctx;
1695
+ ExecCtx exec_ctx;
1696
+ auto self_ptr = self.get();
1697
+ self_ptr->work_serializer()->Run(
1698
+ [self = std::move(self)]() {
1699
+ self->OnBalancerCallRetryTimerLocked();
1700
+ },
1701
+ DEBUG_LOCATION);
1702
+ });
1641
1703
  }
1642
1704
 
1643
- void GrpcLb::OnBalancerCallRetryTimerLocked(grpc_error_handle error) {
1644
- retry_timer_callback_pending_ = false;
1645
- if (!shutting_down_ && error == GRPC_ERROR_NONE && lb_calld_ == nullptr) {
1705
+ void GrpcLb::OnBalancerCallRetryTimerLocked() {
1706
+ lb_call_retry_timer_handle_.reset();
1707
+ if (!shutting_down_ && lb_calld_ == nullptr) {
1646
1708
  if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_glb_trace)) {
1647
1709
  gpr_log(GPR_INFO, "[grpclb %p] Restarting call to LB server", this);
1648
1710
  }
1649
1711
  StartBalancerCallLocked();
1650
1712
  }
1651
- Unref(DEBUG_LOCATION, "on_balancer_call_retry_timer");
1652
- GRPC_ERROR_UNREF(error);
1653
1713
  }
1654
1714
 
1655
1715
  //
@@ -1674,19 +1734,10 @@ void GrpcLb::MaybeEnterFallbackModeAfterStartup() {
1674
1734
  }
1675
1735
  }
1676
1736
 
1677
- void GrpcLb::OnFallbackTimer(void* arg, grpc_error_handle error) {
1678
- GrpcLb* grpclb_policy = static_cast<GrpcLb*>(arg);
1679
- (void)GRPC_ERROR_REF(error); // ref owned by lambda
1680
- grpclb_policy->work_serializer()->Run(
1681
- [grpclb_policy, error]() { grpclb_policy->OnFallbackTimerLocked(error); },
1682
- DEBUG_LOCATION);
1683
- }
1684
-
1685
- void GrpcLb::OnFallbackTimerLocked(grpc_error_handle error) {
1737
+ void GrpcLb::OnFallbackTimerLocked() {
1686
1738
  // If we receive a serverlist after the timer fires but before this callback
1687
1739
  // actually runs, don't fall back.
1688
- if (fallback_at_startup_checks_pending_ && !shutting_down_ &&
1689
- error == GRPC_ERROR_NONE) {
1740
+ if (fallback_at_startup_checks_pending_ && !shutting_down_) {
1690
1741
  gpr_log(GPR_INFO,
1691
1742
  "[grpclb %p] No response from balancer after fallback timeout; "
1692
1743
  "entering fallback mode",
@@ -1696,34 +1747,30 @@ void GrpcLb::OnFallbackTimerLocked(grpc_error_handle error) {
1696
1747
  fallback_mode_ = true;
1697
1748
  CreateOrUpdateChildPolicyLocked();
1698
1749
  }
1699
- Unref(DEBUG_LOCATION, "on_fallback_timer");
1700
- GRPC_ERROR_UNREF(error);
1701
1750
  }
1702
1751
 
1703
1752
  //
1704
1753
  // code for interacting with the child policy
1705
1754
  //
1706
1755
 
1707
- grpc_channel_args* GrpcLb::CreateChildPolicyArgsLocked(
1756
+ ChannelArgs GrpcLb::CreateChildPolicyArgsLocked(
1708
1757
  bool is_backend_from_grpclb_load_balancer) {
1709
- absl::InlinedVector<grpc_arg, 2> args_to_add;
1710
- args_to_add.emplace_back(grpc_channel_arg_integer_create(
1711
- const_cast<char*>(GRPC_ARG_ADDRESS_IS_BACKEND_FROM_GRPCLB_LOAD_BALANCER),
1712
- is_backend_from_grpclb_load_balancer));
1758
+ ChannelArgs r =
1759
+ args_.Set(GRPC_ARG_ADDRESS_IS_BACKEND_FROM_GRPCLB_LOAD_BALANCER,
1760
+ is_backend_from_grpclb_load_balancer);
1713
1761
  if (is_backend_from_grpclb_load_balancer) {
1714
- args_to_add.emplace_back(grpc_channel_arg_integer_create(
1715
- const_cast<char*>(GRPC_ARG_INHIBIT_HEALTH_CHECKING), 1));
1762
+ r = r.Set(GRPC_ARG_INHIBIT_HEALTH_CHECKING, 1);
1716
1763
  }
1717
- return grpc_channel_args_copy_and_add(args_, args_to_add.data(),
1718
- args_to_add.size());
1764
+ return r;
1719
1765
  }
1720
1766
 
1721
1767
  OrphanablePtr<LoadBalancingPolicy> GrpcLb::CreateChildPolicyLocked(
1722
- const grpc_channel_args* args) {
1768
+ const ChannelArgs& args) {
1723
1769
  LoadBalancingPolicy::Args lb_policy_args;
1724
1770
  lb_policy_args.work_serializer = work_serializer();
1725
1771
  lb_policy_args.args = args;
1726
- lb_policy_args.channel_control_helper = absl::make_unique<Helper>(Ref());
1772
+ lb_policy_args.channel_control_helper =
1773
+ std::make_unique<Helper>(Ref(DEBUG_LOCATION, "Helper"));
1727
1774
  OrphanablePtr<LoadBalancingPolicy> lb_policy =
1728
1775
  MakeOrphanable<ChildPolicyHandler>(std::move(lb_policy_args),
1729
1776
  &grpc_lb_glb_trace);
@@ -1746,9 +1793,10 @@ void GrpcLb::CreateOrUpdateChildPolicyLocked() {
1746
1793
  bool is_backend_from_grpclb_load_balancer = false;
1747
1794
  if (fallback_mode_) {
1748
1795
  // If CreateOrUpdateChildPolicyLocked() is invoked when we haven't
1749
- // received any serverlist from the balancer, we use the fallback backends
1750
- // returned by the resolver. Note that the fallback backend list may be
1751
- // empty, in which case the new child policy will fail the picks.
1796
+ // received any serverlist from the balancer, we use the fallback
1797
+ // backends returned by the resolver. Note that the fallback backend
1798
+ // list may be empty, in which case the new child policy will fail the
1799
+ // picks.
1752
1800
  update_args.addresses = fallback_backend_addresses_;
1753
1801
  if (fallback_backend_addresses_.ok() &&
1754
1802
  fallback_backend_addresses_->empty()) {
@@ -1763,7 +1811,7 @@ void GrpcLb::CreateOrUpdateChildPolicyLocked() {
1763
1811
  }
1764
1812
  update_args.args =
1765
1813
  CreateChildPolicyArgsLocked(is_backend_from_grpclb_load_balancer);
1766
- GPR_ASSERT(update_args.args != nullptr);
1814
+ GPR_ASSERT(update_args.args != ChannelArgs());
1767
1815
  update_args.config = config_->child_policy();
1768
1816
  // Create child policy if needed.
1769
1817
  if (child_policy_ == nullptr) {
@@ -1774,7 +1822,9 @@ void GrpcLb::CreateOrUpdateChildPolicyLocked() {
1774
1822
  gpr_log(GPR_INFO, "[grpclb %p] Updating child policy handler %p", this,
1775
1823
  child_policy_.get());
1776
1824
  }
1777
- child_policy_->UpdateLocked(std::move(update_args));
1825
+ // TODO(roth): If we're in fallback mode and the child policy rejects the
1826
+ // update, we should propagate that failure back to the resolver somehow.
1827
+ (void)child_policy_->UpdateLocked(std::move(update_args));
1778
1828
  }
1779
1829
 
1780
1830
  //
@@ -1783,31 +1833,34 @@ void GrpcLb::CreateOrUpdateChildPolicyLocked() {
1783
1833
 
1784
1834
  void GrpcLb::CacheDeletedSubchannelLocked(
1785
1835
  RefCountedPtr<SubchannelInterface> subchannel) {
1786
- Timestamp deletion_time = ExecCtx::Get()->Now() + subchannel_cache_interval_;
1836
+ Timestamp deletion_time = Timestamp::Now() + subchannel_cache_interval_;
1787
1837
  cached_subchannels_[deletion_time].push_back(std::move(subchannel));
1788
- if (!subchannel_cache_timer_pending_) {
1789
- Ref(DEBUG_LOCATION, "OnSubchannelCacheTimer").release();
1790
- subchannel_cache_timer_pending_ = true;
1838
+ if (!subchannel_cache_timer_handle_.has_value()) {
1791
1839
  StartSubchannelCacheTimerLocked();
1792
1840
  }
1793
1841
  }
1794
1842
 
1795
1843
  void GrpcLb::StartSubchannelCacheTimerLocked() {
1796
1844
  GPR_ASSERT(!cached_subchannels_.empty());
1797
- grpc_timer_init(&subchannel_cache_timer_, cached_subchannels_.begin()->first,
1798
- &on_subchannel_cache_timer_);
1845
+ subchannel_cache_timer_handle_ =
1846
+ channel_control_helper()->GetEventEngine()->RunAfter(
1847
+ cached_subchannels_.begin()->first - Timestamp::Now(),
1848
+ [self = static_cast<RefCountedPtr<GrpcLb>>(
1849
+ Ref(DEBUG_LOCATION, "OnSubchannelCacheTimer"))]() mutable {
1850
+ ApplicationCallbackExecCtx callback_exec_ctx;
1851
+ ExecCtx exec_ctx;
1852
+ auto* self_ptr = self.get();
1853
+ self_ptr->work_serializer()->Run(
1854
+ [self = std::move(self)]() mutable {
1855
+ self->OnSubchannelCacheTimerLocked();
1856
+ },
1857
+ DEBUG_LOCATION);
1858
+ });
1799
1859
  }
1800
1860
 
1801
- void GrpcLb::OnSubchannelCacheTimer(void* arg, grpc_error_handle error) {
1802
- auto* self = static_cast<GrpcLb*>(arg);
1803
- (void)GRPC_ERROR_REF(error);
1804
- self->work_serializer()->Run(
1805
- [self, error]() { self->GrpcLb::OnSubchannelCacheTimerLocked(error); },
1806
- DEBUG_LOCATION);
1807
- }
1808
-
1809
- void GrpcLb::OnSubchannelCacheTimerLocked(grpc_error_handle error) {
1810
- if (subchannel_cache_timer_pending_ && error == GRPC_ERROR_NONE) {
1861
+ void GrpcLb::OnSubchannelCacheTimerLocked() {
1862
+ if (subchannel_cache_timer_handle_.has_value()) {
1863
+ subchannel_cache_timer_handle_.reset();
1811
1864
  auto it = cached_subchannels_.begin();
1812
1865
  if (it != cached_subchannels_.end()) {
1813
1866
  if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_glb_trace)) {
@@ -1821,10 +1874,7 @@ void GrpcLb::OnSubchannelCacheTimerLocked(grpc_error_handle error) {
1821
1874
  StartSubchannelCacheTimerLocked();
1822
1875
  return;
1823
1876
  }
1824
- subchannel_cache_timer_pending_ = false;
1825
1877
  }
1826
- Unref(DEBUG_LOCATION, "OnSubchannelCacheTimer");
1827
- GRPC_ERROR_UNREF(error);
1828
1878
  }
1829
1879
 
1830
1880
  //
@@ -1838,88 +1888,33 @@ class GrpcLbFactory : public LoadBalancingPolicyFactory {
1838
1888
  return MakeOrphanable<GrpcLb>(std::move(args));
1839
1889
  }
1840
1890
 
1841
- const char* name() const override { return kGrpclb; }
1891
+ absl::string_view name() const override { return kGrpclb; }
1842
1892
 
1843
- RefCountedPtr<LoadBalancingPolicy::Config> ParseLoadBalancingConfig(
1844
- const Json& json, grpc_error_handle* error) const override {
1845
- GPR_DEBUG_ASSERT(error != nullptr && *error == GRPC_ERROR_NONE);
1846
- if (json.type() == Json::Type::JSON_NULL) {
1847
- return MakeRefCounted<GrpcLbConfig>(nullptr, "");
1848
- }
1849
- std::vector<grpc_error_handle> error_list;
1850
- Json child_policy_config_json_tmp;
1851
- const Json* child_policy_config_json;
1852
- std::string service_name;
1853
- auto it = json.object_value().find("serviceName");
1854
- if (it != json.object_value().end()) {
1855
- const Json& service_name_json = it->second;
1856
- if (service_name_json.type() != Json::Type::STRING) {
1857
- error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1858
- "field:serviceName error:type should be string"));
1859
- } else {
1860
- service_name = service_name_json.string_value();
1861
- }
1862
- }
1863
- it = json.object_value().find("childPolicy");
1864
- if (it == json.object_value().end()) {
1865
- child_policy_config_json_tmp = Json::Array{Json::Object{
1866
- {"round_robin", Json::Object()},
1867
- }};
1868
- child_policy_config_json = &child_policy_config_json_tmp;
1869
- } else {
1870
- child_policy_config_json = &it->second;
1871
- }
1872
- grpc_error_handle parse_error = GRPC_ERROR_NONE;
1873
- RefCountedPtr<LoadBalancingPolicy::Config> child_policy_config =
1874
- LoadBalancingPolicyRegistry::ParseLoadBalancingConfig(
1875
- *child_policy_config_json, &parse_error);
1876
- if (parse_error != GRPC_ERROR_NONE) {
1877
- std::vector<grpc_error_handle> child_errors;
1878
- child_errors.push_back(parse_error);
1879
- error_list.push_back(
1880
- GRPC_ERROR_CREATE_FROM_VECTOR("field:childPolicy", &child_errors));
1881
- }
1882
- if (error_list.empty()) {
1883
- return MakeRefCounted<GrpcLbConfig>(std::move(child_policy_config),
1884
- std::move(service_name));
1885
- } else {
1886
- *error = GRPC_ERROR_CREATE_FROM_VECTOR("GrpcLb Parser", &error_list);
1887
- return nullptr;
1888
- }
1893
+ absl::StatusOr<RefCountedPtr<LoadBalancingPolicy::Config>>
1894
+ ParseLoadBalancingConfig(const Json& json) const override {
1895
+ return LoadRefCountedFromJson<GrpcLbConfig>(
1896
+ json, JsonArgs(), "errors validating grpclb LB policy config");
1889
1897
  }
1890
1898
  };
1891
1899
 
1892
1900
  } // namespace
1893
1901
 
1894
- } // namespace grpc_core
1895
-
1896
1902
  //
1897
1903
  // Plugin registration
1898
1904
  //
1899
1905
 
1900
- void grpc_lb_policy_grpclb_init() {
1901
- grpc_core::LoadBalancingPolicyRegistry::Builder::
1902
- RegisterLoadBalancingPolicyFactory(
1903
- absl::make_unique<grpc_core::GrpcLbFactory>());
1904
- }
1905
-
1906
- void grpc_lb_policy_grpclb_shutdown() {}
1907
-
1908
- namespace grpc_core {
1909
- void RegisterGrpcLbLoadReportingFilter(CoreConfiguration::Builder* builder) {
1906
+ void RegisterGrpcLbPolicy(CoreConfiguration::Builder* builder) {
1907
+ builder->lb_policy_registry()->RegisterLoadBalancingPolicyFactory(
1908
+ std::make_unique<GrpcLbFactory>());
1910
1909
  builder->channel_init()->RegisterStage(
1911
1910
  GRPC_CLIENT_SUBCHANNEL, GRPC_CHANNEL_INIT_BUILTIN_PRIORITY,
1912
1911
  [](ChannelStackBuilder* builder) {
1913
1912
  if (builder->channel_args().GetString(GRPC_ARG_LB_POLICY_NAME) ==
1914
1913
  "grpclb") {
1915
- // TODO(roth): When we get around to re-attempting
1916
- // https://github.com/grpc/grpc/pull/16214, we should try to keep
1917
- // this filter at the very top of the subchannel stack, since that
1918
- // will minimize the number of metadata elements that the filter
1919
- // needs to iterate through to find the ClientStats object.
1920
- builder->PrependFilter(&grpc_client_load_reporting_filter);
1914
+ builder->PrependFilter(&ClientLoadReportingFilter::kFilter);
1921
1915
  }
1922
1916
  return true;
1923
1917
  });
1924
1918
  }
1919
+
1925
1920
  } // namespace grpc_core