grpc 1.41.0 → 1.42.0.pre1

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

Potentially problematic release.


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

Files changed (519) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +57 -44
  3. data/etc/roots.pem +335 -326
  4. data/include/grpc/event_engine/event_engine.h +82 -42
  5. data/include/grpc/event_engine/internal/memory_allocator_impl.h +98 -0
  6. data/include/grpc/event_engine/memory_allocator.h +210 -0
  7. data/include/grpc/grpc.h +4 -0
  8. data/include/grpc/grpc_security.h +18 -0
  9. data/include/grpc/grpc_security_constants.h +1 -0
  10. data/include/grpc/impl/codegen/port_platform.h +7 -0
  11. data/src/core/ext/filters/client_channel/backend_metric.cc +18 -19
  12. data/src/core/ext/filters/client_channel/backup_poller.cc +2 -1
  13. data/src/core/ext/filters/client_channel/channel_connectivity.cc +71 -89
  14. data/src/core/ext/filters/client_channel/client_channel.cc +187 -252
  15. data/src/core/ext/filters/client_channel/client_channel.h +74 -27
  16. data/src/core/ext/filters/client_channel/client_channel_factory.cc +1 -1
  17. data/src/core/ext/filters/client_channel/client_channel_factory.h +17 -19
  18. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +8 -14
  19. data/src/core/ext/filters/client_channel/config_selector.cc +1 -1
  20. data/src/core/ext/filters/client_channel/config_selector.h +4 -5
  21. data/src/core/ext/filters/client_channel/connector.h +18 -18
  22. data/src/core/ext/filters/client_channel/dynamic_filters.cc +1 -1
  23. data/src/core/ext/filters/client_channel/global_subchannel_pool.h +0 -1
  24. data/src/core/ext/filters/client_channel/health/health_check_client.cc +12 -11
  25. data/src/core/ext/filters/client_channel/http_connect_handshaker.h +1 -1
  26. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +4 -0
  27. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +6 -15
  28. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +166 -82
  29. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +4 -0
  30. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +1 -1
  31. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +2 -4
  32. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +23 -7
  33. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +15 -10
  34. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +2 -3
  35. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +2502 -0
  36. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +6 -1
  37. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +7 -1
  38. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +6 -2
  39. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h +1 -1
  40. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +5 -0
  41. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +8 -1
  42. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +7 -16
  43. data/src/core/ext/filters/client_channel/lb_policy.h +11 -1
  44. data/src/core/ext/filters/client_channel/lb_policy_factory.h +1 -0
  45. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +139 -0
  46. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +11 -5
  47. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +3 -3
  48. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +12 -39
  49. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +21 -1
  50. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +6 -2
  51. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +3 -1
  52. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +77 -68
  53. data/src/core/ext/filters/client_channel/resolver.h +1 -1
  54. data/src/core/ext/filters/client_channel/resolver_factory.h +2 -0
  55. data/src/core/ext/filters/client_channel/resolver_registry.cc +6 -8
  56. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +1 -1
  57. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +1 -1
  58. data/src/core/ext/filters/client_channel/retry_filter.cc +48 -86
  59. data/src/core/ext/filters/client_channel/retry_service_config.h +1 -1
  60. data/src/core/ext/filters/client_channel/retry_throttle.cc +17 -48
  61. data/src/core/ext/filters/client_channel/server_address.h +1 -1
  62. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +49 -36
  63. data/src/core/ext/filters/client_channel/subchannel.cc +85 -143
  64. data/src/core/ext/filters/client_channel/subchannel.h +29 -49
  65. data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +22 -7
  66. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +11 -2
  67. data/src/core/ext/filters/client_idle/client_idle_filter.cc +27 -210
  68. data/src/core/ext/filters/client_idle/idle_filter_state.cc +96 -0
  69. data/src/core/ext/filters/client_idle/idle_filter_state.h +66 -0
  70. data/src/core/ext/filters/deadline/deadline_filter.cc +23 -26
  71. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +19 -19
  72. data/src/core/ext/filters/fault_injection/service_config_parser.cc +0 -1
  73. data/src/core/ext/filters/fault_injection/service_config_parser.h +1 -1
  74. data/src/core/ext/filters/http/client/http_client_filter.cc +41 -44
  75. data/src/core/ext/filters/http/client_authority_filter.cc +14 -15
  76. data/src/core/ext/filters/http/http_filters_plugin.cc +53 -71
  77. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +17 -12
  78. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +1 -1
  79. data/src/core/ext/filters/http/server/http_server_filter.cc +72 -69
  80. data/src/core/ext/filters/max_age/max_age_filter.cc +24 -26
  81. data/src/core/ext/filters/message_size/message_size_filter.cc +19 -16
  82. data/src/core/ext/filters/message_size/message_size_filter.h +1 -1
  83. data/src/core/ext/{filters/client_channel → service_config}/service_config.cc +2 -2
  84. data/src/core/ext/{filters/client_channel → service_config}/service_config.h +4 -4
  85. data/src/core/ext/service_config/service_config_call_data.h +72 -0
  86. data/src/core/ext/{filters/client_channel → service_config}/service_config_parser.cc +3 -3
  87. data/src/core/ext/{filters/client_channel → service_config}/service_config_parser.h +8 -6
  88. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +2 -5
  89. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +19 -24
  90. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +27 -50
  91. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +14 -16
  92. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +59 -58
  93. data/src/core/ext/transport/chttp2/transport/flow_control.cc +19 -16
  94. data/src/core/ext/transport/chttp2/transport/flow_control.h +4 -4
  95. data/src/core/ext/transport/chttp2/transport/frame_data.cc +4 -4
  96. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +2 -1
  97. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +2 -1
  98. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +2 -3
  99. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +2 -2
  100. data/src/core/ext/transport/chttp2/transport/hpack_constants.h +1 -1
  101. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +41 -1
  102. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +8 -4
  103. data/src/core/ext/transport/chttp2/transport/hpack_encoder_index.h +1 -1
  104. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +136 -98
  105. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +27 -8
  106. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +12 -25
  107. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +37 -30
  108. data/src/core/ext/transport/chttp2/transport/internal.h +4 -3
  109. data/src/core/ext/transport/chttp2/transport/parsing.cc +30 -173
  110. data/src/core/ext/transport/chttp2/transport/popularity_count.h +1 -1
  111. data/src/core/ext/transport/chttp2/transport/writing.cc +29 -22
  112. data/src/core/ext/transport/inproc/inproc_transport.cc +105 -109
  113. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +68 -34
  114. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +139 -1
  115. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +16 -4
  116. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +53 -4
  117. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +3 -2
  118. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +15 -0
  119. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +13 -8
  120. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +23 -0
  121. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +0 -1
  122. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +14 -11
  123. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +17 -0
  124. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +15 -12
  125. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +49 -19
  126. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +55 -0
  127. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +154 -0
  128. data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +0 -2
  129. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +58 -0
  130. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +182 -0
  131. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +1 -1
  132. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +1 -1
  133. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +1 -1
  134. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +1 -1
  135. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +1 -1
  136. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +1 -1
  137. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +58 -0
  138. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +130 -0
  139. data/src/core/ext/upb-generated/{udpa/type/v1 → xds/type/v3}/typed_struct.upb.c +7 -7
  140. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +83 -0
  141. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +310 -286
  142. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +10 -0
  143. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +101 -88
  144. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.h +5 -0
  145. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +59 -56
  146. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +59 -46
  147. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +78 -82
  148. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +323 -316
  149. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.c +5 -4
  150. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.c +19 -23
  151. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.c +4 -3
  152. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.c +5 -3
  153. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.c +5 -4
  154. data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.c +75 -0
  155. data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.h +50 -0
  156. data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.c +13 -12
  157. data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.c +25 -24
  158. data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.c +16 -15
  159. data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.c +17 -16
  160. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.c +33 -32
  161. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.c +19 -18
  162. data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.c +45 -0
  163. data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.h +35 -0
  164. data/src/core/ext/xds/xds_api.cc +325 -362
  165. data/src/core/ext/xds/xds_api.h +134 -82
  166. data/src/core/ext/xds/xds_bootstrap.h +10 -0
  167. data/src/core/ext/xds/xds_certificate_provider.cc +3 -3
  168. data/src/core/ext/xds/xds_channel_stack_modifier.cc +113 -0
  169. data/src/core/ext/xds/xds_channel_stack_modifier.h +52 -0
  170. data/src/core/ext/xds/xds_client.cc +527 -314
  171. data/src/core/ext/xds/xds_client.h +42 -37
  172. data/src/core/ext/xds/xds_client_stats.h +1 -1
  173. data/src/core/ext/xds/xds_server_config_fetcher.cc +5 -7
  174. data/src/core/lib/address_utils/parse_address.cc +2 -0
  175. data/src/core/lib/avl/avl.cc +5 -5
  176. data/src/core/lib/backoff/backoff.cc +1 -1
  177. data/src/core/lib/channel/channel_args.cc +24 -6
  178. data/src/core/lib/channel/channel_args.h +9 -0
  179. data/src/core/lib/channel/channel_stack_builder.cc +3 -3
  180. data/src/core/lib/channel/channel_trace.cc +1 -1
  181. data/src/core/lib/channel/channel_trace.h +1 -1
  182. data/src/core/lib/channel/channelz.cc +3 -3
  183. data/src/core/lib/channel/channelz.h +2 -2
  184. data/src/core/lib/channel/channelz_registry.cc +1 -1
  185. data/src/core/lib/channel/channelz_registry.h +1 -1
  186. data/src/core/lib/channel/connected_channel.cc +1 -3
  187. data/src/core/lib/channel/connected_channel.h +1 -2
  188. data/src/core/lib/compression/compression.cc +2 -2
  189. data/src/core/lib/compression/compression_args.cc +6 -4
  190. data/src/core/lib/compression/compression_internal.cc +2 -2
  191. data/src/core/lib/compression/compression_internal.h +1 -1
  192. data/src/core/lib/config/core_configuration.cc +44 -2
  193. data/src/core/lib/config/core_configuration.h +39 -1
  194. data/src/core/lib/debug/stats.cc +1 -1
  195. data/src/core/lib/debug/stats_data.cc +13 -13
  196. data/src/core/lib/gpr/atm.cc +1 -1
  197. data/src/core/lib/gpr/cpu_posix.cc +1 -1
  198. data/src/core/lib/gpr/string.cc +2 -2
  199. data/src/core/lib/gpr/tls.h +1 -1
  200. data/src/core/lib/gpr/useful.h +79 -32
  201. data/src/core/lib/gprpp/arena.h +10 -0
  202. data/src/core/lib/gprpp/bitset.h +38 -16
  203. data/src/core/lib/gprpp/chunked_vector.h +211 -0
  204. data/src/core/lib/gprpp/construct_destruct.h +1 -1
  205. data/src/core/lib/gprpp/match.h +1 -1
  206. data/src/core/lib/gprpp/memory.h +6 -0
  207. data/src/core/lib/gprpp/overload.h +1 -1
  208. data/src/core/lib/gprpp/status_helper.cc +23 -3
  209. data/src/core/lib/gprpp/status_helper.h +12 -1
  210. data/src/core/lib/gprpp/table.h +411 -0
  211. data/src/core/lib/http/httpcli.cc +200 -182
  212. data/src/core/lib/http/parser.cc +2 -2
  213. data/src/core/lib/iomgr/call_combiner.cc +28 -10
  214. data/src/core/lib/iomgr/combiner.cc +6 -21
  215. data/src/core/lib/iomgr/endpoint_cfstream.cc +7 -6
  216. data/src/core/lib/iomgr/error.cc +113 -52
  217. data/src/core/lib/iomgr/error.h +50 -9
  218. data/src/core/lib/iomgr/error_cfstream.cc +5 -0
  219. data/src/core/lib/iomgr/ev_epoll1_linux.cc +3 -2
  220. data/src/core/lib/iomgr/ev_epollex_linux.cc +7 -7
  221. data/src/core/lib/iomgr/ev_poll_posix.cc +29 -20
  222. data/src/core/lib/iomgr/event_engine/closure.cc +41 -18
  223. data/src/core/lib/iomgr/event_engine/closure.h +10 -1
  224. data/src/core/lib/iomgr/event_engine/endpoint.cc +3 -3
  225. data/src/core/lib/iomgr/event_engine/iomgr.cc +1 -1
  226. data/src/core/lib/iomgr/event_engine/pollset.cc +5 -4
  227. data/src/core/lib/iomgr/event_engine/resolver.cc +10 -7
  228. data/src/core/lib/iomgr/event_engine/tcp.cc +9 -8
  229. data/src/core/lib/iomgr/event_engine/timer.cc +7 -2
  230. data/src/core/lib/iomgr/exec_ctx.cc +1 -9
  231. data/src/core/lib/iomgr/executor/mpmcqueue.cc +5 -7
  232. data/src/core/lib/iomgr/executor/mpmcqueue.h +3 -8
  233. data/src/core/lib/iomgr/executor.cc +6 -20
  234. data/src/core/lib/iomgr/iomgr.cc +3 -1
  235. data/src/core/lib/iomgr/iomgr_internal.cc +4 -9
  236. data/src/core/lib/iomgr/iomgr_internal.h +3 -2
  237. data/src/core/lib/iomgr/load_file.cc +2 -2
  238. data/src/core/lib/iomgr/lockfree_event.cc +18 -0
  239. data/src/core/lib/iomgr/pollset_custom.cc +1 -1
  240. data/src/core/lib/iomgr/pollset_custom.h +1 -1
  241. data/src/core/lib/iomgr/resolve_address_posix.cc +5 -7
  242. data/src/core/lib/iomgr/resource_quota.cc +13 -11
  243. data/src/core/lib/iomgr/socket_factory_posix.cc +2 -2
  244. data/src/core/lib/iomgr/socket_mutator.cc +2 -2
  245. data/src/core/lib/iomgr/socket_utils_common_posix.cc +1 -2
  246. data/src/core/lib/iomgr/tcp_client_cfstream.cc +5 -3
  247. data/src/core/lib/iomgr/tcp_client_custom.cc +1 -1
  248. data/src/core/lib/iomgr/tcp_client_posix.cc +9 -18
  249. data/src/core/lib/iomgr/tcp_client_windows.cc +2 -3
  250. data/src/core/lib/iomgr/tcp_posix.cc +4 -5
  251. data/src/core/lib/iomgr/tcp_server_custom.cc +2 -1
  252. data/src/core/lib/iomgr/tcp_server_posix.cc +3 -4
  253. data/src/core/lib/iomgr/tcp_server_windows.cc +4 -5
  254. data/src/core/lib/iomgr/tcp_windows.cc +2 -2
  255. data/src/core/lib/iomgr/timer_generic.cc +13 -13
  256. data/src/core/lib/iomgr/timer_heap.cc +1 -1
  257. data/src/core/lib/json/json_util.cc +68 -0
  258. data/src/core/lib/json/json_util.h +57 -99
  259. data/src/core/lib/json/json_writer.cc +0 -3
  260. data/src/core/lib/security/authorization/authorization_policy_provider.h +1 -1
  261. data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +1 -1
  262. data/src/core/lib/security/authorization/evaluate_args.cc +14 -12
  263. data/src/core/lib/security/authorization/sdk_server_authz_filter.cc +13 -1
  264. data/src/core/lib/security/context/security_context.cc +4 -2
  265. data/src/core/lib/security/credentials/composite/composite_credentials.cc +1 -1
  266. data/src/core/lib/security/credentials/credentials.cc +4 -2
  267. data/src/core/lib/security/credentials/credentials.h +6 -1
  268. data/src/core/lib/security/credentials/external/external_account_credentials.cc +47 -11
  269. data/src/core/lib/security/credentials/external/external_account_credentials.h +1 -0
  270. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +1 -1
  271. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +5 -9
  272. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +2 -2
  273. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +2 -2
  274. data/src/core/lib/security/security_connector/security_connector.cc +9 -4
  275. data/src/core/lib/security/security_connector/security_connector.h +1 -1
  276. data/src/core/lib/security/security_connector/ssl_utils.cc +1 -1
  277. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +1 -0
  278. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +0 -2
  279. data/src/core/lib/security/transport/client_auth_filter.cc +5 -5
  280. data/src/core/lib/security/transport/security_handshaker.cc +73 -43
  281. data/src/core/lib/security/transport/server_auth_filter.cc +3 -5
  282. data/src/core/lib/security/transport/tsi_error.cc +3 -5
  283. data/src/core/lib/slice/slice.cc +0 -16
  284. data/src/core/lib/slice/slice_api.cc +39 -0
  285. data/src/core/lib/slice/slice_buffer.cc +5 -5
  286. data/src/core/lib/slice/slice_intern.cc +8 -13
  287. data/src/core/lib/slice/slice_internal.h +1 -244
  288. data/src/core/lib/slice/slice_refcount.cc +17 -0
  289. data/src/core/lib/slice/slice_refcount.h +121 -0
  290. data/src/core/lib/slice/slice_refcount_base.h +173 -0
  291. data/src/core/lib/slice/slice_split.cc +100 -0
  292. data/src/core/lib/slice/slice_split.h +40 -0
  293. data/src/core/lib/slice/slice_string_helpers.cc +0 -83
  294. data/src/core/lib/slice/slice_string_helpers.h +0 -11
  295. data/src/core/lib/slice/static_slice.cc +529 -0
  296. data/src/core/lib/slice/static_slice.h +331 -0
  297. data/src/core/lib/surface/builtins.cc +49 -0
  298. data/src/core/{ext/filters/workarounds/workaround_cronet_compression_filter.h → lib/surface/builtins.h} +8 -9
  299. data/src/core/lib/surface/call.cc +103 -120
  300. data/src/core/lib/surface/call.h +0 -6
  301. data/src/core/lib/surface/channel.cc +19 -32
  302. data/src/core/lib/surface/channel.h +0 -9
  303. data/src/core/lib/surface/channel_init.cc +23 -76
  304. data/src/core/lib/surface/channel_init.h +52 -44
  305. data/src/core/lib/surface/completion_queue.cc +6 -5
  306. data/src/core/lib/surface/init.cc +0 -39
  307. data/src/core/lib/surface/init_secure.cc +17 -14
  308. data/src/core/lib/surface/lame_client.cc +18 -11
  309. data/src/core/lib/surface/lame_client.h +1 -1
  310. data/src/core/lib/surface/server.cc +25 -17
  311. data/src/core/lib/surface/server.h +17 -10
  312. data/src/core/lib/surface/validate_metadata.cc +5 -2
  313. data/src/core/lib/surface/version.cc +2 -2
  314. data/src/core/lib/transport/bdp_estimator.cc +1 -1
  315. data/src/core/lib/transport/error_utils.cc +42 -17
  316. data/src/core/lib/transport/error_utils.h +1 -1
  317. data/src/core/lib/transport/metadata.cc +31 -10
  318. data/src/core/lib/transport/metadata.h +2 -1
  319. data/src/core/lib/transport/metadata_batch.cc +35 -371
  320. data/src/core/lib/transport/metadata_batch.h +905 -71
  321. data/src/core/lib/transport/parsed_metadata.h +263 -0
  322. data/src/core/lib/transport/pid_controller.cc +4 -4
  323. data/src/core/lib/transport/static_metadata.cc +714 -846
  324. data/src/core/lib/transport/static_metadata.h +115 -379
  325. data/src/core/lib/transport/status_metadata.cc +1 -0
  326. data/src/core/lib/transport/transport.cc +4 -5
  327. data/src/core/lib/transport/transport_op_string.cc +40 -20
  328. data/src/core/plugin_registry/grpc_plugin_registry.cc +64 -43
  329. data/src/core/tsi/alts/crypt/aes_gcm.cc +3 -1
  330. data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +13 -12
  331. data/src/core/tsi/alts/frame_protector/frame_handler.cc +10 -11
  332. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +1 -2
  333. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +12 -2
  334. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +1 -1
  335. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +2 -2
  336. data/src/core/tsi/fake_transport_security.cc +15 -7
  337. data/src/core/tsi/local_transport_security.cc +36 -73
  338. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +16 -50
  339. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +4 -3
  340. data/src/core/tsi/ssl_transport_security.cc +10 -2
  341. data/src/core/tsi/transport_security.cc +12 -0
  342. data/src/core/tsi/transport_security.h +16 -1
  343. data/src/core/tsi/transport_security_interface.h +26 -0
  344. data/src/ruby/ext/grpc/extconf.rb +12 -9
  345. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +4 -0
  346. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +6 -0
  347. data/src/ruby/lib/grpc/version.rb +1 -1
  348. data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +2 -2
  349. data/src/ruby/spec/client_server_spec.rb +1 -1
  350. data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +4 -4
  351. data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +11 -6
  352. data/third_party/address_sorting/address_sorting_posix.c +1 -0
  353. data/third_party/boringssl-with-bazel/err_data.c +278 -272
  354. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +21 -22
  355. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_d2i_fp.c +0 -2
  356. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_gentm.c +5 -0
  357. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_mbstr.c +15 -22
  358. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +13 -7
  359. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_print.c +19 -29
  360. data/third_party/boringssl-with-bazel/src/crypto/{x509 → asn1}/a_strex.c +268 -271
  361. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c +106 -153
  362. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +2 -2
  363. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utctm.c +0 -39
  364. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_par.c +1 -1
  365. data/third_party/boringssl-with-bazel/src/crypto/{x509 → asn1}/charmap.h +0 -0
  366. data/third_party/boringssl-with-bazel/src/crypto/asn1/internal.h +38 -0
  367. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +8 -8
  368. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +289 -198
  369. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c +8 -8
  370. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_new.c +9 -13
  371. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_utl.c +1 -0
  372. data/third_party/boringssl-with-bazel/src/crypto/base64/base64.c +11 -8
  373. data/third_party/boringssl-with-bazel/src/crypto/bio/bio_mem.c +1 -7
  374. data/third_party/boringssl-with-bazel/src/crypto/bio/connect.c +1 -5
  375. data/third_party/boringssl-with-bazel/src/crypto/bio/fd.c +0 -4
  376. data/third_party/boringssl-with-bazel/src/crypto/bio/file.c +1 -7
  377. data/third_party/boringssl-with-bazel/src/crypto/bio/pair.c +1 -6
  378. data/third_party/boringssl-with-bazel/src/crypto/bio/socket.c +3 -17
  379. data/third_party/boringssl-with-bazel/src/crypto/blake2/blake2.c +4 -6
  380. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbb.c +9 -0
  381. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbs.c +8 -0
  382. data/third_party/boringssl-with-bazel/src/crypto/chacha/chacha.c +38 -47
  383. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/cipher_extra.c +45 -65
  384. data/third_party/boringssl-with-bazel/src/crypto/digest_extra/digest_extra.c +1 -0
  385. data/third_party/boringssl-with-bazel/src/crypto/evp/scrypt.c +32 -34
  386. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div.c +21 -3
  387. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd_extra.c +3 -2
  388. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +5 -2
  389. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/sqrt.c +5 -9
  390. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +10 -0
  391. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/des/des.c +10 -11
  392. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/des/internal.h +1 -3
  393. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md4/md4.c +4 -7
  394. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/md5.c +4 -7
  395. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm_nohw.c +1 -1
  396. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +1 -1
  397. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +24 -9
  398. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +4 -2
  399. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +35 -35
  400. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +11 -10
  401. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +10 -37
  402. data/third_party/boringssl-with-bazel/src/crypto/internal.h +39 -0
  403. data/third_party/boringssl-with-bazel/src/crypto/mem.c +12 -9
  404. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_all.c +0 -9
  405. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_info.c +0 -2
  406. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_lib.c +0 -8
  407. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pk8.c +0 -2
  408. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pkey.c +0 -4
  409. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/internal.h +16 -7
  410. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7.c +9 -4
  411. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c +151 -12
  412. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +1 -1
  413. data/third_party/boringssl-with-bazel/src/crypto/siphash/siphash.c +6 -6
  414. data/third_party/boringssl-with-bazel/src/crypto/x509/by_file.c +2 -0
  415. data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +181 -1
  416. data/third_party/boringssl-with-bazel/src/crypto/x509/name_print.c +246 -0
  417. data/third_party/boringssl-with-bazel/src/crypto/x509/rsa_pss.c +11 -2
  418. data/third_party/boringssl-with-bazel/src/crypto/x509/t_crl.c +0 -2
  419. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c +0 -179
  420. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509a.c +4 -2
  421. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_lu.c +0 -5
  422. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_obj.c +1 -0
  423. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +11 -50
  424. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vpm.c +1 -1
  425. data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +2 -4
  426. data/third_party/boringssl-with-bazel/src/crypto/x509/x_all.c +0 -16
  427. data/third_party/boringssl-with-bazel/src/crypto/x509/x_name.c +22 -18
  428. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +11 -8
  429. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +16 -0
  430. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_cache.c +1 -0
  431. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_data.c +1 -1
  432. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_int.h +1 -1
  433. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_map.c +1 -0
  434. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_tree.c +4 -3
  435. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akey.c +24 -5
  436. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +17 -8
  437. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bitst.c +3 -0
  438. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +6 -6
  439. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_crld.c +4 -0
  440. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_enum.c +5 -0
  441. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ncons.c +112 -55
  442. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pci.c +2 -1
  443. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +0 -2
  444. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +1 -1
  445. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +71 -26
  446. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +366 -227
  447. data/third_party/boringssl-with-bazel/src/include/openssl/asn1t.h +2 -9
  448. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +10 -4
  449. data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +3 -1
  450. data/third_party/boringssl-with-bazel/src/include/openssl/bn.h +3 -3
  451. data/third_party/boringssl-with-bazel/src/include/openssl/bytestring.h +9 -0
  452. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +8 -2
  453. data/third_party/boringssl-with-bazel/src/include/openssl/hkdf.h +4 -0
  454. data/third_party/boringssl-with-bazel/src/include/openssl/mem.h +9 -3
  455. data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +0 -20
  456. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +12 -5
  457. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +5 -0
  458. data/third_party/boringssl-with-bazel/src/include/openssl/span.h +37 -15
  459. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +28 -14
  460. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +31 -32
  461. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +529 -91
  462. data/third_party/boringssl-with-bazel/src/include/openssl/x509_vfy.h +16 -695
  463. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +48 -8
  464. data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +266 -357
  465. data/third_party/boringssl-with-bazel/src/ssl/extensions.cc +90 -152
  466. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +15 -13
  467. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +75 -79
  468. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +96 -97
  469. data/third_party/boringssl-with-bazel/src/ssl/internal.h +63 -43
  470. data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +2 -2
  471. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +2 -2
  472. data/third_party/boringssl-with-bazel/src/ssl/ssl_transcript.cc +6 -12
  473. data/third_party/boringssl-with-bazel/src/ssl/ssl_x509.cc +14 -17
  474. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +14 -27
  475. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +203 -203
  476. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +30 -41
  477. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +47 -33
  478. data/third_party/re2/re2/compile.cc +91 -109
  479. data/third_party/re2/re2/dfa.cc +27 -39
  480. data/third_party/re2/re2/filtered_re2.cc +18 -2
  481. data/third_party/re2/re2/filtered_re2.h +10 -5
  482. data/third_party/re2/re2/nfa.cc +1 -1
  483. data/third_party/re2/re2/parse.cc +42 -23
  484. data/third_party/re2/re2/perl_groups.cc +34 -34
  485. data/third_party/re2/re2/prefilter.cc +3 -2
  486. data/third_party/re2/re2/prog.cc +182 -4
  487. data/third_party/re2/re2/prog.h +28 -9
  488. data/third_party/re2/re2/re2.cc +87 -118
  489. data/third_party/re2/re2/re2.h +156 -141
  490. data/third_party/re2/re2/regexp.cc +12 -5
  491. data/third_party/re2/re2/regexp.h +8 -2
  492. data/third_party/re2/re2/set.cc +31 -9
  493. data/third_party/re2/re2/set.h +9 -4
  494. data/third_party/re2/re2/simplify.cc +11 -3
  495. data/third_party/re2/re2/tostring.cc +1 -1
  496. data/third_party/re2/re2/walker-inl.h +1 -1
  497. data/third_party/re2/util/mutex.h +2 -2
  498. data/third_party/re2/util/pcre.h +3 -3
  499. metadata +83 -70
  500. data/include/grpc/event_engine/slice_allocator.h +0 -71
  501. data/src/core/ext/filters/client_channel/service_config_call_data.h +0 -126
  502. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +0 -211
  503. data/src/core/ext/filters/workarounds/workaround_utils.cc +0 -53
  504. data/src/core/ext/filters/workarounds/workaround_utils.h +0 -39
  505. data/src/core/ext/transport/chttp2/client/authority.cc +0 -42
  506. data/src/core/ext/transport/chttp2/client/authority.h +0 -36
  507. data/src/core/ext/transport/chttp2/transport/chttp2_slice_allocator.cc +0 -67
  508. data/src/core/ext/transport/chttp2/transport/chttp2_slice_allocator.h +0 -74
  509. data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +0 -66
  510. data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +0 -58
  511. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c +0 -58
  512. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h +0 -130
  513. data/src/core/ext/upb-generated/udpa/type/v1/typed_struct.upb.h +0 -83
  514. data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.c +0 -44
  515. data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.h +0 -35
  516. data/src/core/lib/iomgr/udp_server.cc +0 -747
  517. data/src/core/lib/iomgr/udp_server.h +0 -103
  518. data/src/core/lib/transport/authority_override.cc +0 -40
  519. data/src/core/lib/transport/authority_override.h +0 -37
