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