grpc 1.30.1 → 1.40.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 (1628) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +1195 -18269
  3. data/etc/roots.pem +257 -573
  4. data/include/grpc/compression.h +1 -1
  5. data/include/grpc/event_engine/README.md +38 -0
  6. data/include/grpc/event_engine/endpoint_config.h +48 -0
  7. data/include/grpc/event_engine/event_engine.h +330 -0
  8. data/include/grpc/event_engine/port.h +41 -0
  9. data/include/grpc/event_engine/slice_allocator.h +66 -0
  10. data/include/grpc/grpc.h +38 -9
  11. data/include/grpc/grpc_security.h +291 -186
  12. data/include/grpc/grpc_security_constants.h +18 -0
  13. data/include/grpc/impl/codegen/README.md +22 -0
  14. data/include/grpc/impl/codegen/atm_windows.h +4 -0
  15. data/include/grpc/impl/codegen/byte_buffer.h +1 -1
  16. data/include/grpc/impl/codegen/grpc_types.h +60 -31
  17. data/include/grpc/impl/codegen/log.h +0 -2
  18. data/include/grpc/impl/codegen/port_platform.h +75 -87
  19. data/include/grpc/impl/codegen/sync_windows.h +4 -0
  20. data/include/grpc/module.modulemap +14 -14
  21. data/include/grpc/slice_buffer.h +3 -3
  22. data/include/grpc/support/sync.h +3 -3
  23. data/include/grpc/support/time.h +7 -7
  24. data/src/core/ext/filters/client_channel/backend_metric.cc +14 -13
  25. data/src/core/ext/filters/client_channel/backup_poller.cc +6 -5
  26. data/src/core/ext/filters/client_channel/channel_connectivity.cc +177 -202
  27. data/src/core/ext/filters/client_channel/client_channel.cc +2112 -2959
  28. data/src/core/ext/filters/client_channel/client_channel.h +514 -62
  29. data/src/core/ext/filters/client_channel/client_channel_channelz.h +1 -4
  30. data/src/core/ext/filters/client_channel/client_channel_factory.h +2 -1
  31. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +4 -1
  32. data/src/core/ext/filters/client_channel/config_selector.cc +58 -0
  33. data/src/core/ext/filters/client_channel/config_selector.h +146 -0
  34. data/src/core/ext/filters/client_channel/connector.h +1 -1
  35. data/src/core/ext/filters/client_channel/dynamic_filters.cc +190 -0
  36. data/src/core/ext/filters/client_channel/dynamic_filters.h +99 -0
  37. data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +26 -122
  38. data/src/core/ext/filters/client_channel/global_subchannel_pool.h +15 -10
  39. data/src/core/ext/filters/client_channel/health/health_check_client.cc +46 -35
  40. data/src/core/ext/filters/client_channel/health/health_check_client.h +34 -33
  41. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +39 -37
  42. data/src/core/ext/filters/client_channel/http_proxy.cc +42 -24
  43. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +48 -35
  44. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +7 -5
  45. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +10 -7
  46. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +1 -1
  47. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +6 -6
  48. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +301 -267
  49. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +0 -13
  50. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +0 -3
  51. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +1 -2
  52. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +3 -40
  53. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +3 -1
  54. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +2 -1
  55. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +3 -3
  56. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +1 -1
  57. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +34 -37
  58. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +102 -51
  59. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +757 -0
  60. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +37 -0
  61. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +18 -24
  62. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +15 -37
  63. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +41 -34
  64. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +472 -145
  65. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +52 -24
  66. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h +29 -0
  67. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +787 -0
  68. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +700 -0
  69. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +1372 -0
  70. data/src/core/ext/filters/client_channel/lb_policy.cc +11 -18
  71. data/src/core/ext/filters/client_channel/lb_policy.h +80 -53
  72. data/src/core/ext/filters/client_channel/lb_policy_factory.h +1 -1
  73. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +16 -10
  74. data/src/core/ext/filters/client_channel/lb_policy_registry.h +1 -1
  75. data/src/core/ext/filters/client_channel/local_subchannel_pool.cc +27 -67
  76. data/src/core/ext/filters/client_channel/local_subchannel_pool.h +10 -9
  77. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +71 -78
  78. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +2 -33
  79. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_event_engine.cc +31 -0
  80. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +11 -9
  81. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +14 -12
  82. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +24 -20
  83. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +495 -79
  84. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +6 -1
  85. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_event_engine.cc +28 -0
  86. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc +1 -1
  87. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +1 -1
  88. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +45 -36
  89. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +40 -45
  90. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +8 -6
  91. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +384 -0
  92. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +38 -31
  93. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +883 -71
  94. data/src/core/ext/filters/client_channel/{xds/xds_channel_args.h → resolver/xds/xds_resolver.h} +9 -7
  95. data/src/core/ext/filters/client_channel/resolver.cc +7 -5
  96. data/src/core/ext/filters/client_channel/resolver.h +7 -15
  97. data/src/core/ext/filters/client_channel/resolver_factory.h +6 -6
  98. data/src/core/ext/filters/client_channel/resolver_registry.cc +49 -49
  99. data/src/core/ext/filters/client_channel/resolver_registry.h +2 -2
  100. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +50 -303
  101. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +26 -54
  102. data/src/core/ext/filters/client_channel/retry_filter.cc +2611 -0
  103. data/src/core/ext/filters/client_channel/retry_filter.h +30 -0
  104. data/src/core/ext/filters/client_channel/retry_service_config.cc +316 -0
  105. data/src/core/ext/filters/client_channel/retry_service_config.h +96 -0
  106. data/src/core/ext/filters/client_channel/retry_throttle.cc +5 -3
  107. data/src/core/ext/filters/client_channel/retry_throttle.h +4 -2
  108. data/src/core/ext/filters/client_channel/server_address.cc +129 -7
  109. data/src/core/ext/filters/client_channel/server_address.h +75 -21
  110. data/src/core/ext/filters/client_channel/service_config.cc +27 -21
  111. data/src/core/ext/filters/client_channel/service_config.h +11 -7
  112. data/src/core/ext/filters/client_channel/service_config_call_data.h +60 -2
  113. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +143 -0
  114. data/src/core/ext/filters/client_channel/service_config_parser.cc +14 -12
  115. data/src/core/ext/filters/client_channel/service_config_parser.h +12 -6
  116. data/src/core/ext/filters/client_channel/subchannel.cc +188 -236
  117. data/src/core/ext/filters/client_channel/subchannel.h +88 -113
  118. data/src/core/ext/filters/client_channel/subchannel_interface.h +41 -5
  119. data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +16 -2
  120. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +16 -10
  121. data/src/core/ext/filters/client_idle/client_idle_filter.cc +18 -17
  122. data/src/core/ext/filters/deadline/deadline_filter.cc +94 -86
  123. data/src/core/ext/filters/deadline/deadline_filter.h +7 -11
  124. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +501 -0
  125. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +39 -0
  126. data/src/core/ext/filters/fault_injection/service_config_parser.cc +189 -0
  127. data/src/core/ext/filters/fault_injection/service_config_parser.h +85 -0
  128. data/src/core/ext/filters/http/client/http_client_filter.cc +39 -29
  129. data/src/core/ext/filters/http/client_authority_filter.cc +9 -9
  130. data/src/core/ext/filters/http/http_filters_plugin.cc +8 -4
  131. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +23 -22
  132. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +91 -50
  133. data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +3 -1
  134. data/src/core/ext/filters/http/server/http_server_filter.cc +30 -26
  135. data/src/core/ext/filters/max_age/max_age_filter.cc +50 -44
  136. data/src/core/ext/filters/message_size/message_size_filter.cc +72 -92
  137. data/src/core/ext/filters/message_size/message_size_filter.h +8 -1
  138. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +5 -4
  139. data/src/core/ext/filters/workarounds/workaround_utils.cc +1 -1
  140. data/src/core/ext/transport/chttp2/client/authority.cc +3 -3
  141. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +90 -34
  142. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +22 -5
  143. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +23 -10
  144. data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +23 -11
  145. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +38 -50
  146. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +803 -352
  147. data/src/core/ext/transport/chttp2/server/chttp2_server.h +16 -2
  148. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +14 -5
  149. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +22 -20
  150. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +67 -24
  151. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +8 -8
  152. data/src/core/ext/transport/chttp2/transport/chttp2_slice_allocator.cc +66 -0
  153. data/src/core/ext/transport/chttp2/transport/chttp2_slice_allocator.h +74 -0
  154. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +457 -447
  155. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +12 -1
  156. data/src/core/ext/transport/chttp2/transport/context_list.cc +4 -5
  157. data/src/core/ext/transport/chttp2/transport/context_list.h +4 -4
  158. data/src/core/ext/transport/chttp2/transport/flow_control.cc +36 -33
  159. data/src/core/ext/transport/chttp2/transport/flow_control.h +34 -26
  160. data/src/core/ext/transport/chttp2/transport/frame_data.cc +26 -25
  161. data/src/core/ext/transport/chttp2/transport/frame_data.h +10 -10
  162. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +21 -23
  163. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +6 -6
  164. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +12 -14
  165. data/src/core/ext/transport/chttp2/transport/frame_ping.h +7 -6
  166. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +19 -20
  167. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +6 -6
  168. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +19 -19
  169. data/src/core/ext/transport/chttp2/transport/frame_settings.h +8 -7
  170. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +19 -24
  171. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +4 -6
  172. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +1 -1
  173. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +681 -765
  174. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +195 -74
  175. data/src/core/ext/transport/chttp2/transport/hpack_table.cc +17 -20
  176. data/src/core/ext/transport/chttp2/transport/hpack_table.h +4 -4
  177. data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +2 -2
  178. data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +2 -2
  179. data/src/core/ext/transport/chttp2/transport/internal.h +57 -30
  180. data/src/core/ext/transport/chttp2/transport/parsing.cc +181 -180
  181. data/src/core/ext/transport/chttp2/transport/varint.cc +6 -4
  182. data/src/core/ext/transport/chttp2/transport/writing.cc +24 -25
  183. data/src/core/ext/transport/inproc/inproc_transport.cc +154 -88
  184. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +406 -0
  185. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +1459 -0
  186. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +1 -1
  187. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +1 -1
  188. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +10 -4
  189. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +243 -0
  190. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +865 -0
  191. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +371 -0
  192. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +1452 -0
  193. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +74 -0
  194. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +253 -0
  195. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +461 -0
  196. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +1850 -0
  197. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +35 -0
  198. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +77 -0
  199. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +56 -0
  200. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +364 -0
  201. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +124 -0
  202. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +428 -0
  203. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +35 -0
  204. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +88 -0
  205. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +370 -0
  206. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +1126 -0
  207. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +103 -0
  208. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +388 -0
  209. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +34 -0
  210. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +78 -0
  211. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +53 -0
  212. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +149 -0
  213. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +241 -0
  214. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +839 -0
  215. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +170 -0
  216. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +767 -0
  217. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +36 -0
  218. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +88 -0
  219. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +239 -0
  220. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +982 -0
  221. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +27 -0
  222. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +65 -0
  223. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.c +46 -0
  224. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.h +121 -0
  225. data/src/core/ext/upb-generated/envoy/{api/v2/core → config/core/v3}/socket_option.upb.c +8 -8
  226. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +95 -0
  227. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +43 -0
  228. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +126 -0
  229. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.c +35 -0
  230. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.h +90 -0
  231. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +90 -0
  232. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +243 -0
  233. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +91 -0
  234. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +305 -0
  235. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +112 -0
  236. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +367 -0
  237. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +33 -0
  238. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +73 -0
  239. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +138 -0
  240. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +604 -0
  241. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +161 -0
  242. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +638 -0
  243. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +48 -0
  244. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +171 -0
  245. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +42 -0
  246. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +115 -0
  247. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +144 -0
  248. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +488 -0
  249. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +141 -0
  250. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +452 -0
  251. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +179 -0
  252. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +662 -0
  253. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +82 -0
  254. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +294 -0
  255. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +953 -0
  256. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +3862 -0
  257. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +60 -0
  258. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +159 -0
  259. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +49 -0
  260. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +122 -0
  261. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +29 -0
  262. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +67 -0
  263. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +79 -0
  264. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +268 -0
  265. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +79 -0
  266. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +285 -0
  267. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +42 -0
  268. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +117 -0
  269. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +404 -0
  270. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +1671 -0
  271. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c +19 -0
  272. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h +35 -0
  273. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +116 -0
  274. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +475 -0
  275. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +73 -0
  276. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +219 -0
  277. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +146 -0
  278. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +621 -0
  279. data/src/core/ext/upb-generated/envoy/{api/v2/rds.upb.c → service/cluster/v3/cds.upb.c} +6 -9
  280. data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.h +56 -0
  281. data/src/core/ext/upb-generated/envoy/service/discovery/{v2 → v3}/ads.upb.c +6 -5
  282. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +56 -0
  283. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +146 -0
  284. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +499 -0
  285. data/src/core/ext/upb-generated/envoy/{api/v2 → service/endpoint/v3}/eds.upb.c +6 -10
  286. data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.h +56 -0
  287. data/src/core/ext/upb-generated/envoy/{api/v2 → service/listener/v3}/lds.upb.c +6 -10
  288. data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.h +56 -0
  289. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +54 -0
  290. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +151 -0
  291. data/src/core/ext/upb-generated/envoy/{api/v2/srds.upb.c → service/route/v3/rds.upb.c} +6 -7
  292. data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.h +56 -0
  293. data/src/core/ext/upb-generated/envoy/{api/v2/cds.upb.c → service/route/v3/srds.upb.c} +6 -7
  294. data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.h +56 -0
  295. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +121 -0
  296. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +438 -0
  297. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.c +60 -0
  298. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.h +181 -0
  299. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +47 -0
  300. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +128 -0
  301. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +36 -0
  302. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +90 -0
  303. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +35 -0
  304. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +84 -0
  305. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +34 -0
  306. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +78 -0
  307. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +65 -0
  308. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +166 -0
  309. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +53 -0
  310. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +146 -0
  311. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +46 -0
  312. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +124 -0
  313. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +63 -0
  314. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +207 -0
  315. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +88 -0
  316. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +301 -0
  317. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +90 -0
  318. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +283 -0
  319. data/src/core/ext/upb-generated/envoy/type/{http.upb.c → v3/http.upb.c} +2 -2
  320. data/src/core/ext/upb-generated/envoy/type/{http.upb.h → v3/http.upb.h} +9 -9
  321. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.c +40 -0
  322. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +99 -0
  323. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +51 -0
  324. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +130 -0
  325. data/src/core/ext/upb-generated/envoy/type/{semantic_version.upb.c → v3/semantic_version.upb.c} +7 -6
  326. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +68 -0
  327. data/src/core/ext/upb-generated/google/api/annotations.upb.h +1 -1
  328. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +242 -0
  329. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +830 -0
  330. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +251 -0
  331. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +871 -0
  332. data/src/core/ext/upb-generated/google/api/http.upb.c +3 -3
  333. data/src/core/ext/upb-generated/google/api/http.upb.h +52 -32
  334. data/src/core/ext/upb-generated/google/protobuf/any.upb.c +1 -1
  335. data/src/core/ext/upb-generated/google/protobuf/any.upb.h +12 -6
  336. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +106 -106
  337. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +688 -499
  338. data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +1 -1
  339. data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +12 -6
  340. data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +1 -1
  341. data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +8 -2
  342. data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +5 -5
  343. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +55 -57
  344. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +1 -1
  345. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +12 -6
  346. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +9 -9
  347. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +82 -28
  348. data/src/core/ext/upb-generated/google/rpc/status.upb.c +1 -1
  349. data/src/core/ext/upb-generated/google/rpc/status.upb.h +17 -10
  350. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +5 -5
  351. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +40 -45
  352. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +43 -43
  353. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +236 -184
  354. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +5 -5
  355. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +29 -13
  356. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +2 -2
  357. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +19 -7
  358. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +17 -17
  359. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +122 -62
  360. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +3 -3
  361. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +30 -12
  362. data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +31 -0
  363. data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +64 -0
  364. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +1 -1
  365. data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +2 -2
  366. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +12 -6
  367. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +27 -0
  368. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +60 -0
  369. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c +9 -9
  370. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h +48 -68
  371. data/src/core/ext/upb-generated/udpa/type/v1/typed_struct.upb.c +33 -0
  372. data/src/core/ext/upb-generated/udpa/type/v1/typed_struct.upb.h +77 -0
  373. data/src/core/ext/upb-generated/validate/validate.upb.c +133 -117
  374. data/src/core/ext/upb-generated/validate/validate.upb.h +881 -645
  375. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +28 -0
  376. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +60 -0
  377. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +52 -0
  378. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +143 -0
  379. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +42 -0
  380. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +84 -0
  381. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +36 -0
  382. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +94 -0
  383. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +54 -0
  384. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +166 -0
  385. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +36 -0
  386. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +85 -0
  387. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.c +354 -0
  388. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.h +140 -0
  389. data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.c +46 -0
  390. data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.h +30 -0
  391. data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.c +41 -0
  392. data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.h +35 -0
  393. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +252 -0
  394. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.h +105 -0
  395. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +424 -0
  396. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.h +120 -0
  397. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.c +100 -0
  398. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.h +45 -0
  399. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +570 -0
  400. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +145 -0
  401. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.c +53 -0
  402. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.h +35 -0
  403. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.c +136 -0
  404. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.h +35 -0
  405. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.c +127 -0
  406. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.h +65 -0
  407. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.c +56 -0
  408. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.h +35 -0
  409. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +300 -0
  410. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.h +145 -0
  411. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +144 -0
  412. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.h +55 -0
  413. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.c +56 -0
  414. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.h +35 -0
  415. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.c +66 -0
  416. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.h +40 -0
  417. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.c +263 -0
  418. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.h +100 -0
  419. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +233 -0
  420. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.h +70 -0
  421. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.c +56 -0
  422. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.h +35 -0
  423. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +287 -0
  424. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.h +100 -0
  425. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.c +43 -0
  426. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.h +35 -0
  427. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/resolver.upbdefs.c +59 -0
  428. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/resolver.upbdefs.h +40 -0
  429. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.c +59 -0
  430. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.h +35 -0
  431. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +72 -0
  432. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.h +35 -0
  433. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/udp_socket_config.upbdefs.c +52 -0
  434. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/udp_socket_config.upbdefs.h +35 -0
  435. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.c +107 -0
  436. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.h +50 -0
  437. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +113 -0
  438. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.h +50 -0
  439. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.c +146 -0
  440. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.h +55 -0
  441. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.c +50 -0
  442. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.h +35 -0
  443. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +205 -0
  444. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.h +60 -0
  445. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.c +201 -0
  446. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.h +65 -0
  447. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.c +90 -0
  448. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.h +35 -0
  449. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +67 -0
  450. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.h +40 -0
  451. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.c +141 -0
  452. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.h +70 -0
  453. data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.c +141 -0
  454. data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.h +70 -0
  455. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +115 -0
  456. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.h +45 -0
  457. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +964 -0
  458. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +295 -0
  459. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.c +71 -0
  460. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.h +45 -0
  461. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.c +61 -0
  462. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.h +40 -0
  463. data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.c +51 -0
  464. data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.h +35 -0
  465. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.c +102 -0
  466. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.h +55 -0
  467. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.c +123 -0
  468. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.h +45 -0
  469. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c +79 -0
  470. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.h +35 -0
  471. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +571 -0
  472. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h +125 -0
  473. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.c +44 -0
  474. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.h +30 -0
  475. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +178 -0
  476. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.h +55 -0
  477. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c +97 -0
  478. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.h +45 -0
  479. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +246 -0
  480. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.h +60 -0
  481. data/src/core/ext/upbdefs-generated/envoy/service/cluster/v3/cds.upbdefs.c +72 -0
  482. data/src/core/ext/upbdefs-generated/envoy/service/cluster/v3/cds.upbdefs.h +35 -0
  483. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.c +60 -0
  484. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.h +35 -0
  485. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +142 -0
  486. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.h +65 -0
  487. data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.c +73 -0
  488. data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.h +35 -0
  489. data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.c +72 -0
  490. data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.h +35 -0
  491. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.c +80 -0
  492. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.h +40 -0
  493. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.c +80 -0
  494. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.h +35 -0
  495. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/srds.upbdefs.c +74 -0
  496. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/srds.upbdefs.h +35 -0
  497. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +163 -0
  498. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.h +55 -0
  499. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/path_transformation.upbdefs.c +64 -0
  500. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/path_transformation.upbdefs.h +50 -0
  501. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.c +64 -0
  502. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.h +40 -0
  503. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.c +56 -0
  504. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.h +35 -0
  505. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.c +54 -0
  506. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.h +35 -0
  507. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.c +53 -0
  508. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.h +35 -0
  509. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +76 -0
  510. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.h +45 -0
  511. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.c +69 -0
  512. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.h +40 -0
  513. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.c +63 -0
  514. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.h +40 -0
  515. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.c +81 -0
  516. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.h +45 -0
  517. data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.c +92 -0
  518. data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.h +65 -0
  519. data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.c +95 -0
  520. data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.h +55 -0
  521. data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.c +34 -0
  522. data/src/core/ext/{upb-generated/gogoproto/gogo.upb.h → upbdefs-generated/envoy/type/v3/http.upbdefs.h} +10 -10
  523. data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.c +59 -0
  524. data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.h +40 -0
  525. data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.c +54 -0
  526. data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.h +45 -0
  527. data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.c +47 -0
  528. data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.h +35 -0
  529. data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.c +40 -0
  530. data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.h +30 -0
  531. data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.c +61 -0
  532. data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.h +45 -0
  533. data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.c +39 -0
  534. data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.h +35 -0
  535. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +386 -0
  536. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.h +165 -0
  537. data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.c +40 -0
  538. data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.h +35 -0
  539. data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.c +37 -0
  540. data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.h +35 -0
  541. data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.c +65 -0
  542. data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.h +50 -0
  543. data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.c +40 -0
  544. data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.h +35 -0
  545. data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.c +66 -0
  546. data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.h +75 -0
  547. data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.c +42 -0
  548. data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.h +35 -0
  549. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.c +70 -0
  550. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.h +45 -0
  551. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.c +56 -0
  552. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.h +35 -0
  553. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.c +33 -0
  554. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.h +30 -0
  555. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.c +49 -0
  556. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.h +35 -0
  557. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.c +43 -0
  558. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.h +35 -0
  559. data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.c +44 -0
  560. data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.h +35 -0
  561. data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.c +332 -0
  562. data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.h +145 -0
  563. data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.c +42 -0
  564. data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.h +35 -0
  565. data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.c +62 -0
  566. data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.h +40 -0
  567. data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.c +45 -0
  568. data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.h +40 -0
  569. data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.c +49 -0
  570. data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.h +35 -0
  571. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.c +67 -0
  572. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.h +40 -0
  573. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.c +50 -0
  574. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.h +35 -0
  575. data/src/core/ext/xds/certificate_provider_factory.h +61 -0
  576. data/src/core/ext/xds/certificate_provider_registry.cc +103 -0
  577. data/src/core/ext/xds/certificate_provider_registry.h +57 -0
  578. data/src/core/ext/xds/certificate_provider_store.cc +87 -0
  579. data/src/core/ext/xds/certificate_provider_store.h +112 -0
  580. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +144 -0
  581. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +69 -0
  582. data/src/core/ext/xds/xds_api.cc +4124 -0
  583. data/src/core/ext/xds/xds_api.h +709 -0
  584. data/src/core/ext/xds/xds_bootstrap.cc +496 -0
  585. data/src/core/ext/xds/xds_bootstrap.h +115 -0
  586. data/src/core/ext/xds/xds_certificate_provider.cc +405 -0
  587. data/src/core/ext/xds/xds_certificate_provider.h +151 -0
  588. data/src/core/ext/xds/xds_channel_args.h +32 -0
  589. data/src/core/ext/{filters/client_channel/xds → xds}/xds_client.cc +1056 -884
  590. data/src/core/ext/xds/xds_client.h +375 -0
  591. data/src/core/ext/{filters/client_channel/xds → xds}/xds_client_stats.cc +63 -19
  592. data/src/core/ext/{filters/client_channel/xds → xds}/xds_client_stats.h +52 -23
  593. data/src/core/ext/xds/xds_http_fault_filter.cc +226 -0
  594. data/src/core/ext/xds/xds_http_fault_filter.h +63 -0
  595. data/src/core/ext/xds/xds_http_filters.cc +115 -0
  596. data/src/core/ext/xds/xds_http_filters.h +133 -0
  597. data/src/core/ext/xds/xds_server_config_fetcher.cc +546 -0
  598. data/src/core/{ext/filters/client_channel → lib/address_utils}/parse_address.cc +129 -45
  599. data/src/core/lib/address_utils/parse_address.h +77 -0
  600. data/src/core/lib/{iomgr → address_utils}/sockaddr_utils.cc +138 -19
  601. data/src/core/lib/{iomgr → address_utils}/sockaddr_utils.h +38 -7
  602. data/src/core/lib/channel/call_tracer.h +85 -0
  603. data/src/core/lib/channel/channel_args.cc +9 -8
  604. data/src/core/lib/channel/channel_args.h +0 -1
  605. data/src/core/lib/channel/channel_stack.cc +22 -9
  606. data/src/core/lib/channel/channel_stack.h +18 -10
  607. data/src/core/lib/channel/channel_stack_builder.cc +2 -2
  608. data/src/core/lib/channel/channel_stack_builder.h +1 -1
  609. data/src/core/lib/channel/channel_trace.cc +6 -8
  610. data/src/core/lib/channel/channel_trace.h +1 -1
  611. data/src/core/lib/channel/channelz.cc +148 -99
  612. data/src/core/lib/channel/channelz.h +47 -24
  613. data/src/core/lib/channel/channelz_registry.cc +29 -12
  614. data/src/core/lib/channel/channelz_registry.h +3 -1
  615. data/src/core/lib/channel/connected_channel.cc +4 -4
  616. data/src/core/lib/channel/context.h +3 -0
  617. data/src/core/lib/channel/handshaker.cc +11 -52
  618. data/src/core/lib/channel/handshaker.h +8 -25
  619. data/src/core/lib/channel/status_util.cc +12 -2
  620. data/src/core/lib/channel/status_util.h +9 -0
  621. data/src/core/lib/compression/compression.cc +8 -4
  622. data/src/core/lib/compression/compression_args.cc +3 -2
  623. data/src/core/lib/compression/compression_internal.cc +10 -5
  624. data/src/core/lib/compression/compression_internal.h +2 -1
  625. data/src/core/lib/compression/stream_compression.h +1 -1
  626. data/src/core/lib/compression/stream_compression_gzip.h +1 -1
  627. data/src/core/lib/compression/stream_compression_identity.cc +1 -3
  628. data/src/core/lib/compression/stream_compression_identity.h +1 -1
  629. data/src/core/lib/debug/stats.h +3 -3
  630. data/src/core/lib/debug/stats_data.cc +1 -0
  631. data/src/core/lib/debug/stats_data.h +13 -13
  632. data/src/core/lib/event_engine/endpoint_config.cc +46 -0
  633. data/src/core/lib/event_engine/endpoint_config_internal.h +42 -0
  634. data/src/core/lib/event_engine/event_engine.cc +50 -0
  635. data/src/core/lib/event_engine/sockaddr.cc +40 -0
  636. data/src/core/lib/event_engine/sockaddr.h +44 -0
  637. data/src/core/lib/gpr/alloc.cc +3 -2
  638. data/src/core/lib/gpr/cpu_iphone.cc +10 -2
  639. data/src/core/lib/gpr/log.cc +59 -17
  640. data/src/core/lib/gpr/log_linux.cc +23 -9
  641. data/src/core/lib/gpr/log_posix.cc +19 -7
  642. data/src/core/lib/gpr/log_windows.cc +18 -4
  643. data/src/core/lib/gpr/murmur_hash.cc +5 -3
  644. data/src/core/lib/gpr/spinlock.h +10 -2
  645. data/src/core/lib/gpr/string.cc +33 -31
  646. data/src/core/lib/gpr/string.h +9 -8
  647. data/src/core/lib/gpr/sync.cc +4 -4
  648. data/src/core/lib/gpr/sync_abseil.cc +3 -6
  649. data/src/core/lib/gpr/sync_posix.cc +2 -8
  650. data/src/core/lib/gpr/sync_windows.cc +2 -2
  651. data/src/core/lib/gpr/time.cc +12 -12
  652. data/src/core/lib/gpr/time_precise.cc +5 -2
  653. data/src/core/lib/gpr/time_precise.h +6 -2
  654. data/src/core/lib/gpr/tls.h +4 -0
  655. data/src/core/lib/gpr/tls_msvc.h +2 -0
  656. data/src/core/lib/gpr/tls_stdcpp.h +48 -0
  657. data/src/core/lib/gpr/useful.h +5 -4
  658. data/src/core/lib/gpr/wrap_memcpy.cc +2 -1
  659. data/src/core/lib/gprpp/arena.h +3 -2
  660. data/src/core/lib/gprpp/atomic.h +3 -3
  661. data/src/core/lib/gprpp/dual_ref_counted.h +331 -0
  662. data/src/core/lib/gprpp/examine_stack.cc +43 -0
  663. data/src/core/lib/gprpp/examine_stack.h +46 -0
  664. data/src/core/lib/gprpp/fork.cc +2 -2
  665. data/src/core/lib/gprpp/global_config_env.cc +8 -6
  666. data/src/core/lib/gprpp/manual_constructor.h +2 -2
  667. data/src/core/lib/gprpp/mpscq.cc +2 -2
  668. data/src/core/lib/gprpp/orphanable.h +7 -11
  669. data/src/core/lib/gprpp/ref_counted.h +105 -68
  670. data/src/core/lib/gprpp/ref_counted_ptr.h +168 -7
  671. data/src/core/lib/gprpp/stat.h +38 -0
  672. data/src/core/lib/gprpp/stat_posix.cc +49 -0
  673. data/src/core/lib/gprpp/stat_windows.cc +48 -0
  674. data/src/core/lib/gprpp/status_helper.cc +407 -0
  675. data/src/core/lib/gprpp/status_helper.h +183 -0
  676. data/src/core/lib/gprpp/sync.h +104 -43
  677. data/src/core/lib/gprpp/thd.h +3 -3
  678. data/src/core/lib/gprpp/thd_posix.cc +42 -37
  679. data/src/core/lib/gprpp/thd_windows.cc +3 -1
  680. data/src/core/lib/gprpp/time_util.cc +77 -0
  681. data/src/core/lib/gprpp/time_util.h +42 -0
  682. data/src/core/lib/http/httpcli.cc +25 -22
  683. data/src/core/lib/http/httpcli.h +2 -3
  684. data/src/core/lib/http/httpcli_security_connector.cc +19 -15
  685. data/src/core/lib/http/parser.cc +63 -43
  686. data/src/core/lib/http/parser.h +4 -4
  687. data/src/core/lib/iomgr/buffer_list.cc +8 -10
  688. data/src/core/lib/iomgr/buffer_list.h +5 -6
  689. data/src/core/lib/iomgr/call_combiner.cc +21 -15
  690. data/src/core/lib/iomgr/call_combiner.h +12 -14
  691. data/src/core/lib/iomgr/cfstream_handle.cc +6 -5
  692. data/src/core/lib/iomgr/cfstream_handle.h +1 -1
  693. data/src/core/lib/iomgr/closure.h +7 -6
  694. data/src/core/lib/iomgr/combiner.cc +16 -13
  695. data/src/core/lib/iomgr/combiner.h +2 -2
  696. data/src/core/lib/iomgr/endpoint.cc +6 -2
  697. data/src/core/lib/iomgr/endpoint.h +10 -6
  698. data/src/core/lib/iomgr/endpoint_cfstream.cc +46 -23
  699. data/src/core/lib/iomgr/endpoint_pair_event_engine.cc +33 -0
  700. data/src/core/lib/iomgr/endpoint_pair_posix.cc +10 -10
  701. data/src/core/lib/iomgr/endpoint_pair_windows.cc +1 -1
  702. data/src/core/lib/iomgr/error.cc +185 -73
  703. data/src/core/lib/iomgr/error.h +218 -107
  704. data/src/core/lib/iomgr/error_cfstream.cc +12 -10
  705. data/src/core/lib/iomgr/error_cfstream.h +2 -2
  706. data/src/core/lib/iomgr/error_internal.h +6 -2
  707. data/src/core/lib/iomgr/ev_apple.cc +16 -13
  708. data/src/core/lib/iomgr/ev_apple.h +1 -1
  709. data/src/core/lib/iomgr/ev_epoll1_linux.cc +47 -41
  710. data/src/core/lib/iomgr/ev_epollex_linux.cc +92 -87
  711. data/src/core/lib/iomgr/ev_poll_posix.cc +41 -35
  712. data/src/core/lib/iomgr/ev_posix.cc +12 -11
  713. data/src/core/lib/iomgr/ev_posix.h +9 -9
  714. data/src/core/lib/iomgr/event_engine/closure.cc +54 -0
  715. data/src/core/lib/iomgr/event_engine/closure.h +33 -0
  716. data/src/core/lib/iomgr/event_engine/endpoint.cc +192 -0
  717. data/src/core/lib/iomgr/event_engine/endpoint.h +53 -0
  718. data/src/core/lib/iomgr/event_engine/iomgr.cc +105 -0
  719. data/src/core/lib/iomgr/event_engine/iomgr.h +24 -0
  720. data/src/core/lib/iomgr/event_engine/pollset.cc +87 -0
  721. data/src/core/lib/iomgr/event_engine/pollset.h +25 -0
  722. data/src/core/lib/iomgr/event_engine/promise.h +51 -0
  723. data/src/core/lib/iomgr/event_engine/resolved_address_internal.cc +41 -0
  724. data/src/core/lib/iomgr/event_engine/resolved_address_internal.h +35 -0
  725. data/src/core/lib/iomgr/event_engine/resolver.cc +110 -0
  726. data/src/core/lib/iomgr/event_engine/tcp.cc +263 -0
  727. data/src/core/lib/iomgr/event_engine/timer.cc +57 -0
  728. data/src/core/lib/iomgr/exec_ctx.cc +19 -7
  729. data/src/core/lib/iomgr/exec_ctx.h +20 -17
  730. data/src/core/lib/iomgr/executor/mpmcqueue.h +5 -5
  731. data/src/core/lib/iomgr/executor/threadpool.cc +2 -3
  732. data/src/core/lib/iomgr/executor/threadpool.h +6 -6
  733. data/src/core/lib/iomgr/executor.cc +10 -9
  734. data/src/core/lib/iomgr/executor.h +3 -3
  735. data/src/core/lib/iomgr/iomgr.cc +3 -3
  736. data/src/core/lib/iomgr/iomgr.h +1 -1
  737. data/src/core/lib/iomgr/iomgr_custom.cc +1 -1
  738. data/src/core/lib/iomgr/iomgr_internal.cc +2 -2
  739. data/src/core/lib/iomgr/iomgr_internal.h +3 -3
  740. data/src/core/lib/iomgr/iomgr_posix.cc +3 -2
  741. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +42 -13
  742. data/src/core/lib/iomgr/iomgr_windows.cc +1 -1
  743. data/src/core/lib/iomgr/is_epollexclusive_available.cc +14 -0
  744. data/src/core/lib/iomgr/load_file.cc +4 -4
  745. data/src/core/lib/iomgr/load_file.h +2 -2
  746. data/src/core/lib/iomgr/lockfree_event.cc +20 -15
  747. data/src/core/lib/iomgr/lockfree_event.h +2 -2
  748. data/src/core/lib/iomgr/pollset.cc +5 -5
  749. data/src/core/lib/iomgr/pollset.h +9 -9
  750. data/src/core/lib/iomgr/pollset_custom.cc +7 -7
  751. data/src/core/lib/iomgr/pollset_custom.h +3 -1
  752. data/src/core/lib/iomgr/pollset_set_custom.cc +1 -1
  753. data/src/core/lib/iomgr/pollset_uv.cc +3 -1
  754. data/src/core/lib/iomgr/pollset_uv.h +5 -1
  755. data/src/core/lib/iomgr/pollset_windows.cc +5 -5
  756. data/src/core/lib/iomgr/port.h +8 -26
  757. data/src/core/lib/iomgr/python_util.h +5 -5
  758. data/src/core/lib/iomgr/resolve_address.cc +12 -8
  759. data/src/core/lib/iomgr/resolve_address.h +12 -6
  760. data/src/core/lib/iomgr/resolve_address_custom.cc +23 -27
  761. data/src/core/lib/iomgr/resolve_address_custom.h +3 -3
  762. data/src/core/lib/iomgr/resolve_address_posix.cc +4 -8
  763. data/src/core/lib/iomgr/resolve_address_windows.cc +12 -12
  764. data/src/core/lib/iomgr/resource_quota.cc +48 -42
  765. data/src/core/lib/iomgr/sockaddr.h +1 -0
  766. data/src/core/lib/iomgr/socket_factory_posix.cc +3 -2
  767. data/src/core/lib/iomgr/socket_mutator.cc +18 -4
  768. data/src/core/lib/iomgr/socket_mutator.h +26 -2
  769. data/src/core/lib/iomgr/socket_utils_common_posix.cc +120 -77
  770. data/src/core/lib/iomgr/socket_utils_posix.h +20 -20
  771. data/src/core/lib/iomgr/socket_windows.cc +4 -5
  772. data/src/core/lib/iomgr/tcp_client.cc +3 -3
  773. data/src/core/lib/iomgr/tcp_client_cfstream.cc +13 -15
  774. data/src/core/lib/iomgr/tcp_client_custom.cc +17 -20
  775. data/src/core/lib/iomgr/tcp_client_posix.cc +48 -54
  776. data/src/core/lib/iomgr/tcp_client_posix.h +3 -4
  777. data/src/core/lib/iomgr/tcp_client_windows.cc +16 -14
  778. data/src/core/lib/iomgr/tcp_custom.cc +67 -48
  779. data/src/core/lib/iomgr/tcp_custom.h +14 -13
  780. data/src/core/lib/iomgr/tcp_posix.cc +118 -94
  781. data/src/core/lib/iomgr/tcp_posix.h +8 -0
  782. data/src/core/lib/iomgr/tcp_server.cc +9 -10
  783. data/src/core/lib/iomgr/tcp_server.h +19 -16
  784. data/src/core/lib/iomgr/tcp_server_custom.cc +57 -58
  785. data/src/core/lib/iomgr/tcp_server_posix.cc +62 -61
  786. data/src/core/lib/iomgr/tcp_server_utils_posix.h +16 -16
  787. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +26 -25
  788. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +12 -17
  789. data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +4 -4
  790. data/src/core/lib/iomgr/tcp_server_windows.cc +42 -41
  791. data/src/core/lib/iomgr/tcp_uv.cc +27 -25
  792. data/src/core/lib/iomgr/tcp_windows.cc +39 -23
  793. data/src/core/lib/iomgr/tcp_windows.h +2 -2
  794. data/src/core/lib/iomgr/timer.h +6 -1
  795. data/src/core/lib/iomgr/timer_custom.cc +7 -6
  796. data/src/core/lib/iomgr/timer_custom.h +1 -1
  797. data/src/core/lib/iomgr/timer_generic.cc +24 -23
  798. data/src/core/lib/iomgr/timer_manager.cc +4 -4
  799. data/src/core/lib/iomgr/udp_server.cc +46 -45
  800. data/src/core/lib/iomgr/udp_server.h +6 -4
  801. data/src/core/lib/iomgr/unix_sockets_posix.cc +36 -30
  802. data/src/core/lib/iomgr/unix_sockets_posix.h +9 -2
  803. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +20 -7
  804. data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +3 -3
  805. data/src/core/lib/iomgr/wakeup_fd_nospecial.cc +1 -1
  806. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +6 -6
  807. data/src/core/lib/iomgr/wakeup_fd_posix.cc +3 -3
  808. data/src/core/lib/iomgr/wakeup_fd_posix.h +8 -6
  809. data/src/core/lib/iomgr/work_serializer.h +17 -1
  810. data/src/core/lib/json/json.h +13 -3
  811. data/src/core/lib/json/json_reader.cc +33 -31
  812. data/src/core/lib/json/json_util.cc +58 -0
  813. data/src/core/lib/json/json_util.h +204 -0
  814. data/src/core/lib/json/json_writer.cc +2 -1
  815. data/src/core/lib/matchers/matchers.cc +327 -0
  816. data/src/core/lib/matchers/matchers.h +161 -0
  817. data/src/core/lib/security/authorization/authorization_engine.h +44 -0
  818. data/src/core/lib/security/authorization/authorization_policy_provider.h +32 -0
  819. data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +46 -0
  820. data/src/core/lib/security/authorization/evaluate_args.cc +209 -0
  821. data/src/core/lib/security/authorization/evaluate_args.h +91 -0
  822. data/src/core/lib/security/context/security_context.cc +4 -3
  823. data/src/core/lib/security/context/security_context.h +3 -1
  824. data/src/core/lib/security/credentials/alts/alts_credentials.cc +2 -1
  825. data/src/core/lib/security/credentials/alts/alts_credentials.h +1 -1
  826. data/src/core/lib/security/credentials/alts/check_gcp_environment.cc +1 -1
  827. data/src/core/lib/security/credentials/composite/composite_credentials.cc +4 -4
  828. data/src/core/lib/security/credentials/composite/composite_credentials.h +2 -2
  829. data/src/core/lib/security/credentials/credentials.cc +7 -7
  830. data/src/core/lib/security/credentials/credentials.h +12 -9
  831. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +417 -0
  832. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +82 -0
  833. data/src/core/lib/security/credentials/external/aws_request_signer.cc +214 -0
  834. data/src/core/lib/security/credentials/external/aws_request_signer.h +72 -0
  835. data/src/core/lib/security/credentials/external/external_account_credentials.cc +500 -0
  836. data/src/core/lib/security/credentials/external/external_account_credentials.h +121 -0
  837. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +136 -0
  838. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +49 -0
  839. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +213 -0
  840. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +60 -0
  841. data/src/core/lib/security/credentials/fake/fake_credentials.cc +5 -4
  842. data/src/core/lib/security/credentials/fake/fake_credentials.h +2 -2
  843. data/src/core/lib/security/credentials/google_default/credentials_generic.cc +8 -6
  844. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +95 -65
  845. data/src/core/lib/security/credentials/iam/iam_credentials.cc +2 -2
  846. data/src/core/lib/security/credentials/iam/iam_credentials.h +2 -2
  847. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +64 -0
  848. data/src/core/lib/security/credentials/jwt/json_token.cc +5 -5
  849. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +10 -7
  850. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +6 -5
  851. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +12 -9
  852. data/src/core/lib/security/credentials/local/local_credentials.cc +2 -1
  853. data/src/core/lib/security/credentials/local/local_credentials.h +1 -1
  854. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +78 -92
  855. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +10 -9
  856. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +12 -12
  857. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +2 -2
  858. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +27 -6
  859. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +12 -2
  860. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +347 -0
  861. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +213 -0
  862. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +454 -0
  863. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +145 -0
  864. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +82 -150
  865. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +65 -185
  866. data/src/core/lib/security/credentials/tls/tls_credentials.cc +18 -13
  867. data/src/core/lib/security/credentials/tls/tls_credentials.h +3 -3
  868. data/src/core/lib/security/credentials/tls/tls_utils.cc +123 -0
  869. data/src/core/lib/security/credentials/tls/tls_utils.h +51 -0
  870. data/src/core/lib/security/credentials/xds/xds_credentials.cc +244 -0
  871. data/src/core/lib/security/credentials/xds/xds_credentials.h +69 -0
  872. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +14 -4
  873. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +33 -28
  874. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +121 -0
  875. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +97 -0
  876. data/src/core/lib/security/security_connector/load_system_roots.h +4 -0
  877. data/src/core/lib/security/security_connector/load_system_roots_linux.cc +1 -1
  878. data/src/core/lib/security/security_connector/load_system_roots_linux.h +2 -0
  879. data/src/core/lib/security/security_connector/local/local_security_connector.cc +25 -12
  880. data/src/core/lib/security/security_connector/security_connector.cc +6 -3
  881. data/src/core/lib/security/security_connector/security_connector.h +14 -7
  882. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +38 -21
  883. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +5 -0
  884. data/src/core/lib/security/security_connector/ssl_utils.cc +82 -33
  885. data/src/core/lib/security/security_connector/ssl_utils.h +29 -25
  886. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +380 -312
  887. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +141 -79
  888. data/src/core/lib/security/transport/client_auth_filter.cc +28 -19
  889. data/src/core/lib/security/transport/secure_endpoint.cc +13 -7
  890. data/src/core/lib/security/transport/security_handshaker.cc +81 -44
  891. data/src/core/lib/security/transport/server_auth_filter.cc +19 -12
  892. data/src/core/lib/security/transport/tsi_error.cc +2 -1
  893. data/src/core/lib/security/transport/tsi_error.h +2 -1
  894. data/src/core/lib/security/util/json_util.cc +14 -15
  895. data/src/core/lib/security/util/json_util.h +2 -1
  896. data/src/core/lib/slice/slice.cc +57 -7
  897. data/src/core/lib/slice/slice_buffer.cc +2 -1
  898. data/src/core/lib/slice/slice_intern.cc +11 -13
  899. data/src/core/lib/slice/slice_internal.h +4 -2
  900. data/src/core/lib/surface/call.cc +164 -136
  901. data/src/core/lib/surface/call.h +15 -3
  902. data/src/core/lib/surface/call_details.cc +8 -8
  903. data/src/core/lib/surface/channel.cc +55 -63
  904. data/src/core/lib/surface/channel.h +24 -7
  905. data/src/core/lib/surface/channel_init.cc +1 -1
  906. data/src/core/lib/surface/channel_ping.cc +1 -1
  907. data/src/core/lib/surface/completion_queue.cc +96 -96
  908. data/src/core/lib/surface/completion_queue.h +18 -17
  909. data/src/core/lib/surface/completion_queue_factory.cc +1 -2
  910. data/src/core/lib/surface/init.cc +46 -32
  911. data/src/core/lib/surface/init.h +10 -1
  912. data/src/core/lib/surface/lame_client.cc +51 -58
  913. data/src/core/lib/surface/lame_client.h +5 -0
  914. data/src/core/lib/surface/server.cc +1181 -1365
  915. data/src/core/lib/surface/server.h +463 -70
  916. data/src/core/lib/surface/validate_metadata.cc +7 -7
  917. data/src/core/lib/surface/validate_metadata.h +6 -2
  918. data/src/core/lib/surface/version.cc +2 -2
  919. data/src/core/lib/transport/authority_override.cc +40 -0
  920. data/src/core/lib/transport/authority_override.h +37 -0
  921. data/src/core/lib/transport/bdp_estimator.cc +1 -1
  922. data/src/core/lib/transport/bdp_estimator.h +2 -1
  923. data/src/core/lib/transport/byte_stream.cc +5 -5
  924. data/src/core/lib/transport/byte_stream.h +11 -11
  925. data/src/core/lib/transport/connectivity_state.cc +19 -14
  926. data/src/core/lib/transport/connectivity_state.h +26 -12
  927. data/src/core/lib/transport/error_utils.cc +33 -9
  928. data/src/core/lib/transport/error_utils.h +15 -3
  929. data/src/core/lib/transport/metadata.cc +16 -2
  930. data/src/core/lib/transport/metadata.h +2 -2
  931. data/src/core/lib/transport/metadata_batch.cc +76 -38
  932. data/src/core/lib/transport/metadata_batch.h +43 -21
  933. data/src/core/lib/transport/static_metadata.cc +296 -277
  934. data/src/core/lib/transport/static_metadata.h +80 -73
  935. data/src/core/lib/transport/status_metadata.cc +4 -3
  936. data/src/core/lib/transport/timeout_encoding.cc +4 -4
  937. data/src/core/lib/transport/transport.cc +9 -6
  938. data/src/core/lib/transport/transport.h +26 -11
  939. data/src/core/lib/transport/transport_op_string.cc +6 -6
  940. data/src/core/lib/uri/uri_parser.cc +135 -258
  941. data/src/core/lib/uri/uri_parser.h +58 -20
  942. data/src/core/plugin_registry/grpc_plugin_registry.cc +61 -20
  943. data/src/core/tsi/alts/crypt/gsec.cc +5 -4
  944. data/src/core/tsi/alts/crypt/gsec.h +6 -0
  945. data/src/core/tsi/alts/frame_protector/frame_handler.cc +8 -6
  946. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +47 -42
  947. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +74 -53
  948. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +1 -1
  949. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +2 -1
  950. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +3 -3
  951. data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.cc +8 -6
  952. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +4 -4
  953. data/src/core/tsi/fake_transport_security.cc +17 -5
  954. data/src/core/tsi/local_transport_security.cc +5 -1
  955. data/src/core/tsi/local_transport_security.h +6 -7
  956. data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +1 -1
  957. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +0 -2
  958. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +3 -2
  959. data/src/core/tsi/ssl_transport_security.cc +199 -73
  960. data/src/core/tsi/ssl_transport_security.h +23 -12
  961. data/src/core/tsi/transport_security.cc +10 -8
  962. data/src/core/tsi/transport_security_interface.h +6 -1
  963. data/src/ruby/bin/math_services_pb.rb +5 -5
  964. data/src/ruby/ext/grpc/extconf.rb +17 -4
  965. data/src/ruby/ext/grpc/rb_call.c +3 -2
  966. data/src/ruby/ext/grpc/rb_call.h +4 -0
  967. data/src/ruby/ext/grpc/rb_call_credentials.c +54 -10
  968. data/src/ruby/ext/grpc/rb_channel.c +10 -1
  969. data/src/ruby/ext/grpc/rb_channel_credentials.c +20 -1
  970. data/src/ruby/ext/grpc/rb_channel_credentials.h +4 -0
  971. data/src/ruby/ext/grpc/rb_compression_options.c +1 -1
  972. data/src/ruby/ext/grpc/rb_enable_cpp.cc +1 -1
  973. data/src/ruby/ext/grpc/rb_event_thread.c +2 -0
  974. data/src/ruby/ext/grpc/rb_grpc.c +4 -0
  975. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +46 -18
  976. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +87 -45
  977. data/src/ruby/ext/grpc/rb_server.c +13 -1
  978. data/src/ruby/ext/grpc/rb_server_credentials.c +19 -3
  979. data/src/ruby/ext/grpc/rb_server_credentials.h +4 -0
  980. data/src/ruby/ext/grpc/rb_xds_channel_credentials.c +215 -0
  981. data/src/ruby/ext/grpc/rb_xds_channel_credentials.h +35 -0
  982. data/src/ruby/ext/grpc/rb_xds_server_credentials.c +169 -0
  983. data/src/ruby/ext/grpc/rb_xds_server_credentials.h +35 -0
  984. data/src/ruby/lib/grpc/generic/client_stub.rb +5 -3
  985. data/src/ruby/lib/grpc/generic/interceptors.rb +1 -1
  986. data/src/ruby/lib/grpc/version.rb +1 -1
  987. data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +3 -3
  988. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +40 -0
  989. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +50 -16
  990. data/src/ruby/spec/call_spec.rb +1 -1
  991. data/src/ruby/spec/channel_credentials_spec.rb +42 -0
  992. data/src/ruby/spec/channel_spec.rb +17 -6
  993. data/src/ruby/spec/client_auth_spec.rb +27 -1
  994. data/src/ruby/spec/errors_spec.rb +1 -1
  995. data/src/ruby/spec/generic/active_call_spec.rb +21 -10
  996. data/src/ruby/spec/generic/client_stub_spec.rb +4 -4
  997. data/src/ruby/spec/generic/rpc_server_spec.rb +1 -1
  998. data/src/ruby/spec/pb/codegen/grpc/testing/package_options_import2.proto +23 -0
  999. data/src/ruby/spec/pb/codegen/grpc/testing/package_options_ruby_style.proto +2 -0
  1000. data/src/ruby/spec/pb/codegen/grpc/testing/same_package_service_name.proto +27 -0
  1001. data/src/ruby/spec/pb/codegen/grpc/testing/same_ruby_package_service_name.proto +29 -0
  1002. data/src/ruby/spec/pb/codegen/package_option_spec.rb +27 -7
  1003. data/src/ruby/spec/server_credentials_spec.rb +25 -0
  1004. data/src/ruby/spec/server_spec.rb +22 -0
  1005. data/src/ruby/spec/user_agent_spec.rb +74 -0
  1006. data/third_party/abseil-cpp/absl/algorithm/container.h +1764 -0
  1007. data/third_party/abseil-cpp/absl/base/attributes.h +122 -41
  1008. data/third_party/abseil-cpp/absl/base/call_once.h +3 -10
  1009. data/third_party/abseil-cpp/absl/base/casts.h +9 -6
  1010. data/third_party/abseil-cpp/absl/base/config.h +97 -26
  1011. data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +442 -335
  1012. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +169 -0
  1013. data/third_party/abseil-cpp/absl/base/internal/dynamic_annotations.h +398 -0
  1014. data/third_party/abseil-cpp/absl/base/internal/endian.h +61 -0
  1015. data/third_party/abseil-cpp/absl/base/internal/exponential_biased.cc +93 -0
  1016. data/third_party/abseil-cpp/absl/base/internal/exponential_biased.h +130 -0
  1017. data/third_party/abseil-cpp/absl/base/internal/invoke.h +4 -4
  1018. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +620 -0
  1019. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.h +126 -0
  1020. data/third_party/abseil-cpp/absl/base/internal/low_level_scheduling.h +31 -4
  1021. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +35 -33
  1022. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +17 -5
  1023. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +36 -40
  1024. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +33 -30
  1025. data/third_party/abseil-cpp/absl/base/internal/spinlock_akaros.inc +2 -2
  1026. data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +11 -3
  1027. data/third_party/abseil-cpp/absl/base/internal/spinlock_posix.inc +2 -2
  1028. data/third_party/abseil-cpp/absl/base/internal/spinlock_wait.h +11 -11
  1029. data/third_party/abseil-cpp/absl/base/internal/spinlock_win32.inc +5 -5
  1030. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +28 -5
  1031. data/third_party/abseil-cpp/absl/base/internal/sysinfo.h +8 -0
  1032. data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +5 -2
  1033. data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +43 -42
  1034. data/third_party/abseil-cpp/absl/base/internal/throw_delegate.cc +111 -7
  1035. data/third_party/abseil-cpp/absl/base/internal/tsan_mutex_interface.h +3 -1
  1036. data/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +0 -76
  1037. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +1 -3
  1038. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +3 -3
  1039. data/third_party/abseil-cpp/absl/base/log_severity.h +4 -4
  1040. data/third_party/abseil-cpp/absl/base/macros.h +47 -109
  1041. data/third_party/abseil-cpp/absl/base/optimization.h +69 -6
  1042. data/third_party/abseil-cpp/absl/base/options.h +31 -4
  1043. data/third_party/abseil-cpp/absl/base/policy_checks.h +1 -1
  1044. data/third_party/abseil-cpp/absl/base/port.h +0 -1
  1045. data/third_party/abseil-cpp/absl/base/thread_annotations.h +95 -40
  1046. data/third_party/abseil-cpp/absl/container/fixed_array.h +532 -0
  1047. data/third_party/abseil-cpp/absl/container/flat_hash_map.h +606 -0
  1048. data/third_party/abseil-cpp/absl/container/inlined_vector.h +38 -39
  1049. data/third_party/abseil-cpp/absl/container/internal/common.h +206 -0
  1050. data/third_party/abseil-cpp/absl/container/internal/compressed_tuple.h +34 -9
  1051. data/third_party/abseil-cpp/absl/container/internal/container_memory.h +460 -0
  1052. data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +161 -0
  1053. data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +208 -0
  1054. data/third_party/abseil-cpp/absl/container/internal/hashtable_debug_hooks.h +85 -0
  1055. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +274 -0
  1056. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +322 -0
  1057. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler_force_weak_definition.cc +31 -0
  1058. data/third_party/abseil-cpp/absl/container/internal/have_sse.h +50 -0
  1059. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +141 -66
  1060. data/third_party/abseil-cpp/absl/container/internal/layout.h +743 -0
  1061. data/third_party/abseil-cpp/absl/container/internal/raw_hash_map.h +197 -0
  1062. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +61 -0
  1063. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +1903 -0
  1064. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +139 -0
  1065. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.h +32 -0
  1066. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +1949 -0
  1067. data/third_party/abseil-cpp/absl/debugging/internal/demangle.h +71 -0
  1068. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +382 -0
  1069. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +134 -0
  1070. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +199 -0
  1071. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +134 -0
  1072. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +80 -0
  1073. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +108 -0
  1074. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +253 -0
  1075. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_unimplemented-inl.inc +24 -0
  1076. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +93 -0
  1077. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +346 -0
  1078. data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +147 -0
  1079. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +173 -0
  1080. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.h +158 -0
  1081. data/third_party/abseil-cpp/absl/debugging/stacktrace.cc +140 -0
  1082. data/third_party/abseil-cpp/absl/debugging/stacktrace.h +231 -0
  1083. data/third_party/abseil-cpp/absl/debugging/symbolize.cc +36 -0
  1084. data/third_party/abseil-cpp/absl/debugging/symbolize.h +99 -0
  1085. data/third_party/abseil-cpp/absl/debugging/symbolize_darwin.inc +101 -0
  1086. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +1560 -0
  1087. data/third_party/abseil-cpp/absl/debugging/symbolize_unimplemented.inc +40 -0
  1088. data/third_party/abseil-cpp/absl/debugging/symbolize_win32.inc +81 -0
  1089. data/third_party/abseil-cpp/absl/functional/bind_front.h +184 -0
  1090. data/third_party/abseil-cpp/absl/functional/function_ref.h +139 -0
  1091. data/third_party/abseil-cpp/absl/functional/internal/front_binder.h +95 -0
  1092. data/third_party/abseil-cpp/absl/functional/internal/function_ref.h +106 -0
  1093. data/third_party/abseil-cpp/absl/hash/hash.h +325 -0
  1094. data/third_party/abseil-cpp/absl/hash/internal/city.cc +349 -0
  1095. data/third_party/abseil-cpp/absl/hash/internal/city.h +78 -0
  1096. data/third_party/abseil-cpp/absl/hash/internal/hash.cc +70 -0
  1097. data/third_party/abseil-cpp/absl/hash/internal/hash.h +1045 -0
  1098. data/third_party/abseil-cpp/absl/hash/internal/wyhash.cc +111 -0
  1099. data/third_party/abseil-cpp/absl/hash/internal/wyhash.h +48 -0
  1100. data/third_party/abseil-cpp/absl/memory/memory.h +4 -0
  1101. data/third_party/abseil-cpp/absl/meta/type_traits.h +18 -10
  1102. data/third_party/abseil-cpp/absl/numeric/bits.h +177 -0
  1103. data/third_party/abseil-cpp/absl/numeric/int128.cc +13 -27
  1104. data/third_party/abseil-cpp/absl/numeric/int128.h +16 -15
  1105. data/third_party/abseil-cpp/absl/numeric/internal/bits.h +358 -0
  1106. data/third_party/abseil-cpp/absl/numeric/internal/representation.h +55 -0
  1107. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +69 -0
  1108. data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +396 -0
  1109. data/third_party/abseil-cpp/absl/status/status.cc +452 -0
  1110. data/third_party/abseil-cpp/absl/status/status.h +878 -0
  1111. data/third_party/abseil-cpp/absl/status/status_payload_printer.cc +38 -0
  1112. data/third_party/abseil-cpp/absl/status/status_payload_printer.h +51 -0
  1113. data/third_party/abseil-cpp/absl/status/statusor.cc +71 -0
  1114. data/third_party/abseil-cpp/absl/status/statusor.h +760 -0
  1115. data/third_party/abseil-cpp/absl/strings/charconv.cc +7 -7
  1116. data/third_party/abseil-cpp/absl/strings/cord.cc +1953 -0
  1117. data/third_party/abseil-cpp/absl/strings/cord.h +1394 -0
  1118. data/third_party/abseil-cpp/absl/strings/escaping.cc +13 -13
  1119. data/third_party/abseil-cpp/absl/strings/internal/char_map.h +1 -1
  1120. data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.cc +1 -1
  1121. data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.h +2 -2
  1122. data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +8 -8
  1123. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +83 -0
  1124. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +543 -0
  1125. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +146 -0
  1126. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +897 -0
  1127. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.h +589 -0
  1128. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring_reader.h +114 -0
  1129. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +236 -136
  1130. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +150 -64
  1131. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +16 -2
  1132. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +29 -21
  1133. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +21 -14
  1134. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +31 -7
  1135. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +147 -135
  1136. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +1017 -87
  1137. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.h +17 -3
  1138. data/third_party/abseil-cpp/absl/strings/internal/str_format/output.h +4 -12
  1139. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +22 -6
  1140. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +27 -11
  1141. data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +15 -40
  1142. data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +64 -0
  1143. data/third_party/abseil-cpp/absl/strings/match.cc +6 -3
  1144. data/third_party/abseil-cpp/absl/strings/match.h +16 -6
  1145. data/third_party/abseil-cpp/absl/strings/numbers.cc +132 -4
  1146. data/third_party/abseil-cpp/absl/strings/numbers.h +10 -10
  1147. data/third_party/abseil-cpp/absl/strings/str_cat.cc +4 -4
  1148. data/third_party/abseil-cpp/absl/strings/str_cat.h +1 -1
  1149. data/third_party/abseil-cpp/absl/strings/str_format.h +289 -13
  1150. data/third_party/abseil-cpp/absl/strings/str_join.h +1 -1
  1151. data/third_party/abseil-cpp/absl/strings/str_split.cc +2 -2
  1152. data/third_party/abseil-cpp/absl/strings/str_split.h +39 -4
  1153. data/third_party/abseil-cpp/absl/strings/string_view.h +26 -19
  1154. data/third_party/abseil-cpp/absl/strings/substitute.cc +5 -5
  1155. data/third_party/abseil-cpp/absl/strings/substitute.h +32 -29
  1156. data/third_party/abseil-cpp/absl/synchronization/barrier.cc +52 -0
  1157. data/third_party/abseil-cpp/absl/synchronization/barrier.h +79 -0
  1158. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.cc +57 -0
  1159. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.h +99 -0
  1160. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +140 -0
  1161. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.h +60 -0
  1162. data/third_party/abseil-cpp/absl/synchronization/internal/futex.h +154 -0
  1163. data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +698 -0
  1164. data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.h +141 -0
  1165. data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +156 -0
  1166. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +106 -0
  1167. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +115 -0
  1168. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +428 -0
  1169. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +155 -0
  1170. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +2751 -0
  1171. data/third_party/abseil-cpp/absl/synchronization/mutex.h +1082 -0
  1172. data/third_party/abseil-cpp/absl/synchronization/notification.cc +78 -0
  1173. data/third_party/abseil-cpp/absl/synchronization/notification.h +123 -0
  1174. data/third_party/abseil-cpp/absl/time/civil_time.cc +9 -9
  1175. data/third_party/abseil-cpp/absl/time/clock.cc +146 -130
  1176. data/third_party/abseil-cpp/absl/time/clock.h +2 -2
  1177. data/third_party/abseil-cpp/absl/time/duration.cc +93 -61
  1178. data/third_party/abseil-cpp/absl/time/format.cc +43 -36
  1179. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +33 -27
  1180. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +4 -2
  1181. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/zone_info_source.h +1 -1
  1182. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +136 -29
  1183. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.cc +13 -21
  1184. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.h +1 -1
  1185. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +136 -129
  1186. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.h +4 -5
  1187. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +15 -8
  1188. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +2 -2
  1189. data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +2 -1
  1190. data/third_party/abseil-cpp/absl/time/time.cc +4 -3
  1191. data/third_party/abseil-cpp/absl/time/time.h +41 -40
  1192. data/third_party/abseil-cpp/absl/types/bad_variant_access.cc +64 -0
  1193. data/third_party/abseil-cpp/absl/types/bad_variant_access.h +82 -0
  1194. data/third_party/abseil-cpp/absl/types/internal/variant.h +1646 -0
  1195. data/third_party/abseil-cpp/absl/types/optional.h +9 -9
  1196. data/third_party/abseil-cpp/absl/types/span.h +49 -36
  1197. data/third_party/abseil-cpp/absl/types/variant.h +866 -0
  1198. data/third_party/abseil-cpp/absl/utility/utility.h +2 -2
  1199. data/third_party/address_sorting/include/address_sorting/address_sorting.h +2 -0
  1200. data/third_party/boringssl-with-bazel/err_data.c +763 -721
  1201. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c +6 -6
  1202. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +1 -1
  1203. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_enum.c +5 -5
  1204. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_int.c +6 -6
  1205. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +15 -20
  1206. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_octet.c +3 -3
  1207. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +2 -2
  1208. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +23 -11
  1209. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utctm.c +2 -2
  1210. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +16 -22
  1211. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_locl.h +35 -0
  1212. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn_pack.c +1 -1
  1213. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_enum.c +1 -1
  1214. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_int.c +1 -1
  1215. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_string.c +1 -1
  1216. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +28 -79
  1217. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +40 -86
  1218. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c +6 -17
  1219. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_new.c +10 -61
  1220. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_typ.c +0 -2
  1221. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_utl.c +2 -2
  1222. data/third_party/boringssl-with-bazel/src/crypto/bio/bio.c +2 -0
  1223. data/third_party/boringssl-with-bazel/src/crypto/bio/socket_helper.c +4 -0
  1224. data/third_party/boringssl-with-bazel/src/crypto/blake2/blake2.c +158 -0
  1225. data/third_party/boringssl-with-bazel/src/crypto/bn_extra/bn_asn1.c +3 -10
  1226. data/third_party/boringssl-with-bazel/src/crypto/bytestring/ber.c +8 -9
  1227. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbs.c +60 -45
  1228. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/cipher_extra.c +4 -0
  1229. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_chacha20poly1305.c +6 -81
  1230. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_tls.c +1 -88
  1231. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h +101 -3
  1232. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +120 -273
  1233. data/third_party/boringssl-with-bazel/src/crypto/cpu-aarch64-win.c +41 -0
  1234. data/third_party/boringssl-with-bazel/src/crypto/cpu-arm-linux.c +11 -2
  1235. data/third_party/boringssl-with-bazel/src/crypto/cpu-arm.c +3 -3
  1236. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519.c +1 -1
  1237. data/third_party/boringssl-with-bazel/src/crypto/curve25519/internal.h +1 -1
  1238. data/third_party/boringssl-with-bazel/src/crypto/{dh → dh_extra}/dh_asn1.c +0 -0
  1239. data/third_party/boringssl-with-bazel/src/crypto/{dh → dh_extra}/params.c +179 -0
  1240. data/third_party/boringssl-with-bazel/src/crypto/digest_extra/digest_extra.c +25 -0
  1241. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +9 -43
  1242. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa_asn1.c +55 -4
  1243. data/third_party/boringssl-with-bazel/src/crypto/{fipsmodule/is_fips.c → dsa/internal.h} +16 -11
  1244. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/ec_asn1.c +2 -17
  1245. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c +12 -52
  1246. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h +0 -22
  1247. data/third_party/boringssl-with-bazel/src/crypto/err/err.c +87 -80
  1248. data/third_party/boringssl-with-bazel/src/crypto/evp/evp.c +13 -0
  1249. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +159 -0
  1250. data/third_party/boringssl-with-bazel/src/crypto/evp/p_dsa_asn1.c +6 -2
  1251. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/mode_wrappers.c +17 -1
  1252. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +4 -1
  1253. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/bn.c +13 -20
  1254. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div.c +2 -3
  1255. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +21 -3
  1256. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/prime.c +0 -4
  1257. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +32 -16
  1258. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +198 -37
  1259. data/third_party/boringssl-with-bazel/src/crypto/{dh → fipsmodule/dh}/check.c +0 -0
  1260. data/third_party/boringssl-with-bazel/src/crypto/{dh → fipsmodule/dh}/dh.c +136 -213
  1261. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digest.c +9 -0
  1262. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digests.c +10 -2
  1263. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/md32_common.h +87 -160
  1264. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +16 -0
  1265. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +9 -2
  1266. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +2 -5
  1267. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c +13 -11
  1268. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64.c +24 -23
  1269. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.c +20 -16
  1270. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c +2 -2
  1271. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/util.c +3 -3
  1272. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +104 -93
  1273. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/internal.h +39 -0
  1274. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md4/md4.c +52 -65
  1275. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/md5.c +52 -66
  1276. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cbc.c +33 -22
  1277. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cfb.c +9 -8
  1278. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ctr.c +9 -8
  1279. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm.c +17 -13
  1280. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/internal.h +1 -22
  1281. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ofb.c +2 -1
  1282. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +25 -0
  1283. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +122 -43
  1284. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +26 -14
  1285. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h +4 -0
  1286. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +56 -34
  1287. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +116 -60
  1288. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/fips.c +79 -0
  1289. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +231 -11
  1290. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +61 -75
  1291. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +80 -103
  1292. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +40 -49
  1293. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +584 -0
  1294. data/third_party/boringssl-with-bazel/src/crypto/internal.h +65 -0
  1295. data/third_party/boringssl-with-bazel/src/crypto/mem.c +43 -15
  1296. data/third_party/boringssl-with-bazel/src/crypto/obj/obj.c +3 -3
  1297. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c +5 -3
  1298. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/internal.h +7 -0
  1299. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +131 -53
  1300. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305.c +10 -7
  1301. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_arm.c +13 -11
  1302. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_vec.c +4 -0
  1303. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/passive.c +34 -0
  1304. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/rand_extra.c +5 -1
  1305. data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/rsa_asn1.c +1 -2
  1306. data/third_party/boringssl-with-bazel/src/crypto/stack/stack.c +7 -13
  1307. data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +0 -28
  1308. data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +110 -70
  1309. data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +348 -423
  1310. data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +217 -79
  1311. data/third_party/boringssl-with-bazel/src/crypto/trust_token/voprf.c +766 -0
  1312. data/third_party/boringssl-with-bazel/src/crypto/x509/a_strex.c +7 -7
  1313. data/third_party/boringssl-with-bazel/src/crypto/x509/algorithm.c +10 -0
  1314. data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +4 -4
  1315. data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +120 -11
  1316. data/third_party/boringssl-with-bazel/src/crypto/x509/rsa_pss.c +5 -1
  1317. data/third_party/boringssl-with-bazel/src/crypto/x509/t_crl.c +3 -3
  1318. data/third_party/boringssl-with-bazel/src/crypto/x509/t_req.c +2 -0
  1319. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c +1 -1
  1320. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509a.c +3 -0
  1321. data/third_party/boringssl-with-bazel/src/crypto/x509/x509.c +0 -67
  1322. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c +19 -25
  1323. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +24 -39
  1324. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_ext.c +27 -21
  1325. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_obj.c +1 -1
  1326. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +52 -89
  1327. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +67 -12
  1328. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +9 -4
  1329. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_txt.c +67 -67
  1330. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_v3.c +4 -4
  1331. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +71 -59
  1332. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vpm.c +53 -73
  1333. data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +98 -25
  1334. data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +9 -8
  1335. data/third_party/boringssl-with-bazel/src/crypto/x509/x509rset.c +3 -0
  1336. data/third_party/boringssl-with-bazel/src/crypto/x509/x_algor.c +21 -17
  1337. data/third_party/boringssl-with-bazel/src/crypto/x509/x_all.c +13 -10
  1338. data/third_party/boringssl-with-bazel/src/crypto/x509/x_attrib.c +21 -34
  1339. data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +43 -17
  1340. data/third_party/boringssl-with-bazel/src/crypto/x509/x_name.c +28 -40
  1341. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pkey.c +2 -2
  1342. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +21 -172
  1343. data/third_party/boringssl-with-bazel/src/crypto/x509/x_req.c +5 -8
  1344. data/third_party/boringssl-with-bazel/src/crypto/x509/x_sig.c +25 -0
  1345. data/third_party/boringssl-with-bazel/src/crypto/x509/x_val.c +2 -0
  1346. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +68 -9
  1347. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509a.c +5 -2
  1348. data/third_party/boringssl-with-bazel/src/crypto/x509v3/ext_dat.h +1 -4
  1349. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +12 -0
  1350. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_data.c +5 -3
  1351. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akey.c +3 -3
  1352. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +25 -24
  1353. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bitst.c +3 -3
  1354. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_conf.c +32 -28
  1355. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +4 -6
  1356. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_enum.c +2 -1
  1357. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_genn.c +42 -22
  1358. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ia5.c +3 -4
  1359. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_info.c +1 -1
  1360. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +25 -36
  1361. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +2 -2
  1362. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +127 -41
  1363. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +8 -7
  1364. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +11 -14
  1365. data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +25 -4
  1366. data/third_party/boringssl-with-bazel/src/include/openssl/aes.h +16 -4
  1367. data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +119 -0
  1368. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +746 -561
  1369. data/third_party/boringssl-with-bazel/src/include/openssl/asn1t.h +0 -167
  1370. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +58 -10
  1371. data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +4 -0
  1372. data/third_party/boringssl-with-bazel/src/include/openssl/blake2.h +62 -0
  1373. data/third_party/boringssl-with-bazel/src/include/openssl/bytestring.h +23 -7
  1374. data/third_party/boringssl-with-bazel/src/include/openssl/chacha.h +1 -1
  1375. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +21 -4
  1376. data/third_party/boringssl-with-bazel/src/include/openssl/cpu.h +22 -32
  1377. data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +25 -5
  1378. data/third_party/boringssl-with-bazel/src/include/openssl/des.h +6 -0
  1379. data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +62 -20
  1380. data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +16 -2
  1381. data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +20 -2
  1382. data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +33 -0
  1383. data/third_party/boringssl-with-bazel/src/include/openssl/err.h +3 -2
  1384. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +104 -51
  1385. data/third_party/boringssl-with-bazel/src/{crypto/x509/x509_r2x.c → include/openssl/evp_errors.h} +41 -58
  1386. data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +325 -0
  1387. data/third_party/boringssl-with-bazel/src/include/openssl/obj.h +24 -5
  1388. data/third_party/boringssl-with-bazel/src/include/openssl/opensslconf.h +3 -0
  1389. data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +202 -134
  1390. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +25 -7
  1391. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +9 -1
  1392. data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +5 -2
  1393. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +99 -63
  1394. data/third_party/boringssl-with-bazel/src/include/openssl/span.h +2 -1
  1395. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +467 -125
  1396. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +28 -12
  1397. data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +43 -24
  1398. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +1456 -780
  1399. data/third_party/boringssl-with-bazel/src/include/openssl/x509_vfy.h +451 -435
  1400. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +595 -441
  1401. data/third_party/boringssl-with-bazel/src/ssl/bio_ssl.cc +18 -5
  1402. data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +7 -2
  1403. data/third_party/boringssl-with-bazel/src/ssl/d1_srtp.cc +1 -1
  1404. data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +1133 -0
  1405. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +336 -25
  1406. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +97 -53
  1407. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +202 -109
  1408. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +174 -30
  1409. data/third_party/boringssl-with-bazel/src/ssl/internal.h +504 -162
  1410. data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +9 -3
  1411. data/third_party/boringssl-with-bazel/src/ssl/s3_lib.cc +2 -3
  1412. data/third_party/boringssl-with-bazel/src/ssl/s3_pkt.cc +14 -19
  1413. data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +55 -15
  1414. data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +7 -12
  1415. data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +8 -9
  1416. data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +23 -26
  1417. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +162 -60
  1418. data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +2 -0
  1419. data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +26 -73
  1420. data/third_party/boringssl-with-bazel/src/ssl/ssl_stat.cc +3 -0
  1421. data/third_party/boringssl-with-bazel/src/ssl/ssl_transcript.cc +6 -5
  1422. data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +12 -8
  1423. data/third_party/boringssl-with-bazel/src/ssl/t1_enc.cc +47 -28
  1424. data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +1070 -566
  1425. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +66 -9
  1426. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +183 -76
  1427. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +169 -89
  1428. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +379 -140
  1429. data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +4 -2
  1430. data/third_party/boringssl-with-bazel/src/ssl/tls_record.cc +5 -3
  1431. data/third_party/re2/re2/bitmap256.h +117 -0
  1432. data/third_party/re2/re2/bitstate.cc +385 -0
  1433. data/third_party/re2/re2/compile.cc +1279 -0
  1434. data/third_party/re2/re2/dfa.cc +2130 -0
  1435. data/third_party/re2/re2/filtered_re2.cc +121 -0
  1436. data/third_party/re2/re2/filtered_re2.h +109 -0
  1437. data/third_party/re2/re2/mimics_pcre.cc +197 -0
  1438. data/third_party/re2/re2/nfa.cc +713 -0
  1439. data/third_party/re2/re2/onepass.cc +623 -0
  1440. data/third_party/re2/re2/parse.cc +2464 -0
  1441. data/third_party/re2/re2/perl_groups.cc +119 -0
  1442. data/third_party/re2/re2/pod_array.h +55 -0
  1443. data/third_party/re2/re2/prefilter.cc +710 -0
  1444. data/third_party/re2/re2/prefilter.h +108 -0
  1445. data/third_party/re2/re2/prefilter_tree.cc +407 -0
  1446. data/third_party/re2/re2/prefilter_tree.h +139 -0
  1447. data/third_party/re2/re2/prog.cc +988 -0
  1448. data/third_party/re2/re2/prog.h +436 -0
  1449. data/third_party/re2/re2/re2.cc +1362 -0
  1450. data/third_party/re2/re2/re2.h +1002 -0
  1451. data/third_party/re2/re2/regexp.cc +980 -0
  1452. data/third_party/re2/re2/regexp.h +659 -0
  1453. data/third_party/re2/re2/set.cc +154 -0
  1454. data/third_party/re2/re2/set.h +80 -0
  1455. data/third_party/re2/re2/simplify.cc +657 -0
  1456. data/third_party/re2/re2/sparse_array.h +392 -0
  1457. data/third_party/re2/re2/sparse_set.h +264 -0
  1458. data/third_party/re2/re2/stringpiece.cc +65 -0
  1459. data/third_party/re2/re2/stringpiece.h +210 -0
  1460. data/third_party/re2/re2/tostring.cc +351 -0
  1461. data/third_party/re2/re2/unicode_casefold.cc +582 -0
  1462. data/third_party/re2/re2/unicode_casefold.h +78 -0
  1463. data/third_party/re2/re2/unicode_groups.cc +6269 -0
  1464. data/third_party/re2/re2/unicode_groups.h +67 -0
  1465. data/third_party/re2/re2/walker-inl.h +246 -0
  1466. data/third_party/re2/util/benchmark.h +156 -0
  1467. data/third_party/re2/util/flags.h +26 -0
  1468. data/third_party/re2/util/logging.h +109 -0
  1469. data/third_party/re2/util/malloc_counter.h +19 -0
  1470. data/third_party/re2/util/mix.h +41 -0
  1471. data/third_party/re2/util/mutex.h +148 -0
  1472. data/third_party/re2/util/pcre.cc +1025 -0
  1473. data/third_party/re2/util/pcre.h +681 -0
  1474. data/third_party/re2/util/rune.cc +260 -0
  1475. data/third_party/re2/util/strutil.cc +149 -0
  1476. data/third_party/re2/util/strutil.h +21 -0
  1477. data/third_party/re2/util/test.h +50 -0
  1478. data/third_party/re2/util/utf.h +44 -0
  1479. data/third_party/re2/util/util.h +42 -0
  1480. data/third_party/upb/third_party/wyhash/wyhash.h +145 -0
  1481. data/third_party/upb/upb/decode.c +604 -511
  1482. data/third_party/upb/upb/decode.h +20 -1
  1483. data/third_party/upb/upb/decode.int.h +163 -0
  1484. data/third_party/upb/upb/decode_fast.c +1040 -0
  1485. data/third_party/upb/upb/decode_fast.h +126 -0
  1486. data/third_party/upb/upb/def.c +2178 -0
  1487. data/third_party/upb/upb/def.h +315 -0
  1488. data/third_party/upb/upb/def.hpp +439 -0
  1489. data/third_party/upb/upb/encode.c +311 -211
  1490. data/third_party/upb/upb/encode.h +27 -2
  1491. data/third_party/upb/upb/msg.c +215 -70
  1492. data/third_party/upb/upb/msg.h +558 -14
  1493. data/third_party/upb/upb/port_def.inc +105 -63
  1494. data/third_party/upb/upb/port_undef.inc +10 -7
  1495. data/third_party/upb/upb/reflection.c +408 -0
  1496. data/third_party/upb/upb/reflection.h +168 -0
  1497. data/third_party/upb/upb/table.c +73 -269
  1498. data/third_party/upb/upb/table.int.h +25 -57
  1499. data/third_party/upb/upb/text_encode.c +421 -0
  1500. data/third_party/upb/upb/text_encode.h +38 -0
  1501. data/third_party/upb/upb/upb.c +138 -135
  1502. data/third_party/upb/upb/upb.h +119 -146
  1503. data/third_party/upb/upb/upb.hpp +88 -0
  1504. data/third_party/upb/upb/upb.int.h +29 -0
  1505. data/third_party/xxhash/xxhash.h +5325 -0
  1506. metadata +698 -181
  1507. data/src/core/ext/filters/client_channel/lb_policy/xds/eds.cc +0 -938
  1508. data/src/core/ext/filters/client_channel/lb_policy/xds/lrs.cc +0 -528
  1509. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_routing.cc +0 -834
  1510. data/src/core/ext/filters/client_channel/parse_address.h +0 -53
  1511. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +0 -484
  1512. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +0 -68
  1513. data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +0 -348
  1514. data/src/core/ext/filters/client_channel/resolving_lb_policy.h +0 -123
  1515. data/src/core/ext/filters/client_channel/xds/xds_api.cc +0 -1906
  1516. data/src/core/ext/filters/client_channel/xds/xds_api.h +0 -280
  1517. data/src/core/ext/filters/client_channel/xds/xds_bootstrap.cc +0 -342
  1518. data/src/core/ext/filters/client_channel/xds/xds_bootstrap.h +0 -88
  1519. data/src/core/ext/filters/client_channel/xds/xds_channel.h +0 -46
  1520. data/src/core/ext/filters/client_channel/xds/xds_channel_secure.cc +0 -106
  1521. data/src/core/ext/filters/client_channel/xds/xds_client.h +0 -309
  1522. data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.c +0 -21
  1523. data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.h +0 -35
  1524. data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.c +0 -114
  1525. data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.h +0 -418
  1526. data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.c +0 -72
  1527. data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.h +0 -197
  1528. data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.c +0 -105
  1529. data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.h +0 -378
  1530. data/src/core/ext/upb-generated/envoy/api/v2/cds.upb.h +0 -53
  1531. data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.c +0 -74
  1532. data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.h +0 -218
  1533. data/src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.c +0 -35
  1534. data/src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.h +0 -69
  1535. data/src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.c +0 -55
  1536. data/src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.h +0 -305
  1537. data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.c +0 -403
  1538. data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.h +0 -1447
  1539. data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.c +0 -112
  1540. data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.h +0 -328
  1541. data/src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.c +0 -35
  1542. data/src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.h +0 -78
  1543. data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c +0 -313
  1544. data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.h +0 -897
  1545. data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.c +0 -96
  1546. data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.h +0 -322
  1547. data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.c +0 -34
  1548. data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.h +0 -72
  1549. data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.c +0 -197
  1550. data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.h +0 -642
  1551. data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.c +0 -172
  1552. data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.h +0 -673
  1553. data/src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.c +0 -36
  1554. data/src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.h +0 -80
  1555. data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.c +0 -152
  1556. data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.h +0 -518
  1557. data/src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.h +0 -89
  1558. data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c +0 -129
  1559. data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.h +0 -392
  1560. data/src/core/ext/upb-generated/envoy/api/v2/eds.upb.h +0 -53
  1561. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.c +0 -18
  1562. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.h +0 -33
  1563. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.c +0 -91
  1564. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.h +0 -266
  1565. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.c +0 -112
  1566. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.h +0 -324
  1567. data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.c +0 -92
  1568. data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.h +0 -240
  1569. data/src/core/ext/upb-generated/envoy/api/v2/lds.upb.h +0 -53
  1570. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.c +0 -18
  1571. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.h +0 -33
  1572. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.c +0 -145
  1573. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.h +0 -527
  1574. data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.c +0 -43
  1575. data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.h +0 -112
  1576. data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.c +0 -109
  1577. data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.h +0 -399
  1578. data/src/core/ext/upb-generated/envoy/api/v2/rds.upb.h +0 -53
  1579. data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.c +0 -18
  1580. data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.h +0 -33
  1581. data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.c +0 -815
  1582. data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.h +0 -3032
  1583. data/src/core/ext/upb-generated/envoy/api/v2/route.upb.c +0 -63
  1584. data/src/core/ext/upb-generated/envoy/api/v2/route.upb.h +0 -199
  1585. data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.c +0 -59
  1586. data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.h +0 -134
  1587. data/src/core/ext/upb-generated/envoy/api/v2/srds.upb.h +0 -53
  1588. data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.c +0 -228
  1589. data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.h +0 -725
  1590. data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.c +0 -316
  1591. data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.h +0 -1132
  1592. data/src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.c +0 -33
  1593. data/src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.h +0 -65
  1594. data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.c +0 -51
  1595. data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.h +0 -125
  1596. data/src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.h +0 -50
  1597. data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.c +0 -54
  1598. data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h +0 -134
  1599. data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.c +0 -63
  1600. data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.h +0 -144
  1601. data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.c +0 -53
  1602. data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.h +0 -133
  1603. data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.c +0 -88
  1604. data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.h +0 -258
  1605. data/src/core/ext/upb-generated/envoy/type/percent.upb.c +0 -39
  1606. data/src/core/ext/upb-generated/envoy/type/percent.upb.h +0 -87
  1607. data/src/core/ext/upb-generated/envoy/type/range.upb.c +0 -50
  1608. data/src/core/ext/upb-generated/envoy/type/range.upb.h +0 -112
  1609. data/src/core/ext/upb-generated/envoy/type/semantic_version.upb.h +0 -62
  1610. data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.c +0 -89
  1611. data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.h +0 -249
  1612. data/src/core/ext/upb-generated/gogoproto/gogo.upb.c +0 -17
  1613. data/src/core/lib/gpr/arena.h +0 -47
  1614. data/src/core/lib/gprpp/map.h +0 -53
  1615. data/src/core/lib/iomgr/iomgr_posix.h +0 -26
  1616. data/src/core/lib/iomgr/poller/eventmanager_libuv.cc +0 -87
  1617. data/src/core/lib/iomgr/poller/eventmanager_libuv.h +0 -88
  1618. data/src/core/lib/security/transport/target_authority_table.cc +0 -75
  1619. data/src/core/lib/security/transport/target_authority_table.h +0 -40
  1620. data/src/core/lib/slice/slice_hash_table.h +0 -199
  1621. data/src/core/lib/slice/slice_weak_hash_table.h +0 -102
  1622. data/third_party/abseil-cpp/absl/base/dynamic_annotations.cc +0 -129
  1623. data/third_party/abseil-cpp/absl/base/internal/bits.h +0 -218
  1624. data/third_party/boringssl-with-bazel/src/crypto/x509/vpm_int.h +0 -71
  1625. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pku.c +0 -110
  1626. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_sxnet.c +0 -274
  1627. data/third_party/upb/upb/generated_util.h +0 -105
  1628. data/third_party/upb/upb/port.c +0 -26
