grpc 1.47.0 → 1.53.0

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

Potentially problematic release.


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

Files changed (1777) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +386 -162
  3. data/include/grpc/byte_buffer.h +76 -1
  4. data/include/grpc/byte_buffer_reader.h +19 -1
  5. data/include/grpc/compression.h +2 -2
  6. data/include/grpc/event_engine/endpoint_config.h +11 -5
  7. data/include/grpc/event_engine/event_engine.h +87 -32
  8. data/include/grpc/event_engine/internal/memory_allocator_impl.h +1 -1
  9. data/include/grpc/event_engine/internal/slice_cast.h +67 -0
  10. data/include/grpc/event_engine/memory_allocator.h +1 -1
  11. data/include/grpc/event_engine/slice.h +24 -4
  12. data/include/grpc/event_engine/slice_buffer.h +52 -5
  13. data/include/grpc/fork.h +25 -1
  14. data/include/grpc/grpc.h +4 -14
  15. data/include/grpc/grpc_posix.h +1 -1
  16. data/include/grpc/impl/codegen/atm.h +3 -71
  17. data/include/grpc/impl/codegen/atm_gcc_atomic.h +3 -67
  18. data/include/grpc/impl/codegen/atm_gcc_sync.h +3 -61
  19. data/include/grpc/impl/codegen/atm_windows.h +3 -108
  20. data/include/grpc/impl/codegen/byte_buffer.h +4 -78
  21. data/include/grpc/impl/codegen/byte_buffer_reader.h +4 -19
  22. data/include/grpc/impl/codegen/compression_types.h +5 -83
  23. data/include/grpc/impl/codegen/connectivity_state.h +5 -21
  24. data/include/grpc/impl/codegen/fork.h +4 -25
  25. data/include/grpc/impl/codegen/gpr_types.h +4 -35
  26. data/include/grpc/impl/codegen/grpc_types.h +5 -791
  27. data/include/grpc/impl/codegen/log.h +3 -86
  28. data/include/grpc/impl/codegen/port_platform.h +3 -763
  29. data/include/grpc/impl/codegen/propagation_bits.h +3 -28
  30. data/include/grpc/impl/codegen/slice.h +3 -106
  31. data/include/grpc/impl/codegen/status.h +4 -131
  32. data/include/grpc/impl/codegen/sync.h +3 -42
  33. data/include/grpc/impl/codegen/sync_abseil.h +3 -12
  34. data/include/grpc/impl/codegen/sync_custom.h +3 -14
  35. data/include/grpc/impl/codegen/sync_generic.h +3 -25
  36. data/include/grpc/impl/codegen/sync_posix.h +3 -28
  37. data/include/grpc/impl/codegen/sync_windows.h +3 -16
  38. data/include/grpc/impl/compression_types.h +109 -0
  39. data/include/grpc/impl/connectivity_state.h +47 -0
  40. data/include/grpc/impl/grpc_types.h +827 -0
  41. data/include/grpc/impl/propagation_bits.h +54 -0
  42. data/include/grpc/impl/slice_type.h +112 -0
  43. data/include/grpc/load_reporting.h +1 -1
  44. data/include/grpc/module.modulemap +5 -1
  45. data/include/grpc/slice.h +1 -1
  46. data/include/grpc/status.h +131 -1
  47. data/include/grpc/support/atm.h +70 -1
  48. data/include/grpc/support/atm_gcc_atomic.h +59 -1
  49. data/include/grpc/support/atm_gcc_sync.h +58 -1
  50. data/include/grpc/support/atm_windows.h +105 -1
  51. data/include/grpc/support/log.h +87 -1
  52. data/include/grpc/support/log_windows.h +1 -1
  53. data/include/grpc/support/port_platform.h +767 -1
  54. data/include/grpc/support/string_util.h +1 -1
  55. data/include/grpc/support/sync.h +35 -2
  56. data/include/grpc/support/sync_abseil.h +11 -1
  57. data/include/grpc/support/sync_custom.h +13 -1
  58. data/include/grpc/support/sync_generic.h +24 -1
  59. data/include/grpc/support/sync_posix.h +27 -1
  60. data/include/grpc/support/sync_windows.h +15 -1
  61. data/include/grpc/support/time.h +31 -6
  62. data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +148 -0
  63. data/src/core/ext/filters/backend_metrics/backend_metric_filter.h +52 -0
  64. data/src/core/ext/filters/backend_metrics/backend_metric_provider.h +29 -0
  65. data/src/core/ext/filters/census/grpc_context.cc +19 -17
  66. data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +49 -31
  67. data/src/core/ext/filters/channel_idle/channel_idle_filter.h +22 -5
  68. data/src/core/ext/filters/channel_idle/idle_filter_state.h +6 -4
  69. data/src/core/ext/filters/client_channel/backend_metric.cc +2 -0
  70. data/src/core/ext/filters/client_channel/backend_metric.h +3 -3
  71. data/src/core/ext/filters/client_channel/backup_poller.cc +30 -30
  72. data/src/core/ext/filters/client_channel/backup_poller.h +24 -24
  73. data/src/core/ext/filters/client_channel/channel_connectivity.cc +52 -29
  74. data/src/core/ext/filters/client_channel/client_channel.cc +348 -441
  75. data/src/core/ext/filters/client_channel/client_channel.h +46 -24
  76. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +17 -19
  77. data/src/core/ext/filters/client_channel/client_channel_channelz.h +22 -22
  78. data/src/core/ext/filters/client_channel/client_channel_factory.cc +17 -46
  79. data/src/core/ext/filters/client_channel/client_channel_factory.h +5 -13
  80. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +18 -34
  81. data/src/core/ext/filters/client_channel/client_channel_service_config.cc +153 -0
  82. data/src/core/ext/filters/client_channel/{resolver_result_parsing.h → client_channel_service_config.h} +26 -26
  83. data/src/core/ext/filters/client_channel/config_selector.h +27 -23
  84. data/src/core/ext/filters/client_channel/connector.h +13 -10
  85. data/src/core/ext/filters/client_channel/dynamic_filters.cc +29 -54
  86. data/src/core/ext/filters/client_channel/dynamic_filters.h +10 -11
  87. data/src/core/ext/filters/client_channel/global_subchannel_pool.h +21 -21
  88. data/src/core/ext/filters/client_channel/health/health_check_client.cc +4 -5
  89. data/src/core/ext/filters/client_channel/health/health_check_client.h +3 -3
  90. data/src/core/ext/filters/client_channel/http_proxy.cc +90 -110
  91. data/src/core/ext/filters/client_channel/http_proxy.h +36 -32
  92. data/src/core/ext/filters/client_channel/lb_call_state_internal.h +39 -0
  93. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +4 -5
  94. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +3 -3
  95. data/src/core/ext/filters/client_channel/lb_policy/backend_metric_data.h +21 -21
  96. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +27 -18
  97. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +14 -14
  98. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +66 -132
  99. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +41 -24
  100. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +361 -366
  101. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +26 -27
  102. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +12 -4
  103. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +9 -7
  104. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +18 -20
  105. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +21 -22
  106. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +19 -19
  107. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +22 -24
  108. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +28 -98
  109. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.h +5 -5
  110. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric_internal.h +117 -0
  111. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +418 -327
  112. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +46 -6
  113. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +140 -154
  114. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +304 -387
  115. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +388 -363
  116. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +19 -11
  117. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +578 -628
  118. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +154 -138
  119. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +134 -115
  120. data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/static_stride_scheduler.cc +128 -0
  121. data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/static_stride_scheduler.h +71 -0
  122. data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/weighted_round_robin.cc +972 -0
  123. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +202 -224
  124. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +124 -139
  125. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_attributes.cc +42 -0
  126. data/src/core/ext/filters/client_channel/lb_policy/xds/{xds.h → xds_attributes.h} +15 -17
  127. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h +3 -3
  128. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +154 -258
  129. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +183 -214
  130. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +361 -411
  131. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.cc +819 -0
  132. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.h +67 -0
  133. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_wrr_locality.cc +369 -0
  134. data/src/core/ext/filters/client_channel/local_subchannel_pool.h +21 -21
  135. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +15 -18
  136. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +452 -175
  137. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +42 -43
  138. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +22 -23
  139. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +88 -83
  140. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +276 -202
  141. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +69 -57
  142. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_posix.cc +18 -18
  143. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +18 -18
  144. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.h +20 -21
  145. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +32 -23
  146. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +9 -21
  147. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +15 -4
  148. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +83 -57
  149. data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +123 -67
  150. data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +25 -17
  151. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +9 -19
  152. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +293 -286
  153. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +6 -4
  154. data/src/core/ext/filters/client_channel/retry_filter.cc +135 -172
  155. data/src/core/ext/filters/client_channel/retry_filter.h +4 -3
  156. data/src/core/ext/filters/client_channel/retry_service_config.cc +193 -224
  157. data/src/core/ext/filters/client_channel/retry_service_config.h +22 -28
  158. data/src/core/ext/filters/client_channel/retry_throttle.cc +27 -29
  159. data/src/core/ext/filters/client_channel/retry_throttle.h +29 -28
  160. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +13 -13
  161. data/src/core/ext/filters/client_channel/subchannel.cc +275 -323
  162. data/src/core/ext/filters/client_channel/subchannel.h +45 -75
  163. data/src/core/ext/filters/client_channel/subchannel_interface_internal.h +4 -4
  164. data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +6 -76
  165. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +37 -46
  166. data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +23 -111
  167. data/src/core/ext/filters/client_channel/subchannel_stream_client.h +8 -12
  168. data/src/core/ext/filters/deadline/deadline_filter.cc +90 -76
  169. data/src/core/ext/filters/deadline/deadline_filter.h +14 -12
  170. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +43 -18
  171. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +20 -11
  172. data/src/core/ext/filters/fault_injection/fault_injection_service_config_parser.cc +118 -0
  173. data/src/core/ext/filters/fault_injection/{service_config_parser.h → fault_injection_service_config_parser.h} +34 -13
  174. data/src/core/ext/filters/http/client/http_client_filter.cc +61 -48
  175. data/src/core/ext/filters/http/client/http_client_filter.h +29 -22
  176. data/src/core/ext/filters/http/client_authority_filter.cc +28 -28
  177. data/src/core/ext/filters/http/client_authority_filter.h +27 -24
  178. data/src/core/ext/filters/http/http_filters_plugin.cc +43 -51
  179. data/src/core/ext/filters/http/message_compress/compression_filter.cc +307 -0
  180. data/src/core/ext/filters/http/message_compress/compression_filter.h +139 -0
  181. data/src/core/ext/filters/http/server/http_server_filter.cc +63 -56
  182. data/src/core/ext/filters/http/server/http_server_filter.h +28 -23
  183. data/src/core/ext/filters/message_size/message_size_filter.cc +109 -123
  184. data/src/core/ext/filters/message_size/message_size_filter.h +34 -17
  185. data/src/core/ext/filters/rbac/rbac_filter.cc +28 -16
  186. data/src/core/ext/filters/rbac/rbac_filter.h +11 -3
  187. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +736 -523
  188. data/src/core/ext/filters/rbac/rbac_service_config_parser.h +18 -7
  189. data/src/core/ext/filters/server_config_selector/server_config_selector.h +20 -8
  190. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +28 -12
  191. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.h +4 -3
  192. data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +219 -0
  193. data/src/core/ext/filters/stateful_session/stateful_session_filter.h +66 -0
  194. data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.cc +82 -0
  195. data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.h +93 -0
  196. data/src/core/ext/transport/chttp2/alpn/alpn.cc +18 -18
  197. data/src/core/ext/transport/chttp2/alpn/alpn.h +24 -24
  198. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +109 -131
  199. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +30 -24
  200. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +167 -203
  201. data/src/core/ext/transport/chttp2/server/chttp2_server.h +25 -27
  202. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +22 -22
  203. data/src/core/ext/transport/chttp2/transport/bin_decoder.h +33 -33
  204. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +30 -30
  205. data/src/core/ext/transport/chttp2/transport/bin_encoder.h +29 -29
  206. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +714 -1060
  207. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +24 -24
  208. data/src/core/ext/transport/chttp2/transport/context_list.cc +19 -19
  209. data/src/core/ext/transport/chttp2/transport/context_list.h +28 -28
  210. data/src/core/ext/transport/chttp2/transport/decode_huff.cc +251 -0
  211. data/src/core/ext/transport/chttp2/transport/decode_huff.h +971 -0
  212. data/src/core/ext/transport/chttp2/transport/flow_control.cc +347 -301
  213. data/src/core/ext/transport/chttp2/transport/flow_control.h +245 -326
  214. data/src/core/ext/transport/chttp2/transport/frame.h +21 -21
  215. data/src/core/ext/transport/chttp2/transport/frame_data.cc +84 -239
  216. data/src/core/ext/transport/chttp2/transport/frame_data.h +36 -62
  217. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +38 -36
  218. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +20 -20
  219. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +27 -26
  220. data/src/core/ext/transport/chttp2/transport/frame_ping.h +22 -22
  221. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +30 -25
  222. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +21 -21
  223. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +35 -77
  224. data/src/core/ext/transport/chttp2/transport/frame_settings.h +22 -22
  225. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +31 -33
  226. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +21 -21
  227. data/src/core/ext/transport/chttp2/transport/hpack_constants.h +10 -4
  228. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +159 -208
  229. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +46 -61
  230. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +2 -2
  231. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +11 -5
  232. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +96 -542
  233. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +23 -23
  234. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +28 -38
  235. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +32 -27
  236. data/src/core/ext/transport/chttp2/transport/http2_settings.cc +21 -19
  237. data/src/core/ext/transport/chttp2/transport/http2_settings.h +39 -37
  238. data/src/core/ext/transport/chttp2/transport/http_trace.cc +19 -0
  239. data/src/core/ext/transport/chttp2/transport/http_trace.h +24 -0
  240. data/src/core/ext/transport/chttp2/transport/huffsyms.cc +20 -20
  241. data/src/core/ext/transport/chttp2/transport/huffsyms.h +21 -21
  242. data/src/core/ext/transport/chttp2/transport/internal.h +225 -296
  243. data/src/core/ext/transport/chttp2/transport/parsing.cc +333 -129
  244. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +19 -23
  245. data/src/core/ext/transport/chttp2/transport/stream_map.cc +23 -23
  246. data/src/core/ext/transport/chttp2/transport/stream_map.h +33 -33
  247. data/src/core/ext/transport/chttp2/transport/varint.cc +19 -20
  248. data/src/core/ext/transport/chttp2/transport/varint.h +37 -34
  249. data/src/core/ext/transport/chttp2/transport/writing.cc +85 -94
  250. data/src/core/ext/transport/inproc/inproc_plugin.cc +17 -18
  251. data/src/core/ext/transport/inproc/inproc_transport.cc +223 -273
  252. data/src/core/ext/transport/inproc/inproc_transport.h +23 -21
  253. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.c +5 -5
  254. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.h +30 -10
  255. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.c +6 -5
  256. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.h +33 -8
  257. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +8 -327
  258. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +83 -1723
  259. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.c +388 -0
  260. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.h +1953 -0
  261. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.c +2 -2
  262. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.h +12 -4
  263. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.c +6 -4
  264. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.h +33 -4
  265. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.c +1 -1
  266. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.h +6 -2
  267. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.c +1 -1
  268. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.h +6 -2
  269. data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.h +6 -2
  270. data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.h +12 -4
  271. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.c +1 -1
  272. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.h +6 -2
  273. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +1 -1
  274. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +7 -3
  275. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +14 -14
  276. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +90 -30
  277. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +25 -19
  278. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +168 -34
  279. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +3 -3
  280. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +18 -6
  281. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +35 -43
  282. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +195 -116
  283. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +1 -1
  284. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +6 -2
  285. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +1 -1
  286. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +6 -2
  287. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.c +11 -11
  288. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.h +84 -28
  289. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +35 -12
  290. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +179 -14
  291. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +1 -1
  292. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +6 -2
  293. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +25 -23
  294. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +156 -48
  295. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +7 -7
  296. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +42 -14
  297. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +1 -1
  298. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +6 -2
  299. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +1 -1
  300. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +6 -2
  301. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.c +2 -2
  302. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.h +12 -4
  303. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +12 -12
  304. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +78 -26
  305. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +23 -20
  306. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +137 -69
  307. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +1 -1
  308. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +6 -2
  309. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +23 -21
  310. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +132 -44
  311. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +1 -1
  312. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +6 -2
  313. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.c +2 -2
  314. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.h +12 -4
  315. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c +17 -2
  316. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +67 -2
  317. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +1 -1
  318. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +6 -2
  319. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.c +1 -1
  320. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.h +6 -2
  321. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +3 -3
  322. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +18 -6
  323. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +15 -9
  324. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +73 -18
  325. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +3 -3
  326. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +30 -10
  327. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +1 -1
  328. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +6 -2
  329. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +39 -13
  330. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +194 -15
  331. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +5 -5
  332. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +42 -14
  333. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +5 -3
  334. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +28 -2
  335. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +7 -4
  336. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +36 -4
  337. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.c +1 -1
  338. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.h +6 -2
  339. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +6 -6
  340. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +48 -16
  341. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +8 -8
  342. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +54 -18
  343. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +26 -11
  344. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +124 -14
  345. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +19 -15
  346. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +78 -69
  347. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +168 -82
  348. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +887 -166
  349. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +3 -3
  350. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +18 -6
  351. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.c +34 -15
  352. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.h +161 -22
  353. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.c +3 -2
  354. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.h +15 -2
  355. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.c +1 -1
  356. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.h +6 -2
  357. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +2 -2
  358. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +12 -4
  359. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.c +1 -1
  360. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.h +6 -2
  361. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.c +1 -1
  362. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.h +6 -2
  363. data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.c +47 -0
  364. data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.h +107 -0
  365. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.c +1 -1
  366. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.h +6 -2
  367. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.c +2 -2
  368. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.h +12 -4
  369. data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.c +1 -0
  370. data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.h +1 -0
  371. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.c +2 -2
  372. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.h +12 -4
  373. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.c +7 -6
  374. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.h +27 -14
  375. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +1 -1
  376. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +6 -2
  377. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +2 -2
  378. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +30 -10
  379. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +2 -2
  380. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +18 -6
  381. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.c +11 -4
  382. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +58 -4
  383. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +6 -3
  384. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +29 -2
  385. data/src/core/ext/upb-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.c +62 -0
  386. data/src/core/ext/upb-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.h +179 -0
  387. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +38 -27
  388. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +207 -52
  389. data/src/core/ext/upb-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb.c +46 -0
  390. data/src/core/ext/upb-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb.h +98 -0
  391. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/client_side_weighted_round_robin/v3/client_side_weighted_round_robin.upb.c +54 -0
  392. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/client_side_weighted_round_robin/v3/client_side_weighted_round_robin.upb.h +188 -0
  393. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/common/v3/common.upb.c +111 -0
  394. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/common/v3/common.upb.h +444 -0
  395. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.c +56 -0
  396. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h +192 -0
  397. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.c +46 -0
  398. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.h +98 -0
  399. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +10 -8
  400. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +66 -14
  401. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +3 -3
  402. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +18 -6
  403. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +13 -11
  404. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +73 -23
  405. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.c +2 -2
  406. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.h +12 -4
  407. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +1 -1
  408. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +6 -2
  409. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +133 -16
  410. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +656 -12
  411. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +2 -2
  412. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +12 -4
  413. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +5 -5
  414. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +30 -10
  415. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.c +1 -1
  416. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.h +6 -2
  417. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.c +4 -4
  418. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.h +24 -8
  419. data/src/core/ext/upb-generated/envoy/type/matcher/v3/filter_state.upb.c +47 -0
  420. data/src/core/ext/upb-generated/envoy/type/matcher/v3/filter_state.upb.h +113 -0
  421. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.c +4 -4
  422. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.h +24 -8
  423. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +2 -2
  424. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +12 -4
  425. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +1 -1
  426. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +6 -2
  427. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +1 -1
  428. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +6 -2
  429. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +1 -1
  430. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +6 -2
  431. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +3 -3
  432. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +18 -6
  433. data/src/core/ext/upb-generated/envoy/type/matcher/v3/status_code_input.upb.c +43 -0
  434. data/src/core/ext/upb-generated/envoy/type/matcher/v3/status_code_input.upb.h +114 -0
  435. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +1 -1
  436. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +12 -4
  437. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +2 -2
  438. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +12 -4
  439. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +3 -3
  440. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +18 -6
  441. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +7 -7
  442. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +42 -14
  443. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +5 -5
  444. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +30 -10
  445. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.c +3 -3
  446. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.h +18 -6
  447. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.c +1 -1
  448. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.h +6 -2
  449. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +12 -4
  450. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +2 -2
  451. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +18 -6
  452. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_strategy.upb.c +63 -0
  453. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_strategy.upb.h +202 -0
  454. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_unit.upb.h +3 -1
  455. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +1 -1
  456. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +6 -2
  457. data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.h +6 -2
  458. data/src/core/ext/upb-generated/google/api/annotations.upb.h +1 -1
  459. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +11 -11
  460. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +66 -22
  461. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +9 -9
  462. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +72 -24
  463. data/src/core/ext/upb-generated/google/api/http.upb.c +3 -3
  464. data/src/core/ext/upb-generated/google/api/http.upb.h +18 -6
  465. data/src/core/ext/upb-generated/google/api/httpbody.upb.c +1 -1
  466. data/src/core/ext/upb-generated/google/api/httpbody.upb.h +6 -2
  467. data/src/core/ext/upb-generated/google/protobuf/any.upb.c +1 -1
  468. data/src/core/ext/upb-generated/google/protobuf/any.upb.h +6 -2
  469. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +44 -43
  470. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +177 -55
  471. data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +1 -1
  472. data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +6 -2
  473. data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +1 -1
  474. data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +6 -2
  475. data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +2 -2
  476. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +18 -6
  477. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +1 -1
  478. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +6 -2
  479. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +6 -6
  480. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +54 -18
  481. data/src/core/ext/upb-generated/google/rpc/status.upb.c +1 -1
  482. data/src/core/ext/upb-generated/google/rpc/status.upb.h +6 -2
  483. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.c +2 -2
  484. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.h +24 -8
  485. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +6 -2
  486. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +7 -7
  487. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +60 -20
  488. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +1 -1
  489. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +12 -4
  490. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +2 -2
  491. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +12 -4
  492. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +6 -6
  493. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +54 -18
  494. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +2 -2
  495. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +12 -4
  496. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.c +7 -7
  497. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.h +42 -14
  498. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +3 -3
  499. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +23 -11
  500. data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +1 -1
  501. data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +7 -3
  502. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +7 -3
  503. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +1 -1
  504. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +7 -3
  505. data/src/core/ext/upb-generated/validate/validate.upb.c +22 -22
  506. data/src/core/ext/upb-generated/validate/validate.upb.h +139 -47
  507. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.c +3 -3
  508. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.h +23 -11
  509. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.c +1 -1
  510. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.h +7 -3
  511. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +3 -3
  512. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +27 -11
  513. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.c +1 -1
  514. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.h +7 -3
  515. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +1 -1
  516. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +6 -2
  517. data/src/core/ext/upb-generated/xds/core/v3/cidr.upb.c +47 -0
  518. data/src/core/ext/upb-generated/xds/core/v3/cidr.upb.h +107 -0
  519. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +2 -2
  520. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +12 -4
  521. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +1 -1
  522. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +6 -2
  523. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.c +1 -1
  524. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.h +6 -2
  525. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +1 -1
  526. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +6 -2
  527. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +1 -1
  528. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +12 -4
  529. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +1 -1
  530. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +6 -2
  531. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +3 -2
  532. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +15 -2
  533. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.c +1 -2
  534. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.h +6 -2
  535. data/src/core/ext/upb-generated/xds/type/matcher/v3/cel.upb.c +46 -0
  536. data/src/core/ext/upb-generated/xds/type/matcher/v3/cel.upb.h +98 -0
  537. data/src/core/ext/upb-generated/xds/type/matcher/v3/domain.upb.c +62 -0
  538. data/src/core/ext/upb-generated/xds/type/matcher/v3/domain.upb.h +174 -0
  539. data/src/core/ext/upb-generated/xds/type/matcher/v3/http_inputs.upb.c +36 -0
  540. data/src/core/ext/upb-generated/xds/type/matcher/v3/http_inputs.upb.h +74 -0
  541. data/src/core/ext/upb-generated/xds/type/matcher/v3/ip.upb.c +65 -0
  542. data/src/core/ext/upb-generated/xds/type/matcher/v3/ip.upb.h +191 -0
  543. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.c +6 -6
  544. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.h +54 -18
  545. data/src/core/ext/upb-generated/xds/type/matcher/v3/range.upb.c +127 -0
  546. data/src/core/ext/upb-generated/xds/type/matcher/v3/range.upb.h +474 -0
  547. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.c +2 -2
  548. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.h +12 -4
  549. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.c +1 -1
  550. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.h +12 -4
  551. data/src/core/ext/upb-generated/xds/type/v3/cel.upb.c +67 -0
  552. data/src/core/ext/upb-generated/xds/type/v3/cel.upb.h +214 -0
  553. data/src/core/ext/upb-generated/xds/type/v3/range.upb.c +64 -0
  554. data/src/core/ext/upb-generated/xds/type/v3/range.upb.h +208 -0
  555. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.c +1 -2
  556. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +6 -2
  557. data/src/core/ext/upbdefs-generated/envoy/admin/v3/clusters.upbdefs.c +54 -53
  558. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.c +67 -274
  559. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.h +0 -85
  560. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.c +277 -0
  561. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.h +125 -0
  562. data/src/core/ext/upbdefs-generated/envoy/admin/v3/listeners.upbdefs.c +14 -11
  563. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +107 -107
  564. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +199 -187
  565. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +232 -222
  566. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +0 -5
  567. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.c +95 -75
  568. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.h +5 -0
  569. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +187 -183
  570. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +81 -75
  571. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +190 -186
  572. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.c +7 -3
  573. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.h +5 -0
  574. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +16 -16
  575. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +71 -66
  576. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +164 -137
  577. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.h +5 -0
  578. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.c +16 -12
  579. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +39 -31
  580. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.c +140 -129
  581. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.h +5 -0
  582. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +82 -74
  583. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.h +2 -2
  584. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +740 -667
  585. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +20 -0
  586. data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.c +150 -139
  587. data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.h +5 -0
  588. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/datadog.upbdefs.c +16 -14
  589. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.c +48 -0
  590. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.h +35 -0
  591. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/trace.upbdefs.c +16 -12
  592. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/zipkin.upbdefs.c +20 -18
  593. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.c +46 -25
  594. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c +53 -42
  595. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.c +60 -0
  596. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.h +40 -0
  597. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +485 -467
  598. data/src/core/ext/upbdefs-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upbdefs.c +50 -0
  599. data/src/core/ext/upbdefs-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upbdefs.h +35 -0
  600. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +21 -18
  601. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +149 -145
  602. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +156 -84
  603. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.h +35 -0
  604. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +113 -113
  605. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/filter_state.upbdefs.c +48 -0
  606. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/filter_state.upbdefs.h +35 -0
  607. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +29 -28
  608. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/status_code_input.upbdefs.c +40 -0
  609. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/status_code_input.upbdefs.h +40 -0
  610. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_strategy.upbdefs.c +69 -0
  611. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_strategy.upbdefs.h +40 -0
  612. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_unit.upbdefs.c +10 -9
  613. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +92 -90
  614. data/src/core/ext/upbdefs-generated/xds/core/v3/cidr.upbdefs.c +45 -0
  615. data/src/core/ext/upbdefs-generated/xds/core/v3/cidr.upbdefs.h +35 -0
  616. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/cel.upbdefs.c +43 -0
  617. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/cel.upbdefs.h +35 -0
  618. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/domain.upbdefs.c +51 -0
  619. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/domain.upbdefs.h +40 -0
  620. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/http_inputs.upbdefs.c +36 -0
  621. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/http_inputs.upbdefs.h +35 -0
  622. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/ip.upbdefs.c +55 -0
  623. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/ip.upbdefs.h +40 -0
  624. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/matcher.upbdefs.c +9 -9
  625. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/range.upbdefs.c +71 -0
  626. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/range.upbdefs.h +60 -0
  627. data/src/core/ext/upbdefs-generated/xds/type/v3/cel.upbdefs.c +60 -0
  628. data/src/core/ext/upbdefs-generated/xds/type/v3/cel.upbdefs.h +40 -0
  629. data/src/core/ext/upbdefs-generated/xds/type/v3/range.upbdefs.c +36 -0
  630. data/src/core/ext/upbdefs-generated/xds/type/v3/range.upbdefs.h +45 -0
  631. data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.c +4 -7
  632. data/src/core/ext/xds/certificate_provider_store.cc +65 -3
  633. data/src/core/ext/xds/certificate_provider_store.h +21 -4
  634. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +17 -10
  635. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +12 -4
  636. data/src/core/ext/xds/upb_utils.h +3 -25
  637. data/src/core/ext/xds/xds_api.cc +90 -196
  638. data/src/core/ext/xds/xds_api.h +41 -39
  639. data/src/core/ext/xds/xds_bootstrap.cc +5 -537
  640. data/src/core/ext/xds/xds_bootstrap.h +41 -96
  641. data/src/core/ext/xds/xds_bootstrap_grpc.cc +362 -0
  642. data/src/core/ext/xds/xds_bootstrap_grpc.h +184 -0
  643. data/src/core/ext/xds/xds_certificate_provider.cc +31 -25
  644. data/src/core/ext/xds/xds_certificate_provider.h +28 -4
  645. data/src/core/ext/xds/xds_channel_args.h +3 -3
  646. data/src/core/ext/xds/xds_channel_stack_modifier.cc +15 -5
  647. data/src/core/ext/xds/xds_channel_stack_modifier.h +16 -4
  648. data/src/core/ext/xds/xds_client.cc +833 -1324
  649. data/src/core/ext/xds/xds_client.h +57 -61
  650. data/src/core/ext/xds/xds_client_grpc.cc +235 -0
  651. data/src/core/ext/xds/xds_client_grpc.h +79 -0
  652. data/src/core/ext/xds/xds_client_stats.cc +24 -25
  653. data/src/core/ext/xds/xds_client_stats.h +26 -24
  654. data/src/core/ext/xds/xds_cluster.cc +413 -245
  655. data/src/core/ext/xds/xds_cluster.h +66 -40
  656. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +67 -77
  657. data/src/core/ext/xds/xds_cluster_specifier_plugin.h +47 -29
  658. data/src/core/ext/xds/xds_common_types.cc +238 -123
  659. data/src/core/ext/xds/xds_common_types.h +29 -16
  660. data/src/core/ext/xds/xds_endpoint.cc +265 -162
  661. data/src/core/ext/xds/xds_endpoint.h +19 -15
  662. data/src/core/ext/xds/xds_health_status.cc +80 -0
  663. data/src/core/ext/xds/xds_health_status.h +109 -0
  664. data/src/core/ext/xds/xds_http_fault_filter.cc +66 -57
  665. data/src/core/ext/xds/xds_http_fault_filter.h +19 -25
  666. data/src/core/ext/xds/xds_http_filters.cc +70 -71
  667. data/src/core/ext/xds/xds_http_filters.h +73 -25
  668. data/src/core/ext/xds/xds_http_rbac_filter.cc +168 -225
  669. data/src/core/ext/xds/xds_http_rbac_filter.h +22 -18
  670. data/src/core/ext/xds/xds_http_stateful_session_filter.cc +218 -0
  671. data/src/core/ext/xds/xds_http_stateful_session_filter.h +58 -0
  672. data/src/core/ext/xds/xds_lb_policy_registry.cc +334 -0
  673. data/src/core/ext/xds/xds_lb_policy_registry.h +71 -0
  674. data/src/core/ext/xds/xds_listener.cc +557 -475
  675. data/src/core/ext/xds/xds_listener.h +57 -51
  676. data/src/core/ext/xds/xds_resource_type.h +28 -22
  677. data/src/core/ext/xds/xds_resource_type_impl.h +18 -17
  678. data/src/core/ext/xds/xds_route_config.cc +592 -570
  679. data/src/core/ext/xds/xds_route_config.h +74 -40
  680. data/src/core/ext/xds/xds_routing.cc +21 -7
  681. data/src/core/ext/xds/xds_routing.h +17 -12
  682. data/src/core/ext/xds/xds_server_config_fetcher.cc +227 -179
  683. data/src/core/ext/xds/xds_transport.h +86 -0
  684. data/src/core/ext/xds/xds_transport_grpc.cc +356 -0
  685. data/src/core/ext/xds/xds_transport_grpc.h +135 -0
  686. data/src/core/lib/address_utils/parse_address.cc +52 -52
  687. data/src/core/lib/address_utils/parse_address.h +46 -42
  688. data/src/core/lib/address_utils/sockaddr_utils.cc +38 -35
  689. data/src/core/lib/address_utils/sockaddr_utils.h +38 -36
  690. data/src/core/lib/avl/avl.h +54 -32
  691. data/src/core/lib/backoff/backoff.cc +19 -21
  692. data/src/core/lib/backoff/backoff.h +21 -21
  693. data/src/core/lib/channel/call_finalization.h +4 -6
  694. data/src/core/lib/channel/call_tracer.h +17 -8
  695. data/src/core/lib/channel/channel_args.cc +108 -39
  696. data/src/core/lib/channel/channel_args.h +285 -111
  697. data/src/core/lib/channel/channel_args_preconditioning.cc +1 -0
  698. data/src/core/lib/channel/channel_args_preconditioning.h +4 -4
  699. data/src/core/lib/channel/channel_fwd.h +26 -0
  700. data/src/core/lib/channel/channel_stack.cc +60 -58
  701. data/src/core/lib/channel/channel_stack.h +149 -146
  702. data/src/core/lib/channel/channel_stack_builder.cc +21 -24
  703. data/src/core/lib/channel/channel_stack_builder.h +19 -14
  704. data/src/core/lib/channel/channel_stack_builder_impl.cc +55 -26
  705. data/src/core/lib/channel/channel_stack_builder_impl.h +6 -3
  706. data/src/core/lib/channel/channel_trace.cc +24 -26
  707. data/src/core/lib/channel/channel_trace.h +22 -22
  708. data/src/core/lib/channel/channelz.cc +44 -54
  709. data/src/core/lib/channel/channelz.h +40 -32
  710. data/src/core/lib/channel/channelz_registry.cc +21 -22
  711. data/src/core/lib/channel/channelz_registry.h +21 -21
  712. data/src/core/lib/channel/connected_channel.cc +1264 -65
  713. data/src/core/lib/channel/connected_channel.h +21 -24
  714. data/src/core/lib/channel/context.h +25 -21
  715. data/src/core/lib/channel/promise_based_filter.cc +1544 -280
  716. data/src/core/lib/channel/promise_based_filter.h +466 -99
  717. data/src/core/lib/channel/status_util.cc +62 -17
  718. data/src/core/lib/channel/status_util.h +39 -22
  719. data/src/core/lib/compression/compression.cc +24 -19
  720. data/src/core/lib/compression/compression_internal.cc +43 -53
  721. data/src/core/lib/compression/compression_internal.h +27 -26
  722. data/src/core/lib/compression/message_compress.cc +28 -26
  723. data/src/core/lib/compression/message_compress.h +28 -29
  724. data/src/core/lib/config/core_configuration.cc +5 -1
  725. data/src/core/lib/config/core_configuration.h +84 -38
  726. data/src/core/lib/debug/event_log.cc +88 -0
  727. data/src/core/lib/debug/event_log.h +81 -0
  728. data/src/core/lib/debug/histogram_view.cc +69 -0
  729. data/src/core/lib/debug/histogram_view.h +37 -0
  730. data/src/core/lib/debug/stats.cc +48 -152
  731. data/src/core/lib/debug/stats.h +50 -57
  732. data/src/core/lib/debug/stats_data.cc +302 -645
  733. data/src/core/lib/debug/stats_data.h +293 -545
  734. data/src/core/lib/debug/trace.cc +18 -20
  735. data/src/core/lib/debug/trace.h +27 -48
  736. data/src/core/lib/event_engine/channel_args_endpoint_config.cc +15 -18
  737. data/src/core/lib/event_engine/channel_args_endpoint_config.h +16 -10
  738. data/src/core/lib/event_engine/common_closures.h +71 -0
  739. data/src/core/lib/event_engine/default_event_engine.cc +99 -0
  740. data/src/core/lib/event_engine/default_event_engine.h +73 -0
  741. data/src/core/lib/event_engine/default_event_engine_factory.cc +20 -5
  742. data/src/core/lib/event_engine/{event_engine_factory.h → default_event_engine_factory.h} +4 -12
  743. data/src/core/lib/event_engine/event_engine.cc +3 -40
  744. data/src/core/lib/event_engine/executor/executor.h +38 -0
  745. data/src/core/lib/event_engine/forkable.cc +106 -0
  746. data/src/core/lib/event_engine/forkable.h +61 -0
  747. data/src/core/lib/event_engine/handle_containers.h +10 -3
  748. data/src/core/lib/event_engine/memory_allocator.cc +1 -1
  749. data/src/core/lib/event_engine/poller.h +62 -0
  750. data/src/core/lib/event_engine/posix.h +158 -0
  751. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +642 -0
  752. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h +139 -0
  753. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +899 -0
  754. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +97 -0
  755. data/src/core/lib/event_engine/posix_engine/event_poller.h +111 -0
  756. data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +74 -0
  757. data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.h +33 -0
  758. data/src/core/lib/event_engine/posix_engine/internal_errqueue.cc +77 -0
  759. data/src/core/lib/event_engine/posix_engine/internal_errqueue.h +179 -0
  760. data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +265 -0
  761. data/src/core/lib/event_engine/posix_engine/lockfree_event.h +73 -0
  762. data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +1305 -0
  763. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +717 -0
  764. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +640 -0
  765. data/src/core/lib/event_engine/posix_engine/posix_engine.h +259 -0
  766. data/src/core/lib/event_engine/posix_engine/posix_engine_closure.h +80 -0
  767. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +289 -0
  768. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.h +279 -0
  769. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +379 -0
  770. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.h +91 -0
  771. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +853 -0
  772. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +316 -0
  773. data/src/core/lib/event_engine/posix_engine/timer.cc +311 -0
  774. data/src/core/lib/event_engine/posix_engine/timer.h +194 -0
  775. data/src/core/lib/event_engine/posix_engine/timer_heap.cc +107 -0
  776. data/src/core/lib/event_engine/posix_engine/timer_heap.h +56 -0
  777. data/src/core/lib/event_engine/posix_engine/timer_manager.cc +173 -0
  778. data/src/core/lib/event_engine/posix_engine/timer_manager.h +114 -0
  779. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +332 -0
  780. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.h +185 -0
  781. data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.cc +127 -0
  782. data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.h +45 -0
  783. data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.cc +150 -0
  784. data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.h +45 -0
  785. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h +76 -0
  786. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.cc +67 -0
  787. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h +37 -0
  788. data/src/core/lib/event_engine/resolved_address.cc +19 -0
  789. data/src/core/lib/event_engine/resolved_address_internal.h +34 -0
  790. data/src/core/lib/event_engine/shim.cc +56 -0
  791. data/src/core/lib/event_engine/shim.h +33 -0
  792. data/src/core/lib/event_engine/slice.cc +8 -7
  793. data/src/core/lib/event_engine/slice_buffer.cc +2 -2
  794. data/src/core/lib/event_engine/tcp_socket_utils.cc +389 -0
  795. data/src/core/lib/event_engine/tcp_socket_utils.h +90 -0
  796. data/src/core/lib/event_engine/thread_local.cc +29 -0
  797. data/src/core/lib/event_engine/thread_local.h +32 -0
  798. data/src/core/lib/event_engine/thread_pool.cc +253 -0
  799. data/src/core/lib/event_engine/thread_pool.h +141 -0
  800. data/src/core/lib/event_engine/time_util.cc +30 -0
  801. data/src/core/lib/event_engine/time_util.h +32 -0
  802. data/src/core/lib/event_engine/trace.cc +6 -0
  803. data/src/core/lib/event_engine/trace.h +16 -3
  804. data/src/core/lib/event_engine/utils.cc +44 -0
  805. data/src/core/lib/event_engine/utils.h +44 -0
  806. data/src/core/lib/event_engine/windows/iocp.cc +140 -0
  807. data/src/core/lib/event_engine/windows/iocp.h +69 -0
  808. data/src/core/lib/event_engine/windows/win_socket.cc +219 -0
  809. data/src/core/lib/event_engine/windows/win_socket.h +129 -0
  810. data/src/core/lib/event_engine/windows/windows_endpoint.cc +331 -0
  811. data/src/core/lib/event_engine/windows/windows_endpoint.h +103 -0
  812. data/src/core/lib/event_engine/windows/windows_engine.cc +388 -0
  813. data/src/core/lib/event_engine/windows/windows_engine.h +163 -0
  814. data/src/core/lib/experiments/config.cc +161 -0
  815. data/src/core/lib/experiments/config.h +53 -0
  816. data/src/core/lib/experiments/experiments.cc +81 -0
  817. data/src/core/lib/experiments/experiments.h +117 -0
  818. data/src/core/lib/gpr/alloc.cc +19 -25
  819. data/src/core/lib/gpr/alloc.h +20 -20
  820. data/src/core/lib/gpr/atm.cc +17 -17
  821. data/src/core/lib/gpr/cpu_iphone.cc +24 -24
  822. data/src/core/lib/gpr/cpu_linux.cc +28 -23
  823. data/src/core/lib/gpr/cpu_posix.cc +23 -22
  824. data/src/core/lib/gpr/cpu_windows.cc +20 -18
  825. data/src/core/lib/gpr/log.cc +27 -19
  826. data/src/core/lib/gpr/log_android.cc +22 -20
  827. data/src/core/lib/gpr/log_linux.cc +24 -24
  828. data/src/core/lib/gpr/log_posix.cc +20 -19
  829. data/src/core/lib/gpr/log_windows.cc +25 -25
  830. data/src/core/lib/gpr/spinlock.h +20 -20
  831. data/src/core/lib/gpr/string.cc +25 -24
  832. data/src/core/lib/gpr/string.h +61 -61
  833. data/src/core/lib/gpr/string_posix.cc +24 -24
  834. data/src/core/lib/gpr/string_util_windows.cc +25 -52
  835. data/src/core/lib/gpr/string_windows.cc +24 -24
  836. data/src/core/lib/gpr/sync.cc +25 -25
  837. data/src/core/lib/gpr/sync_abseil.cc +36 -40
  838. data/src/core/lib/gpr/sync_posix.cc +22 -34
  839. data/src/core/lib/gpr/sync_windows.cc +29 -27
  840. data/src/core/lib/gpr/time.cc +34 -30
  841. data/src/core/lib/gpr/time_posix.cc +41 -45
  842. data/src/core/lib/gpr/time_precise.cc +22 -22
  843. data/src/core/lib/gpr/time_precise.h +21 -22
  844. data/src/core/lib/gpr/time_windows.cc +35 -29
  845. data/src/core/lib/gpr/tmpfile.h +24 -24
  846. data/src/core/lib/gpr/tmpfile_msys.cc +21 -20
  847. data/src/core/lib/gpr/tmpfile_posix.cc +22 -20
  848. data/src/core/lib/gpr/tmpfile_windows.cc +28 -29
  849. data/src/core/lib/gpr/useful.h +83 -30
  850. data/src/core/lib/gpr/wrap_memcpy.cc +23 -23
  851. data/src/core/lib/gprpp/atomic_utils.h +20 -20
  852. data/src/core/lib/gprpp/bitset.h +30 -16
  853. data/src/core/lib/gprpp/chunked_vector.h +3 -3
  854. data/src/core/lib/gprpp/construct_destruct.h +3 -3
  855. data/src/core/lib/gprpp/cpp_impl_of.h +3 -3
  856. data/src/core/{ext/xds/xds_resource_type.cc → lib/gprpp/crash.cc} +12 -12
  857. data/src/core/lib/gprpp/crash.h +34 -0
  858. data/src/core/lib/gprpp/debug_location.h +60 -31
  859. data/src/core/lib/gprpp/dual_ref_counted.h +3 -3
  860. data/src/core/lib/gprpp/env.h +53 -0
  861. data/src/core/lib/gprpp/env_linux.cc +80 -0
  862. data/src/core/lib/gprpp/env_posix.cc +47 -0
  863. data/src/core/lib/gprpp/env_windows.cc +56 -0
  864. data/src/core/lib/gprpp/examine_stack.cc +17 -17
  865. data/src/core/lib/gprpp/examine_stack.h +21 -21
  866. data/src/core/lib/gprpp/fork.cc +56 -48
  867. data/src/core/lib/gprpp/fork.h +29 -35
  868. data/src/core/lib/gprpp/global_config.h +20 -20
  869. data/src/core/lib/gprpp/global_config_custom.h +20 -20
  870. data/src/core/lib/gprpp/global_config_env.cc +25 -23
  871. data/src/core/lib/gprpp/global_config_env.h +26 -26
  872. data/src/core/lib/gprpp/global_config_generic.h +21 -21
  873. data/src/core/lib/gprpp/host_port.cc +28 -26
  874. data/src/core/lib/gprpp/host_port.h +32 -31
  875. data/src/core/lib/gprpp/load_file.cc +75 -0
  876. data/src/core/lib/gprpp/load_file.h +33 -0
  877. data/src/core/lib/gprpp/manual_constructor.h +21 -88
  878. data/src/core/lib/gprpp/match.h +3 -3
  879. data/src/core/lib/gprpp/memory.h +21 -21
  880. data/src/core/lib/gprpp/mpscq.cc +17 -17
  881. data/src/core/lib/gprpp/mpscq.h +21 -21
  882. data/src/core/lib/gprpp/no_destruct.h +95 -0
  883. data/src/core/lib/gprpp/notification.h +67 -0
  884. data/src/core/lib/gprpp/orphanable.h +21 -21
  885. data/src/core/lib/gprpp/overload.h +3 -3
  886. data/src/core/lib/gprpp/packed_table.h +40 -0
  887. data/src/core/lib/gprpp/per_cpu.h +46 -0
  888. data/src/core/lib/gprpp/ref_counted.h +21 -21
  889. data/src/core/lib/gprpp/ref_counted_ptr.h +41 -54
  890. data/src/core/lib/gprpp/single_set_ptr.h +3 -3
  891. data/src/core/lib/gprpp/sorted_pack.h +98 -0
  892. data/src/core/lib/gprpp/stat.h +3 -3
  893. data/src/core/lib/gprpp/stat_posix.cc +5 -4
  894. data/src/core/lib/gprpp/stat_windows.cc +4 -2
  895. data/src/core/lib/gprpp/status_helper.cc +49 -33
  896. data/src/core/lib/gprpp/status_helper.h +9 -5
  897. data/src/core/lib/gprpp/strerror.cc +43 -0
  898. data/src/core/lib/gprpp/strerror.h +29 -0
  899. data/src/core/lib/gprpp/sync.h +23 -23
  900. data/src/core/lib/gprpp/table.h +12 -4
  901. data/src/core/lib/gprpp/tchar.cc +49 -0
  902. data/src/core/lib/gprpp/tchar.h +33 -0
  903. data/src/core/lib/gprpp/thd.h +23 -23
  904. data/src/core/lib/gprpp/thd_posix.cc +30 -31
  905. data/src/core/lib/gprpp/thd_windows.cc +26 -26
  906. data/src/core/lib/gprpp/time.cc +44 -9
  907. data/src/core/lib/gprpp/time.h +73 -4
  908. data/src/core/lib/gprpp/time_averaged_stats.cc +60 -0
  909. data/src/core/lib/gprpp/time_averaged_stats.h +79 -0
  910. data/src/core/lib/gprpp/time_util.h +4 -4
  911. data/src/core/lib/gprpp/unique_type_name.h +21 -21
  912. data/src/core/lib/gprpp/validation_errors.cc +61 -0
  913. data/src/core/lib/gprpp/validation_errors.h +127 -0
  914. data/src/core/lib/{iomgr → gprpp}/work_serializer.cc +34 -18
  915. data/src/core/lib/{iomgr → gprpp}/work_serializer.h +21 -28
  916. data/src/core/lib/handshaker/proxy_mapper.h +53 -0
  917. data/src/core/lib/handshaker/proxy_mapper_registry.cc +71 -0
  918. data/src/core/lib/handshaker/proxy_mapper_registry.h +75 -0
  919. data/src/core/lib/http/format_request.cc +24 -22
  920. data/src/core/lib/http/format_request.h +21 -21
  921. data/src/core/lib/http/httpcli.cc +79 -88
  922. data/src/core/lib/http/httpcli.h +47 -31
  923. data/src/core/lib/http/httpcli_security_connector.cc +47 -38
  924. data/src/core/lib/http/httpcli_ssl_credentials.h +6 -4
  925. data/src/core/lib/http/parser.cc +78 -90
  926. data/src/core/lib/http/parser.h +38 -35
  927. data/src/core/lib/iomgr/block_annotate.h +23 -23
  928. data/src/core/lib/iomgr/buffer_list.cc +156 -136
  929. data/src/core/lib/iomgr/buffer_list.h +123 -101
  930. data/src/core/lib/iomgr/call_combiner.cc +32 -64
  931. data/src/core/lib/iomgr/call_combiner.h +24 -25
  932. data/src/core/lib/iomgr/cfstream_handle.cc +33 -36
  933. data/src/core/lib/iomgr/cfstream_handle.h +25 -25
  934. data/src/core/lib/iomgr/closure.cc +27 -0
  935. data/src/core/lib/iomgr/closure.h +95 -58
  936. data/src/core/lib/iomgr/combiner.cc +20 -39
  937. data/src/core/lib/iomgr/combiner.h +20 -20
  938. data/src/core/lib/iomgr/dualstack_socket_posix.cc +21 -21
  939. data/src/core/lib/iomgr/dynamic_annotations.h +22 -22
  940. data/src/core/lib/iomgr/endpoint.cc +17 -17
  941. data/src/core/lib/iomgr/endpoint.h +49 -49
  942. data/src/core/lib/iomgr/endpoint_cfstream.cc +44 -43
  943. data/src/core/lib/iomgr/endpoint_cfstream.h +32 -32
  944. data/src/core/lib/iomgr/endpoint_pair.h +20 -20
  945. data/src/core/lib/iomgr/endpoint_pair_posix.cc +34 -28
  946. data/src/core/lib/iomgr/endpoint_pair_windows.cc +30 -21
  947. data/src/core/lib/iomgr/error.cc +51 -834
  948. data/src/core/lib/iomgr/error.h +45 -317
  949. data/src/core/lib/iomgr/error_cfstream.cc +18 -23
  950. data/src/core/lib/iomgr/error_cfstream.h +21 -21
  951. data/src/core/lib/iomgr/ev_apple.cc +21 -21
  952. data/src/core/lib/iomgr/ev_apple.h +21 -21
  953. data/src/core/lib/iomgr/ev_epoll1_linux.cc +263 -248
  954. data/src/core/lib/iomgr/ev_epoll1_linux.h +21 -21
  955. data/src/core/lib/iomgr/ev_poll_posix.cc +296 -271
  956. data/src/core/lib/iomgr/ev_poll_posix.h +22 -22
  957. data/src/core/lib/iomgr/ev_posix.cc +87 -117
  958. data/src/core/lib/iomgr/ev_posix.h +93 -87
  959. data/src/core/lib/iomgr/ev_windows.cc +18 -18
  960. data/src/core/lib/iomgr/event_engine_shims/closure.cc +62 -0
  961. data/src/core/lib/iomgr/event_engine_shims/closure.h +39 -0
  962. data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +430 -0
  963. data/src/core/lib/iomgr/event_engine_shims/endpoint.h +43 -0
  964. data/src/core/lib/iomgr/event_engine_shims/tcp_client.cc +91 -0
  965. data/src/core/lib/iomgr/event_engine_shims/tcp_client.h +44 -0
  966. data/src/core/lib/iomgr/exec_ctx.cc +34 -56
  967. data/src/core/lib/iomgr/exec_ctx.h +151 -175
  968. data/src/core/lib/iomgr/executor.cc +21 -31
  969. data/src/core/lib/iomgr/executor.h +27 -30
  970. data/src/core/lib/iomgr/fork_posix.cc +30 -27
  971. data/src/core/lib/iomgr/fork_windows.cc +21 -21
  972. data/src/core/lib/iomgr/gethostname.h +20 -20
  973. data/src/core/lib/iomgr/gethostname_fallback.cc +17 -17
  974. data/src/core/lib/iomgr/gethostname_host_name_max.cc +17 -17
  975. data/src/core/lib/iomgr/gethostname_sysconf.cc +17 -17
  976. data/src/core/lib/iomgr/grpc_if_nametoindex.h +22 -22
  977. data/src/core/lib/iomgr/grpc_if_nametoindex_posix.cc +20 -19
  978. data/src/core/lib/iomgr/grpc_if_nametoindex_unsupported.cc +20 -19
  979. data/src/core/lib/iomgr/internal_errqueue.cc +4 -2
  980. data/src/core/lib/iomgr/internal_errqueue.h +83 -83
  981. data/src/core/lib/iomgr/iocp_windows.cc +23 -23
  982. data/src/core/lib/iomgr/iocp_windows.h +21 -21
  983. data/src/core/lib/iomgr/iomgr.cc +25 -19
  984. data/src/core/lib/iomgr/iomgr.h +35 -35
  985. data/src/core/lib/iomgr/iomgr_fwd.h +4 -3
  986. data/src/core/lib/iomgr/iomgr_internal.cc +17 -17
  987. data/src/core/lib/iomgr/iomgr_internal.h +28 -28
  988. data/src/core/lib/iomgr/iomgr_posix.cc +21 -20
  989. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +21 -19
  990. data/src/core/lib/iomgr/iomgr_windows.cc +24 -22
  991. data/src/core/lib/iomgr/load_file.cc +24 -27
  992. data/src/core/lib/iomgr/load_file.h +22 -22
  993. data/src/core/lib/iomgr/lockfree_event.cc +114 -131
  994. data/src/core/lib/iomgr/lockfree_event.h +23 -23
  995. data/src/core/lib/iomgr/nameser.h +86 -86
  996. data/src/core/lib/iomgr/polling_entity.cc +25 -21
  997. data/src/core/lib/iomgr/polling_entity.h +29 -29
  998. data/src/core/lib/iomgr/pollset.cc +17 -17
  999. data/src/core/lib/iomgr/pollset.h +55 -55
  1000. data/src/core/lib/iomgr/pollset_set.cc +17 -17
  1001. data/src/core/lib/iomgr/pollset_set.h +25 -26
  1002. data/src/core/lib/iomgr/pollset_set_windows.cc +18 -18
  1003. data/src/core/lib/iomgr/pollset_set_windows.h +20 -20
  1004. data/src/core/lib/iomgr/pollset_windows.cc +32 -31
  1005. data/src/core/lib/iomgr/pollset_windows.h +24 -24
  1006. data/src/core/lib/iomgr/port.h +34 -31
  1007. data/src/core/lib/iomgr/python_util.h +24 -24
  1008. data/src/core/lib/iomgr/resolve_address.cc +26 -20
  1009. data/src/core/lib/iomgr/resolve_address.h +54 -31
  1010. data/src/core/lib/iomgr/resolve_address_impl.h +5 -4
  1011. data/src/core/lib/iomgr/resolve_address_posix.cc +74 -49
  1012. data/src/core/lib/iomgr/resolve_address_posix.h +23 -10
  1013. data/src/core/lib/iomgr/resolve_address_windows.cc +59 -26
  1014. data/src/core/lib/iomgr/resolve_address_windows.h +23 -10
  1015. data/src/core/lib/iomgr/resolved_address.h +3 -3
  1016. data/src/core/lib/iomgr/sockaddr.h +23 -23
  1017. data/src/core/lib/iomgr/sockaddr_posix.h +21 -21
  1018. data/src/core/lib/iomgr/sockaddr_utils_posix.cc +20 -18
  1019. data/src/core/lib/iomgr/sockaddr_windows.h +21 -21
  1020. data/src/core/lib/iomgr/socket_factory_posix.cc +18 -18
  1021. data/src/core/lib/iomgr/socket_factory_posix.h +32 -32
  1022. data/src/core/lib/iomgr/socket_mutator.cc +19 -18
  1023. data/src/core/lib/iomgr/socket_mutator.h +39 -39
  1024. data/src/core/lib/iomgr/socket_utils.h +27 -27
  1025. data/src/core/lib/iomgr/socket_utils_common_posix.cc +80 -100
  1026. data/src/core/lib/iomgr/socket_utils_linux.cc +18 -17
  1027. data/src/core/lib/iomgr/socket_utils_posix.cc +103 -19
  1028. data/src/core/lib/iomgr/socket_utils_posix.h +176 -84
  1029. data/src/core/lib/iomgr/socket_utils_windows.cc +20 -19
  1030. data/src/core/lib/iomgr/socket_windows.cc +37 -36
  1031. data/src/core/lib/iomgr/socket_windows.h +59 -61
  1032. data/src/core/lib/iomgr/systemd_utils.cc +116 -0
  1033. data/src/core/lib/iomgr/systemd_utils.h +33 -0
  1034. data/src/core/lib/iomgr/tcp_client.cc +28 -24
  1035. data/src/core/lib/iomgr/tcp_client.h +49 -38
  1036. data/src/core/lib/iomgr/tcp_client_cfstream.cc +39 -36
  1037. data/src/core/lib/iomgr/tcp_client_posix.cc +236 -105
  1038. data/src/core/lib/iomgr/tcp_client_posix.h +55 -52
  1039. data/src/core/lib/iomgr/tcp_client_windows.cc +64 -51
  1040. data/src/core/lib/iomgr/tcp_posix.cc +502 -341
  1041. data/src/core/lib/iomgr/tcp_posix.h +32 -30
  1042. data/src/core/lib/iomgr/tcp_server.cc +33 -24
  1043. data/src/core/lib/iomgr/tcp_server.h +78 -69
  1044. data/src/core/lib/iomgr/tcp_server_posix.cc +358 -124
  1045. data/src/core/lib/iomgr/tcp_server_utils_posix.h +68 -55
  1046. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +93 -58
  1047. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +40 -40
  1048. data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +19 -19
  1049. data/src/core/lib/iomgr/tcp_server_windows.cc +106 -116
  1050. data/src/core/lib/iomgr/tcp_windows.cc +109 -94
  1051. data/src/core/lib/iomgr/tcp_windows.h +34 -35
  1052. data/src/core/lib/iomgr/timer.cc +17 -17
  1053. data/src/core/lib/iomgr/timer.h +68 -68
  1054. data/src/core/lib/iomgr/timer_generic.cc +125 -134
  1055. data/src/core/lib/iomgr/timer_generic.h +21 -21
  1056. data/src/core/lib/iomgr/timer_heap.cc +25 -25
  1057. data/src/core/lib/iomgr/timer_heap.h +22 -22
  1058. data/src/core/lib/iomgr/timer_manager.cc +31 -31
  1059. data/src/core/lib/iomgr/timer_manager.h +27 -27
  1060. data/src/core/lib/iomgr/unix_sockets_posix.cc +20 -21
  1061. data/src/core/lib/iomgr/unix_sockets_posix.h +21 -21
  1062. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +19 -17
  1063. data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +23 -23
  1064. data/src/core/lib/iomgr/wakeup_fd_nospecial.cc +23 -23
  1065. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +29 -26
  1066. data/src/core/lib/iomgr/wakeup_fd_pipe.h +20 -20
  1067. data/src/core/lib/iomgr/wakeup_fd_posix.cc +33 -30
  1068. data/src/core/lib/iomgr/wakeup_fd_posix.h +52 -54
  1069. data/src/core/lib/json/json.h +22 -25
  1070. data/src/core/{ext/filters/http/message_compress/message_decompress_filter.h → lib/json/json_args.h} +13 -10
  1071. data/src/core/lib/json/json_channel_args.h +42 -0
  1072. data/src/core/lib/json/json_object_loader.cc +217 -0
  1073. data/src/core/lib/json/json_object_loader.h +634 -0
  1074. data/src/core/lib/json/json_reader.cc +115 -90
  1075. data/src/core/lib/json/json_util.cc +14 -41
  1076. data/src/core/lib/json/json_util.h +7 -7
  1077. data/src/core/lib/json/json_writer.cc +56 -56
  1078. data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy.cc +26 -58
  1079. data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy.h +32 -41
  1080. data/src/core/lib/load_balancing/lb_policy_factory.h +49 -0
  1081. data/src/core/lib/load_balancing/lb_policy_registry.cc +142 -0
  1082. data/src/core/lib/load_balancing/lb_policy_registry.h +82 -0
  1083. data/src/core/{ext/filters/client_channel → lib/load_balancing}/subchannel_interface.h +18 -31
  1084. data/src/core/lib/matchers/matchers.cc +12 -7
  1085. data/src/core/lib/matchers/matchers.h +5 -3
  1086. data/src/core/lib/promise/activity.cc +22 -7
  1087. data/src/core/lib/promise/activity.h +110 -52
  1088. data/src/core/lib/promise/arena_promise.h +105 -72
  1089. data/src/core/lib/promise/context.h +17 -10
  1090. data/src/core/lib/promise/detail/basic_join.h +197 -0
  1091. data/src/core/lib/promise/detail/basic_seq.h +27 -32
  1092. data/src/core/lib/promise/detail/promise_factory.h +61 -13
  1093. data/src/core/lib/promise/detail/promise_like.h +3 -3
  1094. data/src/core/lib/promise/detail/status.h +31 -3
  1095. data/src/core/lib/promise/detail/switch.h +21 -21
  1096. data/src/core/lib/promise/exec_ctx_wakeup_scheduler.h +23 -15
  1097. data/src/core/lib/promise/if.h +195 -0
  1098. data/src/core/lib/promise/interceptor_list.h +308 -0
  1099. data/src/core/lib/promise/intra_activity_waiter.h +9 -3
  1100. data/src/core/lib/promise/latch.h +110 -22
  1101. data/src/core/lib/promise/loop.h +12 -9
  1102. data/src/core/lib/promise/map.h +4 -6
  1103. data/src/core/lib/promise/pipe.h +608 -0
  1104. data/src/core/lib/promise/poll.h +129 -11
  1105. data/src/core/lib/promise/promise.h +5 -5
  1106. data/src/core/lib/promise/race.h +6 -9
  1107. data/src/core/lib/promise/seq.h +32 -12
  1108. data/src/core/lib/promise/sleep.cc +56 -42
  1109. data/src/core/lib/promise/sleep.h +40 -32
  1110. data/src/core/lib/promise/trace.cc +20 -0
  1111. data/src/core/lib/promise/trace.h +24 -0
  1112. data/src/core/lib/promise/try_join.h +82 -0
  1113. data/src/core/lib/promise/try_seq.h +39 -21
  1114. data/src/core/lib/resolver/resolver.cc +17 -59
  1115. data/src/core/lib/resolver/resolver.h +21 -18
  1116. data/src/core/lib/resolver/resolver_factory.h +10 -8
  1117. data/src/core/lib/resolver/resolver_registry.cc +17 -9
  1118. data/src/core/lib/resolver/resolver_registry.h +15 -5
  1119. data/src/core/lib/resolver/server_address.cc +38 -32
  1120. data/src/core/lib/resolver/server_address.h +32 -31
  1121. data/src/core/lib/resource_quota/api.cc +10 -2
  1122. data/src/core/lib/resource_quota/api.h +10 -4
  1123. data/src/core/lib/resource_quota/arena.cc +85 -21
  1124. data/src/core/lib/resource_quota/arena.h +196 -23
  1125. data/src/core/lib/resource_quota/memory_quota.cc +287 -108
  1126. data/src/core/lib/resource_quota/memory_quota.h +175 -59
  1127. data/src/core/lib/resource_quota/periodic_update.cc +78 -0
  1128. data/src/core/lib/resource_quota/periodic_update.h +71 -0
  1129. data/src/core/lib/resource_quota/resource_quota.h +4 -4
  1130. data/src/core/lib/resource_quota/thread_quota.h +3 -3
  1131. data/src/core/lib/resource_quota/trace.h +3 -3
  1132. data/src/core/lib/security/authorization/authorization_engine.h +3 -3
  1133. data/src/core/lib/security/authorization/authorization_policy_provider.h +10 -3
  1134. data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +3 -0
  1135. data/src/core/lib/security/authorization/evaluate_args.cc +17 -8
  1136. data/src/core/lib/security/authorization/evaluate_args.h +9 -6
  1137. data/src/core/lib/security/authorization/grpc_authorization_engine.cc +5 -1
  1138. data/src/core/lib/security/authorization/grpc_authorization_engine.h +10 -3
  1139. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +16 -3
  1140. data/src/core/lib/security/authorization/grpc_server_authz_filter.h +16 -5
  1141. data/src/core/lib/security/authorization/matchers.cc +44 -30
  1142. data/src/core/lib/security/authorization/matchers.h +10 -3
  1143. data/src/core/lib/security/authorization/rbac_policy.cc +6 -2
  1144. data/src/core/lib/security/authorization/rbac_policy.h +10 -3
  1145. data/src/core/{ext/xds → lib/security/certificate_provider}/certificate_provider_factory.h +9 -4
  1146. data/src/core/lib/security/certificate_provider/certificate_provider_registry.cc +60 -0
  1147. data/src/core/lib/security/certificate_provider/certificate_provider_registry.h +70 -0
  1148. data/src/core/lib/security/context/security_context.cc +27 -25
  1149. data/src/core/lib/security/context/security_context.h +56 -34
  1150. data/src/core/lib/security/credentials/alts/alts_credentials.cc +23 -22
  1151. data/src/core/lib/security/credentials/alts/alts_credentials.h +61 -57
  1152. data/src/core/lib/security/credentials/alts/check_gcp_environment.cc +19 -19
  1153. data/src/core/lib/security/credentials/alts/check_gcp_environment.h +43 -43
  1154. data/src/core/lib/security/credentials/alts/check_gcp_environment_linux.cc +17 -17
  1155. data/src/core/lib/security/credentials/alts/check_gcp_environment_no_op.cc +18 -17
  1156. data/src/core/lib/security/credentials/alts/check_gcp_environment_windows.cc +18 -17
  1157. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc +20 -22
  1158. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.cc +18 -18
  1159. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.h +38 -39
  1160. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +19 -22
  1161. data/src/core/lib/security/credentials/call_creds_util.cc +8 -0
  1162. data/src/core/lib/security/credentials/call_creds_util.h +4 -3
  1163. data/src/core/lib/security/credentials/channel_creds_registry.h +9 -4
  1164. data/src/core/lib/security/credentials/channel_creds_registry_init.cc +13 -3
  1165. data/src/core/lib/security/credentials/composite/composite_credentials.cc +27 -31
  1166. data/src/core/lib/security/credentials/composite/composite_credentials.h +40 -29
  1167. data/src/core/lib/security/credentials/credentials.cc +23 -26
  1168. data/src/core/lib/security/credentials/credentials.h +62 -55
  1169. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +123 -76
  1170. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +13 -3
  1171. data/src/core/lib/security/credentials/external/aws_request_signer.cc +14 -3
  1172. data/src/core/lib/security/credentials/external/aws_request_signer.h +3 -3
  1173. data/src/core/lib/security/credentials/external/external_account_credentials.cc +83 -68
  1174. data/src/core/lib/security/credentials/external/external_account_credentials.h +14 -3
  1175. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +29 -26
  1176. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +9 -3
  1177. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +42 -31
  1178. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +13 -3
  1179. data/src/core/lib/security/credentials/fake/fake_credentials.cc +30 -36
  1180. data/src/core/lib/security/credentials/fake/fake_credentials.h +49 -42
  1181. data/src/core/lib/security/credentials/google_default/credentials_generic.cc +23 -25
  1182. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +129 -107
  1183. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +31 -25
  1184. data/src/core/lib/security/credentials/iam/iam_credentials.cc +27 -20
  1185. data/src/core/lib/security/credentials/iam/iam_credentials.h +31 -21
  1186. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +7 -3
  1187. data/src/core/lib/security/credentials/insecure/insecure_credentials.h +10 -6
  1188. data/src/core/lib/security/credentials/jwt/json_token.cc +40 -29
  1189. data/src/core/lib/security/credentials/jwt/json_token.h +36 -36
  1190. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +29 -27
  1191. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +35 -21
  1192. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +113 -89
  1193. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +49 -47
  1194. data/src/core/lib/security/credentials/local/local_credentials.cc +24 -24
  1195. data/src/core/lib/security/credentials/local/local_credentials.h +32 -26
  1196. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +85 -81
  1197. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +42 -21
  1198. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +31 -30
  1199. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +47 -23
  1200. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +36 -40
  1201. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +35 -23
  1202. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +22 -30
  1203. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +16 -17
  1204. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +55 -48
  1205. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +22 -9
  1206. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +10 -3
  1207. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +9 -10
  1208. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +22 -23
  1209. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +3 -3
  1210. data/src/core/lib/security/credentials/tls/tls_credentials.cc +36 -44
  1211. data/src/core/lib/security/credentials/tls/tls_credentials.h +28 -25
  1212. data/src/core/lib/security/credentials/tls/tls_utils.cc +5 -1
  1213. data/src/core/lib/security/credentials/tls/tls_utils.h +4 -4
  1214. data/src/core/lib/security/credentials/xds/xds_credentials.cc +21 -32
  1215. data/src/core/lib/security/credentials/xds/xds_credentials.h +19 -5
  1216. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +60 -54
  1217. data/src/core/lib/security/security_connector/alts/alts_security_connector.h +49 -47
  1218. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +74 -78
  1219. data/src/core/lib/security/security_connector/fake/fake_security_connector.h +25 -26
  1220. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +15 -6
  1221. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +26 -15
  1222. data/src/core/lib/security/security_connector/load_system_roots.h +20 -20
  1223. data/src/core/lib/security/security_connector/load_system_roots_fallback.cc +22 -20
  1224. data/src/core/lib/security/security_connector/{load_system_roots_linux.cc → load_system_roots_supported.cc} +43 -38
  1225. data/src/core/lib/security/security_connector/load_system_roots_supported.h +45 -0
  1226. data/src/core/lib/security/security_connector/local/local_security_connector.cc +64 -47
  1227. data/src/core/lib/security/security_connector/local/local_security_connector.h +49 -46
  1228. data/src/core/lib/security/security_connector/security_connector.cc +37 -35
  1229. data/src/core/lib/security/security_connector/security_connector.h +57 -44
  1230. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +54 -45
  1231. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +44 -43
  1232. data/src/core/lib/security/security_connector/ssl_utils.cc +47 -39
  1233. data/src/core/lib/security/security_connector/ssl_utils.h +45 -42
  1234. data/src/core/lib/security/security_connector/ssl_utils_config.cc +22 -22
  1235. data/src/core/lib/security/security_connector/ssl_utils_config.h +21 -22
  1236. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +58 -56
  1237. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +48 -28
  1238. data/src/core/lib/security/transport/auth_filters.h +53 -24
  1239. data/src/core/lib/security/transport/client_auth_filter.cc +51 -32
  1240. data/src/core/lib/security/transport/secure_endpoint.cc +112 -68
  1241. data/src/core/lib/security/transport/secure_endpoint.h +28 -27
  1242. data/src/core/lib/security/transport/security_handshaker.cc +139 -109
  1243. data/src/core/lib/security/transport/security_handshaker.h +27 -22
  1244. data/src/core/lib/security/transport/server_auth_filter.cc +157 -267
  1245. data/src/core/lib/security/transport/tsi_error.cc +23 -20
  1246. data/src/core/lib/security/transport/tsi_error.h +20 -20
  1247. data/src/core/lib/security/util/json_util.cc +24 -24
  1248. data/src/core/lib/security/util/json_util.h +21 -23
  1249. data/src/core/lib/service_config/service_config.h +15 -4
  1250. data/src/core/lib/service_config/service_config_call_data.h +11 -4
  1251. data/src/core/lib/service_config/service_config_impl.cc +107 -153
  1252. data/src/core/lib/service_config/service_config_impl.h +19 -26
  1253. data/src/core/lib/service_config/service_config_parser.cc +10 -30
  1254. data/src/core/lib/service_config/service_config_parser.h +13 -21
  1255. data/src/core/lib/slice/b64.cc +26 -26
  1256. data/src/core/lib/slice/b64.h +32 -32
  1257. data/src/core/lib/slice/percent_encoding.cc +21 -30
  1258. data/src/core/lib/slice/percent_encoding.h +28 -28
  1259. data/src/core/lib/slice/slice.cc +57 -45
  1260. data/src/core/lib/slice/slice.h +57 -18
  1261. data/src/core/lib/slice/slice_buffer.cc +93 -60
  1262. data/src/core/lib/slice/slice_buffer.h +72 -10
  1263. data/src/core/lib/slice/slice_internal.h +34 -42
  1264. data/src/core/lib/slice/slice_refcount.cc +3 -18
  1265. data/src/core/lib/slice/slice_refcount.h +53 -18
  1266. data/src/core/lib/slice/slice_string_helpers.cc +17 -37
  1267. data/src/core/lib/slice/slice_string_helpers.h +21 -25
  1268. data/src/core/lib/surface/api_trace.cc +17 -17
  1269. data/src/core/lib/surface/api_trace.h +25 -25
  1270. data/src/core/lib/surface/builtins.h +3 -3
  1271. data/src/core/lib/surface/byte_buffer.cc +22 -23
  1272. data/src/core/lib/surface/byte_buffer_reader.cc +23 -23
  1273. data/src/core/lib/surface/call.cc +2205 -471
  1274. data/src/core/lib/surface/call.h +121 -42
  1275. data/src/core/lib/surface/call_details.cc +20 -21
  1276. data/src/core/lib/surface/call_log_batch.cc +19 -18
  1277. data/src/core/lib/surface/call_test_only.h +33 -33
  1278. data/src/core/lib/surface/call_trace.cc +123 -0
  1279. data/src/core/lib/surface/call_trace.h +30 -0
  1280. data/src/core/lib/surface/channel.cc +65 -69
  1281. data/src/core/lib/surface/channel.h +45 -35
  1282. data/src/core/lib/surface/channel_init.cc +17 -17
  1283. data/src/core/lib/surface/channel_init.h +20 -20
  1284. data/src/core/lib/surface/channel_ping.cc +20 -20
  1285. data/src/core/lib/surface/channel_stack_type.cc +21 -17
  1286. data/src/core/lib/surface/channel_stack_type.h +22 -20
  1287. data/src/core/lib/surface/completion_queue.cc +188 -218
  1288. data/src/core/lib/surface/completion_queue.h +39 -41
  1289. data/src/core/lib/surface/completion_queue_factory.cc +33 -28
  1290. data/src/core/lib/surface/completion_queue_factory.h +22 -22
  1291. data/src/core/lib/surface/event_string.cc +18 -17
  1292. data/src/core/lib/surface/event_string.h +22 -22
  1293. data/src/core/lib/surface/init.cc +44 -73
  1294. data/src/core/lib/surface/init.h +20 -20
  1295. data/src/core/lib/surface/init_internally.cc +25 -0
  1296. data/src/core/lib/surface/init_internally.h +37 -0
  1297. data/src/core/lib/surface/lame_client.cc +33 -30
  1298. data/src/core/lib/surface/lame_client.h +23 -23
  1299. data/src/core/lib/surface/metadata_array.cc +17 -18
  1300. data/src/core/lib/surface/server.cc +349 -130
  1301. data/src/core/lib/surface/server.h +24 -22
  1302. data/src/core/lib/surface/validate_metadata.cc +32 -43
  1303. data/src/core/lib/surface/validate_metadata.h +21 -21
  1304. data/src/core/lib/surface/version.cc +21 -21
  1305. data/src/core/lib/transport/bdp_estimator.cc +18 -20
  1306. data/src/core/lib/transport/bdp_estimator.h +21 -22
  1307. data/src/core/lib/transport/connectivity_state.cc +19 -20
  1308. data/src/core/lib/transport/connectivity_state.h +23 -23
  1309. data/src/core/lib/transport/error_utils.cc +54 -78
  1310. data/src/core/lib/transport/error_utils.h +24 -24
  1311. data/src/core/lib/transport/handshaker.cc +66 -54
  1312. data/src/core/lib/transport/handshaker.h +51 -47
  1313. data/src/core/lib/transport/handshaker_factory.h +49 -24
  1314. data/src/core/lib/transport/handshaker_registry.cc +27 -20
  1315. data/src/core/lib/transport/handshaker_registry.h +25 -28
  1316. data/src/core/lib/transport/http2_errors.h +22 -22
  1317. data/src/core/lib/transport/http_connect_handshaker.cc +56 -57
  1318. data/src/core/lib/transport/http_connect_handshaker.h +21 -21
  1319. data/src/core/lib/transport/metadata_batch.cc +22 -4
  1320. data/src/core/lib/transport/metadata_batch.h +129 -35
  1321. data/src/core/lib/transport/parsed_metadata.cc +2 -6
  1322. data/src/core/lib/transport/parsed_metadata.h +7 -5
  1323. data/src/core/lib/transport/pid_controller.cc +20 -20
  1324. data/src/core/lib/transport/pid_controller.h +27 -27
  1325. data/src/core/lib/transport/status_conversion.cc +23 -25
  1326. data/src/core/lib/transport/status_conversion.h +22 -22
  1327. data/src/core/lib/transport/tcp_connect_handshaker.cc +34 -42
  1328. data/src/core/lib/transport/tcp_connect_handshaker.h +3 -3
  1329. data/src/core/lib/transport/timeout_encoding.cc +22 -22
  1330. data/src/core/lib/transport/timeout_encoding.h +20 -20
  1331. data/src/core/lib/transport/transport.cc +85 -46
  1332. data/src/core/lib/transport/transport.h +219 -215
  1333. data/src/core/lib/transport/transport_fwd.h +20 -0
  1334. data/src/core/lib/transport/transport_impl.h +46 -46
  1335. data/src/core/lib/transport/transport_op_string.cc +32 -30
  1336. data/src/core/lib/uri/uri_parser.cc +1 -1
  1337. data/src/core/lib/uri/uri_parser.h +3 -3
  1338. data/src/core/plugin_registry/grpc_plugin_registry.cc +53 -73
  1339. data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +20 -39
  1340. data/src/core/tsi/alts/crypt/aes_gcm.cc +20 -20
  1341. data/src/core/tsi/alts/crypt/gsec.cc +26 -26
  1342. data/src/core/tsi/alts/crypt/gsec.h +336 -336
  1343. data/src/core/tsi/alts/frame_protector/alts_counter.cc +23 -23
  1344. data/src/core/tsi/alts/frame_protector/alts_counter.h +68 -68
  1345. data/src/core/tsi/alts/frame_protector/alts_crypter.cc +19 -19
  1346. data/src/core/tsi/alts/frame_protector/alts_crypter.h +209 -209
  1347. data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +72 -71
  1348. data/src/core/tsi/alts/frame_protector/alts_frame_protector.h +40 -40
  1349. data/src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.cc +18 -18
  1350. data/src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.h +82 -83
  1351. data/src/core/tsi/alts/frame_protector/alts_seal_privacy_integrity_crypter.cc +22 -22
  1352. data/src/core/tsi/alts/frame_protector/alts_unseal_privacy_integrity_crypter.cc +22 -22
  1353. data/src/core/tsi/alts/frame_protector/frame_handler.cc +26 -25
  1354. data/src/core/tsi/alts/frame_protector/frame_handler.h +169 -169
  1355. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +117 -97
  1356. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +104 -104
  1357. data/src/core/tsi/alts/handshaker/alts_shared_resource.cc +18 -17
  1358. data/src/core/tsi/alts/handshaker/alts_shared_resource.h +43 -44
  1359. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +51 -43
  1360. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +60 -60
  1361. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +24 -24
  1362. data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +21 -20
  1363. data/src/core/tsi/alts/handshaker/alts_tsi_utils.h +38 -38
  1364. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +19 -19
  1365. data/src/core/tsi/alts/handshaker/transport_security_common_api.h +105 -104
  1366. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +45 -44
  1367. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.h +40 -41
  1368. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.cc +38 -36
  1369. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.h +35 -36
  1370. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol.h +67 -68
  1371. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +32 -31
  1372. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.h +55 -56
  1373. data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.cc +54 -53
  1374. data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.h +141 -142
  1375. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +67 -58
  1376. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.h +43 -44
  1377. data/src/core/tsi/fake_transport_security.cc +146 -110
  1378. data/src/core/tsi/fake_transport_security.h +36 -30
  1379. data/src/core/tsi/local_transport_security.cc +43 -38
  1380. data/src/core/tsi/local_transport_security.h +33 -33
  1381. data/src/core/tsi/ssl/key_logging/ssl_key_logging.cc +9 -4
  1382. data/src/core/tsi/ssl/key_logging/ssl_key_logging.h +3 -3
  1383. data/src/core/tsi/ssl/session_cache/ssl_session.h +21 -21
  1384. data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +19 -19
  1385. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +18 -17
  1386. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +31 -22
  1387. data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +25 -20
  1388. data/src/core/tsi/ssl_transport_security.cc +299 -370
  1389. data/src/core/tsi/ssl_transport_security.h +206 -203
  1390. data/src/core/tsi/ssl_transport_security_utils.cc +250 -0
  1391. data/src/core/tsi/ssl_transport_security_utils.h +147 -0
  1392. data/src/core/tsi/ssl_types.h +27 -27
  1393. data/src/core/tsi/transport_security.cc +44 -32
  1394. data/src/core/tsi/transport_security.h +49 -48
  1395. data/src/core/tsi/transport_security_grpc.cc +23 -22
  1396. data/src/core/tsi/transport_security_grpc.h +44 -41
  1397. data/src/core/tsi/transport_security_interface.h +344 -332
  1398. data/src/ruby/ext/grpc/ext-export-truffleruby-with-ruby-abi-version.clang +2 -0
  1399. data/src/ruby/ext/grpc/ext-export-truffleruby-with-ruby-abi-version.gcc +7 -0
  1400. data/src/ruby/ext/grpc/ext-export-with-ruby-abi-version.clang +2 -0
  1401. data/src/ruby/ext/grpc/ext-export-with-ruby-abi-version.gcc +7 -0
  1402. data/src/ruby/ext/grpc/ext-export.gcc +1 -1
  1403. data/src/ruby/ext/grpc/extconf.rb +97 -19
  1404. data/src/ruby/ext/grpc/rb_call.c +1 -0
  1405. data/src/ruby/ext/grpc/rb_channel.c +1 -0
  1406. data/src/ruby/ext/grpc/rb_channel_args.c +1 -0
  1407. data/src/ruby/ext/grpc/rb_compression_options.c +1 -1
  1408. data/src/ruby/ext/grpc/rb_grpc.c +1 -0
  1409. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +38 -38
  1410. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +60 -60
  1411. data/src/ruby/ext/grpc/rb_loader.c +6 -2
  1412. data/src/ruby/lib/grpc/errors.rb +1 -1
  1413. data/src/ruby/lib/grpc/generic/bidi_call.rb +2 -0
  1414. data/src/ruby/lib/grpc/version.rb +1 -1
  1415. data/src/ruby/pb/generate_proto_ruby.sh +0 -6
  1416. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +4 -0
  1417. data/src/ruby/spec/channel_spec.rb +5 -43
  1418. data/src/ruby/spec/client_server_spec.rb +20 -8
  1419. data/src/ruby/spec/generic/active_call_spec.rb +12 -3
  1420. data/src/ruby/spec/generic/client_stub_spec.rb +23 -23
  1421. data/src/ruby/spec/generic/server_interceptors_spec.rb +1 -1
  1422. data/src/ruby/spec/user_agent_spec.rb +1 -1
  1423. data/third_party/abseil-cpp/absl/algorithm/container.h +57 -58
  1424. data/third_party/abseil-cpp/absl/base/attributes.h +88 -41
  1425. data/third_party/abseil-cpp/absl/base/casts.h +61 -68
  1426. data/third_party/abseil-cpp/absl/base/config.h +221 -39
  1427. data/third_party/abseil-cpp/absl/base/internal/cycleclock.cc +12 -42
  1428. data/third_party/abseil-cpp/absl/base/internal/cycleclock.h +52 -2
  1429. data/third_party/abseil-cpp/absl/base/internal/cycleclock_config.h +55 -0
  1430. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +5 -4
  1431. data/third_party/abseil-cpp/absl/base/internal/endian.h +17 -62
  1432. data/third_party/abseil-cpp/absl/base/internal/fast_type_id.h +2 -0
  1433. data/third_party/abseil-cpp/absl/base/internal/inline_variable.h +3 -3
  1434. data/third_party/abseil-cpp/absl/base/internal/invoke.h +54 -0
  1435. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +2 -2
  1436. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.h +1 -1
  1437. data/third_party/abseil-cpp/absl/base/internal/prefetch.h +138 -0
  1438. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +39 -28
  1439. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +36 -36
  1440. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +6 -3
  1441. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +10 -6
  1442. data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +2 -5
  1443. data/third_party/abseil-cpp/absl/base/internal/spinlock_win32.inc +4 -1
  1444. data/third_party/abseil-cpp/absl/base/internal/strerror.cc +88 -0
  1445. data/third_party/abseil-cpp/absl/base/internal/strerror.h +39 -0
  1446. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +14 -11
  1447. data/third_party/abseil-cpp/absl/base/internal/thread_annotations.h +9 -0
  1448. data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +2 -1
  1449. data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +4 -0
  1450. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +6 -7
  1451. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +12 -40
  1452. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock_config.h +62 -0
  1453. data/third_party/abseil-cpp/absl/base/log_severity.cc +28 -0
  1454. data/third_party/abseil-cpp/absl/base/log_severity.h +51 -0
  1455. data/third_party/abseil-cpp/absl/base/macros.h +4 -21
  1456. data/third_party/abseil-cpp/absl/base/optimization.h +76 -16
  1457. data/third_party/abseil-cpp/absl/base/options.h +1 -7
  1458. data/third_party/abseil-cpp/absl/base/policy_checks.h +15 -13
  1459. data/third_party/abseil-cpp/absl/base/thread_annotations.h +2 -2
  1460. data/third_party/abseil-cpp/absl/container/fixed_array.h +9 -5
  1461. data/third_party/abseil-cpp/absl/container/flat_hash_map.h +11 -4
  1462. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +15 -16
  1463. data/third_party/abseil-cpp/absl/container/inlined_vector.h +84 -25
  1464. data/third_party/abseil-cpp/absl/container/internal/common.h +9 -8
  1465. data/third_party/abseil-cpp/absl/container/internal/common_policy_traits.h +132 -0
  1466. data/third_party/abseil-cpp/absl/container/internal/container_memory.h +23 -29
  1467. data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +4 -55
  1468. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +116 -23
  1469. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +40 -54
  1470. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +165 -66
  1471. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +159 -4
  1472. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +1121 -470
  1473. data/third_party/abseil-cpp/absl/crc/crc32c.cc +99 -0
  1474. data/third_party/abseil-cpp/absl/crc/crc32c.h +183 -0
  1475. data/third_party/abseil-cpp/absl/crc/internal/cpu_detect.cc +256 -0
  1476. data/third_party/abseil-cpp/absl/crc/internal/cpu_detect.h +57 -0
  1477. data/third_party/abseil-cpp/absl/crc/internal/crc.cc +468 -0
  1478. data/third_party/abseil-cpp/absl/crc/internal/crc.h +91 -0
  1479. data/third_party/abseil-cpp/absl/crc/internal/crc32_x86_arm_combined_simd.h +269 -0
  1480. data/third_party/abseil-cpp/absl/crc/internal/crc32c.h +39 -0
  1481. data/third_party/abseil-cpp/absl/crc/internal/crc32c_inline.h +72 -0
  1482. data/third_party/abseil-cpp/absl/crc/internal/crc_cord_state.cc +130 -0
  1483. data/third_party/abseil-cpp/absl/crc/internal/crc_cord_state.h +159 -0
  1484. data/third_party/abseil-cpp/absl/crc/internal/crc_internal.h +179 -0
  1485. data/third_party/abseil-cpp/absl/crc/internal/crc_memcpy.h +119 -0
  1486. data/third_party/abseil-cpp/absl/crc/internal/crc_memcpy_fallback.cc +75 -0
  1487. data/third_party/abseil-cpp/absl/crc/internal/crc_memcpy_x86_64.cc +434 -0
  1488. data/third_party/abseil-cpp/absl/crc/internal/crc_non_temporal_memcpy.cc +93 -0
  1489. data/third_party/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +725 -0
  1490. data/third_party/abseil-cpp/absl/crc/internal/non_temporal_arm_intrinsics.h +79 -0
  1491. data/third_party/abseil-cpp/absl/crc/internal/non_temporal_memcpy.h +180 -0
  1492. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +45 -88
  1493. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +67 -38
  1494. data/third_party/abseil-cpp/absl/debugging/internal/demangle.h +1 -1
  1495. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +16 -13
  1496. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +3 -2
  1497. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +19 -12
  1498. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +8 -3
  1499. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +2 -1
  1500. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +1 -1
  1501. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +8 -3
  1502. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +59 -102
  1503. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +5 -4
  1504. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +41 -11
  1505. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +18 -4
  1506. data/third_party/abseil-cpp/absl/debugging/symbolize.cc +6 -1
  1507. data/third_party/abseil-cpp/absl/debugging/symbolize_darwin.inc +3 -2
  1508. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +164 -101
  1509. data/third_party/abseil-cpp/absl/debugging/symbolize_win32.inc +7 -6
  1510. data/third_party/abseil-cpp/absl/functional/any_invocable.h +316 -0
  1511. data/third_party/abseil-cpp/absl/functional/bind_front.h +10 -1
  1512. data/third_party/abseil-cpp/absl/functional/function_ref.h +2 -1
  1513. data/third_party/abseil-cpp/absl/functional/internal/any_invocable.h +878 -0
  1514. data/third_party/abseil-cpp/absl/hash/hash.h +82 -8
  1515. data/third_party/abseil-cpp/absl/hash/internal/city.cc +10 -10
  1516. data/third_party/abseil-cpp/absl/hash/internal/hash.h +235 -26
  1517. data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.cc +3 -14
  1518. data/third_party/abseil-cpp/absl/memory/memory.h +26 -447
  1519. data/third_party/abseil-cpp/absl/meta/type_traits.h +104 -12
  1520. data/third_party/abseil-cpp/absl/numeric/bits.h +1 -1
  1521. data/third_party/abseil-cpp/absl/numeric/int128.cc +14 -10
  1522. data/third_party/abseil-cpp/absl/numeric/int128.h +2 -2
  1523. data/third_party/abseil-cpp/absl/profiling/internal/sample_recorder.h +33 -10
  1524. data/third_party/abseil-cpp/absl/random/bernoulli_distribution.h +4 -4
  1525. data/third_party/abseil-cpp/absl/random/distributions.h +3 -3
  1526. data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +3 -0
  1527. data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +4 -2
  1528. data/third_party/abseil-cpp/absl/random/internal/generate_real.h +2 -2
  1529. data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +59 -48
  1530. data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +3 -24
  1531. data/third_party/abseil-cpp/absl/random/internal/pool_urbg.cc +9 -9
  1532. data/third_party/abseil-cpp/absl/random/internal/randen.h +5 -11
  1533. data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +6 -2
  1534. data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +48 -23
  1535. data/third_party/abseil-cpp/absl/random/internal/salted_seed_seq.h +24 -26
  1536. data/third_party/abseil-cpp/absl/random/internal/seed_material.cc +2 -2
  1537. data/third_party/abseil-cpp/absl/random/internal/traits.h +53 -5
  1538. data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +5 -5
  1539. data/third_party/abseil-cpp/absl/random/internal/wide_multiply.h +33 -48
  1540. data/third_party/abseil-cpp/absl/random/log_uniform_int_distribution.h +9 -10
  1541. data/third_party/abseil-cpp/absl/random/poisson_distribution.h +7 -4
  1542. data/third_party/abseil-cpp/absl/random/random.h +6 -6
  1543. data/third_party/abseil-cpp/absl/random/seed_sequences.h +1 -0
  1544. data/third_party/abseil-cpp/absl/random/uniform_int_distribution.h +2 -2
  1545. data/third_party/abseil-cpp/absl/random/uniform_real_distribution.h +1 -1
  1546. data/third_party/abseil-cpp/absl/random/zipf_distribution.h +4 -3
  1547. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +18 -0
  1548. data/third_party/abseil-cpp/absl/status/status.cc +193 -14
  1549. data/third_party/abseil-cpp/absl/status/status.h +24 -14
  1550. data/third_party/abseil-cpp/absl/status/statusor.h +9 -3
  1551. data/third_party/abseil-cpp/absl/strings/ascii.cc +5 -5
  1552. data/third_party/abseil-cpp/absl/strings/ascii.h +4 -4
  1553. data/third_party/abseil-cpp/absl/strings/charconv.cc +534 -96
  1554. data/third_party/abseil-cpp/absl/strings/cord.cc +257 -924
  1555. data/third_party/abseil-cpp/absl/strings/cord.h +268 -156
  1556. data/third_party/abseil-cpp/absl/strings/cord_analysis.cc +188 -0
  1557. data/third_party/abseil-cpp/absl/strings/cord_analysis.h +44 -0
  1558. data/third_party/abseil-cpp/absl/strings/cord_buffer.cc +30 -0
  1559. data/third_party/abseil-cpp/absl/strings/cord_buffer.h +575 -0
  1560. data/third_party/abseil-cpp/absl/strings/escaping.cc +73 -62
  1561. data/third_party/abseil-cpp/absl/strings/escaping.h +24 -19
  1562. data/third_party/abseil-cpp/absl/strings/internal/char_map.h +14 -12
  1563. data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.cc +4 -4
  1564. data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +2 -2
  1565. data/third_party/abseil-cpp/absl/strings/internal/cord_data_edge.h +63 -0
  1566. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +20 -32
  1567. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +441 -150
  1568. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +157 -53
  1569. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.h +70 -73
  1570. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.cc +8 -6
  1571. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.h +4 -2
  1572. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.cc +3 -2
  1573. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.h +5 -4
  1574. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.cc +7 -74
  1575. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.cc +56 -0
  1576. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.h +103 -0
  1577. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +58 -17
  1578. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +13 -11
  1579. data/third_party/abseil-cpp/absl/strings/internal/cordz_functions.h +7 -15
  1580. data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.h +3 -3
  1581. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +19 -43
  1582. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.h +7 -7
  1583. data/third_party/abseil-cpp/absl/strings/internal/cordz_statistics.h +5 -4
  1584. data/third_party/abseil-cpp/absl/strings/internal/cordz_update_tracker.h +4 -2
  1585. data/third_party/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.cc +93 -0
  1586. data/third_party/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.h +34 -0
  1587. data/third_party/abseil-cpp/absl/strings/internal/escaping.cc +18 -15
  1588. data/third_party/abseil-cpp/absl/strings/internal/escaping.h +7 -9
  1589. data/third_party/abseil-cpp/absl/strings/internal/has_absl_stringify.h +55 -0
  1590. data/third_party/abseil-cpp/absl/strings/internal/memutil.cc +9 -6
  1591. data/third_party/abseil-cpp/absl/strings/internal/ostringstream.cc +14 -7
  1592. data/third_party/abseil-cpp/absl/strings/internal/ostringstream.h +35 -10
  1593. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +113 -46
  1594. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +127 -30
  1595. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +3 -2
  1596. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +42 -10
  1597. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +56 -289
  1598. data/third_party/abseil-cpp/absl/strings/internal/str_format/constexpr_parser.h +351 -0
  1599. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +6 -6
  1600. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +9 -4
  1601. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +215 -181
  1602. data/third_party/abseil-cpp/absl/strings/internal/str_format/output.h +2 -1
  1603. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +10 -209
  1604. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +14 -103
  1605. data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +9 -6
  1606. data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +2 -1
  1607. data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +10 -2
  1608. data/third_party/abseil-cpp/absl/strings/internal/stringify_sink.cc +28 -0
  1609. data/third_party/abseil-cpp/absl/strings/internal/stringify_sink.h +57 -0
  1610. data/third_party/abseil-cpp/absl/strings/internal/utf8.cc +9 -9
  1611. data/third_party/abseil-cpp/absl/strings/numbers.cc +42 -39
  1612. data/third_party/abseil-cpp/absl/strings/numbers.h +26 -23
  1613. data/third_party/abseil-cpp/absl/strings/str_cat.cc +9 -6
  1614. data/third_party/abseil-cpp/absl/strings/str_cat.h +70 -16
  1615. data/third_party/abseil-cpp/absl/strings/str_format.h +71 -9
  1616. data/third_party/abseil-cpp/absl/strings/str_join.h +9 -15
  1617. data/third_party/abseil-cpp/absl/strings/str_split.h +1 -2
  1618. data/third_party/abseil-cpp/absl/strings/string_view.cc +8 -19
  1619. data/third_party/abseil-cpp/absl/strings/string_view.h +6 -12
  1620. data/third_party/abseil-cpp/absl/strings/strip.h +8 -6
  1621. data/third_party/abseil-cpp/absl/strings/substitute.cc +8 -6
  1622. data/third_party/abseil-cpp/absl/strings/substitute.h +55 -21
  1623. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +9 -6
  1624. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.h +0 -4
  1625. data/third_party/abseil-cpp/absl/synchronization/internal/futex.h +20 -17
  1626. data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +37 -31
  1627. data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +22 -8
  1628. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +0 -4
  1629. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +1 -6
  1630. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +0 -25
  1631. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +10 -4
  1632. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +172 -88
  1633. data/third_party/abseil-cpp/absl/synchronization/mutex.h +102 -55
  1634. data/third_party/abseil-cpp/absl/synchronization/notification.cc +0 -1
  1635. data/third_party/abseil-cpp/absl/synchronization/notification.h +3 -3
  1636. data/third_party/abseil-cpp/absl/time/civil_time.cc +26 -0
  1637. data/third_party/abseil-cpp/absl/time/civil_time.h +25 -0
  1638. data/third_party/abseil-cpp/absl/time/clock.cc +17 -11
  1639. data/third_party/abseil-cpp/absl/time/duration.cc +12 -11
  1640. data/third_party/abseil-cpp/absl/time/format.cc +2 -1
  1641. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +11 -7
  1642. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +1 -1
  1643. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +26 -5
  1644. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +7 -6
  1645. data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +36 -35
  1646. data/third_party/abseil-cpp/absl/time/time.cc +2 -2
  1647. data/third_party/abseil-cpp/absl/time/time.h +268 -169
  1648. data/third_party/abseil-cpp/absl/types/internal/optional.h +8 -0
  1649. data/third_party/abseil-cpp/absl/types/internal/span.h +30 -19
  1650. data/third_party/abseil-cpp/absl/types/internal/variant.h +28 -40
  1651. data/third_party/abseil-cpp/absl/types/optional.h +17 -14
  1652. data/third_party/abseil-cpp/absl/types/span.h +31 -8
  1653. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_genn.c +1 -1
  1654. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +1 -2
  1655. data/third_party/re2/re2/bitstate.cc +3 -3
  1656. data/third_party/re2/re2/dfa.cc +13 -13
  1657. data/third_party/re2/re2/nfa.cc +4 -4
  1658. data/third_party/re2/re2/onepass.cc +2 -2
  1659. data/third_party/re2/re2/prefilter_tree.cc +27 -59
  1660. data/third_party/re2/re2/prefilter_tree.h +3 -2
  1661. data/third_party/re2/re2/prog.cc +11 -2
  1662. data/third_party/re2/re2/prog.h +17 -5
  1663. data/third_party/re2/re2/re2.cc +6 -11
  1664. data/third_party/re2/re2/re2.h +1 -1
  1665. data/third_party/re2/re2/regexp.cc +1 -2
  1666. data/third_party/re2/re2/stringpiece.h +10 -7
  1667. data/third_party/re2/re2/unicode_casefold.cc +25 -11
  1668. data/third_party/re2/re2/unicode_groups.cc +319 -151
  1669. data/third_party/re2/re2/walker-inl.h +3 -2
  1670. data/third_party/re2/util/mutex.h +4 -4
  1671. data/third_party/upb/third_party/utf8_range/utf8_range.h +1 -1
  1672. data/third_party/upb/upb/arena.c +277 -0
  1673. data/third_party/upb/upb/arena.h +225 -0
  1674. data/third_party/upb/upb/array.c +114 -0
  1675. data/third_party/upb/upb/array.h +83 -0
  1676. data/third_party/upb/upb/collections.h +36 -0
  1677. data/third_party/upb/upb/decode.c +161 -65
  1678. data/third_party/upb/upb/decode.h +1 -0
  1679. data/third_party/upb/upb/decode_fast.c +1 -1
  1680. data/third_party/upb/upb/def.c +10 -2
  1681. data/third_party/upb/upb/def.h +8 -1
  1682. data/third_party/upb/upb/def.hpp +7 -4
  1683. data/third_party/upb/upb/encode.c +29 -20
  1684. data/third_party/upb/upb/encode.h +16 -6
  1685. data/third_party/upb/upb/extension_registry.c +93 -0
  1686. data/third_party/upb/upb/extension_registry.h +84 -0
  1687. data/third_party/upb/upb/{decode_internal.h → internal/decode.h} +5 -5
  1688. data/third_party/upb/upb/internal/table.h +385 -0
  1689. data/third_party/upb/upb/{upb_internal.h → internal/upb.h} +3 -3
  1690. data/third_party/upb/upb/internal/vsnprintf_compat.h +52 -0
  1691. data/third_party/upb/upb/json_decode.c +1512 -0
  1692. data/third_party/upb/upb/json_decode.h +47 -0
  1693. data/third_party/upb/upb/json_encode.c +7 -3
  1694. data/third_party/upb/upb/json_encode.h +6 -3
  1695. data/third_party/upb/upb/map.c +108 -0
  1696. data/third_party/upb/upb/map.h +117 -0
  1697. data/third_party/upb/upb/message_value.h +66 -0
  1698. data/third_party/upb/upb/mini_table.c +1147 -0
  1699. data/third_party/upb/upb/mini_table.h +189 -0
  1700. data/third_party/upb/upb/mini_table.hpp +112 -0
  1701. data/third_party/upb/upb/msg.c +2 -62
  1702. data/third_party/upb/upb/msg.h +2 -45
  1703. data/third_party/upb/upb/msg_internal.h +28 -22
  1704. data/third_party/upb/upb/port_def.inc +2 -1
  1705. data/third_party/upb/upb/port_undef.inc +1 -0
  1706. data/third_party/upb/upb/reflection.c +2 -159
  1707. data/third_party/upb/upb/reflection.h +2 -112
  1708. data/third_party/upb/upb/status.c +86 -0
  1709. data/third_party/upb/upb/status.h +66 -0
  1710. data/third_party/upb/upb/table.c +2 -2
  1711. data/third_party/upb/upb/table_internal.h +3 -352
  1712. data/third_party/upb/upb/text_encode.c +3 -2
  1713. data/third_party/upb/upb/upb.c +4 -290
  1714. data/third_party/upb/upb/upb.h +7 -196
  1715. data/third_party/zlib/compress.c +3 -3
  1716. data/third_party/zlib/crc32.c +21 -12
  1717. data/third_party/zlib/deflate.c +112 -106
  1718. data/third_party/zlib/deflate.h +2 -2
  1719. data/third_party/zlib/gzlib.c +1 -1
  1720. data/third_party/zlib/gzread.c +3 -5
  1721. data/third_party/zlib/gzwrite.c +1 -1
  1722. data/third_party/zlib/infback.c +10 -7
  1723. data/third_party/zlib/inflate.c +5 -2
  1724. data/third_party/zlib/inftrees.c +2 -2
  1725. data/third_party/zlib/inftrees.h +1 -1
  1726. data/third_party/zlib/trees.c +61 -62
  1727. data/third_party/zlib/uncompr.c +2 -2
  1728. data/third_party/zlib/zconf.h +16 -3
  1729. data/third_party/zlib/zlib.h +10 -10
  1730. data/third_party/zlib/zutil.c +9 -7
  1731. data/third_party/zlib/zutil.h +1 -0
  1732. metadata +339 -78
  1733. data/include/grpc/impl/codegen/gpr_slice.h +0 -71
  1734. data/src/core/ext/filters/client_channel/lb_policy_factory.h +0 -50
  1735. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +0 -192
  1736. data/src/core/ext/filters/client_channel/lb_policy_registry.h +0 -70
  1737. data/src/core/ext/filters/client_channel/proxy_mapper.h +0 -54
  1738. data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +0 -91
  1739. data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +0 -55
  1740. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +0 -180
  1741. data/src/core/ext/filters/fault_injection/service_config_parser.cc +0 -179
  1742. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +0 -457
  1743. data/src/core/ext/filters/http/message_compress/message_compress_filter.h +0 -53
  1744. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +0 -388
  1745. data/src/core/ext/filters/server_config_selector/server_config_selector.cc +0 -61
  1746. data/src/core/ext/xds/certificate_provider_registry.cc +0 -103
  1747. data/src/core/ext/xds/certificate_provider_registry.h +0 -57
  1748. data/src/core/lib/event_engine/iomgr_engine.cc +0 -206
  1749. data/src/core/lib/event_engine/iomgr_engine.h +0 -118
  1750. data/src/core/lib/gpr/env.h +0 -40
  1751. data/src/core/lib/gpr/env_linux.cc +0 -75
  1752. data/src/core/lib/gpr/env_posix.cc +0 -46
  1753. data/src/core/lib/gpr/env_windows.cc +0 -74
  1754. data/src/core/lib/gpr/murmur_hash.cc +0 -82
  1755. data/src/core/lib/gpr/murmur_hash.h +0 -29
  1756. data/src/core/lib/gpr/string_windows.h +0 -32
  1757. data/src/core/lib/gpr/tls.h +0 -156
  1758. data/src/core/lib/iomgr/error_internal.h +0 -66
  1759. data/src/core/lib/iomgr/executor/mpmcqueue.cc +0 -182
  1760. data/src/core/lib/iomgr/executor/mpmcqueue.h +0 -171
  1761. data/src/core/lib/iomgr/executor/threadpool.cc +0 -136
  1762. data/src/core/lib/iomgr/executor/threadpool.h +0 -150
  1763. data/src/core/lib/iomgr/time_averaged_stats.cc +0 -64
  1764. data/src/core/lib/iomgr/time_averaged_stats.h +0 -72
  1765. data/src/core/lib/profiling/basic_timers.cc +0 -295
  1766. data/src/core/lib/profiling/stap_timers.cc +0 -50
  1767. data/src/core/lib/profiling/timers.h +0 -94
  1768. data/src/core/lib/promise/call_push_pull.h +0 -148
  1769. data/src/core/lib/security/security_connector/load_system_roots_linux.h +0 -46
  1770. data/src/core/lib/slice/slice_api.cc +0 -39
  1771. data/src/core/lib/slice/slice_buffer_api.cc +0 -35
  1772. data/src/core/lib/slice/slice_refcount_base.h +0 -60
  1773. data/src/core/lib/slice/slice_split.cc +0 -103
  1774. data/src/core/lib/slice/slice_split.h +0 -36
  1775. data/src/core/lib/transport/byte_stream.cc +0 -165
  1776. data/src/core/lib/transport/byte_stream.h +0 -170
  1777. data/third_party/abseil-cpp/absl/container/internal/have_sse.h +0 -50
