grpc 1.55.3 → 1.56.0.pre3

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 (385) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +100 -70
  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 +82 -98
  11. data/src/core/ext/filters/client_channel/client_channel.h +4 -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/hpack_parser.cc +543 -567
  56. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +9 -150
  57. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +32 -46
  58. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +5 -18
  59. data/src/core/ext/transport/chttp2/transport/internal.h +1 -15
  60. data/src/core/ext/transport/chttp2/transport/parsing.cc +12 -12
  61. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +11 -2
  62. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +15 -0
  63. data/src/core/ext/xds/certificate_provider_store.cc +4 -9
  64. data/src/core/ext/xds/certificate_provider_store.h +1 -1
  65. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +30 -42
  66. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +14 -9
  67. data/src/core/ext/xds/xds_api.cc +9 -6
  68. data/src/core/ext/xds/xds_api.h +3 -2
  69. data/src/core/ext/xds/xds_audit_logger_registry.cc +122 -0
  70. data/src/core/ext/xds/xds_audit_logger_registry.h +68 -0
  71. data/src/core/ext/xds/xds_bootstrap_grpc.cc +21 -9
  72. data/src/core/ext/xds/xds_bootstrap_grpc.h +5 -0
  73. data/src/core/ext/xds/xds_client.cc +5 -4
  74. data/src/core/ext/xds/xds_client_stats.h +1 -1
  75. data/src/core/ext/xds/xds_cluster.cc +20 -19
  76. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +11 -8
  77. data/src/core/ext/xds/xds_common_types.cc +3 -1
  78. data/src/core/ext/xds/xds_http_fault_filter.cc +16 -13
  79. data/src/core/ext/xds/xds_http_fault_filter.h +2 -1
  80. data/src/core/ext/xds/xds_http_filters.h +4 -2
  81. data/src/core/ext/xds/xds_http_rbac_filter.cc +154 -67
  82. data/src/core/ext/xds/xds_http_rbac_filter.h +2 -1
  83. data/src/core/ext/xds/xds_http_stateful_session_filter.cc +15 -11
  84. data/src/core/ext/xds/xds_http_stateful_session_filter.h +2 -1
  85. data/src/core/ext/xds/xds_lb_policy_registry.cc +22 -16
  86. data/src/core/ext/xds/xds_listener.cc +1 -0
  87. data/src/core/ext/xds/xds_route_config.cc +40 -3
  88. data/src/core/ext/xds/xds_routing.cc +2 -2
  89. data/src/core/ext/xds/xds_transport_grpc.cc +3 -1
  90. data/src/core/lib/avl/avl.h +5 -0
  91. data/src/core/lib/backoff/random_early_detection.h +0 -5
  92. data/src/core/lib/channel/channel_args.cc +80 -22
  93. data/src/core/lib/channel/channel_args.h +34 -1
  94. data/src/core/lib/channel/channel_trace.cc +16 -12
  95. data/src/core/lib/channel/channelz.cc +159 -132
  96. data/src/core/lib/channel/channelz.h +42 -35
  97. data/src/core/lib/channel/channelz_registry.cc +23 -20
  98. data/src/core/lib/channel/connected_channel.cc +17 -6
  99. data/src/core/lib/channel/promise_based_filter.cc +0 -4
  100. data/src/core/lib/channel/promise_based_filter.h +2 -0
  101. data/src/core/lib/compression/compression_internal.cc +2 -5
  102. data/src/core/lib/config/config_vars.cc +20 -18
  103. data/src/core/lib/config/config_vars.h +4 -4
  104. data/src/core/lib/config/load_config.cc +13 -0
  105. data/src/core/lib/config/load_config.h +6 -0
  106. data/src/core/lib/debug/event_log.h +1 -1
  107. data/src/core/lib/debug/stats_data.h +1 -1
  108. data/src/core/lib/debug/trace.cc +24 -55
  109. data/src/core/lib/debug/trace.h +3 -1
  110. data/src/core/lib/event_engine/cf_engine/cf_engine.cc +211 -0
  111. data/src/core/lib/event_engine/cf_engine/cf_engine.h +86 -0
  112. data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.cc +354 -0
  113. data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.h +146 -0
  114. data/src/core/lib/event_engine/cf_engine/cftype_unique_ref.h +79 -0
  115. data/src/core/lib/event_engine/default_event_engine.cc +13 -1
  116. data/src/core/lib/event_engine/default_event_engine_factory.cc +14 -2
  117. data/src/core/lib/event_engine/poller.h +2 -2
  118. data/src/core/lib/event_engine/posix.h +4 -0
  119. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +1 -1
  120. data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +7 -18
  121. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +9 -0
  122. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +3 -2
  123. data/src/core/lib/event_engine/posix_engine/posix_engine.h +1 -2
  124. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +4 -33
  125. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.h +7 -11
  126. data/src/core/lib/event_engine/posix_engine/timer_manager.h +1 -1
  127. data/src/core/lib/event_engine/shim.cc +7 -1
  128. data/src/core/lib/event_engine/{thread_pool.cc → thread_pool/original_thread_pool.cc} +28 -25
  129. data/src/core/lib/event_engine/{thread_pool.h → thread_pool/original_thread_pool.h} +11 -15
  130. data/src/core/lib/event_engine/thread_pool/thread_pool.h +50 -0
  131. data/src/core/lib/event_engine/{executor/executor.h → thread_pool/thread_pool_factory.cc} +17 -15
  132. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +489 -0
  133. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.h +249 -0
  134. data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.cc +166 -0
  135. data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.h +108 -0
  136. data/src/core/lib/event_engine/windows/iocp.cc +4 -3
  137. data/src/core/lib/event_engine/windows/iocp.h +3 -3
  138. data/src/core/lib/event_engine/windows/win_socket.cc +6 -6
  139. data/src/core/lib/event_engine/windows/win_socket.h +4 -4
  140. data/src/core/lib/event_engine/windows/windows_endpoint.cc +11 -10
  141. data/src/core/lib/event_engine/windows/windows_endpoint.h +3 -2
  142. data/src/core/lib/event_engine/windows/windows_engine.cc +19 -17
  143. data/src/core/lib/event_engine/windows/windows_engine.h +6 -6
  144. data/src/core/lib/event_engine/windows/windows_listener.cc +3 -3
  145. data/src/core/lib/event_engine/windows/windows_listener.h +3 -2
  146. data/src/core/lib/event_engine/work_queue/basic_work_queue.cc +63 -0
  147. data/src/core/lib/event_engine/work_queue/basic_work_queue.h +71 -0
  148. data/src/core/lib/event_engine/work_queue/work_queue.h +62 -0
  149. data/src/core/lib/experiments/config.cc +38 -7
  150. data/src/core/lib/experiments/config.h +16 -0
  151. data/src/core/lib/experiments/experiments.cc +67 -20
  152. data/src/core/lib/experiments/experiments.h +27 -21
  153. data/src/core/lib/gpr/log_internal.h +55 -0
  154. data/src/core/lib/gprpp/crash.cc +10 -0
  155. data/src/core/lib/gprpp/crash.h +3 -0
  156. data/src/core/lib/gprpp/per_cpu.cc +33 -0
  157. data/src/core/lib/gprpp/per_cpu.h +29 -6
  158. data/src/core/lib/gprpp/time.cc +1 -0
  159. data/src/core/lib/iomgr/cfstream_handle.cc +1 -1
  160. data/src/core/lib/iomgr/endpoint_cfstream.cc +10 -8
  161. data/src/core/lib/iomgr/ev_apple.cc +12 -12
  162. data/src/core/lib/iomgr/ev_epoll1_linux.cc +10 -3
  163. data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +15 -1
  164. data/src/core/lib/iomgr/iocp_windows.cc +24 -3
  165. data/src/core/lib/iomgr/iocp_windows.h +11 -0
  166. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +1 -1
  167. data/src/core/lib/iomgr/socket_utils_common_posix.cc +4 -2
  168. data/src/core/lib/iomgr/socket_windows.cc +61 -7
  169. data/src/core/lib/iomgr/socket_windows.h +9 -2
  170. data/src/core/lib/iomgr/tcp_client_cfstream.cc +14 -3
  171. data/src/core/lib/iomgr/tcp_server_posix.cc +156 -140
  172. data/src/core/lib/iomgr/tcp_server_utils_posix.h +1 -13
  173. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +0 -21
  174. data/src/core/lib/iomgr/tcp_server_windows.cc +1 -1
  175. data/src/core/lib/json/json.h +2 -166
  176. data/src/core/lib/json/json_object_loader.cc +8 -9
  177. data/src/core/lib/json/json_object_loader.h +25 -18
  178. data/src/core/lib/json/json_reader.cc +13 -6
  179. data/src/core/lib/json/json_util.cc +6 -11
  180. data/src/core/lib/json/json_writer.cc +7 -8
  181. data/src/core/lib/load_balancing/lb_policy.h +13 -0
  182. data/src/core/lib/load_balancing/lb_policy_registry.cc +2 -1
  183. data/src/core/lib/matchers/matchers.cc +3 -4
  184. data/src/core/lib/matchers/matchers.h +2 -1
  185. data/src/core/lib/promise/activity.cc +5 -0
  186. data/src/core/lib/promise/activity.h +10 -0
  187. data/src/core/lib/promise/detail/promise_factory.h +1 -1
  188. data/src/core/lib/promise/party.cc +31 -13
  189. data/src/core/lib/promise/party.h +11 -2
  190. data/src/core/lib/promise/pipe.h +9 -2
  191. data/src/core/lib/promise/prioritized_race.h +95 -0
  192. data/src/core/lib/promise/sleep.cc +2 -1
  193. data/src/core/lib/resolver/server_address.cc +0 -8
  194. data/src/core/lib/resolver/server_address.h +0 -6
  195. data/src/core/lib/resource_quota/memory_quota.cc +7 -7
  196. data/src/core/lib/resource_quota/memory_quota.h +1 -2
  197. data/src/core/lib/security/authorization/audit_logging.cc +98 -0
  198. data/src/core/lib/security/authorization/audit_logging.h +73 -0
  199. data/src/core/lib/security/authorization/grpc_authorization_engine.cc +47 -2
  200. data/src/core/lib/security/authorization/grpc_authorization_engine.h +18 -1
  201. data/src/core/lib/security/authorization/rbac_policy.cc +36 -4
  202. data/src/core/lib/security/authorization/rbac_policy.h +19 -2
  203. data/src/core/lib/security/authorization/stdout_logger.cc +75 -0
  204. data/src/core/lib/security/authorization/stdout_logger.h +61 -0
  205. data/src/core/lib/security/certificate_provider/certificate_provider_factory.h +8 -4
  206. data/src/core/lib/security/certificate_provider/certificate_provider_registry.cc +8 -18
  207. data/src/core/lib/security/certificate_provider/certificate_provider_registry.h +14 -8
  208. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +19 -12
  209. data/src/core/lib/security/credentials/external/external_account_credentials.cc +4 -2
  210. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +1 -0
  211. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +1 -0
  212. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +1 -0
  213. data/src/core/lib/security/credentials/jwt/json_token.cc +15 -14
  214. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +4 -2
  215. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +1 -0
  216. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +1 -0
  217. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +1 -5
  218. data/src/core/lib/security/util/json_util.cc +1 -0
  219. data/src/core/lib/service_config/service_config_call_data.h +49 -20
  220. data/src/core/lib/service_config/service_config_impl.cc +2 -1
  221. data/src/core/lib/surface/call.cc +38 -23
  222. data/src/core/lib/surface/completion_queue.cc +6 -2
  223. data/src/core/lib/surface/validate_metadata.cc +22 -37
  224. data/src/core/lib/surface/validate_metadata.h +3 -13
  225. data/src/core/lib/surface/version.cc +2 -2
  226. data/src/core/lib/transport/batch_builder.cc +15 -12
  227. data/src/core/lib/transport/batch_builder.h +39 -35
  228. data/src/core/plugin_registry/grpc_plugin_registry.cc +0 -2
  229. data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +2 -0
  230. data/src/ruby/ext/grpc/extconf.rb +8 -9
  231. data/src/ruby/lib/grpc/version.rb +1 -1
  232. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_mbstr.c +9 -8
  233. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c +1 -1
  234. data/third_party/boringssl-with-bazel/src/crypto/asn1/internal.h +3 -3
  235. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +10 -6
  236. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +7 -4
  237. data/third_party/boringssl-with-bazel/src/crypto/bio/bio.c +6 -4
  238. data/third_party/boringssl-with-bazel/src/crypto/bio/fd.c +2 -1
  239. data/third_party/boringssl-with-bazel/src/crypto/bio/file.c +5 -9
  240. data/third_party/boringssl-with-bazel/src/crypto/bio/pair.c +4 -2
  241. data/third_party/boringssl-with-bazel/src/crypto/blake2/blake2.c +31 -22
  242. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_tls.c +29 -26
  243. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h +8 -0
  244. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +189 -13
  245. data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_openbsd.c +62 -0
  246. data/third_party/boringssl-with-bazel/src/crypto/cpu_arm_openbsd.c +31 -0
  247. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519.c +6 -4
  248. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519_tables.h +795 -795
  249. data/third_party/boringssl-with-bazel/src/crypto/curve25519/internal.h +1 -5
  250. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +4 -0
  251. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c +18 -6
  252. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h +15 -7
  253. data/third_party/boringssl-with-bazel/src/crypto/ecdh_extra/ecdh_extra.c +1 -1
  254. data/third_party/boringssl-with-bazel/src/crypto/evp/p_rsa.c +1 -1
  255. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +1 -0
  256. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/dh.c +3 -0
  257. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +24 -24
  258. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +1 -1
  259. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_montgomery.c +7 -7
  260. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +74 -74
  261. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/oct.c +1 -2
  262. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c +11 -11
  263. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-nistz.c +12 -12
  264. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.c +14 -15
  265. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256_table.h +1 -1
  266. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple.c +10 -10
  267. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c +23 -23
  268. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/wnaf.c +13 -13
  269. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdh/ecdh.c +1 -1
  270. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +2 -2
  271. data/third_party/boringssl-with-bazel/src/crypto/{hkdf → fipsmodule/hkdf}/hkdf.c +1 -1
  272. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cbc.c +2 -10
  273. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ctr.c +1 -4
  274. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm.c +115 -133
  275. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm_nohw.c +12 -14
  276. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/internal.h +57 -47
  277. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ofb.c +1 -8
  278. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/polyval.c +27 -28
  279. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +11 -23
  280. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h +21 -16
  281. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/padding.c +5 -288
  282. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +143 -83
  283. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +95 -183
  284. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +71 -0
  285. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/tls/internal.h +8 -0
  286. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/tls/kdf.c +33 -0
  287. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +162 -6
  288. data/third_party/boringssl-with-bazel/src/crypto/internal.h +18 -0
  289. data/third_party/boringssl-with-bazel/src/crypto/kyber/kyber.c +18 -11
  290. data/third_party/boringssl-with-bazel/src/crypto/obj/obj_dat.h +6 -13
  291. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_lib.c +18 -14
  292. data/third_party/boringssl-with-bazel/src/crypto/{refcount_lock.c → refcount_no_threads.c} +3 -13
  293. data/third_party/boringssl-with-bazel/src/crypto/refcount_win.c +89 -0
  294. data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/internal.h +77 -0
  295. data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/rsa_crypt.c +568 -0
  296. data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +62 -0
  297. data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +218 -44
  298. data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +35 -0
  299. data/third_party/boringssl-with-bazel/src/crypto/trust_token/voprf.c +588 -39
  300. data/third_party/boringssl-with-bazel/src/crypto/x509/a_sign.c +27 -18
  301. data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +1 -1
  302. data/third_party/boringssl-with-bazel/src/crypto/x509/name_print.c +17 -39
  303. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c +39 -48
  304. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c +0 -140
  305. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +72 -23
  306. data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +11 -14
  307. data/third_party/boringssl-with-bazel/src/crypto/x509/x509spki.c +1 -1
  308. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509a.c +2 -2
  309. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +1 -1
  310. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_conf.c +33 -46
  311. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +1 -0
  312. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_info.c +3 -5
  313. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +14 -46
  314. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +14 -26
  315. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +17 -10
  316. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +1 -1
  317. data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +5 -7
  318. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +6 -4
  319. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +32 -1
  320. data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +0 -4
  321. data/third_party/boringssl-with-bazel/src/include/openssl/blake2.h +1 -4
  322. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +3 -3
  323. data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +28 -0
  324. data/third_party/boringssl-with-bazel/src/include/openssl/nid.h +2 -11
  325. data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +0 -3
  326. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +91 -1
  327. data/third_party/boringssl-with-bazel/src/include/openssl/span.h +5 -0
  328. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +149 -20
  329. data/third_party/boringssl-with-bazel/src/include/openssl/thread.h +4 -0
  330. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +4 -0
  331. data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +8 -0
  332. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +774 -615
  333. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +42 -10
  334. data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +11 -6
  335. data/third_party/boringssl-with-bazel/src/ssl/extensions.cc +2 -4
  336. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +24 -16
  337. data/third_party/boringssl-with-bazel/src/ssl/internal.h +65 -18
  338. data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +37 -18
  339. data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +187 -193
  340. data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +13 -129
  341. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +85 -10
  342. data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +17 -4
  343. data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +27 -19
  344. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +1 -1
  345. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +5 -21
  346. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +5 -2
  347. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_64_msvc.h +1281 -0
  348. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_64_msvc.h +2002 -0
  349. data/third_party/cares/cares/include/ares.h +23 -1
  350. data/third_party/cares/cares/{src/lib → include}/ares_nameser.h +9 -7
  351. data/third_party/cares/cares/include/ares_rules.h +2 -2
  352. data/third_party/cares/cares/include/ares_version.h +3 -3
  353. data/third_party/cares/cares/src/lib/ares__addrinfo2hostent.c +266 -0
  354. data/third_party/cares/cares/src/lib/ares__addrinfo_localhost.c +240 -0
  355. data/third_party/cares/cares/src/lib/ares__parse_into_addrinfo.c +49 -80
  356. data/third_party/cares/cares/src/lib/ares__readaddrinfo.c +37 -43
  357. data/third_party/cares/cares/src/lib/ares__sortaddrinfo.c +12 -4
  358. data/third_party/cares/cares/src/lib/ares_data.c +16 -0
  359. data/third_party/cares/cares/src/lib/ares_data.h +7 -0
  360. data/third_party/cares/cares/src/lib/ares_destroy.c +8 -0
  361. data/third_party/cares/cares/src/lib/ares_expand_name.c +17 -6
  362. data/third_party/cares/cares/src/lib/ares_freeaddrinfo.c +1 -0
  363. data/third_party/cares/cares/src/lib/ares_getaddrinfo.c +156 -78
  364. data/third_party/cares/cares/src/lib/ares_gethostbyname.c +130 -326
  365. data/third_party/cares/cares/src/lib/ares_init.c +97 -485
  366. data/third_party/cares/cares/src/lib/ares_library_init.c +2 -89
  367. data/third_party/cares/cares/src/lib/ares_parse_a_reply.c +23 -142
  368. data/third_party/cares/cares/src/lib/ares_parse_aaaa_reply.c +22 -142
  369. data/third_party/cares/cares/src/lib/ares_parse_uri_reply.c +184 -0
  370. data/third_party/cares/cares/src/lib/ares_private.h +30 -16
  371. data/third_party/cares/cares/src/lib/ares_process.c +55 -16
  372. data/third_party/cares/cares/src/lib/ares_query.c +1 -35
  373. data/third_party/cares/cares/src/lib/ares_rand.c +279 -0
  374. data/third_party/cares/cares/src/lib/ares_send.c +5 -7
  375. data/third_party/cares/cares/src/lib/ares_strdup.c +12 -19
  376. data/third_party/cares/cares/src/lib/ares_strsplit.c +44 -128
  377. data/third_party/cares/cares/src/lib/ares_strsplit.h +9 -10
  378. data/third_party/cares/cares/src/lib/inet_net_pton.c +78 -116
  379. data/third_party/cares/cares/src/tools/ares_getopt.h +53 -0
  380. metadata +50 -16
  381. data/src/core/ext/filters/client_channel/health/health_check_client.cc +0 -175
  382. data/src/core/ext/filters/client_channel/health/health_check_client.h +0 -43
  383. data/src/core/ext/transport/chttp2/transport/hpack_parse_result.cc +0 -176
  384. data/src/core/ext/transport/chttp2/transport/hpack_parse_result.h +0 -325
  385. data/third_party/cares/cares/src/lib/ares_library_init.h +0 -43