@@ -1,20 +1,18 @@
1
- /*
2
- *
3
- * Copyright 2015-2016 gRPC authors.
4
- *
5
- * Licensed under the Apache License, Version 2.0 (the "License");
6
- * you may not use this file except in compliance with the License.
7
- * You may obtain a copy of the License at
8
- *
9
- * http://www.apache.org/licenses/LICENSE-2.0
10
- *
11
- * Unless required by applicable law or agreed to in writing, software
12
- * distributed under the License is distributed on an "AS IS" BASIS,
13
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
- * See the License for the specific language governing permissions and
15
- * limitations under the License.
16
- *
17
- */
1
+ //
2
+ // Copyright 2015-2016 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
+ //
18
16
 
19
17
  #include <grpc/support/port_platform.h>
20
18
 
@@ -24,12 +22,21 @@
24
22
  #include <stdlib.h>
25
23
  #include <string.h>
26
24
 
25
+ #include <algorithm>
26
+ #include <atomic>
27
+ #include <iterator>
28
+ #include <list>
29
+ #include <queue>
30
+ #include <utility>
31
+ #include <vector>
32
+
33
+ #include "absl/memory/memory.h"
34
+ #include "absl/types/optional.h"
35
+
27
36
  #include <grpc/support/alloc.h>
28
37
  #include <grpc/support/log.h>
