grpc 1.50.0 → 1.51.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of grpc might be problematic. Click here for more details.

Files changed (459) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +131 -42
  3. data/include/grpc/event_engine/event_engine.h +10 -3
  4. data/include/grpc/event_engine/slice_buffer.h +17 -0
  5. data/include/grpc/grpc.h +0 -10
  6. data/include/grpc/impl/codegen/grpc_types.h +1 -5
  7. data/include/grpc/impl/codegen/port_platform.h +0 -3
  8. data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +19 -13
  9. data/src/core/ext/filters/channel_idle/channel_idle_filter.h +1 -0
  10. data/src/core/ext/filters/client_channel/backup_poller.cc +3 -3
  11. data/src/core/ext/filters/client_channel/channel_connectivity.cc +7 -5
  12. data/src/core/ext/filters/client_channel/client_channel.cc +120 -140
  13. data/src/core/ext/filters/client_channel/client_channel.h +3 -4
  14. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +0 -2
  15. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +1 -1
  16. data/src/core/ext/filters/client_channel/client_channel_service_config.cc +153 -0
  17. data/src/core/ext/filters/client_channel/{resolver_result_parsing.h → client_channel_service_config.h} +26 -23
  18. data/src/core/ext/filters/client_channel/connector.h +1 -1
  19. data/src/core/ext/filters/client_channel/dynamic_filters.cc +20 -47
  20. data/src/core/ext/filters/client_channel/dynamic_filters.h +7 -8
  21. data/src/core/ext/filters/client_channel/health/health_check_client.cc +3 -4
  22. data/src/core/ext/filters/client_channel/http_proxy.cc +0 -1
  23. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +3 -4
  24. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +5 -0
  25. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +8 -7
  26. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +35 -44
  27. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +0 -1
  28. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +1 -3
  29. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +3 -4
  30. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.h +1 -1
  31. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +41 -29
  32. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +2 -2
  33. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +9 -11
  34. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +15 -12
  35. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +8 -10
  36. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +26 -27
  37. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +7 -9
  38. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +44 -26
  39. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +17 -27
  40. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_attributes.cc +42 -0
  41. data/src/core/ext/filters/client_channel/lb_policy/xds/{xds.h → xds_attributes.h} +15 -17
  42. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +13 -7
  43. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +48 -47
  44. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +40 -126
  45. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_wrr_locality.cc +364 -0
  46. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +9 -9
  47. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +23 -32
  48. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +1 -2
  49. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +22 -23
  50. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +50 -52
  51. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +1 -1
  52. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +2 -4
  53. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +1 -3
  54. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +34 -26
  55. data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +3 -4
  56. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +4 -7
  57. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +63 -46
  58. data/src/core/ext/filters/client_channel/retry_filter.cc +80 -102
  59. data/src/core/ext/filters/client_channel/retry_service_config.cc +192 -234
  60. data/src/core/ext/filters/client_channel/retry_service_config.h +20 -23
  61. data/src/core/ext/filters/client_channel/retry_throttle.cc +8 -8
  62. data/src/core/ext/filters/client_channel/retry_throttle.h +8 -7
  63. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +2 -2
  64. data/src/core/ext/filters/client_channel/subchannel.cc +21 -25
  65. data/src/core/ext/filters/client_channel/subchannel.h +2 -2
  66. data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +11 -12
  67. data/src/core/ext/filters/deadline/deadline_filter.cc +13 -14
  68. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +1 -1
  69. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +0 -4
  70. data/src/core/ext/filters/fault_injection/fault_injection_service_config_parser.cc +118 -0
  71. data/src/core/ext/filters/fault_injection/{service_config_parser.h → fault_injection_service_config_parser.h} +20 -12
  72. data/src/core/ext/filters/http/client/http_client_filter.cc +16 -16
  73. data/src/core/ext/filters/http/client_authority_filter.cc +1 -1
  74. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +13 -13
  75. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +34 -34
  76. data/src/core/ext/filters/http/server/http_server_filter.cc +26 -25
  77. data/src/core/ext/filters/message_size/message_size_filter.cc +86 -117
  78. data/src/core/ext/filters/message_size/message_size_filter.h +22 -15
  79. data/src/core/ext/filters/rbac/rbac_filter.cc +12 -12
  80. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +728 -530
  81. data/src/core/ext/filters/rbac/rbac_service_config_parser.h +4 -3
  82. data/src/core/ext/filters/server_config_selector/server_config_selector.h +1 -1
  83. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +6 -7
  84. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +17 -21
  85. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +57 -72
  86. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +5 -5
  87. data/src/core/ext/transport/chttp2/transport/bin_encoder.h +1 -1
  88. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +212 -253
  89. data/src/core/ext/transport/chttp2/transport/flow_control.cc +42 -11
  90. data/src/core/ext/transport/chttp2/transport/flow_control.h +4 -3
  91. data/src/core/ext/transport/chttp2/transport/frame_data.cc +16 -15
  92. data/src/core/ext/transport/chttp2/transport/frame_data.h +1 -1
  93. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +13 -13
  94. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +4 -3
  95. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +10 -7
  96. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +15 -17
  97. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +5 -4
  98. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +5 -6
  99. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +1 -1
  100. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +2 -1
  101. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +31 -39
  102. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +7 -6
  103. data/src/core/ext/transport/chttp2/transport/internal.h +24 -8
  104. data/src/core/ext/transport/chttp2/transport/parsing.cc +51 -52
  105. data/src/core/ext/transport/chttp2/transport/varint.cc +2 -3
  106. data/src/core/ext/transport/chttp2/transport/varint.h +11 -8
  107. data/src/core/ext/transport/chttp2/transport/writing.cc +16 -16
  108. data/src/core/ext/transport/inproc/inproc_transport.cc +97 -115
  109. data/src/core/ext/xds/certificate_provider_store.cc +4 -4
  110. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +4 -7
  111. data/src/core/ext/xds/xds_api.cc +15 -68
  112. data/src/core/ext/xds/xds_api.h +3 -7
  113. data/src/core/ext/xds/xds_bootstrap.h +0 -1
  114. data/src/core/ext/xds/xds_bootstrap_grpc.cc +3 -12
  115. data/src/core/ext/xds/xds_bootstrap_grpc.h +16 -1
  116. data/src/core/ext/xds/xds_certificate_provider.cc +22 -25
  117. data/src/core/ext/xds/xds_channel_stack_modifier.cc +0 -1
  118. data/src/core/ext/xds/xds_client.cc +122 -90
  119. data/src/core/ext/xds/xds_client.h +7 -2
  120. data/src/core/ext/xds/xds_client_grpc.cc +5 -24
  121. data/src/core/ext/xds/xds_cluster.cc +291 -183
  122. data/src/core/ext/xds/xds_cluster.h +11 -15
  123. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +32 -29
  124. data/src/core/ext/xds/xds_cluster_specifier_plugin.h +35 -16
  125. data/src/core/ext/xds/xds_common_types.cc +208 -141
  126. data/src/core/ext/xds/xds_common_types.h +19 -13
  127. data/src/core/ext/xds/xds_endpoint.cc +214 -129
  128. data/src/core/ext/xds/xds_endpoint.h +4 -7
  129. data/src/core/ext/xds/xds_http_fault_filter.cc +56 -43
  130. data/src/core/ext/xds/xds_http_fault_filter.h +13 -21
  131. data/src/core/ext/xds/xds_http_filters.cc +60 -73
  132. data/src/core/ext/xds/xds_http_filters.h +67 -19
  133. data/src/core/ext/xds/xds_http_rbac_filter.cc +152 -207
  134. data/src/core/ext/xds/xds_http_rbac_filter.h +12 -15
  135. data/src/core/ext/xds/xds_lb_policy_registry.cc +122 -169
  136. data/src/core/ext/xds/xds_lb_policy_registry.h +10 -11
  137. data/src/core/ext/xds/xds_listener.cc +459 -417
  138. data/src/core/ext/xds/xds_listener.h +43 -47
  139. data/src/core/ext/xds/xds_resource_type.h +3 -11
  140. data/src/core/ext/xds/xds_resource_type_impl.h +8 -13
  141. data/src/core/ext/xds/xds_route_config.cc +94 -80
  142. data/src/core/ext/xds/xds_route_config.h +10 -10
  143. data/src/core/ext/xds/xds_routing.cc +2 -1
  144. data/src/core/ext/xds/xds_routing.h +2 -0
  145. data/src/core/ext/xds/xds_server_config_fetcher.cc +109 -94
  146. data/src/core/ext/xds/xds_transport_grpc.cc +4 -5
  147. data/src/core/lib/address_utils/parse_address.cc +11 -10
  148. data/src/core/lib/channel/channel_args.h +16 -1
  149. data/src/core/lib/channel/channel_stack.cc +23 -20
  150. data/src/core/lib/channel/channel_stack.h +17 -4
  151. data/src/core/lib/channel/channel_stack_builder.cc +4 -7
  152. data/src/core/lib/channel/channel_stack_builder.h +14 -6
  153. data/src/core/lib/channel/channel_stack_builder_impl.cc +25 -7
  154. data/src/core/lib/channel/channel_stack_builder_impl.h +2 -0
  155. data/src/core/lib/channel/channel_trace.cc +4 -5
  156. data/src/core/lib/channel/channelz.cc +1 -1
  157. data/src/core/lib/channel/connected_channel.cc +695 -35
  158. data/src/core/lib/channel/connected_channel.h +0 -4
  159. data/src/core/lib/channel/promise_based_filter.cc +1004 -140
  160. data/src/core/lib/channel/promise_based_filter.h +364 -87
  161. data/src/core/lib/compression/message_compress.cc +5 -5
  162. data/src/core/lib/debug/event_log.cc +88 -0
  163. data/src/core/lib/debug/event_log.h +81 -0
  164. data/src/core/lib/debug/histogram_view.cc +69 -0
  165. data/src/core/lib/{slice/slice_refcount.cc → debug/histogram_view.h} +15 -13
  166. data/src/core/lib/debug/stats.cc +22 -119
  167. data/src/core/lib/debug/stats.h +29 -35
  168. data/src/core/lib/debug/stats_data.cc +224 -73
  169. data/src/core/lib/debug/stats_data.h +263 -122
  170. data/src/core/lib/event_engine/common_closures.h +71 -0
  171. data/src/core/lib/event_engine/default_event_engine.cc +38 -15
  172. data/src/core/lib/event_engine/default_event_engine.h +15 -3
  173. data/src/core/lib/event_engine/default_event_engine_factory.cc +2 -4
  174. data/src/core/lib/event_engine/memory_allocator.cc +1 -1
  175. data/src/core/lib/event_engine/poller.h +10 -4
  176. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +618 -0
  177. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h +129 -0
  178. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +901 -0
  179. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +97 -0
  180. data/src/core/lib/event_engine/posix_engine/event_poller.h +111 -0
  181. data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +74 -0
  182. data/src/core/lib/event_engine/{executor/threaded_executor.cc → posix_engine/event_poller_posix_default.h} +13 -16
  183. data/src/core/lib/event_engine/posix_engine/internal_errqueue.cc +77 -0
  184. data/src/core/lib/event_engine/posix_engine/internal_errqueue.h +179 -0
  185. data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +267 -0
  186. data/src/core/lib/event_engine/posix_engine/lockfree_event.h +73 -0
  187. data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +1270 -0
  188. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +682 -0
  189. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +453 -18
  190. data/src/core/lib/event_engine/posix_engine/posix_engine.h +148 -24
  191. data/src/core/lib/event_engine/posix_engine/posix_engine_closure.h +80 -0
  192. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +1081 -0
  193. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +361 -0
  194. data/src/core/lib/event_engine/posix_engine/timer.h +9 -8
  195. data/src/core/lib/event_engine/posix_engine/timer_manager.cc +57 -194
  196. data/src/core/lib/event_engine/posix_engine/timer_manager.h +21 -49
  197. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +301 -0
  198. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.h +179 -0
  199. data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.cc +126 -0
  200. data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.h +45 -0
  201. data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.cc +151 -0
  202. data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.h +45 -0
  203. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h +76 -0
  204. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.cc +67 -0
  205. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h +37 -0
  206. data/src/core/lib/event_engine/slice.cc +7 -6
  207. data/src/core/lib/event_engine/slice_buffer.cc +2 -2
  208. data/src/core/lib/event_engine/thread_pool.cc +106 -25
  209. data/src/core/lib/event_engine/thread_pool.h +32 -9
  210. data/src/core/lib/event_engine/windows/win_socket.cc +7 -7
  211. data/src/core/lib/event_engine/windows/windows_engine.cc +18 -12
  212. data/src/core/lib/event_engine/windows/windows_engine.h +8 -4
  213. data/src/core/lib/experiments/config.cc +1 -1
  214. data/src/core/lib/experiments/experiments.cc +13 -2
  215. data/src/core/lib/experiments/experiments.h +8 -1
  216. data/src/core/lib/gpr/cpu_linux.cc +6 -2
  217. data/src/core/lib/gpr/log_linux.cc +3 -4
  218. data/src/core/lib/gpr/string.h +1 -1
  219. data/src/core/lib/gpr/tmpfile_posix.cc +3 -2
  220. data/src/core/lib/gprpp/load_file.cc +75 -0
  221. data/src/core/lib/gprpp/load_file.h +33 -0
  222. data/src/core/lib/gprpp/per_cpu.h +46 -0
  223. data/src/core/lib/gprpp/stat_posix.cc +5 -4
  224. data/src/core/lib/gprpp/stat_windows.cc +3 -2
  225. data/src/core/lib/gprpp/status_helper.h +1 -3
  226. data/src/core/lib/gprpp/strerror.cc +41 -0
  227. data/src/core/{ext/xds/xds_resource_type.cc → lib/gprpp/strerror.h} +9 -13
  228. data/src/core/lib/gprpp/thd_windows.cc +1 -2
  229. data/src/core/lib/gprpp/time.cc +3 -4
  230. data/src/core/lib/gprpp/time.h +13 -2
  231. data/src/core/lib/gprpp/validation_errors.h +18 -1
  232. data/src/core/lib/http/httpcli.cc +40 -44
  233. data/src/core/lib/http/httpcli.h +6 -5
  234. data/src/core/lib/http/httpcli_security_connector.cc +4 -6
  235. data/src/core/lib/http/parser.cc +54 -65
  236. data/src/core/lib/iomgr/buffer_list.cc +105 -116
  237. data/src/core/lib/iomgr/buffer_list.h +60 -44
  238. data/src/core/lib/iomgr/call_combiner.cc +11 -10
  239. data/src/core/lib/iomgr/call_combiner.h +3 -4
  240. data/src/core/lib/iomgr/cfstream_handle.cc +13 -16
  241. data/src/core/lib/iomgr/closure.h +49 -5
  242. data/src/core/lib/iomgr/combiner.cc +2 -2
  243. data/src/core/lib/iomgr/endpoint.h +1 -1
  244. data/src/core/lib/iomgr/endpoint_cfstream.cc +26 -25
  245. data/src/core/lib/iomgr/endpoint_pair_posix.cc +2 -2
  246. data/src/core/lib/iomgr/error.cc +27 -42
  247. data/src/core/lib/iomgr/error.h +22 -152
  248. data/src/core/lib/iomgr/ev_apple.cc +4 -4
  249. data/src/core/lib/iomgr/ev_epoll1_linux.cc +26 -25
  250. data/src/core/lib/iomgr/ev_poll_posix.cc +27 -31
  251. data/src/core/lib/iomgr/exec_ctx.cc +3 -4
  252. data/src/core/lib/iomgr/exec_ctx.h +2 -3
  253. data/src/core/lib/iomgr/executor.cc +1 -2
  254. data/src/core/lib/iomgr/internal_errqueue.cc +3 -1
  255. data/src/core/lib/iomgr/iocp_windows.cc +1 -0
  256. data/src/core/lib/iomgr/iomgr_posix.cc +2 -2
  257. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +2 -1
  258. data/src/core/lib/iomgr/iomgr_windows.cc +2 -1
  259. data/src/core/lib/iomgr/load_file.cc +5 -9
  260. data/src/core/lib/iomgr/lockfree_event.cc +10 -10
  261. data/src/core/lib/iomgr/pollset_windows.cc +4 -4
  262. data/src/core/lib/iomgr/python_util.h +2 -2
  263. data/src/core/lib/iomgr/resolve_address.cc +8 -3
  264. data/src/core/lib/iomgr/resolve_address.h +3 -4
  265. data/src/core/lib/iomgr/resolve_address_impl.h +1 -1
  266. data/src/core/lib/iomgr/resolve_address_posix.cc +14 -25
  267. data/src/core/lib/iomgr/resolve_address_posix.h +1 -2
  268. data/src/core/lib/iomgr/resolve_address_windows.cc +14 -17
  269. data/src/core/lib/iomgr/resolve_address_windows.h +1 -2
  270. data/src/core/lib/iomgr/socket_utils_common_posix.cc +30 -29
  271. data/src/core/lib/iomgr/socket_utils_posix.cc +1 -0
  272. data/src/core/lib/iomgr/socket_utils_posix.h +2 -2
  273. data/src/core/lib/iomgr/socket_windows.cc +2 -2
  274. data/src/core/lib/iomgr/tcp_client_cfstream.cc +6 -10
  275. data/src/core/lib/iomgr/tcp_client_posix.cc +31 -35
  276. data/src/core/lib/iomgr/tcp_client_windows.cc +8 -12
  277. data/src/core/lib/iomgr/tcp_posix.cc +92 -108
  278. data/src/core/lib/iomgr/tcp_server_posix.cc +34 -34
  279. data/src/core/lib/iomgr/tcp_server_utils_posix.h +1 -1
  280. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +18 -21
  281. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +12 -13
  282. data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +1 -1
  283. data/src/core/lib/iomgr/tcp_server_windows.cc +26 -29
  284. data/src/core/lib/iomgr/tcp_windows.cc +27 -34
  285. data/src/core/lib/iomgr/timer.h +8 -8
  286. data/src/core/lib/iomgr/timer_generic.cc +9 -15
  287. data/src/core/lib/iomgr/unix_sockets_posix.cc +2 -4
  288. data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +4 -3
  289. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +10 -8
  290. data/src/core/lib/json/json_channel_args.h +42 -0
  291. data/src/core/lib/json/json_object_loader.cc +7 -2
  292. data/src/core/lib/json/json_object_loader.h +22 -0
  293. data/src/core/lib/json/json_util.cc +5 -5
  294. data/src/core/lib/json/json_util.h +4 -4
  295. data/src/core/lib/load_balancing/lb_policy.cc +1 -1
  296. data/src/core/lib/load_balancing/lb_policy.h +4 -0
  297. data/src/core/lib/load_balancing/subchannel_interface.h +0 -7
  298. data/src/core/lib/matchers/matchers.cc +3 -4
  299. data/src/core/lib/promise/activity.cc +16 -2
  300. data/src/core/lib/promise/activity.h +38 -15
  301. data/src/core/lib/promise/arena_promise.h +80 -51
  302. data/src/core/lib/promise/context.h +13 -6
  303. data/src/core/lib/promise/detail/basic_seq.h +9 -28
  304. data/src/core/lib/promise/detail/promise_factory.h +58 -10
  305. data/src/core/lib/promise/detail/status.h +28 -0
  306. data/src/core/lib/promise/detail/switch.h +1455 -0
  307. data/src/core/lib/promise/exec_ctx_wakeup_scheduler.h +3 -1
  308. data/src/core/lib/promise/for_each.h +129 -0
  309. data/src/core/lib/promise/loop.h +7 -5
  310. data/src/core/lib/promise/map_pipe.h +87 -0
  311. data/src/core/lib/promise/pipe.cc +19 -0
  312. data/src/core/lib/promise/pipe.h +505 -0
  313. data/src/core/lib/promise/poll.h +13 -0
  314. data/src/core/lib/promise/seq.h +3 -5
  315. data/src/core/lib/promise/sleep.cc +5 -4
  316. data/src/core/lib/promise/sleep.h +1 -2
  317. data/src/core/lib/promise/try_concurrently.h +341 -0
  318. data/src/core/lib/promise/try_seq.h +10 -13
  319. data/src/core/lib/resolver/server_address.cc +1 -0
  320. data/src/core/lib/resolver/server_address.h +1 -3
  321. data/src/core/lib/resource_quota/api.cc +0 -1
  322. data/src/core/lib/resource_quota/arena.cc +19 -0
  323. data/src/core/lib/resource_quota/arena.h +89 -0
  324. data/src/core/lib/resource_quota/memory_quota.cc +1 -0
  325. data/src/core/lib/security/authorization/grpc_authorization_engine.cc +1 -3
  326. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +4 -2
  327. data/src/core/lib/security/authorization/matchers.cc +25 -22
  328. data/src/core/lib/security/authorization/rbac_policy.cc +2 -3
  329. data/src/core/lib/security/context/security_context.h +10 -0
  330. data/src/core/lib/security/credentials/channel_creds_registry_init.cc +3 -4
  331. data/src/core/lib/security/credentials/composite/composite_credentials.cc +1 -1
  332. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +77 -55
  333. data/src/core/lib/security/credentials/external/aws_request_signer.cc +4 -3
  334. data/src/core/lib/security/credentials/external/external_account_credentials.cc +40 -51
  335. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +17 -21
  336. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +21 -25
  337. data/src/core/lib/security/credentials/fake/fake_credentials.cc +1 -0
  338. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +27 -24
  339. data/src/core/lib/security/credentials/iam/iam_credentials.cc +1 -0
  340. data/src/core/lib/security/credentials/jwt/json_token.cc +1 -2
  341. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +1 -1
  342. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +5 -5
  343. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +24 -30
  344. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +6 -5
  345. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +3 -3
  346. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +19 -27
  347. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +4 -11
  348. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +29 -41
  349. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +1 -1
  350. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +6 -11
  351. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +8 -15
  352. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +2 -2
  353. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +2 -6
  354. data/src/core/lib/security/security_connector/load_system_roots_supported.cc +1 -4
  355. data/src/core/lib/security/security_connector/local/local_security_connector.cc +7 -11
  356. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +9 -14
  357. data/src/core/lib/security/security_connector/ssl_utils.cc +5 -7
  358. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +21 -27
  359. data/src/core/lib/security/transport/client_auth_filter.cc +1 -1
  360. data/src/core/lib/security/transport/secure_endpoint.cc +26 -28
  361. data/src/core/lib/security/transport/security_handshaker.cc +53 -53
  362. data/src/core/lib/security/transport/server_auth_filter.cc +21 -21
  363. data/src/core/lib/security/transport/tsi_error.cc +6 -3
  364. data/src/core/lib/security/util/json_util.cc +4 -5
  365. data/src/core/lib/service_config/service_config.h +1 -1
  366. data/src/core/lib/service_config/service_config_impl.cc +111 -158
  367. data/src/core/lib/service_config/service_config_impl.h +14 -17
  368. data/src/core/lib/service_config/service_config_parser.cc +14 -31
  369. data/src/core/lib/service_config/service_config_parser.h +14 -10
  370. data/src/core/lib/slice/b64.cc +2 -2
  371. data/src/core/lib/slice/slice.cc +7 -1
  372. data/src/core/lib/slice/slice.h +19 -6
  373. data/src/core/lib/slice/slice_buffer.cc +13 -14
  374. data/src/core/lib/slice/slice_internal.h +13 -21
  375. data/src/core/lib/slice/slice_refcount.h +34 -19
  376. data/src/core/lib/surface/byte_buffer.cc +3 -4
  377. data/src/core/lib/surface/byte_buffer_reader.cc +4 -4
  378. data/src/core/lib/surface/call.cc +1366 -239
  379. data/src/core/lib/surface/call.h +44 -0
  380. data/src/core/lib/surface/call_details.cc +3 -3
  381. data/src/core/lib/surface/call_trace.cc +113 -0
  382. data/src/core/lib/surface/call_trace.h +30 -0
  383. data/src/core/lib/surface/channel.cc +44 -49
  384. data/src/core/lib/surface/channel.h +9 -1
  385. data/src/core/lib/surface/channel_ping.cc +1 -1
  386. data/src/core/lib/surface/channel_stack_type.cc +4 -0
  387. data/src/core/lib/surface/channel_stack_type.h +2 -0
  388. data/src/core/lib/surface/completion_queue.cc +38 -52
  389. data/src/core/lib/surface/init.cc +8 -39
  390. data/src/core/lib/surface/init_internally.h +8 -0
  391. data/src/core/lib/surface/lame_client.cc +10 -8
  392. data/src/core/lib/surface/server.cc +48 -70
  393. data/src/core/lib/surface/server.h +3 -4
  394. data/src/core/lib/surface/validate_metadata.cc +11 -12
  395. data/src/core/lib/surface/version.cc +2 -2
  396. data/src/core/lib/transport/connectivity_state.cc +2 -2
  397. data/src/core/lib/transport/error_utils.cc +34 -28
  398. data/src/core/lib/transport/error_utils.h +3 -3
  399. data/src/core/lib/transport/handshaker.cc +14 -14
  400. data/src/core/lib/transport/handshaker.h +1 -1
  401. data/src/core/lib/transport/handshaker_factory.h +26 -0
  402. data/src/core/lib/transport/handshaker_registry.cc +8 -2
  403. data/src/core/lib/transport/handshaker_registry.h +3 -4
  404. data/src/core/lib/transport/http_connect_handshaker.cc +23 -24
  405. data/src/core/lib/transport/metadata_batch.h +17 -1
  406. data/src/core/lib/transport/parsed_metadata.cc +2 -6
  407. data/src/core/lib/transport/tcp_connect_handshaker.cc +15 -20
  408. data/src/core/lib/transport/transport.cc +63 -17
  409. data/src/core/lib/transport/transport.h +64 -68
  410. data/src/core/lib/transport/transport_impl.h +1 -1
  411. data/src/core/lib/transport/transport_op_string.cc +7 -6
  412. data/src/core/plugin_registry/grpc_plugin_registry.cc +6 -10
  413. data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +2 -14
  414. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +10 -10
  415. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +8 -8
  416. data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +2 -1
  417. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +7 -7
  418. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.cc +7 -6
  419. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +1 -1
  420. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +5 -5
  421. data/src/core/tsi/fake_transport_security.cc +3 -3
  422. data/src/core/tsi/ssl/key_logging/ssl_key_logging.cc +7 -3
  423. data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +1 -1
  424. data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +6 -2
  425. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +0 -2
  426. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +0 -3
  427. data/src/ruby/lib/grpc/version.rb +1 -1
  428. data/src/ruby/spec/channel_spec.rb +0 -43
  429. data/src/ruby/spec/generic/active_call_spec.rb +12 -3
  430. data/third_party/abseil-cpp/absl/cleanup/cleanup.h +140 -0
  431. data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +100 -0
  432. data/third_party/zlib/compress.c +3 -3
  433. data/third_party/zlib/crc32.c +21 -12
  434. data/third_party/zlib/deflate.c +112 -106
  435. data/third_party/zlib/deflate.h +2 -2
  436. data/third_party/zlib/gzlib.c +1 -1
  437. data/third_party/zlib/gzread.c +3 -5
  438. data/third_party/zlib/gzwrite.c +1 -1
  439. data/third_party/zlib/infback.c +10 -7
  440. data/third_party/zlib/inflate.c +5 -2
  441. data/third_party/zlib/inftrees.c +2 -2
  442. data/third_party/zlib/inftrees.h +1 -1
  443. data/third_party/zlib/trees.c +61 -62
  444. data/third_party/zlib/uncompr.c +2 -2
  445. data/third_party/zlib/zconf.h +16 -3
  446. data/third_party/zlib/zlib.h +10 -10
  447. data/third_party/zlib/zutil.c +9 -7
  448. data/third_party/zlib/zutil.h +1 -0
  449. metadata +55 -18
  450. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +0 -188
  451. data/src/core/ext/filters/fault_injection/service_config_parser.cc +0 -187
  452. data/src/core/lib/event_engine/executor/threaded_executor.h +0 -44
  453. data/src/core/lib/gpr/murmur_hash.cc +0 -82
  454. data/src/core/lib/gpr/murmur_hash.h +0 -29
  455. data/src/core/lib/gpr/tls.h +0 -156
  456. data/src/core/lib/promise/call_push_pull.h +0 -148
  457. data/src/core/lib/slice/slice_api.cc +0 -39
  458. data/src/core/lib/slice/slice_buffer_api.cc +0 -35
  459. data/src/core/lib/slice/slice_refcount_base.h +0 -60
