grpc 1.46.2 → 1.48.0.pre1

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 (810) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +138 -128
  3. data/include/grpc/compression.h +1 -1
  4. data/include/grpc/event_engine/event_engine.h +62 -18
  5. data/include/grpc/event_engine/memory_allocator.h +0 -15
  6. data/include/grpc/event_engine/port.h +1 -1
  7. data/include/grpc/event_engine/slice.h +286 -0
  8. data/include/grpc/event_engine/slice_buffer.h +118 -0
  9. data/include/grpc/grpc.h +3 -3
  10. data/include/grpc/grpc_security.h +11 -0
  11. data/include/grpc/impl/codegen/compression_types.h +2 -1
  12. data/include/grpc/impl/codegen/connectivity_state.h +2 -1
  13. data/include/grpc/impl/codegen/gpr_types.h +2 -1
  14. data/include/grpc/impl/codegen/grpc_types.h +2 -1
  15. data/include/grpc/impl/codegen/port_platform.h +106 -39
  16. data/include/grpc/impl/codegen/slice.h +1 -1
  17. data/src/core/ext/filters/census/grpc_context.cc +3 -0
  18. data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +35 -35
  19. data/src/core/ext/filters/channel_idle/channel_idle_filter.h +20 -1
  20. data/src/core/ext/filters/channel_idle/idle_filter_state.h +2 -0
  21. data/src/core/ext/filters/client_channel/backend_metric.cc +17 -12
  22. data/src/core/ext/filters/client_channel/backend_metric.h +19 -9
  23. data/src/core/ext/filters/client_channel/backup_poller.cc +8 -6
  24. data/src/core/ext/filters/client_channel/backup_poller.h +2 -4
  25. data/src/core/ext/filters/client_channel/channel_connectivity.cc +43 -21
  26. data/src/core/ext/filters/client_channel/client_channel.cc +111 -82
  27. data/src/core/ext/filters/client_channel/client_channel.h +43 -8
  28. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +3 -5
  29. data/src/core/ext/filters/client_channel/client_channel_channelz.h +12 -2
  30. data/src/core/ext/filters/client_channel/client_channel_factory.cc +5 -0
  31. data/src/core/ext/filters/client_channel/client_channel_factory.h +8 -0
  32. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +4 -13
  33. data/src/core/ext/filters/client_channel/config_selector.cc +1 -0
  34. data/src/core/ext/filters/client_channel/config_selector.h +8 -6
  35. data/src/core/ext/filters/client_channel/connector.h +9 -3
  36. data/src/core/ext/filters/client_channel/dynamic_filters.cc +19 -6
  37. data/src/core/ext/filters/client_channel/dynamic_filters.h +12 -2
  38. data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +2 -0
  39. data/src/core/ext/filters/client_channel/global_subchannel_pool.h +3 -0
  40. data/src/core/ext/filters/client_channel/health/health_check_client.cc +14 -1
  41. data/src/core/ext/filters/client_channel/health/health_check_client.h +2 -0
  42. data/src/core/ext/filters/client_channel/http_proxy.cc +10 -2
  43. data/src/core/ext/filters/client_channel/http_proxy.h +3 -0
  44. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +6 -2
  45. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +1 -0
  46. data/src/core/ext/filters/client_channel/lb_policy/backend_metric_data.h +49 -0
  47. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +12 -0
  48. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +5 -0
  49. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +11 -5
  50. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +1 -0
  51. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +132 -62
  52. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +4 -0
  53. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +6 -0
  54. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +10 -1
  55. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +6 -3
  56. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +407 -0
  57. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.h +57 -0
  58. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +1036 -0
  59. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +54 -0
  60. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +149 -147
  61. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +176 -85
  62. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +303 -203
  63. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +6 -1
  64. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +92 -54
  65. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +240 -214
  66. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +119 -111
  67. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +86 -71
  68. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +101 -25
  69. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +6 -0
  70. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +35 -11
  71. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +36 -20
  72. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +78 -14
  73. data/src/core/ext/filters/client_channel/lb_policy.cc +4 -2
  74. data/src/core/ext/filters/client_channel/lb_policy.h +18 -31
  75. data/src/core/ext/filters/client_channel/lb_policy_factory.h +2 -0
  76. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +11 -6
  77. data/src/core/ext/filters/client_channel/lb_policy_registry.h +6 -1
  78. data/src/core/ext/filters/client_channel/local_subchannel_pool.cc +4 -0
  79. data/src/core/ext/filters/client_channel/local_subchannel_pool.h +1 -0
  80. data/src/core/ext/filters/client_channel/proxy_mapper.h +1 -1
  81. data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +1 -0
  82. data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +5 -0
  83. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +26 -6
  84. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +139 -48
  85. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +8 -1
  86. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +10 -8
  87. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +6 -6
  88. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +36 -14
  89. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +13 -4
  90. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +2 -1
  91. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.cc +2 -0
  92. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.h +2 -1
  93. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +39 -7
  94. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +18 -19
  95. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +5 -2
  96. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +61 -16
  97. data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +14 -2
  98. data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +8 -1
  99. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +17 -12
  100. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +111 -46
  101. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +3 -1
  102. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +12 -18
  103. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +11 -5
  104. data/src/core/ext/filters/client_channel/retry_filter.cc +75 -36
  105. data/src/core/ext/filters/client_channel/retry_filter.h +1 -0
  106. data/src/core/ext/filters/client_channel/retry_service_config.cc +12 -13
  107. data/src/core/ext/filters/client_channel/retry_service_config.h +10 -1
  108. data/src/core/ext/filters/client_channel/retry_throttle.cc +1 -8
  109. data/src/core/ext/filters/client_channel/retry_throttle.h +7 -1
  110. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +24 -6
  111. data/src/core/ext/filters/client_channel/subchannel.cc +186 -187
  112. data/src/core/ext/filters/client_channel/subchannel.h +80 -36
  113. data/src/core/ext/filters/client_channel/subchannel_interface.h +51 -41
  114. data/src/core/ext/filters/client_channel/subchannel_interface_internal.h +38 -0
  115. data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +12 -2
  116. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +6 -3
  117. data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +24 -95
  118. data/src/core/ext/filters/client_channel/subchannel_stream_client.h +17 -9
  119. data/src/core/ext/filters/deadline/deadline_filter.cc +18 -9
  120. data/src/core/ext/filters/deadline/deadline_filter.h +8 -1
  121. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +22 -6
  122. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +8 -3
  123. data/src/core/ext/filters/fault_injection/service_config_parser.cc +7 -4
  124. data/src/core/ext/filters/fault_injection/service_config_parser.h +17 -3
  125. data/src/core/ext/filters/http/client/http_client_filter.cc +30 -10
  126. data/src/core/ext/filters/http/client/http_client_filter.h +15 -2
  127. data/src/core/ext/filters/http/client_authority_filter.cc +16 -20
  128. data/src/core/ext/filters/http/client_authority_filter.h +5 -2
  129. data/src/core/ext/filters/http/http_filters_plugin.cc +16 -9
  130. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +65 -187
  131. data/src/core/ext/filters/http/message_compress/message_compress_filter.h +1 -2
  132. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +45 -107
  133. data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +1 -0
  134. data/src/core/ext/filters/http/server/http_server_filter.cc +95 -255
  135. data/src/core/ext/filters/http/server/http_server_filter.h +37 -3
  136. data/src/core/ext/filters/message_size/message_size_filter.cc +45 -41
  137. data/src/core/ext/filters/message_size/message_size_filter.h +15 -2
  138. data/src/core/ext/filters/rbac/rbac_filter.cc +15 -3
  139. data/src/core/ext/filters/rbac/rbac_filter.h +8 -0
  140. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +13 -2
  141. data/src/core/ext/filters/rbac/rbac_service_config_parser.h +14 -2
  142. data/src/core/ext/filters/server_config_selector/server_config_selector.cc +1 -0
  143. data/src/core/ext/filters/server_config_selector/server_config_selector.h +9 -0
  144. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +22 -2
  145. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.h +1 -0
  146. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +104 -138
  147. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +9 -7
  148. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +58 -29
  149. data/src/core/ext/transport/chttp2/server/chttp2_server.h +2 -0
  150. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +3 -3
  151. data/src/core/ext/transport/chttp2/transport/bin_decoder.h +2 -1
  152. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +1 -0
  153. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +260 -491
  154. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +6 -1
  155. data/src/core/ext/transport/chttp2/transport/context_list.cc +4 -0
  156. data/src/core/ext/transport/chttp2/transport/context_list.h +4 -1
  157. data/src/core/ext/transport/chttp2/transport/flow_control.cc +145 -261
  158. data/src/core/ext/transport/chttp2/transport/flow_control.h +179 -288
  159. data/src/core/ext/transport/chttp2/transport/frame.h +0 -4
  160. data/src/core/ext/transport/chttp2/transport/frame_data.cc +59 -211
  161. data/src/core/ext/transport/chttp2/transport/frame_data.h +13 -36
  162. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +3 -0
  163. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +3 -1
  164. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +5 -0
  165. data/src/core/ext/transport/chttp2/transport/frame_ping.h +3 -0
  166. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +6 -2
  167. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +3 -0
  168. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +10 -42
  169. data/src/core/ext/transport/chttp2/transport/frame_settings.h +4 -0
  170. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +10 -12
  171. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +3 -0
  172. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +14 -12
  173. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +15 -2
  174. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +3 -0
  175. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +3 -0
  176. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +32 -13
  177. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +8 -1
  178. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +53 -37
  179. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +38 -21
  180. data/src/core/ext/transport/chttp2/transport/http2_settings.h +0 -1
  181. data/src/core/ext/transport/chttp2/transport/internal.h +31 -112
  182. data/src/core/ext/transport/chttp2/transport/parsing.cc +77 -43
  183. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +11 -11
  184. data/src/core/ext/transport/chttp2/transport/stream_map.cc +1 -1
  185. data/src/core/ext/transport/chttp2/transport/stream_map.h +1 -0
  186. data/src/core/ext/transport/chttp2/transport/varint.h +2 -0
  187. data/src/core/ext/transport/chttp2/transport/writing.cc +54 -21
  188. data/src/core/ext/transport/inproc/inproc_plugin.cc +0 -1
  189. data/src/core/ext/transport/inproc/inproc_transport.cc +93 -86
  190. data/src/core/ext/transport/inproc/inproc_transport.h +3 -1
  191. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.c +52 -0
  192. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h +164 -0
  193. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.c +46 -0
  194. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.h +94 -0
  195. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.c +47 -0
  196. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.h +109 -0
  197. data/src/core/ext/xds/certificate_provider_factory.h +6 -1
  198. data/src/core/ext/xds/certificate_provider_registry.cc +8 -8
  199. data/src/core/ext/xds/certificate_provider_registry.h +3 -1
  200. data/src/core/ext/xds/certificate_provider_store.cc +6 -2
  201. data/src/core/ext/xds/certificate_provider_store.h +10 -1
  202. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +9 -0
  203. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +8 -0
  204. data/src/core/ext/xds/upb_utils.h +1 -2
  205. data/src/core/ext/xds/xds_api.cc +16 -18
  206. data/src/core/ext/xds/xds_api.h +12 -5
  207. data/src/core/ext/xds/xds_bootstrap.cc +39 -26
  208. data/src/core/ext/xds/xds_bootstrap.h +11 -11
  209. data/src/core/ext/xds/xds_certificate_provider.cc +16 -4
  210. data/src/core/ext/xds/xds_certificate_provider.h +17 -2
  211. data/src/core/ext/xds/xds_channel_stack_modifier.cc +14 -5
  212. data/src/core/ext/xds/xds_channel_stack_modifier.h +5 -1
  213. data/src/core/ext/xds/xds_client.cc +121 -46
  214. data/src/core/ext/xds/xds_client.h +19 -4
  215. data/src/core/ext/xds/xds_client_stats.cc +3 -4
  216. data/src/core/ext/xds/xds_client_stats.h +4 -3
  217. data/src/core/ext/xds/xds_cluster.cc +126 -25
  218. data/src/core/ext/xds/xds_cluster.h +12 -1
  219. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +16 -7
  220. data/src/core/ext/xds/xds_cluster_specifier_plugin.h +1 -8
  221. data/src/core/ext/xds/xds_common_types.cc +36 -22
  222. data/src/core/ext/xds/xds_common_types.h +12 -4
  223. data/src/core/ext/xds/xds_endpoint.cc +25 -15
  224. data/src/core/ext/xds/xds_endpoint.h +13 -5
  225. data/src/core/ext/xds/xds_http_fault_filter.cc +10 -8
  226. data/src/core/ext/xds/xds_http_fault_filter.h +3 -1
  227. data/src/core/ext/xds/xds_http_filters.cc +7 -0
  228. data/src/core/ext/xds/xds_http_filters.h +3 -3
  229. data/src/core/ext/xds/xds_http_rbac_filter.cc +16 -0
  230. data/src/core/ext/xds/xds_http_rbac_filter.h +7 -0
  231. data/src/core/ext/xds/xds_lb_policy_registry.cc +291 -0
  232. data/src/core/ext/xds/xds_lb_policy_registry.h +72 -0
  233. data/src/core/ext/xds/xds_listener.cc +70 -42
  234. data/src/core/ext/xds/xds_listener.h +10 -1
  235. data/src/core/ext/xds/xds_resource_type.h +3 -3
  236. data/src/core/ext/xds/xds_resource_type_impl.h +7 -3
  237. data/src/core/ext/xds/xds_route_config.cc +56 -28
  238. data/src/core/ext/xds/xds_route_config.h +11 -2
  239. data/src/core/ext/xds/xds_routing.cc +16 -0
  240. data/src/core/ext/xds/xds_routing.h +7 -2
  241. data/src/core/ext/xds/xds_server_config_fetcher.cc +56 -7
  242. data/src/core/lib/address_utils/parse_address.cc +5 -8
  243. data/src/core/lib/address_utils/parse_address.h +3 -2
  244. data/src/core/lib/address_utils/sockaddr_utils.cc +60 -26
  245. data/src/core/lib/address_utils/sockaddr_utils.h +9 -4
  246. data/src/core/lib/avl/avl.h +6 -4
  247. data/src/core/lib/backoff/backoff.cc +1 -1
  248. data/src/core/lib/backoff/backoff.h +1 -1
  249. data/src/core/lib/channel/call_finalization.h +4 -0
  250. data/src/core/lib/channel/call_tracer.h +11 -5
  251. data/src/core/lib/channel/channel_args.cc +41 -22
  252. data/src/core/lib/channel/channel_args.h +34 -3
  253. data/src/core/lib/channel/channel_args_preconditioning.cc +4 -3
  254. data/src/core/lib/channel/channel_args_preconditioning.h +3 -2
  255. data/src/core/lib/channel/channel_fwd.h +26 -0
  256. data/src/core/lib/channel/channel_stack.cc +45 -7
  257. data/src/core/lib/channel/channel_stack.h +45 -9
  258. data/src/core/lib/channel/channel_stack_builder.cc +9 -19
  259. data/src/core/lib/channel/channel_stack_builder.h +17 -32
  260. data/src/core/lib/channel/channel_stack_builder_impl.cc +38 -43
  261. data/src/core/lib/channel/channel_stack_builder_impl.h +4 -6
  262. data/src/core/lib/channel/channel_trace.cc +8 -13
  263. data/src/core/lib/channel/channel_trace.h +6 -3
  264. data/src/core/lib/channel/channelz.cc +10 -14
  265. data/src/core/lib/channel/channelz.h +15 -7
  266. data/src/core/lib/channel/channelz_registry.cc +11 -19
  267. data/src/core/lib/channel/channelz_registry.h +10 -9
  268. data/src/core/lib/channel/connected_channel.cc +22 -31
  269. data/src/core/lib/channel/connected_channel.h +2 -0
  270. data/src/core/lib/channel/promise_based_filter.cc +451 -190
  271. data/src/core/lib/channel/promise_based_filter.h +162 -27
  272. data/src/core/lib/channel/status_util.cc +2 -0
  273. data/src/core/lib/channel/status_util.h +0 -3
  274. data/src/core/lib/compression/compression.cc +6 -1
  275. data/src/core/lib/compression/compression_internal.cc +48 -16
  276. data/src/core/lib/compression/compression_internal.h +4 -3
  277. data/src/core/lib/compression/message_compress.cc +3 -1
  278. data/src/core/lib/compression/message_compress.h +2 -3
  279. data/src/core/lib/config/core_configuration.cc +3 -0
  280. data/src/core/lib/config/core_configuration.h +2 -1
  281. data/src/core/lib/debug/stats.cc +9 -9
  282. data/src/core/lib/debug/stats.h +2 -1
  283. data/src/core/lib/debug/stats_data.cc +2 -1
  284. data/src/core/lib/debug/stats_data.h +0 -4
  285. data/src/core/lib/debug/trace.h +13 -12
  286. data/src/core/lib/event_engine/channel_args_endpoint_config.cc +4 -2
  287. data/src/core/lib/event_engine/channel_args_endpoint_config.h +3 -2
  288. data/src/core/lib/event_engine/default_event_engine_factory.cc +8 -2
  289. data/src/core/lib/event_engine/event_engine.cc +29 -14
  290. data/src/core/lib/event_engine/event_engine_factory.h +5 -0
  291. data/src/core/lib/event_engine/handle_containers.h +67 -0
  292. data/src/core/lib/event_engine/iomgr_engine/iomgr_engine.cc +159 -0
  293. data/src/core/lib/event_engine/iomgr_engine/iomgr_engine.h +122 -0
  294. data/src/core/lib/event_engine/iomgr_engine/thread_pool.cc +123 -0
  295. data/src/core/lib/event_engine/iomgr_engine/thread_pool.h +70 -0
  296. data/src/core/lib/event_engine/iomgr_engine/time_averaged_stats.cc +62 -0
  297. data/src/core/lib/event_engine/iomgr_engine/time_averaged_stats.h +81 -0
  298. data/src/core/lib/event_engine/iomgr_engine/timer.cc +312 -0
  299. data/src/core/lib/event_engine/iomgr_engine/timer.h +193 -0
  300. data/src/core/lib/event_engine/iomgr_engine/timer_heap.cc +107 -0
  301. data/src/core/lib/event_engine/iomgr_engine/timer_heap.h +56 -0
  302. data/src/core/lib/event_engine/iomgr_engine/timer_manager.cc +254 -0
  303. data/src/core/lib/event_engine/iomgr_engine/timer_manager.h +111 -0
  304. data/src/core/lib/event_engine/memory_allocator.cc +12 -4
  305. data/src/core/lib/{iomgr/event_engine → event_engine}/promise.h +27 -9
  306. data/src/core/lib/event_engine/resolved_address.cc +4 -2
  307. data/src/core/lib/event_engine/slice.cc +102 -0
  308. data/src/core/lib/event_engine/slice_buffer.cc +50 -0
  309. data/src/core/lib/{iomgr/event_engine/pollset.h → event_engine/trace.cc} +3 -10
  310. data/src/core/lib/{iomgr/endpoint_pair_event_engine.cc → event_engine/trace.h} +12 -14
  311. data/src/core/lib/gpr/log.cc +5 -0
  312. data/src/core/lib/gpr/time_posix.cc +6 -9
  313. data/src/core/lib/gpr/time_windows.cc +10 -7
  314. data/src/core/lib/gpr/tls.h +3 -5
  315. data/src/core/lib/gprpp/bitset.h +5 -1
  316. data/src/core/lib/gprpp/chunked_vector.h +4 -0
  317. data/src/core/lib/gprpp/construct_destruct.h +1 -0
  318. data/src/core/lib/gprpp/dual_ref_counted.h +1 -4
  319. data/src/core/lib/gprpp/examine_stack.h +0 -1
  320. data/src/core/lib/gprpp/fork.cc +3 -6
  321. data/src/core/lib/gprpp/global_config.h +2 -4
  322. data/src/core/lib/gprpp/global_config_env.cc +3 -2
  323. data/src/core/lib/gprpp/global_config_env.h +3 -1
  324. data/src/core/lib/gprpp/global_config_generic.h +0 -4
  325. data/src/core/lib/gprpp/host_port.cc +2 -0
  326. data/src/core/lib/gprpp/manual_constructor.h +0 -68
  327. data/src/core/lib/gprpp/match.h +2 -0
  328. data/src/core/lib/gprpp/memory.h +1 -5
  329. data/src/core/lib/gprpp/orphanable.h +1 -4
  330. data/src/core/lib/gprpp/ref_counted.h +1 -3
  331. data/src/core/lib/gprpp/ref_counted_ptr.h +1 -1
  332. data/src/core/lib/gprpp/stat.h +0 -2
  333. data/src/core/lib/gprpp/stat_posix.cc +7 -2
  334. data/src/core/lib/gprpp/status_helper.cc +50 -32
  335. data/src/core/lib/gprpp/status_helper.h +4 -0
  336. data/src/core/lib/gprpp/sync.h +3 -1
  337. data/src/core/lib/gprpp/table.h +10 -0
  338. data/src/core/lib/gprpp/thd.h +2 -5
  339. data/src/core/lib/gprpp/thd_posix.cc +4 -2
  340. data/src/core/lib/gprpp/thd_windows.cc +2 -0
  341. data/src/core/lib/gprpp/time.cc +16 -0
  342. data/src/core/lib/gprpp/time.h +10 -1
  343. data/src/core/lib/gprpp/time_util.cc +4 -0
  344. data/src/core/lib/gprpp/time_util.h +1 -1
  345. data/src/core/lib/gprpp/unique_type_name.h +104 -0
  346. data/src/core/lib/http/format_request.cc +34 -4
  347. data/src/core/lib/http/format_request.h +3 -1
  348. data/src/core/lib/http/httpcli.cc +106 -93
  349. data/src/core/lib/http/httpcli.h +58 -10
  350. data/src/core/lib/http/httpcli_security_connector.cc +19 -8
  351. data/src/core/lib/http/httpcli_ssl_credentials.h +3 -1
  352. data/src/core/lib/http/parser.cc +6 -7
  353. data/src/core/lib/http/parser.h +3 -0
  354. data/src/core/lib/iomgr/call_combiner.cc +2 -2
  355. data/src/core/lib/iomgr/endpoint.cc +4 -4
  356. data/src/core/lib/iomgr/endpoint.h +7 -5
  357. data/src/core/lib/iomgr/endpoint_cfstream.cc +9 -6
  358. data/src/core/lib/iomgr/endpoint_pair_posix.cc +2 -1
  359. data/src/core/lib/iomgr/error.cc +11 -9
  360. data/src/core/lib/iomgr/error.h +9 -5
  361. data/src/core/lib/iomgr/ev_epoll1_linux.cc +57 -18
  362. data/src/core/lib/iomgr/ev_epoll1_linux.h +1 -1
  363. data/src/core/lib/iomgr/ev_poll_posix.cc +77 -52
  364. data/src/core/lib/iomgr/ev_poll_posix.h +2 -2
  365. data/src/core/lib/iomgr/ev_posix.cc +55 -96
  366. data/src/core/lib/iomgr/ev_posix.h +5 -3
  367. data/src/core/lib/iomgr/exec_ctx.h +1 -2
  368. data/src/core/lib/iomgr/fork_posix.cc +1 -1
  369. data/src/core/lib/iomgr/internal_errqueue.cc +38 -47
  370. data/src/core/lib/iomgr/internal_errqueue.h +1 -6
  371. data/src/core/lib/iomgr/iomgr.cc +7 -1
  372. data/src/core/{ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_event_engine.cc → lib/iomgr/iomgr_fwd.h} +9 -12
  373. data/src/core/lib/iomgr/iomgr_posix.cc +1 -0
  374. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +1 -0
  375. data/src/core/lib/iomgr/load_file.cc +1 -1
  376. data/src/core/lib/iomgr/pollset_set.h +1 -2
  377. data/src/core/lib/iomgr/port.h +25 -6
  378. data/src/core/lib/iomgr/resolve_address.cc +8 -0
  379. data/src/core/lib/iomgr/resolve_address.h +21 -14
  380. data/src/core/lib/iomgr/resolve_address_impl.h +2 -3
  381. data/src/core/lib/iomgr/resolve_address_posix.cc +9 -15
  382. data/src/core/lib/iomgr/resolve_address_posix.h +5 -2
  383. data/src/core/lib/iomgr/resolve_address_windows.cc +8 -15
  384. data/src/core/lib/iomgr/resolve_address_windows.h +5 -2
  385. data/src/core/lib/iomgr/sockaddr.h +2 -3
  386. data/src/core/lib/iomgr/sockaddr_posix.h +2 -0
  387. data/src/core/lib/iomgr/sockaddr_windows.h +2 -0
  388. data/src/core/lib/iomgr/socket_utils_common_posix.cc +3 -2
  389. data/src/core/lib/iomgr/tcp_client.cc +12 -7
  390. data/src/core/lib/iomgr/tcp_client.h +24 -13
  391. data/src/core/lib/iomgr/tcp_client_cfstream.cc +24 -10
  392. data/src/core/lib/iomgr/tcp_client_posix.cc +154 -29
  393. data/src/core/lib/iomgr/tcp_client_posix.h +1 -1
  394. data/src/core/lib/iomgr/tcp_client_windows.cc +27 -16
  395. data/src/core/lib/iomgr/tcp_posix.cc +96 -52
  396. data/src/core/lib/iomgr/tcp_server_posix.cc +33 -19
  397. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +41 -38
  398. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +9 -6
  399. data/src/core/lib/iomgr/tcp_server_windows.cc +20 -12
  400. data/src/core/lib/iomgr/tcp_windows.cc +12 -9
  401. data/src/core/lib/iomgr/unix_sockets_posix.cc +2 -2
  402. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +2 -2
  403. data/src/core/lib/iomgr/wakeup_fd_posix.cc +15 -12
  404. data/src/core/lib/iomgr/wakeup_fd_posix.h +0 -2
  405. data/src/core/lib/iomgr/work_serializer.h +2 -3
  406. data/src/core/lib/json/json.h +1 -2
  407. data/src/core/lib/json/json_reader.cc +9 -1
  408. data/src/core/lib/json/json_util.cc +7 -0
  409. data/src/core/lib/json/json_util.h +10 -1
  410. data/src/core/lib/json/json_writer.cc +6 -1
  411. data/src/core/lib/matchers/matchers.cc +6 -3
  412. data/src/core/lib/matchers/matchers.h +2 -0
  413. data/src/core/lib/promise/activity.cc +1 -2
  414. data/src/core/lib/promise/activity.h +13 -19
  415. data/src/core/lib/promise/arena_promise.h +11 -1
  416. data/src/core/lib/promise/call_push_pull.h +4 -0
  417. data/src/core/lib/promise/context.h +1 -1
  418. data/src/core/lib/promise/detail/basic_seq.h +2 -2
  419. data/src/core/lib/promise/detail/promise_factory.h +0 -1
  420. data/src/core/lib/promise/latch.h +0 -1
  421. data/src/core/lib/promise/loop.h +2 -0
  422. data/src/core/lib/promise/promise.h +1 -0
  423. data/src/core/lib/promise/race.h +0 -1
  424. data/src/core/lib/promise/seq.h +0 -2
  425. data/src/core/lib/promise/sleep.cc +38 -31
  426. data/src/core/lib/promise/sleep.h +32 -22
  427. data/src/core/lib/promise/try_seq.h +2 -2
  428. data/src/core/lib/resolver/resolver.cc +5 -0
  429. data/src/core/lib/resolver/resolver.h +3 -0
  430. data/src/core/lib/resolver/resolver_factory.h +6 -4
  431. data/src/core/lib/resolver/resolver_registry.cc +2 -9
  432. data/src/core/lib/resolver/resolver_registry.h +12 -1
  433. data/src/core/lib/resolver/server_address.cc +17 -3
  434. data/src/core/lib/resolver/server_address.h +13 -6
  435. data/src/core/lib/resource_quota/api.cc +14 -1
  436. data/src/core/lib/resource_quota/api.h +4 -1
  437. data/src/core/lib/resource_quota/arena.cc +0 -6
  438. data/src/core/lib/resource_quota/arena.h +1 -2
  439. data/src/core/lib/resource_quota/memory_quota.cc +62 -62
  440. data/src/core/lib/resource_quota/memory_quota.h +35 -30
  441. data/src/core/lib/resource_quota/resource_quota.h +8 -0
  442. data/src/core/lib/resource_quota/thread_quota.cc +2 -0
  443. data/src/core/lib/resource_quota/thread_quota.h +4 -0
  444. data/src/core/lib/security/authorization/authorization_policy_provider.h +7 -0
  445. data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +4 -0
  446. data/src/core/lib/security/authorization/evaluate_args.cc +9 -3
  447. data/src/core/lib/security/authorization/evaluate_args.h +6 -3
  448. data/src/core/lib/security/authorization/grpc_authorization_engine.cc +6 -0
  449. data/src/core/lib/security/authorization/grpc_authorization_engine.h +7 -0
  450. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +15 -0
  451. data/src/core/lib/security/authorization/grpc_server_authz_filter.h +12 -1
  452. data/src/core/lib/security/authorization/matchers.cc +9 -1
  453. data/src/core/lib/security/authorization/matchers.h +7 -0
  454. data/src/core/lib/security/authorization/rbac_policy.cc +5 -0
  455. data/src/core/lib/security/authorization/rbac_policy.h +7 -0
  456. data/src/core/lib/security/context/security_context.cc +5 -2
  457. data/src/core/lib/security/context/security_context.h +14 -2
  458. data/src/core/lib/security/credentials/alts/alts_credentials.cc +12 -4
  459. data/src/core/lib/security/credentials/alts/alts_credentials.h +8 -3
  460. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc +1 -3
  461. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +1 -4
  462. data/src/core/lib/security/credentials/call_creds_util.cc +10 -0
  463. data/src/core/lib/security/credentials/call_creds_util.h +1 -0
  464. data/src/core/lib/security/credentials/channel_creds_registry.h +7 -1
  465. data/src/core/lib/security/credentials/channel_creds_registry_init.cc +10 -0
  466. data/src/core/lib/security/credentials/composite/composite_credentials.cc +11 -7
  467. data/src/core/lib/security/credentials/composite/composite_credentials.h +21 -6
  468. data/src/core/lib/security/credentials/credentials.cc +4 -8
  469. data/src/core/lib/security/credentials/credentials.h +27 -18
  470. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +108 -9
  471. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +18 -0
  472. data/src/core/lib/security/credentials/external/aws_request_signer.cc +9 -0
  473. data/src/core/lib/security/credentials/external/external_account_credentials.cc +27 -9
  474. data/src/core/lib/security/credentials/external/external_account_credentials.h +11 -0
  475. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +12 -4
  476. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +6 -0
  477. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +22 -4
  478. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +10 -0
  479. data/src/core/lib/security/credentials/fake/fake_credentials.cc +21 -9
  480. data/src/core/lib/security/credentials/fake/fake_credentials.h +15 -3
  481. data/src/core/lib/security/credentials/google_default/credentials_generic.cc +1 -0
  482. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +51 -24
  483. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +12 -3
  484. data/src/core/lib/security/credentials/iam/iam_credentials.cc +13 -4
  485. data/src/core/lib/security/credentials/iam/iam_credentials.h +12 -2
  486. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +12 -2
  487. data/src/core/lib/security/credentials/insecure/insecure_credentials.h +9 -4
  488. data/src/core/lib/security/credentials/jwt/json_token.cc +5 -2
  489. data/src/core/lib/security/credentials/jwt/json_token.h +2 -2
  490. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +14 -7
  491. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +16 -2
  492. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +28 -3
  493. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +4 -2
  494. data/src/core/lib/security/credentials/local/local_credentials.cc +12 -5
  495. data/src/core/lib/security/credentials/local/local_credentials.h +9 -2
  496. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +36 -19
  497. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +24 -4
  498. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +12 -8
  499. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +25 -1
  500. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +13 -2
  501. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +17 -4
  502. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +6 -6
  503. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +9 -3
  504. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +39 -10
  505. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +14 -11
  506. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +35 -3
  507. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +34 -11
  508. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +4 -5
  509. data/src/core/lib/security/credentials/tls/tls_credentials.cc +17 -2
  510. data/src/core/lib/security/credentials/tls/tls_credentials.h +7 -3
  511. data/src/core/lib/security/credentials/tls/tls_utils.cc +2 -0
  512. data/src/core/lib/security/credentials/tls/tls_utils.h +1 -1
  513. data/src/core/lib/security/credentials/xds/xds_credentials.cc +20 -4
  514. data/src/core/lib/security/credentials/xds/xds_credentials.h +19 -5
  515. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +22 -2
  516. data/src/core/lib/security/security_connector/alts/alts_security_connector.h +6 -3
  517. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +18 -2
  518. data/src/core/lib/security/security_connector/fake/fake_security_connector.h +2 -2
  519. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +9 -0
  520. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +17 -2
  521. data/src/core/lib/security/security_connector/load_system_roots_fallback.cc +5 -3
  522. data/src/core/lib/security/security_connector/{load_system_roots_linux.cc → load_system_roots_supported.cc} +27 -19
  523. data/src/core/lib/security/security_connector/{load_system_roots_linux.h → load_system_roots_supported.h} +5 -5
  524. data/src/core/lib/security/security_connector/local/local_security_connector.cc +22 -3
  525. data/src/core/lib/security/security_connector/local/local_security_connector.h +6 -2
  526. data/src/core/lib/security/security_connector/security_connector.cc +20 -18
  527. data/src/core/lib/security/security_connector/security_connector.h +19 -7
  528. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +19 -7
  529. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +4 -2
  530. data/src/core/lib/security/security_connector/ssl_utils.cc +12 -2
  531. data/src/core/lib/security/security_connector/ssl_utils.h +10 -7
  532. data/src/core/lib/security/security_connector/ssl_utils_config.h +1 -1
  533. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +21 -13
  534. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +23 -3
  535. data/src/core/lib/security/transport/auth_filters.h +7 -0
  536. data/src/core/lib/security/transport/client_auth_filter.cc +24 -17
  537. data/src/core/lib/security/transport/secure_endpoint.cc +81 -20
  538. data/src/core/lib/security/transport/secure_endpoint.h +4 -3
  539. data/src/core/lib/security/transport/security_handshaker.cc +49 -16
  540. data/src/core/lib/security/transport/security_handshaker.h +5 -1
  541. data/src/core/lib/security/transport/server_auth_filter.cc +29 -6
  542. data/src/core/lib/security/util/json_util.cc +3 -2
  543. data/src/core/lib/security/util/json_util.h +0 -2
  544. data/src/core/lib/service_config/service_config.h +4 -8
  545. data/src/core/lib/service_config/service_config_call_data.h +6 -2
  546. data/src/core/lib/service_config/service_config_impl.cc +13 -6
  547. data/src/core/lib/service_config/service_config_impl.h +9 -4
  548. data/src/core/lib/service_config/service_config_parser.cc +8 -2
  549. data/src/core/lib/service_config/service_config_parser.h +7 -0
  550. data/src/core/lib/slice/b64.cc +1 -1
  551. data/src/core/lib/slice/b64.h +2 -0
  552. data/src/core/lib/slice/percent_encoding.cc +4 -1
  553. data/src/core/lib/slice/percent_encoding.h +0 -6
  554. data/src/core/lib/slice/slice.cc +2 -1
  555. data/src/core/lib/slice/slice.h +10 -5
  556. data/src/core/lib/slice/slice_api.cc +1 -1
  557. data/src/core/lib/slice/slice_buffer.cc +79 -23
  558. data/src/core/lib/slice/slice_buffer.h +137 -0
  559. data/src/core/lib/slice/slice_buffer_api.cc +35 -0
  560. data/src/core/lib/slice/slice_internal.h +4 -3
  561. data/src/core/lib/slice/slice_refcount.h +2 -3
  562. data/src/core/lib/slice/slice_refcount_base.h +2 -3
  563. data/src/core/lib/slice/slice_string_helpers.cc +0 -16
  564. data/src/core/lib/slice/slice_string_helpers.h +1 -8
  565. data/src/core/lib/surface/builtins.cc +7 -2
  566. data/src/core/lib/surface/byte_buffer.cc +7 -1
  567. data/src/core/lib/surface/byte_buffer_reader.cc +4 -4
  568. data/src/core/lib/surface/call.cc +90 -137
  569. data/src/core/lib/surface/call.h +21 -3
  570. data/src/core/lib/surface/call_details.cc +4 -4
  571. data/src/core/lib/surface/call_log_batch.cc +7 -1
  572. data/src/core/lib/surface/call_test_only.h +4 -1
  573. data/src/core/lib/surface/channel.cc +179 -242
  574. data/src/core/lib/surface/channel.h +97 -58
  575. data/src/core/lib/surface/channel_init.h +2 -0
  576. data/src/core/lib/surface/channel_ping.cc +8 -2
  577. data/src/core/lib/surface/channel_stack_type.cc +0 -2
  578. data/src/core/lib/surface/channel_stack_type.h +0 -2
  579. data/src/core/lib/surface/completion_queue.cc +29 -20
  580. data/src/core/lib/surface/completion_queue.h +7 -2
  581. data/src/core/lib/surface/completion_queue_factory.cc +1 -0
  582. data/src/core/lib/surface/completion_queue_factory.h +1 -3
  583. data/src/core/lib/surface/event_string.cc +1 -7
  584. data/src/core/lib/surface/event_string.h +1 -1
  585. data/src/core/lib/surface/init.cc +17 -46
  586. data/src/core/lib/surface/init.h +0 -8
  587. data/src/core/lib/surface/lame_client.cc +63 -109
  588. data/src/core/lib/surface/lame_client.h +41 -3
  589. data/src/core/lib/surface/metadata_array.cc +2 -0
  590. data/src/core/lib/surface/server.cc +83 -64
  591. data/src/core/lib/surface/server.h +42 -9
  592. data/src/core/lib/surface/validate_metadata.cc +3 -6
  593. data/src/core/lib/surface/validate_metadata.h +3 -0
  594. data/src/core/lib/surface/version.cc +2 -2
  595. data/src/core/lib/transport/bdp_estimator.cc +3 -1
  596. data/src/core/lib/transport/bdp_estimator.h +2 -3
  597. data/src/core/lib/transport/connectivity_state.cc +6 -4
  598. data/src/core/lib/transport/connectivity_state.h +2 -3
  599. data/src/core/lib/transport/error_utils.cc +16 -8
  600. data/src/core/lib/transport/error_utils.h +5 -1
  601. data/src/core/lib/{channel → transport}/handshaker.cc +12 -7
  602. data/src/core/lib/{channel → transport}/handshaker.h +13 -6
  603. data/src/core/lib/{channel → transport}/handshaker_factory.h +9 -10
  604. data/src/core/lib/{channel → transport}/handshaker_registry.cc +5 -1
  605. data/src/core/lib/{channel → transport}/handshaker_registry.h +5 -4
  606. data/src/core/{ext/filters/client_channel → lib/transport}/http_connect_handshaker.cc +28 -14
  607. data/src/core/{ext/filters/client_channel → lib/transport}/http_connect_handshaker.h +3 -3
  608. data/src/core/lib/transport/metadata_batch.cc +287 -0
  609. data/src/core/lib/transport/metadata_batch.h +133 -264
  610. data/src/core/lib/transport/parsed_metadata.cc +2 -0
  611. data/src/core/lib/transport/parsed_metadata.h +10 -3
  612. data/src/core/lib/transport/status_conversion.cc +2 -0
  613. data/src/core/lib/transport/status_conversion.h +2 -2
  614. data/src/core/lib/transport/tcp_connect_handshaker.cc +253 -0
  615. data/src/core/lib/transport/tcp_connect_handshaker.h +39 -0
  616. data/src/core/lib/transport/timeout_encoding.cc +2 -6
  617. data/src/core/lib/transport/timeout_encoding.h +5 -1
  618. data/src/core/lib/transport/transport.cc +18 -20
  619. data/src/core/lib/transport/transport.h +48 -16
  620. data/src/core/lib/transport/transport_fwd.h +20 -0
  621. data/src/core/lib/transport/transport_impl.h +11 -0
  622. data/src/core/lib/transport/transport_op_string.cc +17 -18
  623. data/src/core/lib/uri/uri_parser.cc +11 -3
  624. data/src/core/lib/uri/uri_parser.h +0 -2
  625. data/src/core/plugin_registry/grpc_plugin_registry.cc +11 -0
  626. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +1 -1
  627. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +9 -1
  628. data/src/core/tsi/fake_transport_security.cc +13 -1
  629. data/src/core/tsi/fake_transport_security.h +6 -0
  630. data/src/core/tsi/ssl/session_cache/ssl_session.h +2 -0
  631. data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +2 -0
  632. data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +2 -0
  633. data/src/core/tsi/ssl_transport_security.cc +1 -1
  634. data/src/core/tsi/transport_security_grpc.cc +3 -2
  635. data/src/core/tsi/transport_security_grpc.h +5 -2
  636. data/src/ruby/ext/grpc/ext-export-truffleruby.clang +2 -0
  637. data/src/ruby/ext/grpc/ext-export-truffleruby.gcc +7 -0
  638. data/src/ruby/ext/grpc/ext-export.clang +1 -0
  639. data/src/ruby/ext/grpc/ext-export.gcc +1 -0
  640. data/src/ruby/ext/grpc/extconf.rb +50 -19
  641. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +1 -1
  642. data/src/ruby/lib/grpc/errors.rb +1 -1
  643. data/src/ruby/lib/grpc/version.rb +1 -1
  644. data/src/ruby/spec/generic/client_stub_spec.rb +23 -23
  645. data/third_party/abseil-cpp/absl/algorithm/container.h +1 -1
  646. data/third_party/abseil-cpp/absl/base/attributes.h +49 -22
  647. data/third_party/abseil-cpp/absl/base/casts.h +61 -68
  648. data/third_party/abseil-cpp/absl/base/config.h +182 -41
  649. data/third_party/abseil-cpp/absl/base/internal/cycleclock.cc +12 -42
  650. data/third_party/abseil-cpp/absl/base/internal/cycleclock.h +67 -2
  651. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +3 -3
  652. data/third_party/abseil-cpp/absl/base/internal/endian.h +17 -62
  653. data/third_party/abseil-cpp/absl/base/internal/fast_type_id.h +2 -0
  654. data/third_party/abseil-cpp/absl/base/internal/invoke.h +54 -0
  655. data/third_party/abseil-cpp/absl/base/internal/prefetch.h +138 -0
  656. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +29 -22
  657. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +13 -12
  658. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +3 -0
  659. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +8 -0
  660. data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +2 -5
  661. data/third_party/abseil-cpp/absl/base/internal/strerror.cc +88 -0
  662. data/third_party/abseil-cpp/absl/base/internal/strerror.h +39 -0
  663. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +0 -1
  664. data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +2 -1
  665. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +6 -7
  666. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +12 -3
  667. data/third_party/abseil-cpp/absl/base/log_severity.cc +28 -0
  668. data/third_party/abseil-cpp/absl/base/log_severity.h +51 -0
  669. data/third_party/abseil-cpp/absl/base/optimization.h +19 -11
  670. data/third_party/abseil-cpp/absl/base/options.h +1 -1
  671. data/third_party/abseil-cpp/absl/base/thread_annotations.h +2 -2
  672. data/third_party/abseil-cpp/absl/container/fixed_array.h +2 -0
  673. data/third_party/abseil-cpp/absl/container/flat_hash_map.h +11 -4
  674. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +510 -0
  675. data/third_party/abseil-cpp/absl/container/inlined_vector.h +20 -9
  676. data/third_party/abseil-cpp/absl/container/internal/common.h +6 -5
  677. data/third_party/abseil-cpp/absl/container/internal/container_memory.h +10 -28
  678. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +68 -20
  679. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +29 -11
  680. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +59 -38
  681. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +4 -0
  682. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +515 -184
  683. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +45 -88
  684. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +4 -0
  685. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +3 -2
  686. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +8 -3
  687. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +8 -3
  688. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +2 -1
  689. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +8 -3
  690. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +20 -18
  691. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +8 -3
  692. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +15 -2
  693. data/third_party/abseil-cpp/absl/debugging/symbolize.cc +6 -1
  694. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +46 -7
  695. data/third_party/abseil-cpp/absl/functional/bind_front.h +10 -1
  696. data/third_party/abseil-cpp/absl/functional/function_ref.h +2 -1
  697. data/third_party/abseil-cpp/absl/hash/hash.h +82 -8
  698. data/third_party/abseil-cpp/absl/hash/internal/hash.h +218 -23
  699. data/third_party/abseil-cpp/absl/numeric/bits.h +2 -1
  700. data/third_party/abseil-cpp/absl/numeric/int128.cc +4 -2
  701. data/third_party/abseil-cpp/absl/numeric/int128.h +2 -2
  702. data/third_party/abseil-cpp/absl/profiling/internal/sample_recorder.h +21 -6
  703. data/third_party/abseil-cpp/absl/random/bernoulli_distribution.h +4 -4
  704. data/third_party/abseil-cpp/absl/random/distributions.h +3 -3
  705. data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +3 -0
  706. data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +2 -1
  707. data/third_party/abseil-cpp/absl/random/internal/generate_real.h +2 -2
  708. data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +59 -48
  709. data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +1 -1
  710. data/third_party/abseil-cpp/absl/random/internal/randen.h +5 -11
  711. data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +6 -2
  712. data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +48 -23
  713. data/third_party/abseil-cpp/absl/random/internal/salted_seed_seq.h +24 -26
  714. data/third_party/abseil-cpp/absl/random/internal/traits.h +53 -5
  715. data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +5 -5
  716. data/third_party/abseil-cpp/absl/random/internal/wide_multiply.h +33 -48
  717. data/third_party/abseil-cpp/absl/random/log_uniform_int_distribution.h +9 -10
  718. data/third_party/abseil-cpp/absl/random/poisson_distribution.h +7 -4
  719. data/third_party/abseil-cpp/absl/random/seed_sequences.h +1 -0
  720. data/third_party/abseil-cpp/absl/random/uniform_int_distribution.h +2 -2
  721. data/third_party/abseil-cpp/absl/random/uniform_real_distribution.h +1 -1
  722. data/third_party/abseil-cpp/absl/random/zipf_distribution.h +4 -3
  723. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +17 -0
  724. data/third_party/abseil-cpp/absl/status/status.cc +174 -2
  725. data/third_party/abseil-cpp/absl/status/status.h +22 -12
  726. data/third_party/abseil-cpp/absl/status/statusor.h +9 -3
  727. data/third_party/abseil-cpp/absl/strings/ascii.h +4 -4
  728. data/third_party/abseil-cpp/absl/strings/cord.cc +194 -913
  729. data/third_party/abseil-cpp/absl/strings/cord.h +202 -81
  730. data/third_party/abseil-cpp/absl/strings/cord_analysis.cc +188 -0
  731. data/third_party/abseil-cpp/absl/strings/cord_analysis.h +44 -0
  732. data/third_party/abseil-cpp/absl/strings/cord_buffer.cc +30 -0
  733. data/third_party/abseil-cpp/absl/strings/cord_buffer.h +572 -0
  734. data/third_party/abseil-cpp/absl/strings/internal/cord_data_edge.h +63 -0
  735. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +20 -32
  736. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +123 -88
  737. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +149 -49
  738. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.h +44 -59
  739. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.cc +3 -1
  740. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.h +4 -2
  741. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.cc +3 -2
  742. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.h +5 -4
  743. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.cc +7 -74
  744. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.cc +54 -0
  745. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.h +102 -0
  746. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +58 -17
  747. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +13 -11
  748. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +11 -38
  749. data/third_party/abseil-cpp/absl/strings/internal/cordz_statistics.h +1 -0
  750. data/third_party/abseil-cpp/absl/strings/internal/cordz_update_tracker.h +4 -2
  751. data/third_party/abseil-cpp/absl/strings/internal/escaping.cc +6 -5
  752. data/third_party/abseil-cpp/absl/strings/internal/ostringstream.cc +1 -1
  753. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +1 -1
  754. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +1 -1
  755. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +38 -7
  756. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +7 -2
  757. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +4 -5
  758. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +5 -2
  759. data/third_party/abseil-cpp/absl/strings/internal/str_format/output.h +2 -1
  760. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +4 -2
  761. data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +9 -6
  762. data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +10 -2
  763. data/third_party/abseil-cpp/absl/strings/internal/utf8.cc +9 -9
  764. data/third_party/abseil-cpp/absl/strings/numbers.cc +8 -8
  765. data/third_party/abseil-cpp/absl/strings/numbers.h +26 -23
  766. data/third_party/abseil-cpp/absl/strings/str_cat.h +20 -13
  767. data/third_party/abseil-cpp/absl/strings/str_join.h +9 -15
  768. data/third_party/abseil-cpp/absl/strings/str_split.h +1 -2
  769. data/third_party/abseil-cpp/absl/strings/string_view.cc +2 -13
  770. data/third_party/abseil-cpp/absl/strings/string_view.h +3 -2
  771. data/third_party/abseil-cpp/absl/strings/strip.h +8 -6
  772. data/third_party/abseil-cpp/absl/strings/substitute.h +10 -2
  773. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +9 -6
  774. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.h +0 -4
  775. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +0 -4
  776. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +1 -6
  777. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +0 -25
  778. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +10 -4
  779. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +75 -40
  780. data/third_party/abseil-cpp/absl/synchronization/mutex.h +17 -9
  781. data/third_party/abseil-cpp/absl/synchronization/notification.h +3 -2
  782. data/third_party/abseil-cpp/absl/time/duration.cc +5 -4
  783. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +11 -7
  784. data/third_party/abseil-cpp/absl/time/time.h +16 -12
  785. data/third_party/abseil-cpp/absl/types/internal/optional.h +8 -0
  786. data/third_party/abseil-cpp/absl/types/internal/variant.h +3 -3
  787. data/third_party/abseil-cpp/absl/types/optional.h +17 -14
  788. data/third_party/abseil-cpp/absl/types/span.h +2 -1
  789. metadata +69 -38
  790. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_event_engine.cc +0 -31
  791. data/src/core/lib/event_engine/sockaddr.cc +0 -40
  792. data/src/core/lib/event_engine/sockaddr.h +0 -44
  793. data/src/core/lib/gprpp/capture.h +0 -76
  794. data/src/core/lib/iomgr/event_engine/closure.cc +0 -77
  795. data/src/core/lib/iomgr/event_engine/closure.h +0 -42
  796. data/src/core/lib/iomgr/event_engine/endpoint.cc +0 -172
  797. data/src/core/lib/iomgr/event_engine/endpoint.h +0 -52
  798. data/src/core/lib/iomgr/event_engine/iomgr.cc +0 -85
  799. data/src/core/lib/iomgr/event_engine/pollset.cc +0 -87
  800. data/src/core/lib/iomgr/event_engine/resolved_address_internal.cc +0 -47
  801. data/src/core/lib/iomgr/event_engine/resolved_address_internal.h +0 -37
  802. data/src/core/lib/iomgr/event_engine/resolver.cc +0 -133
  803. data/src/core/lib/iomgr/event_engine/resolver.h +0 -56
  804. data/src/core/lib/iomgr/event_engine/tcp.cc +0 -296
  805. data/src/core/lib/iomgr/event_engine/timer.cc +0 -62
  806. data/src/core/lib/slice/slice_split.cc +0 -100
  807. data/src/core/lib/slice/slice_split.h +0 -40
  808. data/src/core/lib/transport/byte_stream.cc +0 -164
  809. data/src/core/lib/transport/byte_stream.h +0 -166
  810. data/third_party/abseil-cpp/absl/container/internal/have_sse.h +0 -50