@@ -20,7 +20,6 @@
20
20
 
21
21
  #include <inttypes.h>
22
22
  #include <limits.h>
23
- #include <string.h>
24
23
 
25
24
  #include <algorithm>
26
25
  #include <functional>
@@ -28,8 +27,7 @@
28
27
  #include <set>
29
28
  #include <vector>
30
29
 
31
- #include "absl/container/inlined_vector.h"
32
- #include "absl/memory/memory.h"
30
+ #include "absl/status/status.h"
33
31
  #include "absl/status/statusor.h"
34
32
  #include "absl/strings/cord.h"
35
33
  #include "absl/strings/numbers.h"
@@ -39,49 +37,49 @@
39
37
  #include "absl/types/optional.h"
40
38
  #include "absl/types/variant.h"
41
39
 
42
- #include <grpc/impl/codegen/gpr_types.h>
40
+ #include <grpc/event_engine/event_engine.h>
43
41
  #include <grpc/slice.h>
44
42
  #include <grpc/status.h>
45
- #include <grpc/support/alloc.h>
46
43
  #include <grpc/support/log.h>
47
44
  #include <grpc/support/string_util.h>
45
+ #include <grpc/support/time.h>
48
46
 
49
47
  #include "src/core/ext/filters/client_channel/backend_metric.h"