@@ -48,7 +48,8 @@ class XdsHttpStatefulSessionFilter : public XdsHttpFilterImpl {
48
48
  ChannelArgs ModifyChannelArgs(const ChannelArgs& args) const override;
49
49
  absl::StatusOr<ServiceConfigJsonEntry> GenerateServiceConfig(
50
50
  const FilterConfig& hcm_filter_config,
51
- const FilterConfig* filter_config_override) const override;
51
+ const FilterConfig* filter_config_override,
52
+ absl::string_view filter_name) const override;
52
53
  bool IsSupportedOnClients() const override { return true; }
53
54
  bool IsSupportedOnServers() const override { return false; }
54
55
  };
@@ -33,6 +33,8 @@
33
33
  #include "envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.h"
34
34
  #include "google/protobuf/wrappers.upb.h"
35
35
 
36
+ #include <grpc/support/json.h>
37
+
36
38
  #include "src/core/ext/xds/xds_common_types.h"
37
39
  #include "src/core/lib/config/core_configuration.h"
38
40
  #include "src/core/lib/gprpp/time.h"
@@ -51,7 +53,7 @@ class RoundRobinLbPolicyConfigFactory
51
53
  const XdsResourceType::DecodeContext& /*context*/,
52
54
  absl::string_view /*configuration*/, ValidationErrors* /*errors*/,
