grpc 1.50.0 → 1.51.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 (459) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +131 -42
  3. data/include/grpc/event_engine/event_engine.h +10 -3
  4. data/include/grpc/event_engine/slice_buffer.h +17 -0
  5. data/include/grpc/grpc.h +0 -10
  6. data/include/grpc/impl/codegen/grpc_types.h +1 -5
  7. data/include/grpc/impl/codegen/port_platform.h +0 -3
  8. data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +19 -13
  9. data/src/core/ext/filters/channel_idle/channel_idle_filter.h +1 -0
  10. data/src/core/ext/filters/client_channel/backup_poller.cc +3 -3
  11. data/src/core/ext/filters/client_channel/channel_connectivity.cc +7 -5
  12. data/src/core/ext/filters/client_channel/client_channel.cc +120 -140
  13. data/src/core/ext/filters/client_channel/client_channel.h +3 -4
  14. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +0 -2
  15. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +1 -1
  16. data/src/core/ext/filters/client_channel/client_channel_service_config.cc +153 -0
  17. data/src/core/ext/filters/client_channel/{resolver_result_parsing.h → client_channel_service_config.h} +26 -23
  18. data/src/core/ext/filters/client_channel/connector.h +1 -1
  19. data/src/core/ext/filters/client_channel/dynamic_filters.cc +20 -47
  20. data/src/core/ext/filters/client_channel/dynamic_filters.h +7 -8
  21. data/src/core/ext/filters/client_channel/health/health_check_client.cc +3 -4
  22. data/src/core/ext/filters/client_channel/http_proxy.cc +0 -1
  23. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +3 -4
  24. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +5 -0
  25. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +8 -7
  26. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +35 -44
  27. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +0 -1
  28. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +1 -3
  29. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +3 -4
  30. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.h +1 -1
  31. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +41 -29
  32. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +2 -2
  33. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +9 -11
  34. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +15 -12
  35. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +8 -10
  36. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +26 -27
  37. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +7 -9
  38. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +44 -26
  39. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +17 -27
  40. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_attributes.cc +42 -0
  41. data/src/core/ext/filters/client_channel/lb_policy/xds/{xds.h → xds_attributes.h} +15 -17
  42. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +13 -7
  43. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +48 -47
  44. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +40 -126
  45. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_wrr_locality.cc +364 -0
  46. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +9 -9
  47. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +23 -32
  48. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +1 -2
  49. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +22 -23
  50. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +50 -52
  51. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +1 -1
  52. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +2 -4
  53. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +1 -3
  54. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +34 -26
  55. data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +3 -4
  56. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +4 -7
  57. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +63 -46
  58. data/src/core/ext/filters/client_channel/retry_filter.cc +80 -102
  59. data/src/core/ext/filters/client_channel/retry_service_config.cc +192 -234
  60. data/src/core/ext/filters/client_channel/retry_service_config.h +20 -23
  61. data/src/core/ext/filters/client_channel/retry_throttle.cc +8 -8
  62. data/src/core/ext/filters/client_channel/retry_throttle.h +8 -7
  63. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +2 -2
  64. data/src/core/ext/filters/client_channel/subchannel.cc +21 -25
  65. data/src/core/ext/filters/client_channel/subchannel.h +2 -2
  66. data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +11 -12
  67. data/src/core/ext/filters/deadline/deadline_filter.cc +13 -14
  68. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +1 -1
  69. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +0 -4
  70. data/src/core/ext/filters/fault_injection/fault_injection_service_config_parser.cc +118 -0
  71. data/src/core/ext/filters/fault_injection/{service_config_parser.h → fault_injection_service_config_parser.h} +20 -12
  72. data/src/core/ext/filters/http/client/http_client_filter.cc +16 -16
  73. data/src/core/ext/filters/http/client_authority_filter.cc +1 -1
  74. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +13 -13
  75. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +34 -34
  76. data/src/core/ext/filters/http/server/http_server_filter.cc +26 -25
  77. data/src/core/ext/filters/message_size/message_size_filter.cc +86 -117
  78. data/src/core/ext/filters/message_size/message_size_filter.h +22 -15
  79. data/src/core/ext/filters/rbac/rbac_filter.cc +12 -12
  80. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +728 -530
  81. data/src/core/ext/filters/rbac/rbac_service_config_parser.h +4 -3
  82. data/src/core/ext/filters/server_config_selector/server_config_selector.h +1 -1
  83. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +6 -7
  84. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +17 -21
  85. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +57 -72
  86. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +5 -5
  87. data/src/core/ext/transport/chttp2/transport/bin_encoder.h +1 -1
  88. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +212 -253
  89. data/src/core/ext/transport/chttp2/transport/flow_control.cc +42 -11
  90. data/src/core/ext/transport/chttp2/transport/flow_control.h +4 -3
  91. data/src/core/ext/transport/chttp2/transport/frame_data.cc +16 -15
  92. data/src/core/ext/transport/chttp2/transport/frame_data.h +1 -1
  93. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +13 -13
  94. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +4 -3
  95. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +10 -7
  96. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +15 -17
  97. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +5 -4
  98. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +5 -6
  99. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +1 -1
  100. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +2 -1
  101. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +31 -39
  102. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +7 -6
  103. data/src/core/ext/transport/chttp2/transport/internal.h +24 -8
  104. data/src/core/ext/transport/chttp2/transport/parsing.cc +51 -52
  105. data/src/core/ext/transport/chttp2/transport/varint.cc +2 -3
  106. data/src/core/ext/transport/chttp2/transport/varint.h +11 -8
  107. data/src/core/ext/transport/chttp2/transport/writing.cc +16 -16
  108. data/src/core/ext/transport/inproc/inproc_transport.cc +97 -115
  109. data/src/core/ext/xds/certificate_provider_store.cc +4 -4
  110. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +4 -7
  111. data/src/core/ext/xds/xds_api.cc +15 -68
  112. data/src/core/ext/xds/xds_api.h +3 -7
  113. data/src/core/ext/xds/xds_bootstrap.h +0 -1
  114. data/src/core/ext/xds/xds_bootstrap_grpc.cc +3 -12
  115. data/src/core/ext/xds/xds_bootstrap_grpc.h +16 -1
  116. data/src/core/ext/xds/xds_certificate_provider.cc +22 -25
  117. data/src/core/ext/xds/xds_channel_stack_modifier.cc +0 -1
  118. data/src/core/ext/xds/xds_client.cc +122 -90
  119. data/src/core/ext/xds/xds_client.h +7 -2
  120. data/src/core/ext/xds/xds_client_grpc.cc +5 -24
  121. data/src/core/ext/xds/xds_cluster.cc +291 -183
  122. data/src/core/ext/xds/xds_cluster.h +11 -15
  123. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +32 -29
  124. data/src/core/ext/xds/xds_cluster_specifier_plugin.h +35 -16
  125. data/src/core/ext/xds/xds_common_types.cc +208 -141
  126. data/src/core/ext/xds/xds_common_types.h +19 -13
  127. data/src/core/ext/xds/xds_endpoint.cc +214 -129
  128. data/src/core/ext/xds/xds_endpoint.h +4 -7
  129. data/src/core/ext/xds/xds_http_fault_filter.cc +56 -43
  130. data/src/core/ext/xds/xds_http_fault_filter.h +13 -21
  131. data/src/core/ext/xds/xds_http_filters.cc +60 -73
  132. data/src/core/ext/xds/xds_http_filters.h +67 -19
  133. data/src/core/ext/xds/xds_http_rbac_filter.cc +152 -207
  134. data/src/core/ext/xds/xds_http_rbac_filter.h +12 -15
  135. data/src/core/ext/xds/xds_lb_policy_registry.cc +122 -169
  136. data/src/core/ext/xds/xds_lb_policy_registry.h +10 -11
  137. data/src/core/ext/xds/xds_listener.cc +459 -417
  138. data/src/core/ext/xds/xds_listener.h +43 -47
  139. data/src/core/ext/xds/xds_resource_type.h +3 -11
  140. data/src/core/ext/xds/xds_resource_type_impl.h +8 -13
  141. data/src/core/ext/xds/xds_route_config.cc +94 -80
  142. data/src/core/ext/xds/xds_route_config.h +10 -10
  143. data/src/core/ext/xds/xds_routing.cc +2 -1
  144. data/src/core/ext/xds/xds_routing.h +2 -0
  145. data/src/core/ext/xds/xds_server_config_fetcher.cc +109 -94
  146. data/src/core/ext/xds/xds_transport_grpc.cc +4 -5
  147. data/src/core/lib/address_utils/parse_address.cc +11 -10
  148. data/src/core/lib/channel/channel_args.h +16 -1
  149. data/src/core/lib/channel/channel_stack.cc +23 -20
  150. data/src/core/lib/channel/channel_stack.h +17 -4
  151. data/src/core/lib/channel/channel_stack_builder.cc +4 -7
  152. data/src/core/lib/channel/channel_stack_builder.h +14 -6
  153. data/src/core/lib/channel/channel_stack_builder_impl.cc +25 -7
  154. data/src/core/lib/channel/channel_stack_builder_impl.h +2 -0
  155. data/src/core/lib/channel/channel_trace.cc +4 -5
  156. data/src/core/lib/channel/channelz.cc +1 -1
  157. data/src/core/lib/channel/connected_channel.cc +695 -35
  158. data/src/core/lib/channel/connected_channel.h +0 -4
  159. data/src/core/lib/channel/promise_based_filter.cc +1004 -140
  160. data/src/core/lib/channel/promise_based_filter.h +364 -87
  161. data/src/core/lib/compression/message_compress.cc +5 -5
  162. data/src/core/lib/debug/event_log.cc +88 -0
  163. data/src/core/lib/debug/event_log.h +81 -0
  164. data/src/core/lib/debug/histogram_view.cc +69 -0
  165. data/src/core/lib/{slice/slice_refcount.cc → debug/histogram_view.h} +15 -13
  166. data/src/core/lib/debug/stats.cc +22 -119
  167. data/src/core/lib/debug/stats.h +29 -35
  168. data/src/core/lib/debug/stats_data.cc +224 -73
  169. data/src/core/lib/debug/stats_data.h +263 -122
  170. data/src/core/lib/event_engine/common_closures.h +71 -0
  171. data/src/core/lib/event_engine/default_event_engine.cc +38 -15
  172. data/src/core/lib/event_engine/default_event_engine.h +15 -3
  173. data/src/core/lib/event_engine/default_event_engine_factory.cc +2 -4
  174. data/src/core/lib/event_engine/memory_allocator.cc +1 -1
  175. data/src/core/lib/event_engine/poller.h +10 -4
  176. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +618 -0
  177. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h +129 -0
  178. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +901 -0
  179. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +97 -0
  180. data/src/core/lib/event_engine/posix_engine/event_poller.h +111 -0
  181. data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +74 -0
  182. data/src/core/lib/event_engine/{executor/threaded_executor.cc → posix_engine/event_poller_posix_default.h} +13 -16
  183. data/src/core/lib/event_engine/posix_engine/internal_errqueue.cc +77 -0
  184. data/src/core/lib/event_engine/posix_engine/internal_errqueue.h +179 -0
  185. data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +267 -0
  186. data/src/core/lib/event_engine/posix_engine/lockfree_event.h +73 -0
  187. data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +1270 -0
  188. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +682 -0
  189. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +453 -18
  190. data/src/core/lib/event_engine/posix_engine/posix_engine.h +148 -24
  191. data/src/core/lib/event_engine/posix_engine/posix_engine_closure.h +80 -0
  192. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +1081 -0
  193. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +361 -0
  194. data/src/core/lib/event_engine/posix_engine/timer.h +9 -8
  195. data/src/core/lib/event_engine/posix_engine/timer_manager.cc +57 -194
  196. data/src/core/lib/event_engine/posix_engine/timer_manager.h +21 -49
  197. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +301 -0
  198. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.h +179 -0
  199. data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.cc +126 -0
  200. data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.h +45 -0
  201. data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.cc +151 -0
  202. data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.h +45 -0
  203. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h +76 -0
  204. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.cc +67 -0
  205. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h +37 -0
  206. data/src/core/lib/event_engine/slice.cc +7 -6
  207. data/src/core/lib/event_engine/slice_buffer.cc +2 -2
  208. data/src/core/lib/event_engine/thread_pool.cc +106 -25
  209. data/src/core/lib/event_engine/thread_pool.h +32 -9
  210. data/src/core/lib/event_engine/windows/win_socket.cc +7 -7
  211. data/src/core/lib/event_engine/windows/windows_engine.cc +18 -12
  212. data/src/core/lib/event_engine/windows/windows_engine.h +8 -4
  213. data/src/core/lib/experiments/config.cc +1 -1
  214. data/src/core/lib/experiments/experiments.cc +13 -2
  215. data/src/core/lib/experiments/experiments.h +8 -1
  216. data/src/core/lib/gpr/cpu_linux.cc +6 -2
  217. data/src/core/lib/gpr/log_linux.cc +3 -4
  218. data/src/core/lib/gpr/string.h +1 -1
  219. data/src/core/lib/gpr/tmpfile_posix.cc +3 -2
  220. data/src/core/lib/gprpp/load_file.cc +75 -0
  221. data/src/core/lib/gprpp/load_file.h +33 -0
  222. data/src/core/lib/gprpp/per_cpu.h +46 -0
  223. data/src/core/lib/gprpp/stat_posix.cc +5 -4
  224. data/src/core/lib/gprpp/stat_windows.cc +3 -2
  225. data/src/core/lib/gprpp/status_helper.h +1 -3
  226. data/src/core/lib/gprpp/strerror.cc +41 -0
  227. data/src/core/{ext/xds/xds_resource_type.cc → lib/gprpp/strerror.h} +9 -13
  228. data/src/core/lib/gprpp/thd_windows.cc +1 -2
  229. data/src/core/lib/gprpp/time.cc +3 -4
  230. data/src/core/lib/gprpp/time.h +13 -2
  231. data/src/core/lib/gprpp/validation_errors.h +18 -1
  232. data/src/core/lib/http/httpcli.cc +40 -44
  233. data/src/core/lib/http/httpcli.h +6 -5
  234. data/src/core/lib/http/httpcli_security_connector.cc +4 -6
  235. data/src/core/lib/http/parser.cc +54 -65
  236. data/src/core/lib/iomgr/buffer_list.cc +105 -116
  237. data/src/core/lib/iomgr/buffer_list.h +60 -44
  238. data/src/core/lib/iomgr/call_combiner.cc +11 -10
  239. data/src/core/lib/iomgr/call_combiner.h +3 -4
  240. data/src/core/lib/iomgr/cfstream_handle.cc +13 -16
  241. data/src/core/lib/iomgr/closure.h +49 -5
  242. data/src/core/lib/iomgr/combiner.cc +2 -2
  243. data/src/core/lib/iomgr/endpoint.h +1 -1
  244. data/src/core/lib/iomgr/endpoint_cfstream.cc +26 -25
  245. data/src/core/lib/iomgr/endpoint_pair_posix.cc +2 -2
  246. data/src/core/lib/iomgr/error.cc +27 -42
  247. data/src/core/lib/iomgr/error.h +22 -152
  248. data/src/core/lib/iomgr/ev_apple.cc +4 -4
  249. data/src/core/lib/iomgr/ev_epoll1_linux.cc +26 -25
  250. data/src/core/lib/iomgr/ev_poll_posix.cc +27 -31
  251. data/src/core/lib/iomgr/exec_ctx.cc +3 -4
  252. data/src/core/lib/iomgr/exec_ctx.h +2 -3
  253. data/src/core/lib/iomgr/executor.cc +1 -2
  254. data/src/core/lib/iomgr/internal_errqueue.cc +3 -1
  255. data/src/core/lib/iomgr/iocp_windows.cc +1 -0
  256. data/src/core/lib/iomgr/iomgr_posix.cc +2 -2
  257. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +2 -1
  258. data/src/core/lib/iomgr/iomgr_windows.cc +2 -1
  259. data/src/core/lib/iomgr/load_file.cc +5 -9
  260. data/src/core/lib/iomgr/lockfree_event.cc +10 -10
  261. data/src/core/lib/iomgr/pollset_windows.cc +4 -4
  262. data/src/core/lib/iomgr/python_util.h +2 -2
  263. data/src/core/lib/iomgr/resolve_address.cc +8 -3
  264. data/src/core/lib/iomgr/resolve_address.h +3 -4
  265. data/src/core/lib/iomgr/resolve_address_impl.h +1 -1
  266. data/src/core/lib/iomgr/resolve_address_posix.cc +14 -25
  267. data/src/core/lib/iomgr/resolve_address_posix.h +1 -2
  268. data/src/core/lib/iomgr/resolve_address_windows.cc +14 -17
  269. data/src/core/lib/iomgr/resolve_address_windows.h +1 -2
  270. data/src/core/lib/iomgr/socket_utils_common_posix.cc +30 -29
  271. data/src/core/lib/iomgr/socket_utils_posix.cc +1 -0
  272. data/src/core/lib/iomgr/socket_utils_posix.h +2 -2
  273. data/src/core/lib/iomgr/socket_windows.cc +2 -2
  274. data/src/core/lib/iomgr/tcp_client_cfstream.cc +6 -10
  275. data/src/core/lib/iomgr/tcp_client_posix.cc +31 -35
  276. data/src/core/lib/iomgr/tcp_client_windows.cc +8 -12
  277. data/src/core/lib/iomgr/tcp_posix.cc +92 -108
  278. data/src/core/lib/iomgr/tcp_server_posix.cc +34 -34
  279. data/src/core/lib/iomgr/tcp_server_utils_posix.h +1 -1
  280. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +18 -21
  281. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +12 -13
  282. data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +1 -1
  283. data/src/core/lib/iomgr/tcp_server_windows.cc +26 -29
  284. data/src/core/lib/iomgr/tcp_windows.cc +27 -34
  285. data/src/core/lib/iomgr/timer.h +8 -8
  286. data/src/core/lib/iomgr/timer_generic.cc +9 -15
  287. data/src/core/lib/iomgr/unix_sockets_posix.cc +2 -4
  288. data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +4 -3
  289. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +10 -8
  290. data/src/core/lib/json/json_channel_args.h +42 -0
  291. data/src/core/lib/json/json_object_loader.cc +7 -2
  292. data/src/core/lib/json/json_object_loader.h +22 -0
  293. data/src/core/lib/json/json_util.cc +5 -5
  294. data/src/core/lib/json/json_util.h +4 -4
  295. data/src/core/lib/load_balancing/lb_policy.cc +1 -1
  296. data/src/core/lib/load_balancing/lb_policy.h +4 -0
  297. data/src/core/lib/load_balancing/subchannel_interface.h +0 -7
  298. data/src/core/lib/matchers/matchers.cc +3 -4
  299. data/src/core/lib/promise/activity.cc +16 -2
  300. data/src/core/lib/promise/activity.h +38 -15
  301. data/src/core/lib/promise/arena_promise.h +80 -51
  302. data/src/core/lib/promise/context.h +13 -6
  303. data/src/core/lib/promise/detail/basic_seq.h +9 -28
  304. data/src/core/lib/promise/detail/promise_factory.h +58 -10
  305. data/src/core/lib/promise/detail/status.h +28 -0
  306. data/src/core/lib/promise/detail/switch.h +1455 -0
  307. data/src/core/lib/promise/exec_ctx_wakeup_scheduler.h +3 -1
  308. data/src/core/lib/promise/for_each.h +129 -0
  309. data/src/core/lib/promise/loop.h +7 -5
  310. data/src/core/lib/promise/map_pipe.h +87 -0
  311. data/src/core/lib/promise/pipe.cc +19 -0
  312. data/src/core/lib/promise/pipe.h +505 -0
  313. data/src/core/lib/promise/poll.h +13 -0
  314. data/src/core/lib/promise/seq.h +3 -5
  315. data/src/core/lib/promise/sleep.cc +5 -4
  316. data/src/core/lib/promise/sleep.h +1 -2
  317. data/src/core/lib/promise/try_concurrently.h +341 -0
  318. data/src/core/lib/promise/try_seq.h +10 -13
  319. data/src/core/lib/resolver/server_address.cc +1 -0
  320. data/src/core/lib/resolver/server_address.h +1 -3
  321. data/src/core/lib/resource_quota/api.cc +0 -1
  322. data/src/core/lib/resource_quota/arena.cc +19 -0
  323. data/src/core/lib/resource_quota/arena.h +89 -0
  324. data/src/core/lib/resource_quota/memory_quota.cc +1 -0
  325. data/src/core/lib/security/authorization/grpc_authorization_engine.cc +1 -3
  326. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +4 -2
  327. data/src/core/lib/security/authorization/matchers.cc +25 -22
  328. data/src/core/lib/security/authorization/rbac_policy.cc +2 -3
  329. data/src/core/lib/security/context/security_context.h +10 -0
  330. data/src/core/lib/security/credentials/channel_creds_registry_init.cc +3 -4
  331. data/src/core/lib/security/credentials/composite/composite_credentials.cc +1 -1
  332. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +77 -55
  333. data/src/core/lib/security/credentials/external/aws_request_signer.cc +4 -3
  334. data/src/core/lib/security/credentials/external/external_account_credentials.cc +40 -51
  335. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +17 -21
  336. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +21 -25
  337. data/src/core/lib/security/credentials/fake/fake_credentials.cc +1 -0
  338. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +27 -24
  339. data/src/core/lib/security/credentials/iam/iam_credentials.cc +1 -0
  340. data/src/core/lib/security/credentials/jwt/json_token.cc +1 -2
  341. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +1 -1
  342. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +5 -5
  343. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +24 -30
  344. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +6 -5
  345. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +3 -3
  346. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +19 -27
  347. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +4 -11
  348. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +29 -41
  349. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +1 -1
  350. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +6 -11
  351. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +8 -15
  352. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +2 -2
  353. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +2 -6
  354. data/src/core/lib/security/security_connector/load_system_roots_supported.cc +1 -4
  355. data/src/core/lib/security/security_connector/local/local_security_connector.cc +7 -11
  356. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +9 -14
  357. data/src/core/lib/security/security_connector/ssl_utils.cc +5 -7
  358. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +21 -27
  359. data/src/core/lib/security/transport/client_auth_filter.cc +1 -1
  360. data/src/core/lib/security/transport/secure_endpoint.cc +26 -28
  361. data/src/core/lib/security/transport/security_handshaker.cc +53 -53
  362. data/src/core/lib/security/transport/server_auth_filter.cc +21 -21
  363. data/src/core/lib/security/transport/tsi_error.cc +6 -3
  364. data/src/core/lib/security/util/json_util.cc +4 -5
  365. data/src/core/lib/service_config/service_config.h +1 -1
  366. data/src/core/lib/service_config/service_config_impl.cc +111 -158
  367. data/src/core/lib/service_config/service_config_impl.h +14 -17
  368. data/src/core/lib/service_config/service_config_parser.cc +14 -31
  369. data/src/core/lib/service_config/service_config_parser.h +14 -10
  370. data/src/core/lib/slice/b64.cc +2 -2
  371. data/src/core/lib/slice/slice.cc +7 -1
  372. data/src/core/lib/slice/slice.h +19 -6
  373. data/src/core/lib/slice/slice_buffer.cc +13 -14
  374. data/src/core/lib/slice/slice_internal.h +13 -21
  375. data/src/core/lib/slice/slice_refcount.h +34 -19
  376. data/src/core/lib/surface/byte_buffer.cc +3 -4
  377. data/src/core/lib/surface/byte_buffer_reader.cc +4 -4
  378. data/src/core/lib/surface/call.cc +1366 -239
  379. data/src/core/lib/surface/call.h +44 -0
  380. data/src/core/lib/surface/call_details.cc +3 -3
  381. data/src/core/lib/surface/call_trace.cc +113 -0
  382. data/src/core/lib/surface/call_trace.h +30 -0
  383. data/src/core/lib/surface/channel.cc +44 -49
  384. data/src/core/lib/surface/channel.h +9 -1
  385. data/src/core/lib/surface/channel_ping.cc +1 -1
  386. data/src/core/lib/surface/channel_stack_type.cc +4 -0
  387. data/src/core/lib/surface/channel_stack_type.h +2 -0
  388. data/src/core/lib/surface/completion_queue.cc +38 -52
  389. data/src/core/lib/surface/init.cc +8 -39
  390. data/src/core/lib/surface/init_internally.h +8 -0
  391. data/src/core/lib/surface/lame_client.cc +10 -8
  392. data/src/core/lib/surface/server.cc +48 -70
  393. data/src/core/lib/surface/server.h +3 -4
  394. data/src/core/lib/surface/validate_metadata.cc +11 -12
  395. data/src/core/lib/surface/version.cc +2 -2
  396. data/src/core/lib/transport/connectivity_state.cc +2 -2
  397. data/src/core/lib/transport/error_utils.cc +34 -28
  398. data/src/core/lib/transport/error_utils.h +3 -3
  399. data/src/core/lib/transport/handshaker.cc +14 -14
  400. data/src/core/lib/transport/handshaker.h +1 -1
  401. data/src/core/lib/transport/handshaker_factory.h +26 -0
  402. data/src/core/lib/transport/handshaker_registry.cc +8 -2
  403. data/src/core/lib/transport/handshaker_registry.h +3 -4
  404. data/src/core/lib/transport/http_connect_handshaker.cc +23 -24
  405. data/src/core/lib/transport/metadata_batch.h +17 -1
  406. data/src/core/lib/transport/parsed_metadata.cc +2 -6
  407. data/src/core/lib/transport/tcp_connect_handshaker.cc +15 -20
  408. data/src/core/lib/transport/transport.cc +63 -17
  409. data/src/core/lib/transport/transport.h +64 -68
  410. data/src/core/lib/transport/transport_impl.h +1 -1
  411. data/src/core/lib/transport/transport_op_string.cc +7 -6
  412. data/src/core/plugin_registry/grpc_plugin_registry.cc +6 -10
  413. data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +2 -14
  414. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +10 -10
  415. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +8 -8
  416. data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +2 -1
  417. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +7 -7
  418. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.cc +7 -6
  419. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +1 -1
  420. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +5 -5
  421. data/src/core/tsi/fake_transport_security.cc +3 -3
  422. data/src/core/tsi/ssl/key_logging/ssl_key_logging.cc +7 -3
  423. data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +1 -1
  424. data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +6 -2
  425. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +0 -2
  426. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +0 -3
  427. data/src/ruby/lib/grpc/version.rb +1 -1
  428. data/src/ruby/spec/channel_spec.rb +0 -43
  429. data/src/ruby/spec/generic/active_call_spec.rb +12 -3
  430. data/third_party/abseil-cpp/absl/cleanup/cleanup.h +140 -0
  431. data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +100 -0
  432. data/third_party/zlib/compress.c +3 -3
  433. data/third_party/zlib/crc32.c +21 -12
  434. data/third_party/zlib/deflate.c +112 -106
  435. data/third_party/zlib/deflate.h +2 -2
  436. data/third_party/zlib/gzlib.c +1 -1
  437. data/third_party/zlib/gzread.c +3 -5
  438. data/third_party/zlib/gzwrite.c +1 -1
  439. data/third_party/zlib/infback.c +10 -7
  440. data/third_party/zlib/inflate.c +5 -2
  441. data/third_party/zlib/inftrees.c +2 -2
  442. data/third_party/zlib/inftrees.h +1 -1
  443. data/third_party/zlib/trees.c +61 -62
  444. data/third_party/zlib/uncompr.c +2 -2
  445. data/third_party/zlib/zconf.h +16 -3
  446. data/third_party/zlib/zlib.h +10 -10
  447. data/third_party/zlib/zutil.c +9 -7
  448. data/third_party/zlib/zutil.h +1 -0
  449. metadata +55 -18
  450. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +0 -188
  451. data/src/core/ext/filters/fault_injection/service_config_parser.cc +0 -187
  452. data/src/core/lib/event_engine/executor/threaded_executor.h +0 -44
  453. data/src/core/lib/gpr/murmur_hash.cc +0 -82
  454. data/src/core/lib/gpr/murmur_hash.h +0 -29
  455. data/src/core/lib/gpr/tls.h +0 -156
  456. data/src/core/lib/promise/call_push_pull.h +0 -148
  457. data/src/core/lib/slice/slice_api.cc +0 -39
  458. data/src/core/lib/slice/slice_buffer_api.cc +0 -35
  459. data/src/core/lib/slice/slice_refcount_base.h +0 -60
