grpc 1.55.0 → 1.56.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 (374) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +100 -68
  3. data/include/grpc/event_engine/event_engine.h +4 -3
  4. data/include/grpc/grpc_audit_logging.h +96 -0
  5. data/include/grpc/module.modulemap +2 -0
  6. data/include/grpc/support/json.h +218 -0
  7. data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +5 -0
  8. data/src/core/ext/filters/client_channel/backend_metric.cc +2 -0
  9. data/src/core/ext/filters/client_channel/channel_connectivity.cc +4 -4
  10. data/src/core/ext/filters/client_channel/client_channel.cc +86 -104
  11. data/src/core/ext/filters/client_channel/client_channel.h +6 -0
  12. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +19 -18
  13. data/src/core/ext/filters/client_channel/client_channel_internal.h +16 -21
  14. data/src/core/ext/filters/client_channel/config_selector.h +9 -24
  15. data/src/core/ext/filters/client_channel/lb_policy/backend_metric_data.h +3 -0
  16. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +5 -4
  17. data/src/core/ext/filters/client_channel/lb_policy/health_check_client.cc +455 -0
  18. data/src/core/ext/filters/client_channel/lb_policy/health_check_client.h +54 -0
  19. data/src/core/ext/filters/client_channel/lb_policy/health_check_client_internal.h +186 -0
  20. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +2 -7
  21. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +52 -20
  22. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +23 -2
  23. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +19 -6
  24. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +1 -9
  25. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +16 -7
  26. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +18 -1
  27. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +12 -9
  28. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +6 -4
  29. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +36 -13
  30. data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/static_stride_scheduler.cc +76 -6
  31. data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/weighted_round_robin.cc +32 -39
  32. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +4 -10
  33. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +52 -47
  34. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +1 -9
  35. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +14 -16
  36. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +40 -43
  37. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.cc +7 -12
  38. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_wrr_locality.cc +12 -19
  39. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +35 -33
  40. data/src/core/ext/filters/client_channel/resolver/dns/event_engine/event_engine_client_channel_resolver.cc +29 -4
  41. data/src/core/ext/filters/client_channel/resolver/dns/event_engine/service_config_helper.cc +1 -1
  42. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +28 -27
  43. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +163 -46
  44. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +16 -1
  45. data/src/core/ext/filters/client_channel/retry_service_config.cc +1 -0
  46. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +10 -40
  47. data/src/core/ext/filters/client_channel/subchannel.cc +10 -196
  48. data/src/core/ext/filters/client_channel/subchannel.h +3 -43
  49. data/src/core/ext/filters/http/message_compress/compression_filter.cc +5 -5
  50. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +100 -6
  51. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +6 -8
  52. data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +3 -3
  53. data/src/core/ext/filters/stateful_session/stateful_session_filter.h +16 -1
  54. data/src/core/ext/transport/chttp2/transport/flow_control.cc +46 -95
  55. data/src/core/ext/transport/chttp2/transport/internal.h +1 -15
  56. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +11 -2
  57. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +15 -0
  58. data/src/core/ext/xds/certificate_provider_store.cc +4 -9
  59. data/src/core/ext/xds/certificate_provider_store.h +1 -1
  60. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +30 -42
  61. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +14 -9
  62. data/src/core/ext/xds/xds_api.cc +9 -6
  63. data/src/core/ext/xds/xds_api.h +3 -2
  64. data/src/core/ext/xds/xds_audit_logger_registry.cc +122 -0
  65. data/src/core/ext/xds/xds_audit_logger_registry.h +68 -0
  66. data/src/core/ext/xds/xds_bootstrap_grpc.cc +21 -9
  67. data/src/core/ext/xds/xds_bootstrap_grpc.h +5 -0
  68. data/src/core/ext/xds/xds_client.cc +5 -4
  69. data/src/core/ext/xds/xds_client_stats.h +1 -1
  70. data/src/core/ext/xds/xds_cluster.cc +20 -19
  71. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +11 -8
  72. data/src/core/ext/xds/xds_common_types.cc +3 -1
  73. data/src/core/ext/xds/xds_http_fault_filter.cc +16 -13
  74. data/src/core/ext/xds/xds_http_fault_filter.h +2 -1
  75. data/src/core/ext/xds/xds_http_filters.h +4 -2
  76. data/src/core/ext/xds/xds_http_rbac_filter.cc +154 -67
  77. data/src/core/ext/xds/xds_http_rbac_filter.h +2 -1
  78. data/src/core/ext/xds/xds_http_stateful_session_filter.cc +15 -11
  79. data/src/core/ext/xds/xds_http_stateful_session_filter.h +2 -1
  80. data/src/core/ext/xds/xds_lb_policy_registry.cc +22 -16
  81. data/src/core/ext/xds/xds_listener.cc +1 -0
  82. data/src/core/ext/xds/xds_route_config.cc +40 -3
  83. data/src/core/ext/xds/xds_routing.cc +2 -2
  84. data/src/core/ext/xds/xds_transport_grpc.cc +3 -1
  85. data/src/core/lib/avl/avl.h +5 -0
  86. data/src/core/lib/channel/channel_args.cc +80 -22
  87. data/src/core/lib/channel/channel_args.h +34 -1
  88. data/src/core/lib/channel/channel_trace.cc +16 -12
  89. data/src/core/lib/channel/channelz.cc +159 -132
  90. data/src/core/lib/channel/channelz.h +42 -35
  91. data/src/core/lib/channel/channelz_registry.cc +23 -20
  92. data/src/core/lib/channel/connected_channel.cc +17 -6
  93. data/src/core/lib/channel/promise_based_filter.cc +0 -4
  94. data/src/core/lib/channel/promise_based_filter.h +2 -0
  95. data/src/core/lib/compression/compression_internal.cc +2 -5
  96. data/src/core/lib/config/config_vars.cc +20 -18
  97. data/src/core/lib/config/config_vars.h +4 -4
  98. data/src/core/lib/config/load_config.cc +13 -0
  99. data/src/core/lib/config/load_config.h +6 -0
  100. data/src/core/lib/debug/event_log.h +1 -1
  101. data/src/core/lib/debug/stats_data.h +1 -1
  102. data/src/core/lib/debug/trace.cc +24 -55
  103. data/src/core/lib/debug/trace.h +3 -1
  104. data/src/core/lib/event_engine/cf_engine/cf_engine.cc +211 -0
  105. data/src/core/lib/event_engine/cf_engine/cf_engine.h +86 -0
  106. data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.cc +354 -0
  107. data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.h +146 -0
  108. data/src/core/lib/event_engine/cf_engine/cftype_unique_ref.h +79 -0
  109. data/src/core/lib/event_engine/default_event_engine.cc +13 -1
  110. data/src/core/lib/event_engine/default_event_engine_factory.cc +14 -2
  111. data/src/core/lib/event_engine/poller.h +2 -2
  112. data/src/core/lib/event_engine/posix.h +4 -0
  113. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +1 -1
  114. data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +7 -18
  115. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +9 -0
  116. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +33 -19
  117. data/src/core/lib/event_engine/posix_engine/posix_engine.h +1 -1
  118. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +4 -4
  119. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.h +7 -8
  120. data/src/core/lib/event_engine/posix_engine/timer_manager.h +1 -1
  121. data/src/core/lib/event_engine/shim.cc +7 -1
  122. data/src/core/lib/event_engine/{thread_pool.cc → thread_pool/original_thread_pool.cc} +28 -25
  123. data/src/core/lib/event_engine/{thread_pool.h → thread_pool/original_thread_pool.h} +11 -15
  124. data/src/core/lib/event_engine/thread_pool/thread_pool.h +50 -0
  125. data/src/core/lib/event_engine/{executor/executor.h → thread_pool/thread_pool_factory.cc} +17 -15
  126. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +489 -0
  127. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.h +249 -0
  128. data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.cc +166 -0
  129. data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.h +108 -0
  130. data/src/core/lib/event_engine/windows/iocp.cc +4 -3
  131. data/src/core/lib/event_engine/windows/iocp.h +3 -3
  132. data/src/core/lib/event_engine/windows/win_socket.cc +6 -6
  133. data/src/core/lib/event_engine/windows/win_socket.h +4 -4
  134. data/src/core/lib/event_engine/windows/windows_endpoint.cc +11 -10
  135. data/src/core/lib/event_engine/windows/windows_endpoint.h +3 -2
  136. data/src/core/lib/event_engine/windows/windows_engine.cc +19 -17
  137. data/src/core/lib/event_engine/windows/windows_engine.h +6 -6
  138. data/src/core/lib/event_engine/windows/windows_listener.cc +3 -3
  139. data/src/core/lib/event_engine/windows/windows_listener.h +3 -2
  140. data/src/core/lib/event_engine/work_queue/basic_work_queue.cc +63 -0
  141. data/src/core/lib/event_engine/work_queue/basic_work_queue.h +71 -0
  142. data/src/core/lib/event_engine/work_queue/work_queue.h +62 -0
  143. data/src/core/lib/experiments/config.cc +38 -7
  144. data/src/core/lib/experiments/config.h +16 -0
  145. data/src/core/lib/experiments/experiments.cc +67 -20
  146. data/src/core/lib/experiments/experiments.h +27 -21
  147. data/src/core/lib/gpr/log_internal.h +55 -0
  148. data/src/core/lib/gprpp/crash.cc +10 -0
  149. data/src/core/lib/gprpp/crash.h +3 -0
  150. data/src/core/lib/gprpp/per_cpu.cc +33 -0
  151. data/src/core/lib/gprpp/per_cpu.h +29 -6
  152. data/src/core/lib/gprpp/time.cc +1 -0
  153. data/src/core/lib/iomgr/cfstream_handle.cc +1 -1
  154. data/src/core/lib/iomgr/endpoint_cfstream.cc +10 -8
  155. data/src/core/lib/iomgr/ev_apple.cc +12 -12
  156. data/src/core/lib/iomgr/ev_epoll1_linux.cc +10 -3
  157. data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +15 -1
  158. data/src/core/lib/iomgr/iocp_windows.cc +24 -3
  159. data/src/core/lib/iomgr/iocp_windows.h +11 -0
  160. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +1 -1
  161. data/src/core/lib/iomgr/socket_utils_common_posix.cc +4 -2
  162. data/src/core/lib/iomgr/socket_windows.cc +61 -7
  163. data/src/core/lib/iomgr/socket_windows.h +9 -2
  164. data/src/core/lib/iomgr/tcp_client_cfstream.cc +14 -3
  165. data/src/core/lib/iomgr/tcp_server_posix.cc +148 -107
  166. data/src/core/lib/iomgr/tcp_server_utils_posix.h +1 -1
  167. data/src/core/lib/iomgr/tcp_server_windows.cc +1 -1
  168. data/src/core/lib/json/json.h +2 -166
  169. data/src/core/lib/json/json_object_loader.cc +8 -9
  170. data/src/core/lib/json/json_object_loader.h +25 -18
  171. data/src/core/lib/json/json_reader.cc +13 -6
  172. data/src/core/lib/json/json_util.cc +6 -11
  173. data/src/core/lib/json/json_writer.cc +7 -8
  174. data/src/core/lib/load_balancing/lb_policy.h +13 -0
  175. data/src/core/lib/load_balancing/lb_policy_registry.cc +2 -1
  176. data/src/core/lib/matchers/matchers.cc +3 -4
  177. data/src/core/lib/matchers/matchers.h +2 -1
  178. data/src/core/lib/promise/activity.cc +5 -0
  179. data/src/core/lib/promise/activity.h +10 -0
  180. data/src/core/lib/promise/detail/promise_factory.h +1 -1
  181. data/src/core/lib/promise/party.cc +31 -13
  182. data/src/core/lib/promise/party.h +11 -2
  183. data/src/core/lib/promise/pipe.h +9 -2
  184. data/src/core/lib/promise/prioritized_race.h +95 -0
  185. data/src/core/lib/promise/sleep.cc +2 -1
  186. data/src/core/lib/resolver/server_address.cc +0 -8
  187. data/src/core/lib/resolver/server_address.h +0 -6
  188. data/src/core/lib/resource_quota/memory_quota.cc +7 -7
  189. data/src/core/lib/resource_quota/memory_quota.h +1 -2
  190. data/src/core/lib/security/authorization/audit_logging.cc +98 -0
  191. data/src/core/lib/security/authorization/audit_logging.h +73 -0
  192. data/src/core/lib/security/authorization/grpc_authorization_engine.cc +47 -2
  193. data/src/core/lib/security/authorization/grpc_authorization_engine.h +18 -1
  194. data/src/core/lib/security/authorization/rbac_policy.cc +36 -4
  195. data/src/core/lib/security/authorization/rbac_policy.h +19 -2
  196. data/src/core/lib/security/authorization/stdout_logger.cc +75 -0
  197. data/src/core/lib/security/authorization/stdout_logger.h +61 -0
  198. data/src/core/lib/security/certificate_provider/certificate_provider_factory.h +8 -4
  199. data/src/core/lib/security/certificate_provider/certificate_provider_registry.cc +8 -18
  200. data/src/core/lib/security/certificate_provider/certificate_provider_registry.h +14 -8
  201. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +19 -12
  202. data/src/core/lib/security/credentials/external/external_account_credentials.cc +4 -2
  203. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +1 -0
  204. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +1 -0
  205. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +1 -0
  206. data/src/core/lib/security/credentials/jwt/json_token.cc +15 -14
  207. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +4 -2
  208. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +1 -0
  209. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +1 -0
  210. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +1 -5
  211. data/src/core/lib/security/util/json_util.cc +1 -0
  212. data/src/core/lib/service_config/service_config_call_data.h +49 -20
  213. data/src/core/lib/service_config/service_config_impl.cc +2 -1
  214. data/src/core/lib/surface/call.cc +38 -23
  215. data/src/core/lib/surface/completion_queue.cc +6 -2
  216. data/src/core/lib/surface/version.cc +2 -2
  217. data/src/core/lib/transport/batch_builder.cc +15 -12
  218. data/src/core/lib/transport/batch_builder.h +39 -35
  219. data/src/core/plugin_registry/grpc_plugin_registry.cc +0 -2
  220. data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +2 -0
  221. data/src/ruby/ext/grpc/extconf.rb +8 -9
  222. data/src/ruby/lib/grpc/version.rb +1 -1
  223. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_mbstr.c +9 -8
  224. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c +1 -1
  225. data/third_party/boringssl-with-bazel/src/crypto/asn1/internal.h +3 -3
  226. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +10 -6
  227. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +7 -4
  228. data/third_party/boringssl-with-bazel/src/crypto/bio/bio.c +6 -4
  229. data/third_party/boringssl-with-bazel/src/crypto/bio/fd.c +2 -1
  230. data/third_party/boringssl-with-bazel/src/crypto/bio/file.c +5 -9
  231. data/third_party/boringssl-with-bazel/src/crypto/bio/pair.c +4 -2
  232. data/third_party/boringssl-with-bazel/src/crypto/blake2/blake2.c +31 -22
  233. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_tls.c +29 -26
  234. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h +8 -0
  235. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +189 -13
  236. data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_openbsd.c +62 -0
  237. data/third_party/boringssl-with-bazel/src/crypto/cpu_arm_openbsd.c +31 -0
  238. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519.c +6 -4
  239. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519_tables.h +795 -795
  240. data/third_party/boringssl-with-bazel/src/crypto/curve25519/internal.h +1 -5
  241. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +4 -0
  242. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c +18 -6
  243. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h +15 -7
  244. data/third_party/boringssl-with-bazel/src/crypto/ecdh_extra/ecdh_extra.c +1 -1
  245. data/third_party/boringssl-with-bazel/src/crypto/evp/p_rsa.c +1 -1
  246. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +1 -0
  247. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/dh.c +3 -0
  248. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +24 -24
  249. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +1 -1
  250. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_montgomery.c +7 -7
  251. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +74 -74
  252. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/oct.c +1 -2
  253. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c +11 -11
  254. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-nistz.c +12 -12
  255. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.c +14 -15
  256. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256_table.h +1 -1
  257. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple.c +10 -10
  258. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c +23 -23
  259. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/wnaf.c +13 -13
  260. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdh/ecdh.c +1 -1
  261. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +2 -2
  262. data/third_party/boringssl-with-bazel/src/crypto/{hkdf → fipsmodule/hkdf}/hkdf.c +1 -1
  263. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cbc.c +2 -10
  264. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ctr.c +1 -4
  265. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm.c +115 -133
  266. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm_nohw.c +12 -14
  267. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/internal.h +57 -47
  268. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ofb.c +1 -8
  269. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/polyval.c +27 -28
  270. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +11 -23
  271. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h +21 -16
  272. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/padding.c +5 -288
  273. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +143 -83
  274. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +95 -183
  275. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +71 -0
  276. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/tls/internal.h +8 -0
  277. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/tls/kdf.c +33 -0
  278. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +162 -6
  279. data/third_party/boringssl-with-bazel/src/crypto/internal.h +18 -0
  280. data/third_party/boringssl-with-bazel/src/crypto/kyber/kyber.c +18 -11
  281. data/third_party/boringssl-with-bazel/src/crypto/obj/obj_dat.h +6 -13
  282. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_lib.c +18 -14
  283. data/third_party/boringssl-with-bazel/src/crypto/{refcount_lock.c → refcount_no_threads.c} +3 -13
  284. data/third_party/boringssl-with-bazel/src/crypto/refcount_win.c +89 -0
  285. data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/internal.h +77 -0
  286. data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/rsa_crypt.c +568 -0
  287. data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +62 -0
  288. data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +218 -44
  289. data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +35 -0
  290. data/third_party/boringssl-with-bazel/src/crypto/trust_token/voprf.c +588 -39
  291. data/third_party/boringssl-with-bazel/src/crypto/x509/a_sign.c +27 -18
  292. data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +1 -1
  293. data/third_party/boringssl-with-bazel/src/crypto/x509/name_print.c +17 -39
  294. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c +39 -48
  295. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c +0 -140
  296. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +72 -23
  297. data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +11 -14
  298. data/third_party/boringssl-with-bazel/src/crypto/x509/x509spki.c +1 -1
  299. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509a.c +2 -2
  300. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +1 -1
  301. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_conf.c +33 -46
  302. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +1 -0
  303. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_info.c +3 -5
  304. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +14 -46
  305. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +14 -26
  306. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +17 -10
  307. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +1 -1
  308. data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +5 -7
  309. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +6 -4
  310. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +32 -1
  311. data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +0 -4
  312. data/third_party/boringssl-with-bazel/src/include/openssl/blake2.h +1 -4
  313. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +3 -3
  314. data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +28 -0
  315. data/third_party/boringssl-with-bazel/src/include/openssl/nid.h +2 -11
  316. data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +0 -3
  317. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +91 -1
  318. data/third_party/boringssl-with-bazel/src/include/openssl/span.h +5 -0
  319. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +149 -20
  320. data/third_party/boringssl-with-bazel/src/include/openssl/thread.h +4 -0
  321. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +4 -0
  322. data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +8 -0
  323. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +774 -615
  324. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +42 -10
  325. data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +11 -6
  326. data/third_party/boringssl-with-bazel/src/ssl/extensions.cc +2 -4
  327. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +24 -16
  328. data/third_party/boringssl-with-bazel/src/ssl/internal.h +65 -18
  329. data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +37 -18
  330. data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +187 -193
  331. data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +13 -129
  332. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +85 -10
  333. data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +17 -4
  334. data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +27 -19
  335. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +1 -1
  336. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +5 -21
  337. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +5 -2
  338. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_64_msvc.h +1281 -0
  339. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_64_msvc.h +2002 -0
  340. data/third_party/cares/cares/include/ares.h +23 -1
  341. data/third_party/cares/cares/{src/lib → include}/ares_nameser.h +9 -7
  342. data/third_party/cares/cares/include/ares_rules.h +2 -2
  343. data/third_party/cares/cares/include/ares_version.h +3 -3
  344. data/third_party/cares/cares/src/lib/ares__addrinfo2hostent.c +266 -0
  345. data/third_party/cares/cares/src/lib/ares__addrinfo_localhost.c +240 -0
  346. data/third_party/cares/cares/src/lib/ares__parse_into_addrinfo.c +49 -80
  347. data/third_party/cares/cares/src/lib/ares__readaddrinfo.c +37 -43
  348. data/third_party/cares/cares/src/lib/ares__sortaddrinfo.c +12 -4
  349. data/third_party/cares/cares/src/lib/ares_data.c +16 -0
  350. data/third_party/cares/cares/src/lib/ares_data.h +7 -0
  351. data/third_party/cares/cares/src/lib/ares_destroy.c +8 -0
  352. data/third_party/cares/cares/src/lib/ares_expand_name.c +17 -6
  353. data/third_party/cares/cares/src/lib/ares_freeaddrinfo.c +1 -0
  354. data/third_party/cares/cares/src/lib/ares_getaddrinfo.c +156 -78
  355. data/third_party/cares/cares/src/lib/ares_gethostbyname.c +130 -326
  356. data/third_party/cares/cares/src/lib/ares_init.c +97 -485
  357. data/third_party/cares/cares/src/lib/ares_library_init.c +2 -89
  358. data/third_party/cares/cares/src/lib/ares_parse_a_reply.c +23 -142
  359. data/third_party/cares/cares/src/lib/ares_parse_aaaa_reply.c +22 -142
  360. data/third_party/cares/cares/src/lib/ares_parse_uri_reply.c +184 -0
  361. data/third_party/cares/cares/src/lib/ares_private.h +30 -16
  362. data/third_party/cares/cares/src/lib/ares_process.c +55 -16
  363. data/third_party/cares/cares/src/lib/ares_query.c +1 -35
  364. data/third_party/cares/cares/src/lib/ares_rand.c +279 -0
  365. data/third_party/cares/cares/src/lib/ares_send.c +5 -7
  366. data/third_party/cares/cares/src/lib/ares_strdup.c +12 -19
  367. data/third_party/cares/cares/src/lib/ares_strsplit.c +44 -128
  368. data/third_party/cares/cares/src/lib/ares_strsplit.h +9 -10
  369. data/third_party/cares/cares/src/lib/inet_net_pton.c +78 -116
  370. data/third_party/cares/cares/src/tools/ares_getopt.h +53 -0
  371. metadata +48 -12
  372. data/src/core/ext/filters/client_channel/health/health_check_client.cc +0 -175
  373. data/src/core/ext/filters/client_channel/health/health_check_client.h +0 -43
  374. data/third_party/cares/cares/src/lib/ares_library_init.h +0 -43