53
55
  int /*recursion_depth*/) override {
54
- return Json::Object{{"round_robin", Json::Object()}};
56
+ return Json::Object{{"round_robin", Json::FromObject({})}};
55
57
  }
56
58
 
57
59
  absl::string_view type() override { return Type(); }
@@ -84,7 +86,7 @@ class ClientSideWeightedRoundRobinLbPolicyConfigFactory
84
86
  resource);
85
87
  if (enable_oob_load_report != nullptr &&
86
88
  google_protobuf_BoolValue_value(enable_oob_load_report)) {
87
- config["enableOobLoadReport"] = true;
89
+ config["enableOobLoadReport"] = Json::FromBool(true);
88
90
  }
89
91
  // oob_reporting_period
90
92
  auto* duration_proto =
@@ -93,7 +95,7 @@ class ClientSideWeightedRoundRobinLbPolicyConfigFactory
93
95
  if (duration_proto != nullptr) {
94
96
  ValidationErrors::ScopedField field(errors, ".oob_reporting_period");
95
97
  Duration duration = ParseDuration(duration_proto, errors);
96
- config["oobReportingPeriod"] = duration.ToJsonString();
98
+ config["oobReportingPeriod"] = Json::FromString(duration.ToJsonString());
97
99
  }
98
100
  // blackout_period