29
38
  #include <grpc/support/string_util.h>
30
39
 
31
- #include <utility>
32
-
33
40
  #include "src/core/lib/channel/channel_args.h"
34
41
  #include "src/core/lib/channel/channelz.h"
35
42
  #include "src/core/lib/channel/connected_channel.h"
@@ -48,34 +55,21 @@
48
55
  #include "src/core/lib/transport/metadata.h"
49
56
  #include "src/core/lib/transport/static_metadata.h"
50
57
 
51
- grpc_core::TraceFlag grpc_server_channel_trace(false, "server_channel");
52
-
53
- using grpc_core::LockedMultiProducerSingleConsumerQueue;
54
-
55
- namespace {
58
+ namespace grpc_core {
56
59
 
57
- void server_on_recv_initial_metadata(void* ptr, grpc_error* error);
58
- void server_recv_trailing_metadata_ready(void* user_data, grpc_error* error);
59
-
60
- struct listener {
61
- void* arg;
62
- void (*start)(grpc_server* server, void* arg, grpc_pollset** pollsets,
63
- size_t pollset_count);
64
- void (*destroy)(grpc_server* server, void* arg, grpc_closure* closure);
65
- struct listener* next;
66
- intptr_t socket_uuid;
67
- grpc_closure destroy_done;
68
- };
60
+ TraceFlag grpc_server_channel_trace(false, "server_channel");
69
61
 
70
- enum requested_call_type { BATCH_CALL, REGISTERED_CALL };
62
+ //
63
+ // Server::RequestedCall
64
+ //
71
65
 
72
- struct registered_method;
66
+ struct Server::RequestedCall {
67
+ enum class Type { BATCH_CALL, REGISTERED_CALL };
73
68
 
74
- struct requested_call {
75
- requested_call(void* tag_arg, grpc_completion_queue* call_cq,
76
- grpc_call** call_arg, grpc_metadata_array* initial_md,
77
- grpc_call_details* details)
78
- : type(BATCH_CALL),
69
+ RequestedCall(void* tag_arg, grpc_completion_queue* call_cq,
70
+ grpc_call** call_arg, grpc_metadata_array* initial_md,
71
+ grpc_call_details* details)
72
+ : type(Type::BATCH_CALL),
79
73
  tag(tag_arg),
80
74
  cq_bound_to_call(call_cq),
81
75
  call(call_arg),
@@ -84,11 +78,11 @@ struct requested_call {
84
78
  data.batch.details = details;
85
79
  }
86
80
 
87
- requested_call(void* tag_arg, grpc_completion_queue* call_cq,
88
- grpc_call** call_arg, grpc_metadata_array* initial_md,
89
- registered_method* rm, gpr_timespec* deadline,
90
- grpc_byte_buffer** optional_payload)
91
- : type(REGISTERED_CALL),
81
+ RequestedCall(void* tag_arg, grpc_completion_queue* call_cq,
82
+ grpc_call** call_arg, grpc_metadata_array* initial_md,
83
+ RegisteredMethod* rm, gpr_timespec* deadline,
84
+ grpc_byte_buffer** optional_payload)
85
+ : type(Type::REGISTERED_CALL),
92
86
  tag(tag_arg),
93
87
  cq_bound_to_call(call_cq),
94
88
  call(call_arg),
@@ -98,8 +92,8 @@ struct requested_call {
98
92
  data.registered.optional_payload = optional_payload;
99
93
  }
100
94
 
101
- grpc_core::MultiProducerSingleConsumerQueue::Node mpscq_node;
102
- const requested_call_type type;
95
+ MultiProducerSingleConsumerQueue::Node mpscq_node;
96
+ const Type type;
103
97
  void* const tag;
104
98
  grpc_completion_queue* const cq_bound_to_call;
105
99
  grpc_call** const call;
@@ -110,57 +104,40 @@ struct requested_call {
110
104
  grpc_call_details* details;
111
105
  } batch;
112
106
  struct {
113
- registered_method* method;
107
+ RegisteredMethod* method;
114
108
  gpr_timespec* deadline;
115
109
  grpc_byte_buffer** optional_payload;
116
110
  } registered;
117
111
  } data;
118
112
  };
119
113
 
120
- struct channel_registered_method {
121
- registered_method* server_registered_method;
122
- uint32_t flags;
123
- bool has_host;
124
- grpc_core::ExternallyManagedSlice method;
125
- grpc_core::ExternallyManagedSlice host;
126
- };
114
+ //
115
+ // Server::RegisteredMethod
116
+ //
127
117
 
128
- struct channel_data {
129
- grpc_server* server;
130
- grpc_channel* channel;
131
- size_t cq_idx;
132
- /* linked list of all channels on a server */
133
- channel_data* next;
134
- channel_data* prev;
135
- channel_registered_method* registered_methods;
136
- uint32_t registered_method_slots;
137
- uint32_t registered_method_max_probes;
138
- grpc_closure finish_destroy_channel_closure;
139
- intptr_t channelz_socket_uuid;
140
- };
118
+ struct Server::RegisteredMethod {
119
+ RegisteredMethod(
120
+ const char* method_arg, const char* host_arg,
121
+ grpc_server_register_method_payload_handling payload_handling_arg,
122
+ uint32_t flags_arg)
123
+ : method(method_arg == nullptr ? "" : method_arg),
124
+ host(host_arg == nullptr ? "" : host_arg),
125
+ payload_handling(payload_handling_arg),
126
+ flags(flags_arg) {}
141
127
 
142
- struct shutdown_tag {
143
- void* tag;
144
- grpc_completion_queue* cq;
145
- grpc_cq_completion completion;
146
- };
128
+ ~RegisteredMethod() = default;
147
129
 
148
- enum call_state {
149
- /* waiting for metadata */
150
- NOT_STARTED,
151
- /* initial metadata read, not flow controlled in yet */
152
- PENDING,
153
- /* flow controlled in, on completion queue */
154
- ACTIVATED,
155
- /* cancelled before being queued */
156
- ZOMBIED
130
+ const std::string method;
131
+ const std::string host;
132
+ const grpc_server_register_method_payload_handling payload_handling;
133
+ const uint32_t flags;
134
+ // One request matcher per method.
135
+ std::unique_ptr<RequestMatcherInterface> matcher;
157
136
  };
158
137
 
159
- struct call_data;
160
-
161
- grpc_call_error ValidateServerRequest(
162
- grpc_completion_queue* cq_for_notification, void* tag,
163
- grpc_byte_buffer** optional_payload, registered_method* rm);
138
+ //
139
+ // Server::RequestMatcherInterface
140
+ //
164
141
 
165
142
  // RPCs that come in from the transport must be matched against RPC requests
166
143
  // from the application. An incoming request from the application can be matched
@@ -171,7 +148,7 @@ grpc_call_error ValidateServerRequest(
171
148
  // on the request's notification CQ.
172
149
  //
173
150
  // RequestMatcherInterface is the base class to provide this functionality.
174
- class RequestMatcherInterface {
151
+ class Server::RequestMatcherInterface {
175
152
  public:
176
153
  virtual ~RequestMatcherInterface() {}
177
154
 
@@ -182,7 +159,7 @@ class RequestMatcherInterface {
182
159
  // Mark all application-requested RPCs failed if they have not been matched to
183
160
  // an incoming RPC. The error parameter indicates why the RPCs are being
184
161
  // failed (always server shutdown in all current implementations).
185
- virtual void KillRequests(grpc_error* error) = 0;
162
+ virtual void KillRequests(grpc_error_handle error) = 0;
186
163
 
187
164
  // How many request queues are supported by this matcher. This is an abstract
188
165
  // concept that essentially maps to gRPC completion queues.
@@ -194,7 +171,7 @@ class RequestMatcherInterface {
194
171
  // CQ. If there are pending RPCs waiting to be matched, publish one (match it
195
172
  // and notify the CQ).
196
173
  virtual void RequestCallWithPossiblePublish(size_t request_queue_index,
197
- requested_call* call) = 0;
174
+ RequestedCall* call) = 0;
198
175
 
199
176
  // This function is invoked on an incoming RPC, represented by the calld
200
177
  // object. The RequestMatcher will try to match it against an
@@ -203,248 +180,21 @@ class RequestMatcherInterface {
203
180
  // is done starting at the start_request_queue_index parameter in a cyclic
204
181
  // order rather than always starting at 0.
205
182
  virtual void MatchOrQueue(size_t start_request_queue_index,
206
- call_data* calld) = 0;
183
+ CallData* calld) = 0;
207
184
 
208
185
  // Returns the server associated with this request matcher
209
- virtual grpc_server* server() const = 0;
210
- };
211
-
212
- struct call_data {
213
- call_data(grpc_call_element* elem, const grpc_call_element_args& args)
214
- : call(grpc_call_from_top_element(elem)),
215
- call_combiner(args.call_combiner) {
216
- GRPC_CLOSURE_INIT(&server_on_recv_initial_metadata,
217
- ::server_on_recv_initial_metadata, elem,
218
- grpc_schedule_on_exec_ctx);
219
- GRPC_CLOSURE_INIT(&recv_trailing_metadata_ready,
220
- ::server_recv_trailing_metadata_ready, elem,
221
- grpc_schedule_on_exec_ctx);
222
- }
223
- ~call_data() {
224
- GPR_ASSERT(state != PENDING);
225
- GRPC_ERROR_UNREF(recv_initial_metadata_error);
226
- if (host_set) {
227
- grpc_slice_unref_internal(host);
228
- }
229
- if (path_set) {
230
- grpc_slice_unref_internal(path);
231
- }
232
- grpc_metadata_array_destroy(&initial_metadata);
233
- grpc_byte_buffer_destroy(payload);
234
- }
235
-
236
- grpc_call* call;
237
-
238
- gpr_atm state = NOT_STARTED;
239
-
240
- bool path_set = false;
241
- bool host_set = false;
242
- grpc_slice path;
243
- grpc_slice host;
244
- grpc_millis deadline = GRPC_MILLIS_INF_FUTURE;
245
-
246
- grpc_completion_queue* cq_new = nullptr;
247
-
248
- grpc_metadata_batch* recv_initial_metadata = nullptr;
249
- uint32_t recv_initial_metadata_flags = 0;
250
- grpc_metadata_array initial_metadata =
251
- grpc_metadata_array(); // Zero-initialize the C struct.
252
-
253
- RequestMatcherInterface* matcher = nullptr;
254
- grpc_byte_buffer* payload = nullptr;
255
-
256
- grpc_closure got_initial_metadata;
257
- grpc_closure server_on_recv_initial_metadata;
258
- grpc_closure kill_zombie_closure;
259
- grpc_closure* on_done_recv_initial_metadata;
260
- grpc_closure recv_trailing_metadata_ready;
261
- grpc_error* recv_initial_metadata_error = GRPC_ERROR_NONE;
262
- grpc_closure* original_recv_trailing_metadata_ready;
263
- grpc_error* recv_trailing_metadata_error = GRPC_ERROR_NONE;
264
- bool seen_recv_trailing_metadata_ready = false;
265
-
266
- grpc_closure publish;
267
-
268
- call_data* pending_next = nullptr;
269
- grpc_core::CallCombiner* call_combiner;
270
- };
271
-
272
- struct registered_method {
273
- registered_method(
274
- const char* method_arg, const char* host_arg,
275
- grpc_server_register_method_payload_handling payload_handling_arg,
276
- uint32_t flags_arg)
277
- : method(method_arg == nullptr ? "" : method_arg),
278
- host(host_arg == nullptr ? "" : host_arg),
279
- payload_handling(payload_handling_arg),
280
- flags(flags_arg) {}
281
-
282
- ~registered_method() = default;
283
-
284
- const std::string method;
285
- const std::string host;
286
- const grpc_server_register_method_payload_handling payload_handling;
287
- const uint32_t flags;
288
- /* one request matcher per method */
289
- std::unique_ptr<RequestMatcherInterface> matcher;
290
- registered_method* next;
291
- };
292
-
293
- struct channel_broadcaster {
294
- grpc_channel** channels;
295
- size_t num_channels;
296
- };
297
- } // namespace
298
-
299
- struct grpc_server {
300
- grpc_channel_args* channel_args;
301
-
302
- grpc_resource_user* default_resource_user;
303
-
304
- grpc_completion_queue** cqs;
305
- grpc_pollset** pollsets;
306
- size_t cq_count;
307
- size_t pollset_count;
308
- bool started;
309
-
310
- /* The two following mutexes control access to server-state
311
- mu_global controls access to non-call-related state (e.g., channel state)
312
- mu_call controls access to call-related state (e.g., the call lists)
313
-
314
- If they are ever required to be nested, you must lock mu_global
315
- before mu_call. This is currently used in shutdown processing
316
- (grpc_server_shutdown_and_notify and maybe_finish_shutdown) */
317
- gpr_mu mu_global; /* mutex for server and channel state */
318
- gpr_mu mu_call; /* mutex for call-specific state */
319
-
320
- /* startup synchronization: flag is protected by mu_global, signals whether
321
- we are doing the listener start routine or not */
322
- bool starting;
323
- gpr_cv starting_cv;
324
-
325
- // TODO(vjpai): Convert from a linked-list head pointer to a std::vector once
326
- // grpc_server has a real constructor/destructor
327
- registered_method* registered_methods;
328
- /** one request matcher for unregistered methods */
329
- // TODO(vjpai): Convert to a std::unique_ptr once grpc_server has a real
330
- // constructor and destructor.
331
- RequestMatcherInterface* unregistered_request_matcher;
332
-
333
- gpr_atm shutdown_flag;
334
- uint8_t shutdown_published;
335
- size_t num_shutdown_tags;
336
- shutdown_tag* shutdown_tags;
337
-
338
- channel_data root_channel_data;
339
-
340
- listener* listeners;
341
- int listeners_destroyed;
342
- grpc_core::RefCount internal_refcount;
343
-
344
- /** when did we print the last shutdown progress message */
345
- gpr_timespec last_shutdown_message_time;
346
-
347
- grpc_core::RefCountedPtr<grpc_core::channelz::ServerNode> channelz_server;
348
- };
349
-
350
- #define SERVER_FROM_CALL_ELEM(elem) \
351
- (((channel_data*)(elem)->channel_data)->server)
352
-
353
- namespace {
354
- void publish_call(grpc_server* server, call_data* calld, size_t cq_idx,
355
- requested_call* rc);
356
- void fail_call(grpc_server* server, size_t cq_idx, requested_call* rc,
357
- grpc_error* error);
358
- /* Before calling maybe_finish_shutdown, we must hold mu_global and not
359
- hold mu_call */
360
- void maybe_finish_shutdown(grpc_server* server);
361
-
362
- void kill_zombie(void* elem, grpc_error* /*error*/) {
363
- grpc_call_unref(
364
- grpc_call_from_top_element(static_cast<grpc_call_element*>(elem)));
365
- }
366
-
367
- /*
368
- * channel broadcaster
369
- */
370
-
371
- /* assumes server locked */
372
- void channel_broadcaster_init(grpc_server* s, channel_broadcaster* cb) {
373
- channel_data* c;
374
- size_t count = 0;
375
- for (c = s->root_channel_data.next; c != &s->root_channel_data; c = c->next) {
376
- count++;
377
- }
378
- cb->num_channels = count;
379
- cb->channels = static_cast<grpc_channel**>(
380
- gpr_malloc(sizeof(*cb->channels) * cb->num_channels));
381
- count = 0;
382
- for (c = s->root_channel_data.next; c != &s->root_channel_data; c = c->next) {
383
- cb->channels[count++] = c->channel;
384
- GRPC_CHANNEL_INTERNAL_REF(c->channel, "broadcast");
385
- }
386
- }
387
-
388
- struct shutdown_cleanup_args {
389
- grpc_closure closure;
390
- grpc_slice slice;
186
+ virtual Server* server() const = 0;
391
187
  };
392
188
 
393
- void shutdown_cleanup(void* arg, grpc_error* /*error*/) {
394
- struct shutdown_cleanup_args* a =
395
- static_cast<struct shutdown_cleanup_args*>(arg);
396
- grpc_slice_unref_internal(a->slice);
397
- gpr_free(a);
398
- }
399
-
400
- void send_shutdown(grpc_channel* channel, bool send_goaway,
401
- grpc_error* send_disconnect) {
402
- struct shutdown_cleanup_args* sc =
403
- static_cast<struct shutdown_cleanup_args*>(gpr_malloc(sizeof(*sc)));
404
- GRPC_CLOSURE_INIT(&sc->closure, shutdown_cleanup, sc,
405
- grpc_schedule_on_exec_ctx);
406
- grpc_transport_op* op = grpc_make_transport_op(&sc->closure);
407
- grpc_channel_element* elem;
408
-
409
- op->goaway_error =
410
- send_goaway ? grpc_error_set_int(
411
- GRPC_ERROR_CREATE_FROM_STATIC_STRING("Server shutdown"),
412
- GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_OK)
413
- : GRPC_ERROR_NONE;
414
- op->set_accept_stream = true;
415
- sc->slice = grpc_slice_from_copied_string("Server shutdown");
416
- op->disconnect_with_error = send_disconnect;
417
-
418
- elem = grpc_channel_stack_element(grpc_channel_get_channel_stack(channel), 0);
419
- elem->filter->start_transport_op(elem, op);
420
- }
421
-
422
- void channel_broadcaster_shutdown(channel_broadcaster* cb, bool send_goaway,
423
- grpc_error* force_disconnect) {
424
- size_t i;
425
-
426
- for (i = 0; i < cb->num_channels; i++) {
427
- send_shutdown(cb->channels[i], send_goaway,
428
- GRPC_ERROR_REF(force_disconnect));
429
- GRPC_CHANNEL_INTERNAL_UNREF(cb->channels[i], "broadcast");
430
- }
431
- gpr_free(cb->channels);
432
- GRPC_ERROR_UNREF(force_disconnect);
433
- }
434
-
435
- /*
436
- * request_matcher
437
- */
438
-
439
189
  // The RealRequestMatcher is an implementation of RequestMatcherInterface that
440
190
  // actually uses all the features of RequestMatcherInterface: expecting the
441
191
  // application to explicitly request RPCs and then matching those to incoming
442
192
  // RPCs, along with a slow path by which incoming RPCs are put on a locked
443
193
  // pending list if they aren't able to be matched to an application request.
444
- class RealRequestMatcher : public RequestMatcherInterface {
194
+ class Server::RealRequestMatcher : public RequestMatcherInterface {
445
195
  public:
446
- explicit RealRequestMatcher(grpc_server* server)
447
- : server_(server), requests_per_cq_(server->cq_count) {}
196
+ explicit RealRequestMatcher(Server* server)
197
+ : server_(server), requests_per_cq_(server->cqs_.size()) {}
448
198
 
449
199
  ~RealRequestMatcher() override {
450
200
  for (LockedMultiProducerSingleConsumerQueue& queue : requests_per_cq_) {
@@ -453,25 +203,20 @@ class RealRequestMatcher : public RequestMatcherInterface {
453
203
  }
454
204
 
455
205
  void ZombifyPending() override {
456
- while (pending_head_ != nullptr) {
457
- call_data* calld = pending_head_;
458
- pending_head_ = calld->pending_next;
459
- gpr_atm_no_barrier_store(&calld->state, ZOMBIED);
460
- GRPC_CLOSURE_INIT(
461
- &calld->kill_zombie_closure, kill_zombie,
462
- grpc_call_stack_element(grpc_call_get_call_stack(calld->call), 0),
463
- grpc_schedule_on_exec_ctx);
464
- grpc_core::ExecCtx::Run(DEBUG_LOCATION, &calld->kill_zombie_closure,
465
- GRPC_ERROR_NONE);
206
+ while (!pending_.empty()) {
207
+ CallData* calld = pending_.front();
208
+ calld->SetState(CallData::CallState::ZOMBIED);
209
+ calld->KillZombie();
210
+ pending_.pop();
466
211
  }
467
212
  }
468
213
 
469
- void KillRequests(grpc_error* error) override {
214
+ void KillRequests(grpc_error_handle error) override {
470
215
  for (size_t i = 0; i < requests_per_cq_.size(); i++) {
471
- requested_call* rc;
472
- while ((rc = reinterpret_cast<requested_call*>(
216
+ RequestedCall* rc;
217
+ while ((rc = reinterpret_cast<RequestedCall*>(
473
218
  requests_per_cq_[i].Pop())) != nullptr) {
474
- fail_call(server_, i, rc, GRPC_ERROR_REF(error));
219
+ server_->FailCall(i, rc, GRPC_ERROR_REF(error));
475
220
  }
476
221
  }
477
222
  GRPC_ERROR_UNREF(error);
@@ -482,90 +227,90 @@ class RealRequestMatcher : public RequestMatcherInterface {
482
227
  }
483
228
 
484
229
  void RequestCallWithPossiblePublish(size_t request_queue_index,
485
- requested_call* call) override {
230
+ RequestedCall* call) override {
486
231
  if (requests_per_cq_[request_queue_index].Push(&call->mpscq_node)) {
487
232
  /* this was the first queued request: we need to lock and start
488
233
  matching calls */
489
- gpr_mu_lock(&server_->mu_call);
490
- call_data* calld;
491
- while ((calld = pending_head_) != nullptr) {
492
- requested_call* rc = reinterpret_cast<requested_call*>(
493
- requests_per_cq_[request_queue_index].Pop());
494
- if (rc == nullptr) break;
495
- pending_head_ = calld->pending_next;
496
- gpr_mu_unlock(&server_->mu_call);
497
- if (!gpr_atm_full_cas(&calld->state, PENDING, ACTIVATED)) {
234
+ struct PendingCall {
235
+ RequestedCall* rc = nullptr;
236
+ CallData* calld;
237
+ };
238
+ auto pop_next_pending = [this, request_queue_index] {
239
+ PendingCall pending_call;
240
+ {
241
+ MutexLock lock(&server_->mu_call_);
242
+ if (!pending_.empty()) {
243
+ pending_call.rc = reinterpret_cast<RequestedCall*>(
244
+ requests_per_cq_[request_queue_index].Pop());
245
+ if (pending_call.rc != nullptr) {
246
+ pending_call.calld = pending_.front();
247
+ pending_.pop();
248
+ }
249
+ }
250
+ }
251
+ return pending_call;
252
+ };
253
+ while (true) {
254
+ PendingCall next_pending = pop_next_pending();
255
+ if (next_pending.rc == nullptr) break;
256
+ if (!next_pending.calld->MaybeActivate()) {
498
257
  // Zombied Call
499
- GRPC_CLOSURE_INIT(
500
- &calld->kill_zombie_closure, kill_zombie,
501
- grpc_call_stack_element(grpc_call_get_call_stack(calld->call), 0),
502
- grpc_schedule_on_exec_ctx);
503
- grpc_core::ExecCtx::Run(DEBUG_LOCATION, &calld->kill_zombie_closure,
504
- GRPC_ERROR_NONE);
258
+ next_pending.calld->KillZombie();
505
259
  } else {
506
- publish_call(server_, calld, request_queue_index, rc);
260
+ next_pending.calld->Publish(request_queue_index, next_pending.rc);
507
261
  }
508
- gpr_mu_lock(&server_->mu_call);
509
262
  }
510
- gpr_mu_unlock(&server_->mu_call);
511
263
  }
512
264
  }
513
265
 
514
266
  void MatchOrQueue(size_t start_request_queue_index,
515
- call_data* calld) override {
267
+ CallData* calld) override {
516
268
  for (size_t i = 0; i < requests_per_cq_.size(); i++) {
517
269
  size_t cq_idx = (start_request_queue_index + i) % requests_per_cq_.size();
518
- requested_call* rc =
519
- reinterpret_cast<requested_call*>(requests_per_cq_[cq_idx].TryPop());
520
- if (rc == nullptr) {
521
- continue;
522
- } else {
270
+ RequestedCall* rc =
271
+ reinterpret_cast<RequestedCall*>(requests_per_cq_[cq_idx].TryPop());
272
+ if (rc != nullptr) {
523
273
  GRPC_STATS_INC_SERVER_CQS_CHECKED(i);
524
- gpr_atm_no_barrier_store(&calld->state, ACTIVATED);
525
- publish_call(server_, calld, cq_idx, rc);
526
- return; /* early out */
274
+ calld->SetState(CallData::CallState::ACTIVATED);
275
+ calld->Publish(cq_idx, rc);
276
+ return;
527
277
  }
528
278
  }
529
-
530
- /* no cq to take the request found: queue it on the slow list */
279
+ // No cq to take the request found; queue it on the slow list.
531
280
  GRPC_STATS_INC_SERVER_SLOWPATH_REQUESTS_QUEUED();
532
- gpr_mu_lock(&server_->mu_call);
533
-
534
281
  // We need to ensure that all the queues are empty. We do this under
535
- // the server mu_call lock to ensure that if something is added to
282
+ // the server mu_call_ lock to ensure that if something is added to
536
283
  // an empty request queue, it will block until the call is actually
537
284
  // added to the pending list.
538
- for (size_t i = 0; i < requests_per_cq_.size(); i++) {
539
- size_t cq_idx = (start_request_queue_index + i) % requests_per_cq_.size();
540
- requested_call* rc =
541
- reinterpret_cast<requested_call*>(requests_per_cq_[cq_idx].Pop());
285
+ RequestedCall* rc = nullptr;
286
+ size_t cq_idx = 0;
287
+ size_t loop_count;
288
+ {
289
+ MutexLock lock(&server_->mu_call_);
290
+ for (loop_count = 0; loop_count < requests_per_cq_.size(); loop_count++) {
291
+ cq_idx =
292
+ (start_request_queue_index + loop_count) % requests_per_cq_.size();
293
+ rc = reinterpret_cast<RequestedCall*>(requests_per_cq_[cq_idx].Pop());
294
+ if (rc != nullptr) {
295
+ break;
296
+ }
297
+ }
542
298
  if (rc == nullptr) {
543
- continue;
544
- } else {
545
- gpr_mu_unlock(&server_->mu_call);
546
- GRPC_STATS_INC_SERVER_CQS_CHECKED(i + requests_per_cq_.size());
547
- gpr_atm_no_barrier_store(&calld->state, ACTIVATED);
548
- publish_call(server_, calld, cq_idx, rc);
549
- return; /* early out */
299
+ calld->SetState(CallData::CallState::PENDING);
300
+ pending_.push(calld);
301
+ return;
550
302
  }
551
303
  }
552
-
553
- gpr_atm_no_barrier_store(&calld->state, PENDING);
554
- if (pending_head_ == nullptr) {
555
- pending_tail_ = pending_head_ = calld;
556
- } else {
557
- pending_tail_->pending_next = calld;
558
- pending_tail_ = calld;
559
- }
560
- gpr_mu_unlock(&server_->mu_call);
304
+ GRPC_STATS_INC_SERVER_CQS_CHECKED(loop_count + requests_per_cq_.size());
305
+ calld->SetState(CallData::CallState::ACTIVATED);
306
+ calld->Publish(cq_idx, rc);
561
307
  }
562
308
 
563
- grpc_server* server() const override { return server_; }
309
+ Server* server() const override { return server_; }
564
310
 
565
311
  private:
566
- grpc_server* const server_;
567
- call_data* pending_head_ = nullptr;
568
- call_data* pending_tail_ = nullptr;
312
+ Server* const server_;
313
+ std::queue<CallData*> pending_;
569
314
  std::vector<LockedMultiProducerSingleConsumerQueue> requests_per_cq_;
570
315
  };
571
316
 
@@ -573,33 +318,36 @@ class RealRequestMatcher : public RequestMatcherInterface {
573
318
  // advance or queue up any incoming RPC for later match. Instead, MatchOrQueue
574
319
  // will call out to an allocation function passed in at the construction of the
575
320
  // object. These request matchers are designed for the C++ callback API, so they
576
- // only support 1 completion queue (passed in at the constructor).
577
- class AllocatingRequestMatcherBase : public RequestMatcherInterface {
321
+ // only support 1 completion queue (passed in at the constructor). They are also
322
+ // used for the sync API.
323
+ class Server::AllocatingRequestMatcherBase : public RequestMatcherInterface {
578
324
  public:
579
- AllocatingRequestMatcherBase(grpc_server* server, grpc_completion_queue* cq)
325
+ AllocatingRequestMatcherBase(Server* server, grpc_completion_queue* cq)
580
326
  : server_(server), cq_(cq) {
581
327
  size_t idx;
582
- for (idx = 0; idx < server->cq_count; idx++) {
583
- if (server->cqs[idx] == cq) {
328
+ for (idx = 0; idx < server->cqs_.size(); idx++) {
329
+ if (server->cqs_[idx] == cq) {
584
330
  break;
585
331
  }
586
332
  }
587
- GPR_ASSERT(idx < server->cq_count);
333
+ GPR_ASSERT(idx < server->cqs_.size());
588
334
  cq_idx_ = idx;
589
335
  }
590
336
 
591
337
  void ZombifyPending() override {}
592
338
 
593
- void KillRequests(grpc_error* error) override { GRPC_ERROR_UNREF(error); }
339
+ void KillRequests(grpc_error_handle error) override {
340
+ GRPC_ERROR_UNREF(error);
341
+ }
594
342
 
595
343
  size_t request_queue_count() const override { return 0; }
596
344
 
597
345
  void RequestCallWithPossiblePublish(size_t /*request_queue_index*/,
598
- requested_call* /*call*/) final {
346
+ RequestedCall* /*call*/) final {
599
347
  GPR_ASSERT(false);
600
348
  }
601
349
 
602
- grpc_server* server() const override { return server_; }
350
+ Server* server() const override { return server_; }
603
351
 
604
352
  // Supply the completion queue related to this request matcher
605
353
  grpc_completion_queue* cq() const { return cq_; }
@@ -608,634 +356,571 @@ class AllocatingRequestMatcherBase : public RequestMatcherInterface {
608
356
  size_t cq_idx() const { return cq_idx_; }
609
357
 
610
358
  private:
611
- grpc_server* const server_;
359
+ Server* const server_;
612
360
  grpc_completion_queue* const cq_;
613
361
  size_t cq_idx_;
614
362
  };
615
363
 
616
364
  // An allocating request matcher for non-registered methods (used for generic
617
365
  // API and unimplemented RPCs).
618
- class AllocatingRequestMatcherBatch : public AllocatingRequestMatcherBase {
366
+ class Server::AllocatingRequestMatcherBatch
367
+ : public AllocatingRequestMatcherBase {
619
368
  public:
620
- AllocatingRequestMatcherBatch(
621
- grpc_server* server, grpc_completion_queue* cq,
622
- std::function<grpc_core::ServerBatchCallAllocation()> allocator)
369
+ AllocatingRequestMatcherBatch(Server* server, grpc_completion_queue* cq,
370
+ std::function<BatchCallAllocation()> allocator)
623
371
  : AllocatingRequestMatcherBase(server, cq),
624
372
  allocator_(std::move(allocator)) {}
373
+
625
374
  void MatchOrQueue(size_t /*start_request_queue_index*/,
626
- call_data* calld) override {
627
- grpc_core::ServerBatchCallAllocation call_info = allocator_();
628
- GPR_ASSERT(ValidateServerRequest(cq(), static_cast<void*>(call_info.tag),
629
- nullptr, nullptr) == GRPC_CALL_OK);
630
- requested_call* rc = new requested_call(
631
- static_cast<void*>(call_info.tag), cq(), call_info.call,
632
- call_info.initial_metadata, call_info.details);
633
- gpr_atm_no_barrier_store(&calld->state, ACTIVATED);
634
- publish_call(server(), calld, cq_idx(), rc);
375
+ CallData* calld) override {
376
+ if (server()->ShutdownRefOnRequest()) {
377
+ BatchCallAllocation call_info = allocator_();
378
+ GPR_ASSERT(server()->ValidateServerRequest(
379
+ cq(), static_cast<void*>(call_info.tag), nullptr,
380
+ nullptr) == GRPC_CALL_OK);
381
+ RequestedCall* rc = new RequestedCall(
382
+ static_cast<void*>(call_info.tag), call_info.cq, call_info.call,
383
+ call_info.initial_metadata, call_info.details);
384
+ calld->SetState(CallData::CallState::ACTIVATED);
385
+ calld->Publish(cq_idx(), rc);
386
+ } else {
387
+ calld->FailCallCreation();
388
+ }
389
+ server()->ShutdownUnrefOnRequest();
635
390
  }
636
391
 
637
392
  private:
638
- std::function<grpc_core::ServerBatchCallAllocation()> allocator_;
393
+ std::function<BatchCallAllocation()> allocator_;
639
394
  };
640
395
 
641
396
  // An allocating request matcher for registered methods.
642
- class AllocatingRequestMatcherRegistered : public AllocatingRequestMatcherBase {
397
+ class Server::AllocatingRequestMatcherRegistered
398
+ : public AllocatingRequestMatcherBase {
643
399
  public:
644
400
  AllocatingRequestMatcherRegistered(
645
- grpc_server* server, grpc_completion_queue* cq, registered_method* rm,
646
- std::function<grpc_core::ServerRegisteredCallAllocation()> allocator)
401
+ Server* server, grpc_completion_queue* cq, RegisteredMethod* rm,
402
+ std::function<RegisteredCallAllocation()> allocator)
647
403
  : AllocatingRequestMatcherBase(server, cq),
648
404
  registered_method_(rm),
649
405
  allocator_(std::move(allocator)) {}
406
+
650
407
  void MatchOrQueue(size_t /*start_request_queue_index*/,
651
- call_data* calld) override {
652
- grpc_core::ServerRegisteredCallAllocation call_info = allocator_();
653
- GPR_ASSERT(ValidateServerRequest(cq(), static_cast<void*>(call_info.tag),
654
- call_info.optional_payload,
655
- registered_method_) == GRPC_CALL_OK);
656
- requested_call* rc = new requested_call(
657
- static_cast<void*>(call_info.tag), cq(), call_info.call,
658
- call_info.initial_metadata, registered_method_, call_info.deadline,
659
- call_info.optional_payload);
660
- gpr_atm_no_barrier_store(&calld->state, ACTIVATED);
661
- publish_call(server(), calld, cq_idx(), rc);
408
+ CallData* calld) override {
409
+ if (server()->ShutdownRefOnRequest()) {
410
+ RegisteredCallAllocation call_info = allocator_();
411
+ GPR_ASSERT(server()->ValidateServerRequest(
412
+ cq(), call_info.tag, call_info.optional_payload,
413
+ registered_method_) == GRPC_CALL_OK);
414
+ RequestedCall* rc =
415
+ new RequestedCall(call_info.tag, call_info.cq, call_info.call,
416
+ call_info.initial_metadata, registered_method_,
417
+ call_info.deadline, call_info.optional_payload);
418
+ calld->SetState(CallData::CallState::ACTIVATED);
419
+ calld->Publish(cq_idx(), rc);
420
+ } else {
421
+ calld->FailCallCreation();
422
+ }
423
+ server()->ShutdownUnrefOnRequest();
662
424
  }
663
425
 
664
426
  private:
665
- registered_method* const registered_method_;
666
- std::function<grpc_core::ServerRegisteredCallAllocation()> allocator_;
427
+ RegisteredMethod* const registered_method_;
428
+ std::function<RegisteredCallAllocation()> allocator_;
667
429
  };
668
430
 
669
- /*
670
- * server proper
671
- */
431
+ //
432
+ // ChannelBroadcaster
433
+ //
434
+
435
+ namespace {
672
436
 
673
- void server_ref(grpc_server* server) { server->internal_refcount.Ref(); }
437
+ class ChannelBroadcaster {
438
+ public:
439
+ // This can have an empty constructor and destructor since we want to control
440
+ // when the actual setup and shutdown broadcast take place.
674
441
 
675
- void server_delete(grpc_server* server) {
676
- registered_method* rm;
677
- size_t i;
678
- server->channelz_server.reset();
679
- grpc_channel_args_destroy(server->channel_args);
680
- gpr_mu_destroy(&server->mu_global);
681
- gpr_mu_destroy(&server->mu_call);
682
- gpr_cv_destroy(&server->starting_cv);
683
- while ((rm = server->registered_methods) != nullptr) {
684
- server->registered_methods = rm->next;
685
- delete rm;
442
+ // Copies over the channels from the locked server.
443
+ void FillChannelsLocked(std::vector<grpc_channel*> channels) {
444
+ GPR_DEBUG_ASSERT(channels_.empty());
445
+ channels_ = std::move(channels);
686
446
  }
687
- delete server->unregistered_request_matcher;
688
- for (i = 0; i < server->cq_count; i++) {
689
- GRPC_CQ_INTERNAL_UNREF(server->cqs[i], "server");
690
- }
691
- gpr_free(server->cqs);
692
- gpr_free(server->pollsets);
693
- gpr_free(server->shutdown_tags);
694
- gpr_free(server);
695
- }
696
447
 
697
- void server_unref(grpc_server* server) {
698
- if (GPR_UNLIKELY(server->internal_refcount.Unref())) {
699
- server_delete(server);
448
+ // Broadcasts a shutdown on each channel.
449
+ void BroadcastShutdown(bool send_goaway, grpc_error_handle force_disconnect) {
450
+ for (grpc_channel* channel : channels_) {
451
+ SendShutdown(channel, send_goaway, GRPC_ERROR_REF(force_disconnect));
452
+ GRPC_CHANNEL_INTERNAL_UNREF(channel, "broadcast");
453
+ }
454
+ channels_.clear(); // just for safety against double broadcast
455
+ GRPC_ERROR_UNREF(force_disconnect);
700
456
  }
701
- }
702
457
 
703
- int is_channel_orphaned(channel_data* chand) { return chand->next == chand; }
458
+ private:
459
+ struct ShutdownCleanupArgs {
460
+ grpc_closure closure;
461
+ grpc_slice slice;
462
+ };
704
463
 
705
- void orphan_channel(channel_data* chand) {
706
- chand->next->prev = chand->prev;
707
- chand->prev->next = chand->next;
708
- chand->next = chand->prev = chand;
709
- }
464
+ static void ShutdownCleanup(void* arg, grpc_error_handle /*error*/) {
465
+ ShutdownCleanupArgs* a = static_cast<ShutdownCleanupArgs*>(arg);
466
+ grpc_slice_unref_internal(a->slice);
467
+ delete a;
468
+ }
710
469
 
711
- void finish_destroy_channel(void* cd, grpc_error* /*error*/) {
712
- channel_data* chand = static_cast<channel_data*>(cd);
713
- grpc_server* server = chand->server;
714
- GRPC_CHANNEL_INTERNAL_UNREF(chand->channel, "server");
715
- server_unref(server);
716
- }
470
+ static void SendShutdown(grpc_channel* channel, bool send_goaway,
471
+ grpc_error_handle send_disconnect) {
472
+ ShutdownCleanupArgs* sc = new ShutdownCleanupArgs;
473
+ GRPC_CLOSURE_INIT(&sc->closure, ShutdownCleanup, sc,
474
+ grpc_schedule_on_exec_ctx);
475
+ grpc_transport_op* op = grpc_make_transport_op(&sc->closure);
476
+ grpc_channel_element* elem;
477
+ op->goaway_error =
478
+ send_goaway
479
+ ? grpc_error_set_int(
480
+ GRPC_ERROR_CREATE_FROM_STATIC_STRING("Server shutdown"),
481
+ GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_OK)
482
+ : GRPC_ERROR_NONE;
483
+ op->set_accept_stream = true;
484
+ sc->slice = grpc_slice_from_copied_string("Server shutdown");
485
+ op->disconnect_with_error = send_disconnect;
486
+ elem =
487
+ grpc_channel_stack_element(grpc_channel_get_channel_stack(channel), 0);
488
+ elem->filter->start_transport_op(elem, op);
489
+ }
490
+
491
+ std::vector<grpc_channel*> channels_;
492
+ };
717
493
 
718
- void destroy_channel(channel_data* chand) {
719
- if (is_channel_orphaned(chand)) return;
720
- GPR_ASSERT(chand->server != nullptr);
721
- orphan_channel(chand);
722
- server_ref(chand->server);
723
- maybe_finish_shutdown(chand->server);
724
- GRPC_CLOSURE_INIT(&chand->finish_destroy_channel_closure,
725
- finish_destroy_channel, chand, grpc_schedule_on_exec_ctx);
494
+ } // namespace
726
495
 
727
- if (GRPC_TRACE_FLAG_ENABLED(grpc_server_channel_trace)) {
728
- gpr_log(GPR_INFO, "Disconnected client");
729
- }
496
+ //
497
+ // Server
498
+ //
730
499
 
731
- grpc_transport_op* op =
732
- grpc_make_transport_op(&chand->finish_destroy_channel_closure);
733
- op->set_accept_stream = true;
734
- grpc_channel_next_op(grpc_channel_stack_element(
735
- grpc_channel_get_channel_stack(chand->channel), 0),
736
- op);
737
- }
500
+ const grpc_channel_filter Server::kServerTopFilter = {
501
+ Server::CallData::StartTransportStreamOpBatch,
502
+ grpc_channel_next_op,
503
+ sizeof(Server::CallData),
504
+ Server::CallData::InitCallElement,
505
+ grpc_call_stack_ignore_set_pollset_or_pollset_set,
506
+ Server::CallData::DestroyCallElement,
507
+ sizeof(Server::ChannelData),
508
+ Server::ChannelData::InitChannelElement,
509
+ Server::ChannelData::DestroyChannelElement,
510
+ grpc_channel_next_get_info,
511
+ "server",
512
+ };
738
513
 
739
- void done_request_event(void* req, grpc_cq_completion* /*c*/) {
740
- delete static_cast<requested_call*>(req);
741
- }
514
+ namespace {
742
515
 
743
- void publish_call(grpc_server* server, call_data* calld, size_t cq_idx,
744
- requested_call* rc) {
745
- grpc_call_set_completion_queue(calld->call, rc->cq_bound_to_call);
746
- grpc_call* call = calld->call;
747
- *rc->call = call;
748
- calld->cq_new = server->cqs[cq_idx];
749
- GPR_SWAP(grpc_metadata_array, *rc->initial_metadata, calld->initial_metadata);
750
- switch (rc->type) {
751
- case BATCH_CALL:
752
- GPR_ASSERT(calld->host_set);
753
- GPR_ASSERT(calld->path_set);
754
- rc->data.batch.details->host = grpc_slice_ref_internal(calld->host);
755
- rc->data.batch.details->method = grpc_slice_ref_internal(calld->path);
756
- rc->data.batch.details->deadline =
757
- grpc_millis_to_timespec(calld->deadline, GPR_CLOCK_MONOTONIC);
758
- rc->data.batch.details->flags = calld->recv_initial_metadata_flags;
759
- break;
760
- case REGISTERED_CALL:
761
- *rc->data.registered.deadline =
762
- grpc_millis_to_timespec(calld->deadline, GPR_CLOCK_MONOTONIC);
763
- if (rc->data.registered.optional_payload) {
764
- *rc->data.registered.optional_payload = calld->payload;
765
- calld->payload = nullptr;
766
- }
767
- break;
768
- default:
769
- GPR_UNREACHABLE_CODE(return );
516
+ grpc_resource_user* CreateDefaultResourceUser(const grpc_channel_args* args) {
517
+ if (args != nullptr) {
518
+ grpc_resource_quota* resource_quota =
519
+ grpc_resource_quota_from_channel_args(args, false /* create */);
520
+ if (resource_quota != nullptr) {
521
+ return grpc_resource_user_create(resource_quota, "default");
522
+ }
770
523
  }
771
-
772
- grpc_cq_end_op(calld->cq_new, rc->tag, GRPC_ERROR_NONE, done_request_event,
773
- rc, &rc->completion, true);
524
+ return nullptr;
774
525
  }
775
526
 
776
- void publish_new_rpc(void* arg, grpc_error* error) {
777
- grpc_call_element* call_elem = static_cast<grpc_call_element*>(arg);
778
- call_data* calld = static_cast<call_data*>(call_elem->call_data);
779
- channel_data* chand = static_cast<channel_data*>(call_elem->channel_data);
780
- RequestMatcherInterface* rm = calld->matcher;
781
- grpc_server* server = rm->server();
782
-
783
- if (error != GRPC_ERROR_NONE || gpr_atm_acq_load(&server->shutdown_flag)) {
784
- gpr_atm_no_barrier_store(&calld->state, ZOMBIED);
785
- GRPC_CLOSURE_INIT(
786
- &calld->kill_zombie_closure, kill_zombie,
787
- grpc_call_stack_element(grpc_call_get_call_stack(calld->call), 0),
788
- grpc_schedule_on_exec_ctx);
789
- grpc_core::ExecCtx::Run(DEBUG_LOCATION, &calld->kill_zombie_closure,
790
- GRPC_ERROR_REF(error));
791
- return;
527
+ RefCountedPtr<channelz::ServerNode> CreateChannelzNode(
528
+ const grpc_channel_args* args) {
529
+ RefCountedPtr<channelz::ServerNode> channelz_node;
530
+ if (grpc_channel_args_find_bool(args, GRPC_ARG_ENABLE_CHANNELZ,
531
+ GRPC_ENABLE_CHANNELZ_DEFAULT)) {
532
+ size_t channel_tracer_max_memory = grpc_channel_args_find_integer(
533
+ args, GRPC_ARG_MAX_CHANNEL_TRACE_EVENT_MEMORY_PER_NODE,
534
+ {GRPC_MAX_CHANNEL_TRACE_EVENT_MEMORY_PER_NODE_DEFAULT, 0, INT_MAX});
535
+ channelz_node =
536
+ MakeRefCounted<channelz::ServerNode>(channel_tracer_max_memory);
537
+ channelz_node->AddTraceEvent(
538
+ channelz::ChannelTrace::Severity::Info,
539
+ grpc_slice_from_static_string("Server created"));
792
540
  }
793
-
794
- rm->MatchOrQueue(chand->cq_idx, calld);
541
+ return channelz_node;
795
542
  }
796
543
 
797
- void finish_start_new_rpc(
798
- grpc_server* server, grpc_call_element* elem, RequestMatcherInterface* rm,
799
- grpc_server_register_method_payload_handling payload_handling) {
800
- call_data* calld = static_cast<call_data*>(elem->call_data);
801
-
802
- if (gpr_atm_acq_load(&server->shutdown_flag)) {
803
- gpr_atm_no_barrier_store(&calld->state, ZOMBIED);
804
- GRPC_CLOSURE_INIT(&calld->kill_zombie_closure, kill_zombie, elem,
805
- grpc_schedule_on_exec_ctx);
806
- grpc_core::ExecCtx::Run(DEBUG_LOCATION, &calld->kill_zombie_closure,
807
- GRPC_ERROR_NONE);
808
- return;
809
- }
810
-
811
- calld->matcher = rm;
812
-
813
- switch (payload_handling) {
814
- case GRPC_SRM_PAYLOAD_NONE:
815
- publish_new_rpc(elem, GRPC_ERROR_NONE);
816
- break;
817
- case GRPC_SRM_PAYLOAD_READ_INITIAL_BYTE_BUFFER: {
818
- grpc_op op;
819
- op.op = GRPC_OP_RECV_MESSAGE;
820
- op.flags = 0;
821
- op.reserved = nullptr;
822
- op.data.recv_message.recv_message = &calld->payload;
823
- GRPC_CLOSURE_INIT(&calld->publish, publish_new_rpc, elem,
824
- grpc_schedule_on_exec_ctx);
825
- grpc_call_start_batch_and_execute(calld->call, &op, 1, &calld->publish);
826
- break;
827
- }
828
- }
829
- }
544
+ } // namespace
830
545
 
831
- void start_new_rpc(grpc_call_element* elem) {
832
- channel_data* chand = static_cast<channel_data*>(elem->channel_data);
833
- call_data* calld = static_cast<call_data*>(elem->call_data);
834
- grpc_server* server = chand->server;
835
- uint32_t i;
836
- uint32_t hash;
837
- channel_registered_method* rm;
838
-
839
- if (chand->registered_methods && calld->path_set && calld->host_set) {
840
- /* TODO(ctiller): unify these two searches */
841
- /* check for an exact match with host */
842
- hash = GRPC_MDSTR_KV_HASH(grpc_slice_hash_internal(calld->host),
843
- grpc_slice_hash_internal(calld->path));
844
- for (i = 0; i <= chand->registered_method_max_probes; i++) {
845
- rm = &chand->registered_methods[(hash + i) %
846
- chand->registered_method_slots];
847
- if (rm->server_registered_method == nullptr) break;
848
- if (!rm->has_host) continue;
849
- if (rm->host != calld->host) continue;
850
- if (rm->method != calld->path) continue;
851
- if ((rm->flags & GRPC_INITIAL_METADATA_IDEMPOTENT_REQUEST) &&
852
- 0 == (calld->recv_initial_metadata_flags &
853
- GRPC_INITIAL_METADATA_IDEMPOTENT_REQUEST)) {
854
- continue;
855
- }
856
- finish_start_new_rpc(server, elem,
857
- rm->server_registered_method->matcher.get(),
858
- rm->server_registered_method->payload_handling);
859
- return;
860
- }
861
- /* check for a wildcard method definition (no host set) */
862
- hash = GRPC_MDSTR_KV_HASH(0, grpc_slice_hash_internal(calld->path));
863
- for (i = 0; i <= chand->registered_method_max_probes; i++) {
864
- rm = &chand->registered_methods[(hash + i) %
865
- chand->registered_method_slots];
866
- if (rm->server_registered_method == nullptr) break;
867
- if (rm->has_host) continue;
868
- if (rm->method != calld->path) continue;
869
- if ((rm->flags & GRPC_INITIAL_METADATA_IDEMPOTENT_REQUEST) &&
870
- 0 == (calld->recv_initial_metadata_flags &
871
- GRPC_INITIAL_METADATA_IDEMPOTENT_REQUEST)) {
872
- continue;
873
- }
874
- finish_start_new_rpc(server, elem,
875
- rm->server_registered_method->matcher.get(),
876
- rm->server_registered_method->payload_handling);
877
- return;
546
+ Server::Server(const grpc_channel_args* args)
547
+ : channel_args_(grpc_channel_args_copy(args)),
548
+ default_resource_user_(CreateDefaultResourceUser(args)),
549
+ channelz_node_(CreateChannelzNode(args)) {}
550
+
551
+ Server::~Server() {
552
+ grpc_channel_args_destroy(channel_args_);
553
+ // Remove the cq pollsets from the config_fetcher.
554
+ if (started_ && config_fetcher_ != nullptr &&
555
+ config_fetcher_->interested_parties() != nullptr) {
556
+ for (grpc_pollset* pollset : pollsets_) {
557
+ grpc_pollset_set_del_pollset(config_fetcher_->interested_parties(),
558
+ pollset);
878
559
  }
879
560
  }
880
- finish_start_new_rpc(server, elem, server->unregistered_request_matcher,
881
- GRPC_SRM_PAYLOAD_NONE);
882
- }
883
-
884
- int num_listeners(grpc_server* server) {
885
- listener* l;
886
- int n = 0;
887
- for (l = server->listeners; l; l = l->next) {
888
- n++;
561
+ for (size_t i = 0; i < cqs_.size(); i++) {
562
+ GRPC_CQ_INTERNAL_UNREF(cqs_[i], "server");
889
563
  }
890
- return n;
891
- }
892
-
893
- void done_shutdown_event(void* server, grpc_cq_completion* /*completion*/) {
894
- server_unref(static_cast<grpc_server*>(server));
895
564
  }
896
565
 
897
- int num_channels(grpc_server* server) {
898
- channel_data* chand;
899
- int n = 0;
900
- for (chand = server->root_channel_data.next;
901
- chand != &server->root_channel_data; chand = chand->next) {
902
- n++;
566
+ void Server::AddListener(OrphanablePtr<ListenerInterface> listener) {
567
+ channelz::ListenSocketNode* listen_socket_node =
568
+ listener->channelz_listen_socket_node();
569
+ if (listen_socket_node != nullptr && channelz_node_ != nullptr) {
570
+ channelz_node_->AddChildListenSocket(listen_socket_node->Ref());
903
571
  }
904
- return n;
572
+ listeners_.emplace_back(std::move(listener));
905
573
  }
906
574
 
907
- void kill_pending_work_locked(grpc_server* server, grpc_error* error) {
908
- if (server->started) {
909
- server->unregistered_request_matcher->KillRequests(GRPC_ERROR_REF(error));
910
- server->unregistered_request_matcher->ZombifyPending();
911
- for (registered_method* rm = server->registered_methods; rm;
912
- rm = rm->next) {
913
- rm->matcher->KillRequests(GRPC_ERROR_REF(error));
914
- rm->matcher->ZombifyPending();
575
+ void Server::Start() {
576
+ started_ = true;
577
+ for (grpc_completion_queue* cq : cqs_) {
578
+ if (grpc_cq_can_listen(cq)) {
579
+ pollsets_.push_back(grpc_cq_pollset(cq));
915
580
  }
916
581
  }
917
- GRPC_ERROR_UNREF(error);
918
- }
919
-
920
- void maybe_finish_shutdown(grpc_server* server) {
921
- size_t i;
922
- if (!gpr_atm_acq_load(&server->shutdown_flag) || server->shutdown_published) {
923
- return;
582
+ if (unregistered_request_matcher_ == nullptr) {
583
+ unregistered_request_matcher_ = absl::make_unique<RealRequestMatcher>(this);
924
584
  }
925
-
926
- gpr_mu_lock(&server->mu_call);
927
- kill_pending_work_locked(
928
- server, GRPC_ERROR_CREATE_FROM_STATIC_STRING("Server Shutdown"));
929
- gpr_mu_unlock(&server->mu_call);
930
-
931
- if (server->root_channel_data.next != &server->root_channel_data ||
932
- server->listeners_destroyed < num_listeners(server)) {
933
- if (gpr_time_cmp(gpr_time_sub(gpr_now(GPR_CLOCK_REALTIME),
934
- server->last_shutdown_message_time),
935
- gpr_time_from_seconds(1, GPR_TIMESPAN)) >= 0) {
936
- server->last_shutdown_message_time = gpr_now(GPR_CLOCK_REALTIME);
937
- gpr_log(GPR_DEBUG,
938
- "Waiting for %d channels and %d/%d listeners to be destroyed"
939
- " before shutting down server",
940
- num_channels(server),
941
- num_listeners(server) - server->listeners_destroyed,
942
- num_listeners(server));
585
+ for (std::unique_ptr<RegisteredMethod>& rm : registered_methods_) {
586
+ if (rm->matcher == nullptr) {
587
+ rm->matcher = absl::make_unique<RealRequestMatcher>(this);
588
+ }
589
+ }
590
+ {
591
+ MutexLock lock(&mu_global_);
592
+ starting_ = true;
593
+ }
594
+ // Register the interested parties from the config fetcher to the cq pollsets
595
+ // before starting listeners so that config fetcher is being polled when the
596
+ // listeners start watch the fetcher.
597
+ if (config_fetcher_ != nullptr &&
598
+ config_fetcher_->interested_parties() != nullptr) {
599
+ for (grpc_pollset* pollset : pollsets_) {
600
+ grpc_pollset_set_add_pollset(config_fetcher_->interested_parties(),
601
+ pollset);
943
602
  }
944
- return;
945
603
  }
946
- server->shutdown_published = 1;
947
- for (i = 0; i < server->num_shutdown_tags; i++) {
948
- server_ref(server);
949
- grpc_cq_end_op(server->shutdown_tags[i].cq, server->shutdown_tags[i].tag,
950
- GRPC_ERROR_NONE, done_shutdown_event, server,
951
- &server->shutdown_tags[i].completion);
604
+ for (auto& listener : listeners_) {
605
+ listener.listener->Start(this, &pollsets_);
952
606
  }
607
+ MutexLock lock(&mu_global_);
608
+ starting_ = false;
609
+ starting_cv_.Signal();
953
610
  }
954
611
 
955
- void server_on_recv_initial_metadata(void* ptr, grpc_error* error) {
956
- grpc_call_element* elem = static_cast<grpc_call_element*>(ptr);
957
- call_data* calld = static_cast<call_data*>(elem->call_data);
958
- grpc_millis op_deadline;
959
-
960
- if (error == GRPC_ERROR_NONE) {
961
- GPR_DEBUG_ASSERT(calld->recv_initial_metadata->idx.named.path != nullptr);
962
- GPR_DEBUG_ASSERT(calld->recv_initial_metadata->idx.named.authority !=
963
- nullptr);
964
- calld->path = grpc_slice_ref_internal(
965
- GRPC_MDVALUE(calld->recv_initial_metadata->idx.named.path->md));
966
- calld->host = grpc_slice_ref_internal(
967
- GRPC_MDVALUE(calld->recv_initial_metadata->idx.named.authority->md));
968
- calld->path_set = true;
969
- calld->host_set = true;
970
- grpc_metadata_batch_remove(calld->recv_initial_metadata, GRPC_BATCH_PATH);
971
- grpc_metadata_batch_remove(calld->recv_initial_metadata,
972
- GRPC_BATCH_AUTHORITY);
973
- } else {
974
- GRPC_ERROR_REF(error);
612
+ grpc_error_handle Server::SetupTransport(
613
+ grpc_transport* transport, grpc_pollset* accepting_pollset,
614
+ const grpc_channel_args* args,
615
+ const RefCountedPtr<grpc_core::channelz::SocketNode>& socket_node,
616
+ grpc_resource_user* resource_user) {
617
+ // Create channel.
618
+ grpc_error_handle error = GRPC_ERROR_NONE;
619
+ grpc_channel* channel = grpc_channel_create(
620
+ nullptr, args, GRPC_SERVER_CHANNEL, transport, resource_user, &error);
621
+ if (channel == nullptr) {
622
+ return error;
975
623
  }
976
- op_deadline = calld->recv_initial_metadata->deadline;
977
- if (op_deadline != GRPC_MILLIS_INF_FUTURE) {
978
- calld->deadline = op_deadline;
624
+ ChannelData* chand = static_cast<ChannelData*>(
625
+ grpc_channel_stack_element(grpc_channel_get_channel_stack(channel), 0)
626
+ ->channel_data);
627
+ // Set up CQs.
628
+ size_t cq_idx;
629
+ for (cq_idx = 0; cq_idx < cqs_.size(); cq_idx++) {
630
+ if (grpc_cq_pollset(cqs_[cq_idx]) == accepting_pollset) break;
979
631
  }
980
- if (calld->host_set && calld->path_set) {
981
- /* do nothing */
982
- } else {
983
- /* Pass the error reference to calld->recv_initial_metadata_error */
984
- grpc_error* src_error = error;
985
- error = GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
986
- "Missing :authority or :path", &src_error, 1);
987
- GRPC_ERROR_UNREF(src_error);
988
- calld->recv_initial_metadata_error = GRPC_ERROR_REF(error);
989
- }
990
- grpc_closure* closure = calld->on_done_recv_initial_metadata;
991
- calld->on_done_recv_initial_metadata = nullptr;
992
- if (calld->seen_recv_trailing_metadata_ready) {
993
- GRPC_CALL_COMBINER_START(calld->call_combiner,
994
- &calld->recv_trailing_metadata_ready,
995
- calld->recv_trailing_metadata_error,
996
- "continue server_recv_trailing_metadata_ready");
997
- }
998
- grpc_core::Closure::Run(DEBUG_LOCATION, closure, error);
999
- }
1000
-
1001
- void server_recv_trailing_metadata_ready(void* user_data, grpc_error* error) {
1002
- grpc_call_element* elem = static_cast<grpc_call_element*>(user_data);
1003
- call_data* calld = static_cast<call_data*>(elem->call_data);
1004
- if (calld->on_done_recv_initial_metadata != nullptr) {
1005
- calld->recv_trailing_metadata_error = GRPC_ERROR_REF(error);
1006
- calld->seen_recv_trailing_metadata_ready = true;
1007
- GRPC_CLOSURE_INIT(&calld->recv_trailing_metadata_ready,
1008
- server_recv_trailing_metadata_ready, elem,
1009
- grpc_schedule_on_exec_ctx);
1010
- GRPC_CALL_COMBINER_STOP(calld->call_combiner,
1011
- "deferring server_recv_trailing_metadata_ready "
1012
- "until after server_on_recv_initial_metadata");
1013
- return;
632
+ if (cq_idx == cqs_.size()) {
633
+ // Completion queue not found. Pick a random one to publish new calls to.
634
+ cq_idx = static_cast<size_t>(rand()) % cqs_.size();
1014
635
  }
1015
- error =
1016
- grpc_error_add_child(GRPC_ERROR_REF(error),
1017
- GRPC_ERROR_REF(calld->recv_initial_metadata_error));
1018
- grpc_core::Closure::Run(DEBUG_LOCATION,
1019
- calld->original_recv_trailing_metadata_ready, error);
636
+ // Set up channelz node.
637
+ intptr_t channelz_socket_uuid = 0;
638
+ if (socket_node != nullptr) {
639
+ channelz_socket_uuid = socket_node->uuid();
640
+ channelz_node_->AddChildSocket(socket_node);
641
+ }
642
+ // Initialize chand.
643
+ chand->InitTransport(Ref(), channel, cq_idx, transport, channelz_socket_uuid);
644
+ return GRPC_ERROR_NONE;
1020
645
  }
1021
646
 
1022
- void server_mutate_op(grpc_call_element* elem,
1023
- grpc_transport_stream_op_batch* op) {
1024
- call_data* calld = static_cast<call_data*>(elem->call_data);
647
+ bool Server::HasOpenConnections() {
648
+ MutexLock lock(&mu_global_);
649
+ return !channels_.empty();
650
+ }
1025
651
 
1026
- if (op->recv_initial_metadata) {
1027
- GPR_ASSERT(op->payload->recv_initial_metadata.recv_flags == nullptr);
1028
- calld->recv_initial_metadata =
1029
- op->payload->recv_initial_metadata.recv_initial_metadata;
1030
- calld->on_done_recv_initial_metadata =
1031
- op->payload->recv_initial_metadata.recv_initial_metadata_ready;
1032
- op->payload->recv_initial_metadata.recv_initial_metadata_ready =
1033
- &calld->server_on_recv_initial_metadata;
1034
- op->payload->recv_initial_metadata.recv_flags =
1035
- &calld->recv_initial_metadata_flags;
1036
- }
1037
- if (op->recv_trailing_metadata) {
1038
- calld->original_recv_trailing_metadata_ready =
1039
- op->payload->recv_trailing_metadata.recv_trailing_metadata_ready;
1040
- op->payload->recv_trailing_metadata.recv_trailing_metadata_ready =
1041
- &calld->recv_trailing_metadata_ready;
1042
- }
652
+ void Server::SetRegisteredMethodAllocator(
653
+ grpc_completion_queue* cq, void* method_tag,
654
+ std::function<RegisteredCallAllocation()> allocator) {
655
+ RegisteredMethod* rm = static_cast<RegisteredMethod*>(method_tag);
656
+ rm->matcher = absl::make_unique<AllocatingRequestMatcherRegistered>(
657
+ this, cq, rm, std::move(allocator));
1043
658
  }
1044
659
 
1045
- void server_start_transport_stream_op_batch(
1046
- grpc_call_element* elem, grpc_transport_stream_op_batch* op) {
1047
- server_mutate_op(elem, op);
1048
- grpc_call_next_op(elem, op);
660
+ void Server::SetBatchMethodAllocator(
661
+ grpc_completion_queue* cq, std::function<BatchCallAllocation()> allocator) {
662
+ GPR_DEBUG_ASSERT(unregistered_request_matcher_ == nullptr);
663
+ unregistered_request_matcher_ =
664
+ absl::make_unique<AllocatingRequestMatcherBatch>(this, cq,
665
+ std::move(allocator));
1049
666
  }
1050
667
 
1051
- void got_initial_metadata(void* ptr, grpc_error* error) {
1052
- grpc_call_element* elem = static_cast<grpc_call_element*>(ptr);
1053
- call_data* calld = static_cast<call_data*>(elem->call_data);
1054
- if (error == GRPC_ERROR_NONE) {
1055
- start_new_rpc(elem);
1056
- } else {
1057
- if (gpr_atm_full_cas(&calld->state, NOT_STARTED, ZOMBIED)) {
1058
- GRPC_CLOSURE_INIT(&calld->kill_zombie_closure, kill_zombie, elem,
1059
- grpc_schedule_on_exec_ctx);
1060
- grpc_core::ExecCtx::Run(DEBUG_LOCATION, &calld->kill_zombie_closure,
1061
- GRPC_ERROR_NONE);
1062
- } else if (gpr_atm_full_cas(&calld->state, PENDING, ZOMBIED)) {
1063
- /* zombied call will be destroyed when it's removed from the pending
1064
- queue... later */
1065
- }
668
+ void Server::RegisterCompletionQueue(grpc_completion_queue* cq) {
669
+ for (grpc_completion_queue* queue : cqs_) {
670
+ if (queue == cq) return;
1066
671
  }
672
+ GRPC_CQ_INTERNAL_REF(cq, "server");
673
+ cqs_.push_back(cq);
1067
674
  }
1068
675
 
1069
- void accept_stream(void* cd, grpc_transport* /*transport*/,
1070
- const void* transport_server_data) {
1071
- channel_data* chand = static_cast<channel_data*>(cd);
1072
- /* create a call */
1073
- grpc_call_create_args args;
1074
- args.channel = chand->channel;
1075
- args.server = chand->server;
1076
- args.parent = nullptr;
1077
- args.propagation_mask = 0;
1078
- args.cq = nullptr;
1079
- args.pollset_set_alternative = nullptr;
1080
- args.server_transport_data = transport_server_data;
1081
- args.add_initial_metadata = nullptr;
1082
- args.add_initial_metadata_count = 0;
1083
- args.send_deadline = GRPC_MILLIS_INF_FUTURE;
1084
- grpc_call* call;
1085
- grpc_error* error = grpc_call_create(&args, &call);
1086
- grpc_call_element* elem =
1087
- grpc_call_stack_element(grpc_call_get_call_stack(call), 0);
1088
- if (error != GRPC_ERROR_NONE) {
1089
- got_initial_metadata(elem, error);
1090
- GRPC_ERROR_UNREF(error);
1091
- return;
1092
- }
1093
- call_data* calld = static_cast<call_data*>(elem->call_data);
1094
- grpc_op op;
1095
- op.op = GRPC_OP_RECV_INITIAL_METADATA;
1096
- op.flags = 0;
1097
- op.reserved = nullptr;
1098
- op.data.recv_initial_metadata.recv_initial_metadata =
1099
- &calld->initial_metadata;
1100
- GRPC_CLOSURE_INIT(&calld->got_initial_metadata, got_initial_metadata, elem,
1101
- grpc_schedule_on_exec_ctx);
1102
- grpc_call_start_batch_and_execute(call, &op, 1, &calld->got_initial_metadata);
676
+ namespace {
677
+
678
+ bool streq(const std::string& a, const char* b) {
679
+ return (a.empty() && b == nullptr) ||
680
+ ((b != nullptr) && !strcmp(a.c_str(), b));
1103
681
  }
1104
682
 
1105
- grpc_error* server_init_call_elem(grpc_call_element* elem,
1106
- const grpc_call_element_args* args) {
1107
- channel_data* chand = static_cast<channel_data*>(elem->channel_data);
1108
- server_ref(chand->server);
1109
- new (elem->call_data) call_data(elem, *args);
1110
- return GRPC_ERROR_NONE;
683
+ } // namespace
684
+
685
+ Server::RegisteredMethod* Server::RegisterMethod(
686
+ const char* method, const char* host,
687
+ grpc_server_register_method_payload_handling payload_handling,
688
+ uint32_t flags) {
689
+ if (!method) {
690
+ gpr_log(GPR_ERROR,
691
+ "grpc_server_register_method method string cannot be NULL");
692
+ return nullptr;
693
+ }
694
+ for (std::unique_ptr<RegisteredMethod>& m : registered_methods_) {
695
+ if (streq(m->method, method) && streq(m->host, host)) {
696
+ gpr_log(GPR_ERROR, "duplicate registration for %s@%s", method,
697
+ host ? host : "*");
698
+ return nullptr;
699
+ }
700
+ }
701
+ if ((flags & ~GRPC_INITIAL_METADATA_USED_MASK) != 0) {
702
+ gpr_log(GPR_ERROR, "grpc_server_register_method invalid flags 0x%08x",
703
+ flags);
704
+ return nullptr;
705
+ }
706
+ registered_methods_.emplace_back(absl::make_unique<RegisteredMethod>(
707
+ method, host, payload_handling, flags));
708
+ return registered_methods_.back().get();
1111
709
  }
1112
710
 
1113
- void server_destroy_call_elem(grpc_call_element* elem,
1114
- const grpc_call_final_info* /*final_info*/,
1115
- grpc_closure* /*ignored*/) {
1116
- call_data* calld = static_cast<call_data*>(elem->call_data);
1117
- calld->~call_data();
1118
- channel_data* chand = static_cast<channel_data*>(elem->channel_data);
1119
- server_unref(chand->server);
711
+ void Server::DoneRequestEvent(void* req, grpc_cq_completion* /*c*/) {
712
+ delete static_cast<RequestedCall*>(req);
1120
713
  }
1121
714
 
1122
- grpc_error* server_init_channel_elem(grpc_channel_element* elem,
1123
- grpc_channel_element_args* args) {
1124
- channel_data* chand = static_cast<channel_data*>(elem->channel_data);
1125
- GPR_ASSERT(args->is_first);
1126
- GPR_ASSERT(!args->is_last);
1127
- chand->server = nullptr;
1128
- chand->channel = nullptr;
1129
- chand->next = chand->prev = chand;
1130
- chand->registered_methods = nullptr;
1131
- return GRPC_ERROR_NONE;
715
+ void Server::FailCall(size_t cq_idx, RequestedCall* rc,
716
+ grpc_error_handle error) {
717
+ *rc->call = nullptr;
718
+ rc->initial_metadata->count = 0;
719
+ GPR_ASSERT(error != GRPC_ERROR_NONE);
720
+ grpc_cq_end_op(cqs_[cq_idx], rc->tag, error, DoneRequestEvent, rc,
721
+ &rc->completion);
1132
722
  }
1133
723
 
1134
- void server_destroy_channel_elem(grpc_channel_element* elem) {
1135
- size_t i;
1136
- channel_data* chand = static_cast<channel_data*>(elem->channel_data);
1137
- if (chand->registered_methods) {
1138
- for (i = 0; i < chand->registered_method_slots; i++) {
1139
- grpc_slice_unref_internal(chand->registered_methods[i].method);
1140
- GPR_DEBUG_ASSERT(chand->registered_methods[i].method.refcount ==
1141
- &grpc_core::kNoopRefcount ||
1142
- chand->registered_methods[i].method.refcount == nullptr);
1143
- if (chand->registered_methods[i].has_host) {
1144
- grpc_slice_unref_internal(chand->registered_methods[i].host);
1145
- GPR_DEBUG_ASSERT(chand->registered_methods[i].host.refcount ==
1146
- &grpc_core::kNoopRefcount ||
1147
- chand->registered_methods[i].host.refcount == nullptr);
1148
- }
724
+ // Before calling MaybeFinishShutdown(), we must hold mu_global_ and not
725
+ // hold mu_call_.
726
+ void Server::MaybeFinishShutdown() {
727
+ if (!ShutdownReady() || shutdown_published_) {
728
+ return;
729
+ }
730
+ {
731
+ MutexLock lock(&mu_call_);
732
+ KillPendingWorkLocked(
733
+ GRPC_ERROR_CREATE_FROM_STATIC_STRING("Server Shutdown"));
734
+ }
735
+ if (!channels_.empty() || listeners_destroyed_ < listeners_.size()) {
736
+ if (gpr_time_cmp(gpr_time_sub(gpr_now(GPR_CLOCK_REALTIME),
737
+ last_shutdown_message_time_),
738
+ gpr_time_from_seconds(1, GPR_TIMESPAN)) >= 0) {
739
+ last_shutdown_message_time_ = gpr_now(GPR_CLOCK_REALTIME);
740
+ gpr_log(GPR_DEBUG,
741
+ "Waiting for %" PRIuPTR " channels and %" PRIuPTR "/%" PRIuPTR
742
+ " listeners to be destroyed before shutting down server",
743
+ channels_.size(), listeners_.size() - listeners_destroyed_,
744
+ listeners_.size());
1149
745
  }
1150
- gpr_free(chand->registered_methods);
746
+ return;
747
+ }
748
+ shutdown_published_ = true;
749
+ for (auto& shutdown_tag : shutdown_tags_) {
750
+ Ref().release();
751
+ grpc_cq_end_op(shutdown_tag.cq, shutdown_tag.tag, GRPC_ERROR_NONE,
752
+ DoneShutdownEvent, this, &shutdown_tag.completion);
1151
753
  }
1152
- if (chand->server) {
1153
- if (chand->server->channelz_server != nullptr &&
1154
- chand->channelz_socket_uuid != 0) {
1155
- chand->server->channelz_server->RemoveChildSocket(
1156
- chand->channelz_socket_uuid);
754
+ }
755
+
756
+ void Server::KillPendingWorkLocked(grpc_error_handle error) {
757
+ if (started_) {
758
+ unregistered_request_matcher_->KillRequests(GRPC_ERROR_REF(error));
759
+ unregistered_request_matcher_->ZombifyPending();
760
+ for (std::unique_ptr<RegisteredMethod>& rm : registered_methods_) {
761
+ rm->matcher->KillRequests(GRPC_ERROR_REF(error));
762
+ rm->matcher->ZombifyPending();
1157
763
  }
1158
- gpr_mu_lock(&chand->server->mu_global);
1159
- chand->next->prev = chand->prev;
1160
- chand->prev->next = chand->next;
1161
- chand->next = chand->prev = chand;
1162
- maybe_finish_shutdown(chand->server);
1163
- gpr_mu_unlock(&chand->server->mu_global);
1164
- server_unref(chand->server);
1165
764
  }
765
+ GRPC_ERROR_UNREF(error);
1166
766
  }
1167
767
 
1168
- void register_completion_queue(grpc_server* server, grpc_completion_queue* cq,
1169
- void* reserved) {
1170
- size_t i, n;
1171
- GPR_ASSERT(!reserved);
1172
- for (i = 0; i < server->cq_count; i++) {
1173
- if (server->cqs[i] == cq) return;
768
+ std::vector<grpc_channel*> Server::GetChannelsLocked() const {
769
+ std::vector<grpc_channel*> channels;
770
+ channels.reserve(channels_.size());
771
+ for (const ChannelData* chand : channels_) {
772
+ channels.push_back(chand->channel());
773
+ GRPC_CHANNEL_INTERNAL_REF(chand->channel(), "broadcast");
1174
774
  }
775
+ return channels;
776
+ }
1175
777
 
1176
- GRPC_CQ_INTERNAL_REF(cq, "server");
1177
- n = server->cq_count++;
1178
- server->cqs = static_cast<grpc_completion_queue**>(gpr_realloc(
1179
- server->cqs, server->cq_count * sizeof(grpc_completion_queue*)));
1180
- server->cqs[n] = cq;
778
+ void Server::ListenerDestroyDone(void* arg, grpc_error_handle /*error*/) {
779
+ Server* server = static_cast<Server*>(arg);
780
+ MutexLock lock(&server->mu_global_);
781
+ server->listeners_destroyed_++;
782
+ server->MaybeFinishShutdown();
1181
783
  }
1182
784
 
1183
- bool streq(const std::string& a, const char* b) {
1184
- return (a.empty() && b == nullptr) ||
1185
- ((b != nullptr) && !strcmp(a.c_str(), b));
785
+ namespace {
786
+
787
+ void DonePublishedShutdown(void* /*done_arg*/, grpc_cq_completion* storage) {
788
+ delete storage;
1186
789
  }
1187
790
 
1188
- class ConnectivityWatcher
1189
- : public grpc_core::AsyncConnectivityStateWatcherInterface {
1190
- public:
1191
- explicit ConnectivityWatcher(channel_data* chand) : chand_(chand) {
1192
- GRPC_CHANNEL_INTERNAL_REF(chand_->channel, "connectivity");
1193
- }
791
+ } // namespace
1194
792
 
1195
- ~ConnectivityWatcher() {
1196
- GRPC_CHANNEL_INTERNAL_UNREF(chand_->channel, "connectivity");
793
+ // - Kills all pending requests-for-incoming-RPC-calls (i.e., the requests made
794
+ // via grpc_server_request_call() and grpc_server_request_registered_call()
795
+ // will now be cancelled). See KillPendingWorkLocked().
796
+ //
797
+ // - Shuts down the listeners (i.e., the server will no longer listen on the
798
+ // port for new incoming channels).
799
+ //
800
+ // - Iterates through all channels on the server and sends shutdown msg (see
801
+ // ChannelBroadcaster::BroadcastShutdown() for details) to the clients via
802
+ // the transport layer. The transport layer then guarantees the following:
803
+ // -- Sends shutdown to the client (e.g., HTTP2 transport sends GOAWAY).
804
+ // -- If the server has outstanding calls that are in the process, the
805
+ // connection is NOT closed until the server is done with all those calls.
806
+ // -- Once there are no more calls in progress, the channel is closed.
807
+ void Server::ShutdownAndNotify(grpc_completion_queue* cq, void* tag) {
808
+ ChannelBroadcaster broadcaster;
809
+ {
810
+ // Wait for startup to be finished. Locks mu_global.
811
+ MutexLock lock(&mu_global_);
812
+ while (starting_) {
813
+ starting_cv_.Wait(&mu_global_);
814
+ }
815
+ // Stay locked, and gather up some stuff to do.
816
+ GPR_ASSERT(grpc_cq_begin_op(cq, tag));
817
+ if (shutdown_published_) {
818
+ grpc_cq_end_op(cq, tag, GRPC_ERROR_NONE, DonePublishedShutdown, nullptr,
819
+ new grpc_cq_completion);
820
+ return;
821
+ }
822
+ shutdown_tags_.emplace_back(tag, cq);
823
+ if (ShutdownCalled()) {
824
+ return;
825
+ }
826
+ last_shutdown_message_time_ = gpr_now(GPR_CLOCK_REALTIME);
827
+ broadcaster.FillChannelsLocked(GetChannelsLocked());
828
+ // Collect all unregistered then registered calls.
829
+ {
830
+ MutexLock lock(&mu_call_);
831
+ KillPendingWorkLocked(
832
+ GRPC_ERROR_CREATE_FROM_STATIC_STRING("Server Shutdown"));
833
+ }
834
+ ShutdownUnrefOnShutdownCall();
835
+ }
836
+ // Shutdown listeners.
837
+ for (auto& listener : listeners_) {
838
+ channelz::ListenSocketNode* channelz_listen_socket_node =
839
+ listener.listener->channelz_listen_socket_node();
840
+ if (channelz_node_ != nullptr && channelz_listen_socket_node != nullptr) {
841
+ channelz_node_->RemoveChildListenSocket(
842
+ channelz_listen_socket_node->uuid());
843
+ }
844
+ GRPC_CLOSURE_INIT(&listener.destroy_done, ListenerDestroyDone, this,
845
+ grpc_schedule_on_exec_ctx);
846
+ listener.listener->SetOnDestroyDone(&listener.destroy_done);
847
+ listener.listener.reset();
1197
848
  }
849
+ broadcaster.BroadcastShutdown(/*send_goaway=*/true, GRPC_ERROR_NONE);
850
+ }
1198
851
 
1199
- private:
1200
- void OnConnectivityStateChange(grpc_connectivity_state new_state) override {
1201
- // Don't do anything until we are being shut down.
1202
- if (new_state != GRPC_CHANNEL_SHUTDOWN) return;
1203
- // Shut down channel.
1204
- grpc_server* server = chand_->server;
1205
- gpr_mu_lock(&server->mu_global);
1206
- destroy_channel(chand_);
1207
- gpr_mu_unlock(&server->mu_global);
852
+ void Server::CancelAllCalls() {
853
+ ChannelBroadcaster broadcaster;
854
+ {
855
+ MutexLock lock(&mu_global_);
856
+ broadcaster.FillChannelsLocked(GetChannelsLocked());
1208
857
  }
858
+ broadcaster.BroadcastShutdown(
859
+ /*send_goaway=*/false,
860
+ GRPC_ERROR_CREATE_FROM_STATIC_STRING("Cancelling all calls"));
861
+ }
1209
862
 
1210
- channel_data* chand_;
1211
- };
863
+ void Server::Orphan() {
864
+ {
865
+ MutexLock lock(&mu_global_);
866
+ GPR_ASSERT(ShutdownCalled() || listeners_.empty());
867
+ GPR_ASSERT(listeners_destroyed_ == listeners_.size());
868
+ }
869
+ if (default_resource_user_ != nullptr) {
870
+ grpc_resource_quota_unref(grpc_resource_user_quota(default_resource_user_));
871
+ grpc_resource_user_shutdown(default_resource_user_);
872
+ grpc_resource_user_unref(default_resource_user_);
873
+ }
874
+ Unref();
875
+ }
1212
876
 
1213
- void done_published_shutdown(void* done_arg, grpc_cq_completion* storage) {
1214
- (void)done_arg;
1215
- gpr_free(storage);
877
+ grpc_call_error Server::ValidateServerRequest(
878
+ grpc_completion_queue* cq_for_notification, void* tag,
879
+ grpc_byte_buffer** optional_payload, RegisteredMethod* rm) {
880
+ if ((rm == nullptr && optional_payload != nullptr) ||
881
+ ((rm != nullptr) && ((optional_payload == nullptr) !=
882
+ (rm->payload_handling == GRPC_SRM_PAYLOAD_NONE)))) {
883
+ return GRPC_CALL_ERROR_PAYLOAD_TYPE_MISMATCH;
884
+ }
885
+ if (!grpc_cq_begin_op(cq_for_notification, tag)) {
886
+ return GRPC_CALL_ERROR_COMPLETION_QUEUE_SHUTDOWN;
887
+ }
888
+ return GRPC_CALL_OK;
1216
889
  }
1217
890
 
1218
- void listener_destroy_done(void* s, grpc_error* /*error*/) {
1219
- grpc_server* server = static_cast<grpc_server*>(s);
1220
- gpr_mu_lock(&server->mu_global);
1221
- server->listeners_destroyed++;
1222
- maybe_finish_shutdown(server);
1223
- gpr_mu_unlock(&server->mu_global);
891
+ grpc_call_error Server::ValidateServerRequestAndCq(
892
+ size_t* cq_idx, grpc_completion_queue* cq_for_notification, void* tag,
893
+ grpc_byte_buffer** optional_payload, RegisteredMethod* rm) {
894
+ size_t idx;
895
+ for (idx = 0; idx < cqs_.size(); idx++) {
896
+ if (cqs_[idx] == cq_for_notification) {
897
+ break;
898
+ }
899
+ }
900
+ if (idx == cqs_.size()) {
901
+ return GRPC_CALL_ERROR_NOT_SERVER_COMPLETION_QUEUE;
902
+ }
903
+ grpc_call_error error =
904
+ ValidateServerRequest(cq_for_notification, tag, optional_payload, rm);
905
+ if (error != GRPC_CALL_OK) {
906
+ return error;
907
+ }
908
+ *cq_idx = idx;
909
+ return GRPC_CALL_OK;
1224
910
  }
1225
911
 
1226
- grpc_call_error queue_call_request(grpc_server* server, size_t cq_idx,
1227
- requested_call* rc) {
1228
- if (gpr_atm_acq_load(&server->shutdown_flag)) {
1229
- fail_call(server, cq_idx, rc,
1230
- GRPC_ERROR_CREATE_FROM_STATIC_STRING("Server Shutdown"));
912
+ grpc_call_error Server::QueueRequestedCall(size_t cq_idx, RequestedCall* rc) {
913
+ if (ShutdownCalled()) {
914
+ FailCall(cq_idx, rc,
915
+ GRPC_ERROR_CREATE_FROM_STATIC_STRING("Server Shutdown"));
1231
916
  return GRPC_CALL_OK;
1232
917
  }
1233
918
  RequestMatcherInterface* rm;
1234
919
  switch (rc->type) {
1235
- case BATCH_CALL:
1236
- rm = server->unregistered_request_matcher;
920
+ case RequestedCall::Type::BATCH_CALL:
921
+ rm = unregistered_request_matcher_.get();
1237
922
  break;
1238
- case REGISTERED_CALL:
923
+ case RequestedCall::Type::REGISTERED_CALL:
1239
924
  rm = rc->data.registered.method->matcher.get();
1240
925
  break;
1241
926
  }
@@ -1243,262 +928,135 @@ grpc_call_error queue_call_request(grpc_server* server, size_t cq_idx,
1243
928
  return GRPC_CALL_OK;
1244
929
  }
1245
930
 
1246
- void fail_call(grpc_server* server, size_t cq_idx, requested_call* rc,
1247
- grpc_error* error) {
1248
- *rc->call = nullptr;
1249
- rc->initial_metadata->count = 0;
1250
- GPR_ASSERT(error != GRPC_ERROR_NONE);
1251
-
1252
- grpc_cq_end_op(server->cqs[cq_idx], rc->tag, error, done_request_event, rc,
1253
- &rc->completion);
1254
- }
1255
- } // namespace
1256
-
1257
- namespace grpc_core {
1258
-
1259
- void SetServerRegisteredMethodAllocator(
1260
- grpc_server* server, grpc_completion_queue* cq, void* method_tag,
1261
- std::function<ServerRegisteredCallAllocation()> allocator) {
1262
- registered_method* rm = static_cast<registered_method*>(method_tag);
1263
- rm->matcher.reset(new AllocatingRequestMatcherRegistered(
1264
- server, cq, rm, std::move(allocator)));
1265
- }
1266
-
1267
- void SetServerBatchMethodAllocator(
1268
- grpc_server* server, grpc_completion_queue* cq,
1269
- std::function<ServerBatchCallAllocation()> allocator) {
1270
- GPR_DEBUG_ASSERT(server->unregistered_request_matcher == nullptr);
1271
- server->unregistered_request_matcher =
1272
- new AllocatingRequestMatcherBatch(server, cq, std::move(allocator));
931
+ grpc_call_error Server::RequestCall(grpc_call** call,
932
+ grpc_call_details* details,
933
+ grpc_metadata_array* request_metadata,
934
+ grpc_completion_queue* cq_bound_to_call,
935
+ grpc_completion_queue* cq_for_notification,
936
+ void* tag) {
937
+ size_t cq_idx;
938
+ grpc_call_error error = ValidateServerRequestAndCq(
939
+ &cq_idx, cq_for_notification, tag, nullptr, nullptr);
940
+ if (error != GRPC_CALL_OK) {
941
+ return error;
942
+ }
943
+ RequestedCall* rc =
944
+ new RequestedCall(tag, cq_bound_to_call, call, request_metadata, details);
945
+ return QueueRequestedCall(cq_idx, rc);
1273
946
  }
1274
947
 
1275
- }; // namespace grpc_core
1276
-
1277
- const grpc_channel_filter grpc_server_top_filter = {
1278
- server_start_transport_stream_op_batch,
1279
- grpc_channel_next_op,
1280
- sizeof(call_data),
1281
- server_init_call_elem,
1282
- grpc_call_stack_ignore_set_pollset_or_pollset_set,
1283
- server_destroy_call_elem,
1284
- sizeof(channel_data),
1285
- server_init_channel_elem,
1286
- server_destroy_channel_elem,
1287
- grpc_channel_next_get_info,
1288
- "server",
1289
- };
1290
-
1291
- void grpc_server_register_completion_queue(grpc_server* server,
1292
- grpc_completion_queue* cq,
1293
- void* reserved) {
1294
- GRPC_API_TRACE(
1295
- "grpc_server_register_completion_queue(server=%p, cq=%p, reserved=%p)", 3,
1296
- (server, cq, reserved));
1297
-
1298
- auto cq_type = grpc_get_cq_completion_type(cq);
1299
- if (cq_type != GRPC_CQ_NEXT && cq_type != GRPC_CQ_CALLBACK) {
1300
- gpr_log(GPR_INFO,
1301
- "Completion queue of type %d is being registered as a "
1302
- "server-completion-queue",
1303
- static_cast<int>(cq_type));
1304
- /* Ideally we should log an error and abort but ruby-wrapped-language API
1305
- calls grpc_completion_queue_pluck() on server completion queues */
948
+ grpc_call_error Server::RequestRegisteredCall(
949
+ RegisteredMethod* rm, grpc_call** call, gpr_timespec* deadline,
950
+ grpc_metadata_array* request_metadata, grpc_byte_buffer** optional_payload,
951
+ grpc_completion_queue* cq_bound_to_call,
952
+ grpc_completion_queue* cq_for_notification, void* tag_new) {
953
+ size_t cq_idx;
954
+ grpc_call_error error = ValidateServerRequestAndCq(
955
+ &cq_idx, cq_for_notification, tag_new, optional_payload, rm);
956
+ if (error != GRPC_CALL_OK) {
957
+ return error;
1306
958
  }
1307
-
1308
- register_completion_queue(server, cq, reserved);
959
+ RequestedCall* rc =
960
+ new RequestedCall(tag_new, cq_bound_to_call, call, request_metadata, rm,
961
+ deadline, optional_payload);
962
+ return QueueRequestedCall(cq_idx, rc);
1309
963
  }
1310
964
 
1311
- grpc_server* grpc_server_create(const grpc_channel_args* args, void* reserved) {
1312
- grpc_core::ExecCtx exec_ctx;
1313
- GRPC_API_TRACE("grpc_server_create(%p, %p)", 2, (args, reserved));
1314
-
1315
- grpc_server* server =
1316
- static_cast<grpc_server*>(gpr_zalloc(sizeof(grpc_server)));
1317
-
1318
- gpr_mu_init(&server->mu_global);
1319
- gpr_mu_init(&server->mu_call);
1320
- gpr_cv_init(&server->starting_cv);
1321
-
1322
- /* decremented by grpc_server_destroy */
1323
- new (&server->internal_refcount) grpc_core::RefCount();
1324
- server->root_channel_data.next = server->root_channel_data.prev =
1325
- &server->root_channel_data;
1326
-
1327
- server->channel_args = grpc_channel_args_copy(args);
965
+ //
966
+ // Server::ChannelData::ConnectivityWatcher
967
+ //
1328
968
 
1329
- const grpc_arg* arg = grpc_channel_args_find(args, GRPC_ARG_ENABLE_CHANNELZ);
1330
- if (grpc_channel_arg_get_bool(arg, GRPC_ENABLE_CHANNELZ_DEFAULT)) {
1331
- arg = grpc_channel_args_find(
1332
- args, GRPC_ARG_MAX_CHANNEL_TRACE_EVENT_MEMORY_PER_NODE);
1333
- size_t channel_tracer_max_memory = grpc_channel_arg_get_integer(
1334
- arg,
1335
- {GRPC_MAX_CHANNEL_TRACE_EVENT_MEMORY_PER_NODE_DEFAULT, 0, INT_MAX});
1336
- server->channelz_server =
1337
- grpc_core::MakeRefCounted<grpc_core::channelz::ServerNode>(
1338
- server, channel_tracer_max_memory);
1339
- server->channelz_server->AddTraceEvent(
1340
- grpc_core::channelz::ChannelTrace::Severity::Info,
1341
- grpc_slice_from_static_string("Server created"));
969
+ class Server::ChannelData::ConnectivityWatcher
970
+ : public AsyncConnectivityStateWatcherInterface {
971
+ public:
972
+ explicit ConnectivityWatcher(ChannelData* chand) : chand_(chand) {
973
+ GRPC_CHANNEL_INTERNAL_REF(chand_->channel_, "connectivity");
1342
974
  }
1343
975
 
1344
- if (args != nullptr) {
1345
- grpc_resource_quota* resource_quota =
1346
- grpc_resource_quota_from_channel_args(args, false /* create */);
1347
- if (resource_quota != nullptr) {
1348
- server->default_resource_user =
1349
- grpc_resource_user_create(resource_quota, "default");
1350
- }
976
+ ~ConnectivityWatcher() override {
977
+ GRPC_CHANNEL_INTERNAL_UNREF(chand_->channel_, "connectivity");
1351
978
  }
1352
979
 
1353
- return server;
1354
- }
1355
-
1356
- void* grpc_server_register_method(
1357
- grpc_server* server, const char* method, const char* host,
1358
- grpc_server_register_method_payload_handling payload_handling,
1359
- uint32_t flags) {
1360
- registered_method* m;
1361
- GRPC_API_TRACE(
1362
- "grpc_server_register_method(server=%p, method=%s, host=%s, "
1363
- "flags=0x%08x)",
1364
- 4, (server, method, host, flags));
1365
- if (!method) {
1366
- gpr_log(GPR_ERROR,
1367
- "grpc_server_register_method method string cannot be NULL");
1368
- return nullptr;
1369
- }
1370
- for (m = server->registered_methods; m; m = m->next) {
1371
- if (streq(m->method, method) && streq(m->host, host)) {
1372
- gpr_log(GPR_ERROR, "duplicate registration for %s@%s", method,
1373
- host ? host : "*");
1374
- return nullptr;
1375
- }
1376
- }
1377
- if ((flags & ~GRPC_INITIAL_METADATA_USED_MASK) != 0) {
1378
- gpr_log(GPR_ERROR, "grpc_server_register_method invalid flags 0x%08x",
1379
- flags);
1380
- return nullptr;
980
+ private:
981
+ void OnConnectivityStateChange(grpc_connectivity_state new_state,
982
+ const absl::Status& /*status*/) override {
983
+ // Don't do anything until we are being shut down.
984
+ if (new_state != GRPC_CHANNEL_SHUTDOWN) return;
985
+ // Shut down channel.
986
+ MutexLock lock(&chand_->server_->mu_global_);
987
+ chand_->Destroy();
1381
988
  }
1382
- m = new registered_method(method, host, payload_handling, flags);
1383
- m->next = server->registered_methods;
1384
- server->registered_methods = m;
1385
- return m;
1386
- }
1387
989
 
1388
- void grpc_server_start(grpc_server* server) {
1389
- size_t i;
1390
- grpc_core::ExecCtx exec_ctx;
990
+ ChannelData* chand_;
991
+ };
1391
992
 
1392
- GRPC_API_TRACE("grpc_server_start(server=%p)", 1, (server));
993
+ //
994
+ // Server::ChannelData
995
+ //
1393
996
 
1394
- server->started = true;
1395
- server->pollset_count = 0;
1396
- server->pollsets = static_cast<grpc_pollset**>(
1397
- gpr_malloc(sizeof(grpc_pollset*) * server->cq_count));
1398
- for (i = 0; i < server->cq_count; i++) {
1399
- if (grpc_cq_can_listen(server->cqs[i])) {
1400
- server->pollsets[server->pollset_count++] =
1401
- grpc_cq_pollset(server->cqs[i]);
997
+ Server::ChannelData::~ChannelData() {
998
+ if (registered_methods_ != nullptr) {
999
+ for (const ChannelRegisteredMethod& crm : *registered_methods_) {
1000
+ grpc_slice_unref_internal(crm.method);
1001
+ GPR_DEBUG_ASSERT(crm.method.refcount == &kNoopRefcount ||
1002
+ crm.method.refcount == nullptr);
1003
+ if (crm.has_host) {
1004
+ grpc_slice_unref_internal(crm.host);
1005
+ GPR_DEBUG_ASSERT(crm.host.refcount == &kNoopRefcount ||
1006
+ crm.host.refcount == nullptr);
1007
+ }
1402
1008
  }
1009
+ registered_methods_.reset();
1403
1010
  }
1404
- if (server->unregistered_request_matcher == nullptr) {
1405
- server->unregistered_request_matcher = new RealRequestMatcher(server);
1406
- }
1407
- for (registered_method* rm = server->registered_methods; rm; rm = rm->next) {
1408
- if (rm->matcher == nullptr) {
1409
- rm->matcher.reset(new RealRequestMatcher(server));
1011
+ if (server_ != nullptr) {
1012
+ if (server_->channelz_node_ != nullptr && channelz_socket_uuid_ != 0) {
1013
+ server_->channelz_node_->RemoveChildSocket(channelz_socket_uuid_);
1014
+ }
1015
+ {
1016
+ MutexLock lock(&server_->mu_global_);
1017
+ if (list_position_.has_value()) {
1018
+ server_->channels_.erase(*list_position_);
1019
+ list_position_.reset();
1020
+ }
1021
+ server_->MaybeFinishShutdown();
1410
1022
  }
1411
1023
  }
1412
-
1413
- gpr_mu_lock(&server->mu_global);
1414
- server->starting = true;
1415
- gpr_mu_unlock(&server->mu_global);
1416
-
1417
- for (listener* l = server->listeners; l; l = l->next) {
1418
- l->start(server, l->arg, server->pollsets, server->pollset_count);
1419
- }
1420
-
1421
- gpr_mu_lock(&server->mu_global);
1422
- server->starting = false;
1423
- gpr_cv_signal(&server->starting_cv);
1424
- gpr_mu_unlock(&server->mu_global);
1425
1024
  }
1426
1025
 
1427
- void grpc_server_get_pollsets(grpc_server* server, grpc_pollset*** pollsets,
1428
- size_t* pollset_count) {
1429
- *pollset_count = server->pollset_count;
1430
- *pollsets = server->pollsets;
1431
- }
1432
-
1433
- void grpc_server_setup_transport(
1434
- grpc_server* s, grpc_transport* transport, grpc_pollset* accepting_pollset,
1435
- const grpc_channel_args* args,
1436
- const grpc_core::RefCountedPtr<grpc_core::channelz::SocketNode>&
1437
- socket_node,
1438
- grpc_resource_user* resource_user) {
1439
- size_t num_registered_methods;
1440
- size_t alloc;
1441
- registered_method* rm;
1442
- channel_registered_method* crm;
1443
- grpc_channel* channel;
1444
- channel_data* chand;
1445
- uint32_t hash;
1446
- size_t slots;
1447
- uint32_t probes;
1448
- uint32_t max_probes = 0;
1449
- grpc_transport_op* op = nullptr;
1450
-
1451
- channel = grpc_channel_create(nullptr, args, GRPC_SERVER_CHANNEL, transport,
1452
- resource_user);
1453
- chand = static_cast<channel_data*>(
1454
- grpc_channel_stack_element(grpc_channel_get_channel_stack(channel), 0)
1455
- ->channel_data);
1456
- chand->server = s;
1457
- server_ref(s);
1458
- chand->channel = channel;
1459
- if (socket_node != nullptr) {
1460
- chand->channelz_socket_uuid = socket_node->uuid();
1461
- s->channelz_server->AddChildSocket(socket_node);
1462
- } else {
1463
- chand->channelz_socket_uuid = 0;
1464
- }
1465
-
1466
- size_t cq_idx;
1467
- for (cq_idx = 0; cq_idx < s->cq_count; cq_idx++) {
1468
- if (grpc_cq_pollset(s->cqs[cq_idx]) == accepting_pollset) break;
1469
- }
1470
- if (cq_idx == s->cq_count) {
1471
- /* completion queue not found: pick a random one to publish new calls to */
1472
- cq_idx = static_cast<size_t>(rand()) % s->cq_count;
1473
- }
1474
- chand->cq_idx = cq_idx;
1475
-
1476
- num_registered_methods = 0;
1477
- for (rm = s->registered_methods; rm; rm = rm->next) {
1478
- num_registered_methods++;
1479
- }
1480
- /* build a lookup table phrased in terms of mdstr's in this channels context
1481
- to quickly find registered methods */
1026
+ void Server::ChannelData::InitTransport(RefCountedPtr<Server> server,
1027
+ grpc_channel* channel, size_t cq_idx,
1028
+ grpc_transport* transport,
1029
+ intptr_t channelz_socket_uuid) {
1030
+ server_ = std::move(server);
1031
+ channel_ = channel;
1032
+ cq_idx_ = cq_idx;
1033
+ channelz_socket_uuid_ = channelz_socket_uuid;
1034
+ // Build a lookup table phrased in terms of mdstr's in this channels context
1035
+ // to quickly find registered methods.
1036
+ size_t num_registered_methods = server_->registered_methods_.size();
1482
1037
  if (num_registered_methods > 0) {
1483
- slots = 2 * num_registered_methods;
1484
- alloc = sizeof(channel_registered_method) * slots;
1485
- chand->registered_methods =
1486
- static_cast<channel_registered_method*>(gpr_zalloc(alloc));
1487
- for (rm = s->registered_methods; rm; rm = rm->next) {
1488
- grpc_core::ExternallyManagedSlice host;
1489
- grpc_core::ExternallyManagedSlice method(rm->method.c_str());
1038
+ uint32_t max_probes = 0;
1039
+ size_t slots = 2 * num_registered_methods;
1040
+ registered_methods_ =
1041
+ absl::make_unique<std::vector<ChannelRegisteredMethod>>(slots);
1042
+ for (std::unique_ptr<RegisteredMethod>& rm : server_->registered_methods_) {
1043
+ ExternallyManagedSlice host;
1044
+ ExternallyManagedSlice method(rm->method.c_str());
1490
1045
  const bool has_host = !rm->host.empty();
1491
1046
  if (has_host) {
1492
- host = grpc_core::ExternallyManagedSlice(rm->host.c_str());
1047
+ host = ExternallyManagedSlice(rm->host.c_str());
1493
1048
  }
1494
- hash = GRPC_MDSTR_KV_HASH(has_host ? host.Hash() : 0, method.Hash());
1495
- for (probes = 0; chand->registered_methods[(hash + probes) % slots]
1049
+ uint32_t hash =
1050
+ GRPC_MDSTR_KV_HASH(has_host ? host.Hash() : 0, method.Hash());
1051
+ uint32_t probes = 0;
1052
+ for (probes = 0; (*registered_methods_)[(hash + probes) % slots]
1496
1053
  .server_registered_method != nullptr;
1497
- probes++)
1498
- ;
1054
+ probes++) {
1055
+ }
1499
1056
  if (probes > max_probes) max_probes = probes;
1500
- crm = &chand->registered_methods[(hash + probes) % slots];
1501
- crm->server_registered_method = rm;
1057
+ ChannelRegisteredMethod* crm =
1058
+ &(*registered_methods_)[(hash + probes) % slots];
1059
+ crm->server_registered_method = rm.get();
1502
1060
  crm->flags = rm->flags;
1503
1061
  crm->has_host = has_host;
1504
1062
  if (has_host) {
@@ -1507,218 +1065,495 @@ void grpc_server_setup_transport(
1507
1065
  crm->method = method;
1508
1066
  }
1509
1067
  GPR_ASSERT(slots <= UINT32_MAX);
1510
- chand->registered_method_slots = static_cast<uint32_t>(slots);
1511
- chand->registered_method_max_probes = max_probes;
1068
+ registered_method_max_probes_ = max_probes;
1512
1069
  }
1513
-
1514
- gpr_mu_lock(&s->mu_global);
1515
- chand->next = &s->root_channel_data;
1516
- chand->prev = chand->next->prev;
1517
- chand->next->prev = chand->prev->next = chand;
1518
- gpr_mu_unlock(&s->mu_global);
1519
-
1520
- op = grpc_make_transport_op(nullptr);
1070
+ // Publish channel.
1071
+ {
1072
+ MutexLock lock(&server_->mu_global_);
1073
+ server_->channels_.push_front(this);
1074
+ list_position_ = server_->channels_.begin();
1075
+ }
1076
+ // Start accept_stream transport op.
1077
+ grpc_transport_op* op = grpc_make_transport_op(nullptr);
1521
1078
  op->set_accept_stream = true;
1522
- op->set_accept_stream_fn = accept_stream;
1523
- op->set_accept_stream_user_data = chand;
1524
- op->start_connectivity_watch.reset(new ConnectivityWatcher(chand));
1525
- if (gpr_atm_acq_load(&s->shutdown_flag) != 0) {
1079
+ op->set_accept_stream_fn = AcceptStream;
1080
+ op->set_accept_stream_user_data = this;
1081
+ op->start_connectivity_watch = MakeOrphanable<ConnectivityWatcher>(this);
1082
+ if (server_->ShutdownCalled()) {
1526
1083
  op->disconnect_with_error =
1527
1084
  GRPC_ERROR_CREATE_FROM_STATIC_STRING("Server shutdown");
1528
1085
  }
1529
1086
  grpc_transport_perform_op(transport, op);
1530
1087
  }
1531
1088
 
1532
- /*
1533
- - Kills all pending requests-for-incoming-RPC-calls (i.e the requests made via
1534
- grpc_server_request_call and grpc_server_request_registered call will now be
1535
- cancelled). See 'kill_pending_work_locked()'
1089
+ Server::ChannelRegisteredMethod* Server::ChannelData::GetRegisteredMethod(
1090
+ const grpc_slice& host, const grpc_slice& path, bool is_idempotent) {
1091
+ if (registered_methods_ == nullptr) return nullptr;
1092
+ /* TODO(ctiller): unify these two searches */
1093
+ /* check for an exact match with host */
1094
+ uint32_t hash = GRPC_MDSTR_KV_HASH(grpc_slice_hash_internal(host),
1095
+ grpc_slice_hash_internal(path));
1096
+ for (size_t i = 0; i <= registered_method_max_probes_; i++) {
1097
+ ChannelRegisteredMethod* rm =
1098
+ &(*registered_methods_)[(hash + i) % registered_methods_->size()];
1099
+ if (rm->server_registered_method == nullptr) break;
1100
+ if (!rm->has_host) continue;
1101
+ if (rm->host != host) continue;
1102
+ if (rm->method != path) continue;
1103
+ if ((rm->flags & GRPC_INITIAL_METADATA_IDEMPOTENT_REQUEST) &&
1104
+ !is_idempotent) {
1105
+ continue;
1106
+ }
1107
+ return rm;
1108
+ }
1109
+ /* check for a wildcard method definition (no host set) */
1110
+ hash = GRPC_MDSTR_KV_HASH(0, grpc_slice_hash_internal(path));
1111
+ for (size_t i = 0; i <= registered_method_max_probes_; i++) {
1112
+ ChannelRegisteredMethod* rm =
1113
+ &(*registered_methods_)[(hash + i) % registered_methods_->size()];
1114
+ if (rm->server_registered_method == nullptr) break;
1115
+ if (rm->has_host) continue;
1116
+ if (rm->method != path) continue;
1117
+ if ((rm->flags & GRPC_INITIAL_METADATA_IDEMPOTENT_REQUEST) &&
1118
+ !is_idempotent) {
1119
+ continue;
1120
+ }
1121
+ return rm;
1122
+ }
1123
+ return nullptr;
1124
+ }
1536
1125
 
1537
- - Shuts down the listeners (i.e the server will no longer listen on the port
1538
- for new incoming channels).
1126
+ void Server::ChannelData::AcceptStream(void* arg, grpc_transport* /*transport*/,
1127
+ const void* transport_server_data) {
1128
+ auto* chand = static_cast<Server::ChannelData*>(arg);
1129
+ /* create a call */
1130
+ grpc_call_create_args args;
1131
+ args.channel = chand->channel_;
1132
+ args.server = chand->server_.get();
1133
+ args.parent = nullptr;
1134
+ args.propagation_mask = 0;
1135
+ args.cq = nullptr;
1136
+ args.pollset_set_alternative = nullptr;
1137
+ args.server_transport_data = transport_server_data;
1138
+ args.add_initial_metadata = nullptr;
1139
+ args.add_initial_metadata_count = 0;
1140
+ args.send_deadline = GRPC_MILLIS_INF_FUTURE;
1141
+ grpc_call* call;
1142
+ grpc_error_handle error = grpc_call_create(&args, &call);
1143
+ grpc_call_element* elem =
1144
+ grpc_call_stack_element(grpc_call_get_call_stack(call), 0);
1145
+ auto* calld = static_cast<Server::CallData*>(elem->call_data);
1146
+ if (error != GRPC_ERROR_NONE) {
1147
+ GRPC_ERROR_UNREF(error);
1148
+ calld->FailCallCreation();
1149
+ return;
1150
+ }
1151
+ calld->Start(elem);
1152
+ }
1539
1153
 
1540
- - Iterates through all channels on the server and sends shutdown msg (see
1541
- 'channel_broadcaster_shutdown()' for details) to the clients via the
1542
- transport layer. The transport layer then guarantees the following:
1543
- -- Sends shutdown to the client (for eg: HTTP2 transport sends GOAWAY)
1544
- -- If the server has outstanding calls that are in the process, the
1545
- connection is NOT closed until the server is done with all those calls
1546
- -- Once, there are no more calls in progress, the channel is closed
1547
- */
1548
- void grpc_server_shutdown_and_notify(grpc_server* server,
1549
- grpc_completion_queue* cq, void* tag) {
1550
- listener* l;
1551
- shutdown_tag* sdt;
1552
- channel_broadcaster broadcaster;
1553
- grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
1554
- grpc_core::ExecCtx exec_ctx;
1154
+ void Server::ChannelData::FinishDestroy(void* arg,
1155
+ grpc_error_handle /*error*/) {
1156
+ auto* chand = static_cast<Server::ChannelData*>(arg);
1157
+ Server* server = chand->server_.get();
1158
+ GRPC_CHANNEL_INTERNAL_UNREF(chand->channel_, "server");
1159
+ server->Unref();
1160
+ }
1555
1161
 
1556
- GRPC_API_TRACE("grpc_server_shutdown_and_notify(server=%p, cq=%p, tag=%p)", 3,
1557
- (server, cq, tag));
1162
+ void Server::ChannelData::Destroy() {
1163
+ if (!list_position_.has_value()) return;
1164
+ GPR_ASSERT(server_ != nullptr);
1165
+ server_->channels_.erase(*list_position_);
1166
+ list_position_.reset();
1167
+ server_->Ref().release();
1168
+ server_->MaybeFinishShutdown();
1169
+ GRPC_CLOSURE_INIT(&finish_destroy_channel_closure_, FinishDestroy, this,
1170
+ grpc_schedule_on_exec_ctx);
1171
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_server_channel_trace)) {
1172
+ gpr_log(GPR_INFO, "Disconnected client");
1173
+ }
1174
+ grpc_transport_op* op =
1175
+ grpc_make_transport_op(&finish_destroy_channel_closure_);
1176
+ op->set_accept_stream = true;
1177
+ grpc_channel_next_op(
1178
+ grpc_channel_stack_element(grpc_channel_get_channel_stack(channel_), 0),
1179
+ op);
1180
+ }
1181
+
1182
+ grpc_error_handle Server::ChannelData::InitChannelElement(
1183
+ grpc_channel_element* elem, grpc_channel_element_args* args) {
1184
+ GPR_ASSERT(args->is_first);
1185
+ GPR_ASSERT(!args->is_last);
1186
+ new (elem->channel_data) ChannelData();
1187
+ return GRPC_ERROR_NONE;
1188
+ }
1189
+
1190
+ void Server::ChannelData::DestroyChannelElement(grpc_channel_element* elem) {
1191
+ auto* chand = static_cast<ChannelData*>(elem->channel_data);
1192
+ chand->~ChannelData();
1193
+ }
1194
+
1195
+ //
1196
+ // Server::CallData
1197
+ //
1558
1198
 
1559
- /* wait for startup to be finished: locks mu_global */
1560
- gpr_mu_lock(&server->mu_global);
1561
- while (server->starting) {
1562
- gpr_cv_wait(&server->starting_cv, &server->mu_global,
1563
- gpr_inf_future(GPR_CLOCK_MONOTONIC));
1199
+ Server::CallData::CallData(grpc_call_element* elem,
1200
+ const grpc_call_element_args& args,
1201
+ RefCountedPtr<Server> server)
1202
+ : server_(std::move(server)),
1203
+ call_(grpc_call_from_top_element(elem)),
1204
+ call_combiner_(args.call_combiner) {
1205
+ GRPC_CLOSURE_INIT(&recv_initial_metadata_ready_, RecvInitialMetadataReady,
1206
+ elem, grpc_schedule_on_exec_ctx);
1207
+ GRPC_CLOSURE_INIT(&recv_trailing_metadata_ready_, RecvTrailingMetadataReady,
1208
+ elem, grpc_schedule_on_exec_ctx);
1209
+ }
1210
+
1211
+ Server::CallData::~CallData() {
1212
+ GPR_ASSERT(state_.Load(MemoryOrder::RELAXED) != CallState::PENDING);
1213
+ GRPC_ERROR_UNREF(recv_initial_metadata_error_);
1214
+ if (host_.has_value()) {
1215
+ grpc_slice_unref_internal(*host_);
1564
1216
  }
1217
+ if (path_.has_value()) {
1218
+ grpc_slice_unref_internal(*path_);
1219
+ }
1220
+ grpc_metadata_array_destroy(&initial_metadata_);
1221
+ grpc_byte_buffer_destroy(payload_);
1222
+ }
1565
1223
 
1566
- /* stay locked, and gather up some stuff to do */
1567
- GPR_ASSERT(grpc_cq_begin_op(cq, tag));
1568
- if (server->shutdown_published) {
1569
- grpc_cq_end_op(cq, tag, GRPC_ERROR_NONE, done_published_shutdown, nullptr,
1570
- static_cast<grpc_cq_completion*>(
1571
- gpr_malloc(sizeof(grpc_cq_completion))));
1572
- gpr_mu_unlock(&server->mu_global);
1573
- return;
1224
+ void Server::CallData::SetState(CallState state) {
1225
+ state_.Store(state, MemoryOrder::RELAXED);
1226
+ }
1227
+
1228
+ bool Server::CallData::MaybeActivate() {
1229
+ CallState expected = CallState::PENDING;
1230
+ return state_.CompareExchangeStrong(&expected, CallState::ACTIVATED,
1231
+ MemoryOrder::ACQ_REL,
1232
+ MemoryOrder::RELAXED);
1233
+ }
1234
+
1235
+ void Server::CallData::FailCallCreation() {
1236
+ CallState expected_not_started = CallState::NOT_STARTED;
1237
+ CallState expected_pending = CallState::PENDING;
1238
+ if (state_.CompareExchangeStrong(&expected_not_started, CallState::ZOMBIED,
1239
+ MemoryOrder::ACQ_REL,
1240
+ MemoryOrder::ACQUIRE)) {
1241
+ KillZombie();
1242
+ } else if (state_.CompareExchangeStrong(&expected_pending, CallState::ZOMBIED,
1243
+ MemoryOrder::ACQ_REL,
1244
+ MemoryOrder::RELAXED)) {
1245
+ // Zombied call will be destroyed when it's removed from the pending
1246
+ // queue... later.
1574
1247
  }
1575
- server->shutdown_tags = static_cast<shutdown_tag*>(
1576
- gpr_realloc(server->shutdown_tags,
1577
- sizeof(shutdown_tag) * (server->num_shutdown_tags + 1)));
1578
- sdt = &server->shutdown_tags[server->num_shutdown_tags++];
1579
- sdt->tag = tag;
1580
- sdt->cq = cq;
1581
- if (gpr_atm_acq_load(&server->shutdown_flag)) {
1582
- gpr_mu_unlock(&server->mu_global);
1583
- return;
1248
+ }
1249
+
1250
+ void Server::CallData::Start(grpc_call_element* elem) {
1251
+ grpc_op op;
1252
+ op.op = GRPC_OP_RECV_INITIAL_METADATA;
1253
+ op.flags = 0;
1254
+ op.reserved = nullptr;
1255
+ op.data.recv_initial_metadata.recv_initial_metadata = &initial_metadata_;
1256
+ GRPC_CLOSURE_INIT(&recv_initial_metadata_batch_complete_,
1257
+ RecvInitialMetadataBatchComplete, elem,
1258
+ grpc_schedule_on_exec_ctx);
1259
+ grpc_call_start_batch_and_execute(call_, &op, 1,
1260
+ &recv_initial_metadata_batch_complete_);
1261
+ }
1262
+
1263
+ void Server::CallData::Publish(size_t cq_idx, RequestedCall* rc) {
1264
+ grpc_call_set_completion_queue(call_, rc->cq_bound_to_call);
1265
+ *rc->call = call_;
1266
+ cq_new_ = server_->cqs_[cq_idx];
1267
+ GPR_SWAP(grpc_metadata_array, *rc->initial_metadata, initial_metadata_);
1268
+ switch (rc->type) {
1269
+ case RequestedCall::Type::BATCH_CALL:
1270
+ GPR_ASSERT(host_.has_value());
1271
+ GPR_ASSERT(path_.has_value());
1272
+ rc->data.batch.details->host = grpc_slice_ref_internal(*host_);
1273
+ rc->data.batch.details->method = grpc_slice_ref_internal(*path_);
1274
+ rc->data.batch.details->deadline =
1275
+ grpc_millis_to_timespec(deadline_, GPR_CLOCK_MONOTONIC);
1276
+ rc->data.batch.details->flags = recv_initial_metadata_flags_;
1277
+ break;
1278
+ case RequestedCall::Type::REGISTERED_CALL:
1279
+ *rc->data.registered.deadline =
1280
+ grpc_millis_to_timespec(deadline_, GPR_CLOCK_MONOTONIC);
1281
+ if (rc->data.registered.optional_payload != nullptr) {
1282
+ *rc->data.registered.optional_payload = payload_;
1283
+ payload_ = nullptr;
1284
+ }
1285
+ break;
1286
+ default:
1287
+ GPR_UNREACHABLE_CODE(return );
1584
1288
  }
1289
+ grpc_cq_end_op(cq_new_, rc->tag, GRPC_ERROR_NONE, Server::DoneRequestEvent,
1290
+ rc, &rc->completion, true);
1291
+ }
1585
1292
 
1586
- server->last_shutdown_message_time = gpr_now(GPR_CLOCK_REALTIME);
1293
+ void Server::CallData::PublishNewRpc(void* arg, grpc_error_handle error) {
1294
+ grpc_call_element* call_elem = static_cast<grpc_call_element*>(arg);
1295
+ auto* calld = static_cast<Server::CallData*>(call_elem->call_data);
1296
+ auto* chand = static_cast<Server::ChannelData*>(call_elem->channel_data);
1297
+ RequestMatcherInterface* rm = calld->matcher_;
1298
+ Server* server = rm->server();
1299
+ if (error != GRPC_ERROR_NONE || server->ShutdownCalled()) {
1300
+ calld->state_.Store(CallState::ZOMBIED, MemoryOrder::RELAXED);
1301
+ calld->KillZombie();
1302
+ return;
1303
+ }
1304
+ rm->MatchOrQueue(chand->cq_idx(), calld);
1305
+ }
1587
1306
 
1588
- channel_broadcaster_init(server, &broadcaster);
1307
+ namespace {
1589
1308
 
1590
- gpr_atm_rel_store(&server->shutdown_flag, 1);
1309
+ void KillZombieClosure(void* call, grpc_error_handle /*error*/) {
1310
+ grpc_call_unref(static_cast<grpc_call*>(call));
1311
+ }
1591
1312
 
1592
- /* collect all unregistered then registered calls */
1593
- gpr_mu_lock(&server->mu_call);
1594
- kill_pending_work_locked(
1595
- server, GRPC_ERROR_CREATE_FROM_STATIC_STRING("Server Shutdown"));
1596
- gpr_mu_unlock(&server->mu_call);
1313
+ } // namespace
1597
1314
 
1598
- maybe_finish_shutdown(server);
1599
- gpr_mu_unlock(&server->mu_global);
1315
+ void Server::CallData::KillZombie() {
1316
+ GRPC_CLOSURE_INIT(&kill_zombie_closure_, KillZombieClosure, call_,
1317
+ grpc_schedule_on_exec_ctx);
1318
+ ExecCtx::Run(DEBUG_LOCATION, &kill_zombie_closure_, GRPC_ERROR_NONE);
1319
+ }
1600
1320
 
1601
- /* Shutdown listeners */
1602
- for (l = server->listeners; l; l = l->next) {
1603
- GRPC_CLOSURE_INIT(&l->destroy_done, listener_destroy_done, server,
1604
- grpc_schedule_on_exec_ctx);
1605
- l->destroy(server, l->arg, &l->destroy_done);
1606
- if (server->channelz_server != nullptr && l->socket_uuid != 0) {
1607
- server->channelz_server->RemoveChildListenSocket(l->socket_uuid);
1321
+ void Server::CallData::StartNewRpc(grpc_call_element* elem) {
1322
+ auto* chand = static_cast<ChannelData*>(elem->channel_data);
1323
+ if (server_->ShutdownCalled()) {
1324
+ state_.Store(CallState::ZOMBIED, MemoryOrder::RELAXED);
1325
+ KillZombie();
1326
+ return;
1327
+ }
1328
+ // Find request matcher.
1329
+ matcher_ = server_->unregistered_request_matcher_.get();
1330
+ grpc_server_register_method_payload_handling payload_handling =
1331
+ GRPC_SRM_PAYLOAD_NONE;
1332
+ if (path_.has_value() && host_.has_value()) {
1333
+ ChannelRegisteredMethod* rm =
1334
+ chand->GetRegisteredMethod(*host_, *path_,
1335
+ (recv_initial_metadata_flags_ &
1336
+ GRPC_INITIAL_METADATA_IDEMPOTENT_REQUEST));
1337
+ if (rm != nullptr) {
1338
+ matcher_ = rm->server_registered_method->matcher.get();
1339
+ payload_handling = rm->server_registered_method->payload_handling;
1608
1340
  }
1609
1341
  }
1342
+ // Start recv_message op if needed.
1343
+ switch (payload_handling) {
1344
+ case GRPC_SRM_PAYLOAD_NONE:
1345
+ PublishNewRpc(elem, GRPC_ERROR_NONE);
1346
+ break;
1347
+ case GRPC_SRM_PAYLOAD_READ_INITIAL_BYTE_BUFFER: {
1348
+ grpc_op op;
1349
+ op.op = GRPC_OP_RECV_MESSAGE;
1350
+ op.flags = 0;
1351
+ op.reserved = nullptr;
1352
+ op.data.recv_message.recv_message = &payload_;
1353
+ GRPC_CLOSURE_INIT(&publish_, PublishNewRpc, elem,
1354
+ grpc_schedule_on_exec_ctx);
1355
+ grpc_call_start_batch_and_execute(call_, &op, 1, &publish_);
1356
+ break;
1357
+ }
1358
+ }
1359
+ }
1360
+
1361
+ void Server::CallData::RecvInitialMetadataBatchComplete(
1362
+ void* arg, grpc_error_handle error) {
1363
+ grpc_call_element* elem = static_cast<grpc_call_element*>(arg);
1364
+ auto* calld = static_cast<Server::CallData*>(elem->call_data);
1365
+ if (error != GRPC_ERROR_NONE) {
1366
+ calld->FailCallCreation();
1367
+ return;
1368
+ }
1369
+ calld->StartNewRpc(elem);
1370
+ }
1610
1371
 
1611
- channel_broadcaster_shutdown(&broadcaster, true /* send_goaway */,
1612
- GRPC_ERROR_NONE);
1372
+ void Server::CallData::StartTransportStreamOpBatchImpl(
1373
+ grpc_call_element* elem, grpc_transport_stream_op_batch* batch) {
1374
+ if (batch->recv_initial_metadata) {
1375
+ GPR_ASSERT(batch->payload->recv_initial_metadata.recv_flags == nullptr);
1376
+ recv_initial_metadata_ =
1377
+ batch->payload->recv_initial_metadata.recv_initial_metadata;
1378
+ original_recv_initial_metadata_ready_ =
1379
+ batch->payload->recv_initial_metadata.recv_initial_metadata_ready;
1380
+ batch->payload->recv_initial_metadata.recv_initial_metadata_ready =
1381
+ &recv_initial_metadata_ready_;
1382
+ batch->payload->recv_initial_metadata.recv_flags =
1383
+ &recv_initial_metadata_flags_;
1384
+ }
1385
+ if (batch->recv_trailing_metadata) {
1386
+ original_recv_trailing_metadata_ready_ =
1387
+ batch->payload->recv_trailing_metadata.recv_trailing_metadata_ready;
1388
+ batch->payload->recv_trailing_metadata.recv_trailing_metadata_ready =
1389
+ &recv_trailing_metadata_ready_;
1390
+ }
1391
+ grpc_call_next_op(elem, batch);
1392
+ }
1613
1393
 
1614
- if (server->default_resource_user != nullptr) {
1615
- grpc_resource_quota_unref(
1616
- grpc_resource_user_quota(server->default_resource_user));
1617
- grpc_resource_user_shutdown(server->default_resource_user);
1618
- grpc_resource_user_unref(server->default_resource_user);
1394
+ void Server::CallData::RecvInitialMetadataReady(void* arg,
1395
+ grpc_error_handle error) {
1396
+ grpc_call_element* elem = static_cast<grpc_call_element*>(arg);
1397
+ CallData* calld = static_cast<CallData*>(elem->call_data);
1398
+ grpc_millis op_deadline;
1399
+ if (error == GRPC_ERROR_NONE) {
1400
+ GPR_DEBUG_ASSERT(calld->recv_initial_metadata_->idx.named.path != nullptr);
1401
+ GPR_DEBUG_ASSERT(calld->recv_initial_metadata_->idx.named.authority !=
1402
+ nullptr);
1403
+ calld->path_.emplace(grpc_slice_ref_internal(
1404
+ GRPC_MDVALUE(calld->recv_initial_metadata_->idx.named.path->md)));
1405
+ calld->host_.emplace(grpc_slice_ref_internal(
1406
+ GRPC_MDVALUE(calld->recv_initial_metadata_->idx.named.authority->md)));
1407
+ grpc_metadata_batch_remove(calld->recv_initial_metadata_, GRPC_BATCH_PATH);
1408
+ grpc_metadata_batch_remove(calld->recv_initial_metadata_,
1409
+ GRPC_BATCH_AUTHORITY);
1410
+ } else {
1411
+ GRPC_ERROR_REF(error);
1412
+ }
1413
+ op_deadline = calld->recv_initial_metadata_->deadline;
1414
+ if (op_deadline != GRPC_MILLIS_INF_FUTURE) {
1415
+ calld->deadline_ = op_deadline;
1416
+ }
1417
+ if (calld->host_.has_value() && calld->path_.has_value()) {
1418
+ /* do nothing */
1419
+ } else {
1420
+ /* Pass the error reference to calld->recv_initial_metadata_error */
1421
+ grpc_error_handle src_error = error;
1422
+ error = GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
1423
+ "Missing :authority or :path", &src_error, 1);
1424
+ GRPC_ERROR_UNREF(src_error);
1425
+ calld->recv_initial_metadata_error_ = GRPC_ERROR_REF(error);
1426
+ }
1427
+ grpc_closure* closure = calld->original_recv_initial_metadata_ready_;
1428
+ calld->original_recv_initial_metadata_ready_ = nullptr;
1429
+ if (calld->seen_recv_trailing_metadata_ready_) {
1430
+ GRPC_CALL_COMBINER_START(calld->call_combiner_,
1431
+ &calld->recv_trailing_metadata_ready_,
1432
+ calld->recv_trailing_metadata_error_,
1433
+ "continue server recv_trailing_metadata_ready");
1619
1434
  }
1435
+ Closure::Run(DEBUG_LOCATION, closure, error);
1620
1436
  }
1621
1437
 
1622
- void grpc_server_cancel_all_calls(grpc_server* server) {
1623
- channel_broadcaster broadcaster;
1624
- grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
1625
- grpc_core::ExecCtx exec_ctx;
1438
+ void Server::CallData::RecvTrailingMetadataReady(void* arg,
1439
+ grpc_error_handle error) {
1440
+ grpc_call_element* elem = static_cast<grpc_call_element*>(arg);
1441
+ CallData* calld = static_cast<CallData*>(elem->call_data);
1442
+ if (calld->original_recv_initial_metadata_ready_ != nullptr) {
1443
+ calld->recv_trailing_metadata_error_ = GRPC_ERROR_REF(error);
1444
+ calld->seen_recv_trailing_metadata_ready_ = true;
1445
+ GRPC_CLOSURE_INIT(&calld->recv_trailing_metadata_ready_,
1446
+ RecvTrailingMetadataReady, elem,
1447
+ grpc_schedule_on_exec_ctx);
1448
+ GRPC_CALL_COMBINER_STOP(calld->call_combiner_,
1449
+ "deferring server recv_trailing_metadata_ready "
1450
+ "until after recv_initial_metadata_ready");
1451
+ return;
1452
+ }
1453
+ error =
1454
+ grpc_error_add_child(GRPC_ERROR_REF(error),
1455
+ GRPC_ERROR_REF(calld->recv_initial_metadata_error_));
1456
+ Closure::Run(DEBUG_LOCATION, calld->original_recv_trailing_metadata_ready_,
1457
+ error);
1458
+ }
1626
1459
 
1627
- GRPC_API_TRACE("grpc_server_cancel_all_calls(server=%p)", 1, (server));
1460
+ grpc_error_handle Server::CallData::InitCallElement(
1461
+ grpc_call_element* elem, const grpc_call_element_args* args) {
1462
+ auto* chand = static_cast<ChannelData*>(elem->channel_data);
1463
+ new (elem->call_data) Server::CallData(elem, *args, chand->server());
1464
+ return GRPC_ERROR_NONE;
1465
+ }
1628
1466
 
1629
- gpr_mu_lock(&server->mu_global);
1630
- channel_broadcaster_init(server, &broadcaster);
1631
- gpr_mu_unlock(&server->mu_global);
1467
+ void Server::CallData::DestroyCallElement(
1468
+ grpc_call_element* elem, const grpc_call_final_info* /*final_info*/,
1469
+ grpc_closure* /*ignored*/) {
1470
+ auto* calld = static_cast<CallData*>(elem->call_data);
1471
+ calld->~CallData();
1472
+ }
1632
1473
 
1633
- channel_broadcaster_shutdown(
1634
- &broadcaster, false /* send_goaway */,
1635
- GRPC_ERROR_CREATE_FROM_STATIC_STRING("Cancelling all calls"));
1474
+ void Server::CallData::StartTransportStreamOpBatch(
1475
+ grpc_call_element* elem, grpc_transport_stream_op_batch* batch) {
1476
+ auto* calld = static_cast<CallData*>(elem->call_data);
1477
+ calld->StartTransportStreamOpBatchImpl(elem, batch);
1636
1478
  }
1637
1479
 
1638
- void grpc_server_destroy(grpc_server* server) {
1639
- listener* l;
1640
- grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
1641
- grpc_core::ExecCtx exec_ctx;
1480
+ } // namespace grpc_core
1642
1481
 
1643
- GRPC_API_TRACE("grpc_server_destroy(server=%p)", 1, (server));
1482
+ //
1483
+ // C-core API
1484
+ //
1644
1485
 
1645
- gpr_mu_lock(&server->mu_global);
1646
- GPR_ASSERT(gpr_atm_acq_load(&server->shutdown_flag) || !server->listeners);
1647
- GPR_ASSERT(server->listeners_destroyed == num_listeners(server));
1486
+ grpc_server* grpc_server_create(const grpc_channel_args* args, void* reserved) {
1487
+ grpc_core::ExecCtx exec_ctx;
1488
+ GRPC_API_TRACE("grpc_server_create(%p, %p)", 2, (args, reserved));
1489
+ grpc_server* c_server = new grpc_server;
1490
+ c_server->core_server = grpc_core::MakeOrphanable<grpc_core::Server>(args);
1491
+ return c_server;
1492
+ }
1648
1493
 
1649
- while (server->listeners) {
1650
- l = server->listeners;
1651
- server->listeners = l->next;
1652
- gpr_free(l);
1494
+ void grpc_server_register_completion_queue(grpc_server* server,
1495
+ grpc_completion_queue* cq,
1496
+ void* reserved) {
1497
+ GRPC_API_TRACE(
1498
+ "grpc_server_register_completion_queue(server=%p, cq=%p, reserved=%p)", 3,
1499
+ (server, cq, reserved));
1500
+ GPR_ASSERT(!reserved);
1501
+ auto cq_type = grpc_get_cq_completion_type(cq);
1502
+ if (cq_type != GRPC_CQ_NEXT && cq_type != GRPC_CQ_CALLBACK) {
1503
+ gpr_log(GPR_INFO,
1504
+ "Completion queue of type %d is being registered as a "
1505
+ "server-completion-queue",
1506
+ static_cast<int>(cq_type));
1507
+ /* Ideally we should log an error and abort but ruby-wrapped-language API
1508
+ calls grpc_completion_queue_pluck() on server completion queues */
1653
1509
  }
1510
+ server->core_server->RegisterCompletionQueue(cq);
1511
+ }
1654
1512
 
1655
- gpr_mu_unlock(&server->mu_global);
1513
+ void* grpc_server_register_method(
1514
+ grpc_server* server, const char* method, const char* host,
1515
+ grpc_server_register_method_payload_handling payload_handling,
1516
+ uint32_t flags) {
1517
+ GRPC_API_TRACE(
1518
+ "grpc_server_register_method(server=%p, method=%s, host=%s, "
1519
+ "flags=0x%08x)",
1520
+ 4, (server, method, host, flags));
1521
+ return server->core_server->RegisterMethod(method, host, payload_handling,
1522
+ flags);
1523
+ }
1656
1524
 
1657
- server_unref(server);
1525
+ void grpc_server_start(grpc_server* server) {
1526
+ grpc_core::ExecCtx exec_ctx;
1527
+ GRPC_API_TRACE("grpc_server_start(server=%p)", 1, (server));
1528
+ server->core_server->Start();
1658
1529
  }
1659
1530
 
1660
- void grpc_server_add_listener(
1661
- grpc_server* server, void* listener_arg,
1662
- void (*start)(grpc_server* server, void* arg, grpc_pollset** pollsets,
1663
- size_t pollset_count),
1664
- void (*destroy)(grpc_server* server, void* arg, grpc_closure* on_done),
1665
- grpc_core::RefCountedPtr<grpc_core::channelz::ListenSocketNode> node) {
1666
- listener* l = static_cast<listener*>(gpr_malloc(sizeof(listener)));
1667
- l->arg = listener_arg;
1668
- l->start = start;
1669
- l->destroy = destroy;
1670
- l->socket_uuid = 0;
1671
- if (node != nullptr) {
1672
- l->socket_uuid = node->uuid();
1673
- if (server->channelz_server != nullptr) {
1674
- server->channelz_server->AddChildListenSocket(std::move(node));
1675
- }
1676
- }
1677
- l->next = server->listeners;
1678
- server->listeners = l;
1531
+ void grpc_server_shutdown_and_notify(grpc_server* server,
1532
+ grpc_completion_queue* cq, void* tag) {
1533
+ grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
1534
+ grpc_core::ExecCtx exec_ctx;
1535
+ GRPC_API_TRACE("grpc_server_shutdown_and_notify(server=%p, cq=%p, tag=%p)", 3,
1536
+ (server, cq, tag));
1537
+ server->core_server->ShutdownAndNotify(cq, tag);
1679
1538
  }
1680
1539
 
1681
- namespace {
1682
- grpc_call_error ValidateServerRequest(
1683
- grpc_completion_queue* cq_for_notification, void* tag,
1684
- grpc_byte_buffer** optional_payload, registered_method* rm) {
1685
- if ((rm == nullptr && optional_payload != nullptr) ||
1686
- ((rm != nullptr) && ((optional_payload == nullptr) !=
1687
- (rm->payload_handling == GRPC_SRM_PAYLOAD_NONE)))) {
1688
- return GRPC_CALL_ERROR_PAYLOAD_TYPE_MISMATCH;
1689
- }
1690
- if (grpc_cq_begin_op(cq_for_notification, tag) == false) {
1691
- return GRPC_CALL_ERROR_COMPLETION_QUEUE_SHUTDOWN;
1692
- }
1693
- return GRPC_CALL_OK;
1540
+ void grpc_server_cancel_all_calls(grpc_server* server) {
1541
+ grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
1542
+ grpc_core::ExecCtx exec_ctx;
1543
+ GRPC_API_TRACE("grpc_server_cancel_all_calls(server=%p)", 1, (server));
1544
+ server->core_server->CancelAllCalls();
1694
1545
  }
1695
- grpc_call_error ValidateServerRequestAndCq(
1696
- size_t* cq_idx, grpc_server* server,
1697
- grpc_completion_queue* cq_for_notification, void* tag,
1698
- grpc_byte_buffer** optional_payload, registered_method* rm) {
1699
- size_t idx;
1700
- for (idx = 0; idx < server->cq_count; idx++) {
1701
- if (server->cqs[idx] == cq_for_notification) {
1702
- break;
1703
- }
1704
- }
1705
- if (idx == server->cq_count) {
1706
- return GRPC_CALL_ERROR_NOT_SERVER_COMPLETION_QUEUE;
1707
- }
1708
- grpc_call_error error =
1709
- ValidateServerRequest(cq_for_notification, tag, optional_payload, rm);
1710
- if (error != GRPC_CALL_OK) {
1711
- return error;
1712
- }
1713
1546
 
1714
- *cq_idx = idx;
1715
- return GRPC_CALL_OK;
1547
+ void grpc_server_destroy(grpc_server* server) {
1548
+ grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
1549
+ grpc_core::ExecCtx exec_ctx;
1550
+ GRPC_API_TRACE("grpc_server_destroy(server=%p)", 1, (server));
1551
+ delete server;
1716
1552
  }
1717
- } // namespace
1718
1553
 
1719
1554
  grpc_call_error grpc_server_request_call(
1720
1555
  grpc_server* server, grpc_call** call, grpc_call_details* details,
1721
- grpc_metadata_array* initial_metadata,
1556
+ grpc_metadata_array* request_metadata,
1722
1557
  grpc_completion_queue* cq_bound_to_call,
1723
1558
  grpc_completion_queue* cq_for_notification, void* tag) {
1724
1559
  grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
@@ -1729,72 +1564,53 @@ grpc_call_error grpc_server_request_call(
1729
1564
  "server=%p, call=%p, details=%p, initial_metadata=%p, "
1730
1565
  "cq_bound_to_call=%p, cq_for_notification=%p, tag=%p)",
1731
1566
  7,
1732
- (server, call, details, initial_metadata, cq_bound_to_call,
1567
+ (server, call, details, request_metadata, cq_bound_to_call,
1733
1568
  cq_for_notification, tag));
1734
-
1735
- size_t cq_idx;
1736
- grpc_call_error error = ValidateServerRequestAndCq(
1737
- &cq_idx, server, cq_for_notification, tag, nullptr, nullptr);
1738
- if (error != GRPC_CALL_OK) {
1739
- return error;
1740
- }
1741
-
1742
- requested_call* rc = new requested_call(tag, cq_bound_to_call, call,
1743
- initial_metadata, details);
1744
- return queue_call_request(server, cq_idx, rc);
1569
+ return server->core_server->RequestCall(call, details, request_metadata,
1570
+ cq_bound_to_call, cq_for_notification,
1571
+ tag);
1745
1572
  }
1746
1573
 
1747
1574
  grpc_call_error grpc_server_request_registered_call(
1748
- grpc_server* server, void* rmp, grpc_call** call, gpr_timespec* deadline,
1749
- grpc_metadata_array* initial_metadata, grpc_byte_buffer** optional_payload,
1575
+ grpc_server* server, void* registered_method, grpc_call** call,
1576
+ gpr_timespec* deadline, grpc_metadata_array* request_metadata,
1577
+ grpc_byte_buffer** optional_payload,
1750
1578
  grpc_completion_queue* cq_bound_to_call,
1751
- grpc_completion_queue* cq_for_notification, void* tag) {
1579
+ grpc_completion_queue* cq_for_notification, void* tag_new) {
1752
1580
  grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
1753
1581
  grpc_core::ExecCtx exec_ctx;
1754
1582
  GRPC_STATS_INC_SERVER_REQUESTED_CALLS();
1755
- registered_method* rm = static_cast<registered_method*>(rmp);
1583
+ auto* rm =
1584
+ static_cast<grpc_core::Server::RegisteredMethod*>(registered_method);
1756
1585
  GRPC_API_TRACE(
1757
1586
  "grpc_server_request_registered_call("
1758
- "server=%p, rmp=%p, call=%p, deadline=%p, initial_metadata=%p, "
1587
+ "server=%p, registered_method=%p, call=%p, deadline=%p, "
1588
+ "request_metadata=%p, "
1759
1589
  "optional_payload=%p, cq_bound_to_call=%p, cq_for_notification=%p, "
1760
1590
  "tag=%p)",
1761
1591
  9,
1762
- (server, rmp, call, deadline, initial_metadata, optional_payload,
1763
- cq_bound_to_call, cq_for_notification, tag));
1764
-
1765
- size_t cq_idx;
1766
- grpc_call_error error = ValidateServerRequestAndCq(
1767
- &cq_idx, server, cq_for_notification, tag, optional_payload, rm);
1768
- if (error != GRPC_CALL_OK) {
1769
- return error;
1770
- }
1771
-
1772
- requested_call* rc =
1773
- new requested_call(tag, cq_bound_to_call, call, initial_metadata, rm,
1774
- deadline, optional_payload);
1775
- return queue_call_request(server, cq_idx, rc);
1776
- }
1777
-
1778
- const grpc_channel_args* grpc_server_get_channel_args(grpc_server* server) {
1779
- return server->channel_args;
1592
+ (server, registered_method, call, deadline, request_metadata,
1593
+ optional_payload, cq_bound_to_call, cq_for_notification, tag_new));
1594
+ return server->core_server->RequestRegisteredCall(
1595
+ rm, call, deadline, request_metadata, optional_payload, cq_bound_to_call,
1596
+ cq_for_notification, tag_new);
1780
1597
  }
1781
1598
 
1782
- grpc_resource_user* grpc_server_get_default_resource_user(grpc_server* server) {
1783
- return server->default_resource_user;
1784
- }
1785
-
1786
- int grpc_server_has_open_connections(grpc_server* server) {
1787
- int r;
1788
- gpr_mu_lock(&server->mu_global);
1789
- r = server->root_channel_data.next != &server->root_channel_data;
1790
- gpr_mu_unlock(&server->mu_global);
1791
- return r;
1599
+ void grpc_server_set_config_fetcher(
1600
+ grpc_server* server, grpc_server_config_fetcher* server_config_fetcher) {
1601
+ grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
1602
+ grpc_core::ExecCtx exec_ctx;
1603
+ GRPC_API_TRACE("grpc_server_set_config_fetcher(server=%p, config_fetcher=%p)",
1604
+ 2, (server, server_config_fetcher));
1605
+ server->core_server->set_config_fetcher(
1606
+ std::unique_ptr<grpc_server_config_fetcher>(server_config_fetcher));
1792
1607
  }
1793
1608
 
1794
- grpc_core::channelz::ServerNode* grpc_server_get_channelz_node(
1795
- grpc_server* server) {
1796
- if (server == nullptr) {
1797
- return nullptr;
1798
- }
1799
- return server->channelz_server.get();
1609
+ void grpc_server_config_fetcher_destroy(
1610
+ grpc_server_config_fetcher* server_config_fetcher) {
1611
+ grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
1612
+ grpc_core::ExecCtx exec_ctx;
1613
+ GRPC_API_TRACE("grpc_server_config_fetcher_destroy(config_fetcher=%p)", 1,
1614
+ (server_config_fetcher));
1615
+ delete server_config_fetcher;
1800
1616
  }