grpc 1.48.0-x86_64-linux → 1.49.0.pre1-x86_64-linux

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 (721) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +104 -41
  3. data/include/grpc/event_engine/event_engine.h +19 -16
  4. data/include/grpc/impl/codegen/grpc_types.h +3 -8
  5. data/include/grpc/impl/codegen/port_platform.h +0 -8
  6. data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +3 -3
  7. data/src/core/ext/filters/channel_idle/channel_idle_filter.h +2 -2
  8. data/src/core/ext/filters/client_channel/client_channel.cc +117 -200
  9. data/src/core/ext/filters/client_channel/client_channel.h +15 -8
  10. data/src/core/ext/filters/client_channel/client_channel_factory.cc +0 -29
  11. data/src/core/ext/filters/client_channel/client_channel_factory.h +2 -10
  12. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +1 -1
  13. data/src/core/ext/filters/client_channel/config_selector.h +12 -4
  14. data/src/core/ext/filters/client_channel/connector.h +4 -5
  15. data/src/core/ext/filters/client_channel/http_proxy.cc +53 -65
  16. data/src/core/ext/filters/client_channel/http_proxy.h +12 -9
  17. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +14 -12
  18. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +6 -6
  19. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +100 -124
  20. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +12 -3
  21. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +5 -1
  22. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +1 -0
  23. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +1 -2
  24. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.h +1 -1
  25. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +169 -63
  26. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +25 -1
  27. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +15 -19
  28. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +66 -78
  29. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +44 -44
  30. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +6 -5
  31. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +65 -77
  32. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +15 -14
  33. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +19 -14
  34. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +60 -67
  35. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +40 -49
  36. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +81 -97
  37. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +53 -61
  38. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +171 -102
  39. data/src/core/ext/filters/client_channel/proxy_mapper.h +13 -14
  40. data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +19 -16
  41. data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +8 -7
  42. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +4 -8
  43. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +431 -145
  44. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +170 -99
  45. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +20 -7
  46. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +17 -15
  47. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +7 -17
  48. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +11 -0
  49. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +13 -14
  50. data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +3 -4
  51. data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +5 -6
  52. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +4 -13
  53. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +162 -165
  54. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +37 -30
  55. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +7 -10
  56. data/src/core/ext/filters/client_channel/retry_filter.cc +0 -7
  57. data/src/core/ext/filters/client_channel/retry_service_config.cc +30 -19
  58. data/src/core/ext/filters/client_channel/retry_service_config.h +6 -9
  59. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +6 -7
  60. data/src/core/ext/filters/client_channel/subchannel.cc +49 -89
  61. data/src/core/ext/filters/client_channel/subchannel.h +8 -8
  62. data/src/core/ext/filters/client_channel/subchannel_interface_internal.h +1 -1
  63. data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +6 -76
  64. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +16 -25
  65. data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +3 -4
  66. data/src/core/ext/filters/deadline/deadline_filter.cc +6 -6
  67. data/src/core/ext/filters/deadline/deadline_filter.h +2 -3
  68. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +1 -3
  69. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +1 -1
  70. data/src/core/ext/filters/fault_injection/service_config_parser.cc +17 -12
  71. data/src/core/ext/filters/fault_injection/service_config_parser.h +4 -5
  72. data/src/core/ext/filters/http/client/http_client_filter.cc +2 -3
  73. data/src/core/ext/filters/http/client/http_client_filter.h +1 -1
  74. data/src/core/ext/filters/http/client_authority_filter.cc +1 -2
  75. data/src/core/ext/filters/http/client_authority_filter.h +1 -1
  76. data/src/core/ext/filters/http/server/http_server_filter.cc +2 -3
  77. data/src/core/ext/filters/http/server/http_server_filter.h +1 -1
  78. data/src/core/ext/filters/message_size/message_size_filter.cc +13 -7
  79. data/src/core/ext/filters/message_size/message_size_filter.h +3 -6
  80. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +16 -12
  81. data/src/core/ext/filters/rbac/rbac_service_config_parser.h +4 -6
  82. data/src/core/ext/filters/server_config_selector/server_config_selector.h +5 -0
  83. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +3 -5
  84. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +35 -62
  85. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +62 -89
  86. data/src/core/ext/transport/chttp2/server/chttp2_server.h +4 -6
  87. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +130 -165
  88. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +3 -2
  89. data/src/core/ext/transport/chttp2/transport/flow_control.cc +67 -2
  90. data/src/core/ext/transport/chttp2/transport/flow_control.h +1 -0
  91. data/src/core/ext/transport/chttp2/transport/hpack_constants.h +7 -1
  92. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +25 -8
  93. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +4 -0
  94. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +0 -1
  95. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +8 -2
  96. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +2 -10
  97. data/src/core/ext/transport/chttp2/transport/internal.h +2 -1
  98. data/src/core/ext/transport/inproc/inproc_transport.cc +40 -74
  99. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.c +5 -5
  100. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.h +30 -10
  101. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.c +4 -4
  102. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.h +24 -8
  103. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +8 -327
  104. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +83 -1723
  105. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.c +352 -0
  106. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.h +1768 -0
  107. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.c +2 -2
  108. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.h +12 -4
  109. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.c +6 -4
  110. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.h +33 -4
  111. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.c +1 -1
  112. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.h +6 -2
  113. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.c +1 -1
  114. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.h +6 -2
  115. data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.h +6 -2
  116. data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.h +12 -4
  117. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.c +1 -1
  118. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.h +6 -2
  119. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +1 -1
  120. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +7 -3
  121. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +14 -14
  122. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +90 -30
  123. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +21 -19
  124. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +124 -34
  125. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +3 -3
  126. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +18 -6
  127. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +23 -22
  128. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +153 -48
  129. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +1 -1
  130. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +6 -2
  131. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +1 -1
  132. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +6 -2
  133. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.c +11 -11
  134. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.h +84 -28
  135. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +7 -7
  136. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +42 -14
  137. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +1 -1
  138. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +6 -2
  139. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +25 -23
  140. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +156 -48
  141. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +7 -7
  142. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +42 -14
  143. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +1 -1
  144. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +6 -2
  145. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +1 -1
  146. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +6 -2
  147. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.c +2 -2
  148. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.h +12 -4
  149. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +12 -12
  150. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +78 -26
  151. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +9 -9
  152. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +54 -18
  153. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +1 -1
  154. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +6 -2
  155. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +21 -20
  156. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +117 -44
  157. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +1 -1
  158. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +6 -2
  159. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.c +2 -2
  160. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.h +12 -4
  161. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +6 -2
  162. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +1 -1
  163. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +6 -2
  164. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.c +1 -1
  165. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.h +6 -2
  166. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +3 -3
  167. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +18 -6
  168. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +5 -5
  169. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +36 -12
  170. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +3 -3
  171. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +30 -10
  172. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +1 -1
  173. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +6 -2
  174. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +37 -13
  175. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +170 -15
  176. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +5 -5
  177. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +42 -14
  178. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +1 -1
  179. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +6 -2
  180. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +7 -4
  181. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +36 -4
  182. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.c +1 -1
  183. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.h +6 -2
  184. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +6 -6
  185. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +48 -16
  186. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +8 -8
  187. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +54 -18
  188. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +21 -9
  189. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +100 -14
  190. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +7 -22
  191. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +36 -77
  192. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +121 -76
  193. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +647 -163
  194. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +3 -3
  195. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +18 -6
  196. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.c +34 -15
  197. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.h +161 -22
  198. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.c +1 -1
  199. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.h +6 -2
  200. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.c +1 -1
  201. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.h +6 -2
  202. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +2 -2
  203. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +12 -4
  204. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.c +1 -1
  205. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.h +6 -2
  206. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.c +1 -1
  207. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.h +6 -2
  208. data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.c +46 -0
  209. data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.h +98 -0
  210. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.c +1 -1
  211. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.h +6 -2
  212. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.c +2 -2
  213. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.h +12 -4
  214. data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.c +1 -0
  215. data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.h +1 -0
  216. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.c +2 -2
  217. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.h +12 -4
  218. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.c +1 -1
  219. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.h +6 -2
  220. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +1 -1
  221. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +6 -2
  222. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +2 -2
  223. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +30 -10
  224. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +2 -2
  225. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +18 -6
  226. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.c +11 -4
  227. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +58 -4
  228. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +1 -1
  229. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +6 -2
  230. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +35 -27
  231. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +177 -52
  232. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h +6 -2
  233. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.c +1 -1
  234. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.h +6 -2
  235. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +10 -8
  236. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +66 -14
  237. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +3 -3
  238. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +18 -6
  239. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +5 -5
  240. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +42 -14
  241. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.c +2 -2
  242. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.h +12 -4
  243. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +1 -1
  244. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +6 -2
  245. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +131 -16
  246. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +632 -12
  247. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +2 -2
  248. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +12 -4
  249. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +5 -5
  250. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +30 -10
  251. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.c +1 -1
  252. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.h +6 -2
  253. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.c +4 -4
  254. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.h +24 -8
  255. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.c +4 -4
  256. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.h +24 -8
  257. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +2 -2
  258. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +12 -4
  259. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +1 -1
  260. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +6 -2
  261. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +1 -1
  262. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +6 -2
  263. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +1 -1
  264. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +6 -2
  265. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +3 -3
  266. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +18 -6
  267. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +1 -1
  268. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +12 -4
  269. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +2 -2
  270. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +12 -4
  271. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +3 -3
  272. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +18 -6
  273. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +7 -7
  274. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +42 -14
  275. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +5 -5
  276. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +30 -10
  277. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.c +3 -3
  278. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.h +18 -6
  279. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.c +1 -1
  280. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.h +6 -2
  281. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +12 -4
  282. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +2 -2
  283. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +18 -6
  284. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_strategy.upb.c +63 -0
  285. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_strategy.upb.h +202 -0
  286. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +1 -1
  287. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +6 -2
  288. data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.h +6 -2
  289. data/src/core/ext/upb-generated/google/api/annotations.upb.h +1 -1
  290. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +11 -11
  291. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +66 -22
  292. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +9 -9
  293. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +72 -24
  294. data/src/core/ext/upb-generated/google/api/http.upb.c +3 -3
  295. data/src/core/ext/upb-generated/google/api/http.upb.h +18 -6
  296. data/src/core/ext/upb-generated/google/api/httpbody.upb.c +1 -1
  297. data/src/core/ext/upb-generated/google/api/httpbody.upb.h +6 -2
  298. data/src/core/ext/upb-generated/google/protobuf/any.upb.c +1 -1
  299. data/src/core/ext/upb-generated/google/protobuf/any.upb.h +6 -2
  300. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +44 -43
  301. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +177 -55
  302. data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +1 -1
  303. data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +6 -2
  304. data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +1 -1
  305. data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +6 -2
  306. data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +2 -2
  307. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +18 -6
  308. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +1 -1
  309. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +6 -2
  310. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +6 -6
  311. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +54 -18
  312. data/src/core/ext/upb-generated/google/rpc/status.upb.c +1 -1
  313. data/src/core/ext/upb-generated/google/rpc/status.upb.h +6 -2
  314. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.c +2 -2
  315. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.h +24 -8
  316. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +6 -2
  317. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +7 -7
  318. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +60 -20
  319. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +1 -1
  320. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +12 -4
  321. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +2 -2
  322. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +12 -4
  323. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +6 -6
  324. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +54 -18
  325. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +2 -2
  326. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +12 -4
  327. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.c +7 -7
  328. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.h +42 -14
  329. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +3 -3
  330. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +23 -11
  331. data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +1 -1
  332. data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +7 -3
  333. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +7 -3
  334. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +1 -1
  335. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +7 -3
  336. data/src/core/ext/upb-generated/validate/validate.upb.c +22 -22
  337. data/src/core/ext/upb-generated/validate/validate.upb.h +139 -47
  338. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.c +3 -3
  339. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.h +23 -11
  340. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.c +1 -1
  341. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.h +7 -3
  342. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +3 -3
  343. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +27 -11
  344. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.c +1 -1
  345. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.h +7 -3
  346. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +1 -1
  347. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +6 -2
  348. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +2 -2
  349. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +12 -4
  350. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +1 -1
  351. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +6 -2
  352. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.c +1 -1
  353. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.h +6 -2
  354. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +1 -1
  355. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +6 -2
  356. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +1 -1
  357. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +12 -4
  358. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +1 -1
  359. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +6 -2
  360. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +6 -2
  361. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.c +1 -1
  362. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.h +6 -2
  363. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.c +6 -6
  364. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.h +54 -18
  365. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.c +2 -2
  366. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.h +12 -4
  367. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.c +1 -1
  368. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.h +12 -4
  369. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.c +1 -1
  370. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +6 -2
  371. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.c +67 -274
  372. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.h +0 -85
  373. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.c +256 -0
  374. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.h +115 -0
  375. data/src/core/ext/upbdefs-generated/envoy/admin/v3/listeners.upbdefs.c +14 -11
  376. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +107 -107
  377. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +191 -187
  378. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +156 -154
  379. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +186 -183
  380. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +136 -134
  381. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +16 -16
  382. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +162 -139
  383. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.h +5 -0
  384. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +39 -31
  385. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.c +12 -8
  386. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.h +5 -0
  387. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +72 -75
  388. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.h +0 -5
  389. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +713 -670
  390. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +10 -0
  391. data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.c +150 -139
  392. data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.h +5 -0
  393. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.c +47 -0
  394. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.h +35 -0
  395. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/trace.upbdefs.c +16 -12
  396. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.c +46 -25
  397. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +477 -466
  398. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +21 -18
  399. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +153 -84
  400. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.h +35 -0
  401. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +113 -113
  402. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +29 -28
  403. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_strategy.upbdefs.c +69 -0
  404. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_strategy.upbdefs.h +40 -0
  405. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +92 -90
  406. data/src/core/ext/xds/upb_utils.h +0 -21
  407. data/src/core/ext/xds/xds_api.cc +53 -86
  408. data/src/core/ext/xds/xds_api.h +19 -28
  409. data/src/core/ext/xds/xds_bootstrap.cc +39 -52
  410. data/src/core/ext/xds/xds_bootstrap.h +28 -8
  411. data/src/core/ext/xds/xds_certificate_provider.h +9 -0
  412. data/src/core/ext/xds/xds_channel_stack_modifier.cc +6 -4
  413. data/src/core/ext/xds/xds_channel_stack_modifier.h +8 -0
  414. data/src/core/ext/xds/xds_client.cc +555 -1214
  415. data/src/core/ext/xds/xds_client.h +16 -44
  416. data/src/core/ext/xds/xds_client_grpc.cc +291 -0
  417. data/src/core/ext/xds/xds_client_grpc.h +102 -0
  418. data/src/core/ext/xds/xds_cluster.cc +92 -103
  419. data/src/core/ext/xds/xds_cluster.h +6 -5
  420. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +10 -14
  421. data/src/core/ext/xds/xds_cluster_specifier_plugin.h +1 -0
  422. data/src/core/ext/xds/xds_common_types.cc +134 -110
  423. data/src/core/ext/xds/xds_common_types.h +6 -7
  424. data/src/core/ext/xds/xds_endpoint.cc +80 -80
  425. data/src/core/ext/xds/xds_endpoint.h +4 -4
  426. data/src/core/ext/xds/xds_http_fault_filter.cc +4 -11
  427. data/src/core/ext/xds/xds_http_fault_filter.h +3 -3
  428. data/src/core/ext/xds/xds_http_filters.h +3 -3
  429. data/src/core/ext/xds/xds_http_rbac_filter.cc +39 -58
  430. data/src/core/ext/xds/xds_http_rbac_filter.h +3 -3
  431. data/src/core/ext/xds/xds_lb_policy_registry.cc +17 -20
  432. data/src/core/ext/xds/xds_lb_policy_registry.h +4 -4
  433. data/src/core/ext/xds/xds_listener.cc +329 -299
  434. data/src/core/ext/xds/xds_listener.h +4 -4
  435. data/src/core/ext/xds/xds_resource_type.h +13 -2
  436. data/src/core/ext/xds/xds_route_config.cc +180 -177
  437. data/src/core/ext/xds/xds_route_config.h +31 -17
  438. data/src/core/ext/xds/xds_routing.cc +3 -6
  439. data/src/core/ext/xds/xds_routing.h +7 -9
  440. data/src/core/ext/xds/xds_server_config_fetcher.cc +76 -81
  441. data/src/core/ext/xds/xds_transport.h +86 -0
  442. data/src/core/ext/xds/xds_transport_grpc.cc +349 -0
  443. data/src/core/ext/xds/xds_transport_grpc.h +135 -0
  444. data/src/core/lib/address_utils/parse_address.cc +19 -17
  445. data/src/core/lib/address_utils/parse_address.h +8 -5
  446. data/src/core/lib/avl/avl.h +47 -25
  447. data/src/core/lib/channel/call_tracer.h +1 -1
  448. data/src/core/lib/channel/channel_args.cc +88 -19
  449. data/src/core/lib/channel/channel_args.h +113 -62
  450. data/src/core/lib/channel/channel_stack.cc +0 -1
  451. data/src/core/lib/channel/channel_stack_builder.cc +3 -3
  452. data/src/core/lib/channel/channel_stack_builder.h +2 -2
  453. data/src/core/lib/channel/channel_stack_builder_impl.cc +2 -4
  454. data/src/core/lib/channel/channelz.cc +27 -37
  455. data/src/core/lib/channel/channelz.h +9 -0
  456. data/src/core/lib/channel/promise_based_filter.h +0 -1
  457. data/src/core/lib/config/core_configuration.h +48 -35
  458. data/src/core/lib/debug/stats.cc +12 -15
  459. data/src/core/lib/debug/stats.h +11 -3
  460. data/src/core/lib/event_engine/{event_engine.cc → default_event_engine.cc} +9 -5
  461. data/src/core/lib/event_engine/{event_engine_factory.h → default_event_engine.h} +4 -8
  462. data/src/core/lib/event_engine/default_event_engine_factory.cc +20 -3
  463. data/src/core/lib/event_engine/default_event_engine_factory.h +33 -0
  464. data/src/core/lib/event_engine/executor/executor.h +38 -0
  465. data/src/core/lib/event_engine/executor/threaded_executor.cc +36 -0
  466. data/src/core/lib/event_engine/executor/threaded_executor.h +44 -0
  467. data/src/core/lib/event_engine/forkable.cc +98 -0
  468. data/src/core/lib/event_engine/forkable.h +61 -0
  469. data/src/core/lib/event_engine/poller.h +54 -0
  470. data/src/core/lib/event_engine/{iomgr_engine/iomgr_engine.cc → posix_engine/posix_engine.cc} +30 -47
  471. data/src/core/lib/event_engine/{iomgr_engine/iomgr_engine.h → posix_engine/posix_engine.h} +27 -28
  472. data/src/core/lib/event_engine/{iomgr_engine → posix_engine}/timer.cc +4 -5
  473. data/src/core/lib/event_engine/{iomgr_engine → posix_engine}/timer.h +8 -8
  474. data/src/core/lib/event_engine/{iomgr_engine → posix_engine}/timer_heap.cc +4 -4
  475. data/src/core/lib/event_engine/{iomgr_engine → posix_engine}/timer_heap.h +5 -5
  476. data/src/core/lib/event_engine/{iomgr_engine → posix_engine}/timer_manager.cc +46 -10
  477. data/src/core/lib/event_engine/{iomgr_engine → posix_engine}/timer_manager.h +17 -8
  478. data/src/core/lib/event_engine/promise.h +11 -2
  479. data/src/core/lib/event_engine/socket_notifier.h +55 -0
  480. data/src/core/lib/event_engine/{iomgr_engine/thread_pool.cc → thread_pool.cc} +49 -14
  481. data/src/core/lib/event_engine/{iomgr_engine/thread_pool.h → thread_pool.h} +21 -10
  482. data/src/core/lib/event_engine/utils.cc +49 -0
  483. data/src/core/lib/event_engine/utils.h +40 -0
  484. data/src/core/lib/event_engine/windows/iocp.cc +149 -0
  485. data/src/core/lib/event_engine/windows/iocp.h +68 -0
  486. data/src/core/lib/event_engine/windows/win_socket.cc +196 -0
  487. data/src/core/lib/event_engine/windows/win_socket.h +120 -0
  488. data/src/core/lib/event_engine/windows/windows_engine.cc +159 -0
  489. data/src/core/lib/event_engine/windows/windows_engine.h +120 -0
  490. data/src/core/lib/gpr/time.cc +11 -9
  491. data/src/core/lib/gpr/useful.h +29 -0
  492. data/src/core/lib/gprpp/bitset.h +3 -13
  493. data/src/core/lib/gprpp/debug_location.h +39 -7
  494. data/src/core/lib/gprpp/manual_constructor.h +0 -1
  495. data/src/core/lib/gprpp/no_destruct.h +94 -0
  496. data/src/core/lib/gprpp/ref_counted_ptr.h +0 -1
  497. data/src/core/lib/gprpp/status_helper.cc +1 -0
  498. data/src/core/lib/gprpp/table.h +0 -1
  499. data/src/core/lib/{event_engine/iomgr_engine → gprpp}/time_averaged_stats.cc +3 -5
  500. data/src/core/lib/{event_engine/iomgr_engine → gprpp}/time_averaged_stats.h +5 -7
  501. data/src/core/lib/{iomgr → gprpp}/work_serializer.cc +34 -18
  502. data/src/core/lib/{iomgr → gprpp}/work_serializer.h +21 -27
  503. data/src/core/lib/http/httpcli.cc +12 -24
  504. data/src/core/lib/http/httpcli_security_connector.cc +11 -11
  505. data/src/core/lib/iomgr/call_combiner.cc +0 -26
  506. data/src/core/lib/iomgr/closure.h +0 -9
  507. data/src/core/lib/iomgr/combiner.cc +0 -20
  508. data/src/core/lib/iomgr/endpoint_pair_posix.cc +2 -1
  509. data/src/core/lib/iomgr/error.cc +0 -773
  510. data/src/core/lib/iomgr/error.h +0 -145
  511. data/src/core/lib/iomgr/error_cfstream.cc +0 -5
  512. data/src/core/lib/iomgr/ev_poll_posix.cc +17 -9
  513. data/src/core/lib/iomgr/exec_ctx.cc +0 -12
  514. data/src/core/lib/iomgr/executor.cc +0 -10
  515. data/src/core/lib/iomgr/executor.h +0 -3
  516. data/src/core/lib/iomgr/lockfree_event.cc +0 -17
  517. data/src/core/lib/iomgr/port.h +3 -0
  518. data/src/core/lib/iomgr/resolve_address.h +29 -6
  519. data/src/core/lib/iomgr/resolve_address_posix.cc +38 -8
  520. data/src/core/lib/iomgr/resolve_address_posix.h +19 -5
  521. data/src/core/lib/iomgr/resolve_address_windows.cc +40 -10
  522. data/src/core/lib/iomgr/resolve_address_windows.h +19 -5
  523. data/src/core/lib/iomgr/socket_windows.h +0 -2
  524. data/src/core/lib/iomgr/tcp_posix.cc +118 -6
  525. data/src/core/lib/iomgr/timer_generic.cc +6 -8
  526. data/src/core/lib/json/json.h +19 -22
  527. data/src/core/lib/json/json_args.h +34 -0
  528. data/src/core/lib/json/json_object_loader.cc +233 -0
  529. data/src/core/lib/json/json_object_loader.h +618 -0
  530. data/src/core/lib/json/json_reader.cc +86 -62
  531. data/src/core/lib/json/json_util.cc +8 -36
  532. data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy.cc +3 -44
  533. data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy.h +15 -24
  534. data/src/core/lib/load_balancing/lb_policy_factory.h +49 -0
  535. data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy_registry.cc +49 -72
  536. data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy_registry.h +27 -27
  537. data/src/core/{ext/filters/client_channel → lib/load_balancing}/subchannel_interface.h +6 -6
  538. data/src/core/lib/promise/activity.h +56 -8
  539. data/src/core/lib/promise/arena_promise.h +84 -81
  540. data/src/core/lib/promise/context.h +0 -1
  541. data/src/core/lib/promise/detail/basic_seq.h +43 -23
  542. data/src/core/lib/promise/detail/promise_factory.h +0 -1
  543. data/src/core/lib/promise/map.h +0 -1
  544. data/src/core/lib/promise/seq.h +25 -4
  545. data/src/core/lib/promise/sleep.cc +38 -42
  546. data/src/core/lib/promise/sleep.h +27 -24
  547. data/src/core/lib/promise/try_seq.h +26 -6
  548. data/src/core/lib/resolver/resolver.cc +0 -47
  549. data/src/core/lib/resolver/resolver.h +2 -12
  550. data/src/core/lib/resolver/resolver_factory.h +2 -3
  551. data/src/core/lib/resolver/resolver_registry.cc +1 -1
  552. data/src/core/lib/resolver/resolver_registry.h +2 -3
  553. data/src/core/lib/resolver/server_address.cc +11 -15
  554. data/src/core/lib/resolver/server_address.h +4 -8
  555. data/src/core/lib/resource_quota/api.cc +1 -1
  556. data/src/core/lib/resource_quota/arena.cc +21 -1
  557. data/src/core/lib/resource_quota/arena.h +24 -2
  558. data/src/core/lib/resource_quota/memory_quota.cc +157 -17
  559. data/src/core/lib/resource_quota/memory_quota.h +98 -17
  560. data/src/core/lib/resource_quota/periodic_update.cc +79 -0
  561. data/src/core/lib/resource_quota/periodic_update.h +71 -0
  562. data/src/core/lib/security/authorization/evaluate_args.cc +10 -7
  563. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +1 -2
  564. data/src/core/lib/security/authorization/grpc_server_authz_filter.h +1 -1
  565. data/src/core/lib/security/authorization/matchers.cc +13 -10
  566. data/src/core/lib/security/authorization/rbac_policy.cc +0 -1
  567. data/src/core/lib/security/credentials/alts/alts_credentials.cc +2 -3
  568. data/src/core/lib/security/credentials/alts/alts_credentials.h +3 -4
  569. data/src/core/lib/security/credentials/composite/composite_credentials.cc +3 -7
  570. data/src/core/lib/security/credentials/composite/composite_credentials.h +2 -4
  571. data/src/core/lib/security/credentials/credentials.h +16 -12
  572. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +18 -11
  573. data/src/core/lib/security/credentials/external/external_account_credentials.cc +32 -23
  574. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +5 -6
  575. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +4 -6
  576. data/src/core/lib/security/credentials/fake/fake_credentials.cc +3 -12
  577. data/src/core/lib/security/credentials/fake/fake_credentials.h +0 -4
  578. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +29 -26
  579. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +1 -3
  580. data/src/core/lib/security/credentials/iam/iam_credentials.cc +0 -1
  581. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +3 -3
  582. data/src/core/lib/security/credentials/insecure/insecure_credentials.h +3 -4
  583. data/src/core/lib/security/credentials/jwt/json_token.cc +12 -3
  584. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +4 -8
  585. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +11 -13
  586. data/src/core/lib/security/credentials/local/local_credentials.cc +3 -4
  587. data/src/core/lib/security/credentials/local/local_credentials.h +3 -4
  588. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +17 -18
  589. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +0 -1
  590. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +13 -21
  591. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +3 -4
  592. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +6 -0
  593. data/src/core/lib/security/credentials/tls/tls_credentials.cc +13 -25
  594. data/src/core/lib/security/credentials/tls/tls_credentials.h +3 -4
  595. data/src/core/lib/security/credentials/xds/xds_credentials.cc +13 -30
  596. data/src/core/lib/security/credentials/xds/xds_credentials.h +3 -3
  597. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +10 -18
  598. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +26 -38
  599. data/src/core/lib/security/security_connector/fake/fake_security_connector.h +2 -2
  600. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +5 -5
  601. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +6 -5
  602. data/src/core/lib/security/security_connector/local/local_security_connector.cc +13 -11
  603. data/src/core/lib/security/security_connector/local/local_security_connector.h +2 -2
  604. data/src/core/lib/security/security_connector/security_connector.h +5 -3
  605. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +5 -4
  606. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +5 -5
  607. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +5 -5
  608. data/src/core/lib/security/transport/auth_filters.h +1 -1
  609. data/src/core/lib/security/transport/client_auth_filter.cc +3 -4
  610. data/src/core/lib/security/transport/security_handshaker.cc +32 -44
  611. data/src/core/lib/security/transport/security_handshaker.h +2 -1
  612. data/src/core/lib/service_config/service_config.h +11 -0
  613. data/src/core/lib/service_config/service_config_impl.cc +98 -97
  614. data/src/core/lib/service_config/service_config_impl.h +11 -13
  615. data/src/core/lib/service_config/service_config_parser.cc +26 -27
  616. data/src/core/lib/service_config/service_config_parser.h +10 -22
  617. data/src/core/lib/slice/percent_encoding.cc +4 -13
  618. data/src/core/lib/slice/slice.cc +10 -4
  619. data/src/core/lib/surface/call.cc +8 -2
  620. data/src/core/lib/surface/channel.cc +6 -6
  621. data/src/core/lib/surface/channel.h +1 -1
  622. data/src/core/lib/surface/completion_queue.cc +0 -2
  623. data/src/core/lib/surface/completion_queue.h +0 -3
  624. data/src/core/lib/surface/init.cc +2 -6
  625. data/src/core/lib/surface/lame_client.cc +2 -3
  626. data/src/core/lib/surface/lame_client.h +1 -1
  627. data/src/core/lib/surface/server.cc +7 -12
  628. data/src/core/lib/surface/server.h +7 -7
  629. data/src/core/lib/surface/validate_metadata.cc +4 -14
  630. data/src/core/lib/surface/version.cc +2 -2
  631. data/src/core/lib/transport/connectivity_state.cc +0 -1
  632. data/src/core/lib/transport/connectivity_state.h +1 -1
  633. data/src/core/lib/transport/error_utils.cc +0 -36
  634. data/src/core/lib/transport/handshaker.cc +7 -9
  635. data/src/core/lib/transport/handshaker.h +4 -5
  636. data/src/core/lib/transport/handshaker_factory.h +2 -3
  637. data/src/core/lib/transport/handshaker_registry.cc +2 -1
  638. data/src/core/lib/transport/handshaker_registry.h +2 -4
  639. data/src/core/lib/transport/http_connect_handshaker.cc +16 -16
  640. data/src/core/lib/transport/metadata_batch.cc +5 -0
  641. data/src/core/lib/transport/metadata_batch.h +52 -7
  642. data/src/core/lib/transport/parsed_metadata.h +0 -1
  643. data/src/core/lib/transport/tcp_connect_handshaker.cc +12 -18
  644. data/src/core/lib/transport/transport.h +0 -7
  645. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +40 -21
  646. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +1 -1
  647. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +14 -7
  648. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +1 -1
  649. data/src/core/tsi/fake_transport_security.cc +53 -30
  650. data/src/core/tsi/local_transport_security.cc +9 -5
  651. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +10 -1
  652. data/src/core/tsi/ssl_transport_security.cc +47 -23
  653. data/src/core/tsi/transport_security.cc +18 -6
  654. data/src/core/tsi/transport_security.h +2 -1
  655. data/src/core/tsi/transport_security_interface.h +17 -5
  656. data/src/ruby/ext/grpc/extconf.rb +2 -0
  657. data/src/ruby/ext/grpc/rb_loader.c +6 -2
  658. data/src/ruby/lib/grpc/2.5/grpc_c.so +0 -0
  659. data/src/ruby/lib/grpc/2.6/grpc_c.so +0 -0
  660. data/src/ruby/lib/grpc/2.7/grpc_c.so +0 -0
  661. data/src/ruby/lib/grpc/3.0/grpc_c.so +0 -0
  662. data/src/ruby/lib/grpc/3.1/grpc_c.so +0 -0
  663. data/src/ruby/lib/grpc/grpc_c.so +0 -0
  664. data/src/ruby/lib/grpc/version.rb +1 -1
  665. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +4 -0
  666. data/third_party/abseil-cpp/absl/functional/any_invocable.h +313 -0
  667. data/third_party/abseil-cpp/absl/functional/internal/any_invocable.h +857 -0
  668. data/third_party/upb/third_party/utf8_range/utf8_range.h +1 -1
  669. data/third_party/upb/upb/arena.c +277 -0
  670. data/third_party/upb/upb/arena.h +225 -0
  671. data/third_party/upb/upb/array.c +114 -0
  672. data/third_party/upb/upb/array.h +83 -0
  673. data/third_party/upb/upb/collections.h +36 -0
  674. data/third_party/upb/upb/decode.c +161 -65
  675. data/third_party/upb/upb/decode.h +1 -0
  676. data/third_party/upb/upb/decode_fast.c +1 -1
  677. data/third_party/upb/upb/def.c +10 -2
  678. data/third_party/upb/upb/def.h +8 -1
  679. data/third_party/upb/upb/def.hpp +7 -4
  680. data/third_party/upb/upb/encode.c +29 -20
  681. data/third_party/upb/upb/encode.h +16 -6
  682. data/third_party/upb/upb/extension_registry.c +93 -0
  683. data/third_party/upb/upb/extension_registry.h +84 -0
  684. data/third_party/upb/upb/{decode_internal.h → internal/decode.h} +5 -5
  685. data/third_party/upb/upb/internal/table.h +385 -0
  686. data/third_party/upb/upb/{upb_internal.h → internal/upb.h} +3 -3
  687. data/third_party/upb/upb/internal/vsnprintf_compat.h +52 -0
  688. data/third_party/upb/upb/json_decode.c +1512 -0
  689. data/third_party/upb/upb/json_decode.h +47 -0
  690. data/third_party/upb/upb/json_encode.c +7 -3
  691. data/third_party/upb/upb/json_encode.h +6 -3
  692. data/third_party/upb/upb/map.c +108 -0
  693. data/third_party/upb/upb/map.h +117 -0
  694. data/third_party/upb/upb/message_value.h +66 -0
  695. data/third_party/upb/upb/mini_table.c +1147 -0
  696. data/third_party/upb/upb/mini_table.h +189 -0
  697. data/third_party/upb/upb/mini_table.hpp +112 -0
  698. data/third_party/upb/upb/msg.c +2 -62
  699. data/third_party/upb/upb/msg.h +2 -45
  700. data/third_party/upb/upb/msg_internal.h +28 -22
  701. data/third_party/upb/upb/port_def.inc +2 -1
  702. data/third_party/upb/upb/port_undef.inc +1 -0
  703. data/third_party/upb/upb/reflection.c +2 -159
  704. data/third_party/upb/upb/reflection.h +2 -112
  705. data/third_party/upb/upb/status.c +86 -0
  706. data/third_party/upb/upb/status.h +66 -0
  707. data/third_party/upb/upb/table.c +2 -2
  708. data/third_party/upb/upb/table_internal.h +3 -352
  709. data/third_party/upb/upb/text_encode.c +3 -2
  710. data/third_party/upb/upb/upb.c +4 -290
  711. data/third_party/upb/upb/upb.h +7 -196
  712. metadata +90 -38
  713. data/src/core/ext/filters/client_channel/lb_policy_factory.h +0 -50
  714. data/src/core/lib/iomgr/error_internal.h +0 -66
  715. data/src/core/lib/iomgr/executor/mpmcqueue.cc +0 -182
  716. data/src/core/lib/iomgr/executor/mpmcqueue.h +0 -171
  717. data/src/core/lib/iomgr/executor/threadpool.cc +0 -136
  718. data/src/core/lib/iomgr/executor/threadpool.h +0 -150
  719. data/src/core/lib/iomgr/time_averaged_stats.cc +0 -64
  720. data/src/core/lib/iomgr/time_averaged_stats.h +0 -72
  721. data/src/core/lib/promise/detail/switch.h +0 -1455