@@ -19,175 +19,11 @@
19
19
 
20
20
  #include <grpc/support/port_platform.h>
21
21
 
22
- #include <map>
23
- #include <string>
24
- #include <utility>
25
- #include <vector>
26
-
27
- #include "absl/types/variant.h"
22
+ #include <grpc/support/json.h>
28
23
 
29
24
  namespace grpc_core {
30
25
 
31
- // A JSON value, which can be any one of object, array, string,
32
- // number, true, false, or null.
33
- class Json {
34
- public:
35
- // TODO(roth): Currently, numbers are stored internally as strings,
36
- // which makes the API a bit cumbersome to use. When we have time,
37
- // consider whether there's a better alternative (e.g., maybe storing
38
- // each numeric type as the native C++ type and automatically converting
39
- // to string as needed).
40
- enum class Type { kNull, kTrue, kFalse, kNumber, kString, kObject, kArray };
41
-
42
- using Object = std::map<std::string, Json>;
43
- using Array = std::vector<Json>;
44
-
45
- Json() = default;
46
-
47
- // Copyable.
48
- Json(const Json& other) = default;
49
- Json& operator=(const Json& other) = default;
50
-
51
- // Moveable.
52
- Json(Json&& other) noexcept : value_(std::move(other.value_)) {
53
- other.value_ = absl::monostate();
54
- }
55
- Json& operator=(Json&& other) noexcept {
56
- value_ = std::move(other.value_);
57
- other.value_ = absl::monostate();
58
- return *this;
59
- }
60
-
61
- // Construct from copying a string.
62
- // If is_number is true, the type will be kNumber instead of kString.
63
- // NOLINTNEXTLINE(google-explicit-constructor)
64
- Json(const std::string& string, bool is_number = false)
65
- : value_(is_number ? Value(NumberValue{string}) : Value(string)) {}
66
- Json& operator=(const std::string& string) {
67
- value_ = string;
68
- return *this;
69
- }
70
-
71
- // Same thing for C-style strings, both const and mutable.
72
- // NOLINTNEXTLINE(google-explicit-constructor)
73
- Json(const char* string, bool is_number = false)
74
- : Json(std::string(string), is_number) {}
75
- Json& operator=(const char* string) {
76
- *this = std::string(string);
77
- return *this;
78
- }
79
- // NOLINTNEXTLINE(google-explicit-constructor)
80
- Json(char* string, bool is_number = false)
81
- : Json(std::string(string), is_number) {}
82
- Json& operator=(char* string) {
83
- *this = std::string(string);
84
- return *this;
85
- }
86
-
87
- // Construct by moving a string.
88
- // NOLINTNEXTLINE(google-explicit-constructor)
89
- Json(std::string&& string) : value_(Value(std::move(string))) {}
90
- Json& operator=(std::string&& string) {
91
- value_ = Value(std::move(string));
92
- return *this;
93
- }
94
-
95
- // Construct from bool.
96
- // NOLINTNEXTLINE(google-explicit-constructor)
97
- Json(bool b) : value_(b) {}
98
- Json& operator=(bool b) {
99
- value_ = b;
100
- return *this;
101
- }
102
-
103
- // Construct from any numeric type.
104
- template <typename NumericType>
105
- // NOLINTNEXTLINE(google-explicit-constructor)
106
- Json(NumericType number) : value_(NumberValue{std::to_string(number)}) {}
107
- template <typename NumericType>
108
- Json& operator=(NumericType number) {
109
- value_ = NumberValue{std::to_string(number)};
110
- return *this;
111
- }
112
-
113
- // Construct by copying object.
114
- // NOLINTNEXTLINE(google-explicit-constructor)
115
- Json(const Object& object) : value_(object) {}
116
- Json& operator=(const Object& object) {
117
- value_ = object;
118
- return *this;
119
- }
120
-
121
- // Construct by moving object.
122
- // NOLINTNEXTLINE(google-explicit-constructor)
123
- Json(Object&& object) : value_(std::move(object)) {}
124
- Json& operator=(Object&& object) {
125
- value_ = std::move(object);
126
- return *this;
127
- }
128
-
129
- // Construct by copying array.
130
- // NOLINTNEXTLINE(google-explicit-constructor)
131
- Json(const Array& array) : value_(array) {}
132
- Json& operator=(const Array& array) {
133
- value_ = array;
134
- return *this;
135
- }
136
-
137
- // Construct by moving array.
138
- // NOLINTNEXTLINE(google-explicit-constructor)
139
- Json(Array&& array) : value_(std::move(array)) {}
140
- Json& operator=(Array&& array) {
141
- value_ = std::move(array);
142
- return *this;
143
- }
144
-
145
- // Returns the JSON type.
146
- Type type() const {
147
- struct ValueFunctor {
148
- Json::Type operator()(const absl::monostate&) { return Type::kNull; }
149
- Json::Type operator()(bool value) {
150
- return value ? Type::kTrue : Type::kFalse;
151
- }
152
- Json::Type operator()(const NumberValue&) { return Type::kNumber; }
153
- Json::Type operator()(const std::string&) { return Type::kString; }
154
- Json::Type operator()(const Object&) { return Type::kObject; }
155
- Json::Type operator()(const Array&) { return Type::kArray; }
156
- };
157
- return absl::visit(ValueFunctor(), value_);
158
- }
159
-
160
- // Accessor methods.
161
- const std::string& string() const {
162
- const NumberValue* num = absl::get_if<NumberValue>(&value_);
163
- if (num != nullptr) return num->value;
164
- return absl::get<std::string>(value_);
165
- }
166
- const Object& object() const { return absl::get<Object>(value_); }
167
- const Array& array() const { return absl::get<Array>(value_); }
168
-
169
- bool operator==(const Json& other) const { return value_ == other.value_; }
170
- bool operator!=(const Json& other) const { return !(*this == other); }
171
-
172
- private:
173
- struct NumberValue {
174
- std::string value;
175
-
176
- bool operator==(const NumberValue& other) const {
177
- return value == other.value;
178
- }
179
- };
180
- using Value = absl::variant<absl::monostate, // kNull
181
- bool, // kTrue or kFalse
182
- NumberValue, // kNumber
183
- std::string, // kString
184
- Object, // kObject
185
- Array>; // kArray
186
-
187
- explicit Json(Value value) : value_(std::move(value)) {}
188
-
189
- Value value_;
190
- };
26
+ using Json = experimental::Json;
191
27
 
192
28
  } // namespace grpc_core