99
101
  duration_proto =
@@ -102,7 +104,7 @@ class ClientSideWeightedRoundRobinLbPolicyConfigFactory
102
104
  if (duration_proto != nullptr) {
103
105
  ValidationErrors::ScopedField field(errors, ".blackout_period");
104
106
  Duration duration = ParseDuration(duration_proto, errors);
105
- config["blackoutPeriod"] = duration.ToJsonString();
107
+ config["blackoutPeriod"] = Json::FromString(duration.ToJsonString());
106
108
  }
107
109
  // weight_update_period
108
110
  duration_proto =
@@ -111,7 +113,7 @@ class ClientSideWeightedRoundRobinLbPolicyConfigFactory
111
113
  if (duration_proto != nullptr) {
112
114
  ValidationErrors::ScopedField field(errors, ".weight_update_period");
113
115
  Duration duration = ParseDuration(duration_proto, errors);
114
- config["weightUpdatePeriod"] = duration.ToJsonString();
116
+ config["weightUpdatePeriod"] = Json::FromString(duration.ToJsonString());
115
117
  }
116
118
  // weight_expiration_period
117
119
  duration_proto =
@@ -120,7 +122,8 @@ class ClientSideWeightedRoundRobinLbPolicyConfigFactory
120
122
  if (duration_proto != nullptr) {
121
123
  ValidationErrors::ScopedField field(errors, ".weight_expiration_period");
122
124
  Duration duration = ParseDuration(duration_proto, errors);
123
- config["weightExpirationPeriod"] = duration.ToJsonString();
125
+ config["weightExpirationPeriod"] =
126
+ Json::FromString(duration.ToJsonString());
124
127
  }
125
128
  // error_utilization_penalty
126
129
  auto* error_utilization_penalty =
@@ -133,9 +136,10 @@ class ClientSideWeightedRoundRobinLbPolicyConfigFactory
133
136
  if (value < 0.0) {
134
137
  errors->AddError("value must be non-negative");
135
138
  }