50
48
  #include "src/core/ext/filters/client_channel/backup_poller.h"
51
49
  #include "src/core/ext/filters/client_channel/client_channel_channelz.h"
50
+ #include "src/core/ext/filters/client_channel/client_channel_service_config.h"
52
51
  #include "src/core/ext/filters/client_channel/config_selector.h"
53
52
  #include "src/core/ext/filters/client_channel/dynamic_filters.h"
54
53
  #include "src/core/ext/filters/client_channel/global_subchannel_pool.h"
55
54
  #include "src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h"
56
- #include "src/core/ext/filters/client_channel/lb_policy_registry.h"
57
55
  #include "src/core/ext/filters/client_channel/local_subchannel_pool.h"
58
- #include "src/core/ext/filters/client_channel/proxy_mapper_registry.h"
59
- #include "src/core/ext/filters/client_channel/resolver_result_parsing.h"
60
56
  #include "src/core/ext/filters/client_channel/retry_filter.h"
61
57
  #include "src/core/ext/filters/client_channel/subchannel.h"
62
- #include "src/core/ext/filters/client_channel/subchannel_interface.h"
63
58
  #include "src/core/ext/filters/client_channel/subchannel_interface_internal.h"
64
59
  #include "src/core/ext/filters/deadline/deadline_filter.h"