@@ -362,8 +362,7 @@ class ClientChannel {
362
362
  std::set<SubchannelWrapper*> subchannel_wrappers_
363
363
  ABSL_GUARDED_BY(*work_serializer_);
364
364
  int keepalive_time_ ABSL_GUARDED_BY(*work_serializer_) = -1;
365
- grpc_error_handle disconnect_error_ ABSL_GUARDED_BY(*work_serializer_) =
366
- GRPC_ERROR_NONE;
365
+ grpc_error_handle disconnect_error_ ABSL_GUARDED_BY(*work_serializer_);
367
366
 
368
367
  //
369
368
  // Fields guarded by a mutex, since they need to be accessed
@@ -508,10 +507,10 @@ class ClientChannel::LoadBalancedCall
508
507
  gpr_cycle_counter lb_call_start_time_ = gpr_get_cycle_counter();
509
508
 
510
509
  // Set when we get a cancel_stream op.
511
- grpc_error_handle cancel_error_ = GRPC_ERROR_NONE;
510
+ grpc_error_handle cancel_error_;
512
511
 
513
512
  // Set when we fail inside the LB call.
514
- grpc_error_handle failure_error_ = GRPC_ERROR_NONE;
513
+ grpc_error_handle failure_error_;
515
514
 
516
515
  grpc_closure pick_closure_;
517
516
 
@@ -20,8 +20,6 @@
20
20
 
21
21
  #include "src/core/ext/filters/client_channel/client_channel_channelz.h"
22
22
 
23
- #include <map>
24
-
25
23
  #include "src/core/lib/transport/connectivity_state.h"
26
24
 
27
25
  // IWYU pragma: no_include <type_traits>
@@ -19,7 +19,7 @@
19
19
  #include <grpc/support/port_platform.h>
20
20
 
21
21
  #include "src/core/ext/filters/client_channel/client_channel.h"
22
- #include "src/core/ext/filters/client_channel/resolver_result_parsing.h"
22
+ #include "src/core/ext/filters/client_channel/client_channel_service_config.h"
23
23
  #include "src/core/ext/filters/client_channel/retry_service_config.h"
24
24
  #include "src/core/lib/channel/channel_stack_builder.h"
25
25
  #include "src/core/lib/config/core_configuration.h"
@@ -0,0 +1,153 @@
1
+ //
2
+ // Copyright 2018 gRPC authors.
3
+ //
4
+ // Licensed under the Apache License, Version 2.0 (the "License");
5
+ // you may not use this file except in compliance with the License.
6
+ // You may obtain a copy of the License at
7
+ //
8
+ // http://www.apache.org/licenses/LICENSE-2.0
9
+ //
10
+ // Unless required by applicable law or agreed to in writing, software
11
+ // distributed under the License is distributed on an "AS IS" BASIS,
12
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ // See the License for the specific language governing permissions and
14
+ // limitations under the License.
15
+ //
16
+
17
+ #include <grpc/support/port_platform.h>
18
+
19
+ #include "src/core/ext/filters/client_channel/client_channel_service_config.h"
20
+
21
+ #include <map>
22
+ #include <utility>
23
+
24
+ #include "absl/status/status.h"
25
+ #include "absl/status/statusor.h"
26
+ #include "absl/strings/ascii.h"
27
+ #include "absl/strings/str_cat.h"
28
+ #include "absl/types/optional.h"
29
+
30
+ #include "src/core/lib/load_balancing/lb_policy_registry.h"
31
+
32
+ // As per the retry design, we do not allow more than 5 retry attempts.
33
+ #define MAX_MAX_RETRY_ATTEMPTS 5
34
+
35
+ namespace grpc_core {
36
+ namespace internal {
37
+
38
+ //
39
+ // ClientChannelGlobalParsedConfig::HealthCheckConfig
40
+ //
41
+
42
+ const JsonLoaderInterface*
43
+ ClientChannelGlobalParsedConfig::HealthCheckConfig::JsonLoader(
44
+ const JsonArgs&) {
45
+ static const auto* loader =
46
+ JsonObjectLoader<HealthCheckConfig>()
47
+ .OptionalField("serviceName", &HealthCheckConfig::service_name)
48
+ .Finish();
49
+ return loader;
50
+ }
51
+
52
+ //
53
+ // ClientChannelGlobalParsedConfig
54
+ //
55
+
56
+ const JsonLoaderInterface* ClientChannelGlobalParsedConfig::JsonLoader(
57
+ const JsonArgs&) {
58
+ static const auto* loader =
59
+ JsonObjectLoader<ClientChannelGlobalParsedConfig>()
60
+ // Note: "loadBalancingConfig" requires special handling, so
61
+ // that field will be parsed in JsonPostLoad() instead.
62
+ .OptionalField(
63
+ "loadBalancingPolicy",
64
+ &ClientChannelGlobalParsedConfig::parsed_deprecated_lb_policy_)
65
+ .OptionalField("healthCheckConfig",
66
+ &ClientChannelGlobalParsedConfig::health_check_config_)
67
+ .Finish();
68
+ return loader;
69
+ }
70
+
71
+ void ClientChannelGlobalParsedConfig::JsonPostLoad(const Json& json,
72
+ const JsonArgs&,
73
+ ValidationErrors* errors) {
74
+ const auto& lb_policy_registry =
75
+ CoreConfiguration::Get().lb_policy_registry();
76
+ // Parse LB config.
77
+ {
78
+ ValidationErrors::ScopedField field(errors, ".loadBalancingConfig");
79
+ auto it = json.object_value().find("loadBalancingConfig");
80
+ if (it != json.object_value().end()) {
81
+ auto config = lb_policy_registry.ParseLoadBalancingConfig(it->second);
82
+ if (!config.ok()) {
83
+ errors->AddError(config.status().message());
84
+ } else {
85
+ parsed_lb_config_ = std::move(*config);
86
+ }
87
+ }
88
+ }
89
+ // Sanity-check deprecated "loadBalancingPolicy" field.
90
+ if (!parsed_deprecated_lb_policy_.empty()) {
91
+ ValidationErrors::ScopedField field(errors, ".loadBalancingPolicy");
92
+ // Convert to lower-case.
93
+ absl::AsciiStrToLower(&parsed_deprecated_lb_policy_);
94
+ bool requires_config = false;
95
+ if (!lb_policy_registry.LoadBalancingPolicyExists(
96
+ parsed_deprecated_lb_policy_, &requires_config)) {
97
+ errors->AddError(absl::StrCat("unknown LB policy \"",
98
+ parsed_deprecated_lb_policy_, "\""));
99
+ } else if (requires_config) {
100
+ errors->AddError(absl::StrCat(
101
+ "LB policy \"", parsed_deprecated_lb_policy_,
102
+ "\" requires a config. Please use loadBalancingConfig instead."));
103
+ }
104
+ }
105
+ }
106
+
107
+ //
108
+ // ClientChannelMethodParsedConfig
109
+ //
110
+
111
+ const JsonLoaderInterface* ClientChannelMethodParsedConfig::JsonLoader(
112
+ const JsonArgs&) {
113
+ static const auto* loader =
114
+ JsonObjectLoader<ClientChannelMethodParsedConfig>()
115
+ .OptionalField("timeout", &ClientChannelMethodParsedConfig::timeout_)
116
+ .OptionalField("waitForReady",
117
+ &ClientChannelMethodParsedConfig::wait_for_ready_)
118
+ .Finish();
119
+ return loader;
120
+ }
121
+
122
+ //
123
+ // ClientChannelServiceConfigParser
124
+ //
125
+
126
+ size_t ClientChannelServiceConfigParser::ParserIndex() {
127
+ return CoreConfiguration::Get().service_config_parser().GetParserIndex(
128
+ parser_name());
129
+ }
130
+
131
+ void ClientChannelServiceConfigParser::Register(
132
+ CoreConfiguration::Builder* builder) {
133
+ builder->service_config_parser()->RegisterParser(
134
+ std::make_unique<ClientChannelServiceConfigParser>());
135
+ }
136
+
137
+ std::unique_ptr<ServiceConfigParser::ParsedConfig>
138
+ ClientChannelServiceConfigParser::ParseGlobalParams(const ChannelArgs& /*args*/,
139
+ const Json& json,
140
+ ValidationErrors* errors) {
141
+ return LoadFromJson<std::unique_ptr<ClientChannelGlobalParsedConfig>>(
142
+ json, JsonArgs(), errors);
143
+ }
144
+
145
+ std::unique_ptr<ServiceConfigParser::ParsedConfig>
146
+ ClientChannelServiceConfigParser::ParsePerMethodParams(
147
+ const ChannelArgs& /*args*/, const Json& json, ValidationErrors* errors) {
148
+ return LoadFromJson<std::unique_ptr<ClientChannelMethodParsedConfig>>(
149
+ json, JsonArgs(), errors);
150
+ }
151
+
152
+ } // namespace internal
153
+ } // namespace grpc_core
@@ -14,8 +14,8 @@
14
14
  // limitations under the License.
15
15
  //
16
16
 
17
- #ifndef GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_RESOLVER_RESULT_PARSING_H
18
- #define GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_RESOLVER_RESULT_PARSING_H
17
+ #ifndef GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_CLIENT_CHANNEL_SERVICE_CONFIG_H
18
+ #define GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_CLIENT_CHANNEL_SERVICE_CONFIG_H
19
19
 
20
20
  #include <grpc/support/port_platform.h>
21
21
 
@@ -23,9 +23,7 @@
23
23
 
24
24
  #include <memory>
25
25
  #include <string>
26
- #include <utility>
27
26
 
28
- #include "absl/status/statusor.h"
29
27
  #include "absl/strings/string_view.h"
30
28
  #include "absl/types/optional.h"
31
29
 
@@ -33,7 +31,10 @@
33
31
  #include "src/core/lib/config/core_configuration.h"
34
32
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
35
33
  #include "src/core/lib/gprpp/time.h"
34
+ #include "src/core/lib/gprpp/validation_errors.h"
36
35
  #include "src/core/lib/json/json.h"
36
+ #include "src/core/lib/json/json_args.h"
37
+ #include "src/core/lib/json/json_object_loader.h"
37
38
  #include "src/core/lib/load_balancing/lb_policy.h"
38
39
  #include "src/core/lib/service_config/service_config_parser.h"
39
40
 
@@ -43,14 +44,6 @@ namespace internal {
43
44
  class ClientChannelGlobalParsedConfig
44
45
  : public ServiceConfigParser::ParsedConfig {
45
46
  public:
46
- ClientChannelGlobalParsedConfig(
47
- RefCountedPtr<LoadBalancingPolicy::Config> parsed_lb_config,
48
- std::string parsed_deprecated_lb_policy,
49
- absl::optional<std::string> health_check_service_name)
50
- : parsed_lb_config_(std::move(parsed_lb_config)),
51
- parsed_deprecated_lb_policy_(std::move(parsed_deprecated_lb_policy)),
52
- health_check_service_name_(std::move(health_check_service_name)) {}
53
-
54
47
  RefCountedPtr<LoadBalancingPolicy::Config> parsed_lb_config() const {
55
48
  return parsed_lb_config_;
56
49
  }
@@ -60,26 +53,34 @@ class ClientChannelGlobalParsedConfig
60
53
  }
61
54
 
62
55
  const absl::optional<std::string>& health_check_service_name() const {
63
- return health_check_service_name_;
56
+ return health_check_config_.service_name;
64
57
  }
65
58
 
59
+ static const JsonLoaderInterface* JsonLoader(const JsonArgs&);
60
+ void JsonPostLoad(const Json& json, const JsonArgs&,
61
+ ValidationErrors* errors);
62
+
66
63
  private:
64
+ struct HealthCheckConfig {
65
+ absl::optional<std::string> service_name;
66
+
67
+ static const JsonLoaderInterface* JsonLoader(const JsonArgs&);
68
+ };
69
+
67
70
  RefCountedPtr<LoadBalancingPolicy::Config> parsed_lb_config_;
68
71
  std::string parsed_deprecated_lb_policy_;
69
- absl::optional<std::string> health_check_service_name_;
72
+ HealthCheckConfig health_check_config_;
70
73
  };
71
74
 
72
75
  class ClientChannelMethodParsedConfig
73
76
  : public ServiceConfigParser::ParsedConfig {
74
77
  public:
75
- ClientChannelMethodParsedConfig(Duration timeout,
76
- const absl::optional<bool>& wait_for_ready)
77
- : timeout_(timeout), wait_for_ready_(wait_for_ready) {}
78
-
79
78
  Duration timeout() const { return timeout_; }
80
79
 
81
80
  absl::optional<bool> wait_for_ready() const { return wait_for_ready_; }
82
81
 
82
+ static const JsonLoaderInterface* JsonLoader(const JsonArgs&);
83
+
83
84
  private:
84
85
  Duration timeout_;
85
86
  absl::optional<bool> wait_for_ready_;
@@ -89,11 +90,13 @@ class ClientChannelServiceConfigParser : public ServiceConfigParser::Parser {
89
90
  public:
90
91
  absl::string_view name() const override { return parser_name(); }
91
92
 
92
- absl::StatusOr<std::unique_ptr<ServiceConfigParser::ParsedConfig>>
93
- ParseGlobalParams(const ChannelArgs& /*args*/, const Json& json) override;
93
+ std::unique_ptr<ServiceConfigParser::ParsedConfig> ParseGlobalParams(
94
+ const ChannelArgs& /*args*/, const Json& json,
95
+ ValidationErrors* errors) override;
94
96
 
95
- absl::StatusOr<std::unique_ptr<ServiceConfigParser::ParsedConfig>>
96
- ParsePerMethodParams(const ChannelArgs& /*args*/, const Json& json) override;
97
+ std::unique_ptr<ServiceConfigParser::ParsedConfig> ParsePerMethodParams(
98
+ const ChannelArgs& /*args*/, const Json& json,
99
+ ValidationErrors* errors) override;
97
100
 
98
101
  static size_t ParserIndex();
99
102
  static void Register(CoreConfiguration::Builder* builder);
@@ -105,4 +108,4 @@ class ClientChannelServiceConfigParser : public ServiceConfigParser::Parser {
105
108
  } // namespace internal
106
109
  } // namespace grpc_core
107
110
 
108
- #endif // GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_RESOLVER_RESULT_PARSING_H
111
+ #endif // GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_CLIENT_CHANNEL_SERVICE_CONFIG_H
@@ -74,7 +74,7 @@ class SubchannelConnector : public InternallyRefCounted<SubchannelConnector> {
74
74
  virtual void Shutdown(grpc_error_handle error) = 0;
75
75
 
76
76
  void Orphan() override {
77
- Shutdown(GRPC_ERROR_CREATE_FROM_STATIC_STRING("Subchannel disconnected"));
77
+ Shutdown(GRPC_ERROR_CREATE("Subchannel disconnected"));
78
78
  Unref();
79
79
  }
80
80
  };
@@ -24,15 +24,17 @@
24
24
  #include <string>
25
25
  #include <utility>
26
26
 
27
- #include "absl/status/status.h"
27
+ #include "absl/status/statusor.h"
28
28
 
29
- #include <grpc/support/alloc.h>
30
29
  #include <grpc/support/log.h>
31
30
 
32
31
  #include "src/core/lib/channel/channel_args.h"
33
32
  #include "src/core/lib/channel/channel_stack.h"
33
+ #include "src/core/lib/channel/channel_stack_builder_impl.h"
34
34
  #include "src/core/lib/debug/trace.h"
35
35
  #include "src/core/lib/gpr/alloc.h"
36
+ #include "src/core/lib/gprpp/status_helper.h"
37
+ #include "src/core/lib/surface/channel_stack_type.h"
36
38
  #include "src/core/lib/surface/lame_client.h"
37
39
 
38
40
  // Conversion between call and call stack.
@@ -63,10 +65,10 @@ DynamicFilters::Call::Call(Args args, grpc_error_handle* error)
63
65
  args.arena, /* arena */
64
66
  args.call_combiner /* call_combiner */
65
67
  };
66
- *error = grpc_call_stack_init(channel_stack_->channel_stack_, 1, Destroy,
67
- this, &call_args);
68
- if (GPR_UNLIKELY(!GRPC_ERROR_IS_NONE(*error))) {
69
- gpr_log(GPR_ERROR, "error: %s", grpc_error_std_string(*error).c_str());
68
+ *error = grpc_call_stack_init(channel_stack_->channel_stack_.get(), 1,
69
+ Destroy, this, &call_args);
70
+ if (GPR_UNLIKELY(!error->ok())) {
71
+ gpr_log(GPR_ERROR, "error: %s", StatusToString(*error).c_str());
70
72
  return;
71
73
  }
72
74
  grpc_call_stack_set_pollset_or_pollset_set(call_stack, args.pollent);
@@ -136,58 +138,29 @@ void DynamicFilters::Call::IncrementRefCount(const DebugLocation& /*location*/,
136
138
 
137
139
  namespace {
138
140
 
139
- void DestroyChannelStack(void* arg, grpc_error_handle /*error*/) {
140
- grpc_channel_stack* channel_stack = static_cast<grpc_channel_stack*>(arg);
141
- grpc_channel_stack_destroy(channel_stack);
142
- gpr_free(channel_stack);
143
- }
144
-
145
- std::pair<grpc_channel_stack*, grpc_error_handle> CreateChannelStack(
146
- const grpc_channel_args* args,
147
- std::vector<const grpc_channel_filter*> filters) {
148
- // Allocate memory for channel stack.
149
- const size_t channel_stack_size =
150
- grpc_channel_stack_size(filters.data(), filters.size());
151
- grpc_channel_stack* channel_stack =
152
- reinterpret_cast<grpc_channel_stack*>(gpr_zalloc(channel_stack_size));
153
- // Initialize stack.
154
- grpc_error_handle error = grpc_channel_stack_init(
155
- /*initial_refs=*/1, DestroyChannelStack, channel_stack, filters.data(),
156
- filters.size(), args, "DynamicFilters", channel_stack);
157
- if (!GRPC_ERROR_IS_NONE(error)) {
158
- gpr_log(GPR_ERROR, "error initializing client internal stack: %s",
159
- grpc_error_std_string(error).c_str());
160
- grpc_channel_stack_destroy(channel_stack);
161
- gpr_free(channel_stack);
162
- return {nullptr, error};
141
+ absl::StatusOr<RefCountedPtr<grpc_channel_stack>> CreateChannelStack(
142
+ const ChannelArgs& args, std::vector<const grpc_channel_filter*> filters) {
143
+ ChannelStackBuilderImpl builder("DynamicFilters", GRPC_CLIENT_DYNAMIC, args);
144
+ for (auto filter : filters) {
145
+ builder.AppendFilter(filter);
163
146
  }
164
- return {channel_stack, GRPC_ERROR_NONE};
147
+ return builder.Build();
165
148
  }
166
149
 
167
150
  } // namespace
168
151
 
169
152
  RefCountedPtr<DynamicFilters> DynamicFilters::Create(
170
- const grpc_channel_args* args,
171
- std::vector<const grpc_channel_filter*> filters) {
153
+ const ChannelArgs& args, std::vector<const grpc_channel_filter*> filters) {
172
154
  // Attempt to create channel stack from requested filters.
173
155
  auto p = CreateChannelStack(args, std::move(filters));
174
- if (!GRPC_ERROR_IS_NONE(p.second)) {
156
+ if (!p.ok()) {
175
157
  // Channel stack creation failed with requested filters.
176
158
  // Create with lame filter instead.
177
- grpc_error_handle error = p.second;
178
- grpc_arg error_arg = MakeLameClientErrorArg(&error);
179
- grpc_channel_args* new_args =
180
- grpc_channel_args_copy_and_add(args, &error_arg, 1);
181
- GRPC_ERROR_UNREF(error);
182
- p = CreateChannelStack(new_args, {&LameClientFilter::kFilter});
183
- GPR_ASSERT(GRPC_ERROR_IS_NONE(p.second));
184
- grpc_channel_args_destroy(new_args);
159
+ auto error = p.status();
160
+ p = CreateChannelStack(args.Set(MakeLameClientErrorArg(&error)),
161
+ {&LameClientFilter::kFilter});
185
162
  }
186
- return MakeRefCounted<DynamicFilters>(p.first);
187
- }
188
-
189
- DynamicFilters::~DynamicFilters() {
190
- GRPC_CHANNEL_STACK_UNREF(channel_stack_, "~DynamicFilters");
163
+ return MakeRefCounted<DynamicFilters>(std::move(p.value()));
191
164
  }
192
165
 
193
166
  RefCountedPtr<DynamicFilters::Call> DynamicFilters::CreateCall(
@@ -19,12 +19,14 @@
19
19
 
20
20
  #include <grpc/support/port_platform.h>
21
21
 
22
+ #include <utility>
22
23
  #include <vector>
23
24
 
24
- #include <grpc/impl/codegen/grpc_types.h>
25
25
  #include <grpc/slice.h>
26
26
 
27
+ #include "src/core/lib/channel/channel_args.h"
27
28
  #include "src/core/lib/channel/channel_fwd.h"
29
+ #include "src/core/lib/channel/channel_stack.h"
28
30
  #include "src/core/lib/channel/context.h"
29
31
  #include "src/core/lib/gpr/time_precise.h"
30
32
  #include "src/core/lib/gprpp/debug_location.h"
@@ -90,18 +92,15 @@ class DynamicFilters : public RefCounted<DynamicFilters> {
90
92
  };
91
93
 
92
94
  static RefCountedPtr<DynamicFilters> Create(
93
- const grpc_channel_args* args,
94
- std::vector<const grpc_channel_filter*> filters);
95
+ const ChannelArgs& args, std::vector<const grpc_channel_filter*> filters);
95
96
 
96
- explicit DynamicFilters(grpc_channel_stack* channel_stack)
97
- : channel_stack_(channel_stack) {}
98
-
99
- ~DynamicFilters() override;
97
+ explicit DynamicFilters(RefCountedPtr<grpc_channel_stack> channel_stack)
98
+ : channel_stack_(std::move(channel_stack)) {}
100
99
 
101
100
  RefCountedPtr<Call> CreateCall(Call::Args args, grpc_error_handle* error);
102
101
 
103
102
  private:
104
- grpc_channel_stack* channel_stack_;
103
+ RefCountedPtr<grpc_channel_stack> channel_stack_;
105
104
  };
106
105
 
107
106
  } // namespace grpc_core
@@ -25,7 +25,6 @@
25
25
  #include <memory>
26
26
  #include <utility>
27
27
 
28
- #include "absl/memory/memory.h"
29
28
  #include "absl/status/status.h"
30
29
  #include "absl/status/statusor.h"
31
30
  #include "absl/strings/string_view.h"
@@ -165,9 +164,9 @@ OrphanablePtr<SubchannelStreamClient> MakeHealthCheckClient(
165
164
  RefCountedPtr<ConnectivityStateWatcherInterface> watcher) {
166
165
  return MakeOrphanable<SubchannelStreamClient>(
167
166
  std::move(connected_subchannel), interested_parties,
168
- absl::make_unique<HealthStreamEventHandler>(std::move(service_name),
169
- std::move(channelz_node),
170
- std::move(watcher)),
167
+ std::make_unique<HealthStreamEventHandler>(std::move(service_name),
168
+ std::move(channelz_node),
169
+ std::move(watcher)),
171
170
  GRPC_TRACE_FLAG_ENABLED(grpc_health_check_client_trace)
172
171
  ? "HealthCheckClient"
173
172
  : nullptr);
@@ -44,7 +44,6 @@
44
44
  #include "src/core/lib/gprpp/env.h"
45
45
  #include "src/core/lib/gprpp/host_port.h"
46
46
  #include "src/core/lib/gprpp/memory.h"
47
- #include "src/core/lib/handshaker/proxy_mapper_registry.h"
48
47
  #include "src/core/lib/iomgr/resolve_address.h"
49
48
  #include "src/core/lib/slice/b64.h"
50
49
  #include "src/core/lib/transport/http_connect_handshaker.h"
@@ -23,7 +23,6 @@
23
23
  #include <algorithm>
24
24
  #include <utility>
25
25
 
26
- #include "absl/memory/memory.h"
27
26
  #include "absl/strings/str_cat.h"
28
27
  #include "absl/strings/str_join.h"
29
28
 
@@ -41,7 +40,7 @@ class HierarchicalPathAttribute : public ServerAddress::AttributeInterface {
41
40
  : path_(std::move(path)) {}
42
41
 
43
42
  std::unique_ptr<AttributeInterface> Copy() const override {
44
- return absl::make_unique<HierarchicalPathAttribute>(path_);
43
+ return std::make_unique<HierarchicalPathAttribute>(path_);
45
44
  }
46
45
 
47
46
  int Cmp(const AttributeInterface* other) const override {
@@ -70,7 +69,7 @@ class HierarchicalPathAttribute : public ServerAddress::AttributeInterface {
70
69
 
71
70
  std::unique_ptr<ServerAddress::AttributeInterface>
72
71
  MakeHierarchicalPathAttribute(std::vector<std::string> path) {
73
- return absl::make_unique<HierarchicalPathAttribute>(std::move(path));
72
+ return std::make_unique<HierarchicalPathAttribute>(std::move(path));
74
73
  }
75
74
 
76
75
  absl::StatusOr<HierarchicalAddressMap> MakeHierarchicalAddressMap(
@@ -89,7 +88,7 @@ absl::StatusOr<HierarchicalAddressMap> MakeHierarchicalAddressMap(
89
88
  ++it;
90
89
  if (it != path.end()) {
91
90
  std::vector<std::string> remaining_path(it, path.end());
92
- new_attribute = absl::make_unique<HierarchicalPathAttribute>(
91
+ new_attribute = std::make_unique<HierarchicalPathAttribute>(
93
92
  std::move(remaining_path));
94
93
  }
95
94
  target_list.emplace_back(address.WithAttribute(
@@ -25,6 +25,7 @@
25
25
  #include "absl/strings/str_cat.h"
26
26
  #include "absl/strings/string_view.h"
27
27
 
28
+ #include <grpc/event_engine/event_engine.h>
28
29
  #include <grpc/impl/codegen/connectivity_state.h>
29
30
  #include <grpc/support/log.h>
30
31
 
@@ -107,6 +108,10 @@ class ChildPolicyHandler::Helper
107
108
  return parent_->channel_control_helper()->GetAuthority();
108
109
  }
109
110
 
111
+ grpc_event_engine::experimental::EventEngine* GetEventEngine() override {
112
+ return parent_->channel_control_helper()->GetEventEngine();
113
+ }
114
+
110
115
  void AddTraceEvent(TraceSeverity severity,
111
116
  absl::string_view message) override {
112
117
  if (parent_->shutting_down_) return;
@@ -22,6 +22,8 @@
22
22
 
23
23
  #include <new>
24
24
 
25
+ #include "absl/meta/type_traits.h"
26
+ #include "absl/status/status.h"
25
27
  #include "absl/types/optional.h"
26
28
 
27
29
  #include <grpc/support/log.h>
@@ -36,7 +38,7 @@
36
38
 
37
39
  static grpc_error_handle clr_init_channel_elem(
38
40
  grpc_channel_element* /*elem*/, grpc_channel_element_args* /*args*/) {
39
- return GRPC_ERROR_NONE;
41
+ return absl::OkStatus();
40
42
  }
41
43
 
42
44
  static void clr_destroy_channel_elem(grpc_channel_element* /*elem*/) {}
@@ -60,28 +62,27 @@ struct call_data {
60
62
 
61
63
  static void on_complete_for_send(void* arg, grpc_error_handle error) {
62
64
  call_data* calld = static_cast<call_data*>(arg);
63
- if (GRPC_ERROR_IS_NONE(error)) {
65
+ if (error.ok()) {
64
66
  calld->send_initial_metadata_succeeded = true;
65
67
  }
66
68
  grpc_core::Closure::Run(DEBUG_LOCATION, calld->original_on_complete_for_send,
67
- GRPC_ERROR_REF(error));
69
+ error);
68
70
  }
69
71
 
70
72
  static void recv_initial_metadata_ready(void* arg, grpc_error_handle error) {
71
73
  call_data* calld = static_cast<call_data*>(arg);
72
- if (GRPC_ERROR_IS_NONE(error)) {
74
+ if (error.ok()) {
73
75
  calld->recv_initial_metadata_succeeded = true;
74
76
  }
75
77
  grpc_core::Closure::Run(DEBUG_LOCATION,
76
- calld->original_recv_initial_metadata_ready,
77
- GRPC_ERROR_REF(error));
78
+ calld->original_recv_initial_metadata_ready, error);
78
79
  }
79
80
 
80
81
  static grpc_error_handle clr_init_call_elem(
81
82
  grpc_call_element* elem, const grpc_call_element_args* args) {
82
83
  GPR_ASSERT(args->context != nullptr);
83
84
  new (elem->call_data) call_data();
84
- return GRPC_ERROR_NONE;
85
+ return absl::OkStatus();
85
86
  }
86
87
 
87
88
  static void clr_destroy_call_elem(grpc_call_element* elem,