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