65
60
  #include "src/core/lib/channel/channel_args.h"
66
61
  #include "src/core/lib/channel/channel_stack.h"
67
62
  #include "src/core/lib/channel/channel_trace.h"
63
+ #include "src/core/lib/channel/status_util.h"
68
64
  #include "src/core/lib/config/core_configuration.h"
69
65
  #include "src/core/lib/debug/trace.h"
70
66
  #include "src/core/lib/gpr/useful.h"
71
67
  #include "src/core/lib/gprpp/debug_location.h"
68
+ #include "src/core/lib/gprpp/status_helper.h"
72
69
  #include "src/core/lib/gprpp/sync.h"
70
+ #include "src/core/lib/gprpp/work_serializer.h"
71
+ #include "src/core/lib/handshaker/proxy_mapper_registry.h"
73
72
  #include "src/core/lib/iomgr/exec_ctx.h"
74
73
  #include "src/core/lib/iomgr/polling_entity.h"
75
74
  #include "src/core/lib/iomgr/pollset_set.h"
76
- #include "src/core/lib/iomgr/work_serializer.h"
77
75
  #include "src/core/lib/json/json.h"
78
- #include "src/core/lib/profiling/timers.h"
76
+ #include "src/core/lib/load_balancing/lb_policy_registry.h"
77
+ #include "src/core/lib/load_balancing/subchannel_interface.h"
79
78
  #include "src/core/lib/resolver/resolver_registry.h"