193
29
 
@@ -22,6 +22,8 @@
22
22
  #include "absl/strings/str_cat.h"
23
23
  #include "absl/strings/strip.h"
24
24
 
25
+ #include <grpc/support/json.h>
26
+
25
27
  namespace grpc_core {
26
28
  namespace json_detail {
27
29
 
@@ -91,13 +93,11 @@ bool LoadNumber::IsNumber() const { return true; }
91
93
 
92
94
  void LoadBool::LoadInto(const Json& json, const JsonArgs&, void* dst,
93
95
  ValidationErrors* errors) const {
94
- if (json.type() == Json::Type::kTrue) {
95
- *static_cast<bool*>(dst) = true;
96
- } else if (json.type() == Json::Type::kFalse) {
97
- *static_cast<bool*>(dst) = false;
98
- } else {
96
+ if (json.type() != Json::Type::kBoolean) {
99
97
  errors->AddError("is not a boolean");
98
+ return;
100
99
  }
100
+ *static_cast<bool*>(dst) = json.boolean();
101
101
  }
102
102
 
103
103
  void LoadUnprocessedJsonObject::LoadInto(const Json& json, const JsonArgs&,
@@ -168,9 +168,8 @@ void LoadMap::LoadInto(const Json& json, const JsonArgs& args, void* dst,
168
168
  }
169
169
  }
170
170
 
171
- void LoadOptional::LoadInto(const Json& json, const JsonArgs& args, void* dst,
172
- ValidationErrors* errors) const {
173
- if (json.type() == Json::Type::kNull) return;
171
+ void LoadWrapped::LoadInto(const Json& json, const JsonArgs& args, void* dst,
172
+ ValidationErrors* errors) const {
174
173
  void* element = Emplace(dst);
175
174
  size_t starting_error_size = errors->size();
176
175
  ElementLoader()->LoadInto(json, args, element, errors);
@@ -191,7 +190,7 @@ bool LoadObject(const Json& json, const JsonArgs& args, const Element* elements,
191
190
  ValidationErrors::ScopedField field(errors,
192
191
  absl::StrCat(".", element.name));
193
192
  const auto& it = json.object().find(element.name);
194
- if (it == json.object().end()) {
193
+ if (it == json.object().end() || it->second.type() == Json::Type::kNull) {
195
194
  if (element.optional) continue;
196
195
  errors->AddError("field not present");
197
196
  continue;
@@ -253,14 +253,14 @@ class LoadMap : public LoaderInterface {
253
253
  virtual const LoaderInterface* ElementLoader() const = 0;
254
254
  };
255
255
 
256
- // Load an optional of some type.
257
- class LoadOptional : public LoaderInterface {
256
+ // Load a wrapped value of some type.
257
+ class LoadWrapped : public LoaderInterface {
258
258
  public:
259
259
  void LoadInto(const Json& json, const JsonArgs& args, void* dst,
260
260
  ValidationErrors* errors) const override;
261
261
 
262
262
  protected:
263
- ~LoadOptional() = default;
263
+ ~LoadWrapped() = default;
264
264
 
265
265
  private:
266
266
  virtual void* Emplace(void* dst) const = 0;
@@ -392,7 +392,7 @@ class AutoLoader<std::map<std::string, T>> final : public LoadMap {
392
392
 
393
393
  // Specializations of AutoLoader for absl::optional<>.
394
394
  template <typename T>
395
- class AutoLoader<absl::optional<T>> final : public LoadOptional {
395
+ class AutoLoader<absl::optional<T>> final : public LoadWrapped {
396
396
  public:
397
397
  void* Emplace(void* dst) const final {
398
398
  return &static_cast<absl::optional<T>*>(dst)->emplace();
@@ -410,7 +410,7 @@ class AutoLoader<absl::optional<T>> final : public LoadOptional {
410
410
 
411
411
  // Specializations of AutoLoader for std::unique_ptr<>.
412
412
  template <typename T>
413
- class AutoLoader<std::unique_ptr<T>> final : public LoadOptional {
413
+ class AutoLoader<std::unique_ptr<T>> final : public LoadWrapped {
414
414
  public:
415
415
  void* Emplace(void* dst) const final {
416
416
  auto& p = *static_cast<std::unique_ptr<T>*>(dst);
@@ -428,6 +428,26 @@ class AutoLoader<std::unique_ptr<T>> final : public LoadOptional {
428
428
  ~AutoLoader() = default;
429
429
  };
430
430
 
431
+ // Specializations of AutoLoader for RefCountedPtr<>.
432
+ template <typename T>
433
+ class AutoLoader<RefCountedPtr<T>> final : public LoadWrapped {
434
+ public:
435
+ void* Emplace(void* dst) const final {
436
+ auto& p = *static_cast<RefCountedPtr<T>*>(dst);
437
+ p = MakeRefCounted<T>();
438
+ return p.get();
439
+ }
440
+ void Reset(void* dst) const final {
441
+ static_cast<RefCountedPtr<T>*>(dst)->reset();
442
+ }
443
+ const LoaderInterface* ElementLoader() const final {
444
+ return LoaderForType<T>();
445
+ }
446
+
447
+ private:
448
+ ~AutoLoader() = default;
449
+ };
450
+
431
451
  // Implementation of aforementioned LoaderForType.
432
452
  // Simply keeps a static AutoLoader<T> and returns a pointer to that.
433
453
  template <typename T>
@@ -596,19 +616,6 @@ absl::StatusOr<T> LoadFromJson(
596
616
  return std::move(result);
597
617
  }
598
618
 
599
- template <typename T>
600
- absl::StatusOr<RefCountedPtr<T>> LoadRefCountedFromJson(
601
- const Json& json, const JsonArgs& args = JsonArgs(),
602
- absl::string_view error_prefix = "errors validating JSON") {
603
- ValidationErrors errors;
604
- auto result = MakeRefCounted<T>();
605
- json_detail::LoaderForType<T>()->LoadInto(json, args, result.get(), &errors);
606
- if (!errors.ok()) {
607
- return errors.status(absl::StatusCode::kInvalidArgument, error_prefix);
608
- }
609
- return std::move(result);
610
- }
611
-
612
619
  template <typename T>
613
620
  T LoadFromJson(const Json& json, const JsonArgs& args,
614
621
  ValidationErrors* errors) {
@@ -35,6 +35,7 @@
35
35
  #include "absl/strings/string_view.h"
36
36
  #include "absl/types/variant.h"
37
37
 
38
+ #include <grpc/support/json.h>
38
39
  #include <grpc/support/log.h>
39
40
 
40
41
  #include "src/core/lib/gprpp/match.h"
@@ -107,8 +108,13 @@ class JsonReader {
107
108
 
108
109
  Json TakeAsJson() {
109
110
  return MatchMutable(
110
- &data, [&](Json::Object* object) { return Json(std::move(*object)); },
111
- [&](Json::Array* array) { return Json(std::move(*array)); });
111
+ &data,
112
+ [&](Json::Object* object) {
113
+ return Json::FromObject(std::move(*object));
114
+ },
115
+ [&](Json::Array* array) {
116
+ return Json::FromArray(std::move(*array));
117
+ });
112
118
  }
113
119
  };
114
120
 
@@ -307,26 +313,26 @@ void JsonReader::SetKey() {
307
313
 
308
314
  void JsonReader::SetString() {
309
315
  Json* value = CreateAndLinkValue();
310
- *value = std::move(string_);
316
+ *value = Json::FromString(std::move(string_));
311
317
  string_.clear();
312
318
  }
313
319
 
314
320
  bool JsonReader::SetNumber() {
315
321
  Json* value = CreateAndLinkValue();
316
- *value = Json(string_, /*is_number=*/true);
322
+ *value = Json::FromNumber(std::move(string_));
317
323
  string_.clear();
318
324
  return true;
319
325
  }
320
326
 
321
327
  void JsonReader::SetTrue() {
322
328
  Json* value = CreateAndLinkValue();
323
- *value = true;
329
+ *value = Json::FromBool(true);
324
330
  string_.clear();
325
331
  }
326
332
 
327
333
  void JsonReader::SetFalse() {
328
334
  Json* value = CreateAndLinkValue();
329
- *value = false;
335
+ *value = Json::FromBool(false);
330
336
  string_.clear();
331
337
  }
332
338
 
@@ -470,6 +476,7 @@ JsonReader::Status JsonReader::Run() {
470
476
  return Status::GRPC_JSON_PARSE_ERROR;
471
477
  }
472
478
  state_ = State::GRPC_JSON_STATE_VALUE_END;
479
+ container_just_begun_ = false;
473
480
  EndContainer();
474
481
  if (stack_.empty()) {
475
482
  state_ = State::GRPC_JSON_STATE_END;
@@ -37,18 +37,13 @@ bool ParseDurationFromJson(const Json& field, Duration* duration) {
37
37
 
38
38
  bool ExtractJsonBool(const Json& json, absl::string_view field_name,
39
39
  bool* output, std::vector<grpc_error_handle>* error_list) {
40
- switch (json.type()) {
41
- case Json::Type::kTrue:
42
- *output = true;
43
- return true;
44
- case Json::Type::kFalse:
45
- *output = false;
46
- return true;
47
- default:
48
- error_list->push_back(GRPC_ERROR_CREATE(
49
- absl::StrCat("field:", field_name, " error:type should be BOOLEAN")));
50
- return false;
40
+ if (json.type() != Json::Type::kBoolean) {
41
+ error_list->push_back(GRPC_ERROR_CREATE(
42
+ absl::StrCat("field:", field_name, " error:type should be BOOLEAN")));
43
+ return false;
51
44
  }
45
+ *output = json.boolean();
46
+ return true;
52
47
  }
53
48
 
54
49
  bool ExtractJsonArray(const Json& json, absl::string_view field_name,
@@ -145,9 +145,7 @@ void JsonWriter::EscapeString(const std::string& string) {
145
145
  OutputChar('"');
146
146
  for (size_t idx = 0; idx < string.size(); ++idx) {
147
147
  uint8_t c = static_cast<uint8_t>(string[idx]);
148
- if (c == 0) {
149
- break;
150
- } else if (c >= 32 && c <= 126) {
148
+ if (c >= 32 && c <= 126) {
151
149
  if (c == '\\' || c == '"') OutputChar('\\');
152
150
  OutputChar(static_cast<char>(c));
153
151
  } else if (c < 32 || c == 127) {
@@ -311,11 +309,12 @@ void JsonWriter::DumpValue(const Json& value) {
311
309
  case Json::Type::kNumber:
312
310
  ValueRaw(value.string());
313
311
  break;
314
- case Json::Type::kTrue:
315
- ValueRaw(std::string("true", 4));
316
- break;
317
- case Json::Type::kFalse:
318
- ValueRaw(std::string("false", 5));
312
+ case Json::Type::kBoolean:
313
+ if (value.boolean()) {
314
+ ValueRaw(std::string("true", 4));
315
+ } else {
316
+ ValueRaw(std::string("false", 5));
317
+ }
319
318
  break;
320
319
  case Json::Type::kNull:
321
320
  ValueRaw(std::string("null", 4));
@@ -366,6 +366,19 @@ class LoadBalancingPolicy : public InternallyRefCounted<LoadBalancingPolicy> {
366
366
  /// whether the LB policy accepted the update; if non-OK, informs
367
367
  /// polling-based resolvers that they should go into backoff delay and
368
368
  /// eventually reattempt the resolution.
369
+ ///
370
+ /// The first time that UpdateLocked() is called, the LB policy will
371
+ /// generally not be able to determine the appropriate connectivity
372
+ /// state by the time UpdateLocked() returns (e.g., it will need to
373
+ /// wait for connectivity state notifications from each subchannel,
374
+ /// which will be delivered asynchronously). In this case, the LB
375
+ /// policy should not call the helper's UpdateState() method until it
376
+ /// does have a clear picture of the connectivity state (e.g., it
377
+ /// should wait for all subchannels to report connectivity state
378
+ /// before calling the helper's UpdateState() method), although it is
379
+ /// expected to do so within some short period of time. The parent of
380
+ /// the LB policy will assume that the policy's initial state is
381
+ /// CONNECTING and that picks should be queued.
369
382
  virtual absl::Status UpdateLocked(UpdateArgs) = 0; // NOLINT
370
383
 
371
384
  /// Tries to enter a READY connectivity state.
@@ -31,6 +31,7 @@
31
31
  #include "absl/strings/str_join.h"
32
32
  #include "absl/strings/string_view.h"
33
33
 
34
+ #include <grpc/support/json.h>
34
35
  #include <grpc/support/log.h>
35
36
 
36
37
  #include "src/core/lib/load_balancing/lb_policy.h"
@@ -83,7 +84,7 @@ bool LoadBalancingPolicyRegistry::LoadBalancingPolicyExists(
83
84
  if (factory == nullptr) return false;
84
85
  // If requested, check if the load balancing policy allows an empty config.
85
86
  if (requires_config != nullptr) {
86
- auto config = factory->ParseLoadBalancingConfig(Json());
87
+ auto config = factory->ParseLoadBalancingConfig(Json::FromObject({}));
87
88
  *requires_config = !config.ok();
88
89
  }
89
90
  return true;
@@ -159,12 +159,11 @@ std::string StringMatcher::ToString() const {
159
159
  absl::StatusOr<HeaderMatcher> HeaderMatcher::Create(
160
160
  absl::string_view name, Type type, absl::string_view matcher,
161
161
  int64_t range_start, int64_t range_end, bool present_match,
162
- bool invert_match) {
162
+ bool invert_match, bool case_sensitive) {
163
163
  if (static_cast<int>(type) < 5) {
164
164
  // Only for EXACT, PREFIX, SUFFIX, SAFE_REGEX and CONTAINS.
165
- absl::StatusOr<StringMatcher> string_matcher =
166
- StringMatcher::Create(static_cast<StringMatcher::Type>(type), matcher,
167
- /*case_sensitive=*/true);
165
+ absl::StatusOr<StringMatcher> string_matcher = StringMatcher::Create(
166
+ static_cast<StringMatcher::Type>(type), matcher, case_sensitive);
168
167
  if (!string_matcher.ok()) {
169
168
  return string_matcher.status();
170
169
  }
@@ -113,7 +113,8 @@ class HeaderMatcher {
113
113
  int64_t range_start = 0,
114
114
  int64_t range_end = 0,
115
115
  bool present_match = false,
116
- bool invert_match = false);
116
+ bool invert_match = false,
117
+ bool case_sensitive = true);
117
118
 
118
119
  HeaderMatcher() = default;
119
120
  HeaderMatcher(const HeaderMatcher& other);
@@ -26,6 +26,7 @@
26
26
  #include "absl/strings/str_join.h"
27
27
 
28
28
  #include "src/core/lib/gprpp/atomic_utils.h"
29
+ #include "src/core/lib/gprpp/crash.h"
29
30
 
30
31
  namespace grpc_core {
31
32
 
@@ -83,6 +84,10 @@ class FreestandingActivity::Handle final : public Wakeable {
83
84
  Unref();
84
85
  }
85
86
 
87
+ void WakeupAsync(WakeupMask) override ABSL_LOCKS_EXCLUDED(mu_) {
88
+ Crash("not implemented");
89
+ }
90
+
86
91
  void Drop(WakeupMask) override { Unref(); }
87
92
 
88
93
  std::string ActivityDebugTag(WakeupMask) const override {
@@ -32,6 +32,7 @@
32
32
  #include <grpc/support/log.h>
33
33
 
34
34
  #include "src/core/lib/gprpp/construct_destruct.h"
35
+ #include "src/core/lib/gprpp/crash.h"
35
36
  #include "src/core/lib/gprpp/no_destruct.h"
36
37
  #include "src/core/lib/gprpp/orphanable.h"
37
38
  #include "src/core/lib/gprpp/sync.h"
@@ -56,6 +57,9 @@ class Wakeable {
56
57
  // WakeupMask comes from the activity that created this Wakeable and specifies
57
58
  // the set of promises that should be awoken.
58
59
  virtual void Wakeup(WakeupMask wakeup_mask) = 0;
60
+ // Per Wakeup, but guarantee that the activity will be woken up out-of-line.
61
+ // Useful if there may be mutexes or the like held by the current thread.
62
+ virtual void WakeupAsync(WakeupMask wakeup_mask) = 0;
59
63
  // Drop this wakeable without waking up the underlying activity.
60
64
  virtual void Drop(WakeupMask wakeup_mask) = 0;
61
65
 
@@ -69,6 +73,7 @@ class Wakeable {
69
73
  namespace promise_detail {
70
74
  struct Unwakeable final : public Wakeable {
71
75
  void Wakeup(WakeupMask) override {}
76
+ void WakeupAsync(WakeupMask) override {}
72
77
  void Drop(WakeupMask) override {}
73
78
  std::string ActivityDebugTag(WakeupMask) const override;
74
79
  };
@@ -96,6 +101,8 @@ class Waker {
96
101
  // Wake the underlying activity.
97
102
  void Wakeup() { Take().Wakeup(); }
98
103
 
104
+ void WakeupAsync() { Take().WakeupAsync(); }
105
+
99
106
  template <typename H>
100
107
  friend H AbslHashValue(H h, const Waker& w) {
101
108
  return H::combine(H::combine(std::move(h), w.wakeable_and_arg_.wakeable),
@@ -125,6 +132,7 @@ class Waker {
125
132
  WakeupMask wakeup_mask;
126
133
 
127
134
  void Wakeup() { wakeable->Wakeup(wakeup_mask); }
135
+ void WakeupAsync() { wakeable->WakeupAsync(wakeup_mask); }
128
136
  void Drop() { wakeable->Drop(wakeup_mask); }
129
137
  std::string ActivityDebugTag() const {
130
138
  return wakeable == nullptr ? "<unknown>"
@@ -512,6 +520,8 @@ class PromiseActivity final
512
520
  }
513
521
  }
514
522
 
523
+ void WakeupAsync(WakeupMask) final { Crash("not implemented"); }
524
+
515
525
  // Drop a wakeup
516
526
  void Drop(WakeupMask) final { this->WakeupComplete(); }
517
527
 
@@ -169,7 +169,7 @@ absl::enable_if_t<IsVoidCallable<ResultOf<F()>>::value,
169
169
  PromiseLike<decltype(std::declval<F>()())>>
170
170
  PromiseFactoryImpl(F&& f) {
171
171
  return f();
172
- };
172
+ }
173
173
 
174
174
  template <typename A, typename F>
175
175
  class OncePromiseFactory {
@@ -26,12 +26,11 @@
26
26
 
27
27
  #include "src/core/lib/debug/trace.h"
28
28
  #include "src/core/lib/gprpp/sync.h"
29
+ #include "src/core/lib/iomgr/exec_ctx.h"
29
30
  #include "src/core/lib/promise/activity.h"
30
31
  #include "src/core/lib/promise/trace.h"
31
32
 
32
- // #define GRPC_PARTY_MAXIMIZE_THREADS
33
-
34
- #ifdef GRPC_PARTY_MAXIMIZE_THREADS
33
+ #ifdef GRPC_MAXIMIZE_THREADYNESS
35
34
  #include "src/core/lib/gprpp/thd.h" // IWYU pragma: keep
36
35
  #include "src/core/lib/iomgr/exec_ctx.h" // IWYU pragma: keep
37
36
  #endif
@@ -100,9 +99,9 @@ class Party::Handle final : public Wakeable {
100
99
  Unref();
101
100
  }
102
101
 
103
- // Activity needs to wake up (if it still exists!) - wake it up, and drop the
104
- // ref that was kept for this handle.
105
- void Wakeup(WakeupMask wakeup_mask) override ABSL_LOCKS_EXCLUDED(mu_) {
102
+ void WakeupGeneric(WakeupMask wakeup_mask,
103
+ void (Party::*wakeup_method)(WakeupMask))
104
+ ABSL_LOCKS_EXCLUDED(mu_) {
106
105
  mu_.Lock();
107
106
  // Note that activity refcount can drop to zero, but we could win the lock
108
107
  // against DropActivity, so we need to only increase activities refcount if
@@ -112,7 +111,7 @@ class Party::Handle final : public Wakeable {
112
111
  mu_.Unlock();
113
112
  // Activity still exists and we have a reference: wake it up, which will
114
113
  // drop the ref.
115
- party->Wakeup(wakeup_mask);
114
+ (party->*wakeup_method)(wakeup_mask);
116
115
  } else {
117
116
  // Could not get the activity - it's either gone or going. No need to wake
118
117
  // it up!
@@ -122,6 +121,16 @@ class Party::Handle final : public Wakeable {
122
121
  Unref();
123
122
  }
124
123
 
124
+ // Activity needs to wake up (if it still exists!) - wake it up, and drop the
125
+ // ref that was kept for this handle.
126
+ void Wakeup(WakeupMask wakeup_mask) override ABSL_LOCKS_EXCLUDED(mu_) {
127
+ WakeupGeneric(wakeup_mask, &Party::Wakeup);
128
+ }
129
+
130
+ void WakeupAsync(WakeupMask wakeup_mask) override ABSL_LOCKS_EXCLUDED(mu_) {
131
+ WakeupGeneric(wakeup_mask, &Party::WakeupAsync);
132
+ }
133
+
125
134
  void Drop(WakeupMask) override { Unref(); }
126
135
 
127
136
  std::string ActivityDebugTag(WakeupMask) const override {
@@ -202,7 +211,7 @@ void Party::RunLocked() {
202
211
  PartyOver();
203
212
  }
204
213
  };
205
- #ifdef GRPC_PARTY_MAXIMIZE_THREADS
214
+ #ifdef GRPC_MAXIMIZE_THREADYNESS
206
215
  Thread thd(
207
216
  "RunParty",
208
217
  [body]() {
@@ -267,15 +276,24 @@ void Party::AddParticipants(Participant** participants, size_t count) {
267
276
  Unref();
268
277
  }
269
278
 
270
- void Party::ScheduleWakeup(WakeupMask mask) {
271
- if (sync_.ScheduleWakeup(mask)) RunLocked();
272
- }
273
-
274
279
  void Party::Wakeup(WakeupMask wakeup_mask) {
275
- ScheduleWakeup(wakeup_mask);
280
+ if (sync_.ScheduleWakeup(wakeup_mask)) RunLocked();
276
281
  Unref();
277
282
  }
278
283
 
284
+ void Party::WakeupAsync(WakeupMask wakeup_mask) {
285
+ if (sync_.ScheduleWakeup(wakeup_mask)) {
286
+ event_engine()->Run([this]() {
287
+ ApplicationCallbackExecCtx app_exec_ctx;
288
+ ExecCtx exec_ctx;
289
+ RunLocked();
290
+ Unref();
291
+ });
292
+ } else {
293
+ Unref();
294
+ }
295
+ }
296
+
279
297
  void Party::Drop(WakeupMask) { Unref(); }
280
298
 
281
299
  void Party::PartyIsOver() {