@@ -24,12 +24,11 @@
24
24
  #include <stdint.h>
25
25
  #include <string.h>
26
26
 
27
- #include <limits>
27
+ #include <algorithm>
28
28
  #include <memory>
29
29
  #include <string>
30
30
 
31
31
  #include "absl/base/attributes.h"
32
- #include "absl/container/inlined_vector.h"
33
32
  #include "absl/memory/memory.h"
34
33
  #include "absl/strings/str_cat.h"
35
34
  #include "absl/strings/string_view.h"
@@ -75,7 +74,7 @@ class SecurityHandshaker : public Handshaker {
75
74
  public:
76
75
  SecurityHandshaker(tsi_handshaker* handshaker,
77
76
  grpc_security_connector* connector,
78
- const grpc_channel_args* args);
77
+ const ChannelArgs& args);
79
78
  ~SecurityHandshaker() override;
80
79
  void Shutdown(grpc_error_handle why) override;
81
80
  void DoHandshake(grpc_tcp_server_acceptor* acceptor,
@@ -132,19 +131,19 @@ class SecurityHandshaker : public Handshaker {
132
131
  RefCountedPtr<grpc_auth_context> auth_context_;
133
132
  tsi_handshaker_result* handshaker_result_ = nullptr;
134
133
  size_t max_frame_size_ = 0;
134
+ std::string tsi_handshake_error_;
135
135
  };
136
136
 
137
137
  SecurityHandshaker::SecurityHandshaker(tsi_handshaker* handshaker,
138
138
  grpc_security_connector* connector,
139
- const grpc_channel_args* args)
139
+ const ChannelArgs& args)
140
140
  : handshaker_(handshaker),
