grpc 1.46.3 → 1.53.1

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