@@ -23,7 +23,7 @@
23
23
 
24
24
  #include <stdlib.h>
25
25
 
26
- #include <grpc/impl/codegen/compression_types.h>
26
+ #include <grpc/impl/codegen/compression_types.h> // IWYU pragma: export
27
27
  #include <grpc/slice.h>
28
28
 
29
29
  #ifdef __cplusplus
@@ -21,13 +21,13 @@
21
21
 
22
22
  #include "absl/status/status.h"
23
23
  #include "absl/status/statusor.h"
24
- #include "absl/time/time.h"
25
24
 
26
25
  #include <grpc/event_engine/endpoint_config.h>
27
26
  #include <grpc/event_engine/memory_allocator.h>
28
27
  #include <grpc/event_engine/port.h>
28
+ #include <grpc/event_engine/slice_buffer.h>
29
29
 
30
- // TODO(hork): Define the Endpoint::Write metrics collection system
30
+ // TODO(vigneshbabu): Define the Endpoint::Write metrics collection system
31
31
  namespace grpc_event_engine {
32
32
  namespace experimental {
33
33
 
@@ -73,6 +73,11 @@ namespace experimental {
73
73
  ////////////////////////////////////////////////////////////////////////////////
74
74
  class EventEngine {
75
75
  public:
76
+ /// A duration between two events.
77
+ ///
78
+ /// Throughout the EventEngine API durations are used to express how long
79
+ /// until an action should be performed.
80
+ using Duration = std::chrono::duration<int64_t, std::nano>;
76
81
  /// A custom closure type for EventEngine task execution.
77
82
  ///
78
83
  /// Throughout the EventEngine API, \a Closure ownership is retained by the
@@ -138,6 +143,18 @@ class EventEngine {
138
143
  /// Shuts down all connections and invokes all pending read or write
139
144
  /// callbacks with an error status.
140
145
  virtual ~Endpoint() = default;
146
+ /// A struct representing optional arguments that may be provided to an
147
+ /// EventEngine Endpoint Read API call.
148
+ ///
149
+ /// Passed as argument to an Endpoint \a Read
150
+ struct ReadArgs {
151
+ // A suggestion to the endpoint implementation to read at-least the
152
+ // specified number of bytes over the network connection before marking
153
+ // the endpoint read operation as complete. gRPC may use this argument
154
+ // to minimize the number of endpoint read API calls over the lifetime
155
+ // of a connection.
156
+ int64_t read_hint_bytes;
157
+ };
141
158
  /// Reads data from the Endpoint.
142
159
  ///
143
160
  /// When data is available on the connection, that data is moved into the
@@ -156,7 +173,21 @@ class EventEngine {
156
173
  /// statuses to \a on_read. For example, callbacks might expect to receive
157
174
  /// CANCELLED on endpoint shutdown.
158
175
  virtual void Read(std::function<void(absl::Status)> on_read,
159
- SliceBuffer* buffer) = 0;
176
+ SliceBuffer* buffer, const ReadArgs* args) = 0;
177
+ /// A struct representing optional arguments that may be provided to an
178
+ /// EventEngine Endpoint Write API call.
179
+ ///
180
+ /// Passed as argument to an Endpoint \a Write
181
+ struct WriteArgs {
182
+ // Represents private information that may be passed by gRPC for
183
+ // select endpoints expected to be used only within google.
184
+ void* google_specific = nullptr;
185
+ // A suggestion to the endpoint implementation to group data to be written
186
+ // into frames of the specified max_frame_size. gRPC may use this
187
+ // argument to dynamically control the max sizes of frames sent to a
188
+ // receiver in response to high receiver memory pressure.
189
+ int64_t max_frame_size;
190
+ };
160
191
  /// Writes data out on the connection.
161
192
  ///
162
193
  /// \a on_writable is called when the connection is ready for more data. The
@@ -176,7 +207,7 @@ class EventEngine {
176
207
  /// statuses to \a on_writable. For example, callbacks might expect to
177
208
  /// receive CANCELLED on endpoint shutdown.
178
209
  virtual void Write(std::function<void(absl::Status)> on_writable,
179
- SliceBuffer* data) = 0;
210
+ SliceBuffer* data, const WriteArgs* args) = 0;
180
211
  /// Returns an address in the format described in DNSResolver. The returned
181
212
  /// values are expected to remain valid for the life of the Endpoint.
182
213
  virtual const ResolvedAddress& GetPeerAddress() const = 0;
@@ -243,7 +274,7 @@ class EventEngine {
243
274
  const ResolvedAddress& addr,
244
275
  const EndpointConfig& args,
245
276
  MemoryAllocator memory_allocator,
246
- absl::Time deadline) = 0;
277
+ Duration timeout) = 0;
247
278
 
248
279
  /// Request cancellation of a connection attempt.
249
280
  ///
@@ -259,7 +290,13 @@ class EventEngine {
259
290
  public:
260
291
  /// Task handle for DNS Resolution requests.
261
292
  struct LookupTaskHandle {
262
- intptr_t key[2];
293
+ intptr_t keys[2];
294
+ };
295
+ /// Optional configuration for DNSResolvers.
296
+ struct ResolverOptions {
297
+ /// If empty, default DNS servers will be used.
298
+ /// Must be in the "IP:port" format as described in naming.md.
299
+ std::string dns_server;
263
300
  };
264
301
  /// DNS SRV record type.
265
302
  struct SRVRecord {
@@ -293,23 +330,23 @@ class EventEngine {
293
330
  ///
294
331
  /// If cancelled, \a on_resolve will not be executed.
295
332
  virtual LookupTaskHandle LookupHostname(LookupHostnameCallback on_resolve,
296
- absl::string_view address,
333
+ absl::string_view name,
297
334
  absl::string_view default_port,
298
- absl::Time deadline) = 0;
335
+ Duration timeout) = 0;
299
336
  /// Asynchronously perform an SRV record lookup.
300
337
  ///
301
338
  /// \a on_resolve has the same meaning and expectations as \a
302
339
  /// LookupHostname's \a on_resolve callback.
303
340
  virtual LookupTaskHandle LookupSRV(LookupSRVCallback on_resolve,
304
341
  absl::string_view name,
305
- absl::Time deadline) = 0;
342
+ Duration timeout) = 0;
306
343
  /// Asynchronously perform a TXT record lookup.
307
344
  ///
308
345
  /// \a on_resolve has the same meaning and expectations as \a
309
346
  /// LookupHostname's \a on_resolve callback.
310
347
  virtual LookupTaskHandle LookupTXT(LookupTXTCallback on_resolve,
311
348
  absl::string_view name,
312
- absl::Time deadline) = 0;
349
+ Duration timeout) = 0;
313
350
  /// Cancel an asynchronous lookup operation.
314
351
  ///
315
352
  /// This shares the same semantics with \a EventEngine::Cancel: successfully
@@ -331,8 +368,10 @@ class EventEngine {
331
368
  // de-experimentalize this API.
332
369
  virtual bool IsWorkerThread() = 0;
333
370
 
334
- /// Creates and returns an instance of a DNSResolver.
335
- virtual std::unique_ptr<DNSResolver> GetDNSResolver() = 0;
371
+ /// Creates and returns an instance of a DNSResolver, optionally configured by
372
+ /// the \a options struct.
373
+ virtual std::unique_ptr<DNSResolver> GetDNSResolver(
374
+ const DNSResolver::ResolverOptions& options) = 0;
336
375
 
337
376
  /// Asynchronously executes a task as soon as possible.
338
377
  ///
@@ -349,13 +388,13 @@ class EventEngine {
349
388
  /// in some scenarios. This overload is useful in situations where performance
350
389
  /// is not a critical concern.
351
390
  virtual void Run(std::function<void()> closure) = 0;
352
- /// Synonymous with scheduling an alarm to run at time \a when.
391
+ /// Synonymous with scheduling an alarm to run after duration \a when.
353
392
  ///
354
393
  /// The \a closure will execute when time \a when arrives unless it has been
355
394
  /// cancelled via the \a Cancel method. If cancelled, the closure will not be
356
395
  /// run, nor will it be deleted. Ownership remains with the caller.
357
- virtual TaskHandle RunAt(absl::Time when, Closure* closure) = 0;
358
- /// Synonymous with scheduling an alarm to run at time \a when.
396
+ virtual TaskHandle RunAfter(Duration when, Closure* closure) = 0;
397
+ /// Synonymous with scheduling an alarm to run after duration \a when.
359
398
  ///
360
399
  /// The \a closure will execute when time \a when arrives unless it has been
361
400
  /// cancelled via the \a Cancel method. If cancelled, the closure will not be
@@ -363,10 +402,10 @@ class EventEngine {
363
402
  /// version's \a closure will be deleted by the EventEngine after the closure
364
403
  /// has been run, or upon cancellation.
365
404
  ///
366
- /// This version of \a RunAt may be less performant than the \a Closure
405
+ /// This version of \a RunAfter may be less performant than the \a Closure
367
406
  /// version in some scenarios. This overload is useful in situations where
368
407
  /// performance is not a critical concern.
369
- virtual TaskHandle RunAt(absl::Time when, std::function<void()> closure) = 0;
408
+ virtual TaskHandle RunAfter(Duration when, std::function<void()> closure) = 0;
370
409
  /// Request cancellation of a task.
371
410
  ///
372
411
  /// If the associated closure has already been scheduled to run, it will not
@@ -375,6 +414,11 @@ class EventEngine {
375
414
  /// If the associated callback has not been scheduled to run, it will be
376
415
  /// cancelled, and the associated std::function or \a Closure* will not be
377
416
  /// executed. In this case, Cancel will return true.
417
+ ///
418
+ /// Implementation note: closures should be destroyed in a timely manner after
419
+ /// execution or cancelliation (milliseconds), since any state bound to the
420
+ /// closure may need to be destroyed for things to progress (e.g., if a
421
+ /// closure holds a ref to some ref-counted object).
378
422
  virtual bool Cancel(TaskHandle handle) = 0;
379
423
  };
380
424
 
@@ -388,7 +432,7 @@ class EventEngine {
388
432
  /// created, applications must set a custom EventEngine factory method *before*
389
433
  /// grpc is initialized.
390
434
  void SetDefaultEventEngineFactory(
391
- const std::function<std::unique_ptr<EventEngine>()>* factory);
435
+ std::function<std::unique_ptr<EventEngine>()> factory);
392
436
 
393
437
  /// Create an EventEngine using the default factory.
394
438
  std::unique_ptr<EventEngine> CreateEventEngine();
@@ -26,24 +26,9 @@
26
26
  #include <grpc/event_engine/internal/memory_allocator_impl.h>
27
27
  #include <grpc/slice.h>
28
28
 
29
- // forward-declaring an internal struct, not used publicly.
30
- struct grpc_slice_buffer;
31
-
32
29
  namespace grpc_event_engine {
33
30
  namespace experimental {
34
31
 
35
- // TODO(nnoble): needs implementation
36
- class SliceBuffer {
37
- public:
38
- SliceBuffer() { abort(); }
39
- explicit SliceBuffer(grpc_slice_buffer*) { abort(); }
40
-
41
- grpc_slice_buffer* RawSliceBuffer() { return slice_buffer_; }
42
-
43
- private:
44
- grpc_slice_buffer* slice_buffer_;
45
- };
46
-
47
32
  // Tracks memory allocated by one system.
48
33
  // Is effectively a thin wrapper/smart pointer for a MemoryAllocatorImpl,
49
34
  // providing a convenient and stable API.
@@ -20,7 +20,7 @@
20
20
  #if defined(GPR_ANDROID) || defined(GPR_LINUX) || defined(GPR_APPLE) || \
21
21
  defined(GPR_FREEBSD) || defined(GPR_OPENBSD) || defined(GPR_SOLARIS) || \
22
22
  defined(GPR_AIX) || defined(GPR_NACL) || defined(GPR_FUCHSIA) || \
23
- defined(GRPC_POSIX_SOCKET)
23
+ defined(GRPC_POSIX_SOCKET) || defined(GPR_NETBSD)
24
24
  #define GRPC_EVENT_ENGINE_POSIX
25
25
  #include <arpa/inet.h>
26
26
  #include <netdb.h>
@@ -0,0 +1,286 @@
1
+ // Copyright 2022 gRPC authors.
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // http://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+
15
+ #ifndef GRPC_EVENT_ENGINE_SLICE_H
16
+ #define GRPC_EVENT_ENGINE_SLICE_H
17
+
18
+ #include <grpc/support/port_platform.h>
19
+
20
+ #include <string.h>
21
+
22
+ #include <cstdint>
23
+ #include <string>
24
+ #include <utility>
25
+
26
+ #include "absl/strings/string_view.h"
27
+
28
+ #include <grpc/slice.h>
29
+ #include <grpc/support/log.h>
30
+
31
+ // This public slice definition largely based of the internal grpc_core::Slice
32
+ // implementation. Changes to this implementation might warrant changes to the
33
+ // internal grpc_core::Slice type as well.
34
+
35
+ namespace grpc_event_engine {
36
+ namespace experimental {
37
+
38
+ // Forward declarations
39
+ class Slice;
40
+ class MutableSlice;
41
+
42
+ namespace slice_detail {
43
+
44
+ // Returns an empty slice.
45
+ static constexpr grpc_slice EmptySlice() { return {nullptr, {}}; }
46
+
47
+ // BaseSlice holds the grpc_slice object, but does not apply refcounting policy.
48
+ // It does export immutable access into the slice, such that this can be shared
49
+ // by all storage policies.
50
+ class BaseSlice {
51
+ public:
52
+ BaseSlice(const BaseSlice&) = delete;
53
+ BaseSlice& operator=(const BaseSlice&) = delete;
54
+ BaseSlice(BaseSlice&& other) = delete;
55
+ BaseSlice& operator=(BaseSlice&& other) = delete;
56
+
57
+ // Iterator access to the underlying bytes
58
+ const uint8_t* begin() const { return GRPC_SLICE_START_PTR(c_slice()); }
59
+ const uint8_t* end() const { return GRPC_SLICE_END_PTR(c_slice()); }
60
+ const uint8_t* cbegin() const { return GRPC_SLICE_START_PTR(c_slice()); }
61
+ const uint8_t* cend() const { return GRPC_SLICE_END_PTR(c_slice()); }
62
+
63
+ // Retrieve a borrowed reference to the underlying grpc_slice.
64
+ const grpc_slice& c_slice() const { return slice_; }
65
+
66
+ // Retrieve the underlying grpc_slice, and replace the one in this object with
67
+ // EmptySlice().
68
+ grpc_slice TakeCSlice() {
69
+ grpc_slice out = slice_;
70
+ slice_ = EmptySlice();
71
+ return out;
72
+ }
73
+
74
+ // As other things... borrowed references.
75
+ absl::string_view as_string_view() const {
76
+ return absl::string_view(reinterpret_cast<const char*>(data()), size());
77
+ }
78
+
79
+ // Array access
80
+ uint8_t operator[](size_t i) const {
81
+ return GRPC_SLICE_START_PTR(c_slice())[i];
82
+ }
83
+
84
+ // Access underlying data
85
+ const uint8_t* data() const { return GRPC_SLICE_START_PTR(c_slice()); }
86
+
87
+ // Size of the slice
88
+ size_t size() const { return GRPC_SLICE_LENGTH(c_slice()); }
89
+ size_t length() const { return size(); }
90
+ bool empty() const { return size() == 0; }
91
+
92
+ // For inlined slices - are these two slices equal?
93
+ // For non-inlined slices - do these two slices refer to the same block of
94
+ // memory?
95
+ bool is_equivalent(const BaseSlice& other) const {
96
+ return grpc_slice_is_equivalent(slice_, other.slice_);
97
+ }
98
+
99
+ uint32_t Hash() const;
100
+
101
+ protected:
102
+ BaseSlice() : slice_(EmptySlice()) {}
103
+ explicit BaseSlice(const grpc_slice& slice) : slice_(slice) {}
104
+ ~BaseSlice() = default;
105
+
106
+ void Swap(BaseSlice* other) { std::swap(slice_, other->slice_); }
107
+ void SetCSlice(const grpc_slice& slice) { slice_ = slice; }
108
+
109
+ uint8_t* mutable_data() { return GRPC_SLICE_START_PTR(slice_); }
110
+
111
+ grpc_slice* c_slice_ptr() { return &slice_; }
112
+
113
+ private:
114
+ grpc_slice slice_;
115
+ };
116
+
117
+ inline bool operator==(const BaseSlice& a, const BaseSlice& b) {
118
+ return grpc_slice_eq(a.c_slice(), b.c_slice()) != 0;
119
+ }
120
+
121
+ inline bool operator!=(const BaseSlice& a, const BaseSlice& b) {
122
+ return grpc_slice_eq(a.c_slice(), b.c_slice()) == 0;
123
+ }
124
+
125
+ inline bool operator==(const BaseSlice& a, absl::string_view b) {
126
+ return a.as_string_view() == b;
127
+ }
128
+
129
+ inline bool operator!=(const BaseSlice& a, absl::string_view b) {
130
+ return a.as_string_view() != b;
131
+ }
132
+
133
+ inline bool operator==(absl::string_view a, const BaseSlice& b) {
134
+ return a == b.as_string_view();
135
+ }
136
+
137
+ inline bool operator!=(absl::string_view a, const BaseSlice& b) {
138
+ return a != b.as_string_view();
139
+ }
140
+
141
+ inline bool operator==(const BaseSlice& a, const grpc_slice& b) {
142
+ return grpc_slice_eq(a.c_slice(), b) != 0;
143
+ }
144
+
145
+ inline bool operator!=(const BaseSlice& a, const grpc_slice& b) {
146
+ return grpc_slice_eq(a.c_slice(), b) == 0;
147
+ }
148
+
149
+ inline bool operator==(const grpc_slice& a, const BaseSlice& b) {
150
+ return grpc_slice_eq(a, b.c_slice()) != 0;
151
+ }
152
+
153
+ inline bool operator!=(const grpc_slice& a, const BaseSlice& b) {
154
+ return grpc_slice_eq(a, b.c_slice()) == 0;
155
+ }
156
+
157
+ template <typename Out>
158
+ struct CopyConstructors {
159
+ static Out FromCopiedString(const char* s) {
160
+ return FromCopiedBuffer(s, strlen(s));
161
+ }
162
+ static Out FromCopiedString(absl::string_view s) {
163
+ return FromCopiedBuffer(s.data(), s.size());
164
+ }
165
+ static Out FromCopiedString(std::string s);
166
+
167
+ static Out FromCopiedBuffer(const char* p, size_t len) {
168
+ return Out(grpc_slice_from_copied_buffer(p, len));
169
+ }
170
+
171
+ template <typename Buffer>
172
+ static Out FromCopiedBuffer(const Buffer& buffer) {
173
+ return FromCopiedBuffer(reinterpret_cast<const char*>(buffer.data()),
174
+ buffer.size());
175
+ }
176
+ };
177
+
178
+ } // namespace slice_detail
179
+
180
+ class MutableSlice : public slice_detail::BaseSlice,
181
+ public slice_detail::CopyConstructors<MutableSlice> {
182
+ public:
183
+ MutableSlice() = default;
184
+ explicit MutableSlice(const grpc_slice& slice);
185
+ ~MutableSlice();
186
+
187
+ MutableSlice(const MutableSlice&) = delete;
188
+ MutableSlice& operator=(const MutableSlice&) = delete;
189
+ MutableSlice(MutableSlice&& other) noexcept
190
+ : slice_detail::BaseSlice(other.TakeCSlice()) {}
191
+ MutableSlice& operator=(MutableSlice&& other) noexcept {
192
+ Swap(&other);
193
+ return *this;
194
+ }
195
+
196
+ static MutableSlice CreateUninitialized(size_t length) {
197
+ return MutableSlice(grpc_slice_malloc(length));
198
+ }
199
+
200
+ // Return a sub slice of this one. Leaves this slice in an indeterminate but
201
+ // valid state.
202
+ MutableSlice TakeSubSlice(size_t pos, size_t n) {
203
+ return MutableSlice(grpc_slice_sub_no_ref(TakeCSlice(), pos, pos + n));
204
+ }
205
+
206
+ // Iterator access to the underlying bytes
207
+ uint8_t* begin() { return mutable_data(); }
208
+ uint8_t* end() { return mutable_data() + size(); }
209
+ uint8_t* data() { return mutable_data(); }
210
+
211
+ // Array access
212
+ uint8_t& operator[](size_t i) { return mutable_data()[i]; }
213
+ };
214
+
215
+ class Slice : public slice_detail::BaseSlice,
216
+ public slice_detail::CopyConstructors<Slice> {
217
+ public:
218
+ Slice() = default;
219
+ ~Slice();
220
+ explicit Slice(const grpc_slice& slice) : slice_detail::BaseSlice(slice) {}
221
+ explicit Slice(slice_detail::BaseSlice&& other)
222
+ : slice_detail::BaseSlice(other.TakeCSlice()) {}
223
+
224
+ Slice(const Slice&) = delete;
225
+ Slice& operator=(const Slice&) = delete;
226
+ Slice(Slice&& other) noexcept : slice_detail::BaseSlice(other.TakeCSlice()) {}
227
+ Slice& operator=(Slice&& other) noexcept {
228
+ Swap(&other);
229
+ return *this;
230
+ }
231
+
232
+ // A slice might refer to some memory that we keep a refcount to (this is
233
+ // owned), or some memory that's inlined into the slice (also owned), or some
234
+ // other block of memory that we know will be available for the lifetime of
235
+ // some operation in the common case (not owned). In the *less common* case
236
+ // that we need to keep that slice text for longer than our API's guarantee us
237
+ // access, we need to take a copy and turn this into something that we do own.
238
+
239
+ // TakeOwned returns an owned slice regardless of current ownership, and
240
+ // leaves the current slice in a valid but externally unpredictable state - in
241
+ // doing so it can avoid adding a ref to the underlying slice.
242
+ Slice TakeOwned();
243
+
244
+ // AsOwned returns an owned slice but does not mutate the current slice,
245
+ // meaning that it may add a reference to the underlying slice.
246
+ Slice AsOwned() const;
247
+
248
+ // TakeMutable returns a MutableSlice, and leaves the current slice in an
249
+ // indeterminate but valid state.
250
+ // A mutable slice requires only one reference to the bytes of the slice -
251
+ // this can be achieved either with inlined storage or with a single
252
+ // reference.
253
+ // If the current slice is refcounted and there are more than one references
254
+ // to that slice, then the slice is copied in order to achieve a mutable
255
+ // version.
256
+ MutableSlice TakeMutable();
257
+
258
+ // Return a sub slice of this one. Leaves this slice in an indeterminate but
259
+ // valid state.
260
+ Slice TakeSubSlice(size_t pos, size_t n) {
261
+ return Slice(grpc_slice_sub_no_ref(TakeCSlice(), pos, pos + n));
262
+ }
263
+
264
+ // Return a sub slice of this one. Adds a reference to the underlying slice.
265
+ Slice RefSubSlice(size_t pos, size_t n) const {
266
+ return Slice(grpc_slice_sub(c_slice(), pos, pos + n));
267
+ }
268
+
269
+ // Split this slice, returning a new slice containing (split:end] and
270
+ // leaving this slice with [begin:split).
271
+ Slice Split(size_t split) {
272
+ return Slice(grpc_slice_split_tail(c_slice_ptr(), split));
273
+ }
274
+
275
+ Slice Ref() const;
276
+
277
+ Slice Copy() const { return Slice(grpc_slice_copy(c_slice())); }
278
+
279
+ static Slice FromRefcountAndBytes(grpc_slice_refcount* r,
280
+ const uint8_t* begin, const uint8_t* end);
281
+ };
282
+
283
+ } // namespace experimental
284
+ } // namespace grpc_event_engine
285
+
286
+ #endif // GRPC_EVENT_ENGINE_SLICE_H
@@ -0,0 +1,118 @@
1
+ // Copyright 2022 gRPC authors.
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // http://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+
15
+ #ifndef GRPC_EVENT_ENGINE_SLICE_BUFFER_H
16
+ #define GRPC_EVENT_ENGINE_SLICE_BUFFER_H
17
+
18
+ #include <grpc/support/port_platform.h>
19
+
20
+ #include <string.h>
21
+
22
+ #include <cstdint>
23
+ #include <string>
24
+
25
+ #include "absl/strings/string_view.h"
26
+ #include "absl/utility/utility.h"
27
+
28
+ #include <grpc/event_engine/slice.h>
29
+ #include <grpc/slice.h>
30
+ #include <grpc/slice_buffer.h>
31
+ #include <grpc/support/log.h>
32
+
33
+ namespace grpc_event_engine {
34
+ namespace experimental {
35
+
36
+ /// A Wrapper around \a grpc_slice_buffer pointer.
37
+ ///
38
+ /// A slice buffer holds the memory for a collection of slices.
39
+ /// The SliceBuffer object itself is meant to only hide the C-style API,
40
+ /// and won't hold the data itself. In terms of lifespan, the
41
+ /// grpc_slice_buffer ought to be kept somewhere inside the caller's objects,
42
+ /// like a transport or an endpoint.
43
+ ///
44
+ /// This lifespan rule is likely to change in the future, as we may
45
+ /// collapse the grpc_slice_buffer structure straight into this class.
46
+ ///
47
+ /// The SliceBuffer API is basically a replica of the grpc_slice_buffer's,
48
+ /// and its documentation will move here once we remove the C structure,
49
+ /// which should happen before the Event Engine's API is no longer
50
+ /// an experimental API.
51
+ class SliceBuffer {
52
+ public:
53
+ explicit SliceBuffer() { grpc_slice_buffer_init(&slice_buffer_); }
54
+ SliceBuffer(const SliceBuffer& other) = delete;
55
+ SliceBuffer(SliceBuffer&& other) noexcept
56
+ : slice_buffer_(other.slice_buffer_) {
57
+ grpc_slice_buffer_init(&slice_buffer_);
58
+ grpc_slice_buffer_swap(&slice_buffer_, &other.slice_buffer_);
59
+ }
60
+ /// Upon destruction, the underlying raw slice buffer is cleaned out and all
61
+ /// slices are unreffed.
62
+ ~SliceBuffer() { grpc_slice_buffer_destroy(&slice_buffer_); }
63
+
64
+ SliceBuffer& operator=(const SliceBuffer&) = delete;
65
+ SliceBuffer& operator=(SliceBuffer&& other) noexcept {
66
+ grpc_slice_buffer_swap(&slice_buffer_, &other.slice_buffer_);
67
+ return *this;
68
+ }
69
+
70
+ /// Appends a new slice into the SliceBuffer and makes an attempt to merge
71
+ /// this slice with the last slice in the SliceBuffer.
72
+ void Append(Slice slice);
73
+
74
+ /// Adds a new slice into the SliceBuffer at the next available index.
75
+ /// Returns the index at which the new slice is added.
76
+ size_t AppendIndexed(Slice slice);
77
+
78
+ /// Returns the number of slices held by the SliceBuffer.
79
+ size_t Count() { return slice_buffer_.count; }
80
+
81
+ /// Removes/deletes the last n bytes in the SliceBuffer.
82
+ void RemoveLastNBytes(size_t n) {
83
+ grpc_slice_buffer_trim_end(&slice_buffer_, n, nullptr);
84
+ }
85
+
86
+ /// Move the first n bytes of the SliceBuffer into a memory pointed to by dst.
87
+ void MoveFirstNBytesIntoBuffer(size_t n, void* dst) {
88
+ grpc_slice_buffer_move_first_into_buffer(&slice_buffer_, n, dst);
89
+ }
90
+
91
+ /// Removes and unrefs all slices in the SliceBuffer.
92
+ void Clear() { grpc_slice_buffer_reset_and_unref(&slice_buffer_); }
93
+
94
+ /// Removes the first slice in the SliceBuffer and returns it.
95
+ Slice TakeFirst();
96
+
97
+ /// Prepends the slice to the the front of the SliceBuffer.
98
+ void Prepend(Slice slice);
99
+
100
+ /// Increased the ref-count of slice at the specified index and returns the
101
+ /// associated slice.
102
+ Slice RefSlice(size_t index);
103
+
104
+ /// The total number of bytes held by the SliceBuffer
105
+ size_t Length() { return slice_buffer_.length; }
106
+
107
+ /// Return a pointer to the back raw grpc_slice_buffer
108
+ grpc_slice_buffer* c_slice_buffer() { return &slice_buffer_; }
109
+
110
+ private:
111
+ /// The backing raw slice buffer.
112
+ grpc_slice_buffer slice_buffer_;
113
+ };
114
+
115
+ } // namespace experimental
116
+ } // namespace grpc_event_engine
117
+
118
+ #endif // GRPC_EVENT_ENGINE_SLICE_BUFFER_H
data/include/grpc/grpc.h CHANGED
@@ -24,8 +24,8 @@
24
24
  #include <stddef.h>
25
25
 
26
26
  #include <grpc/byte_buffer.h>
27
- #include <grpc/impl/codegen/connectivity_state.h>
28
- #include <grpc/impl/codegen/grpc_types.h>
27
+ #include <grpc/impl/codegen/connectivity_state.h> // IWYU pragma: export
28
+ #include <grpc/impl/codegen/grpc_types.h> // IWYU pragma: export
29
29
  #include <grpc/impl/codegen/propagation_bits.h>
30
30
  #include <grpc/slice.h>
31
31
  #include <grpc/status.h>
@@ -542,7 +542,7 @@ GRPCAPI void grpc_resource_quota_set_max_threads(
542
542
 
543
543
  /** EXPERIMENTAL. Dumps xDS configs as a serialized ClientConfig proto.
544
544
  The full name of the proto is envoy.service.status.v3.ClientConfig. */
545
- GRPCAPI grpc_slice grpc_dump_xds_configs();
545
+ GRPCAPI grpc_slice grpc_dump_xds_configs(void);
546
546
 
547
547
  /** Fetch a vtable for a grpc_channel_arg that points to a grpc_resource_quota
548
548
  */
@@ -1047,6 +1047,17 @@ typedef struct grpc_tls_certificate_verifier_external {
1047
1047
  grpc_tls_certificate_verifier* grpc_tls_certificate_verifier_external_create(
1048
1048
  grpc_tls_certificate_verifier_external* external_verifier);
1049
1049
 
1050
+ /**
1051
+ * EXPERIMENTAL API - Subject to change
1052
+ *
1053
+ * Factory function for an internal verifier that won't perform any
1054
+ * post-handshake verification. Note: using this solely without any other
1055
+ * authentication mechanisms on the peer identity will leave your applications
1056
+ * to the MITM(Man-In-The-Middle) attacks. Users should avoid doing so in
1057
+ * production environments.
1058
+ */
1059
+ grpc_tls_certificate_verifier* grpc_tls_certificate_verifier_no_op_create();
1060
+
1050
1061
  /**
1051
1062
  * EXPERIMENTAL API - Subject to change
1052
1063
  *