136
- config["errorUtilizationPenalty"] = value;
139
+ config["errorUtilizationPenalty"] = Json::FromNumber(value);
137
140
  }
138
- return Json::Object{{"weighted_round_robin", std::move(config)}};
141
+ return Json::Object{
142
+ {"weighted_round_robin", Json::FromObject(std::move(config))}};
139
143
  }
140
144
 
141
145
  absl::string_view type() override { return Type(); }
@@ -197,10 +201,10 @@ class RingHashLbPolicyConfigFactory
197
201
  }
198
202
  return Json::Object{
199
203
  {"ring_hash_experimental",
200
- Json::Object{
201
- {"minRingSize", min_ring_size},
202
- {"maxRingSize", max_ring_size},
203
- }},
204
+ Json::FromObject({
205
+ {"minRingSize", Json::FromNumber(min_ring_size)},
206
+ {"maxRingSize", Json::FromNumber(max_ring_size)},
207
+ })},
204
208
  };
205
209
  }
206
210
 
@@ -238,7 +242,8 @@ class WrrLocalityLbPolicyConfigFactory
238
242
  context, endpoint_picking_policy, errors, recursion_depth + 1);
239
243
  return Json::Object{
240
244
  {"xds_wrr_locality_experimental",
241
- Json::Object{{"childPolicy", std::move(child_policy)}}}};
245
+ Json::FromObject(
246
+ {{"childPolicy", Json::FromArray(std::move(child_policy))}})}};
242
247
  }
243
248
 
244
249
  absl::string_view type() override { return Type(); }
@@ -306,8 +311,9 @@ Json::Array XdsLbPolicyRegistry::ConvertXdsLbPolicyConfig(
306
311
  if (serialized_value != nullptr) {
307
312
  auto config_factory_it = policy_config_factories_.find(extension->type);
308
313
  if (config_factory_it != policy_config_factories_.end()) {
309
- return Json::Array{config_factory_it->second->ConvertXdsLbPolicyConfig(
310
- this, context, *serialized_value, errors, recursion_depth)};
314
+ return Json::Array{Json::FromObject(
315
+ config_factory_it->second->ConvertXdsLbPolicyConfig(
316
+ this, context, *serialized_value, errors, recursion_depth))};
311
317
  }
312
318
  }
313
319
  // Check for custom LB policy type.
@@ -316,7 +322,7 @@ Json::Array XdsLbPolicyRegistry::ConvertXdsLbPolicyConfig(
316
322
  CoreConfiguration::Get().lb_policy_registry().LoadBalancingPolicyExists(
317
323
  extension->type, nullptr)) {
318
324
  return Json::Array{
319
- Json::Object{{std::string(extension->type), std::move(*json)}}};
325
+ Json::FromObject({{std::string(extension->type), std::move(*json)}})};
320
326
  }
321
327
  // Unsupported type. Continue to next entry.
322
328
  }
@@ -37,6 +37,7 @@
37
37
  #include "envoy/config/listener/v3/listener.upb.h"
38
38
  #include "envoy/config/listener/v3/listener.upbdefs.h"
39
39
  #include "envoy/config/listener/v3/listener_components.upb.h"
40
+ #include "envoy/config/rbac/v3/rbac.upb.h"
40
41
  #include "envoy/config/route/v3/route.upb.h"
41
42
  #include "envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h"
42
43
  #include "envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h"
@@ -45,6 +45,7 @@
45
45
  #include "envoy/config/route/v3/route.upbdefs.h"
46
46
  #include "envoy/config/route/v3/route_components.upb.h"
47
47
  #include "envoy/type/matcher/v3/regex.upb.h"
48
+ #include "envoy/type/matcher/v3/string.upb.h"
48
49
  #include "envoy/type/v3/percent.upb.h"
49
50
  #include "envoy/type/v3/range.upb.h"
50
51
  #include "google/protobuf/any.upb.h"
@@ -79,10 +80,10 @@
79
80
 