80
79
  #include "src/core/lib/resolver/server_address.h"
81
80
  #include "src/core/lib/service_config/service_config_call_data.h"
82
81
  #include "src/core/lib/service_config/service_config_impl.h"
83
82
  #include "src/core/lib/slice/slice_internal.h"
84
- #include "src/core/lib/slice/slice_refcount.h"
85
83
  #include "src/core/lib/surface/channel.h"
86
84
  #include "src/core/lib/transport/connectivity_state.h"
87
85
  #include "src/core/lib/transport/error_utils.h"
@@ -96,9 +94,7 @@
96
94
 
97
95
  namespace grpc_core {
98
96
 
99
- using internal::ClientChannelGlobalParsedConfig;
100
97
  using internal::ClientChannelMethodParsedConfig;
101
- using internal::ClientChannelServiceConfigParser;
102
98
 
103
99
  TraceFlag grpc_client_channel_trace(false, "client_channel");
104
100
  TraceFlag grpc_client_channel_call_trace(false, "client_channel_call");
@@ -194,20 +190,16 @@ class ClientChannel::CallData {
194
190
 
195
191
  void CreateDynamicCall(grpc_call_element* elem);
196
192
 
193
+ Arena* arena() const { return deadline_state_.arena; }
194
+ grpc_call_stack* owning_call() const { return deadline_state_.call_stack; }
195
+ CallCombiner* call_combiner() const { return deadline_state_.call_combiner; }
196
+
197
197
  // State for handling deadlines.
198
- // The code in deadline_filter.c requires this to be the first field.
199
- // TODO(roth): This is slightly sub-optimal in that grpc_deadline_state
200
- // and this struct both independently store pointers to the call stack
201
- // and call combiner. If/when we have time, find a way to avoid this
202
- // without breaking the grpc_deadline_state abstraction.
203
198
  grpc_deadline_state deadline_state_;
204
199
 
205
200
  grpc_slice path_; // Request path.
206
201
  gpr_cycle_counter call_start_time_;
207
202
  Timestamp deadline_;
208
- Arena* arena_;
209
- grpc_call_stack* owning_call_;
210
- CallCombiner* call_combiner_;
211
203
  grpc_call_context_element* call_context_;
212
204
 
213
205
  grpc_polling_entity* pollent_ = nullptr;
@@ -238,7 +230,7 @@ class ClientChannel::CallData {
238
230
  grpc_transport_stream_op_batch* pending_batches_[MAX_PENDING_BATCHES] = {};
239
231
 
240
232
  // Set when we get a cancel_stream op.
241
- grpc_error_handle cancel_error_ = GRPC_ERROR_NONE;
233
+ grpc_error_handle cancel_error_;
242
234
  };
243
235
 
244
236
  //
@@ -267,28 +259,6 @@ const grpc_channel_filter ClientChannel::kFilterVtable = {
267
259
 
268
260
  namespace {
269
261
 
270
- // Channel arg pointer vtable for GRPC_ARG_CLIENT_CHANNEL.
271
- void* ClientChannelArgCopy(void* p) { return p; }
272
- void ClientChannelArgDestroy(void* /*p*/) {}
273
- int ClientChannelArgCmp(void* p, void* q) { return QsortCompare(p, q); }
274
- const grpc_arg_pointer_vtable kClientChannelArgPointerVtable = {
275
- ClientChannelArgCopy, ClientChannelArgDestroy, ClientChannelArgCmp};
276
-
277
- // Channel arg pointer vtable for GRPC_ARG_SERVICE_CONFIG_OBJ.
278
- void* ServiceConfigObjArgCopy(void* p) {
279
- auto* service_config = static_cast<ServiceConfig*>(p);
280
- service_config->Ref().release();
281
- return p;
282
- }
283
- void ServiceConfigObjArgDestroy(void* p) {
284
- auto* service_config = static_cast<ServiceConfig*>(p);
285
- service_config->Unref();
286
- }
287
- int ServiceConfigObjArgCmp(void* p, void* q) { return QsortCompare(p, q); }
288
- const grpc_arg_pointer_vtable kServiceConfigObjArgPointerVtable = {
289
- ServiceConfigObjArgCopy, ServiceConfigObjArgDestroy,
290
- ServiceConfigObjArgCmp};
291
-
292
262
  class DynamicTerminationFilter {
293
263
  public:
294
264
  class CallData;
@@ -300,7 +270,7 @@ class DynamicTerminationFilter {
300
270
  GPR_ASSERT(args->is_last);
301
271
  GPR_ASSERT(elem->filter == &kFilterVtable);
302
272
  new (elem->channel_data) DynamicTerminationFilter(args->channel_args);
303
- return GRPC_ERROR_NONE;
273
+ return absl::OkStatus();
304
274
  }
305
275
 
306
276
  static void Destroy(grpc_channel_element* elem) {
@@ -315,9 +285,8 @@ class DynamicTerminationFilter {
315
285
  const grpc_channel_info* /*info*/) {}
316
286
 
317
287
  private:
318
- explicit DynamicTerminationFilter(const grpc_channel_args* args)
319
- : chand_(grpc_channel_args_find_pointer<ClientChannel>(
320
- args, GRPC_ARG_CLIENT_CHANNEL)) {}
288
+ explicit DynamicTerminationFilter(const ChannelArgs& args)
289
+ : chand_(args.GetObject<ClientChannel>()) {}
321
290
 
322
291
  ClientChannel* chand_;
323
292
  };
@@ -327,7 +296,7 @@ class DynamicTerminationFilter::CallData {
327
296
  static grpc_error_handle Init(grpc_call_element* elem,
328
297
  const grpc_call_element_args* args) {
329
298
  new (elem->call_data) CallData(*args);
330
- return GRPC_ERROR_NONE;
299
+ return absl::OkStatus();
331
300
  }
332
301
 
333
302
  static void Destroy(grpc_call_element* elem,
@@ -343,7 +312,7 @@ class DynamicTerminationFilter::CallData {
343
312
  subchannel_call->SetAfterCallStackDestroy(then_schedule_closure);
344
313
  } else {
345
314
  // TODO(yashkt) : This can potentially be a Closure::Run
346
- ExecCtx::Run(DEBUG_LOCATION, then_schedule_closure, GRPC_ERROR_NONE);
315
+ ExecCtx::Run(DEBUG_LOCATION, then_schedule_closure, absl::OkStatus());
347
316
  }
348
317
  }
349
318
 
@@ -378,14 +347,14 @@ class DynamicTerminationFilter::CallData {
378
347
 
379
348
  private:
380
349
  explicit CallData(const grpc_call_element_args& args)
381
- : path_(grpc_slice_ref_internal(args.path)),
350
+ : path_(CSliceRef(args.path)),
382
351
  deadline_(args.deadline),
383
352
  arena_(args.arena),
384
353
  owning_call_(args.call_stack),
385
354
  call_combiner_(args.call_combiner),
386
355
  call_context_(args.context) {}
387
356
 
388
- ~CallData() { grpc_slice_unref_internal(path_); }
357
+ ~CallData() { CSliceUnref(path_); }
389
358
 
390
359
  grpc_slice path_; // Request path.
391
360
  Timestamp deadline_;
@@ -507,21 +476,15 @@ class ClientChannel::SubchannelWrapper : public SubchannelInterface {
507
476
  GRPC_CHANNEL_STACK_UNREF(chand_->owning_stack_, "SubchannelWrapper");
508
477
  }
509
478
 
510
- grpc_connectivity_state CheckConnectivityState() override {
511
- return subchannel_->CheckConnectivityState(health_check_service_name_);
512
- }
513
-
514
479
  void WatchConnectivityState(
515
- grpc_connectivity_state initial_state,
516
480
  std::unique_ptr<ConnectivityStateWatcherInterface> watcher) override
517
481
  ABSL_EXCLUSIVE_LOCKS_REQUIRED(*chand_->work_serializer_) {
518
482
  auto& watcher_wrapper = watcher_map_[watcher.get()];
519
483
  GPR_ASSERT(watcher_wrapper == nullptr);
520
484
  watcher_wrapper = new WatcherWrapper(std::move(watcher),
521
- Ref(DEBUG_LOCATION, "WatcherWrapper"),
522
- initial_state);
485
+ Ref(DEBUG_LOCATION, "WatcherWrapper"));
523
486
  subchannel_->WatchConnectivityState(
524
- initial_state, health_check_service_name_,
487
+ health_check_service_name_,
525
488
  RefCountedPtr<Subchannel::ConnectivityStateWatcherInterface>(
526
489
  watcher_wrapper));
527
490
  }
@@ -552,10 +515,6 @@ class ClientChannel::SubchannelWrapper : public SubchannelInterface {
552
515
  data_watchers_.push_back(std::move(internal_watcher));
553
516
  }
554
517
 
555
- const grpc_channel_args* channel_args() override {
556
- return subchannel_->channel_args();
557
- }
558
-
559
518
  void ThrottleKeepaliveTime(int new_keepalive_time) {
560
519
  subchannel_->ThrottleKeepaliveTime(new_keepalive_time);
561
520
  }
@@ -580,11 +539,8 @@ class ClientChannel::SubchannelWrapper : public SubchannelInterface {
580
539
  WatcherWrapper(
581
540
  std::unique_ptr<SubchannelInterface::ConnectivityStateWatcherInterface>
582
541
  watcher,
583
- RefCountedPtr<SubchannelWrapper> parent,
584
- grpc_connectivity_state initial_state)
585
- : watcher_(std::move(watcher)),
586
- parent_(std::move(parent)),
587
- last_seen_state_(initial_state) {}
542
+ RefCountedPtr<SubchannelWrapper> parent)
543
+ : watcher_(std::move(watcher)), parent_(std::move(parent)) {}
588
544
 
589
545
  ~WatcherWrapper() override {
590
546
  auto* parent = parent_.release(); // ref owned by lambda
@@ -596,7 +552,8 @@ class ClientChannel::SubchannelWrapper : public SubchannelInterface {
596
552
  DEBUG_LOCATION);
597
553
  }
598
554
 
599
- void OnConnectivityStateChange() override {
555
+ void OnConnectivityStateChange(grpc_connectivity_state state,
556
+ const absl::Status& status) override {
600
557
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
601
558
  gpr_log(GPR_INFO,
602
559
  "chand=%p: connectivity change for subchannel wrapper %p "
@@ -605,9 +562,9 @@ class ClientChannel::SubchannelWrapper : public SubchannelInterface {
605
562
  }
606
563
  Ref().release(); // ref owned by lambda
607
564
  parent_->chand_->work_serializer_->Run(
608
- [this]() ABSL_EXCLUSIVE_LOCKS_REQUIRED(
565
+ [this, state, status]() ABSL_EXCLUSIVE_LOCKS_REQUIRED(
609
566
  *parent_->chand_->work_serializer_) {
610
- ApplyUpdateInControlPlaneWorkSerializer();
567
+ ApplyUpdateInControlPlaneWorkSerializer(state, status);
611
568
  Unref();
612
569
  },
613
570
  DEBUG_LOCATION);
@@ -621,28 +578,26 @@ class ClientChannel::SubchannelWrapper : public SubchannelInterface {
621
578
  }
622
579
 
623
580
  WatcherWrapper* MakeReplacement() {
624
- auto* replacement =
625
- new WatcherWrapper(std::move(watcher_), parent_, last_seen_state_);
581
+ auto* replacement = new WatcherWrapper(std::move(watcher_), parent_);
626
582
  replacement_ = replacement;
627
583
  return replacement;
628
584
  }
629
585
 
630
- grpc_connectivity_state last_seen_state() const { return last_seen_state_; }
631
-
632
586
  private:
633
- void ApplyUpdateInControlPlaneWorkSerializer()
587
+ void ApplyUpdateInControlPlaneWorkSerializer(grpc_connectivity_state state,
588
+ const absl::Status& status)
634
589
  ABSL_EXCLUSIVE_LOCKS_REQUIRED(*parent_->chand_->work_serializer_) {
635
590
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
636
591
  gpr_log(GPR_INFO,
637
592
  "chand=%p: processing connectivity change in work serializer "
638
- "for subchannel wrapper %p subchannel %p "
639
- "watcher=%p",
593
+ "for subchannel wrapper %p subchannel %p watcher=%p "
594
+ "state=%s status=%s",
640
595
  parent_->chand_, parent_.get(), parent_->subchannel_.get(),
641
- watcher_.get());
596
+ watcher_.get(), ConnectivityStateName(state),
597
+ status.ToString().c_str());
642
598
  }
643
- ConnectivityStateChange state_change = PopConnectivityStateChange();
644
599
  absl::optional<absl::Cord> keepalive_throttling =
645
- state_change.status.GetPayload(kKeepaliveThrottlingKey);
600
+ status.GetPayload(kKeepaliveThrottlingKey);
646
601
  if (keepalive_throttling.has_value()) {
647
602
  int new_keepalive_time = -1;
648
603
  if (absl::SimpleAtoi(std::string(keepalive_throttling.value()),
@@ -670,15 +625,19 @@ class ClientChannel::SubchannelWrapper : public SubchannelInterface {
670
625
  // Ignore update if the parent WatcherWrapper has been replaced
671
626
  // since this callback was scheduled.
672
627
  if (watcher_ != nullptr) {
673
- last_seen_state_ = state_change.state;
674
- watcher_->OnConnectivityStateChange(state_change.state);
628
+ // Propagate status only in state TF.
629
+ // We specifically want to avoid propagating the status for
630
+ // state IDLE that the real subchannel gave us only for the
631
+ // purpose of keepalive propagation.
632
+ watcher_->OnConnectivityStateChange(
633
+ state, state == GRPC_CHANNEL_TRANSIENT_FAILURE ? status
634
+ : absl::OkStatus());
675
635
  }
676
636
  }
677
637
 
678
638
  std::unique_ptr<SubchannelInterface::ConnectivityStateWatcherInterface>
679
639
  watcher_;
680
640
  RefCountedPtr<SubchannelWrapper> parent_;
681
- grpc_connectivity_state last_seen_state_;
682
641
  WatcherWrapper* replacement_ = nullptr;
683
642
  };
684
643
 
@@ -767,14 +726,18 @@ void ClientChannel::ExternalConnectivityWatcher::Notify(
767
726
  chand_, on_complete_, /*cancel=*/false);
768
727
  // Report new state to the user.
769
728
  *state_ = state;
770
- ExecCtx::Run(DEBUG_LOCATION, on_complete_, GRPC_ERROR_NONE);
729
+ ExecCtx::Run(DEBUG_LOCATION, on_complete_, absl::OkStatus());
771
730
  // Hop back into the work_serializer to clean up.
772
731
  // Not needed in state SHUTDOWN, because the tracker will
773
732
  // automatically remove all watchers in that case.
733
+ // Note: The callback takes a ref in case the ref inside the state tracker
734
+ // gets removed before the callback runs via a SHUTDOWN notification.
774
735
  if (state != GRPC_CHANNEL_SHUTDOWN) {
736
+ Ref(DEBUG_LOCATION, "RemoveWatcherLocked()").release();
775
737
  chand_->work_serializer_->Run(
776
738
  [this]() ABSL_EXCLUSIVE_LOCKS_REQUIRED(*chand_->work_serializer_) {
777
739
  RemoveWatcherLocked();
740
+ Unref(DEBUG_LOCATION, "RemoveWatcherLocked()");
778
741
  },
779
742
  DEBUG_LOCATION);
780
743
  }
@@ -786,17 +749,21 @@ void ClientChannel::ExternalConnectivityWatcher::Cancel() {
786
749
  std::memory_order_relaxed)) {
787
750
  return; // Already done.
788
751
  }
789
- ExecCtx::Run(DEBUG_LOCATION, on_complete_, GRPC_ERROR_CANCELLED);
752
+ ExecCtx::Run(DEBUG_LOCATION, on_complete_, absl::CancelledError());
790
753
  // Hop back into the work_serializer to clean up.
754
+ // Note: The callback takes a ref in case the ref inside the state tracker
755
+ // gets removed before the callback runs via a SHUTDOWN notification.
756
+ Ref(DEBUG_LOCATION, "RemoveWatcherLocked()").release();
791
757
  chand_->work_serializer_->Run(
792
758
  [this]() ABSL_EXCLUSIVE_LOCKS_REQUIRED(*chand_->work_serializer_) {
793
759
  RemoveWatcherLocked();
760
+ Unref(DEBUG_LOCATION, "RemoveWatcherLocked()");
794
761
  },
795
762
  DEBUG_LOCATION);
796
763
  }
797
764
 
798
765
  void ClientChannel::ExternalConnectivityWatcher::AddWatcherLocked() {
799
- Closure::Run(DEBUG_LOCATION, watcher_timer_init_, GRPC_ERROR_NONE);
766
+ Closure::Run(DEBUG_LOCATION, watcher_timer_init_, absl::OkStatus());
800
767
  // Add new watcher. Pass the ref of the object from creation to OrphanablePtr.
801
768
  chand_->state_tracker_.AddWatcher(
802
769
  initial_state_, OrphanablePtr<ConnectivityStateWatcherInterface>(this));
@@ -886,67 +853,23 @@ class ClientChannel::ClientChannelControlHelper
886
853
  }
887
854
 
888
855
  RefCountedPtr<SubchannelInterface> CreateSubchannel(
889
- ServerAddress address, const grpc_channel_args& args) override
856
+ ServerAddress address, const ChannelArgs& args) override
890
857
  ABSL_EXCLUSIVE_LOCKS_REQUIRED(*chand_->work_serializer_) {
891
858
  if (chand_->resolver_ == nullptr) return nullptr; // Shutting down.
892
859
  // Determine health check service name.
893
860
  absl::optional<std::string> health_check_service_name;
894
- const char* health_check_service_name_arg = grpc_channel_args_find_string(
895
- &args, GRPC_ARG_HEALTH_CHECK_SERVICE_NAME);
896
- if (health_check_service_name_arg != nullptr) {
897
- bool inhibit_health_checking = grpc_channel_args_find_bool(
898
- &args, GRPC_ARG_INHIBIT_HEALTH_CHECKING, false);
899
- if (!inhibit_health_checking) {
900
- health_check_service_name = health_check_service_name_arg;
901
- }
861
+ if (!args.GetBool(GRPC_ARG_INHIBIT_HEALTH_CHECKING).value_or(false)) {
862
+ health_check_service_name =
863
+ args.GetOwnedString(GRPC_ARG_HEALTH_CHECK_SERVICE_NAME);
902
864
  }
903
865
  // Construct channel args for subchannel.
904
- // Remove channel args that should not affect subchannel uniqueness.
905
- absl::InlinedVector<const char*, 4> args_to_remove = {
906
- GRPC_ARG_HEALTH_CHECK_SERVICE_NAME,
907
- GRPC_ARG_INHIBIT_HEALTH_CHECKING,
908
- GRPC_ARG_CHANNELZ_CHANNEL_NODE,
909
- };
910
- // Add channel args needed for the subchannel.
911
- absl::InlinedVector<grpc_arg, 2> args_to_add = {
912
- SubchannelPoolInterface::CreateChannelArg(
913
- chand_->subchannel_pool_.get()),
914
- };
915
- // Check if default authority arg is already set.
916
- const char* default_authority =
917
- grpc_channel_args_find_string(&args, GRPC_ARG_DEFAULT_AUTHORITY);
918
- // Add args from subchannel address.
919
- if (address.args() != nullptr) {
920
- for (size_t j = 0; j < address.args()->num_args; ++j) {
921
- grpc_arg& arg = address.args()->args[j];
922
- if (strcmp(arg.key, GRPC_ARG_DEFAULT_AUTHORITY) == 0) {
923
- // Don't add default authority arg from subchannel address if
924
- // it's already set at the channel level -- the value from the
925
- // application should take precedence over what is set by the
926
- // resolver.
927
- if (default_authority != nullptr) continue;
928
- default_authority = arg.value.string;
929
- }
930
- args_to_add.emplace_back(arg);
931
- }
932
- }
933
- // If we haven't already set the default authority arg, add it from
934
- // the channel.
935
- if (default_authority == nullptr) {
936
- // Remove it, just in case it's actually present but is the wrong type.
937
- args_to_remove.push_back(GRPC_ARG_DEFAULT_AUTHORITY);
938
- args_to_add.push_back(grpc_channel_arg_string_create(
939
- const_cast<char*>(GRPC_ARG_DEFAULT_AUTHORITY),
940
- const_cast<char*>(chand_->default_authority_.c_str())));
941
- }
942
- grpc_channel_args* new_args = grpc_channel_args_copy_and_add_and_remove(
943
- &args, args_to_remove.data(), args_to_remove.size(), args_to_add.data(),
944
- args_to_add.size());
866
+ ChannelArgs subchannel_args = ClientChannel::MakeSubchannelArgs(
867
+ args, address.args(), chand_->subchannel_pool_,
868
+ chand_->default_authority_);
945
869
  // Create subchannel.
946
870
  RefCountedPtr<Subchannel> subchannel =
947
871
  chand_->client_channel_factory_->CreateSubchannel(address.address(),
948
- new_args);
949
- grpc_channel_args_destroy(new_args);
872
+ subchannel_args);
950
873
  if (subchannel == nullptr) return nullptr;
951
874
  // Make sure the subchannel has updated keepalive time.
952
875
  subchannel->ThrottleKeepaliveTime(chand_->keepalive_time_);
@@ -955,13 +878,12 @@ class ClientChannel::ClientChannelControlHelper
955
878
  chand_, std::move(subchannel), std::move(health_check_service_name));
956
879
  }
957
880
 
958
- void UpdateState(
959
- grpc_connectivity_state state, const absl::Status& status,
960
- std::unique_ptr<LoadBalancingPolicy::SubchannelPicker> picker) override
961
- ABSL_EXCLUSIVE_LOCKS_REQUIRED(*chand_->work_serializer_) {
881
+ void UpdateState(grpc_connectivity_state state, const absl::Status& status,
882
+ RefCountedPtr<LoadBalancingPolicy::SubchannelPicker> picker)
883
+ override ABSL_EXCLUSIVE_LOCKS_REQUIRED(*chand_->work_serializer_) {
962
884
  if (chand_->resolver_ == nullptr) return; // Shutting down.
963
885
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
964
- const char* extra = chand_->disconnect_error_ == GRPC_ERROR_NONE
886
+ const char* extra = chand_->disconnect_error_.ok()
965
887
  ? ""
966
888
  : " (ignoring -- channel shutting down)";
967
889
  gpr_log(GPR_INFO, "chand=%p: update: state=%s status=(%s) picker=%p%s",
@@ -969,7 +891,7 @@ class ClientChannel::ClientChannelControlHelper
969
891
  picker.get(), extra);
970
892
  }
971
893
  // Do update only if not shutting down.
972
- if (chand_->disconnect_error_ == GRPC_ERROR_NONE) {
894
+ if (chand_->disconnect_error_.ok()) {
973
895
  chand_->UpdateStateAndPickerLocked(state, status, "helper",
974
896
  std::move(picker));
975
897
  }
@@ -988,6 +910,10 @@ class ClientChannel::ClientChannelControlHelper
988
910
  return chand_->default_authority_;
989
911
  }
990
912
 
913
+ grpc_event_engine::experimental::EventEngine* GetEventEngine() override {
914
+ return chand_->owning_stack_->EventEngine();
915
+ }
916
+
991
917
  void AddTraceEvent(TraceSeverity severity, absl::string_view message) override
992
918
  ABSL_EXCLUSIVE_LOCKS_REQUIRED(*chand_->work_serializer_) {
993
919
  if (chand_->resolver_ == nullptr) return; // Shutting down.
@@ -1024,7 +950,7 @@ grpc_error_handle ClientChannel::Init(grpc_channel_element* elem,
1024
950
  grpc_channel_element_args* args) {
1025
951
  GPR_ASSERT(args->is_last);
1026
952
  GPR_ASSERT(elem->filter == &kFilterVtable);
1027
- grpc_error_handle error = GRPC_ERROR_NONE;
953
+ grpc_error_handle error;
1028
954
  new (elem->channel_data) ClientChannel(args, &error);
1029
955
  return error;
1030
956
  }
@@ -1037,36 +963,28 @@ void ClientChannel::Destroy(grpc_channel_element* elem) {
1037
963
  namespace {
1038
964
 
1039
965
  RefCountedPtr<SubchannelPoolInterface> GetSubchannelPool(
1040
- const grpc_channel_args* args) {
1041
- const bool use_local_subchannel_pool = grpc_channel_args_find_bool(
1042
- args, GRPC_ARG_USE_LOCAL_SUBCHANNEL_POOL, false);
1043
- if (use_local_subchannel_pool) {
966
+ const ChannelArgs& args) {
967
+ if (args.GetBool(GRPC_ARG_USE_LOCAL_SUBCHANNEL_POOL).value_or(false)) {
1044
968
  return MakeRefCounted<LocalSubchannelPool>();
1045
969
  }
1046
970
  return GlobalSubchannelPool::instance();
1047
971
  }
1048
972
 
1049
- channelz::ChannelNode* GetChannelzNode(const grpc_channel_args* args) {
1050
- return grpc_channel_args_find_pointer<channelz::ChannelNode>(
1051
- args, GRPC_ARG_CHANNELZ_CHANNEL_NODE);
1052
- }
1053
-
1054
973
  } // namespace
1055
974
 
1056
975
  ClientChannel::ClientChannel(grpc_channel_element_args* args,
1057
976
  grpc_error_handle* error)
1058
- : deadline_checking_enabled_(
1059
- grpc_deadline_checking_enabled(args->channel_args)),
977
+ : channel_args_(args->channel_args),
978
+ deadline_checking_enabled_(grpc_deadline_checking_enabled(channel_args_)),
1060
979
  owning_stack_(args->channel_stack),
1061
- client_channel_factory_(
1062
- ClientChannelFactory::GetFromChannelArgs(args->channel_args)),
1063
- channelz_node_(GetChannelzNode(args->channel_args)),
980
+ client_channel_factory_(channel_args_.GetObject<ClientChannelFactory>()),
981
+ channelz_node_(channel_args_.GetObject<channelz::ChannelNode>()),
1064
982
  interested_parties_(grpc_pollset_set_create()),
1065
983
  service_config_parser_index_(
1066
984
  internal::ClientChannelServiceConfigParser::ParserIndex()),
1067
985
  work_serializer_(std::make_shared<WorkSerializer>()),
1068
986
  state_tracker_("client_channel", GRPC_CHANNEL_IDLE),
1069
- subchannel_pool_(GetSubchannelPool(args->channel_args)) {
987
+ subchannel_pool_(GetSubchannelPool(channel_args_)) {
1070
988
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
1071
989
  gpr_log(GPR_INFO, "chand=%p: creating client_channel for channel stack %p",
1072
990
  this, owning_stack_);
@@ -1075,70 +993,66 @@ ClientChannel::ClientChannel(grpc_channel_element_args* args,
1075
993
  grpc_client_channel_start_backup_polling(interested_parties_);
1076
994
  // Check client channel factory.
1077
995
  if (client_channel_factory_ == nullptr) {
1078
- *error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
996
+ *error = GRPC_ERROR_CREATE(
1079
997
  "Missing client channel factory in args for client channel filter");
1080
998
  return;
1081
999
  }
1082
1000
  // Get default service config. If none is specified via the client API,
1083
1001
  // we use an empty config.
1084
- const char* service_config_json = grpc_channel_args_find_string(
1085
- args->channel_args, GRPC_ARG_SERVICE_CONFIG);
1086
- if (service_config_json == nullptr) service_config_json = "{}";
1087
- *error = GRPC_ERROR_NONE;
1088
- default_service_config_ =
1089
- ServiceConfigImpl::Create(args->channel_args, service_config_json, error);
1090
- if (*error != GRPC_ERROR_NONE) {
1091
- default_service_config_.reset();
1002
+ absl::optional<absl::string_view> service_config_json =
1003
+ channel_args_.GetString(GRPC_ARG_SERVICE_CONFIG);
1004
+ if (!service_config_json.has_value()) service_config_json = "{}";
1005
+ *error = absl::OkStatus();
1006
+ auto service_config =
1007
+ ServiceConfigImpl::Create(channel_args_, *service_config_json);
1008
+ if (!service_config.ok()) {
1009
+ *error = absl_status_to_grpc_error(service_config.status());
1092
1010
  return;
1093
1011
  }
1012
+ default_service_config_ = std::move(*service_config);
1094
1013
  // Get URI to resolve, using proxy mapper if needed.
1095
- const char* server_uri =
1096
- grpc_channel_args_find_string(args->channel_args, GRPC_ARG_SERVER_URI);
1097
- if (server_uri == nullptr) {
1098
- *error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1014
+ absl::optional<std::string> server_uri =
1015
+ channel_args_.GetOwnedString(GRPC_ARG_SERVER_URI);
1016
+ if (!server_uri.has_value()) {
1017
+ *error = GRPC_ERROR_CREATE(
1099
1018
  "target URI channel arg missing or wrong type in client channel "
1100
1019
  "filter");
1101
1020
  return;
1102
1021
  }
1103
- uri_to_resolve_ = server_uri;
1104
- char* proxy_name = nullptr;
1105
- grpc_channel_args* new_args = nullptr;
1106
- ProxyMapperRegistry::MapName(server_uri, args->channel_args, &proxy_name,
1107
- &new_args);
1108
- if (proxy_name != nullptr) {
1109
- uri_to_resolve_ = proxy_name;
1110
- gpr_free(proxy_name);
1111
- }
1022
+ uri_to_resolve_ = CoreConfiguration::Get()
1023
+ .proxy_mapper_registry()
1024
+ .MapName(*server_uri, &channel_args_)
1025
+ .value_or(*server_uri);
1112
1026
  // Make sure the URI to resolve is valid, so that we know that
1113
1027
  // resolver creation will succeed later.
1114
1028
  if (!CoreConfiguration::Get().resolver_registry().IsValidTarget(
1115
1029
  uri_to_resolve_)) {
1116
- *error = GRPC_ERROR_CREATE_FROM_CPP_STRING(
1030
+ *error = GRPC_ERROR_CREATE(
1117
1031
  absl::StrCat("the target uri is not valid: ", uri_to_resolve_));
1118
1032
  return;
1119
1033
  }
1120
1034
  // Strip out service config channel arg, so that it doesn't affect
1121
1035
  // subchannel uniqueness when the args flow down to that layer.
1122
- const char* arg_to_remove = GRPC_ARG_SERVICE_CONFIG;
1123
- channel_args_ = grpc_channel_args_copy_and_remove(
1124
- new_args != nullptr ? new_args : args->channel_args, &arg_to_remove, 1);
1125
- grpc_channel_args_destroy(new_args);
1036
+ channel_args_ = channel_args_.Remove(GRPC_ARG_SERVICE_CONFIG);
1126
1037
  // Set initial keepalive time.
1127
- keepalive_time_ = grpc_channel_args_find_integer(
1128
- channel_args_, GRPC_ARG_KEEPALIVE_TIME_MS,
1129
- {-1 /* default value, unset */, 1, INT_MAX});
1038
+ auto keepalive_arg = channel_args_.GetInt(GRPC_ARG_KEEPALIVE_TIME_MS);
1039
+ if (keepalive_arg.has_value()) {
1040
+ keepalive_time_ = Clamp(*keepalive_arg, 1, INT_MAX);
1041
+ } else {
1042
+ keepalive_time_ = -1; // unset
1043
+ }
1130
1044
  // Set default authority.
1131
- const char* default_authority =
1132
- grpc_channel_args_find_string(channel_args_, GRPC_ARG_DEFAULT_AUTHORITY);
1133
- if (default_authority == nullptr) {
1045
+ absl::optional<std::string> default_authority =
1046
+ channel_args_.GetOwnedString(GRPC_ARG_DEFAULT_AUTHORITY);
1047
+ if (!default_authority.has_value()) {
1134
1048
  default_authority_ =
1135
1049
  CoreConfiguration::Get().resolver_registry().GetDefaultAuthority(
1136
- server_uri);
1050
+ *server_uri);
1137
1051
  } else {
1138
- default_authority_ = default_authority;
1052
+ default_authority_ = std::move(*default_authority);
1139
1053
  }
1140
1054
  // Success.
1141
- *error = GRPC_ERROR_NONE;
1055
+ *error = absl::OkStatus();
1142
1056
  }
1143
1057
 
1144
1058
  ClientChannel::~ClientChannel() {
@@ -1146,11 +1060,9 @@ ClientChannel::~ClientChannel() {
1146
1060
  gpr_log(GPR_INFO, "chand=%p: destroying channel", this);
1147
1061
  }
1148
1062
  DestroyResolverAndLbPolicyLocked();
1149
- grpc_channel_args_destroy(channel_args_);
1150
1063
  // Stop backup polling.
1151
1064
  grpc_client_channel_stop_backup_polling(interested_parties_);
1152
1065
  grpc_pollset_set_destroy(interested_parties_);
1153
- GRPC_ERROR_UNREF(disconnect_error_);
1154
1066
  }
1155
1067
 
1156
1068
  OrphanablePtr<ClientChannel::LoadBalancedCall>
@@ -1164,6 +1076,29 @@ ClientChannel::CreateLoadBalancedCall(
1164
1076
  call_dispatch_controller, is_transparent_retry));
1165
1077
  }
1166
1078
 
1079
+ ChannelArgs ClientChannel::MakeSubchannelArgs(
1080
+ const ChannelArgs& channel_args, const ChannelArgs& address_args,
1081
+ const RefCountedPtr<SubchannelPoolInterface>& subchannel_pool,
1082
+ const std::string& channel_default_authority) {
1083
+ // Note that we start with the channel-level args and then apply the
1084
+ // per-address args, so that if a value is present in both, the one
1085
+ // in the channel-level args is used. This is particularly important
1086
+ // for the GRPC_ARG_DEFAULT_AUTHORITY arg, which we want to allow
1087
+ // resolvers to set on a per-address basis only if the application
1088
+ // did not explicitly set it at the channel level.
1089
+ return channel_args.UnionWith(address_args)
1090
+ .SetObject(subchannel_pool)
1091
+ // If we haven't already set the default authority arg (i.e., it
1092
+ // was not explicitly set by the application nor overridden by
1093
+ // the resolver), add it from the channel's default.
1094
+ .SetIfUnset(GRPC_ARG_DEFAULT_AUTHORITY, channel_default_authority)
1095
+ // Remove channel args that should not affect subchannel
1096
+ // uniqueness.
1097
+ .Remove(GRPC_ARG_HEALTH_CHECK_SERVICE_NAME)
1098
+ .Remove(GRPC_ARG_INHIBIT_HEALTH_CHECKING)
1099
+ .Remove(GRPC_ARG_CHANNELZ_CHANNEL_NODE);
1100
+ }
1101
+
1167
1102
  namespace {
1168
1103
 
1169
1104
  RefCountedPtr<LoadBalancingPolicy::Config> ChooseLbPolicy(
@@ -1175,41 +1110,41 @@ RefCountedPtr<LoadBalancingPolicy::Config> ChooseLbPolicy(
1175
1110
  }
1176
1111
  // Try the deprecated LB policy name from the service config.
1177
1112
  // If not, try the setting from channel args.
1178
- const char* policy_name = nullptr;
1113
+ absl::optional<absl::string_view> policy_name;
1179
1114
  if (!parsed_service_config->parsed_deprecated_lb_policy().empty()) {
1180
- policy_name = parsed_service_config->parsed_deprecated_lb_policy().c_str();
1115
+ policy_name = parsed_service_config->parsed_deprecated_lb_policy();
1181
1116
  } else {
1182
- policy_name = grpc_channel_args_find_string(resolver_result.args,
1183
- GRPC_ARG_LB_POLICY_NAME);
1117
+ policy_name = resolver_result.args.GetString(GRPC_ARG_LB_POLICY_NAME);
1184
1118
  bool requires_config = false;
1185
- if (policy_name != nullptr &&
1186
- (!LoadBalancingPolicyRegistry::LoadBalancingPolicyExists(
1187
- policy_name, &requires_config) ||
1119
+ if (policy_name.has_value() &&
1120
+ (!CoreConfiguration::Get()
1121
+ .lb_policy_registry()
1122
+ .LoadBalancingPolicyExists(*policy_name, &requires_config) ||
1188
1123
  requires_config)) {
1189
1124
  if (requires_config) {
1190
1125
  gpr_log(GPR_ERROR,
1191
1126
  "LB policy: %s passed through channel_args must not "
1192
1127
  "require a config. Using pick_first instead.",
1193
- policy_name);
1128
+ std::string(*policy_name).c_str());
1194
1129
  } else {
1195
1130
  gpr_log(GPR_ERROR,
1196
1131
  "LB policy: %s passed through channel_args does not exist. "
1197
1132
  "Using pick_first instead.",
1198
- policy_name);
1133
+ std::string(*policy_name).c_str());
1199
1134
  }
1200
1135
  policy_name = "pick_first";
1201
1136
  }
1202
1137
  }
1203
1138
  // Use pick_first if nothing was specified and we didn't select grpclb
1204
1139
  // above.
1205
- if (policy_name == nullptr) policy_name = "pick_first";
1140
+ if (!policy_name.has_value()) policy_name = "pick_first";
1206
1141
  // Now that we have the policy name, construct an empty config for it.
1207
1142
  Json config_json = Json::Array{Json::Object{
1208
- {policy_name, Json::Object{}},
1143
+ {std::string(*policy_name), Json::Object{}},
1209
1144
  }};
1210
- grpc_error_handle parse_error = GRPC_ERROR_NONE;
1211
- auto lb_policy_config = LoadBalancingPolicyRegistry::ParseLoadBalancingConfig(
1212
- config_json, &parse_error);
1145
+ auto lb_policy_config =
1146
+ CoreConfiguration::Get().lb_policy_registry().ParseLoadBalancingConfig(
1147
+ config_json);
1213
1148
  // The policy name came from one of three places:
1214
1149
  // - The deprecated loadBalancingPolicy field in the service config,
1215
1150
  // in which case the code in ClientChannelServiceConfigParser
@@ -1219,9 +1154,8 @@ RefCountedPtr<LoadBalancingPolicy::Config> ChooseLbPolicy(
1219
1154
  // - A channel arg, in which case we check that the specified policy exists
1220
1155
  // and accepts an empty config. If not, we revert to using pick_first
1221
1156
  // lb_policy
1222
- GPR_ASSERT(lb_policy_config != nullptr);
1223
- GPR_ASSERT(parse_error == GRPC_ERROR_NONE);
1224
- return lb_policy_config;
1157
+ GPR_ASSERT(lb_policy_config.ok());
1158
+ return std::move(*lb_policy_config);
1225
1159
  }
1226
1160
 
1227
1161
  } // namespace
@@ -1232,6 +1166,9 @@ void ClientChannel::OnResolverResultChangedLocked(Resolver::Result result) {
1232
1166
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
1233
1167
  gpr_log(GPR_INFO, "chand=%p: got resolver result", this);
1234
1168
  }
1169
+ // Grab resolver result health callback.
1170
+ auto resolver_callback = std::move(result.result_health_callback);
1171
+ absl::Status resolver_result_status;
1235
1172
  // We only want to trace the address resolution in the follow cases:
1236
1173
  // (a) Address resolution resulted in service config change.
1237
1174
  // (b) Address resolution that causes number of backends to go from
@@ -1241,7 +1178,7 @@ void ClientChannel::OnResolverResultChangedLocked(Resolver::Result result) {
1241
1178
  // (d) Address resolution that causes a new LB policy to be created.
1242
1179
  //
1243
1180
  // We track a list of strings to eventually be concatenated and traced.
1244
- absl::InlinedVector<const char*, 3> trace_strings;
1181
+ std::vector<const char*> trace_strings;
1245
1182
  const bool resolution_contains_addresses =
1246
1183
  result.addresses.ok() && !result.addresses->empty();
1247
1184
  if (!resolution_contains_addresses &&
@@ -1283,6 +1220,8 @@ void ClientChannel::OnResolverResultChangedLocked(Resolver::Result result) {
1283
1220
  // TRANSIENT_FAILURE.
1284
1221
  OnResolverErrorLocked(result.service_config.status());
1285
1222
  trace_strings.push_back("no valid service config");
1223
+ resolver_result_status =
1224
+ absl::UnavailableError("no valid service config");
1286
1225
  }
1287
1226
  } else if (*result.service_config == nullptr) {
1288
1227
  // Resolver did not return any service config.
@@ -1296,7 +1235,7 @@ void ClientChannel::OnResolverResultChangedLocked(Resolver::Result result) {
1296
1235
  } else {
1297
1236
  // Use ServiceConfig and ConfigSelector returned by resolver.
1298
1237
  service_config = std::move(*result.service_config);
1299
- config_selector = ConfigSelector::GetFromChannelArgs(*result.args);
1238
+ config_selector = result.args.GetObjectRef<ConfigSelector>();
1300
1239
  }
1301
1240
  // Note: The only case in which service_config is null here is if the resolver
1302
1241
  // returned a service config error and we don't have a previous service
@@ -1320,14 +1259,14 @@ void ClientChannel::OnResolverResultChangedLocked(Resolver::Result result) {
1320
1259
  // If either has changed, apply the global parameters now.
1321
1260
  if (service_config_changed || config_selector_changed) {
1322
1261
  // Update service config in control plane.
1323
- UpdateServiceConfigInControlPlaneLocked(std::move(service_config),
1324
- std::move(config_selector),
1325
- lb_policy_config->name());
1262
+ UpdateServiceConfigInControlPlaneLocked(
1263
+ std::move(service_config), std::move(config_selector),
1264
+ std::string(lb_policy_config->name()));
1326
1265
  } else if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
1327
1266
  gpr_log(GPR_INFO, "chand=%p: service config not changed", this);
1328
1267
  }
1329
1268
  // Create or update LB policy, as needed.
1330
- CreateOrUpdateLbPolicyLocked(
1269
+ resolver_result_status = CreateOrUpdateLbPolicyLocked(
1331
1270
  std::move(lb_policy_config),
1332
1271
  parsed_service_config->health_check_service_name(), std::move(result));
1333
1272
  if (service_config_changed || config_selector_changed) {
@@ -1341,6 +1280,10 @@ void ClientChannel::OnResolverResultChangedLocked(Resolver::Result result) {
1341
1280
  trace_strings.push_back("Service config changed");
1342
1281
  }
1343
1282
  }
1283
+ // Invoke resolver callback if needed.
1284
+ if (resolver_callback != nullptr) {
1285
+ resolver_callback(std::move(resolver_result_status));
1286
+ }
1344
1287
  // Add channel trace event.
1345
1288
  if (!trace_strings.empty()) {
1346
1289
  std::string message =
@@ -1362,31 +1305,30 @@ void ClientChannel::OnResolverErrorLocked(absl::Status status) {
1362
1305
  // result, then we continue to let it set the connectivity state.
1363
1306
  // Otherwise, we go into TRANSIENT_FAILURE.
1364
1307
  if (lb_policy_ == nullptr) {
1365
- grpc_error_handle error = absl_status_to_grpc_error(status);
1366
1308
  {
1367
1309
  MutexLock lock(&resolution_mu_);
1368
1310
  // Update resolver transient failure.
1369
- resolver_transient_failure_error_ = status;
1311
+ resolver_transient_failure_error_ =
1312
+ MaybeRewriteIllegalStatusCode(status, "resolver");
1370
1313
  // Process calls that were queued waiting for the resolver result.
1371
1314
  for (ResolverQueuedCall* call = resolver_queued_calls_; call != nullptr;
1372
1315
  call = call->next) {
1373
1316
  grpc_call_element* elem = call->elem;
1374
1317
  CallData* calld = static_cast<CallData*>(elem->call_data);
1375
- grpc_error_handle error = GRPC_ERROR_NONE;
1318
+ grpc_error_handle error;
1376
1319
  if (calld->CheckResolutionLocked(elem, &error)) {
1377
1320
  calld->AsyncResolutionDone(elem, error);
1378
1321
  }
1379
1322
  }
1380
1323
  }
1381
- GRPC_ERROR_UNREF(error);
1382
1324
  // Update connectivity state.
1383
1325
  UpdateStateAndPickerLocked(
1384
1326
  GRPC_CHANNEL_TRANSIENT_FAILURE, status, "resolver failure",
1385
- absl::make_unique<LoadBalancingPolicy::TransientFailurePicker>(status));
1327
+ MakeRefCounted<LoadBalancingPolicy::TransientFailurePicker>(status));
1386
1328
  }
1387
1329
  }
1388
1330
 
1389
- void ClientChannel::CreateOrUpdateLbPolicyLocked(
1331
+ absl::Status ClientChannel::CreateOrUpdateLbPolicyLocked(
1390
1332
  RefCountedPtr<LoadBalancingPolicy::Config> lb_policy_config,
1391
1333
  const absl::optional<std::string>& health_check_service_name,
1392
1334
  Resolver::Result result) {
@@ -1395,39 +1337,35 @@ void ClientChannel::CreateOrUpdateLbPolicyLocked(
1395
1337
  update_args.addresses = std::move(result.addresses);
1396
1338
  update_args.config = std::move(lb_policy_config);
1397
1339
  update_args.resolution_note = std::move(result.resolution_note);
1398
- // Add health check service name to channel args.
1399
- absl::InlinedVector<grpc_arg, 1> args_to_add;
1400
- if (health_check_service_name.has_value()) {
1401
- args_to_add.push_back(grpc_channel_arg_string_create(
1402
- const_cast<char*>(GRPC_ARG_HEALTH_CHECK_SERVICE_NAME),
1403
- const_cast<char*>(health_check_service_name->c_str())));
1404
- }
1405
1340
  // Remove the config selector from channel args so that we're not holding
1406
1341
  // unnecessary refs that cause it to be destroyed somewhere other than in the
1407
1342
  // WorkSerializer.
1408
- const char* arg_to_remove = GRPC_ARG_CONFIG_SELECTOR;
1409
- update_args.args = grpc_channel_args_copy_and_add_and_remove(
1410
- result.args, &arg_to_remove, 1, args_to_add.data(), args_to_add.size());
1343
+ update_args.args = result.args.Remove(GRPC_ARG_CONFIG_SELECTOR);
1344
+ // Add health check service name to channel args.
1345
+ if (health_check_service_name.has_value()) {
1346
+ update_args.args = update_args.args.Set(GRPC_ARG_HEALTH_CHECK_SERVICE_NAME,
1347
+ *health_check_service_name);
1348
+ }
1411
1349
  // Create policy if needed.
1412
1350
  if (lb_policy_ == nullptr) {
1413
- lb_policy_ = CreateLbPolicyLocked(*update_args.args);
1351
+ lb_policy_ = CreateLbPolicyLocked(update_args.args);
1414
1352
  }
1415
1353
  // Update the policy.
1416
1354
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
1417
1355
  gpr_log(GPR_INFO, "chand=%p: Updating child policy %p", this,
1418
1356
  lb_policy_.get());
1419
1357
  }
1420
- lb_policy_->UpdateLocked(std::move(update_args));
1358
+ return lb_policy_->UpdateLocked(std::move(update_args));
1421
1359
  }
1422
1360
 
1423
1361
  // Creates a new LB policy.
1424
1362
  OrphanablePtr<LoadBalancingPolicy> ClientChannel::CreateLbPolicyLocked(
1425
- const grpc_channel_args& args) {
1363
+ const ChannelArgs& args) {
1426
1364
  LoadBalancingPolicy::Args lb_policy_args;
1427
1365
  lb_policy_args.work_serializer = work_serializer_;
1428
1366
  lb_policy_args.channel_control_helper =
1429
- absl::make_unique<ClientChannelControlHelper>(this);
1430
- lb_policy_args.args = &args;
1367
+ std::make_unique<ClientChannelControlHelper>(this);
1368
+ lb_policy_args.args = args;
1431
1369
  OrphanablePtr<LoadBalancingPolicy> lb_policy =
1432
1370
  MakeOrphanable<ChildPolicyHandler>(std::move(lb_policy_args),
1433
1371
  &grpc_client_channel_trace);
@@ -1469,8 +1407,7 @@ void ClientChannel::UpdateServiceConfigInControlPlaneLocked(
1469
1407
  RefCountedPtr<ConfigSelector> config_selector, std::string lb_policy_name) {
1470
1408
  std::string service_config_json(service_config->json_string());
1471
1409
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
1472
- gpr_log(GPR_INFO,
1473
- "chand=%p: resolver returned updated service config: \"%s\"", this,
1410
+ gpr_log(GPR_INFO, "chand=%p: using service config: \"%s\"", this,
1474
1411
  service_config_json.c_str());
1475
1412
  }
1476
1413
  // Save service config.
@@ -1502,19 +1439,11 @@ void ClientChannel::UpdateServiceConfigInDataPlaneLocked() {
1502
1439
  config_selector =
1503
1440
  MakeRefCounted<DefaultConfigSelector>(saved_service_config_);
1504
1441
  }
1505
- absl::InlinedVector<grpc_arg, 2> args_to_add = {
1506
- grpc_channel_arg_pointer_create(
1507
- const_cast<char*>(GRPC_ARG_CLIENT_CHANNEL), this,
1508
- &kClientChannelArgPointerVtable),
1509
- grpc_channel_arg_pointer_create(
1510
- const_cast<char*>(GRPC_ARG_SERVICE_CONFIG_OBJ), service_config.get(),
1511
- &kServiceConfigObjArgPointerVtable),
1512
- };
1513
- grpc_channel_args* new_args = grpc_channel_args_copy_and_add(
1514
- channel_args_, args_to_add.data(), args_to_add.size());
1515
- new_args = config_selector->ModifyChannelArgs(new_args);
1442
+ ChannelArgs new_args =
1443
+ channel_args_.SetObject(this).SetObject(service_config);
1516
1444
  bool enable_retries =
1517
- grpc_channel_args_find_bool(new_args, GRPC_ARG_ENABLE_RETRIES, true);
1445
+ !new_args.WantMinimalStack() &&
1446
+ new_args.GetBool(GRPC_ARG_ENABLE_RETRIES).value_or(true);
1518
1447
  // Construct dynamic filter stack.
1519
1448
  std::vector<const grpc_channel_filter*> filters =
1520
1449
  config_selector->GetFilters();
@@ -1526,7 +1455,6 @@ void ClientChannel::UpdateServiceConfigInDataPlaneLocked() {
1526
1455
  RefCountedPtr<DynamicFilters> dynamic_filters =
1527
1456
  DynamicFilters::Create(new_args, std::move(filters));
1528
1457
  GPR_ASSERT(dynamic_filters != nullptr);
1529
- grpc_channel_args_destroy(new_args);
1530
1458
  // Grab data plane lock to update service config.
1531
1459
  //
1532
1460
  // We defer unreffing the old values (and deallocating memory) until
@@ -1554,7 +1482,7 @@ void ClientChannel::UpdateServiceConfigInDataPlaneLocked() {
1554
1482
  ExecCtx::Get()->InvalidateNow();
1555
1483
  grpc_call_element* elem = call->elem;
1556
1484
  CallData* calld = static_cast<CallData*>(elem->call_data);
1557
- grpc_error_handle error = GRPC_ERROR_NONE;
1485
+ grpc_error_handle error;
1558
1486
  if (calld->CheckResolutionLocked(elem, &error)) {
1559
1487
  calld->AsyncResolutionDone(elem, error);
1560
1488
  }
@@ -1570,13 +1498,13 @@ void ClientChannel::CreateResolverLocked() {
1570
1498
  }
1571
1499
  resolver_ = CoreConfiguration::Get().resolver_registry().CreateResolver(
1572
1500
  uri_to_resolve_.c_str(), channel_args_, interested_parties_,
1573
- work_serializer_, absl::make_unique<ResolverResultHandler>(this));
1501
+ work_serializer_, std::make_unique<ResolverResultHandler>(this));
1574
1502
  // Since the validity of the args was checked when the channel was created,
1575
1503
  // CreateResolver() must return a non-null result.
1576
1504
  GPR_ASSERT(resolver_ != nullptr);
1577
1505
  UpdateStateAndPickerLocked(
1578
1506
  GRPC_CHANNEL_CONNECTING, absl::Status(), "started resolving",
1579
- absl::make_unique<LoadBalancingPolicy::QueuePicker>(nullptr));
1507
+ MakeRefCounted<LoadBalancingPolicy::QueuePicker>(nullptr));
1580
1508
  resolver_->StartLocked();
1581
1509
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
1582
1510
  gpr_log(GPR_INFO, "chand=%p: created resolver=%p", this, resolver_.get());
@@ -1605,7 +1533,7 @@ void ClientChannel::DestroyResolverAndLbPolicyLocked() {
1605
1533
  void ClientChannel::UpdateStateAndPickerLocked(
1606
1534
  grpc_connectivity_state state, const absl::Status& status,
1607
1535
  const char* reason,
1608
- std::unique_ptr<LoadBalancingPolicy::SubchannelPicker> picker) {
1536
+ RefCountedPtr<LoadBalancingPolicy::SubchannelPicker> picker) {
1609
1537
  // Special case for IDLE and SHUTDOWN states.
1610
1538
  if (picker == nullptr || state == GRPC_CHANNEL_SHUTDOWN) {
1611
1539
  saved_service_config_.reset();
@@ -1652,7 +1580,7 @@ void ClientChannel::UpdateStateAndPickerLocked(
1652
1580
  // on the stale value, which results in the timer firing too early. To
1653
1581
  // avoid this, we invalidate the cached value for each call we process.
1654
1582
  ExecCtx::Get()->InvalidateNow();
1655
- grpc_error_handle error = GRPC_ERROR_NONE;
1583
+ grpc_error_handle error;
1656
1584
  if (call->lb_call->PickSubchannelLocked(&error)) {
1657
1585
  call->lb_call->AsyncPickDone(error);
1658
1586
  }
@@ -1696,7 +1624,7 @@ T HandlePickResult(
1696
1624
 
1697
1625
  grpc_error_handle ClientChannel::DoPingLocked(grpc_transport_op* op) {
1698
1626
  if (state_tracker_.state() != GRPC_CHANNEL_READY) {
1699
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING("channel not connected");
1627
+ return GRPC_ERROR_CREATE("channel not connected");
1700
1628
  }
1701
1629
  LoadBalancingPolicy::PickResult result;
1702
1630
  {
@@ -1712,13 +1640,16 @@ grpc_error_handle ClientChannel::DoPingLocked(grpc_transport_op* op) {
1712
1640
  complete_pick->subchannel.get());
1713
1641
  RefCountedPtr<ConnectedSubchannel> connected_subchannel =
1714
1642
  subchannel->connected_subchannel();
1643
+ if (connected_subchannel == nullptr) {
1644
+ return GRPC_ERROR_CREATE("LB pick for ping not connected");
1645
+ }
1715
1646
  connected_subchannel->Ping(op->send_ping.on_initiate,
1716
1647
  op->send_ping.on_ack);
1717
- return GRPC_ERROR_NONE;
1648
+ return absl::OkStatus();
1718
1649
  },
1719
1650
  // Queue pick.
1720
1651
  [](LoadBalancingPolicy::PickResult::Queue* /*queue_pick*/) {
1721
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING("LB picker queued call");
1652
+ return GRPC_ERROR_CREATE("LB picker queued call");
1722
1653
  },
1723
1654
  // Fail pick.
1724
1655
  [](LoadBalancingPolicy::PickResult::Fail* fail_pick) {
@@ -1742,9 +1673,8 @@ void ClientChannel::StartTransportOpLocked(grpc_transport_op* op) {
1742
1673
  // Ping.
1743
1674
  if (op->send_ping.on_initiate != nullptr || op->send_ping.on_ack != nullptr) {
1744
1675
  grpc_error_handle error = DoPingLocked(op);
1745
- if (error != GRPC_ERROR_NONE) {
1746
- ExecCtx::Run(DEBUG_LOCATION, op->send_ping.on_initiate,
1747
- GRPC_ERROR_REF(error));
1676
+ if (!error.ok()) {
1677
+ ExecCtx::Run(DEBUG_LOCATION, op->send_ping.on_initiate, error);
1748
1678
  ExecCtx::Run(DEBUG_LOCATION, op->send_ping.on_ack, error);
1749
1679
  }
1750
1680
  op->bind_pollset = nullptr;
@@ -1758,34 +1688,34 @@ void ClientChannel::StartTransportOpLocked(grpc_transport_op* op) {
1758
1688
  }
1759
1689
  }
1760
1690
  // Disconnect or enter IDLE.
1761
- if (op->disconnect_with_error != GRPC_ERROR_NONE) {
1691
+ if (!op->disconnect_with_error.ok()) {
1762
1692
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
1763
1693
  gpr_log(GPR_INFO, "chand=%p: disconnect_with_error: %s", this,
1764
- grpc_error_std_string(op->disconnect_with_error).c_str());
1694
+ StatusToString(op->disconnect_with_error).c_str());
1765
1695
  }
1766
1696
  DestroyResolverAndLbPolicyLocked();
1767
1697
  intptr_t value;
1768
1698
  if (grpc_error_get_int(op->disconnect_with_error,
1769
- GRPC_ERROR_INT_CHANNEL_CONNECTIVITY_STATE, &value) &&
1699
+ StatusIntProperty::ChannelConnectivityState,
1700
+ &value) &&
1770
1701
  static_cast<grpc_connectivity_state>(value) == GRPC_CHANNEL_IDLE) {
1771
- if (disconnect_error_ == GRPC_ERROR_NONE) {
1702
+ if (disconnect_error_.ok()) {
1772
1703
  // Enter IDLE state.
1773
1704
  UpdateStateAndPickerLocked(GRPC_CHANNEL_IDLE, absl::Status(),
1774
1705
  "channel entering IDLE", nullptr);
1775
1706
  }
1776
- GRPC_ERROR_UNREF(op->disconnect_with_error);
1777
1707
  } else {
1778
1708
  // Disconnect.
1779
- GPR_ASSERT(disconnect_error_ == GRPC_ERROR_NONE);
1709
+ GPR_ASSERT(disconnect_error_.ok());
1780
1710
  disconnect_error_ = op->disconnect_with_error;
1781
1711
  UpdateStateAndPickerLocked(
1782
1712
  GRPC_CHANNEL_SHUTDOWN, absl::Status(), "shutdown from API",
1783
- absl::make_unique<LoadBalancingPolicy::TransientFailurePicker>(
1713
+ MakeRefCounted<LoadBalancingPolicy::TransientFailurePicker>(
1784
1714
  grpc_error_to_absl_status(op->disconnect_with_error)));
1785
1715
  }
1786
1716
  }
1787
1717
  GRPC_CHANNEL_STACK_UNREF(owning_stack_, "start_transport_op");
1788
- ExecCtx::Run(DEBUG_LOCATION, op->on_consumed, GRPC_ERROR_NONE);
1718
+ ExecCtx::Run(DEBUG_LOCATION, op->on_consumed, absl::OkStatus());
1789
1719
  }
1790
1720
 
1791
1721
  void ClientChannel::StartTransportOp(grpc_channel_element* elem,
@@ -1889,12 +1819,9 @@ ClientChannel::CallData::CallData(grpc_call_element* elem,
1889
1819
  GPR_LIKELY(chand.deadline_checking_enabled_)
1890
1820
  ? args.deadline
1891
1821
  : Timestamp::InfFuture()),
1892
- path_(grpc_slice_ref_internal(args.path)),
1822
+ path_(CSliceRef(args.path)),
1893
1823
  call_start_time_(args.start_time),
1894
1824
  deadline_(args.deadline),
1895
- arena_(args.arena),
1896
- owning_call_(args.call_stack),
1897
- call_combiner_(args.call_combiner),
1898
1825
  call_context_(args.context) {
1899
1826
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
1900
1827
  gpr_log(GPR_INFO, "chand=%p calld=%p: created call", &chand, this);
@@ -1902,8 +1829,7 @@ ClientChannel::CallData::CallData(grpc_call_element* elem,
1902
1829
  }
1903
1830
 
1904
1831
  ClientChannel::CallData::~CallData() {
1905
- grpc_slice_unref_internal(path_);
1906
- GRPC_ERROR_UNREF(cancel_error_);
1832
+ CSliceUnref(path_);
1907
1833
  // Make sure there are no remaining pending batches.
1908
1834
  for (size_t i = 0; i < GPR_ARRAY_SIZE(pending_batches_); ++i) {
1909
1835
  GPR_ASSERT(pending_batches_[i] == nullptr);
@@ -1914,7 +1840,7 @@ grpc_error_handle ClientChannel::CallData::Init(
1914
1840
  grpc_call_element* elem, const grpc_call_element_args* args) {
1915
1841
  ClientChannel* chand = static_cast<ClientChannel*>(elem->channel_data);
1916
1842
  new (elem->call_data) CallData(elem, *chand, *args);
1917
- return GRPC_ERROR_NONE;
1843
+ return absl::OkStatus();
1918
1844
  }
1919
1845
 
1920
1846
  void ClientChannel::CallData::Destroy(
@@ -1928,13 +1854,12 @@ void ClientChannel::CallData::Destroy(
1928
1854
  dynamic_call->SetAfterCallStackDestroy(then_schedule_closure);
1929
1855
  } else {
1930
1856
  // TODO(yashkt) : This can potentially be a Closure::Run
1931
- ExecCtx::Run(DEBUG_LOCATION, then_schedule_closure, GRPC_ERROR_NONE);
1857
+ ExecCtx::Run(DEBUG_LOCATION, then_schedule_closure, absl::OkStatus());
1932
1858
  }
1933
1859
  }
1934
1860
 
1935
1861
  void ClientChannel::CallData::StartTransportStreamOpBatch(
1936
1862
  grpc_call_element* elem, grpc_transport_stream_op_batch* batch) {
1937
- GPR_TIMER_SCOPE("cc_start_transport_stream_op_batch", 0);
1938
1863
  CallData* calld = static_cast<CallData*>(elem->call_data);
1939
1864
  ClientChannel* chand = static_cast<ClientChannel*>(elem->channel_data);
1940
1865
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace) &&
@@ -1943,7 +1868,8 @@ void ClientChannel::CallData::StartTransportStreamOpBatch(
1943
1868
  calld, grpc_transport_stream_op_batch_string(batch).c_str());
1944
1869
  }
1945
1870
  if (GPR_LIKELY(chand->deadline_checking_enabled_)) {
1946
- grpc_deadline_state_client_start_transport_stream_op_batch(elem, batch);
1871
+ grpc_deadline_state_client_start_transport_stream_op_batch(
1872
+ &calld->deadline_state_, batch);
1947
1873
  }
1948
1874
  // Intercept recv_trailing_metadata to call CallDispatchController::Commit(),
1949
1875
  // in case we wind up failing the call before we get down to the retry
@@ -1971,15 +1897,14 @@ void ClientChannel::CallData::StartTransportStreamOpBatch(
1971
1897
  // We do not yet have a dynamic call.
1972
1898
  //
1973
1899
  // If we've previously been cancelled, immediately fail any new batches.
1974
- if (GPR_UNLIKELY(calld->cancel_error_ != GRPC_ERROR_NONE)) {
1900
+ if (GPR_UNLIKELY(!calld->cancel_error_.ok())) {
1975
1901
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
1976
1902
  gpr_log(GPR_INFO, "chand=%p calld=%p: failing batch with error: %s",
1977
- chand, calld,
1978
- grpc_error_std_string(calld->cancel_error_).c_str());
1903
+ chand, calld, StatusToString(calld->cancel_error_).c_str());
1979
1904
  }
1980
1905
  // Note: This will release the call combiner.
1981
1906
  grpc_transport_stream_op_batch_finish_with_failure(
1982
- batch, GRPC_ERROR_REF(calld->cancel_error_), calld->call_combiner_);
1907
+ batch, calld->cancel_error_, calld->call_combiner());
1983
1908
  return;
1984
1909
  }
1985
1910
  // Handle cancellation.
@@ -1989,19 +1914,16 @@ void ClientChannel::CallData::StartTransportStreamOpBatch(
1989
1914
  // cancelled before any batches are passed down (e.g., if the deadline
1990
1915
  // is in the past when the call starts), we can return the right
1991
1916
  // error to the caller when the first batch does get passed down.
1992
- GRPC_ERROR_UNREF(calld->cancel_error_);
1993
- calld->cancel_error_ =
1994
- GRPC_ERROR_REF(batch->payload->cancel_stream.cancel_error);
1917
+ calld->cancel_error_ = batch->payload->cancel_stream.cancel_error;
1995
1918
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
1996
1919
  gpr_log(GPR_INFO, "chand=%p calld=%p: recording cancel_error=%s", chand,
1997
- calld, grpc_error_std_string(calld->cancel_error_).c_str());
1920
+ calld, StatusToString(calld->cancel_error_).c_str());
1998
1921
  }
1999
1922
  // Fail all pending batches.
2000
- calld->PendingBatchesFail(elem, GRPC_ERROR_REF(calld->cancel_error_),
2001
- NoYieldCallCombiner);
1923
+ calld->PendingBatchesFail(elem, calld->cancel_error_, NoYieldCallCombiner);
2002
1924
  // Note: This will release the call combiner.
2003
1925
  grpc_transport_stream_op_batch_finish_with_failure(
2004
- batch, GRPC_ERROR_REF(calld->cancel_error_), calld->call_combiner_);
1926
+ batch, calld->cancel_error_, calld->call_combiner());
2005
1927
  return;
2006
1928
  }
2007
1929
  // Add the batch to the pending list.
@@ -2016,7 +1938,7 @@ void ClientChannel::CallData::StartTransportStreamOpBatch(
2016
1938
  "config",
2017
1939
  chand, calld);
2018
1940
  }
2019
- CheckResolution(elem, GRPC_ERROR_NONE);
1941
+ CheckResolution(elem, absl::OkStatus());
2020
1942
  } else {
2021
1943
  // For all other batches, release the call combiner.
2022
1944
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
@@ -2024,7 +1946,7 @@ void ClientChannel::CallData::StartTransportStreamOpBatch(
2024
1946
  "chand=%p calld=%p: saved batch, yielding call combiner", chand,
2025
1947
  calld);
2026
1948
  }
2027
- GRPC_CALL_COMBINER_STOP(calld->call_combiner_,
1949
+ GRPC_CALL_COMBINER_STOP(calld->call_combiner(),
2028
1950
  "batch does not include send_initial_metadata");
2029
1951
  }
2030
1952
  }
@@ -2075,24 +1997,23 @@ void ClientChannel::CallData::FailPendingBatchInCallCombiner(
2075
1997
  static_cast<grpc_transport_stream_op_batch*>(arg);
2076
1998
  CallData* calld = static_cast<CallData*>(batch->handler_private.extra_arg);
2077
1999
  // Note: This will release the call combiner.
2078
- grpc_transport_stream_op_batch_finish_with_failure(
2079
- batch, GRPC_ERROR_REF(error), calld->call_combiner_);
2000
+ grpc_transport_stream_op_batch_finish_with_failure(batch, error,
2001
+ calld->call_combiner());
2080
2002
  }
2081
2003
 
2082
2004
  // This is called via the call combiner, so access to calld is synchronized.
2083
2005
  void ClientChannel::CallData::PendingBatchesFail(
2084
2006
  grpc_call_element* elem, grpc_error_handle error,
2085
2007
  YieldCallCombinerPredicate yield_call_combiner_predicate) {
2086
- GPR_ASSERT(error != GRPC_ERROR_NONE);
2008
+ GPR_ASSERT(!error.ok());
2087
2009
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
2088
2010
  size_t num_batches = 0;
2089
2011
  for (size_t i = 0; i < GPR_ARRAY_SIZE(pending_batches_); ++i) {
2090
2012
  if (pending_batches_[i] != nullptr) ++num_batches;
2091
2013
  }
2092
- gpr_log(GPR_INFO,
2093
- "chand=%p calld=%p: failing %" PRIuPTR " pending batches: %s",
2094
- elem->channel_data, this, num_batches,
2095
- grpc_error_std_string(error).c_str());
2014
+ gpr_log(
2015
+ GPR_INFO, "chand=%p calld=%p: failing %" PRIuPTR " pending batches: %s",
2016
+ elem->channel_data, this, num_batches, StatusToString(error).c_str());
2096
2017
  }
2097
2018
  CallCombinerClosureList closures;
2098
2019
  for (size_t i = 0; i < GPR_ARRAY_SIZE(pending_batches_); ++i) {
@@ -2102,17 +2023,16 @@ void ClientChannel::CallData::PendingBatchesFail(
2102
2023
  GRPC_CLOSURE_INIT(&batch->handler_private.closure,
2103
2024
  FailPendingBatchInCallCombiner, batch,
2104
2025
  grpc_schedule_on_exec_ctx);
2105
- closures.Add(&batch->handler_private.closure, GRPC_ERROR_REF(error),
2026
+ closures.Add(&batch->handler_private.closure, error,
2106
2027
  "PendingBatchesFail");
2107
2028
  batch = nullptr;
2108
2029
  }
2109
2030
  }
2110
2031
  if (yield_call_combiner_predicate(closures)) {
2111
- closures.RunClosures(call_combiner_);
2032
+ closures.RunClosures(call_combiner());
2112
2033
  } else {
2113
- closures.RunClosuresWithoutYielding(call_combiner_);
2034
+ closures.RunClosuresWithoutYielding(call_combiner());
2114
2035
  }
2115
- GRPC_ERROR_UNREF(error);
2116
2036
  }
2117
2037
 
2118
2038
  // This is called via the call combiner, so access to calld is synchronized.
@@ -2148,13 +2068,13 @@ void ClientChannel::CallData::PendingBatchesResume(grpc_call_element* elem) {
2148
2068
  batch->handler_private.extra_arg = elem;
2149
2069
  GRPC_CLOSURE_INIT(&batch->handler_private.closure,
2150
2070
  ResumePendingBatchInCallCombiner, batch, nullptr);
2151
- closures.Add(&batch->handler_private.closure, GRPC_ERROR_NONE,
2071
+ closures.Add(&batch->handler_private.closure, absl::OkStatus(),
2152
2072
  "resuming pending batch from client channel call");
2153
2073
  batch = nullptr;
2154
2074
  }
2155
2075
  }
2156
2076
  // Note: This will release the call combiner.
2157
- closures.RunClosures(call_combiner_);
2077
+ closures.RunClosures(call_combiner());
2158
2078
  }
2159
2079
 
2160
2080
  //
@@ -2167,10 +2087,10 @@ class ClientChannel::CallData::ResolverQueuedCallCanceller {
2167
2087
  public:
2168
2088
  explicit ResolverQueuedCallCanceller(grpc_call_element* elem) : elem_(elem) {
2169
2089
  auto* calld = static_cast<CallData*>(elem->call_data);
2170
- GRPC_CALL_STACK_REF(calld->owning_call_, "ResolverQueuedCallCanceller");
2090
+ GRPC_CALL_STACK_REF(calld->owning_call(), "ResolverQueuedCallCanceller");
2171
2091
  GRPC_CLOSURE_INIT(&closure_, &CancelLocked, this,
2172
2092
  grpc_schedule_on_exec_ctx);
2173
- calld->call_combiner_->SetNotifyOnCancel(&closure_);
2093
+ calld->call_combiner()->SetNotifyOnCancel(&closure_);
2174
2094
  }
2175
2095
 
2176
2096
  private:
@@ -2184,18 +2104,18 @@ class ClientChannel::CallData::ResolverQueuedCallCanceller {
2184
2104
  gpr_log(GPR_INFO,
2185
2105
  "chand=%p calld=%p: cancelling resolver queued pick: "
2186
2106
  "error=%s self=%p calld->resolver_pick_canceller=%p",
2187
- chand, calld, grpc_error_std_string(error).c_str(), self,
2107
+ chand, calld, StatusToString(error).c_str(), self,
2188
2108
  calld->resolver_call_canceller_);
2189
2109
  }
2190
- if (calld->resolver_call_canceller_ == self && error != GRPC_ERROR_NONE) {
2110
+ if (calld->resolver_call_canceller_ == self && !error.ok()) {
2191
2111
  // Remove pick from list of queued picks.
2192
2112
  calld->MaybeRemoveCallFromResolverQueuedCallsLocked(self->elem_);
2193
2113
  // Fail pending batches on the call.
2194
- calld->PendingBatchesFail(self->elem_, GRPC_ERROR_REF(error),
2114
+ calld->PendingBatchesFail(self->elem_, error,
2195
2115
  YieldCallCombinerIfPendingBatchesFound);
2196
2116
  }
2197
2117
  }
2198
- GRPC_CALL_STACK_UNREF(calld->owning_call_, "ResolvingQueuedCallCanceller");
2118
+ GRPC_CALL_STACK_UNREF(calld->owning_call(), "ResolvingQueuedCallCanceller");
2199
2119
  delete self;
2200
2120
  }
2201
2121
 
@@ -2216,6 +2136,12 @@ void ClientChannel::CallData::MaybeRemoveCallFromResolverQueuedCallsLocked(
2216
2136
  queued_pending_resolver_result_ = false;
2217
2137
  // Lame the call combiner canceller.
2218
2138
  resolver_call_canceller_ = nullptr;
2139
+ // Add trace annotation
2140
+ auto* call_tracer =
2141
+ static_cast<CallTracer*>(call_context_[GRPC_CONTEXT_CALL_TRACER].value);
2142
+ if (call_tracer != nullptr) {
2143
+ call_tracer->RecordAnnotation("Delayed name resolution complete.");
2144
+ }
2219
2145
  }
2220
2146
 
2221
2147
  void ClientChannel::CallData::MaybeAddCallToResolverQueuedCallsLocked(
@@ -2243,19 +2169,22 @@ grpc_error_handle ClientChannel::CallData::ApplyServiceConfigToCallLocked(
2243
2169
  ConfigSelector* config_selector = chand->config_selector_.get();
2244
2170
  if (config_selector != nullptr) {
2245
2171
  // Use the ConfigSelector to determine the config for the call.
2246
- ConfigSelector::CallConfig call_config =
2247
- config_selector->GetCallConfig({&path_, initial_metadata, arena_});
2248
- if (call_config.error != GRPC_ERROR_NONE) return call_config.error;
2172
+ auto call_config =
2173
+ config_selector->GetCallConfig({&path_, initial_metadata, arena()});
2174
+ if (!call_config.ok()) {
2175
+ return absl_status_to_grpc_error(MaybeRewriteIllegalStatusCode(
2176
+ call_config.status(), "ConfigSelector"));
2177
+ }
2249
2178
  // Create a ClientChannelServiceConfigCallData for the call. This stores
2250
2179
  // a ref to the ServiceConfig and caches the right set of parsed configs
2251
2180
  // to use for the call. The ClientChannelServiceConfigCallData will store
2252
2181
  // itself in the call context, so that it can be accessed by filters
2253
2182
  // below us in the stack, and it will be cleaned up when the call ends.
2254
2183
  auto* service_config_call_data =
2255
- arena_->New<ClientChannelServiceConfigCallData>(
2256
- std::move(call_config.service_config), call_config.method_configs,
2257
- std::move(call_config.call_attributes),
2258
- call_config.call_dispatch_controller, call_context_);
2184
+ arena()->New<ClientChannelServiceConfigCallData>(
2185
+ std::move(call_config->service_config), call_config->method_configs,
2186
+ std::move(call_config->call_attributes),
2187
+ call_config->call_dispatch_controller, call_context_);
2259
2188
  // Apply our own method params to the call.
2260
2189
  auto* method_params = static_cast<ClientChannelMethodParsedConfig*>(
2261
2190
  service_config_call_data->GetMethodParsedConfig(
@@ -2270,28 +2199,24 @@ grpc_error_handle ClientChannel::CallData::ApplyServiceConfigToCallLocked(
2270
2199
  method_params->timeout();
2271
2200
  if (per_method_deadline < deadline_) {
2272
2201
  deadline_ = per_method_deadline;
2273
- grpc_deadline_state_reset(elem, deadline_);
2202
+ grpc_deadline_state_reset(&deadline_state_, deadline_);
2274
2203
  }
2275
2204
  }
2276
2205
  // If the service config set wait_for_ready and the application
2277
2206
  // did not explicitly set it, use the value from the service config.
2278
- uint32_t* send_initial_metadata_flags =
2279
- &pending_batches_[0]
2280
- ->payload->send_initial_metadata.send_initial_metadata_flags;
2207
+ auto* wait_for_ready =
2208
+ pending_batches_[0]
2209
+ ->payload->send_initial_metadata.send_initial_metadata
2210
+ ->GetOrCreatePointer(WaitForReady());
2281
2211
  if (method_params->wait_for_ready().has_value() &&
2282
- !(*send_initial_metadata_flags &
2283
- GRPC_INITIAL_METADATA_WAIT_FOR_READY_EXPLICITLY_SET)) {
2284
- if (method_params->wait_for_ready().value()) {
2285
- *send_initial_metadata_flags |= GRPC_INITIAL_METADATA_WAIT_FOR_READY;
2286
- } else {
2287
- *send_initial_metadata_flags &= ~GRPC_INITIAL_METADATA_WAIT_FOR_READY;
2288
- }
2212
+ !wait_for_ready->explicitly_set) {
2213
+ wait_for_ready->value = method_params->wait_for_ready().value();
2289
2214
  }
2290
2215
  }
2291
2216
  // Set the dynamic filter stack.
2292
2217
  dynamic_filters_ = chand->dynamic_filters_;
2293
2218
  }
2294
- return GRPC_ERROR_NONE;
2219
+ return absl::OkStatus();
2295
2220
  }
2296
2221
 
2297
2222
  void ClientChannel::CallData::
@@ -2307,7 +2232,7 @@ void ClientChannel::CallData::
2307
2232
  gpr_log(GPR_INFO,
2308
2233
  "chand=%p calld=%p: got recv_trailing_metadata_ready: error=%s "
2309
2234
  "service_config_call_data=%p",
2310
- chand, calld, grpc_error_std_string(error).c_str(),
2235
+ chand, calld, StatusToString(error).c_str(),
2311
2236
  service_config_call_data);
2312
2237
  }
2313
2238
  if (service_config_call_data != nullptr) {
@@ -2315,7 +2240,7 @@ void ClientChannel::CallData::
2315
2240
  }
2316
2241
  // Chain to original callback.
2317
2242
  Closure::Run(DEBUG_LOCATION, calld->original_recv_trailing_metadata_ready_,
2318
- GRPC_ERROR_REF(error));
2243
+ error);
2319
2244
  }
2320
2245
 
2321
2246
  void ClientChannel::CallData::AsyncResolutionDone(grpc_call_element* elem,
@@ -2330,13 +2255,13 @@ void ClientChannel::CallData::ResolutionDone(void* arg,
2330
2255
  grpc_call_element* elem = static_cast<grpc_call_element*>(arg);
2331
2256
  ClientChannel* chand = static_cast<ClientChannel*>(elem->channel_data);
2332
2257
  CallData* calld = static_cast<CallData*>(elem->call_data);
2333
- if (error != GRPC_ERROR_NONE) {
2258
+ if (!error.ok()) {
2334
2259
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
2335
2260
  gpr_log(GPR_INFO,
2336
2261
  "chand=%p calld=%p: error applying config to call: error=%s",
2337
- chand, calld, grpc_error_std_string(error).c_str());
2262
+ chand, calld, StatusToString(error).c_str());
2338
2263
  }
2339
- calld->PendingBatchesFail(elem, GRPC_ERROR_REF(error), YieldCallCombiner);
2264
+ calld->PendingBatchesFail(elem, error, YieldCallCombiner);
2340
2265
  return;
2341
2266
  }
2342
2267
  calld->CreateDynamicCall(elem);
@@ -2354,7 +2279,6 @@ void ClientChannel::CallData::CheckResolution(void* arg,
2354
2279
  }
2355
2280
  if (resolution_complete) {
2356
2281
  ResolutionDone(elem, error);
2357
- GRPC_ERROR_UNREF(error);
2358
2282
  }
2359
2283
  }
2360
2284
 
@@ -2386,23 +2310,21 @@ bool ClientChannel::CallData::CheckResolutionLocked(grpc_call_element* elem,
2386
2310
  DEBUG_LOCATION);
2387
2311
  },
2388
2312
  chand, nullptr),
2389
- GRPC_ERROR_NONE);
2313
+ absl::OkStatus());
2390
2314
  }
2391
2315
  // Get send_initial_metadata batch and flags.
2392
2316
  auto& send_initial_metadata =
2393
2317
  pending_batches_[0]->payload->send_initial_metadata;
2394
2318
  grpc_metadata_batch* initial_metadata_batch =
2395
2319
  send_initial_metadata.send_initial_metadata;
2396
- const uint32_t send_initial_metadata_flags =
2397
- send_initial_metadata.send_initial_metadata_flags;
2398
2320
  // If we don't yet have a resolver result, we need to queue the call
2399
2321
  // until we get one.
2400
2322
  if (GPR_UNLIKELY(!chand->received_service_config_data_)) {
2401
2323
  // If the resolver returned transient failure before returning the
2402
2324
  // first service config, fail any non-wait_for_ready calls.
2403
2325
  absl::Status resolver_error = chand->resolver_transient_failure_error_;
2404
- if (!resolver_error.ok() && (send_initial_metadata_flags &
2405
- GRPC_INITIAL_METADATA_WAIT_FOR_READY) == 0) {
2326
+ if (!resolver_error.ok() &&
2327
+ !initial_metadata_batch->GetOrCreatePointer(WaitForReady())->value) {
2406
2328
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
2407
2329
  gpr_log(GPR_INFO, "chand=%p calld=%p: resolution failed, failing call",
2408
2330
  chand, this);
@@ -2437,10 +2359,10 @@ void ClientChannel::CallData::CreateDynamicCall(grpc_call_element* elem) {
2437
2359
  path_,
2438
2360
  call_start_time_,
2439
2361
  deadline_,
2440
- arena_,
2362
+ arena(),
2441
2363
  call_context_,
2442
- call_combiner_};
2443
- grpc_error_handle error = GRPC_ERROR_NONE;
2364
+ call_combiner()};
2365
+ grpc_error_handle error;
2444
2366
  DynamicFilters* channel_stack = args.channel_stack.get();
2445
2367
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
2446
2368
  gpr_log(
@@ -2449,11 +2371,11 @@ void ClientChannel::CallData::CreateDynamicCall(grpc_call_element* elem) {
2449
2371
  chand, this, channel_stack);
2450
2372
  }
2451
2373
  dynamic_call_ = channel_stack->CreateCall(std::move(args), &error);
2452
- if (error != GRPC_ERROR_NONE) {
2374
+ if (!error.ok()) {
2453
2375
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
2454
2376
  gpr_log(GPR_INFO,
2455
2377
  "chand=%p calld=%p: failed to create dynamic call: error=%s",
2456
- chand, this, grpc_error_std_string(error).c_str());
2378
+ chand, this, StatusToString(error).c_str());
2457
2379
  }
2458
2380
  PendingBatchesFail(elem, error, YieldCallCombiner);
2459
2381
  return;
@@ -2540,25 +2462,16 @@ class ClientChannel::LoadBalancedCall::Metadata
2540
2462
  // ClientChannel::LoadBalancedCall::LbCallState
2541
2463
  //
2542
2464
 
2543
- class ClientChannel::LoadBalancedCall::LbCallState
2544
- : public LoadBalancingPolicy::CallState {
2545
- public:
2546
- explicit LbCallState(LoadBalancedCall* lb_call) : lb_call_(lb_call) {}
2547
-
2548
- void* Alloc(size_t size) override { return lb_call_->arena_->Alloc(size); }
2549
-
2550
- absl::string_view ExperimentalGetCallAttribute(const char* key) override {
2551
- auto* service_config_call_data = static_cast<ServiceConfigCallData*>(
2552
- lb_call_->call_context_[GRPC_CONTEXT_SERVICE_CONFIG_CALL_DATA].value);
2553
- auto& call_attributes = service_config_call_data->call_attributes();
2554
- auto it = call_attributes.find(key);
2555
- if (it == call_attributes.end()) return absl::string_view();
2556
- return it->second;
2557
- }
2558
-
2559
- private:
2560
- LoadBalancedCall* lb_call_;
2561
- };
2465
+ absl::string_view
2466
+ ClientChannel::LoadBalancedCall::LbCallState::GetCallAttribute(
2467
+ UniqueTypeName type) {
2468
+ auto* service_config_call_data = static_cast<ServiceConfigCallData*>(
2469
+ lb_call_->call_context_[GRPC_CONTEXT_SERVICE_CONFIG_CALL_DATA].value);
2470
+ auto& call_attributes = service_config_call_data->call_attributes();
2471
+ auto it = call_attributes.find(type);
2472
+ if (it == call_attributes.end()) return absl::string_view();
2473
+ return it->second;
2474
+ }
2562
2475
 
2563
2476
  //
2564
2477
  // ClientChannel::LoadBalancedCall::BackendMetricAccessor
@@ -2629,7 +2542,7 @@ ClientChannel::LoadBalancedCall::LoadBalancedCall(
2629
2542
  ? "LoadBalancedCall"
2630
2543
  : nullptr),
2631
2544
  chand_(chand),
2632
- path_(grpc_slice_ref_internal(args.path)),
2545
+ path_(CSliceRef(args.path)),
2633
2546
  deadline_(args.deadline),
2634
2547
  arena_(args.arena),
2635
2548
  owning_call_(args.call_stack),
@@ -2646,8 +2559,6 @@ ClientChannel::LoadBalancedCall::LoadBalancedCall(
2646
2559
  }
2647
2560
 
2648
2561
  ClientChannel::LoadBalancedCall::~LoadBalancedCall() {
2649
- GRPC_ERROR_UNREF(cancel_error_);
2650
- GRPC_ERROR_UNREF(failure_error_);
2651
2562
  if (backend_metric_data_ != nullptr) {
2652
2563
  backend_metric_data_->BackendMetricData::~BackendMetricData();
2653
2564
  }
@@ -2657,7 +2568,7 @@ ClientChannel::LoadBalancedCall::~LoadBalancedCall() {
2657
2568
  }
2658
2569
  if (on_call_destruction_complete_ != nullptr) {
2659
2570
  ExecCtx::Run(DEBUG_LOCATION, on_call_destruction_complete_,
2660
- GRPC_ERROR_NONE);
2571
+ absl::OkStatus());
2661
2572
  }
2662
2573
  }
2663
2574
 
@@ -2710,16 +2621,15 @@ void ClientChannel::LoadBalancedCall::FailPendingBatchInCallCombiner(
2710
2621
  static_cast<grpc_transport_stream_op_batch*>(arg);
2711
2622
  auto* self = static_cast<LoadBalancedCall*>(batch->handler_private.extra_arg);
2712
2623
  // Note: This will release the call combiner.
2713
- grpc_transport_stream_op_batch_finish_with_failure(
2714
- batch, GRPC_ERROR_REF(error), self->call_combiner_);
2624
+ grpc_transport_stream_op_batch_finish_with_failure(batch, error,
2625
+ self->call_combiner_);
2715
2626
  }
2716
2627
 
2717
2628
  // This is called via the call combiner, so access to calld is synchronized.
2718
2629
  void ClientChannel::LoadBalancedCall::PendingBatchesFail(
2719
2630
  grpc_error_handle error,
2720
2631
  YieldCallCombinerPredicate yield_call_combiner_predicate) {
2721
- GPR_ASSERT(error != GRPC_ERROR_NONE);
2722
- GRPC_ERROR_UNREF(failure_error_);
2632
+ GPR_ASSERT(!error.ok());
2723
2633
  failure_error_ = error;
2724
2634
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
2725
2635
  size_t num_batches = 0;
@@ -2728,7 +2638,7 @@ void ClientChannel::LoadBalancedCall::PendingBatchesFail(
2728
2638
  }
2729
2639
  gpr_log(GPR_INFO,
2730
2640
  "chand=%p lb_call=%p: failing %" PRIuPTR " pending batches: %s",
2731
- chand_, this, num_batches, grpc_error_std_string(error).c_str());
2641
+ chand_, this, num_batches, StatusToString(error).c_str());
2732
2642
  }
2733
2643
  CallCombinerClosureList closures;
2734
2644
  for (size_t i = 0; i < GPR_ARRAY_SIZE(pending_batches_); ++i) {
@@ -2738,7 +2648,7 @@ void ClientChannel::LoadBalancedCall::PendingBatchesFail(
2738
2648
  GRPC_CLOSURE_INIT(&batch->handler_private.closure,
2739
2649
  FailPendingBatchInCallCombiner, batch,
2740
2650
  grpc_schedule_on_exec_ctx);
2741
- closures.Add(&batch->handler_private.closure, GRPC_ERROR_REF(error),
2651
+ closures.Add(&batch->handler_private.closure, error,
2742
2652
  "PendingBatchesFail");
2743
2653
  batch = nullptr;
2744
2654
  }
@@ -2781,7 +2691,7 @@ void ClientChannel::LoadBalancedCall::PendingBatchesResume() {
2781
2691
  GRPC_CLOSURE_INIT(&batch->handler_private.closure,
2782
2692
  ResumePendingBatchInCallCombiner, batch,
2783
2693
  grpc_schedule_on_exec_ctx);
2784
- closures.Add(&batch->handler_private.closure, GRPC_ERROR_NONE,
2694
+ closures.Add(&batch->handler_private.closure, absl::OkStatus(),
2785
2695
  "resuming pending batch from LB call");
2786
2696
  batch = nullptr;
2787
2697
  }
@@ -2805,12 +2715,11 @@ void ClientChannel::LoadBalancedCall::StartTransportStreamOpBatch(
2805
2715
  // Record send ops in tracer.
2806
2716
  if (batch->cancel_stream) {
2807
2717
  call_attempt_tracer_->RecordCancel(
2808
- GRPC_ERROR_REF(batch->payload->cancel_stream.cancel_error));
2718
+ batch->payload->cancel_stream.cancel_error);
2809
2719
  }
2810
2720
  if (batch->send_initial_metadata) {
2811
2721
  call_attempt_tracer_->RecordSendInitialMetadata(
2812
- batch->payload->send_initial_metadata.send_initial_metadata,
2813
- batch->payload->send_initial_metadata.send_initial_metadata_flags);
2722
+ batch->payload->send_initial_metadata.send_initial_metadata);
2814
2723
  peer_string_ = batch->payload->send_initial_metadata.peer_string;
2815
2724
  original_send_initial_metadata_on_complete_ = batch->on_complete;
2816
2725
  GRPC_CLOSURE_INIT(&send_initial_metadata_on_complete_,
@@ -2874,14 +2783,14 @@ void ClientChannel::LoadBalancedCall::StartTransportStreamOpBatch(
2874
2783
  // We do not yet have a subchannel call.
2875
2784
  //
2876
2785
  // If we've previously been cancelled, immediately fail any new batches.
2877
- if (GPR_UNLIKELY(cancel_error_ != GRPC_ERROR_NONE)) {
2786
+ if (GPR_UNLIKELY(!cancel_error_.ok())) {
2878
2787
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
2879
2788
  gpr_log(GPR_INFO, "chand=%p lb_call=%p: failing batch with error: %s",
2880
- chand_, this, grpc_error_std_string(cancel_error_).c_str());
2789
+ chand_, this, StatusToString(cancel_error_).c_str());
2881
2790
  }
2882
2791
  // Note: This will release the call combiner.
2883
- grpc_transport_stream_op_batch_finish_with_failure(
2884
- batch, GRPC_ERROR_REF(cancel_error_), call_combiner_);
2792
+ grpc_transport_stream_op_batch_finish_with_failure(batch, cancel_error_,
2793
+ call_combiner_);
2885
2794
  return;
2886
2795
  }
2887
2796
  // Handle cancellation.
@@ -2891,17 +2800,16 @@ void ClientChannel::LoadBalancedCall::StartTransportStreamOpBatch(
2891
2800
  // cancelled before any batches are passed down (e.g., if the deadline
2892
2801
  // is in the past when the call starts), we can return the right
2893
2802
  // error to the caller when the first batch does get passed down.
2894
- GRPC_ERROR_UNREF(cancel_error_);
2895
- cancel_error_ = GRPC_ERROR_REF(batch->payload->cancel_stream.cancel_error);
2803
+ cancel_error_ = batch->payload->cancel_stream.cancel_error;
2896
2804
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
2897
2805
  gpr_log(GPR_INFO, "chand=%p lb_call=%p: recording cancel_error=%s",
2898
- chand_, this, grpc_error_std_string(cancel_error_).c_str());
2806
+ chand_, this, StatusToString(cancel_error_).c_str());
2899
2807
  }
2900
2808
  // Fail all pending batches.
2901
- PendingBatchesFail(GRPC_ERROR_REF(cancel_error_), NoYieldCallCombiner);
2809
+ PendingBatchesFail(cancel_error_, NoYieldCallCombiner);
2902
2810
  // Note: This will release the call combiner.
2903
- grpc_transport_stream_op_batch_finish_with_failure(
2904
- batch, GRPC_ERROR_REF(cancel_error_), call_combiner_);
2811
+ grpc_transport_stream_op_batch_finish_with_failure(batch, cancel_error_,
2812
+ call_combiner_);
2905
2813
  return;
2906
2814
  }
2907
2815
  // Add the batch to the pending list.
@@ -2914,7 +2822,7 @@ void ClientChannel::LoadBalancedCall::StartTransportStreamOpBatch(
2914
2822
  "chand=%p lb_call=%p: grabbing data plane mutex to perform pick",
2915
2823
  chand_, this);
2916
2824
  }
2917
- PickSubchannel(this, GRPC_ERROR_NONE);
2825
+ PickSubchannel(this, absl::OkStatus());
2918
2826
  } else {
2919
2827
  // For all other batches, release the call combiner.
2920
2828
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
@@ -2934,13 +2842,12 @@ void ClientChannel::LoadBalancedCall::SendInitialMetadataOnComplete(
2934
2842
  gpr_log(GPR_INFO,
2935
2843
  "chand=%p lb_call=%p: got on_complete for send_initial_metadata: "
2936
2844
  "error=%s",
2937
- self->chand_, self, grpc_error_std_string(error).c_str());
2845
+ self->chand_, self, StatusToString(error).c_str());
2938
2846
  }
2939
2847
  self->call_attempt_tracer_->RecordOnDoneSendInitialMetadata(
2940
2848
  self->peer_string_);
2941
2849
  Closure::Run(DEBUG_LOCATION,
2942
- self->original_send_initial_metadata_on_complete_,
2943
- GRPC_ERROR_REF(error));
2850
+ self->original_send_initial_metadata_on_complete_, error);
2944
2851
  }
2945
2852
 
2946
2853
  void ClientChannel::LoadBalancedCall::RecvInitialMetadataReady(
@@ -2949,15 +2856,15 @@ void ClientChannel::LoadBalancedCall::RecvInitialMetadataReady(
2949
2856
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
2950
2857
  gpr_log(GPR_INFO,
2951
2858
  "chand=%p lb_call=%p: got recv_initial_metadata_ready: error=%s",
2952
- self->chand_, self, grpc_error_std_string(error).c_str());
2859
+ self->chand_, self, StatusToString(error).c_str());
2953
2860
  }
2954
- if (error == GRPC_ERROR_NONE) {
2861
+ if (error.ok()) {
2955
2862
  // recv_initial_metadata_flags is not populated for clients
2956
2863
  self->call_attempt_tracer_->RecordReceivedInitialMetadata(
2957
2864
  self->recv_initial_metadata_, 0 /* recv_initial_metadata_flags */);
2958
2865
  }
2959
2866
  Closure::Run(DEBUG_LOCATION, self->original_recv_initial_metadata_ready_,
2960
- GRPC_ERROR_REF(error));
2867
+ error);
2961
2868
  }
2962
2869
 
2963
2870
  void ClientChannel::LoadBalancedCall::RecvMessageReady(
@@ -2965,13 +2872,12 @@ void ClientChannel::LoadBalancedCall::RecvMessageReady(
2965
2872
  auto* self = static_cast<LoadBalancedCall*>(arg);
2966
2873
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
2967
2874
  gpr_log(GPR_INFO, "chand=%p lb_call=%p: got recv_message_ready: error=%s",
2968
- self->chand_, self, grpc_error_std_string(error).c_str());
2875
+ self->chand_, self, StatusToString(error).c_str());
2969
2876
  }
2970
- if (*self->recv_message_ != nullptr) {
2877
+ if (self->recv_message_->has_value()) {
2971
2878
  self->call_attempt_tracer_->RecordReceivedMessage(**self->recv_message_);
2972
2879
  }
2973
- Closure::Run(DEBUG_LOCATION, self->original_recv_message_ready_,
2974
- GRPC_ERROR_REF(error));
2880
+ Closure::Run(DEBUG_LOCATION, self->original_recv_message_ready_, error);
2975
2881
  }
2976
2882
 
2977
2883
  void ClientChannel::LoadBalancedCall::RecvTrailingMetadataReady(
@@ -2982,16 +2888,16 @@ void ClientChannel::LoadBalancedCall::RecvTrailingMetadataReady(
2982
2888
  "chand=%p lb_call=%p: got recv_trailing_metadata_ready: error=%s "
2983
2889
  "call_attempt_tracer_=%p lb_subchannel_call_tracker_=%p "
2984
2890
  "failure_error_=%s",
2985
- self->chand_, self, grpc_error_std_string(error).c_str(),
2891
+ self->chand_, self, StatusToString(error).c_str(),
2986
2892
  self->call_attempt_tracer_, self->lb_subchannel_call_tracker_.get(),
2987
- grpc_error_std_string(self->failure_error_).c_str());
2893
+ StatusToString(self->failure_error_).c_str());
2988
2894
  }
2989
2895
  // Check if we have a tracer or an LB callback to invoke.
2990
2896
  if (self->call_attempt_tracer_ != nullptr ||
2991
2897
  self->lb_subchannel_call_tracker_ != nullptr) {
2992
2898
  // Get the call's status.
2993
2899
  absl::Status status;
2994
- if (error != GRPC_ERROR_NONE) {
2900
+ if (!error.ok()) {
2995
2901
  // Get status from error.
2996
2902
  grpc_status_code code;
2997
2903
  std::string message;
@@ -3014,11 +2920,9 @@ void ClientChannel::LoadBalancedCall::RecvTrailingMetadataReady(
3014
2920
  self->RecordCallCompletion(status);
3015
2921
  }
3016
2922
  // Chain to original callback.
3017
- if (self->failure_error_ != GRPC_ERROR_NONE) {
2923
+ if (!self->failure_error_.ok()) {
3018
2924
  error = self->failure_error_;
3019
- self->failure_error_ = GRPC_ERROR_NONE;
3020
- } else {
3021
- error = GRPC_ERROR_REF(error);
2925
+ self->failure_error_ = absl::OkStatus();
3022
2926
  }
3023
2927
  Closure::Run(DEBUG_LOCATION, self->original_recv_trailing_metadata_ready_,
3024
2928
  error);
@@ -3036,8 +2940,12 @@ void ClientChannel::LoadBalancedCall::RecordCallCompletion(
3036
2940
  if (lb_subchannel_call_tracker_ != nullptr) {
3037
2941
  Metadata trailing_metadata(recv_trailing_metadata_);
3038
2942
  BackendMetricAccessor backend_metric_accessor(this);
2943
+ const char* peer_string =
2944
+ peer_string_ != nullptr
2945
+ ? reinterpret_cast<char*>(gpr_atm_acq_load(peer_string_))
2946
+ : "";
3039
2947
  LoadBalancingPolicy::SubchannelCallTrackerInterface::FinishArgs args = {
3040
- status, &trailing_metadata, &backend_metric_accessor};
2948
+ peer_string, status, &trailing_metadata, &backend_metric_accessor};
3041
2949
  lb_subchannel_call_tracker_->Finish(args);
3042
2950
  lb_subchannel_call_tracker_.reset();
3043
2951
  }
@@ -3050,18 +2958,18 @@ void ClientChannel::LoadBalancedCall::CreateSubchannelCall() {
3050
2958
  // TODO(roth): When we implement hedging support, we will probably
3051
2959
  // need to use a separate call context for each subchannel call.
3052
2960
  call_context_, call_combiner_};
3053
- grpc_error_handle error = GRPC_ERROR_NONE;
2961
+ grpc_error_handle error;
3054
2962
  subchannel_call_ = SubchannelCall::Create(std::move(call_args), &error);
3055
2963
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
3056
2964
  gpr_log(GPR_INFO,
3057
2965
  "chand=%p lb_call=%p: create subchannel_call=%p: error=%s", chand_,
3058
- this, subchannel_call_.get(), grpc_error_std_string(error).c_str());
2966
+ this, subchannel_call_.get(), StatusToString(error).c_str());
3059
2967
  }
3060
2968
  if (on_call_destruction_complete_ != nullptr) {
3061
2969
  subchannel_call_->SetAfterCallStackDestroy(on_call_destruction_complete_);
3062
2970
  on_call_destruction_complete_ = nullptr;
3063
2971
  }
3064
- if (GPR_UNLIKELY(error != GRPC_ERROR_NONE)) {
2972
+ if (GPR_UNLIKELY(!error.ok())) {
3065
2973
  PendingBatchesFail(error, YieldCallCombiner);
3066
2974
  } else {
3067
2975
  PendingBatchesResume();
@@ -3095,15 +3003,15 @@ class ClientChannel::LoadBalancedCall::LbQueuedCallCanceller {
3095
3003
  gpr_log(GPR_INFO,
3096
3004
  "chand=%p lb_call=%p: cancelling queued pick: "
3097
3005
  "error=%s self=%p calld->pick_canceller=%p",
3098
- chand, lb_call, grpc_error_std_string(error).c_str(), self,
3006
+ chand, lb_call, StatusToString(error).c_str(), self,
3099
3007
  lb_call->lb_call_canceller_);
3100
3008
  }
3101
- if (lb_call->lb_call_canceller_ == self && error != GRPC_ERROR_NONE) {
3009
+ if (lb_call->lb_call_canceller_ == self && !error.ok()) {
3102
3010
  lb_call->call_dispatch_controller_->Commit();
3103
3011
  // Remove pick from list of queued picks.
3104
3012
  lb_call->MaybeRemoveCallFromLbQueuedCallsLocked();
3105
3013
  // Fail pending batches on the call.
3106
- lb_call->PendingBatchesFail(GRPC_ERROR_REF(error),
3014
+ lb_call->PendingBatchesFail(error,
3107
3015
  YieldCallCombinerIfPendingBatchesFound);
3108
3016
  }
3109
3017
  }
@@ -3125,6 +3033,10 @@ void ClientChannel::LoadBalancedCall::MaybeRemoveCallFromLbQueuedCallsLocked() {
3125
3033
  queued_pending_lb_pick_ = false;
3126
3034
  // Lame the call combiner canceller.
3127
3035
  lb_call_canceller_ = nullptr;
3036
+ // Add trace annotation
3037
+ if (call_attempt_tracer_ != nullptr) {
3038
+ call_attempt_tracer_->RecordAnnotation("Delayed LB pick complete.");
3039
+ }
3128
3040
  }
3129
3041
 
3130
3042
  void ClientChannel::LoadBalancedCall::MaybeAddCallToLbQueuedCallsLocked() {
@@ -3149,13 +3061,13 @@ void ClientChannel::LoadBalancedCall::AsyncPickDone(grpc_error_handle error) {
3149
3061
  void ClientChannel::LoadBalancedCall::PickDone(void* arg,
3150
3062
  grpc_error_handle error) {
3151
3063
  auto* self = static_cast<LoadBalancedCall*>(arg);
3152
- if (error != GRPC_ERROR_NONE) {
3064
+ if (!error.ok()) {
3153
3065
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
3154
3066
  gpr_log(GPR_INFO,
3155
3067
  "chand=%p lb_call=%p: failed to pick subchannel: error=%s",
3156
- self->chand_, self, grpc_error_std_string(error).c_str());
3068
+ self->chand_, self, StatusToString(error).c_str());
3157
3069
  }
3158
- self->PendingBatchesFail(GRPC_ERROR_REF(error), YieldCallCombiner);
3070
+ self->PendingBatchesFail(error, YieldCallCombiner);
3159
3071
  return;
3160
3072
  }
3161
3073
  self->call_dispatch_controller_->Commit();
@@ -3172,7 +3084,6 @@ void ClientChannel::LoadBalancedCall::PickSubchannel(void* arg,
3172
3084
  }
3173
3085
  if (pick_complete) {
3174
3086
  PickDone(self, error);
3175
- GRPC_ERROR_UNREF(error);
3176
3087
  }
3177
3088
  }
3178
3089
 
@@ -3185,8 +3096,6 @@ bool ClientChannel::LoadBalancedCall::PickSubchannelLocked(
3185
3096
  pending_batches_[0]->payload->send_initial_metadata;
3186
3097
  grpc_metadata_batch* initial_metadata_batch =
3187
3098
  send_initial_metadata.send_initial_metadata;
3188
- const uint32_t send_initial_metadata_flags =
3189
- send_initial_metadata.send_initial_metadata_flags;
3190
3099
  // Perform LB pick.
3191
3100
  LoadBalancingPolicy::PickArgs pick_args;
3192
3101
  pick_args.path = path_.as_string_view();
@@ -3244,7 +3153,7 @@ bool ClientChannel::LoadBalancedCall::PickSubchannelLocked(
3244
3153
  return false;
3245
3154
  },
3246
3155
  // FailPick
3247
- [this, send_initial_metadata_flags,
3156
+ [this, initial_metadata_batch,
3248
3157
  &error](LoadBalancingPolicy::PickResult::Fail* fail_pick)
3249
3158
  ABSL_EXCLUSIVE_LOCKS_REQUIRED(&ClientChannel::data_plane_mu_) {
3250
3159
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
@@ -3253,13 +3162,10 @@ bool ClientChannel::LoadBalancedCall::PickSubchannelLocked(
3253
3162
  }
3254
3163
  // If wait_for_ready is false, then the error indicates the RPC
3255
3164
  // attempt's final status.
3256
- if ((send_initial_metadata_flags &
3257
- GRPC_INITIAL_METADATA_WAIT_FOR_READY) == 0) {
3258
- grpc_error_handle lb_error =
3259
- absl_status_to_grpc_error(fail_pick->status);
3260
- *error = GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
3261
- "Failed to pick subchannel", &lb_error, 1);
3262
- GRPC_ERROR_UNREF(lb_error);
3165
+ if (!initial_metadata_batch->GetOrCreatePointer(WaitForReady())
3166
+ ->value) {
3167
+ *error = absl_status_to_grpc_error(MaybeRewriteIllegalStatusCode(
3168
+ std::move(fail_pick->status), "LB pick"));
3263
3169
  MaybeRemoveCallFromLbQueuedCallsLocked();
3264
3170
  return true;
3265
3171
  }
@@ -3275,9 +3181,10 @@ bool ClientChannel::LoadBalancedCall::PickSubchannelLocked(
3275
3181
  gpr_log(GPR_INFO, "chand=%p lb_call=%p: LB pick dropped: %s",
3276
3182
  chand_, this, drop_pick->status.ToString().c_str());
3277
3183
  }
3278
- *error =
3279
- grpc_error_set_int(absl_status_to_grpc_error(drop_pick->status),
3280
- GRPC_ERROR_INT_LB_POLICY_DROP, 1);
3184
+ *error = grpc_error_set_int(
3185
+ absl_status_to_grpc_error(MaybeRewriteIllegalStatusCode(
3186
+ std::move(drop_pick->status), "LB drop")),
3187
+ StatusIntProperty::kLbPolicyDrop, 1);
3281
3188
  MaybeRemoveCallFromLbQueuedCallsLocked();
3282
3189
  return true;
3283
3190
  });