@@ -1,187 +0,0 @@
1
- //
2
- // Copyright 2021 gRPC authors.
3
- //
4
- // Licensed under the Apache License, Version 2.0 (the "License");
5
- // you may not use this file except in compliance with the License.
6
- // You may obtain a copy of the License at
7
- //
8
- // http://www.apache.org/licenses/LICENSE-2.0
9
- //
10
- // Unless required by applicable law or agreed to in writing, software
11
- // distributed under the License is distributed on an "AS IS" BASIS,
12
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- // See the License for the specific language governing permissions and
14
- // limitations under the License.
15
- //
16
-
17
- #include <grpc/support/port_platform.h>
18
-
19
- #include "src/core/ext/filters/fault_injection/service_config_parser.h"
20
-
21
- #include <algorithm>
22
- #include <vector>
23
-
24
- #include "absl/memory/memory.h"
25
- #include "absl/status/status.h"
26
- #include "absl/strings/str_cat.h"
27
- #include "absl/types/optional.h"
28
-
29
- #include "src/core/ext/filters/fault_injection/fault_injection_filter.h"
30
- #include "src/core/lib/channel/channel_args.h"
31
- #include "src/core/lib/channel/status_util.h"
32
- #include "src/core/lib/iomgr/error.h"
33
- #include "src/core/lib/json/json_util.h"
34
-
35
- namespace grpc_core {
36
-
37
- namespace {
38
-
39
- std::vector<FaultInjectionMethodParsedConfig::FaultInjectionPolicy>
40
- ParseFaultInjectionPolicy(const Json::Array& policies_json_array,
41
- std::vector<grpc_error_handle>* error_list) {
42
- std::vector<FaultInjectionMethodParsedConfig::FaultInjectionPolicy> policies;
43
- for (size_t i = 0; i < policies_json_array.size(); i++) {
44
- FaultInjectionMethodParsedConfig::FaultInjectionPolicy
45
- fault_injection_policy;
46
- std::vector<grpc_error_handle> sub_error_list;
47
- if (policies_json_array[i].type() != Json::Type::OBJECT) {
48
- error_list->push_back(GRPC_ERROR_CREATE_FROM_CPP_STRING(absl::StrCat(
49
- "faultInjectionPolicy index ", i, " is not a JSON object")));
50
- continue;
51
- }
52
- const Json::Object& json_object = policies_json_array[i].object_value();
53
- // Parse abort_code
54
- std::string abort_code_string;
55
- if (ParseJsonObjectField(json_object, "abortCode", &abort_code_string,
56
- &sub_error_list, false)) {
57
- if (!grpc_status_code_from_string(abort_code_string.c_str(),
58
- &(fault_injection_policy.abort_code))) {
59
- sub_error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
60
- "field:abortCode error:failed to parse status code"));
61
- }
62
- }
63
- // Parse abort_message
64
- if (!ParseJsonObjectField(json_object, "abortMessage",
65
- &fault_injection_policy.abort_message,
66
- &sub_error_list, false)) {
67
- fault_injection_policy.abort_message = "Fault injected";
68
- }
69
- // Parse abort_code_header
70
- ParseJsonObjectField(json_object, "abortCodeHeader",
71
- &fault_injection_policy.abort_code_header,
72
- &sub_error_list, false);
73
- // Parse abort_percentage_header
74
- ParseJsonObjectField(json_object, "abortPercentageHeader",
75
- &fault_injection_policy.abort_percentage_header,
76
- &sub_error_list, false);
77
- // Parse abort_percentage_numerator
78
- ParseJsonObjectField(json_object, "abortPercentageNumerator",
79
- &fault_injection_policy.abort_percentage_numerator,
80
- &sub_error_list, false);
81
- // Parse abort_percentage_denominator
82
- if (ParseJsonObjectField(
83
- json_object, "abortPercentageDenominator",
84
- &fault_injection_policy.abort_percentage_denominator,
85
- &sub_error_list, false)) {
86
- if (fault_injection_policy.abort_percentage_denominator != 100 &&
87
- fault_injection_policy.abort_percentage_denominator != 10000 &&
88
- fault_injection_policy.abort_percentage_denominator != 1000000) {
89
- sub_error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
90
- "field:abortPercentageDenominator error:Denominator can only be "
91
- "one of "
92
- "100, 10000, 1000000"));
93
- }
94
- }
95
- // Parse delay
96
- ParseJsonObjectFieldAsDuration(json_object, "delay",
97
- &fault_injection_policy.delay,
98
- &sub_error_list, false);
99
- // Parse delay_header
100
- ParseJsonObjectField(json_object, "delayHeader",
101
- &fault_injection_policy.delay_header, &sub_error_list,
102
- false);
103
- // Parse delay_percentage_header
104
- ParseJsonObjectField(json_object, "delayPercentageHeader",
105
- &fault_injection_policy.delay_percentage_header,
106
- &sub_error_list, false);
107
- // Parse delay_percentage_numerator
108
- ParseJsonObjectField(json_object, "delayPercentageNumerator",
109
- &fault_injection_policy.delay_percentage_numerator,
110
- &sub_error_list, false);
111
- // Parse delay_percentage_denominator
112
- if (ParseJsonObjectField(
113
- json_object, "delayPercentageDenominator",
114
- &fault_injection_policy.delay_percentage_denominator,
115
- &sub_error_list, false)) {
116
- if (fault_injection_policy.delay_percentage_denominator != 100 &&
117
- fault_injection_policy.delay_percentage_denominator != 10000 &&
118
- fault_injection_policy.delay_percentage_denominator != 1000000) {
119
- sub_error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
120
- "field:delayPercentageDenominator error:Denominator can only be "
121
- "one of "
122
- "100, 10000, 1000000"));
123
- }
124
- }
125
- // Parse max_faults
126
- static_assert(
127
- std::is_unsigned<decltype(fault_injection_policy.max_faults)>::value,
128
- "maxFaults should be unsigned");
129
- ParseJsonObjectField(json_object, "maxFaults",
130
- &fault_injection_policy.max_faults, &sub_error_list,
131
- false);
132
- if (!sub_error_list.empty()) {
133
- error_list->push_back(GRPC_ERROR_CREATE_FROM_VECTOR_AND_CPP_STRING(
134
- absl::StrCat("failed to parse faultInjectionPolicy index ", i),
135
- &sub_error_list));
136
- }
137
- policies.push_back(std::move(fault_injection_policy));
138
- }
139
- return policies;
140
- }
141
-
142
- } // namespace
143
-
144
- absl::StatusOr<std::unique_ptr<ServiceConfigParser::ParsedConfig>>
145
- FaultInjectionServiceConfigParser::ParsePerMethodParams(const ChannelArgs& args,
146
- const Json& json) {
147
- // Only parse fault injection policy if the following channel arg is present.
148
- if (!args.GetBool(GRPC_ARG_PARSE_FAULT_INJECTION_METHOD_CONFIG)
149
- .value_or(false)) {
150
- return nullptr;
151
- }
152
- // Parse fault injection policy from given Json
153
- std::vector<FaultInjectionMethodParsedConfig::FaultInjectionPolicy>
154
- fault_injection_policies;
155
- std::vector<grpc_error_handle> error_list;
156
- const Json::Array* policies_json_array;
157
- if (ParseJsonObjectField(json.object_value(), "faultInjectionPolicy",
158
- &policies_json_array, &error_list)) {
159
- fault_injection_policies =
160
- ParseFaultInjectionPolicy(*policies_json_array, &error_list);
161
- }
162
- if (!error_list.empty()) {
163
- grpc_error_handle error =
164
- GRPC_ERROR_CREATE_FROM_VECTOR("Fault injection parser", &error_list);
165
- absl::Status status = absl::InvalidArgumentError(
166
- absl::StrCat("error parsing fault injection method parameters: ",
167
- grpc_error_std_string(error)));
168
- GRPC_ERROR_UNREF(error);
169
- return status;
170
- }
171
- if (fault_injection_policies.empty()) return nullptr;
172
- return absl::make_unique<FaultInjectionMethodParsedConfig>(
173
- std::move(fault_injection_policies));
174
- }
175
-
176
- void FaultInjectionServiceConfigParser::Register(
177
- CoreConfiguration::Builder* builder) {
178
- builder->service_config_parser()->RegisterParser(
179
- absl::make_unique<FaultInjectionServiceConfigParser>());
180
- }
181
-
182
- size_t FaultInjectionServiceConfigParser::ParserIndex() {
183
- return CoreConfiguration::Get().service_config_parser().GetParserIndex(
184
- parser_name());
185
- }
186
-
187
- } // namespace grpc_core
@@ -1,44 +0,0 @@
1
- // Copyright 2022 gRPC authors.
2
- //
3
- // Licensed under the Apache License, Version 2.0 (the "License");
4
- // you may not use this file except in compliance with the License.
5
- // You may obtain a copy of the License at
6
- //
7
- // http://www.apache.org/licenses/LICENSE-2.0
8
- //
9
- // Unless required by applicable law or agreed to in writing, software
10
- // distributed under the License is distributed on an "AS IS" BASIS,
11
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- // See the License for the specific language governing permissions and
13
- // limitations under the License.
14
-
15
- #ifndef GRPC_CORE_LIB_EVENT_ENGINE_EXECUTOR_THREADED_EXECUTOR_H
16
- #define GRPC_CORE_LIB_EVENT_ENGINE_EXECUTOR_THREADED_EXECUTOR_H
17
-
18
- #include <grpc/support/port_platform.h>
19
-
20
- #include "absl/functional/any_invocable.h"
21
-
22
- #include <grpc/event_engine/event_engine.h>
23
-
24
- #include "src/core/lib/event_engine/executor/executor.h"
25
- #include "src/core/lib/event_engine/thread_pool.h"
26
-
27
- namespace grpc_event_engine {
28
- namespace experimental {
29
-
30
- class ThreadedExecutor : public Executor {
31
- public:
32
- explicit ThreadedExecutor(int reserve_threads);
33
- ~ThreadedExecutor() override = default;
34
- void Run(EventEngine::Closure* closure) override;
35
- void Run(absl::AnyInvocable<void()> closure) override;
36
-
37
- private:
38
- ThreadPool thread_pool_;
39
- };
40
-
41
- } // namespace experimental
42
- } // namespace grpc_event_engine
43
-
44
- #endif // GRPC_CORE_LIB_EVENT_ENGINE_EXECUTOR_THREADED_EXECUTOR_H
@@ -1,82 +0,0 @@
1
- /*
2
- *
3
- * Copyright 2015 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
- */
18
-
19
- #include <grpc/support/port_platform.h>
20
-
21
- #include "src/core/lib/gpr/murmur_hash.h"
22
-
23
- #include <string.h>
24
-
25
- #include "absl/base/attributes.h"
26
-
27
- #define ROTL32(x, r) (((x) << (r)) | ((x) >> (32 - (r))))
28
-
29
- #define FMIX32(h) \
30
- (h) ^= (h) >> 16; \
31
- (h) *= 0x85ebca6b; \
32
- (h) ^= (h) >> 13; \
33
- (h) *= 0xc2b2ae35; \
34
- (h) ^= (h) >> 16;
35
-
36
- uint32_t gpr_murmur_hash3(const void* key, size_t len, uint32_t seed) {
37
- uint32_t h1 = seed;
38
- uint32_t k1;
39
-
40
- const uint32_t c1 = 0xcc9e2d51;
41
- const uint32_t c2 = 0x1b873593;
42
-
43
- const uint8_t* keyptr = static_cast<const uint8_t*>(key);
44
- const size_t bsize = sizeof(k1);
45
- const size_t nblocks = len / bsize;
46
-
47
- /* body */
48
- for (size_t i = 0; i < nblocks; i++, keyptr += bsize) {
49
- memcpy(&k1, keyptr, bsize);
50
-
51
- k1 *= c1;
52
- k1 = ROTL32(k1, 15);
53
- k1 *= c2;
54
-
55
- h1 ^= k1;
56
- h1 = ROTL32(h1, 13);
57
- h1 = h1 * 5 + 0xe6546b64;
58
- }
59
-
60
- k1 = 0;
61
-
62
- /* tail */
63
- switch (len & 3) {
64
- case 3:
65
- k1 ^= (static_cast<uint32_t>(keyptr[2])) << 16;
66
- ABSL_FALLTHROUGH_INTENDED;
67
- case 2:
68
- k1 ^= (static_cast<uint32_t>(keyptr[1])) << 8;
69
- ABSL_FALLTHROUGH_INTENDED;
70
- case 1:
71
- k1 ^= keyptr[0];
72
- k1 *= c1;
73
- k1 = ROTL32(k1, 15);
74
- k1 *= c2;
75
- h1 ^= k1;
76
- };
77
-
78
- /* finalization */
79
- h1 ^= static_cast<uint32_t>(len);
80
- FMIX32(h1);
81
- return h1;
82
- }
@@ -1,29 +0,0 @@
1
- /*
2
- *
3
- * Copyright 2015 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
- */
18
-
19
- #ifndef GRPC_CORE_LIB_GPR_MURMUR_HASH_H
20
- #define GRPC_CORE_LIB_GPR_MURMUR_HASH_H
21
-
22
- #include <grpc/support/port_platform.h>
23
-
24
- #include <stddef.h>
25
-
26
- /* compute the hash of key (length len) */
27
- uint32_t gpr_murmur_hash3(const void* key, size_t len, uint32_t seed);
28
-
29
- #endif /* GRPC_CORE_LIB_GPR_MURMUR_HASH_H */
@@ -1,156 +0,0 @@
1
- /*
2
- *
3
- * Copyright 2015 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
- */
18
-
19
- #ifndef GRPC_CORE_LIB_GPR_TLS_H
20
- #define GRPC_CORE_LIB_GPR_TLS_H
21
-
22
- #include <grpc/support/port_platform.h>
23
-
24
- #include <type_traits>
25
-
26
- /** Thread local storage.
27
-
28
- Usage is the same as C++ thread_local. Declaring a thread local:
29
- static GPR_THREAD_LOCAL(uint32_t) foo;
30
-
31
- ALL functions here may be implemented as macros. */
32
-
33
- namespace grpc_core {
34
-
35
- // This class is never instantiated. It exists to statically ensure that all
36
- // TLS usage is compatible with the most restrictive implementation, allowing
37
- // developers to write correct code regardless of the platform they develop on.
38
- template <typename T>
39
- class TlsTypeConstrainer {
40
- static_assert(std::is_trivial<T>::value,
41
- "TLS support is limited to trivial types");
42
-
43
- public:
44
- using Type = T;
45
- };
46
-
47
- } // namespace grpc_core
48
-
49
- #if defined(GPR_PTHREAD_TLS)
50
-
51
- #include <pthread.h>
52
-
53
- #include <algorithm>
54
- #include <array>
55
- #include <cstring>
56
-
57
- namespace grpc_core {
58
-
59
- template <typename T>
60
- class PthreadTlsImpl : TlsTypeConstrainer<T> {
61
- public:
62
- PthreadTlsImpl(const PthreadTlsImpl&) = delete;
63
- PthreadTlsImpl& operator=(const PthreadTlsImpl&) = delete;
64
-
65
- // Achtung! This class emulates C++ `thread_local` using pthread keys. Each
66
- // instance of this class is a stand in for a C++ `thread_local`. Think of
67
- // each `thread_local` as a *global* pthread_key_t and a type tag. An
68
- // important consequence of this is that the lifetime of a `pthread_key_t`
69
- // is precisely the lifetime of an instance of this class. To understand why
70
- // this is, consider the following scenario given a fictional implementation
71
- // of this class which creates and destroys its `pthread_key_t` each time
72
- // a given block of code runs (all actions take place on a single thread):
73
- //
74
- // - instance 1 (type tag = T*) is initialized, is assigned `pthread_key_t` 1
75
- // - instance 2 (type tag = int) is initialized, is assigned `pthread_key_t` 2
76
- // - instances 1 and 2 store and retrieve values; all is well
77
- // - instances 1 and 2 are de-initialized; their keys are released to the pool
78
- //
79
- // - another run commences
80
- // - instance 1 receives key 2
81
- // - a value is read from instance 1, it observes a value of type int, but
82
- // interprets it as T*; undefined behavior, kaboom
83
- //
84
- // To properly ensure these invariants are upheld the `pthread_key_t` must be
85
- // `const`, which means it can only be released in the destructor. This is a
86
- // a violation of the style guide, since these objects are always static (see
87
- // footnote) but this code is used in sufficiently narrow circumstances to
88
- // justify the deviation.
89
- //
90
- // https://google.github.io/styleguide/cppguide.html#Static_and_Global_Variables
91
- PthreadTlsImpl()
92
- : keys_([]() {
93
- typename std::remove_const<decltype(PthreadTlsImpl::keys_)>::type
94
- keys;
95
- for (pthread_key_t& key : keys) {
96
- if (0 != pthread_key_create(&key, nullptr)) abort();
97
- }
98
- return keys;
99
- }()) {}
100
- PthreadTlsImpl(T t) : PthreadTlsImpl() { *this = t; }
101
- ~PthreadTlsImpl() {
102
- for (pthread_key_t key : keys_) {
103
- if (0 != pthread_key_delete(key)) abort();
104
- }
105
- }
106
-
107
- operator T() const {
108
- T t;
109
- char* dst = reinterpret_cast<char*>(&t);
110
- for (pthread_key_t key : keys_) {
111
- uintptr_t src = uintptr_t(pthread_getspecific(key));
112
- size_t remaining = reinterpret_cast<char*>(&t + 1) - dst;
113
- size_t step = std::min(sizeof(src), remaining);
114
- memcpy(dst, &src, step);
115
- dst += step;
116
- }
117
- return t;
118
- }
119
-
120
- T operator->() const {
121
- static_assert(std::is_pointer<T>::value,
122
- "operator-> only usable on pointers");
123
- return this->operator T();
124
- }
125
-
126
- T operator=(T t) {
127
- char* src = reinterpret_cast<char*>(&t);
128
- for (pthread_key_t key : keys_) {
129
- uintptr_t dst;
130
- size_t remaining = reinterpret_cast<char*>(&t + 1) - src;
131
- size_t step = std::min(sizeof(dst), remaining);
132
- memcpy(&dst, src, step);
133
- if (0 != pthread_setspecific(key, reinterpret_cast<void*>(dst))) abort();
134
- src += step;
135
- }
136
- return t;
137
- }
138
-
139
- private:
140
- const std::array<pthread_key_t,
141
- (sizeof(T) + sizeof(void*) - 1) / sizeof(void*)>
142
- keys_;
143
- };
144
-
145
- } // namespace grpc_core
146
-
147
- #define GPR_THREAD_LOCAL(type) grpc_core::PthreadTlsImpl<type>
148
-
149
- #else
150
-
151
- #define GPR_THREAD_LOCAL(type) \
152
- thread_local typename grpc_core::TlsTypeConstrainer<type>::Type
153
-
154
- #endif
155
-
156
- #endif /* GRPC_CORE_LIB_GPR_TLS_H */
@@ -1,148 +0,0 @@
1
- // Copyright 2022 gRPC authors.
2
- //
3
- // Licensed under the Apache License, Version 2.0 (the "License");
4
- // you may not use this file except in compliance with the License.
5
- // You may obtain a copy of the License at
6
- //
7
- // http://www.apache.org/licenses/LICENSE-2.0
8
- //
9
- // Unless required by applicable law or agreed to in writing, software
10
- // distributed under the License is distributed on an "AS IS" BASIS,
11
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- // See the License for the specific language governing permissions and
13
- // limitations under the License.
14
-
15
- #ifndef GRPC_CORE_LIB_PROMISE_CALL_PUSH_PULL_H
16
- #define GRPC_CORE_LIB_PROMISE_CALL_PUSH_PULL_H
17
-
18
- #include <grpc/support/port_platform.h>
19
-
20
- #include <assert.h>
21
-
22
- #include <type_traits>
23
-
24
- #include "absl/types/variant.h"
25
-
26
- #include "src/core/lib/gprpp/bitset.h"
27
- #include "src/core/lib/gprpp/construct_destruct.h"
28
- #include "src/core/lib/promise/detail/promise_like.h"
29
- #include "src/core/lib/promise/detail/status.h"
30
- #include "src/core/lib/promise/poll.h"
31
-
32
- namespace grpc_core {
33
-
34
- namespace promise_detail {
35
-
36
- template <typename FMain, typename FPush, typename FPull>
37
- class CallPushPull {
38
- public:
39
- CallPushPull(FMain f_main, FPush f_push, FPull f_pull)
40
- : push_(std::move(f_push)), pull_(std::move(f_pull)) {
41
- Construct(&main_, std::move(f_main));
42
- }
43
-
44
- CallPushPull(const CallPushPull&) = delete;
45
- CallPushPull& operator=(const CallPushPull&) = delete;
46
- CallPushPull(CallPushPull&& other) noexcept
47
- : done_(other.done_),
48
- push_(std::move(other.push_)),
49
- pull_(std::move(other.pull_)) {
50
- assert(!done_.is_set(kDoneMain));
51
- Construct(&main_, std::move(other.main_));
52
- }
53
-
54
- CallPushPull& operator=(CallPushPull&& other) noexcept {
55
- assert(!done_.is_set(kDoneMain));
56
- done_ = other.done_;
57
- assert(!done_.is_set(kDoneMain));
58
- push_ = std::move(other.push_);
59
- main_ = std::move(other.main_);
60
- pull_ = std::move(other.pull_);
61
- return *this;
62
- }
63
-
64
- ~CallPushPull() {
65
- if (done_.is_set(kDoneMain)) {
66
- Destruct(&result_);
67
- } else {
68
- Destruct(&main_);
69
- }
70
- }
71
-
72
- using Result =
73
- typename PollTraits<decltype(std::declval<PromiseLike<FMain>>()())>::Type;
74
-
75
- Poll<Result> operator()() {
76
- if (!done_.is_set(kDonePush)) {
77
- auto p = push_();
78
- if (auto* status = absl::get_if<kPollReadyIdx>(&p)) {
79
- if (IsStatusOk(*status)) {
80
- done_.set(kDonePush);
81
- } else {
82
- return Result(std::move(*status));
83
- }
84
- }
85
- }
86
- if (!done_.is_set(kDoneMain)) {
87
- auto p = main_();
88
- if (auto* status = absl::get_if<kPollReadyIdx>(&p)) {
89
- if (IsStatusOk(*status)) {
90
- done_.set(kDoneMain);
91
- Destruct(&main_);
92
- Construct(&result_, std::move(*status));
93
- } else {
94
- return std::move(*status);
95
- }
96
- }
97
- }
98
- if (!done_.is_set(kDonePull)) {
99
- auto p = pull_();
100
- if (auto* status = absl::get_if<kPollReadyIdx>(&p)) {
101
- if (IsStatusOk(*status)) {
102
- done_.set(kDonePull);
103
- } else {
104
- return Result(std::move(*status));
105
- }
106
- }
107
- }
108
- if (done_.all()) return std::move(result_);
109
- return Pending{};
110
- }
111
-
112
- private:
113
- enum { kDonePull = 0, kDoneMain = 1, kDonePush = 2 };
114
- BitSet<3> done_;
115
- GPR_NO_UNIQUE_ADDRESS PromiseLike<FPush> push_;
116
- union {
117
- PromiseLike<FMain> main_;
118
- Result result_;
119
- };
120
- GPR_NO_UNIQUE_ADDRESS PromiseLike<FPull> pull_;
121
- };
122
-
123
- } // namespace promise_detail
124
-
125
- // For promises representing calls a common pattern emerges:
126
- // There's a process pushing data down the stack, a process handling the main
127
- // call part, and a process pulling data back up the stack.
128
- //
129
- // This can reasonably be represented by the right combinations of TryJoins and
130
- // Maps, but since the structure is fundamental to the domain we introduce
131
- // this simple helper to make it easier to write the common case.
132
- //
133
- // It takes three promises: the main call, the push and the pull.
134
- // When polling, the push is polled first, then the main call (descending the
135
- // stack), then the pull (as we ascend once more).
136
- //
137
- // This strategy minimizes repolls.
138
- template <typename FMain, typename FPush, typename FPull>
139
- promise_detail::CallPushPull<FMain, FPush, FPull> CallPushPull(FMain f_main,
140
- FPush f_push,
141
- FPull f_pull) {
142
- return promise_detail::CallPushPull<FMain, FPush, FPull>(
143
- std::move(f_main), std::move(f_push), std::move(f_pull));
144
- }
145
-
146
- } // namespace grpc_core
147
-
148
- #endif // GRPC_CORE_LIB_PROMISE_CALL_PUSH_PULL_H
@@ -1,39 +0,0 @@
1
- /*
2
- *
3
- * Copyright 2015 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
- */
18
-
19
- #include <grpc/support/port_platform.h>
20
-
21
- #include <grpc/slice.h>
22
-
23
- #include "src/core/lib/iomgr/exec_ctx.h"
24
- #include "src/core/lib/slice/slice_refcount.h"
25
-
26
- /* Public API */
27
- grpc_slice grpc_slice_ref(grpc_slice slice) {
28
- return grpc_slice_ref_internal(slice);
29
- }
30
-
31
- /* Public API */
32
- void grpc_slice_unref(grpc_slice slice) {
33
- if (grpc_core::ExecCtx::Get() == nullptr) {
34
- grpc_core::ExecCtx exec_ctx;
35
- grpc_slice_unref_internal(slice);
36
- } else {
37
- grpc_slice_unref_internal(slice);
38
- }
39
- }