@@ -77,7 +77,11 @@ void LockfreeEvent::DestroyEvent() {
77
77
  do {
78
78
  curr = gpr_atm_no_barrier_load(&state_);
79
79
  if (curr & kShutdownBit) {
80
+ #ifdef GRPC_ERROR_IS_ABSEIL_STATUS
81
+ internal::StatusFreeHeapPtr(curr & ~kShutdownBit);
82
+ #else
80
83
  GRPC_ERROR_UNREF((grpc_error_handle)(curr & ~kShutdownBit));
84
+ #endif
81
85
  } else {
82
86
  GPR_ASSERT(curr == kClosureNotReady || curr == kClosureReady);
83
87
  }
@@ -139,8 +143,13 @@ void LockfreeEvent::NotifyOn(grpc_closure* closure) {
139
143
  contains a pointer to the shutdown-error). If the fd is shutdown,
140
144
  schedule the closure with the shutdown error */
141
145
  if ((curr & kShutdownBit) > 0) {
146
+ #ifdef GRPC_ERROR_IS_ABSEIL_STATUS
147
+ grpc_error_handle shutdown_err =
148
+ internal::StatusGetFromHeapPtr(curr & ~kShutdownBit);
149
+ #else
142
150
  grpc_error_handle shutdown_err =
143
151
  reinterpret_cast<grpc_error_handle>(curr & ~kShutdownBit);
152
+ #endif
144
153
  ExecCtx::Run(DEBUG_LOCATION, closure,
145
154
  GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
146
155
  "FD Shutdown", &shutdown_err, 1));
@@ -160,7 +169,12 @@ void LockfreeEvent::NotifyOn(grpc_closure* closure) {
160
169
  }
161
170
 
162
171
  bool LockfreeEvent::SetShutdown(grpc_error_handle shutdown_error) {
172
+ #ifdef GRPC_ERROR_IS_ABSEIL_STATUS
173
+ intptr_t status_ptr = internal::StatusAllocHeapPtr(shutdown_error);
174
+ gpr_atm new_state = status_ptr | kShutdownBit;
175
+ #else
163
176
  gpr_atm new_state = reinterpret_cast<gpr_atm>(shutdown_error) | kShutdownBit;
177
+ #endif
164
178
 
165
179
  while (true) {
166
180
  gpr_atm curr = gpr_atm_no_barrier_load(&state_);
@@ -184,7 +198,11 @@ bool LockfreeEvent::SetShutdown(grpc_error_handle shutdown_error) {
184
198
 
185
199
  /* If fd is already shutdown, we are done */
186
200
  if ((curr & kShutdownBit) > 0) {
201
+ #ifdef GRPC_ERROR_IS_ABSEIL_STATUS
202
+ internal::StatusFreeHeapPtr(status_ptr);
203
+ #else
187
204
  GRPC_ERROR_UNREF(shutdown_error);
205
+ #endif
188
206
  return false;
189
207
  }
190
208
 
@@ -76,7 +76,7 @@ static grpc_error_handle pollset_work(grpc_pollset* pollset,
76
76
  // control back to the application
77
77
  grpc_core::ExecCtx* curr = grpc_core::ExecCtx::Get();
78
78
  grpc_core::ExecCtx::Set(nullptr);
79
- grpc_error* err = poller_vtable->poll(static_cast<size_t>(timeout));
79
+ grpc_error_handle err = poller_vtable->poll(static_cast<size_t>(timeout));
80
80
  grpc_core::ExecCtx::Set(curr);
81
81
  grpc_core::ExecCtx::Get()->InvalidateNow();
82
82
  if (grpc_core::ExecCtx::Get()->HasWork()) {
@@ -27,7 +27,7 @@
27
27
 
28
28
  typedef struct grpc_custom_poller_vtable {
29
29
  void (*init)();
30
- grpc_error* (*poll)(size_t timeout_ms);
30
+ grpc_error_handle (*poll)(size_t timeout_ms);
31
31
  void (*kick)();
32
32
  void (*shutdown)();
33
33
  } grpc_custom_poller_vtable;
@@ -57,7 +57,7 @@ static grpc_error_handle posix_blocking_resolve_address(
57
57
  if (host.empty()) {
58
58
  err = grpc_error_set_str(
59
59
  GRPC_ERROR_CREATE_FROM_STATIC_STRING("unparseable host:port"),
60
- GRPC_ERROR_STR_TARGET_ADDRESS, grpc_slice_from_copied_string(name));
60
+ GRPC_ERROR_STR_TARGET_ADDRESS, name);
61
61
  goto done;
62
62
  }
63
63
 
@@ -65,7 +65,7 @@ static grpc_error_handle posix_blocking_resolve_address(
65
65
  if (default_port == nullptr) {
66
66
  err = grpc_error_set_str(
67
67
  GRPC_ERROR_CREATE_FROM_STATIC_STRING("no port in name"),
68
- GRPC_ERROR_STR_TARGET_ADDRESS, grpc_slice_from_copied_string(name));
68
+ GRPC_ERROR_STR_TARGET_ADDRESS, name);
69
69
  goto done;
70
70
  }
71
71
  port = default_port;
@@ -101,11 +101,9 @@ static grpc_error_handle posix_blocking_resolve_address(
101
101
  grpc_error_set_int(
102
102
  GRPC_ERROR_CREATE_FROM_STATIC_STRING(gai_strerror(s)),
103
103
  GRPC_ERROR_INT_ERRNO, s),
104
- GRPC_ERROR_STR_OS_ERROR,
105
- grpc_slice_from_static_string(gai_strerror(s))),
106
- GRPC_ERROR_STR_SYSCALL,
107
- grpc_slice_from_static_string("getaddrinfo")),
108
- GRPC_ERROR_STR_TARGET_ADDRESS, grpc_slice_from_copied_string(name));
104
+ GRPC_ERROR_STR_OS_ERROR, gai_strerror(s)),
105
+ GRPC_ERROR_STR_SYSCALL, "getaddrinfo"),
106
+ GRPC_ERROR_STR_TARGET_ADDRESS, name);
109
107
  goto done;
110
108
  }
111
109
 
@@ -305,11 +305,12 @@ static void rq_step_sched(grpc_resource_quota* resource_quota) {
305
305
  static void rq_update_estimate(grpc_resource_quota* resource_quota) {
306
306
  gpr_atm memory_usage_estimation = MEMORY_USAGE_ESTIMATION_MAX;
307
307
  if (resource_quota->size != 0) {
308
- memory_usage_estimation =
309
- GPR_CLAMP((gpr_atm)((1.0 - ((double)resource_quota->free_pool) /
310
- ((double)resource_quota->size)) *
311
- MEMORY_USAGE_ESTIMATION_MAX),
312
- 0, MEMORY_USAGE_ESTIMATION_MAX);
308
+ memory_usage_estimation = grpc_core::Clamp(
309
+ static_cast<gpr_atm>(
310
+ (1.0 - (static_cast<double>(resource_quota->free_pool)) /
311
+ (static_cast<double>(resource_quota->size))) *
312
+ MEMORY_USAGE_ESTIMATION_MAX),
313
+ gpr_atm(0), gpr_atm(MEMORY_USAGE_ESTIMATION_MAX));
313
314
  }
314
315
  gpr_atm_no_barrier_store(&resource_quota->memory_usage_estimation,
315
316
  memory_usage_estimation);
@@ -729,7 +730,7 @@ void grpc_resource_quota_resize(grpc_resource_quota* resource_quota,
729
730
  a->resource_quota = grpc_resource_quota_ref_internal(resource_quota);
730
731
  a->size = static_cast<int64_t>(size);
731
732
  gpr_atm_no_barrier_store(&resource_quota->last_size,
732
- (gpr_atm)GPR_MIN((size_t)GPR_ATM_MAX, size));
733
+ (gpr_atm)std::min((size_t)GPR_ATM_MAX, size));
733
734
  GRPC_CLOSURE_INIT(&a->closure, rq_resize, a, grpc_schedule_on_exec_ctx);
734
735
  grpc_core::ExecCtx::Run(DEBUG_LOCATION, &a->closure, GRPC_ERROR_NONE);
735
736
  }
@@ -762,7 +763,7 @@ static void rq_destroy(void* rq) {
762
763
  grpc_resource_quota_unref_internal(static_cast<grpc_resource_quota*>(rq));
763
764
  }
764
765
 
765
- static int rq_cmp(void* a, void* b) { return GPR_ICMP(a, b); }
766
+ static int rq_cmp(void* a, void* b) { return grpc_core::QsortCompare(a, b); }
766
767
 
767
768
  const grpc_arg_pointer_vtable* grpc_resource_quota_arg_vtable(void) {
768
769
  static const grpc_arg_pointer_vtable vtable = {rq_copy, rq_destroy, rq_cmp};
@@ -1035,10 +1036,11 @@ static size_t grpc_slice_allocator_adjust_allocation_length(
1035
1036
  size_t target =
1036
1037
  requested_length * (pressure > 0.8 ? (1.0 - pressure) / 0.2 : 1.0);
1037
1038
  // Target will be some multiple of 8 bytes, rounded up
1038
- target = ((static_cast<size_t> GPR_CLAMP(target, slice_allocator->min_length,
1039
- slice_allocator->max_length)) +
1040
- 255) &
1041
- ~static_cast<size_t>(255);
1039
+ target =
1040
+ (static_cast<size_t>(grpc_core::Clamp(target, slice_allocator->min_length,
1041
+ slice_allocator->max_length)) +
1042
+ 255) &
1043
+ ~static_cast<size_t>(255);
1042
1044
  // Don't use more than 1/16th of the overall resource quota for a single
1043
1045
  // read alloc
1044
1046
  size_t rqmax = grpc_resource_quota_peek_size(
@@ -47,11 +47,11 @@ int grpc_socket_factory_bind(grpc_socket_factory* factory, int sockfd,
47
47
 
48
48
  int grpc_socket_factory_compare(grpc_socket_factory* a,
49
49
  grpc_socket_factory* b) {
50
- int c = GPR_ICMP(a, b);
50
+ int c = grpc_core::QsortCompare(a, b);
51
51
  if (c != 0) {
52
52
  grpc_socket_factory* sma = a;
53
53
  grpc_socket_factory* smb = b;
54
- c = GPR_ICMP(sma->vtable, smb->vtable);
54
+ c = grpc_core::QsortCompare(sma->vtable, smb->vtable);
55
55
  if (c == 0) {
56
56
  c = sma->vtable->compare(sma, smb);
57
57
  }
@@ -56,11 +56,11 @@ bool grpc_socket_mutator_mutate_fd(grpc_socket_mutator* mutator, int fd,
56
56
 
57
57
  int grpc_socket_mutator_compare(grpc_socket_mutator* a,
58
58
  grpc_socket_mutator* b) {
59
- int c = GPR_ICMP(a, b);
59
+ int c = grpc_core::QsortCompare(a, b);
60
60
  if (c != 0) {
61
61
  grpc_socket_mutator* sma = a;
62
62
  grpc_socket_mutator* smb = b;
63
- c = GPR_ICMP(sma->vtable, smb->vtable);
63
+ c = grpc_core::QsortCompare(sma->vtable, smb->vtable);
64
64
  if (c == 0) {
65
65
  c = sma->vtable->compare(sma, smb);
66
66
  }
@@ -443,8 +443,7 @@ static grpc_error_handle error_for_fd(int fd,
443
443
  if (fd >= 0) return GRPC_ERROR_NONE;
444
444
  std::string addr_str = grpc_sockaddr_to_string(addr, false);
445
445
  grpc_error_handle err = grpc_error_set_str(
446
- GRPC_OS_ERROR(errno, "socket"), GRPC_ERROR_STR_TARGET_ADDRESS,
447
- grpc_slice_from_copied_string(addr_str.c_str()));
446
+ GRPC_OS_ERROR(errno, "socket"), GRPC_ERROR_STR_TARGET_ADDRESS, addr_str);
448
447
  return err;
449
448
  }
450
449
 
@@ -81,7 +81,8 @@ static void CFStreamConnectCleanup(CFStreamConnect* connect) {
81
81
  static void OnAlarm(void* arg, grpc_error_handle error) {
82
82
  CFStreamConnect* connect = static_cast<CFStreamConnect*>(arg);
83
83
  if (grpc_tcp_trace.enabled()) {
84
- gpr_log(GPR_DEBUG, "CLIENT_CONNECT :%p OnAlarm, error:%p", connect, error);
84
+ gpr_log(GPR_DEBUG, "CLIENT_CONNECT :%p OnAlarm, error:%s", connect,
85
+ grpc_error_std_string(error).c_str());
85
86
  }
86
87
  gpr_mu_lock(&connect->mu);
87
88
  grpc_closure* closure = connect->closure;
@@ -102,7 +103,8 @@ static void OnAlarm(void* arg, grpc_error_handle error) {
102
103
  static void OnOpen(void* arg, grpc_error_handle error) {
103
104
  CFStreamConnect* connect = static_cast<CFStreamConnect*>(arg);
104
105
  if (grpc_tcp_trace.enabled()) {
105
- gpr_log(GPR_DEBUG, "CLIENT_CONNECT :%p OnOpen, error:%p", connect, error);
106
+ gpr_log(GPR_DEBUG, "CLIENT_CONNECT :%p OnOpen, error:%s", connect,
107
+ grpc_error_std_string(error).c_str());
106
108
  }
107
109
  gpr_mu_lock(&connect->mu);
108
110
  grpc_timer_cancel(&connect->alarm);
@@ -135,7 +137,7 @@ static void OnOpen(void* arg, grpc_error_handle error) {
135
137
  connect->slice_allocator = nullptr;
136
138
  }
137
139
  } else {
138
- GRPC_ERROR_REF(error);
140
+ (void)GRPC_ERROR_REF(error);
139
141
  }
140
142
  gpr_mu_unlock(&connect->mu);
141
143
  grpc_core::ExecCtx::Run(DEBUG_LOCATION, closure, error);
@@ -124,7 +124,7 @@ static void tcp_connect(grpc_closure* closure, grpc_endpoint** ep,
124
124
  grpc_custom_socket* socket =
125
125
  static_cast<grpc_custom_socket*>(gpr_malloc(sizeof(grpc_custom_socket)));
126
126
  socket->refs = 2;
127
- grpc_custom_socket_vtable->init(socket, GRPC_AF_UNSPEC);
127
+ (void)grpc_custom_socket_vtable->init(socket, GRPC_AF_UNSPEC);
128
128
  grpc_custom_tcp_connect* connect = new grpc_custom_tcp_connect();
129
129
  connect->closure = closure;
130
130
  connect->endpoint = ep;
@@ -142,7 +142,7 @@ static void on_writable(void* acp, grpc_error_handle error) {
142
142
  grpc_closure* closure = ac->closure;
143
143
  grpc_fd* fd;
144
144
 
145
- GRPC_ERROR_REF(error);
145
+ (void)GRPC_ERROR_REF(error);
146
146
 
147
147
  if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
148
148
  gpr_log(GPR_INFO, "CLIENT_CONNECT: %s: on_writable: error=%s",
@@ -160,8 +160,7 @@ static void on_writable(void* acp, grpc_error_handle error) {
160
160
  gpr_mu_lock(&ac->mu);
161
161
  if (error != GRPC_ERROR_NONE) {
162
162
  error =
163
- grpc_error_set_str(error, GRPC_ERROR_STR_OS_ERROR,
164
- grpc_slice_from_static_string("Timeout occurred"));
163
+ grpc_error_set_str(error, GRPC_ERROR_STR_OS_ERROR, "Timeout occurred");
165
164
  goto finish;
166
165
  }
167
166
 
@@ -220,23 +219,16 @@ finish:
220
219
  fd = nullptr;
221
220
  }
222
221
  done = (--ac->refs == 0);
223
- // Create a copy of the data from "ac" to be accessed after the unlock, as
224
- // "ac" and its contents may be deallocated by the time they are read.
225
- const grpc_slice addr_str_slice = grpc_slice_from_cpp_string(ac->addr_str);
226
222
  gpr_mu_unlock(&ac->mu);
227
223
  if (error != GRPC_ERROR_NONE) {
228
- grpc_slice str;
224
+ std::string str;
229
225
  bool ret = grpc_error_get_str(error, GRPC_ERROR_STR_DESCRIPTION, &str);
230
226
  GPR_ASSERT(ret);
231
- std::string description = absl::StrCat("Failed to connect to remote host: ",
232
- grpc_core::StringViewFromSlice(str));
227
+ std::string description =
228
+ absl::StrCat("Failed to connect to remote host: ", str);
229
+ error = grpc_error_set_str(error, GRPC_ERROR_STR_DESCRIPTION, description);
233
230
  error =
234
- grpc_error_set_str(error, GRPC_ERROR_STR_DESCRIPTION,
235
- grpc_slice_from_cpp_string(std::move(description)));
236
- error = grpc_error_set_str(error, GRPC_ERROR_STR_TARGET_ADDRESS,
237
- addr_str_slice /* takes ownership */);
238
- } else {
239
- grpc_slice_unref_internal(addr_str_slice);
231
+ grpc_error_set_str(error, GRPC_ERROR_STR_TARGET_ADDRESS, ac->addr_str);
240
232
  }
241
233
  if (done) {
242
234
  // This is safe even outside the lock, because "done", the sentinel, is
@@ -309,9 +301,8 @@ void grpc_tcp_client_create_from_prepared_fd(
309
301
  if (errno != EWOULDBLOCK && errno != EINPROGRESS) {
310
302
  grpc_slice_allocator_destroy(slice_allocator);
311
303
  grpc_error_handle error = GRPC_OS_ERROR(errno, "connect");
312
- error = grpc_error_set_str(
313
- error, GRPC_ERROR_STR_TARGET_ADDRESS,
314
- grpc_slice_from_cpp_string(grpc_sockaddr_to_uri(addr)));
304
+ error = grpc_error_set_str(error, GRPC_ERROR_STR_TARGET_ADDRESS,
305
+ grpc_sockaddr_to_uri(addr));
315
306
  grpc_fd_orphan(fdobj, nullptr, nullptr, "tcp_client_connect_error");
316
307
  grpc_core::ExecCtx::Run(DEBUG_LOCATION, closure, error);
317
308
  return;
@@ -86,7 +86,7 @@ static void on_connect(void* acp, grpc_error_handle error) {
86
86
  GPR_ASSERT(*ep == NULL);
87
87
  grpc_closure* on_done = ac->on_done;
88
88
 
89
- GRPC_ERROR_REF(error);
89
+ (void)GRPC_ERROR_REF(error);
90
90
 
91
91
  gpr_mu_lock(&ac->mu);
92
92
  grpc_winsocket* socket = ac->socket;
@@ -225,8 +225,7 @@ failure:
225
225
  grpc_error_handle final_error =
226
226
  grpc_error_set_str(GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
227
227
  "Failed to connect", &error, 1),
228
- GRPC_ERROR_STR_TARGET_ADDRESS,
229
- grpc_slice_from_cpp_string(std::move(target_uri)));
228
+ GRPC_ERROR_STR_TARGET_ADDRESS, target_uri);
230
229
  GRPC_ERROR_UNREF(error);
231
230
  grpc_slice_allocator_destroy(slice_allocator);
232
231
  if (socket != NULL) {
@@ -576,7 +576,7 @@ static void finish_estimate(grpc_tcp* tcp) {
576
576
  value */
577
577
  if (tcp->bytes_read_this_round > tcp->target_length * 0.8) {
578
578
  tcp->target_length =
579
- GPR_MAX(2 * tcp->target_length, tcp->bytes_read_this_round);
579
+ std::max(2 * tcp->target_length, tcp->bytes_read_this_round);
580
580
  } else {
581
581
  tcp->target_length =
582
582
  0.99 * tcp->target_length + 0.01 * tcp->bytes_read_this_round;
@@ -592,8 +592,7 @@ static grpc_error_handle tcp_annotate_error(grpc_error_handle src_error,
592
592
  /* All tcp errors are marked with UNAVAILABLE so that application may
593
593
  * choose to retry. */
594
594
  GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE),
595
- GRPC_ERROR_STR_TARGET_ADDRESS,
596
- grpc_slice_from_copied_string(tcp->peer_string.c_str()));
595
+ GRPC_ERROR_STR_TARGET_ADDRESS, tcp->peer_string);
597
596
  }
598
597
 
599
598
  static void tcp_handle_read(void* arg /* grpc_tcp */, grpc_error_handle error);
@@ -1722,8 +1721,8 @@ grpc_endpoint* grpc_tcp_create(grpc_fd* em_fd,
1722
1721
  if (tcp_min_read_chunk_size > tcp_max_read_chunk_size) {
1723
1722
  tcp_min_read_chunk_size = tcp_max_read_chunk_size;
1724
1723
  }
1725
- tcp_read_chunk_size = GPR_CLAMP(tcp_read_chunk_size, tcp_min_read_chunk_size,
1726
- tcp_max_read_chunk_size);
1724
+ tcp_read_chunk_size = grpc_core::Clamp(
1725
+ tcp_read_chunk_size, tcp_min_read_chunk_size, tcp_max_read_chunk_size);
1727
1726
 
1728
1727
  grpc_tcp* tcp = new grpc_tcp(tcp_tx_zerocopy_max_simult_sends,
1729
1728
  tcp_tx_zerocopy_send_bytes_thresh);
@@ -28,6 +28,7 @@
28
28
 
29
29
  #include "src/core/lib/address_utils/sockaddr_utils.h"
30
30
  #include "src/core/lib/channel/channel_args.h"
31
+ #include "src/core/lib/gprpp/memory.h"
31
32
  #include "src/core/lib/iomgr/error.h"
32
33
  #include "src/core/lib/iomgr/exec_ctx.h"
33
34
  #include "src/core/lib/iomgr/iomgr_custom.h"
@@ -303,7 +304,7 @@ static grpc_error_handle add_socket_to_server(grpc_tcp_server* s,
303
304
 
304
305
  GPR_ASSERT(port >= 0);
305
306
  GPR_ASSERT(!s->on_accept_cb && "must add ports before starting server");
306
- sp = static_cast<grpc_tcp_listener*>(gpr_zalloc(sizeof(grpc_tcp_listener)));
307
+ sp = grpc_core::Zalloc<grpc_tcp_listener>();
307
308
  sp->next = nullptr;
308
309
  if (s->head == nullptr) {
309
310
  s->head = sp;
@@ -64,8 +64,7 @@ static grpc_error_handle tcp_server_create(
64
64
  grpc_closure* shutdown_complete, const grpc_channel_args* args,
65
65
  grpc_slice_allocator_factory* slice_allocator_factory,
66
66
  grpc_tcp_server** server) {
67
- grpc_tcp_server* s =
68
- static_cast<grpc_tcp_server*>(gpr_zalloc(sizeof(grpc_tcp_server)));
67
+ grpc_tcp_server* s = grpc_core::Zalloc<grpc_tcp_server>();
69
68
  s->so_reuseport = grpc_is_socket_reuse_port_supported();
70
69
  s->expand_wildcard_addrs = false;
71
70
  for (size_t i = 0; i < (args == nullptr ? 0 : args->num_args); i++) {
@@ -236,7 +235,7 @@ static void on_read(void* arg, grpc_error_handle err) {
236
235
  }
237
236
  }
238
237
 
239
- grpc_set_socket_no_sigpipe_if_possible(fd);
238
+ (void)grpc_set_socket_no_sigpipe_if_possible(fd);
240
239
 
241
240
  err = grpc_apply_socket_mutator_in_args(fd, GRPC_FD_SERVER_CONNECTION_USAGE,
242
241
  sp->server->channel_args);
@@ -595,7 +594,7 @@ class ExternalConnectionHandler : public grpc_core::TcpServerFdHandler {
595
594
  close(fd);
596
595
  return;
597
596
  }
598
- grpc_set_socket_no_sigpipe_if_possible(fd);
597
+ (void)grpc_set_socket_no_sigpipe_if_possible(fd);
599
598
  std::string addr_str = grpc_sockaddr_to_uri(&addr);
600
599
  if (grpc_tcp_trace.enabled()) {
601
600
  gpr_log(GPR_INFO, "SERVER_CONNECT: incoming external connection: %s",
@@ -230,11 +230,10 @@ static grpc_error_handle prepare_socket(SOCKET sock,
230
230
  failure:
231
231
  GPR_ASSERT(error != GRPC_ERROR_NONE);
232
232
  grpc_error_set_int(
233
- grpc_error_set_str(
234
- GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
235
- "Failed to prepare server socket", &error, 1),
236
- GRPC_ERROR_STR_TARGET_ADDRESS,
237
- grpc_slice_from_cpp_string(grpc_sockaddr_to_uri(addr))),
233
+ grpc_error_set_str(GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
234
+ "Failed to prepare server socket", &error, 1),
235
+ GRPC_ERROR_STR_TARGET_ADDRESS,
236
+ grpc_sockaddr_to_uri(addr)),
238
237
  GRPC_ERROR_INT_FD, (intptr_t)sock);
239
238
  GRPC_ERROR_UNREF(error);
240
239
  if (sock != INVALID_SOCKET) closesocket(sock);
@@ -186,7 +186,7 @@ static void on_read(void* tcpp, grpc_error_handle error) {
186
186
  gpr_log(GPR_INFO, "TCP:%p on_read", tcp);
187
187
  }
188
188
 
189
- GRPC_ERROR_REF(error);
189
+ (void)GRPC_ERROR_REF(error);
190
190
 
191
191
  if (error == GRPC_ERROR_NONE) {
192
192
  if (info->wsa_error != 0 && !tcp->shutting_down) {
@@ -322,7 +322,7 @@ static void on_write(void* tcpp, grpc_error_handle error) {
322
322
  gpr_log(GPR_INFO, "TCP:%p on_write", tcp);
323
323
  }
324
324
 
325
- GRPC_ERROR_REF(error);
325
+ (void)GRPC_ERROR_REF(error);
326
326
 
327
327
  gpr_mu_lock(&tcp->mu);
328
328
  cb = tcp->write_cb;
@@ -43,7 +43,7 @@
43
43
 
44
44
  #define ADD_DEADLINE_SCALE 0.33
45
45
  #define MIN_QUEUE_WINDOW_DURATION 0.01
46
- #define MAX_QUEUE_WINDOW_DURATION 1
46
+ #define MAX_QUEUE_WINDOW_DURATION 1.0
47
47
 
48
48
  grpc_core::TraceFlag grpc_timer_trace(false, "timer");
49
49
  grpc_core::TraceFlag grpc_timer_check_trace(false, "timer_check");
@@ -105,7 +105,7 @@ static void destroy_timer_ht() {
105
105
  }
106
106
 
107
107
  static bool is_in_ht(grpc_timer* t) {
108
- size_t i = GPR_HASH_POINTER(t, NUM_HASH_BUCKETS);
108
+ size_t i = grpc_core::HashPointer(t, NUM_HASH_BUCKETS);
109
109
 
110
110
  gpr_mu_lock(&g_hash_mu[i]);
111
111
  grpc_timer* p = g_timer_ht[i];
@@ -119,7 +119,7 @@ static bool is_in_ht(grpc_timer* t) {
119
119
 
120
120
  static void add_to_ht(grpc_timer* t) {
121
121
  GPR_ASSERT(!t->hash_table_next);
122
- size_t i = GPR_HASH_POINTER(t, NUM_HASH_BUCKETS);
122
+ size_t i = grpc_core::HashPointer(t, NUM_HASH_BUCKETS);
123
123
 
124
124
  gpr_mu_lock(&g_hash_mu[i]);
125
125
  grpc_timer* p = g_timer_ht[i];
@@ -144,7 +144,7 @@ static void add_to_ht(grpc_timer* t) {
144
144
  }
145
145
 
146
146
  static void remove_from_ht(grpc_timer* t) {
147
- size_t i = GPR_HASH_POINTER(t, NUM_HASH_BUCKETS);
147
+ size_t i = grpc_core::HashPointer(t, NUM_HASH_BUCKETS);
148
148
  bool removed = false;
149
149
 
150
150
  gpr_mu_lock(&g_hash_mu[i]);
@@ -248,7 +248,7 @@ static grpc_millis compute_min_deadline(timer_shard* shard) {
248
248
  static void timer_list_init() {
249
249
  uint32_t i;
250
250
 
251
- g_num_shards = GPR_CLAMP(2 * gpr_cpu_num_cores(), 1, 32);
251
+ g_num_shards = grpc_core::Clamp(2 * gpr_cpu_num_cores(), 1u, 32u);
252
252
  g_shards =
253
253
  static_cast<timer_shard*>(gpr_zalloc(g_num_shards * sizeof(*g_shards)));
254
254
  g_shard_queue = static_cast<timer_shard**>(
@@ -337,7 +337,7 @@ void grpc_timer_init_unset(grpc_timer* timer) { timer->pending = false; }
337
337
  static void timer_init(grpc_timer* timer, grpc_millis deadline,
338
338
  grpc_closure* closure) {
339
339
  int is_first_timer = 0;
340
- timer_shard* shard = &g_shards[GPR_HASH_POINTER(timer, g_num_shards)];
340
+ timer_shard* shard = &g_shards[grpc_core::HashPointer(timer, g_num_shards)];
341
341
  timer->closure = closure;
342
342
  timer->deadline = deadline;
343
343
 
@@ -444,7 +444,7 @@ static void timer_cancel(grpc_timer* timer) {
444
444
  return;
445
445
  }
446
446
 
447
- timer_shard* shard = &g_shards[GPR_HASH_POINTER(timer, g_num_shards)];
447
+ timer_shard* shard = &g_shards[grpc_core::HashPointer(timer, g_num_shards)];
448
448
  gpr_mu_lock(&shard->mu);
449
449
  if (GRPC_TRACE_FLAG_ENABLED(grpc_timer_trace)) {
450
450
  gpr_log(GPR_INFO, "TIMER %p: CANCEL pending=%s", timer,
@@ -479,13 +479,13 @@ static bool refill_heap(timer_shard* shard, grpc_millis now) {
479
479
  grpc_time_averaged_stats_update_average(&shard->stats) *
480
480
  ADD_DEADLINE_SCALE;
481
481
  double deadline_delta =
482
- GPR_CLAMP(computed_deadline_delta, MIN_QUEUE_WINDOW_DURATION,
483
- MAX_QUEUE_WINDOW_DURATION);
482
+ grpc_core::Clamp(computed_deadline_delta, MIN_QUEUE_WINDOW_DURATION,
483
+ MAX_QUEUE_WINDOW_DURATION);
484
484
  grpc_timer *timer, *next;
485
485
 
486
486
  /* Compute the new cap and put all timers under it into the queue: */
487
487
  shard->queue_deadline_cap =
488
- saturating_add(GPR_MAX(now, shard->queue_deadline_cap),
488
+ saturating_add(std::max(now, shard->queue_deadline_cap),
489
489
  static_cast<grpc_millis>(deadline_delta * 1000.0));
490
490
 
491
491
  if (GRPC_TRACE_FLAG_ENABLED(grpc_timer_check_trace)) {
@@ -583,7 +583,7 @@ static grpc_timer_check_result run_some_expired_timers(
583
583
  g_last_seen_min_timer = min_timer;
584
584
 
585
585
  if (now < min_timer) {
586
- if (next != nullptr) *next = GPR_MIN(*next, min_timer);
586
+ if (next != nullptr) *next = std::min(*next, min_timer);
587
587
  return GRPC_TIMERS_CHECKED_AND_EMPTY;
588
588
  }
589
589
 
@@ -628,7 +628,7 @@ static grpc_timer_check_result run_some_expired_timers(
628
628
  }
629
629
 
630
630
  if (next) {
631
- *next = GPR_MIN(*next, g_shard_queue[0]->min_deadline);
631
+ *next = std::min(*next, g_shard_queue[0]->min_deadline);
632
632
  }
633
633
 
634
634
  #if GPR_ARCH_64
@@ -663,7 +663,7 @@ static grpc_timer_check_result timer_check(grpc_millis* next) {
663
663
 
664
664
  if (now < min_timer) {
665
665
  if (next != nullptr) {
666
- *next = GPR_MIN(*next, min_timer);
666
+ *next = std::min(*next, min_timer);
667
667
  }
668
668
  if (GRPC_TRACE_FLAG_ENABLED(grpc_timer_check_trace)) {
669
669
  gpr_log(GPR_INFO, "TIMER CHECK SKIP: now=%" PRId64 " min_timer=%" PRId64,
@@ -97,7 +97,7 @@ void grpc_timer_heap_destroy(grpc_timer_heap* heap) { gpr_free(heap->timers); }
97
97
  bool grpc_timer_heap_add(grpc_timer_heap* heap, grpc_timer* timer) {
98
98
  if (heap->timer_count == heap->timer_capacity) {
99
99
  heap->timer_capacity =
100
- GPR_MAX(heap->timer_capacity + 1, heap->timer_capacity * 3 / 2);
100
+ std::max(heap->timer_capacity + 1, heap->timer_capacity * 3 / 2);
101
101
  heap->timers = static_cast<grpc_timer**>(
102
102
  gpr_realloc(heap->timers, heap->timer_capacity * sizeof(grpc_timer*)));
103
103
  }
@@ -55,4 +55,72 @@ bool ParseDurationFromJson(const Json& field, grpc_millis* duration) {
55
55
  return true;
56
56
  }
57
57
 
58
+ bool ExtractJsonBool(const Json& json, absl::string_view field_name,
59
+ bool* output, std::vector<grpc_error_handle>* error_list) {
60
+ switch (json.type()) {
61
+ case Json::Type::JSON_TRUE:
62
+ *output = true;
63
+ return true;
64
+ case Json::Type::JSON_FALSE:
65
+ *output = false;
66
+ return true;
67
+ default:
68
+ error_list->push_back(GRPC_ERROR_CREATE_FROM_CPP_STRING(
69
+ absl::StrCat("field:", field_name, " error:type should be BOOLEAN")));
70
+ return false;
71
+ }
72
+ }
73
+
74
+ bool ExtractJsonArray(const Json& json, absl::string_view field_name,
75
+ const Json::Array** output,
76
+ std::vector<grpc_error_handle>* error_list) {
77
+ if (json.type() != Json::Type::ARRAY) {
78
+ *output = nullptr;
79
+ error_list->push_back(GRPC_ERROR_CREATE_FROM_CPP_STRING(
80
+ absl::StrCat("field:", field_name, " error:type should be ARRAY")));
81
+ return false;
82
+ }
83
+ *output = &json.array_value();
84
+ return true;
85
+ }
86
+
87
+ bool ExtractJsonObject(const Json& json, absl::string_view field_name,
88
+ const Json::Object** output,
89
+ std::vector<grpc_error_handle>* error_list) {
90
+ if (json.type() != Json::Type::OBJECT) {
91
+ *output = nullptr;
92
+ error_list->push_back(GRPC_ERROR_CREATE_FROM_CPP_STRING(
93
+ absl::StrCat("field:", field_name, " error:type should be OBJECT")));
94
+ return false;
95
+ }
96
+ *output = &json.object_value();
97
+ return true;
98
+ }
99
+
100
+ bool ParseJsonObjectFieldAsDuration(const Json::Object& object,
101
+ absl::string_view field_name,
102
+ grpc_millis* output,
103
+ std::vector<grpc_error_handle>* error_list,
104
+ bool required) {
105
+ // TODO(roth): Once we can use C++14 heterogenous lookups, stop
106
+ // creating a std::string here.
107
+ auto it = object.find(std::string(field_name));
108
+ if (it == object.end()) {
109
+ if (required) {
110
+ error_list->push_back(GRPC_ERROR_CREATE_FROM_CPP_STRING(
111
+ absl::StrCat("field:", field_name, " error:does not exist.")));
112
+ }
113
+ return false;
114
+ }
115
+ if (!ParseDurationFromJson(it->second, output)) {
116
+ *output = GRPC_MILLIS_INF_PAST;
117
+ error_list->push_back(GRPC_ERROR_CREATE_FROM_CPP_STRING(
118
+ absl::StrCat("field:", field_name,
119
+ " error:type should be STRING of the form given by "
120
+ "google.proto.Duration.")));
121
+ return false;
122
+ }
123
+ return true;
124
+ }
125
+
58
126
  } // namespace grpc_core