141
141
  connector_(connector->Ref(DEBUG_LOCATION, "handshake")),
142
142
  handshake_buffer_size_(GRPC_INITIAL_HANDSHAKE_BUFFER_SIZE),
143
143
  handshake_buffer_(
144
144
  static_cast<uint8_t*>(gpr_malloc(handshake_buffer_size_))),
145
- max_frame_size_(grpc_channel_args_find_integer(
146
- args, GRPC_ARG_TSI_MAX_FRAME_SIZE,
147
- {0, 0, std::numeric_limits<int>::max()})) {
145
+ max_frame_size_(
146
+ std::max(0, args.GetInt(GRPC_ARG_TSI_MAX_FRAME_SIZE).value_or(0))) {
148
147
  grpc_slice_buffer_init(&outgoing_);
149
148
  GRPC_CLOSURE_INIT(&on_peer_checked_, &SecurityHandshaker::OnPeerCheckedFn,
150
149
  this, grpc_schedule_on_exec_ctx);
@@ -191,8 +190,7 @@ void SecurityHandshaker::CleanupArgsForFailureLocked() {
191
190
  args_->endpoint = nullptr;
192
191
  read_buffer_to_destroy_ = args_->read_buffer;
193
192
  args_->read_buffer = nullptr;
194
- grpc_channel_args_destroy(args_->args);
195
- args_->args = nullptr;
193
+ args_->args = ChannelArgs();
196
194
  }
197
195
 
198
196
  // If the handshake failed or we're shutting down, clean up and invoke the
@@ -319,14 +317,14 @@ void SecurityHandshaker::OnPeerCheckedInner(grpc_error_handle error) {
319
317
  if (unused_bytes_size > 0) {
320
318
  grpc_slice slice = grpc_slice_from_copied_buffer(
321
319
  reinterpret_cast<const char*>(unused_bytes), unused_bytes_size);
322
- args_->endpoint =
323
- grpc_secure_endpoint_create(protector, zero_copy_protector,
324
- args_->endpoint, &slice, args_->args, 1);
320
+ args_->endpoint = grpc_secure_endpoint_create(
321
+ protector, zero_copy_protector, args_->endpoint, &slice,
322
+ args_->args.ToC().get(), 1);
325
323
  grpc_slice_unref_internal(slice);
326
324
  } else {
327
- args_->endpoint =
328
- grpc_secure_endpoint_create(protector, zero_copy_protector,
329
- args_->endpoint, nullptr, args_->args, 0);
325
+ args_->endpoint = grpc_secure_endpoint_create(
326
+ protector, zero_copy_protector, args_->endpoint, nullptr,
327
+ args_->args.ToC().get(), 0);
330
328
  }
331
329
  } else if (unused_bytes_size > 0) {
332
330
  // Not wrapping the endpoint, so just pass along unused bytes.
@@ -337,21 +335,12 @@ void SecurityHandshaker::OnPeerCheckedInner(grpc_error_handle error) {
337
335
  // Done with handshaker result.
338
336
  tsi_handshaker_result_destroy(handshaker_result_);
339
337
  handshaker_result_ = nullptr;
340
- absl::InlinedVector<grpc_arg, 2> args_to_add = {
341
- // Add auth context to channel args.
342
- grpc_auth_context_to_arg(auth_context_.get()),
343
- };
344
- RefCountedPtr<channelz::SocketNode::Security> channelz_security;
338
+ args_->args = args_->args.SetObject(auth_context_);
345
339
  // Add channelz channel args only if frame protector is created.
346
340
  if (has_frame_protector) {
347
- channelz_security =
348
- MakeChannelzSecurityFromAuthContext(auth_context_.get());
349
- args_to_add.push_back(channelz_security->MakeChannelArg());
341
+ args_->args = args_->args.SetObject(
342
+ MakeChannelzSecurityFromAuthContext(auth_context_.get()));
350
343
  }
351
- grpc_channel_args* tmp_args = args_->args;
352
- args_->args = grpc_channel_args_copy_and_add(tmp_args, args_to_add.data(),
353
- args_to_add.size());
354
- grpc_channel_args_destroy(tmp_args);
355
344
  // Invoke callback.
356
345
  ExecCtx::Run(DEBUG_LOCATION, on_handshake_done_, GRPC_ERROR_NONE);
357
346
  // Set shutdown to true so that subsequent calls to
@@ -372,7 +361,7 @@ grpc_error_handle SecurityHandshaker::CheckPeerLocked() {
372
361
  return grpc_set_tsi_error_result(
373
362
  GRPC_ERROR_CREATE_FROM_STATIC_STRING("Peer extraction failed"), result);
374
363
  }
375
- connector_->check_peer(peer, args_->endpoint, &auth_context_,
364
+ connector_->check_peer(peer, args_->endpoint, args_->args, &auth_context_,
376
365
  &on_peer_checked_);
377
366
  return GRPC_ERROR_NONE;
378
367
  }
@@ -398,15 +387,15 @@ grpc_error_handle SecurityHandshaker::OnHandshakeNextDoneLocked(
398
387
  return error;
399
388
  }
400
389
  if (result != TSI_OK) {
401
- auto* security_connector =
402
- grpc_security_connector_find_in_args(args_->args);
390
+ auto* security_connector = args_->args.GetObject<grpc_security_connector>();
403
391
  absl::string_view connector_type = "<unknown>";
404
392
  if (security_connector != nullptr) {
405
393
  connector_type = security_connector->type().name();
406
394
  }
407
395
  return grpc_set_tsi_error_result(
408
- GRPC_ERROR_CREATE_FROM_CPP_STRING(
409
- absl::StrCat(connector_type, " handshake failed")),
396
+ GRPC_ERROR_CREATE_FROM_CPP_STRING(absl::StrCat(
397
+ connector_type, " handshake failed",
398
+ (tsi_handshake_error_.empty() ? "" : ": "), tsi_handshake_error_)),
410
399
  result);
411
400
  }
412
401
  // Update handshaker result.
@@ -466,7 +455,8 @@ grpc_error_handle SecurityHandshaker::DoHandshakerNextLocked(
466
455
  tsi_handshaker_result* hs_result = nullptr;
467
456
  tsi_result result = tsi_handshaker_next(
468
457
  handshaker_, bytes_received, bytes_received_size, &bytes_to_send,
469
- &bytes_to_send_size, &hs_result, &OnHandshakeNextDoneGrpcWrapper, this);
458
+ &bytes_to_send_size, &hs_result, &OnHandshakeNextDoneGrpcWrapper, this,
459
+ &tsi_handshake_error_);
470
460
  if (result == TSI_ASYNC) {
471
461
  // Handshaker operating asynchronously. Nothing else to do here;
472
462
  // callback will be invoked in a TSI thread.
@@ -601,8 +591,7 @@ class FailHandshaker : public Handshaker {
601
591
  grpc_endpoint_shutdown(args->endpoint, GRPC_ERROR_REF(error));
602
592
  grpc_endpoint_destroy(args->endpoint);
603
593
  args->endpoint = nullptr;
604
- grpc_channel_args_destroy(args->args);
605
- args->args = nullptr;
594
+ args->args = ChannelArgs();
606
595
  grpc_slice_buffer_destroy_internal(args->read_buffer);
607
596
  gpr_free(args->read_buffer);
608
597
  args->read_buffer = nullptr;
@@ -619,12 +608,11 @@ class FailHandshaker : public Handshaker {
619
608
 
620
609
  class ClientSecurityHandshakerFactory : public HandshakerFactory {
621
610
  public:
622
- void AddHandshakers(const grpc_channel_args* args,
611
+ void AddHandshakers(const ChannelArgs& args,
623
612
  grpc_pollset_set* interested_parties,
624
613
  HandshakeManager* handshake_mgr) override {
625
614
  auto* security_connector =
626
- reinterpret_cast<grpc_channel_security_connector*>(
627
- grpc_security_connector_find_in_args(args));
615
+ args.GetObject<grpc_channel_security_connector>();
628
616
  if (security_connector) {
629
617
  security_connector->add_handshakers(args, interested_parties,
630
618
  handshake_mgr);
@@ -635,12 +623,10 @@ class ClientSecurityHandshakerFactory : public HandshakerFactory {
635
623
 
636
624
  class ServerSecurityHandshakerFactory : public HandshakerFactory {
637
625
  public:
638
- void AddHandshakers(const grpc_channel_args* args,
626
+ void AddHandshakers(const ChannelArgs& args,
639
627
  grpc_pollset_set* interested_parties,
640
628
  HandshakeManager* handshake_mgr) override {
641
- auto* security_connector =
642
- reinterpret_cast<grpc_server_security_connector*>(
643
- grpc_security_connector_find_in_args(args));
629
+ auto* security_connector = args.GetObject<grpc_server_security_connector>();
644
630
  if (security_connector) {
645
631
  security_connector->add_handshakers(args, interested_parties,
646
632
  handshake_mgr);
@@ -657,7 +643,7 @@ class ServerSecurityHandshakerFactory : public HandshakerFactory {
657
643
 
658
644
  RefCountedPtr<Handshaker> SecurityHandshakerCreate(
659
645
  tsi_handshaker* handshaker, grpc_security_connector* connector,
660
- const grpc_channel_args* args) {
646
+ const ChannelArgs& args) {
661
647
  // If no TSI handshaker was created, return a handshaker that always fails.
662
648
  // Otherwise, return a real security handshaker.
663
649
  if (handshaker == nullptr) {
@@ -681,5 +667,7 @@ void SecurityRegisterHandshakerFactories(CoreConfiguration::Builder* builder) {
681
667
  grpc_handshaker* grpc_security_handshaker_create(
682
668
  tsi_handshaker* handshaker, grpc_security_connector* connector,
683
669
  const grpc_channel_args* args) {
684
- return SecurityHandshakerCreate(handshaker, connector, args).release();
670
+ return SecurityHandshakerCreate(handshaker, connector,
671
+ grpc_core::ChannelArgs::FromC(args))
672
+ .release();
685
673
  }
@@ -23,6 +23,7 @@
23
23
 
24
24
  #include <grpc/impl/codegen/grpc_types.h>
25
25
 
26
+ #include "src/core/lib/channel/channel_args.h"
26
27
  #include "src/core/lib/config/core_configuration.h"
27
28
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
28
29
  #include "src/core/lib/security/security_connector/security_connector.h"
@@ -34,7 +35,7 @@ namespace grpc_core {
34
35
  /// Creates a security handshaker using \a handshaker.
35
36
  RefCountedPtr<Handshaker> SecurityHandshakerCreate(
36
37
  tsi_handshaker* handshaker, grpc_security_connector* connector,
37
- const grpc_channel_args* args);
38
+ const ChannelArgs& args);
38
39
 
39
40
  /// Registers security handshaker factories.
40
41
  void SecurityRegisterHandshakerFactories(CoreConfiguration::Builder*);
@@ -25,6 +25,7 @@
25
25
 
26
26
  #include <grpc/slice.h>
27
27
 
28
+ #include "src/core/lib/gpr/useful.h"
28
29
  #include "src/core/lib/gprpp/ref_counted.h"
29
30
  #include "src/core/lib/service_config/service_config_parser.h"
30
31
 
@@ -52,12 +53,22 @@
52
53
  // ]
53
54
  // }
54
55
 
56
+ #define GRPC_ARG_SERVICE_CONFIG_OBJ "grpc.internal.service_config_obj"
57
+
55
58
  namespace grpc_core {
56
59
 
57
60
  // TODO(roth): Consider stripping this down further to the completely minimal
58
61
  // interface requied to be exposed as part of the resolver API.
59
62
  class ServiceConfig : public RefCounted<ServiceConfig> {
60
63
  public:
64
+ static absl::string_view ChannelArgName() {
65
+ return GRPC_ARG_SERVICE_CONFIG_OBJ;
66
+ }
67
+ static int ChannelArgsCompare(const ServiceConfig* a,
68
+ const ServiceConfig* b) {
69
+ return QsortCompare(a, b);
70
+ }
71
+
61
72
  virtual absl::string_view json_string() const = 0;
62
73
 
63
74
  /// Retrieves the global parsed config at index \a index. The
@@ -25,7 +25,10 @@
25
25
  #include <utility>
26
26
 
27
27
  #include "absl/memory/memory.h"
28
+ #include "absl/status/status.h"
29
+ #include "absl/status/statusor.h"
28
30
  #include "absl/strings/str_cat.h"
31
+ #include "absl/strings/str_join.h"
29
32
 
30
33
  #include <grpc/support/log.h>
31
34
 
@@ -38,37 +41,40 @@
38
41
 
39
42
  namespace grpc_core {
40
43
 
41
- RefCountedPtr<ServiceConfig> ServiceConfigImpl::Create(
42
- const grpc_channel_args* args, absl::string_view json_string,
43
- grpc_error_handle* error) {
44
- GPR_DEBUG_ASSERT(error != nullptr);
45
- Json json = Json::Parse(json_string, error);
46
- if (!GRPC_ERROR_IS_NONE(*error)) return nullptr;
47
- return MakeRefCounted<ServiceConfigImpl>(args, std::string(json_string),
48
- std::move(json), error);
44
+ absl::StatusOr<RefCountedPtr<ServiceConfig>> ServiceConfigImpl::Create(
45
+ const ChannelArgs& args, absl::string_view json_string) {
46
+ auto json = Json::Parse(json_string);
47
+ if (!json.ok()) return json.status();
48
+ absl::Status status;
49
+ auto service_config = MakeRefCounted<ServiceConfigImpl>(
50
+ args, std::string(json_string), std::move(*json), &status);
51
+ if (!status.ok()) return status;
52
+ return service_config;
49
53
  }
50
54
 
51
- ServiceConfigImpl::ServiceConfigImpl(const grpc_channel_args* args,
55
+ ServiceConfigImpl::ServiceConfigImpl(const ChannelArgs& args,
52
56
  std::string json_string, Json json,
53
- grpc_error_handle* error)
57
+ absl::Status* status)
54
58
  : json_string_(std::move(json_string)), json_(std::move(json)) {
55
- GPR_DEBUG_ASSERT(error != nullptr);
59
+ GPR_DEBUG_ASSERT(status != nullptr);
56
60
  if (json_.type() != Json::Type::OBJECT) {
57
- *error =
58
- GRPC_ERROR_CREATE_FROM_STATIC_STRING("JSON value is not an object");
61
+ *status = absl::InvalidArgumentError("JSON value is not an object");
59
62
  return;
60
63
  }
61
- std::vector<grpc_error_handle> error_list;
62
- grpc_error_handle global_error = GRPC_ERROR_NONE;
63
- parsed_global_configs_ =
64
+ std::vector<std::string> errors;
65
+ auto parsed_global_configs =
64
66
  CoreConfiguration::Get().service_config_parser().ParseGlobalParameters(
65
- args, json_, &global_error);
66
- if (!GRPC_ERROR_IS_NONE(global_error)) error_list.push_back(global_error);
67
- grpc_error_handle local_error = ParsePerMethodParams(args);
68
- if (!GRPC_ERROR_IS_NONE(local_error)) error_list.push_back(local_error);
69
- if (!error_list.empty()) {
70
- *error = GRPC_ERROR_CREATE_FROM_VECTOR("Service config parsing error",
71
- &error_list);
67
+ args, json_);
68
+ if (!parsed_global_configs.ok()) {
69
+ errors.emplace_back(parsed_global_configs.status().message());
70
+ } else {
71
+ parsed_global_configs_ = std::move(*parsed_global_configs);
72
+ }
73
+ absl::Status local_status = ParsePerMethodParams(args);
74
+ if (!local_status.ok()) errors.emplace_back(local_status.message());
75
+ if (!errors.empty()) {
76
+ *status = absl::InvalidArgumentError(absl::StrCat(
77
+ "Service config parsing errors: [", absl::StrJoin(errors, "; "), "]"));
72
78
  }
73
79
  }
74
80
 
@@ -78,98 +84,95 @@ ServiceConfigImpl::~ServiceConfigImpl() {
78
84
  }
79
85
  }
80
86
 
81
- grpc_error_handle ServiceConfigImpl::ParseJsonMethodConfig(
82
- const grpc_channel_args* args, const Json& json) {
83
- std::vector<grpc_error_handle> error_list;
87
+ absl::Status ServiceConfigImpl::ParseJsonMethodConfig(const ChannelArgs& args,
88
+ const Json& json,
89
+ size_t index) {
90
+ std::vector<std::string> errors;
91
+ const ServiceConfigParser::ParsedConfigVector* vector_ptr = nullptr;
84
92
  // Parse method config with each registered parser.
85
- auto parsed_configs =
86
- absl::make_unique<ServiceConfigParser::ParsedConfigVector>();
87
- grpc_error_handle parser_error = GRPC_ERROR_NONE;
88
- *parsed_configs =
93
+ auto parsed_configs_or =
89
94
  CoreConfiguration::Get().service_config_parser().ParsePerMethodParameters(
90
- args, json, &parser_error);
91
- if (!GRPC_ERROR_IS_NONE(parser_error)) {
92
- error_list.push_back(parser_error);
95
+ args, json);
96
+ if (!parsed_configs_or.ok()) {
97
+ errors.emplace_back(parsed_configs_or.status().message());
98
+ } else {
99
+ auto parsed_configs =
100
+ absl::make_unique<ServiceConfigParser::ParsedConfigVector>(
101
+ std::move(*parsed_configs_or));
102
+ parsed_method_config_vectors_storage_.push_back(std::move(parsed_configs));
103
+ vector_ptr = parsed_method_config_vectors_storage_.back().get();
93
104
  }
94
- parsed_method_config_vectors_storage_.push_back(std::move(parsed_configs));
95
- const auto* vector_ptr = parsed_method_config_vectors_storage_.back().get();
96
105
  // Add an entry for each path.
97
- bool found_name = false;
98
106
  auto it = json.object_value().find("name");
99
107
  if (it != json.object_value().end()) {
100
108
  if (it->second.type() != Json::Type::ARRAY) {
101
- error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
102
- "field:name error:not of type Array"));
103
- return GRPC_ERROR_CREATE_FROM_VECTOR("methodConfig", &error_list);
104
- }
105
- const Json::Array& name_array = it->second.array_value();
106
- for (const Json& name : name_array) {
107
- grpc_error_handle parse_error = GRPC_ERROR_NONE;
108
- std::string path = ParseJsonMethodName(name, &parse_error);
109
- if (!GRPC_ERROR_IS_NONE(parse_error)) {
110
- error_list.push_back(parse_error);
111
- } else {
112
- found_name = true;
113
- if (path.empty()) {
114
- if (default_method_config_vector_ != nullptr) {
115
- error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
116
- "field:name error:multiple default method configs"));
117
- }
118
- default_method_config_vector_ = vector_ptr;
109
+ errors.emplace_back("field:name error:not of type Array");
110
+ } else {
111
+ const Json::Array& name_array = it->second.array_value();
112
+ for (const Json& name : name_array) {
113
+ absl::StatusOr<std::string> path = ParseJsonMethodName(name);
114
+ if (!path.ok()) {
115
+ errors.emplace_back(path.status().message());
119
116
  } else {
120
- grpc_slice key = grpc_slice_from_copied_string(path.c_str());
121
- // If the key is not already present in the map, this will
122
- // store a ref to the key in the map.
123
- auto& value = parsed_method_configs_map_[key];
124
- if (value != nullptr) {
125
- error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
126
- "field:name error:multiple method configs with same name"));
127
- // The map entry already existed, so we need to unref the
128
- // key we just created.
129
- grpc_slice_unref_internal(key);
117
+ if (path->empty()) {
118
+ if (default_method_config_vector_ != nullptr) {
119
+ errors.emplace_back(
120
+ "field:name error:multiple default method configs");
121
+ }
122
+ default_method_config_vector_ = vector_ptr;
130
123
  } else {
131
- value = vector_ptr;
124
+ grpc_slice key = grpc_slice_from_cpp_string(std::move(*path));
125
+ // If the key is not already present in the map, this will
126
+ // store a ref to the key in the map.
127
+ auto& value = parsed_method_configs_map_[key];
128
+ if (value != nullptr) {
129
+ errors.emplace_back(
130
+ "field:name error:multiple method configs with same name");
131
+ // The map entry already existed, so we need to unref the
132
+ // key we just created.
133
+ grpc_slice_unref_internal(key);
134
+ } else {
135
+ value = vector_ptr;
136
+ }
132
137
  }
133
138
  }
134
139
  }
135
140
  }
136
141
  }
137
- if (!found_name) {
138
- parsed_method_config_vectors_storage_.pop_back();
142
+ if (!errors.empty()) {
143
+ return absl::InvalidArgumentError(
144
+ absl::StrCat("index ", index, ": [", absl::StrJoin(errors, "; "), "]"));
139
145
  }
140
- return GRPC_ERROR_CREATE_FROM_VECTOR("methodConfig", &error_list);
146
+ return absl::OkStatus();
141
147
  }
142
148
 
143
- grpc_error_handle ServiceConfigImpl::ParsePerMethodParams(
144
- const grpc_channel_args* args) {
145
- std::vector<grpc_error_handle> error_list;
149
+ absl::Status ServiceConfigImpl::ParsePerMethodParams(const ChannelArgs& args) {
146
150
  auto it = json_.object_value().find("methodConfig");
147
- if (it != json_.object_value().end()) {
148
- if (it->second.type() != Json::Type::ARRAY) {
149
- error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
150
- "field:methodConfig error:not of type Array"));
151
- }
152
- for (const Json& method_config : it->second.array_value()) {
153
- if (method_config.type() != Json::Type::OBJECT) {
154
- error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
155
- "field:methodConfig error:not of type Object"));
156
- continue;
157
- }
158
- grpc_error_handle error = ParseJsonMethodConfig(args, method_config);
159
- if (!GRPC_ERROR_IS_NONE(error)) {
160
- error_list.push_back(error);
161
- }
151
+ if (it == json_.object_value().end()) return absl::OkStatus();
152
+ if (it->second.type() != Json::Type::ARRAY) {
153
+ return absl::InvalidArgumentError("field must be of type array");
154
+ }
155
+ std::vector<std::string> errors;
156
+ for (size_t i = 0; i < it->second.array_value().size(); ++i) {
157
+ const Json& method_config = it->second.array_value()[i];
158
+ if (method_config.type() != Json::Type::OBJECT) {
159
+ errors.emplace_back(absl::StrCat("index ", i, ": not of type Object"));
160
+ } else {
161
+ absl::Status status = ParseJsonMethodConfig(args, method_config, i);
162
+ if (!status.ok()) errors.emplace_back(status.message());
162
163
  }
163
164
  }
164
- return GRPC_ERROR_CREATE_FROM_VECTOR("Method Params", &error_list);
165
+ if (!errors.empty()) {
166
+ return absl::InvalidArgumentError(absl::StrCat(
167
+ "errors parsing methodConfig: [", absl::StrJoin(errors, "; "), "]"));
168
+ }
169
+ return absl::OkStatus();
165
170
  }
166
171
 
167
- std::string ServiceConfigImpl::ParseJsonMethodName(const Json& json,
168
- grpc_error_handle* error) {
172
+ absl::StatusOr<std::string> ServiceConfigImpl::ParseJsonMethodName(
173
+ const Json& json) {
169
174
  if (json.type() != Json::Type::OBJECT) {
170
- *error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
171
- "field:name error:type is not object");
172
- return "";
175
+ return absl::InvalidArgumentError("field:name error:type is not object");
173
176
  }
174
177
  // Find service name.
175
178
  const std::string* service_name = nullptr;
@@ -177,9 +180,8 @@ std::string ServiceConfigImpl::ParseJsonMethodName(const Json& json,
177
180
  if (it != json.object_value().end() &&
178
181
  it->second.type() != Json::Type::JSON_NULL) {
179
182
  if (it->second.type() != Json::Type::STRING) {
180
- *error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
183
+ return absl::InvalidArgumentError(
181
184
  "field:name error: field:service error:not of type string");
182
- return "";
183
185
  }
184
186
  if (!it->second.string_value().empty()) {
185
187
  service_name = &it->second.string_value();
@@ -191,9 +193,8 @@ std::string ServiceConfigImpl::ParseJsonMethodName(const Json& json,
191
193
  if (it != json.object_value().end() &&
192
194
  it->second.type() != Json::Type::JSON_NULL) {
193
195
  if (it->second.type() != Json::Type::STRING) {
194
- *error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
196
+ return absl::InvalidArgumentError(
195
197
  "field:name error: field:method error:not of type string");
196
- return "";
197
198
  }
198
199
  if (!it->second.string_value().empty()) {
199
200
  method_name = &it->second.string_value();
@@ -203,7 +204,7 @@ std::string ServiceConfigImpl::ParseJsonMethodName(const Json& json,
203
204
  // Method name may not be specified without service name.
204
205
  if (service_name == nullptr) {
205
206
  if (method_name != nullptr) {
206
- *error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
207
+ return absl::InvalidArgumentError(
207
208
  "field:name error:method name populated without service name");
208
209
  }
209
210
  return "";
@@ -26,14 +26,15 @@
26
26
  #include <unordered_map>
27
27
  #include <vector>
28
28
 
29
+ #include "absl/status/status.h"
30
+ #include "absl/status/statusor.h"
29
31
  #include "absl/strings/string_view.h"
30
32
 
31
- #include <grpc/impl/codegen/grpc_types.h>
32
33
  #include <grpc/slice.h>
33
34
  #include <grpc/support/log.h>
34
35
 
36
+ #include "src/core/lib/channel/channel_args.h"
35
37
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
36
- #include "src/core/lib/iomgr/error.h"
37
38
  #include "src/core/lib/json/json.h"
38
39
  #include "src/core/lib/service_config/service_config.h"
39
40
  #include "src/core/lib/service_config/service_config_parser.h"
@@ -68,13 +69,11 @@ namespace grpc_core {
68
69
  class ServiceConfigImpl final : public ServiceConfig {
69
70
  public:
70
71
  /// Creates a new service config from parsing \a json_string.
71
- /// Returns null on parse error.
72
- static RefCountedPtr<ServiceConfig> Create(const grpc_channel_args* args,
73
- absl::string_view json_string,
74
- grpc_error_handle* error);
72
+ static absl::StatusOr<RefCountedPtr<ServiceConfig>> Create(
73
+ const ChannelArgs& args, absl::string_view json_string);
75
74
 
76
- ServiceConfigImpl(const grpc_channel_args* args, std::string json_string,
77
- Json json, grpc_error_handle* error);
75
+ ServiceConfigImpl(const ChannelArgs& args, std::string json_string, Json json,
76
+ absl::Status* status);
78
77
  ~ServiceConfigImpl() override;
79
78
 
80
79
  absl::string_view json_string() const override { return json_string_; }
@@ -96,14 +95,13 @@ class ServiceConfigImpl final : public ServiceConfig {
96
95
 
97
96
  private:
98
97
  // Helper functions for parsing the method configs.
99
- grpc_error_handle ParsePerMethodParams(const grpc_channel_args* args);
100
- grpc_error_handle ParseJsonMethodConfig(const grpc_channel_args* args,
101
- const Json& json);
98
+ absl::Status ParsePerMethodParams(const ChannelArgs& args);
99
+ absl::Status ParseJsonMethodConfig(const ChannelArgs& args, const Json& json,
100
+ size_t index);
102
101
 
103
102
  // Returns a path string for the JSON name object specified by json.
104
103
  // Sets *error on error.
105
- static std::string ParseJsonMethodName(const Json& json,
106
- grpc_error_handle* error);
104
+ static absl::StatusOr<std::string> ParseJsonMethodName(const Json& json);
107
105
 
108
106
  std::string json_string_;
109
107
  Json json_;
@@ -22,7 +22,9 @@
22
22
 
23
23
  #include <string>
24
24
 
25
+ #include "absl/status/status.h"
25
26
  #include "absl/strings/str_cat.h"
27
+ #include "absl/strings/str_join.h"
26
28
 
27
29
  #include <grpc/support/log.h>
28
30
 
@@ -47,46 +49,43 @@ void ServiceConfigParser::Builder::RegisterParser(
47
49
  registered_parsers_.emplace_back(std::move(parser));
48
50
  }
49
51
 
50
- ServiceConfigParser::ParsedConfigVector
51
- ServiceConfigParser::ParseGlobalParameters(const grpc_channel_args* args,
52
- const Json& json,
53
- grpc_error_handle* error) const {
52
+ absl::StatusOr<ServiceConfigParser::ParsedConfigVector>
53
+ ServiceConfigParser::ParseGlobalParameters(const ChannelArgs& args,
54
+ const Json& json) const {
54
55
  ParsedConfigVector parsed_global_configs;
55
- std::vector<grpc_error_handle> error_list;
56
+ std::vector<std::string> errors;
56
57
  for (size_t i = 0; i < registered_parsers_.size(); i++) {
57
- grpc_error_handle parser_error = GRPC_ERROR_NONE;
58
- auto parsed_config =
59
- registered_parsers_[i]->ParseGlobalParams(args, json, &parser_error);
60
- if (!GRPC_ERROR_IS_NONE(parser_error)) {
61
- error_list.push_back(parser_error);
58
+ auto parsed_config = registered_parsers_[i]->ParseGlobalParams(args, json);
59
+ if (!parsed_config.ok()) {
60
+ errors.emplace_back(parsed_config.status().message());
61
+ } else {
62
+ parsed_global_configs.push_back(std::move(*parsed_config));
62
63
  }
63
- parsed_global_configs.push_back(std::move(parsed_config));
64
64
  }
65
- if (!error_list.empty()) {
66
- *error = GRPC_ERROR_CREATE_FROM_VECTOR("Global Params", &error_list);
65
+ if (!errors.empty()) {
66
+ return absl::InvalidArgumentError(absl::StrJoin(errors, "; "));
67
67
  }
68
- return parsed_global_configs;
68
+ return std::move(parsed_global_configs);
69
69
  }
70
70
 
71
- ServiceConfigParser::ParsedConfigVector
72
- ServiceConfigParser::ParsePerMethodParameters(const grpc_channel_args* args,
73
- const Json& json,
74
- grpc_error_handle* error) const {
71
+ absl::StatusOr<ServiceConfigParser::ParsedConfigVector>
72
+ ServiceConfigParser::ParsePerMethodParameters(const ChannelArgs& args,
73
+ const Json& json) const {
75
74
  ParsedConfigVector parsed_method_configs;
76
- std::vector<grpc_error_handle> error_list;
75
+ std::vector<std::string> errors;
77
76
  for (size_t i = 0; i < registered_parsers_.size(); ++i) {
78
- grpc_error_handle parser_error = GRPC_ERROR_NONE;
79
77
  auto parsed_config =
80
- registered_parsers_[i]->ParsePerMethodParams(args, json, &parser_error);
81
- if (!GRPC_ERROR_IS_NONE(parser_error)) {
82
- error_list.push_back(parser_error);
78
+ registered_parsers_[i]->ParsePerMethodParams(args, json);
79
+ if (!parsed_config.ok()) {
80
+ errors.emplace_back(parsed_config.status().message());
81
+ } else {
82
+ parsed_method_configs.push_back(std::move(*parsed_config));
83
83
  }
84
- parsed_method_configs.push_back(std::move(parsed_config));
85
84
  }
86
- if (!error_list.empty()) {
87
- *error = GRPC_ERROR_CREATE_FROM_VECTOR("methodConfig", &error_list);
85
+ if (!errors.empty()) {
86
+ return absl::InvalidArgumentError(absl::StrJoin(errors, "; "));
88
87
  }
89
- return parsed_method_configs;
88
+ return std::move(parsed_method_configs);
90
89
  }
91
90
 
92
91
  size_t ServiceConfigParser::GetParserIndex(absl::string_view name) const {