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
@@ -40,7 +40,8 @@ namespace internal {
40
40
  /// Tracks retry throttling data for an individual server name.
41
41
  class ServerRetryThrottleData : public RefCounted<ServerRetryThrottleData> {
42
42
  public:
43
- ServerRetryThrottleData(intptr_t max_milli_tokens, intptr_t milli_token_ratio,
43
+ ServerRetryThrottleData(uintptr_t max_milli_tokens,
44
+ uintptr_t milli_token_ratio,
44
45
  ServerRetryThrottleData* old_throttle_data);
45
46
  ~ServerRetryThrottleData() override;
46
47
 
@@ -50,15 +51,15 @@ class ServerRetryThrottleData : public RefCounted<ServerRetryThrottleData> {
50
51
  /// Records a success.
51
52
  void RecordSuccess();
52
53
 
53
- intptr_t max_milli_tokens() const { return max_milli_tokens_; }
54
- intptr_t milli_token_ratio() const { return milli_token_ratio_; }
54
+ uintptr_t max_milli_tokens() const { return max_milli_tokens_; }
55
+ uintptr_t milli_token_ratio() const { return milli_token_ratio_; }
55
56
 
56
57
  private:
57
58
  void GetReplacementThrottleDataIfNeeded(
58
59
  ServerRetryThrottleData** throttle_data);
59
60
 
60
- const intptr_t max_milli_tokens_;
61
- const intptr_t milli_token_ratio_;
61
+ const uintptr_t max_milli_tokens_;
62
+ const uintptr_t milli_token_ratio_;
62
63
  gpr_atm milli_tokens_;
63
64
  // A pointer to the replacement for this ServerRetryThrottleData entry.
64
65
  // If non-nullptr, then this entry is stale and must not be used.
@@ -74,8 +75,8 @@ class ServerRetryThrottleMap {
74
75
  /// Returns the failure data for \a server_name, creating a new entry if
75
76
  /// needed.
76
77
  RefCountedPtr<ServerRetryThrottleData> GetDataForServer(
77
- const std::string& server_name, intptr_t max_milli_tokens,
78
- intptr_t milli_token_ratio);
78
+ const std::string& server_name, uintptr_t max_milli_tokens,
79
+ uintptr_t milli_token_ratio);
79
80
 
80
81
  private:
81
82
  using StringToDataMap =
@@ -114,7 +114,7 @@ grpc_error_handle ServiceConfigChannelArgInitCallElem(
114
114
  }
115
115
  new (calld) ServiceConfigChannelArgCallData(std::move(service_config),
116
116
  method_config, args);
117
- return GRPC_ERROR_NONE;
117
+ return absl::OkStatus();
118
118
  }
119
119
 
120
120
  void ServiceConfigChannelArgDestroyCallElem(
@@ -130,7 +130,7 @@ grpc_error_handle ServiceConfigChannelArgInitChannelElem(
130
130
  ServiceConfigChannelArgChannelData* chand =
131
131
  static_cast<ServiceConfigChannelArgChannelData*>(elem->channel_data);
132
132
  new (chand) ServiceConfigChannelArgChannelData(args);
133
- return GRPC_ERROR_NONE;
133
+ return absl::OkStatus();
134
134
  }
135
135
 
136
136
  void ServiceConfigChannelArgDestroyChannelElem(grpc_channel_element* elem) {
@@ -43,18 +43,18 @@
43
43
  #include "src/core/lib/backoff/backoff.h"
44
44
  #include "src/core/lib/channel/channel_args.h"
45
45
  #include "src/core/lib/channel/channel_stack.h"
46
- #include "src/core/lib/channel/channel_stack_builder.h"
47
46
  #include "src/core/lib/channel/channel_stack_builder_impl.h"
48
47
  #include "src/core/lib/channel/channel_trace.h"
49
48
  #include "src/core/lib/channel/channelz.h"
50
49
  #include "src/core/lib/config/core_configuration.h"
51
50
  #include "src/core/lib/debug/stats.h"
51
+ #include "src/core/lib/debug/stats_data.h"
52
52
  #include "src/core/lib/debug/trace.h"
53
- #include "src/core/lib/event_engine/default_event_engine.h"
54
53
  #include "src/core/lib/gpr/alloc.h"
55
54
  #include "src/core/lib/gpr/useful.h"
56
55
  #include "src/core/lib/gprpp/debug_location.h"
57
56
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
57
+ #include "src/core/lib/gprpp/status_helper.h"
58
58
  #include "src/core/lib/gprpp/sync.h"
59
59
  #include "src/core/lib/handshaker/proxy_mapper_registry.h"
60
60
  #include "src/core/lib/iomgr/exec_ctx.h"
@@ -81,7 +81,8 @@
81
81
  GPR_ROUND_UP_TO_ALIGNMENT_SIZE(sizeof(SubchannelCall)))
82
82
 
83
83
  namespace grpc_core {
84
- using ::grpc_event_engine::experimental::GetDefaultEventEngine;
84
+
85
+ using ::grpc_event_engine::experimental::EventEngine;
85
86
 
86
87
  TraceFlag grpc_trace_subchannel(false, "subchannel");
87
88
  DebugOnlyTraceFlag grpc_trace_subchannel_refcount(false, "subchannel_refcount");
@@ -160,8 +161,8 @@ SubchannelCall::SubchannelCall(Args args, grpc_error_handle* error)
160
161
  };
161
162
  *error = grpc_call_stack_init(connected_subchannel_->channel_stack(), 1,
162
163
  SubchannelCall::Destroy, this, &call_args);
163
- if (GPR_UNLIKELY(!GRPC_ERROR_IS_NONE(*error))) {
164
- gpr_log(GPR_ERROR, "error: %s", grpc_error_std_string(*error).c_str());
164
+ if (GPR_UNLIKELY(!error->ok())) {
165
+ gpr_log(GPR_ERROR, "error: %s", StatusToString(*error).c_str());
165
166
  return;
166
167
  }
167
168
  grpc_call_stack_set_pollset_or_pollset_set(callstk, args.pollent);
@@ -255,12 +256,11 @@ namespace {
255
256
  // Sets *status based on the rest of the parameters.
256
257
  void GetCallStatus(grpc_status_code* status, Timestamp deadline,
257
258
  grpc_metadata_batch* md_batch, grpc_error_handle error) {
258
- if (!GRPC_ERROR_IS_NONE(error)) {
259
+ if (!error.ok()) {
259
260
  grpc_error_get_status(error, deadline, status, nullptr, nullptr, nullptr);
260
261
  } else {
261
262
  *status = md_batch->get(GrpcStatusMetadata()).value_or(GRPC_STATUS_UNKNOWN);
262
263
  }
263
- GRPC_ERROR_UNREF(error);
264
264
  }
265
265
 
266
266
  } // namespace
@@ -270,8 +270,7 @@ void SubchannelCall::RecvTrailingMetadataReady(void* arg,
270
270
  SubchannelCall* call = static_cast<SubchannelCall*>(arg);
271
271
  GPR_ASSERT(call->recv_trailing_metadata_ != nullptr);
272
272
  grpc_status_code status = GRPC_STATUS_OK;
273
- GetCallStatus(&status, call->deadline_, call->recv_trailing_metadata_,
274
- GRPC_ERROR_REF(error));
273
+ GetCallStatus(&status, call->deadline_, call->recv_trailing_metadata_, error);
275
274
  channelz::SubchannelNode* channelz_subchannel =
276
275
  call->connected_subchannel_->channelz_subchannel();
277
276
  GPR_ASSERT(channelz_subchannel != nullptr);
@@ -280,8 +279,7 @@ void SubchannelCall::RecvTrailingMetadataReady(void* arg,
280
279
  } else {
281
280
  channelz_subchannel->RecordCallFailed();
282
281
  }
283
- Closure::Run(DEBUG_LOCATION, call->original_recv_trailing_metadata_,
284
- GRPC_ERROR_REF(error));
282
+ Closure::Run(DEBUG_LOCATION, call->original_recv_trailing_metadata_, error);
285
283
  }
286
284
 
287
285
  void SubchannelCall::IncrementRefCount() {
@@ -365,7 +363,7 @@ class Subchannel::AsyncWatcherNotifierLocked {
365
363
  delete self;
366
364
  },
367
365
  this, nullptr),
368
- GRPC_ERROR_NONE);
366
+ absl::OkStatus());
369
367
  }
370
368
 
371
369
  private:
@@ -627,7 +625,8 @@ Subchannel::Subchannel(SubchannelKey key,
627
625
  args_(args),
628
626
  pollset_set_(grpc_pollset_set_create()),
629
627
  connector_(std::move(connector)),
630
- backoff_(ParseArgsForBackoffValues(args_, &min_connect_timeout_)) {
628
+ backoff_(ParseArgsForBackoffValues(args_, &min_connect_timeout_)),
629
+ event_engine_(args_.GetObjectRef<EventEngine>()) {
631
630
  // A grpc_init is added here to ensure that grpc_shutdown does not happen
632
631
  // until the subchannel is destroyed. Subchannels can persist longer than
633
632
  // channels because they maybe reused/shared among multiple channels. As a
@@ -637,7 +636,7 @@ Subchannel::Subchannel(SubchannelKey key,
637
636
  // triggering segmentation faults. To prevent this issue, we call a grpc_init
638
637
  // here and a grpc_shutdown in the subchannel destructor.
639
638
  InitInternally();
640
- GRPC_STATS_INC_CLIENT_SUBCHANNELS_CREATED();
639
+ global_stats().IncrementClientSubchannelsCreated();
641
640
  GRPC_CLOSURE_INIT(&on_connecting_finished_, OnConnectingFinished, this,
642
641
  grpc_schedule_on_exec_ctx);
643
642
  // Check proxy mapper to determine address to connect to and channel
@@ -764,7 +763,7 @@ void Subchannel::ResetBackoff() {
764
763
  MutexLock lock(&mu_);
765
764
  backoff_.Reset();
766
765
  if (state_ == GRPC_CHANNEL_TRANSIENT_FAILURE &&
767
- GetDefaultEventEngine()->Cancel(retry_timer_handle_)) {
766
+ event_engine_->Cancel(retry_timer_handle_)) {
768
767
  OnRetryTimerLocked();
769
768
  } else if (state_ == GRPC_CHANNEL_CONNECTING) {
770
769
  next_attempt_time_ = Timestamp::Now();
@@ -889,14 +888,13 @@ void Subchannel::OnConnectingFinished(void* arg, grpc_error_handle error) {
889
888
  WeakRefCountedPtr<Subchannel> c(static_cast<Subchannel*>(arg));
890
889
  {
891
890
  MutexLock lock(&c->mu_);
892
- c->OnConnectingFinishedLocked(GRPC_ERROR_REF(error));
891
+ c->OnConnectingFinishedLocked(error);
893
892
  }
894
893
  c.reset(DEBUG_LOCATION, "Connect");
895
894
  }
896
895
 
897
896
  void Subchannel::OnConnectingFinishedLocked(grpc_error_handle error) {
898
897
  if (shutdown_) {
899
- (void)GRPC_ERROR_UNREF(error);
900
898
  return;
901
899
  }
902
900
  // If we didn't get a transport or we fail to publish it, report
@@ -910,11 +908,11 @@ void Subchannel::OnConnectingFinishedLocked(grpc_error_handle error) {
910
908
  gpr_log(GPR_INFO,
911
909
  "subchannel %p %s: connect failed (%s), backing off for %" PRId64
912
910
  " ms",
913
- this, key_.ToString().c_str(), grpc_error_std_string(error).c_str(),
911
+ this, key_.ToString().c_str(), StatusToString(error).c_str(),
914
912
  time_until_next_attempt.millis());
915
913
  SetConnectivityStateLocked(GRPC_CHANNEL_TRANSIENT_FAILURE,
916
914
  grpc_error_to_absl_status(error));
917
- retry_timer_handle_ = GetDefaultEventEngine()->RunAfter(
915
+ retry_timer_handle_ = event_engine_->RunAfter(
918
916
  time_until_next_attempt,
919
917
  [self = WeakRef(DEBUG_LOCATION, "RetryTimer")]() mutable {
920
918
  {
@@ -931,14 +929,13 @@ void Subchannel::OnConnectingFinishedLocked(grpc_error_handle error) {
931
929
  }
932
930
  });
933
931
  }
934
- (void)GRPC_ERROR_UNREF(error);
935
932
  }
936
933
 
937
934
  bool Subchannel::PublishTransportLocked() {
938
935
  // Construct channel stack.
939
- ChannelStackBuilderImpl builder("subchannel", GRPC_CLIENT_SUBCHANNEL);
940
- builder.SetChannelArgs(connecting_result_.channel_args)
941
- .SetTransport(connecting_result_.transport);
936
+ ChannelStackBuilderImpl builder("subchannel", GRPC_CLIENT_SUBCHANNEL,
937
+ connecting_result_.channel_args);
938
+ builder.SetTransport(connecting_result_.transport);
942
939
  if (!CoreConfiguration::Get().channel_init().CreateStack(&builder)) {
943
940
  return false;
944
941
  }
@@ -948,8 +945,7 @@ bool Subchannel::PublishTransportLocked() {
948
945
  grpc_transport_destroy(connecting_result_.transport);
949
946
  gpr_log(GPR_ERROR,
950
947
  "subchannel %p %s: error initializing subchannel stack: %s", this,
951
- key_.ToString().c_str(), grpc_error_std_string(error).c_str());
952
- GRPC_ERROR_UNREF(error);
948
+ key_.ToString().c_str(), StatusToString(error).c_str());
953
949
  return false;
954
950
  }
955
951
  RefCountedPtr<channelz::SocketNode> socket =
@@ -24,6 +24,7 @@
24
24
  #include <deque>
25
25
  #include <functional>
26
26
  #include <map>
27
+ #include <memory>
27
28
  #include <string>
28
29
 
29
30
  #include "absl/base/thread_annotations.h"
@@ -239,8 +240,6 @@ class Subchannel : public DualRefCounted<Subchannel> {
239
240
 
240
241
  grpc_pollset_set* pollset_set() const { return pollset_set_; }
241
242
 
242
- const ChannelArgs& channel_args() const { return args_; }
243
-
244
243
  channelz::SubchannelNode* channelz_node();
245
244
 
246
245
  // Starts watching the subchannel's connectivity state.
@@ -428,6 +427,7 @@ class Subchannel : public DualRefCounted<Subchannel> {
428
427
  // Data producer map.
429
428
  std::map<UniqueTypeName, DataProducerInterface*> data_producer_map_
430
429
  ABSL_GUARDED_BY(mu_);
430
+ std::shared_ptr<grpc_event_engine::experimental::EventEngine> event_engine_;
431
431
  };
432
432
 
433
433
  } // namespace grpc_core
@@ -30,6 +30,7 @@
30
30
  #include "src/core/lib/channel/channel_args.h"
31
31
  #include "src/core/lib/gpr/time_precise.h"
32
32
  #include "src/core/lib/gprpp/debug_location.h"
33
+ #include "src/core/lib/gprpp/status_helper.h"
33
34
  #include "src/core/lib/gprpp/sync.h"
34
35
  #include "src/core/lib/gprpp/time.h"
35
36
  #include "src/core/lib/resource_quota/resource_quota.h"
@@ -146,7 +147,7 @@ void SubchannelStreamClient::OnRetryTimer(void* arg, grpc_error_handle error) {
146
147
  {
147
148
  MutexLock lock(&self->mu_);
148
149
  self->retry_timer_callback_pending_ = false;
149
- if (self->event_handler_ != nullptr && GRPC_ERROR_IS_NONE(error) &&
150
+ if (self->event_handler_ != nullptr && error.ok() &&
150
151
  self->call_state_ == nullptr) {
151
152
  if (GPR_UNLIKELY(self->tracer_ != nullptr)) {
152
153
  gpr_log(GPR_INFO,
@@ -196,7 +197,7 @@ SubchannelStreamClient::CallState::~CallState() {
196
197
  }
197
198
 
198
199
  void SubchannelStreamClient::CallState::Orphan() {
199
- call_combiner_.Cancel(GRPC_ERROR_CANCELLED);
200
+ call_combiner_.Cancel(absl::CancelledError());
200
201
  Cancel();
201
202
  }
202
203
 
@@ -211,21 +212,19 @@ void SubchannelStreamClient::CallState::StartCallLocked() {
211
212
  context_,
212
213
  &call_combiner_,
213
214
  };
214
- grpc_error_handle error = GRPC_ERROR_NONE;
215
+ grpc_error_handle error;
215
216
  call_ = SubchannelCall::Create(std::move(args), &error).release();
216
217
  // Register after-destruction callback.
217
218
  GRPC_CLOSURE_INIT(&after_call_stack_destruction_, AfterCallStackDestruction,
218
219
  this, grpc_schedule_on_exec_ctx);
219
220
  call_->SetAfterCallStackDestroy(&after_call_stack_destruction_);
220
221
  // Check if creation failed.
221
- if (!GRPC_ERROR_IS_NONE(error) ||
222
- subchannel_stream_client_->event_handler_ == nullptr) {
222
+ if (!error.ok() || subchannel_stream_client_->event_handler_ == nullptr) {
223
223
  gpr_log(GPR_ERROR,
224
224
  "SubchannelStreamClient %p CallState %p: error creating "
225
225
  "stream on subchannel (%s); will retry",
226
226
  subchannel_stream_client_.get(), this,
227
- grpc_error_std_string(error).c_str());
228
- GRPC_ERROR_UNREF(error);
227
+ StatusToString(error).c_str());
229
228
  CallEndedLocked(/*retry=*/true);
230
229
  return;
231
230
  }
@@ -240,7 +239,7 @@ void SubchannelStreamClient::CallState::StartCallLocked() {
240
239
  send_initial_metadata_.Set(
241
240
  HttpPathMetadata(),
242
241
  subchannel_stream_client_->event_handler_->GetPathLocked());
243
- GPR_ASSERT(GRPC_ERROR_IS_NONE(error));
242
+ GPR_ASSERT(error.ok());
244
243
  payload_.send_initial_metadata.send_initial_metadata =
245
244
  &send_initial_metadata_;
246
245
  payload_.send_initial_metadata.peer_string = nullptr;
@@ -306,7 +305,7 @@ void SubchannelStreamClient::CallState::StartBatch(
306
305
  GRPC_CLOSURE_INIT(&batch->handler_private.closure, StartBatchInCallCombiner,
307
306
  batch, grpc_schedule_on_exec_ctx);
308
307
  GRPC_CALL_COMBINER_START(&call_combiner_, &batch->handler_private.closure,
309
- GRPC_ERROR_NONE, "start_subchannel_batch");
308
+ absl::OkStatus(), "start_subchannel_batch");
310
309
  }
311
310
 
312
311
  void SubchannelStreamClient::CallState::AfterCallStackDestruction(
@@ -328,7 +327,7 @@ void SubchannelStreamClient::CallState::StartCancel(
328
327
  auto* batch = grpc_make_transport_stream_op(
329
328
  GRPC_CLOSURE_CREATE(OnCancelComplete, self, grpc_schedule_on_exec_ctx));
330
329
  batch->cancel_stream = true;
331
- batch->payload->cancel_stream.cancel_error = GRPC_ERROR_CANCELLED;
330
+ batch->payload->cancel_stream.cancel_error = absl::CancelledError();
332
331
  self->call_->StartTransportStreamOpBatch(batch);
333
332
  }
334
333
 
@@ -341,7 +340,7 @@ void SubchannelStreamClient::CallState::Cancel() {
341
340
  GRPC_CALL_COMBINER_START(
342
341
  &call_combiner_,
343
342
  GRPC_CLOSURE_CREATE(StartCancel, this, grpc_schedule_on_exec_ctx),
344
- GRPC_ERROR_NONE, "health_cancel");
343
+ absl::OkStatus(), "health_cancel");
345
344
  }
346
345
  }
347
346
 
@@ -418,7 +417,7 @@ void SubchannelStreamClient::CallState::RecvTrailingMetadataReady(
418
417
  grpc_status_code status =
419
418
  self->recv_trailing_metadata_.get(GrpcStatusMetadata())
420
419
  .value_or(GRPC_STATUS_UNKNOWN);
421
- if (!GRPC_ERROR_IS_NONE(error)) {
420
+ if (!error.ok()) {
422
421
  grpc_error_get_status(error, Timestamp::InfFuture(), &status,
423
422
  nullptr /* slice */, nullptr /* http_error */,
424
423
  nullptr /* error_string */);
@@ -31,6 +31,7 @@
31
31
  #include "src/core/lib/channel/channel_stack_builder.h"
32
32
  #include "src/core/lib/config/core_configuration.h"
33
33
  #include "src/core/lib/gprpp/debug_location.h"
34
+ #include "src/core/lib/gprpp/status_helper.h"
34
35
  #include "src/core/lib/iomgr/error.h"
35
36
  #include "src/core/lib/iomgr/exec_ctx.h"
36
37
  #include "src/core/lib/iomgr/timer.h"
@@ -73,7 +74,7 @@ class TimerState {
73
74
  grpc_transport_stream_op_batch* batch = grpc_make_transport_stream_op(
74
75
  GRPC_CLOSURE_INIT(&self->closure_, YieldCallCombiner, self, nullptr));
75
76
  batch->cancel_stream = true;
76
- batch->payload->cancel_stream.cancel_error = GRPC_ERROR_REF(error);
77
+ batch->payload->cancel_stream.cancel_error = error;
77
78
  self->elem_->filter->start_transport_stream_op_batch(self->elem_, batch);
78
79
  }
79
80
 
@@ -82,11 +83,11 @@ class TimerState {
82
83
  TimerState* self = static_cast<TimerState*>(arg);
83
84
  grpc_deadline_state* deadline_state =
84
85
  static_cast<grpc_deadline_state*>(self->elem_->call_data);
85
- if (error != GRPC_ERROR_CANCELLED) {
86
- error = grpc_error_set_int(
87
- GRPC_ERROR_CREATE_FROM_STATIC_STRING("Deadline Exceeded"),
88
- GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_DEADLINE_EXCEEDED);
89
- deadline_state->call_combiner->Cancel(GRPC_ERROR_REF(error));
86
+ if (error != absl::CancelledError()) {
87
+ error = grpc_error_set_int(GRPC_ERROR_CREATE("Deadline Exceeded"),
88
+ StatusIntProperty::kRpcStatus,
89
+ GRPC_STATUS_DEADLINE_EXCEEDED);
90
+ deadline_state->call_combiner->Cancel(error);
90
91
  GRPC_CLOSURE_INIT(&self->closure_, SendCancelOpInCallCombiner, self,
91
92
  nullptr);
92
93
  GRPC_CALL_COMBINER_START(deadline_state->call_combiner, &self->closure_,
@@ -145,7 +146,7 @@ static void recv_trailing_metadata_ready(void* arg, grpc_error_handle error) {
145
146
  // Invoke the original callback.
146
147
  grpc_core::Closure::Run(DEBUG_LOCATION,
147
148
  deadline_state->original_recv_trailing_metadata_ready,
148
- GRPC_ERROR_REF(error));
149
+ error);
149
150
  }
150
151
 
151
152
  // Inject our own recv_trailing_metadata_ready callback into op.
@@ -183,8 +184,7 @@ static void start_timer_after_init(void* arg, grpc_error_handle error) {
183
184
  // need to bounce ourselves into it.
184
185
  state->in_call_combiner = true;
185
186
  GRPC_CALL_COMBINER_START(deadline_state->call_combiner, &state->closure,
186
- GRPC_ERROR_REF(error),
187
- "scheduling deadline timer");
187
+ error, "scheduling deadline timer");
188
188
  return;
189
189
  }
190
190
  delete state;
@@ -212,7 +212,7 @@ grpc_deadline_state::grpc_deadline_state(grpc_call_element* elem,
212
212
  new start_timer_after_init_state(elem, deadline);
213
213
  GRPC_CLOSURE_INIT(&state->closure, start_timer_after_init, state,
214
214
  grpc_schedule_on_exec_ctx);
215
- grpc_core::ExecCtx::Run(DEBUG_LOCATION, &state->closure, GRPC_ERROR_NONE);
215
+ grpc_core::ExecCtx::Run(DEBUG_LOCATION, &state->closure, absl::OkStatus());
216
216
  }
217
217
  }
218
218
 
@@ -249,7 +249,7 @@ void grpc_deadline_state_client_start_transport_stream_op_batch(
249
249
  static grpc_error_handle deadline_init_channel_elem(
250
250
  grpc_channel_element* /*elem*/, grpc_channel_element_args* args) {
251
251
  GPR_ASSERT(!args->is_last);
252
- return GRPC_ERROR_NONE;
252
+ return absl::OkStatus();
253
253
  }
254
254
 
255
255
  // Destructor for channel_data. Used for both client and server filters.
@@ -276,7 +276,7 @@ typedef struct server_call_data {
276
276
  static grpc_error_handle deadline_init_call_elem(
277
277
  grpc_call_element* elem, const grpc_call_element_args* args) {
278
278
  new (elem->call_data) grpc_deadline_state(elem, *args, args->deadline);
279
- return GRPC_ERROR_NONE;
279
+ return absl::OkStatus();
280
280
  }
281
281
 
282
282
  // Destructor for call_data. Used for both client and server filters.
@@ -305,8 +305,7 @@ static void recv_initial_metadata_ready(void* arg, grpc_error_handle error) {
305
305
  .value_or(grpc_core::Timestamp::InfFuture()));
306
306
  // Invoke the next callback.
307
307
  grpc_core::Closure::Run(DEBUG_LOCATION,
308
- calld->next_recv_initial_metadata_ready,
309
- GRPC_ERROR_REF(error));
308
+ calld->next_recv_initial_metadata_ready, error);
310
309
  }
311
310
 
312
311
  // Method for starting a call op for server filter.
@@ -35,7 +35,7 @@
35
35
  #include <grpc/status.h>
36
36
  #include <grpc/support/log.h>
37
37
 
38
- #include "src/core/ext/filters/fault_injection/service_config_parser.h"
38
+ #include "src/core/ext/filters/fault_injection/fault_injection_service_config_parser.h"
39
39
  #include "src/core/lib/channel/channel_stack.h"
40
40
  #include "src/core/lib/channel/context.h"
41
41
  #include "src/core/lib/channel/status_util.h"
@@ -34,10 +34,6 @@
34
34
  #include "src/core/lib/promise/arena_promise.h"
35
35
  #include "src/core/lib/transport/transport.h"
36
36
 
37
- // Channel arg key for enabling parsing fault injection via method config.
38
- #define GRPC_ARG_PARSE_FAULT_INJECTION_METHOD_CONFIG \
39
- "grpc.parse_fault_injection_method_config"
40
-
41
37
  namespace grpc_core {
42
38
 
43
39
  // This channel filter is intended to be used by the dynamic filters, instead
@@ -0,0 +1,118 @@
1
+ //
2
+ // Copyright 2021 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/fault_injection/fault_injection_service_config_parser.h"
20
+
21
+ #include <vector>
22
+
23
+ #include "absl/types/optional.h"
24
+
25
+ #include "src/core/lib/channel/channel_args.h"
26
+ #include "src/core/lib/channel/status_util.h"
27
+
28
+ namespace grpc_core {
29
+
30
+ const JsonLoaderInterface*
31
+ FaultInjectionMethodParsedConfig::FaultInjectionPolicy::JsonLoader(
32
+ const JsonArgs&) {
33
+ static const auto* loader =
34
+ JsonObjectLoader<FaultInjectionPolicy>()
35
+ .OptionalField("abortMessage", &FaultInjectionPolicy::abort_message)
36
+ .OptionalField("abortCodeHeader",
37
+ &FaultInjectionPolicy::abort_code_header)
38
+ .OptionalField("abortPercentageHeader",
39
+ &FaultInjectionPolicy::abort_percentage_header)
40
+ .OptionalField("abortPercentageNumerator",
41
+ &FaultInjectionPolicy::abort_percentage_numerator)
42
+ .OptionalField("abortPercentageDenominator",
43
+ &FaultInjectionPolicy::abort_percentage_denominator)
44
+ .OptionalField("delay", &FaultInjectionPolicy::delay)
45
+ .OptionalField("delayHeader", &FaultInjectionPolicy::delay_header)
46
+ .OptionalField("delayPercentageHeader",
47
+ &FaultInjectionPolicy::delay_percentage_header)
48
+ .OptionalField("delayPercentageNumerator",
49
+ &FaultInjectionPolicy::delay_percentage_numerator)
50
+ .OptionalField("delayPercentageDenominator",
51
+ &FaultInjectionPolicy::delay_percentage_denominator)
52
+ .OptionalField("maxFaults", &FaultInjectionPolicy::max_faults)
53
+ .Finish();
54
+ return loader;
55
+ }
56
+
57
+ void FaultInjectionMethodParsedConfig::FaultInjectionPolicy::JsonPostLoad(
58
+ const Json& json, const JsonArgs& args, ValidationErrors* errors) {
59
+ // Parse abort_code.
60
+ auto abort_code_string = LoadJsonObjectField<std::string>(
61
+ json.object_value(), args, "abortCode", errors, /*required=*/false);
62
+ if (abort_code_string.has_value() &&
63
+ !grpc_status_code_from_string(abort_code_string->c_str(), &abort_code)) {
64
+ ValidationErrors::ScopedField field(errors, ".abortCode");
65
+ errors->AddError("failed to parse status code");
66
+ }
67
+ // Validate abort_percentage_denominator.
68
+ if (abort_percentage_denominator != 100 &&
69
+ abort_percentage_denominator != 10000 &&
70
+ abort_percentage_denominator != 1000000) {
71
+ ValidationErrors::ScopedField field(errors, ".abortPercentageDenominator");
72
+ errors->AddError("must be one of 100, 10000, or 1000000");
73
+ }
74
+ // Validate delay_percentage_denominator.
75
+ if (delay_percentage_denominator != 100 &&
76
+ delay_percentage_denominator != 10000 &&
77
+ delay_percentage_denominator != 1000000) {
78
+ ValidationErrors::ScopedField field(errors, ".delayPercentageDenominator");
79
+ errors->AddError("must be one of 100, 10000, or 1000000");
80
+ }
81
+ }
82
+
83
+ const JsonLoaderInterface* FaultInjectionMethodParsedConfig::JsonLoader(
84
+ const JsonArgs&) {
85
+ static const auto* loader =
86
+ JsonObjectLoader<FaultInjectionMethodParsedConfig>()
87
+ .OptionalField(
88
+ "faultInjectionPolicy",
89
+ &FaultInjectionMethodParsedConfig::fault_injection_policies_)
90
+ .Finish();
91
+ return loader;
92
+ }
93
+
94
+ std::unique_ptr<ServiceConfigParser::ParsedConfig>
95
+ FaultInjectionServiceConfigParser::ParsePerMethodParams(
96
+ const ChannelArgs& args, const Json& json, ValidationErrors* errors) {
97
+ // Only parse fault injection policy if the following channel arg is present.
98
+ if (!args.GetBool(GRPC_ARG_PARSE_FAULT_INJECTION_METHOD_CONFIG)
99
+ .value_or(false)) {
100
+ return nullptr;
101
+ }
102
+ // Parse fault injection policy from given Json
103
+ return LoadFromJson<std::unique_ptr<FaultInjectionMethodParsedConfig>>(
104
+ json, JsonArgs(), errors);
105
+ }
106
+
107
+ void FaultInjectionServiceConfigParser::Register(
108
+ CoreConfiguration::Builder* builder) {
109
+ builder->service_config_parser()->RegisterParser(
110
+ std::make_unique<FaultInjectionServiceConfigParser>());
111
+ }
112
+
113
+ size_t FaultInjectionServiceConfigParser::ParserIndex() {
114
+ return CoreConfiguration::Get().service_config_parser().GetParserIndex(
115
+ parser_name());
116
+ }
117
+
118
+ } // namespace grpc_core
@@ -14,8 +14,8 @@
14
14
  // limitations under the License.
15
15
  //
16
16
 
17
- #ifndef GRPC_CORE_EXT_FILTERS_FAULT_INJECTION_SERVICE_CONFIG_PARSER_H
18
- #define GRPC_CORE_EXT_FILTERS_FAULT_INJECTION_SERVICE_CONFIG_PARSER_H
17
+ #ifndef GRPC_CORE_EXT_FILTERS_FAULT_INJECTION_FAULT_INJECTION_SERVICE_CONFIG_PARSER_H
18
+ #define GRPC_CORE_EXT_FILTERS_FAULT_INJECTION_FAULT_INJECTION_SERVICE_CONFIG_PARSER_H
19
19
 
20
20
  #include <grpc/support/port_platform.h>
21
21
 
@@ -25,10 +25,8 @@
25
25
  #include <limits>
26
26
  #include <memory>
27
27
  #include <string>
28
- #include <utility>
29
28
  #include <vector>
30
29
 
31
- #include "absl/status/statusor.h"
32
30
  #include "absl/strings/string_view.h"
33
31
 
34
32
  #include <grpc/status.h>
@@ -36,9 +34,16 @@
36
34
  #include "src/core/lib/channel/channel_args.h"
37
35
  #include "src/core/lib/config/core_configuration.h"
38
36
  #include "src/core/lib/gprpp/time.h"
37
+ #include "src/core/lib/gprpp/validation_errors.h"
39
38
  #include "src/core/lib/json/json.h"
39
+ #include "src/core/lib/json/json_args.h"
40
+ #include "src/core/lib/json/json_object_loader.h"
40
41
  #include "src/core/lib/service_config/service_config_parser.h"
41
42
 
43
+ // Channel arg key for enabling parsing fault injection via method config.
44
+ #define GRPC_ARG_PARSE_FAULT_INJECTION_METHOD_CONFIG \
45
+ "grpc.internal.parse_fault_injection_method_config"
46
+
42
47
  namespace grpc_core {
43
48
 
44
49
  class FaultInjectionMethodParsedConfig
@@ -46,7 +51,7 @@ class FaultInjectionMethodParsedConfig
46
51
  public:
47
52
  struct FaultInjectionPolicy {
48
53
  grpc_status_code abort_code = GRPC_STATUS_OK;
49
- std::string abort_message;
54
+ std::string abort_message = "Fault injected";
50
55
  std::string abort_code_header;
51
56
  std::string abort_percentage_header;
52
57
  uint32_t abort_percentage_numerator = 0;
@@ -60,11 +65,11 @@ class FaultInjectionMethodParsedConfig
60
65
 
61
66
  // By default, the max allowed active faults are unlimited.
62
67
  uint32_t max_faults = std::numeric_limits<uint32_t>::max();
63
- };
64
68
 
65
- explicit FaultInjectionMethodParsedConfig(
66
- std::vector<FaultInjectionPolicy> fault_injection_policies)
67
- : fault_injection_policies_(std::move(fault_injection_policies)) {}
69
+ static const JsonLoaderInterface* JsonLoader(const JsonArgs&);
70
+ void JsonPostLoad(const Json& json, const JsonArgs&,
71
+ ValidationErrors* errors);
72
+ };
68
73
 
69
74
  // Returns the fault injection policy at certain index.
70
75
  // There might be multiple fault injection policies functioning at the same
@@ -79,6 +84,8 @@ class FaultInjectionMethodParsedConfig
79
84
  return &fault_injection_policies_[index];
80
85
  }
81
86
 
87
+ static const JsonLoaderInterface* JsonLoader(const JsonArgs&);
88
+
82
89
  private:
83
90
  std::vector<FaultInjectionPolicy> fault_injection_policies_;
84
91
  };
@@ -88,8 +95,9 @@ class FaultInjectionServiceConfigParser final
88
95
  public:
89
96
  absl::string_view name() const override { return parser_name(); }
90
97
  // Parses the per-method service config for fault injection filter.
91
- absl::StatusOr<std::unique_ptr<ServiceConfigParser::ParsedConfig>>
92
- ParsePerMethodParams(const ChannelArgs& args, const Json& json) override;
98
+ std::unique_ptr<ServiceConfigParser::ParsedConfig> ParsePerMethodParams(
99
+ const ChannelArgs& args, const Json& json,
100
+ ValidationErrors* errors) override;
93
101
  // Returns the parser index for FaultInjectionServiceConfigParser.
94
102
  static size_t ParserIndex();
95
103
  // Registers FaultInjectionServiceConfigParser to ServiceConfigParser.
@@ -101,4 +109,4 @@ class FaultInjectionServiceConfigParser final
101
109
 
102
110
  } // namespace grpc_core
103
111
 
104
- #endif // GRPC_CORE_EXT_FILTERS_FAULT_INJECTION_SERVICE_CONFIG_PARSER_H
112
+ #endif // GRPC_CORE_EXT_FILTERS_FAULT_INJECTION_FAULT_INJECTION_SERVICE_CONFIG_PARSER_H