80
81
  namespace grpc_core {
81
82
 
82
- // TODO(donnadionne): Remove once RLS is no longer experimental
83
+ // TODO(apolcyn): remove this flag by the 1.58 release
83
84
  bool XdsRlsEnabled() {
84
85
  auto value = GetEnv("GRPC_EXPERIMENTAL_XDS_RLS_LB");
85
- if (!value.has_value()) return false;
86
+ if (!value.has_value()) return true;
86
87
  bool parsed_value;
87
88
  bool parse_succeeded = gpr_parse_bool_value(value->c_str(), &parsed_value);
88
89
  return parse_succeeded && parsed_value;
@@ -486,6 +487,7 @@ void RouteHeaderMatchersParse(const envoy_config_route_v3_RouteMatch* match,
486
487
  int64_t range_start = 0;
487
488
  int64_t range_end = 0;
488
489
  bool present_match = false;
490
+ bool case_sensitive = true;
489
491
  if (envoy_config_route_v3_HeaderMatcher_has_exact_match(header)) {
490
492
  type = HeaderMatcher::Type::kExact;
491
493
  match_string = UpbStringToStdString(
@@ -514,11 +516,46 @@ void RouteHeaderMatchersParse(const envoy_config_route_v3_RouteMatch* match,
514
516
  type = HeaderMatcher::Type::kRange;
515
517
  const envoy_type_v3_Int64Range* range_matcher =
516
518
  envoy_config_route_v3_HeaderMatcher_range_match(header);
519
+ GPR_ASSERT(range_matcher != nullptr);
517
520
  range_start = envoy_type_v3_Int64Range_start(range_matcher);
518
521
  range_end = envoy_type_v3_Int64Range_end(range_matcher);
519
522
  } else if (envoy_config_route_v3_HeaderMatcher_has_present_match(header)) {
520
523
  type = HeaderMatcher::Type::kPresent;
521
524
  present_match = envoy_config_route_v3_HeaderMatcher_present_match(header);
525
+ } else if (envoy_config_route_v3_HeaderMatcher_has_string_match(header)) {
526
+ ValidationErrors::ScopedField field(errors, ".string_match");
527
+ const auto* matcher =
528
+ envoy_config_route_v3_HeaderMatcher_string_match(header);
529
+ GPR_ASSERT(matcher != nullptr);
530
+ if (envoy_type_matcher_v3_StringMatcher_has_exact(matcher)) {
531
+ type = HeaderMatcher::Type::kExact;
532
+ match_string = UpbStringToStdString(
533
+ envoy_type_matcher_v3_StringMatcher_exact(matcher));
534
+ } else if (envoy_type_matcher_v3_StringMatcher_has_prefix(matcher)) {
535
+ type = HeaderMatcher::Type::kPrefix;
536
+ match_string = UpbStringToStdString(
537
+ envoy_type_matcher_v3_StringMatcher_prefix(matcher));
538
+ } else if (envoy_type_matcher_v3_StringMatcher_has_suffix(matcher)) {
539
+ type = HeaderMatcher::Type::kSuffix;
540
+ match_string = UpbStringToStdString(
541
+ envoy_type_matcher_v3_StringMatcher_suffix(matcher));
542
+ } else if (envoy_type_matcher_v3_StringMatcher_has_contains(matcher)) {
543
+ type = HeaderMatcher::Type::kContains;
544
+ match_string = UpbStringToStdString(
545
+ envoy_type_matcher_v3_StringMatcher_contains(matcher));
546
+ } else if (envoy_type_matcher_v3_StringMatcher_has_safe_regex(matcher)) {
547
+ type = HeaderMatcher::Type::kSafeRegex;
548
+ const auto* regex_matcher =
549
+ envoy_type_matcher_v3_StringMatcher_safe_regex(matcher);
550
+ GPR_ASSERT(regex_matcher != nullptr);
551
+ match_string = UpbStringToStdString(
552
+ envoy_type_matcher_v3_RegexMatcher_regex(regex_matcher));
553
+ } else {
554
+ errors->AddError("invalid string matcher");
555
+ continue;
556
+ }
557
+ case_sensitive =
558
+ !envoy_type_matcher_v3_StringMatcher_ignore_case(matcher);
522
559
  } else {
523
560
  errors->AddError("invalid header matcher");
524
561
  continue;
@@ -527,7 +564,7 @@ void RouteHeaderMatchersParse(const envoy_config_route_v3_RouteMatch* match,
527
564
  envoy_config_route_v3_HeaderMatcher_invert_match(header);
528
565
  absl::StatusOr<HeaderMatcher> header_matcher =
529
566
  HeaderMatcher::Create(name, type, match_string, range_start, range_end,
530
- present_match, invert_match);
567
+ present_match, invert_match, case_sensitive);
531
568
  if (!header_matcher.ok()) {
532
569
  errors->AddError(absl::StrCat("cannot create header matcher: ",
533
570
  header_matcher.status().message()));
@@ -248,8 +248,8 @@ XdsRouting::GeneratePerHTTPFilterConfigs(
248
248
  FindFilterConfigOverride(http_filter.name, vhost, route,
249
249
  cluster_weight);
250
250
  // Generate service config for filter.
251
- auto method_config_field =
252
- filter_impl->GenerateServiceConfig(http_filter.config, config_override);
251
+ auto method_config_field = filter_impl->GenerateServiceConfig(
252
+ http_filter.config, config_override, http_filter.name);
253
253
  if (!method_config_field.ok()) {
254
254
  return absl::FailedPreconditionError(absl::StrCat(
255
255
  "failed to generate method config for HTTP filter ", http_filter.name,
@@ -47,6 +47,7 @@
47
47
  #include "src/core/lib/gprpp/time.h"
48
48
  #include "src/core/lib/iomgr/closure.h"
49
49
  #include "src/core/lib/iomgr/pollset_set.h"
50
+ #include "src/core/lib/json/json.h"
50
51
  #include "src/core/lib/security/credentials/channel_creds_registry.h"
51
52
  #include "src/core/lib/security/credentials/credentials.h"
52
53
  #include "src/core/lib/slice/slice.h"
@@ -255,7 +256,8 @@ grpc_channel* CreateXdsChannel(const ChannelArgs& args,
255
256
  const GrpcXdsBootstrap::GrpcXdsServer& server) {
256
257
  RefCountedPtr<grpc_channel_credentials> channel_creds =
257
258
  CoreConfiguration::Get().channel_creds_registry().CreateChannelCreds(
258
- server.channel_creds_type(), server.channel_creds_config());
259
+ server.channel_creds_type(),
260
+ Json::FromObject(server.channel_creds_config()));
259
261
  return grpc_channel_create(server.server_uri().c_str(), channel_creds.get(),
260
262
  args.ToC().get());
261
263
  }
@@ -87,6 +87,11 @@ class AVL {
87
87
  return QsortCompare(*this, other) < 0;
88
88
  }
89
89
 
90
+ size_t Height() const {
91
+ if (root_ == nullptr) return 0;
92
+ return root_->height;
93
+ }
94
+
90
95
  private:
91
96
  struct Node;
92
97
 
@@ -43,11 +43,6 @@ class RandomEarlyDetection {
43
43
  uint64_t soft_limit() const { return soft_limit_; }
44
44
  uint64_t hard_limit() const { return hard_limit_; }
45
45
 
46
- void SetLimits(uint64_t soft_limit, uint64_t hard_limit) {
47
- soft_limit_ = soft_limit;
48
- hard_limit_ = hard_limit;
49
- }
50
-
51
46
  private:
52
47
  // The soft limit is the size at which we start rejecting items with a
53
48
  // probability that increases linearly to 1 as the size approaches the hard
@@ -39,6 +39,7 @@
39
39
  #include <grpc/support/string_util.h>
40
40
 
41
41
  #include "src/core/lib/gpr/useful.h"
42
+ #include "src/core/lib/gprpp/crash.h"
42
43
  #include "src/core/lib/gprpp/match.h"
43
44
 
44
45
  namespace grpc_core {
@@ -126,21 +127,55 @@ ChannelArgs ChannelArgs::FromC(const grpc_channel_args* args) {
126
127
  return result;
127
128
  }
128
129
 
130
+ grpc_arg ChannelArgs::Value::MakeCArg(const char* name) const {
131
+ char* c_name = const_cast<char*>(name);
132
+ return Match(
133
+ rep_,
134
+ [c_name](int i) { return grpc_channel_arg_integer_create(c_name, i); },
135
+ [c_name](const std::shared_ptr<const std::string>& s) {
136
+ return grpc_channel_arg_string_create(c_name,
137
+ const_cast<char*>(s->c_str()));
138
+ },
139
+ [c_name](const Pointer& p) {
140
+ return grpc_channel_arg_pointer_create(c_name, p.c_pointer(),
141
+ p.c_vtable());
142
+ });
143
+ }
144
+
145
+ bool ChannelArgs::Value::operator<(const Value& rhs) const {
146
+ if (rhs.rep_.index() != rep_.index()) return rep_.index() < rhs.rep_.index();
147
+ switch (rep_.index()) {
148
+ case 0:
149
+ return absl::get<int>(rep_) < absl::get<int>(rhs.rep_);
150
+ case 1:
151
+ return *absl::get<std::shared_ptr<const std::string>>(rep_) <
152
+ *absl::get<std::shared_ptr<const std::string>>(rhs.rep_);
153
+ case 2:
154
+ return absl::get<Pointer>(rep_) < absl::get<Pointer>(rhs.rep_);
155
+ default:
156
+ Crash("unreachable");
157
+ }
158
+ }
159
+
160
+ bool ChannelArgs::Value::operator==(const Value& rhs) const {
161
+ if (rhs.rep_.index() != rep_.index()) return false;
162
+ switch (rep_.index()) {
163
+ case 0:
164
+ return absl::get<int>(rep_) == absl::get<int>(rhs.rep_);
165
+ case 1:
166
+ return *absl::get<std::shared_ptr<const std::string>>(rep_) ==
167
+ *absl::get<std::shared_ptr<const std::string>>(rhs.rep_);
168
+ case 2:
169
+ return absl::get<Pointer>(rep_) == absl::get<Pointer>(rhs.rep_);
170
+ default:
171
+ Crash("unreachable");
172
+ }
173
+ }
174
+
129
175
  ChannelArgs::CPtr ChannelArgs::ToC() const {
130
176
  std::vector<grpc_arg> c_args;
131
177
  args_.ForEach([&c_args](const std::string& key, const Value& value) {
132
- char* name = const_cast<char*>(key.c_str());
133
- c_args.push_back(Match(
134
- value,
135
- [name](int i) { return grpc_channel_arg_integer_create(name, i); },
136
- [name](const std::string& s) {
137
- return grpc_channel_arg_string_create(name,
138
- const_cast<char*>(s.c_str()));
139
- },
140
- [name](const Pointer& p) {
141
- return grpc_channel_arg_pointer_create(name, p.c_pointer(),
142
- p.c_vtable());
143
- }));
178
+ c_args.push_back(value.MakeCArg(key.c_str()));
144
179
  });
145
180
  return CPtr(static_cast<const grpc_channel_args*>(
146
181
  grpc_channel_args_copy_and_add(nullptr, c_args.data(), c_args.size())));
@@ -178,8 +213,9 @@ ChannelArgs ChannelArgs::Remove(absl::string_view key) const {
178
213
  absl::optional<int> ChannelArgs::GetInt(absl::string_view name) const {
179
214
  auto* v = Get(name);
180
215
  if (v == nullptr) return absl::nullopt;
181
- if (!absl::holds_alternative<int>(*v)) return absl::nullopt;
182
- return absl::get<int>(*v);
216
+ const auto* i = v->GetIfInt();
217
+ if (i == nullptr) return absl::nullopt;
218
+ return *i;
183
219
  }
184
220
 
185
221
  absl::optional<Duration> ChannelArgs::GetDurationFromIntMillis(
@@ -195,8 +231,9 @@ absl::optional<absl::string_view> ChannelArgs::GetString(
195
231
  absl::string_view name) const {
196
232
  auto* v = Get(name);
197
233
  if (v == nullptr) return absl::nullopt;
198
- if (!absl::holds_alternative<std::string>(*v)) return absl::nullopt;
199
- return absl::get<std::string>(*v);
234
+ const auto* s = v->GetIfString();
235
+ if (s == nullptr) return absl::nullopt;
236
+ return *s;
200
237
  }
201
238
 
202
239
  absl::optional<std::string> ChannelArgs::GetOwnedString(
@@ -209,14 +246,15 @@ absl::optional<std::string> ChannelArgs::GetOwnedString(
209
246
  void* ChannelArgs::GetVoidPointer(absl::string_view name) const {
210
247
  auto* v = Get(name);
211
248
  if (v == nullptr) return nullptr;
212
- if (!absl::holds_alternative<Pointer>(*v)) return nullptr;
213
- return absl::get<Pointer>(*v).c_pointer();
249
+ const auto* pp = v->GetIfPointer();
250
+ if (pp == nullptr) return nullptr;
251
+ return pp->c_pointer();
214
252
  }
215
253
 
216
254
  absl::optional<bool> ChannelArgs::GetBool(absl::string_view name) const {
217
255
  auto* v = Get(name);
218
256
  if (v == nullptr) return absl::nullopt;
219
- auto* i = absl::get_if<int>(v);
257
+ auto* i = v->GetIfInt();
220
258
  if (i == nullptr) {
221
259
  gpr_log(GPR_ERROR, "%s ignored: it must be an integer",
222
260
  std::string(name).c_str());
@@ -238,11 +276,11 @@ std::string ChannelArgs::ToString() const {
238
276
  std::vector<std::string> arg_strings;
239
277
  args_.ForEach([&arg_strings](const std::string& key, const Value& value) {
240
278
  std::string value_str;
241
- if (auto* i = absl::get_if<int>(&value)) {
279
+ if (auto* i = value.GetIfInt()) {
242
280
  value_str = std::to_string(*i);
243
- } else if (auto* s = absl::get_if<std::string>(&value)) {
281
+ } else if (auto* s = value.GetIfString()) {
244
282
  value_str = *s;
245
- } else if (auto* p = absl::get_if<Pointer>(&value)) {
283
+ } else if (auto* p = value.GetIfPointer()) {
246
284
  value_str = absl::StrFormat("%p", p->c_pointer());
247
285
  }
248
286
  arg_strings.push_back(absl::StrCat(key, "=", value_str));
@@ -251,6 +289,26 @@ std::string ChannelArgs::ToString() const {
251
289
  }
252
290
 
253
291
  ChannelArgs ChannelArgs::UnionWith(ChannelArgs other) const {
292
+ if (args_.Empty()) return other;
293
+ if (other.args_.Empty()) return *this;
294
+ if (args_.Height() <= other.args_.Height()) {
295
+ args_.ForEach([&other](const std::string& key, const Value& value) {
296
+ other.args_ = other.args_.Add(key, value);
297
+ });
298
+ return other;
299
+ } else {
300
+ auto result = *this;
301
+ other.args_.ForEach([&result](const std::string& key, const Value& value) {
302
+ if (result.args_.Lookup(key) == nullptr) {
303
+ result.args_ = result.args_.Add(key, value);
304
+ }
305
+ });
306
+ return result;
307
+ }
308
+ }
309
+
310
+ ChannelArgs ChannelArgs::FuzzingReferenceUnionWith(ChannelArgs other) const {
311
+ // DO NOT OPTIMIZE THIS!!
254
312
  args_.ForEach([&other](const std::string& key, const Value& value) {
255
313
  other.args_ = other.args_.Add(key, value);
256
314
  });
@@ -281,7 +281,35 @@ class ChannelArgs {
281
281
  const grpc_arg_pointer_vtable* vtable_;
282
282
  };
283
283
 
284
- using Value = absl::variant<int, std::string, Pointer>;
284
+ class Value {
285
+ public:
286
+ explicit Value(int n) : rep_(n) {}
287
+ explicit Value(std::string s)
288
+ : rep_(std::make_shared<const std::string>(std::move(s))) {}
289
+ explicit Value(Pointer p) : rep_(std::move(p)) {}
290
+
291
+ const int* GetIfInt() const { return absl::get_if<int>(&rep_); }
292
+ const std::string* GetIfString() const {
293
+ auto* p = absl::get_if<std::shared_ptr<const std::string>>(&rep_);
294
+ if (p == nullptr) return nullptr;
295
+ return p->get();
296
+ }
297
+ const Pointer* GetIfPointer() const { return absl::get_if<Pointer>(&rep_); }
298
+
299
+ grpc_arg MakeCArg(const char* name) const;
300
+
301
+ bool operator<(const Value& rhs) const;
302
+ bool operator==(const Value& rhs) const;
303
+ bool operator!=(const Value& rhs) const { return !this->operator==(rhs); }
304
+ bool operator==(absl::string_view rhs) const {
305
+ auto* p = absl::get_if<std::shared_ptr<const std::string>>(&rep_);
306
+ if (p == nullptr) return false;
307
+ return **p == rhs;
308
+ }
309
+
310
+ private:
311
+ absl::variant<int, std::shared_ptr<const std::string>, Pointer> rep_;
312
+ };
285
313
 
286
314
  struct ChannelArgsDeleter {
287
315
  void operator()(const grpc_channel_args* p) const;
@@ -307,6 +335,11 @@ class ChannelArgs {
307
335
  // If a key is present in both, the value from this is used.
308
336
  GRPC_MUST_USE_RESULT ChannelArgs UnionWith(ChannelArgs other) const;
309
337
 
338
+ // Only used in union_with_test.cc, reference version of UnionWith for
339
+ // differential fuzzing.
340
+ GRPC_MUST_USE_RESULT ChannelArgs
341
+ FuzzingReferenceUnionWith(ChannelArgs other) const;
342
+
310
343
  const Value* Get(absl::string_view name) const;
311
344
  GRPC_MUST_USE_RESULT ChannelArgs Set(absl::string_view name,
312
345
  Pointer value) const;
@@ -21,10 +21,12 @@
21
21
  #include "src/core/lib/channel/channel_trace.h"
22
22
 
23
23
  #include <algorithm>
24
- #include <string>
25
24
  #include <utility>
26
25
 
26
+ #include "absl/strings/str_cat.h"
27
+
27
28
  #include <grpc/support/alloc.h>
29
+ #include <grpc/support/json.h>
28
30
 
29
31
  #include "src/core/lib/channel/channelz.h"
30
32
  #include "src/core/lib/gpr/string.h"
@@ -140,21 +142,21 @@ const char* severity_string(ChannelTrace::Severity severity) {
140
142
  Json ChannelTrace::TraceEvent::RenderTraceEvent() const {
141
143
  char* description = grpc_slice_to_c_string(data_);
142
144
  Json::Object object = {
143
- {"description", description},
144
- {"severity", severity_string(severity_)},
145
- {"timestamp", gpr_format_timespec(timestamp_)},
145
+ {"description", Json::FromString(description)},
146
+ {"severity", Json::FromString(severity_string(severity_))},
147
+ {"timestamp", Json::FromString(gpr_format_timespec(timestamp_))},
146
148
  };
147
149
  gpr_free(description);
148
150
  if (referenced_entity_ != nullptr) {
149
151
  const bool is_channel =
150
152
  (referenced_entity_->type() == BaseNode::EntityType::kTopLevelChannel ||
151
153
  referenced_entity_->type() == BaseNode::EntityType::kInternalChannel);
152
- object[is_channel ? "channelRef" : "subchannelRef"] = Json::Object{
154
+ object[is_channel ? "channelRef" : "subchannelRef"] = Json::FromObject({
153
155
  {(is_channel ? "channelId" : "subchannelId"),
154
- std::to_string(referenced_entity_->uuid())},
155
- };
156
+ Json::FromString(absl::StrCat(referenced_entity_->uuid()))},
157
+ });
156
158
  }
157
- return object;
159
+ return Json::FromObject(std::move(object));
158
160
  }
159
161
 
160
162
  Json ChannelTrace::RenderJson() const {
@@ -163,10 +165,12 @@ Json ChannelTrace::RenderJson() const {
163
165
  return Json(); // JSON null
164
166
  }
165
167
  Json::Object object = {
166
- {"creationTimestamp", gpr_format_timespec(time_created_)},
168
+ {"creationTimestamp",
169
+ Json::FromString(gpr_format_timespec(time_created_))},
167
170
  };
168
171
  if (num_events_logged_ > 0) {
169
- object["numEventsLogged"] = std::to_string(num_events_logged_);
172
+ object["numEventsLogged"] =
173
+ Json::FromString(absl::StrCat(num_events_logged_));
170
174
  }
171
175
  // Only add in the event list if it is non-empty.
172
176
  if (head_trace_ != nullptr) {
@@ -174,9 +178,9 @@ Json ChannelTrace::RenderJson() const {
174
178
  for (TraceEvent* it = head_trace_; it != nullptr; it = it->next()) {
175
179
  array.emplace_back(it->RenderTraceEvent());
176
180
  }
177
- object["events"] = std::move(array);
181
+ object["events"] = Json::FromArray(std::move(array));
178
182
  }
179
- return object;
183
+ return Json::FromObject(std::move(object));
180
184
  }
181
185
 
182
186
  } // namespace channelz