grpc 1.55.0 → 1.56.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (395) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +102 -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/grpc_security.h +19 -0
  6. data/include/grpc/module.modulemap +2 -0
  7. data/include/grpc/support/json.h +218 -0
  8. data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +5 -0
  9. data/src/core/ext/filters/client_channel/backend_metric.cc +2 -0
  10. data/src/core/ext/filters/client_channel/channel_connectivity.cc +4 -4
  11. data/src/core/ext/filters/client_channel/client_channel.cc +86 -104
  12. data/src/core/ext/filters/client_channel/client_channel.h +6 -0
  13. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +19 -18
  14. data/src/core/ext/filters/client_channel/client_channel_internal.h +16 -21
  15. data/src/core/ext/filters/client_channel/config_selector.h +9 -24
  16. data/src/core/ext/filters/client_channel/lb_policy/backend_metric_data.h +3 -0
  17. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +5 -4
  18. data/src/core/ext/filters/client_channel/lb_policy/health_check_client.cc +455 -0
  19. data/src/core/ext/filters/client_channel/lb_policy/health_check_client.h +54 -0
  20. data/src/core/ext/filters/client_channel/lb_policy/health_check_client_internal.h +186 -0
  21. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +2 -7
  22. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +53 -21
  23. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +23 -2
  24. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +19 -6
  25. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +1 -9
  26. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +16 -7
  27. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +18 -1
  28. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +12 -9
  29. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +6 -4
  30. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +36 -13
  31. data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/static_stride_scheduler.cc +76 -6
  32. data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/weighted_round_robin.cc +42 -40
  33. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +4 -10
  34. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +52 -47
  35. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +1 -9
  36. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +14 -16
  37. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +40 -43
  38. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.cc +7 -12
  39. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_wrr_locality.cc +12 -19
  40. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +35 -33
  41. data/src/core/ext/filters/client_channel/resolver/dns/event_engine/event_engine_client_channel_resolver.cc +29 -4
  42. data/src/core/ext/filters/client_channel/resolver/dns/event_engine/service_config_helper.cc +1 -1
  43. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +28 -27
  44. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +163 -46
  45. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +16 -1
  46. data/src/core/ext/filters/client_channel/retry_service_config.cc +1 -0
  47. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +10 -40
  48. data/src/core/ext/filters/client_channel/subchannel.cc +10 -196
  49. data/src/core/ext/filters/client_channel/subchannel.h +3 -43
  50. data/src/core/ext/filters/http/message_compress/compression_filter.cc +5 -5
  51. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +100 -6
  52. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +6 -8
  53. data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +3 -3
  54. data/src/core/ext/filters/stateful_session/stateful_session_filter.h +16 -1
  55. data/src/core/ext/transport/chttp2/transport/flow_control.cc +46 -95
  56. data/src/core/ext/transport/chttp2/transport/hpack_parse_result.cc +176 -0
  57. data/src/core/ext/transport/chttp2/transport/hpack_parse_result.h +325 -0
  58. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +567 -543
  59. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +150 -9
  60. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +46 -32
  61. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +18 -5
  62. data/src/core/ext/transport/chttp2/transport/internal.h +1 -15
  63. data/src/core/ext/transport/chttp2/transport/parsing.cc +12 -12
  64. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +11 -2
  65. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +15 -0
  66. data/src/core/ext/xds/certificate_provider_store.cc +4 -9
  67. data/src/core/ext/xds/certificate_provider_store.h +1 -1
  68. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +30 -42
  69. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +14 -9
  70. data/src/core/ext/xds/xds_api.cc +9 -6
  71. data/src/core/ext/xds/xds_api.h +3 -2
  72. data/src/core/ext/xds/xds_audit_logger_registry.cc +122 -0
  73. data/src/core/ext/xds/xds_audit_logger_registry.h +68 -0
  74. data/src/core/ext/xds/xds_bootstrap_grpc.cc +21 -9
  75. data/src/core/ext/xds/xds_bootstrap_grpc.h +5 -0
  76. data/src/core/ext/xds/xds_client.cc +5 -4
  77. data/src/core/ext/xds/xds_client_stats.h +1 -1
  78. data/src/core/ext/xds/xds_cluster.cc +20 -19
  79. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +11 -8
  80. data/src/core/ext/xds/xds_common_types.cc +3 -1
  81. data/src/core/ext/xds/xds_http_fault_filter.cc +16 -13
  82. data/src/core/ext/xds/xds_http_fault_filter.h +2 -1
  83. data/src/core/ext/xds/xds_http_filters.h +4 -2
  84. data/src/core/ext/xds/xds_http_rbac_filter.cc +154 -67
  85. data/src/core/ext/xds/xds_http_rbac_filter.h +2 -1
  86. data/src/core/ext/xds/xds_http_stateful_session_filter.cc +15 -11
  87. data/src/core/ext/xds/xds_http_stateful_session_filter.h +2 -1
  88. data/src/core/ext/xds/xds_lb_policy_registry.cc +22 -16
  89. data/src/core/ext/xds/xds_listener.cc +1 -0
  90. data/src/core/ext/xds/xds_route_config.cc +40 -3
  91. data/src/core/ext/xds/xds_routing.cc +2 -2
  92. data/src/core/ext/xds/xds_transport_grpc.cc +3 -1
  93. data/src/core/lib/avl/avl.h +5 -0
  94. data/src/core/lib/backoff/random_early_detection.h +5 -0
  95. data/src/core/lib/channel/channel_args.cc +80 -22
  96. data/src/core/lib/channel/channel_args.h +34 -1
  97. data/src/core/lib/channel/channel_trace.cc +16 -12
  98. data/src/core/lib/channel/channelz.cc +159 -132
  99. data/src/core/lib/channel/channelz.h +42 -35
  100. data/src/core/lib/channel/channelz_registry.cc +23 -20
  101. data/src/core/lib/channel/connected_channel.cc +17 -6
  102. data/src/core/lib/channel/promise_based_filter.cc +0 -4
  103. data/src/core/lib/channel/promise_based_filter.h +2 -0
  104. data/src/core/lib/compression/compression_internal.cc +2 -5
  105. data/src/core/lib/config/config_vars.cc +20 -18
  106. data/src/core/lib/config/config_vars.h +4 -4
  107. data/src/core/lib/config/load_config.cc +13 -0
  108. data/src/core/lib/config/load_config.h +6 -0
  109. data/src/core/lib/debug/event_log.h +1 -1
  110. data/src/core/lib/debug/stats_data.h +1 -1
  111. data/src/core/lib/debug/trace.cc +24 -55
  112. data/src/core/lib/debug/trace.h +3 -1
  113. data/src/core/lib/event_engine/cf_engine/cf_engine.cc +211 -0
  114. data/src/core/lib/event_engine/cf_engine/cf_engine.h +86 -0
  115. data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.cc +354 -0
  116. data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.h +146 -0
  117. data/src/core/lib/event_engine/cf_engine/cftype_unique_ref.h +79 -0
  118. data/src/core/lib/event_engine/default_event_engine.cc +13 -1
  119. data/src/core/lib/event_engine/default_event_engine_factory.cc +14 -2
  120. data/src/core/lib/event_engine/poller.h +2 -2
  121. data/src/core/lib/event_engine/posix.h +4 -0
  122. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +1 -1
  123. data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +7 -18
  124. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +9 -0
  125. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +33 -19
  126. data/src/core/lib/event_engine/posix_engine/posix_engine.h +2 -1
  127. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +33 -4
  128. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.h +10 -8
  129. data/src/core/lib/event_engine/posix_engine/timer_manager.h +1 -1
  130. data/src/core/lib/event_engine/shim.cc +7 -1
  131. data/src/core/lib/event_engine/{thread_pool.cc → thread_pool/original_thread_pool.cc} +28 -25
  132. data/src/core/lib/event_engine/{thread_pool.h → thread_pool/original_thread_pool.h} +11 -15
  133. data/src/core/lib/event_engine/thread_pool/thread_pool.h +50 -0
  134. data/src/core/lib/event_engine/{executor/executor.h → thread_pool/thread_pool_factory.cc} +17 -15
  135. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +489 -0
  136. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.h +249 -0
  137. data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.cc +166 -0
  138. data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.h +108 -0
  139. data/src/core/lib/event_engine/windows/iocp.cc +4 -3
  140. data/src/core/lib/event_engine/windows/iocp.h +3 -3
  141. data/src/core/lib/event_engine/windows/win_socket.cc +6 -6
  142. data/src/core/lib/event_engine/windows/win_socket.h +4 -4
  143. data/src/core/lib/event_engine/windows/windows_endpoint.cc +11 -10
  144. data/src/core/lib/event_engine/windows/windows_endpoint.h +3 -2
  145. data/src/core/lib/event_engine/windows/windows_engine.cc +19 -17
  146. data/src/core/lib/event_engine/windows/windows_engine.h +6 -6
  147. data/src/core/lib/event_engine/windows/windows_listener.cc +3 -3
  148. data/src/core/lib/event_engine/windows/windows_listener.h +3 -2
  149. data/src/core/lib/event_engine/work_queue/basic_work_queue.cc +63 -0
  150. data/src/core/lib/event_engine/work_queue/basic_work_queue.h +71 -0
  151. data/src/core/lib/event_engine/work_queue/work_queue.h +62 -0
  152. data/src/core/lib/experiments/config.cc +38 -7
  153. data/src/core/lib/experiments/config.h +16 -0
  154. data/src/core/lib/experiments/experiments.cc +67 -20
  155. data/src/core/lib/experiments/experiments.h +27 -21
  156. data/src/core/lib/gpr/log_internal.h +55 -0
  157. data/src/core/lib/gprpp/crash.cc +10 -0
  158. data/src/core/lib/gprpp/crash.h +3 -0
  159. data/src/core/lib/gprpp/per_cpu.cc +33 -0
  160. data/src/core/lib/gprpp/per_cpu.h +29 -6
  161. data/src/core/lib/gprpp/time.cc +1 -0
  162. data/src/core/lib/iomgr/cfstream_handle.cc +1 -1
  163. data/src/core/lib/iomgr/endpoint_cfstream.cc +10 -8
  164. data/src/core/lib/iomgr/ev_apple.cc +12 -12
  165. data/src/core/lib/iomgr/ev_epoll1_linux.cc +10 -3
  166. data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +15 -1
  167. data/src/core/lib/iomgr/iocp_windows.cc +24 -3
  168. data/src/core/lib/iomgr/iocp_windows.h +11 -0
  169. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +1 -1
  170. data/src/core/lib/iomgr/socket_utils_common_posix.cc +4 -2
  171. data/src/core/lib/iomgr/socket_windows.cc +61 -7
  172. data/src/core/lib/iomgr/socket_windows.h +9 -2
  173. data/src/core/lib/iomgr/tcp_client_cfstream.cc +14 -3
  174. data/src/core/lib/iomgr/tcp_server_posix.cc +182 -119
  175. data/src/core/lib/iomgr/tcp_server_utils_posix.h +13 -1
  176. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +21 -0
  177. data/src/core/lib/iomgr/tcp_server_windows.cc +1 -1
  178. data/src/core/lib/json/json.h +2 -166
  179. data/src/core/lib/json/json_object_loader.cc +8 -9
  180. data/src/core/lib/json/json_object_loader.h +25 -18
  181. data/src/core/lib/json/json_reader.cc +13 -6
  182. data/src/core/lib/json/json_util.cc +6 -11
  183. data/src/core/lib/json/json_writer.cc +7 -8
  184. data/src/core/lib/load_balancing/lb_policy.h +13 -0
  185. data/src/core/lib/load_balancing/lb_policy_registry.cc +2 -1
  186. data/src/core/lib/matchers/matchers.cc +3 -4
  187. data/src/core/lib/matchers/matchers.h +2 -1
  188. data/src/core/lib/promise/activity.cc +5 -0
  189. data/src/core/lib/promise/activity.h +10 -0
  190. data/src/core/lib/promise/detail/promise_factory.h +1 -1
  191. data/src/core/lib/promise/party.cc +31 -13
  192. data/src/core/lib/promise/party.h +11 -2
  193. data/src/core/lib/promise/pipe.h +9 -2
  194. data/src/core/lib/promise/prioritized_race.h +95 -0
  195. data/src/core/lib/promise/sleep.cc +2 -1
  196. data/src/core/lib/resolver/server_address.cc +0 -8
  197. data/src/core/lib/resolver/server_address.h +0 -6
  198. data/src/core/lib/resource_quota/memory_quota.cc +7 -7
  199. data/src/core/lib/resource_quota/memory_quota.h +1 -2
  200. data/src/core/lib/security/authorization/audit_logging.cc +98 -0
  201. data/src/core/lib/security/authorization/audit_logging.h +73 -0
  202. data/src/core/lib/security/authorization/grpc_authorization_engine.cc +47 -2
  203. data/src/core/lib/security/authorization/grpc_authorization_engine.h +18 -1
  204. data/src/core/lib/security/authorization/rbac_policy.cc +36 -4
  205. data/src/core/lib/security/authorization/rbac_policy.h +19 -2
  206. data/src/core/lib/security/authorization/stdout_logger.cc +75 -0
  207. data/src/core/lib/security/authorization/stdout_logger.h +61 -0
  208. data/src/core/lib/security/certificate_provider/certificate_provider_factory.h +8 -4
  209. data/src/core/lib/security/certificate_provider/certificate_provider_registry.cc +8 -18
  210. data/src/core/lib/security/certificate_provider/certificate_provider_registry.h +14 -8
  211. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +19 -12
  212. data/src/core/lib/security/credentials/external/external_account_credentials.cc +4 -2
  213. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +1 -0
  214. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +1 -0
  215. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +1 -0
  216. data/src/core/lib/security/credentials/jwt/json_token.cc +15 -14
  217. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +4 -2
  218. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +1 -0
  219. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +1 -0
  220. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +8 -0
  221. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +5 -1
  222. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +1 -5
  223. data/src/core/lib/security/security_connector/ssl_utils.cc +2 -1
  224. data/src/core/lib/security/security_connector/ssl_utils.h +1 -1
  225. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +1 -1
  226. data/src/core/lib/security/util/json_util.cc +1 -0
  227. data/src/core/lib/service_config/service_config_call_data.h +49 -20
  228. data/src/core/lib/service_config/service_config_impl.cc +2 -1
  229. data/src/core/lib/surface/call.cc +38 -23
  230. data/src/core/lib/surface/completion_queue.cc +6 -2
  231. data/src/core/lib/surface/validate_metadata.cc +37 -22
  232. data/src/core/lib/surface/validate_metadata.h +13 -3
  233. data/src/core/lib/surface/version.cc +2 -2
  234. data/src/core/lib/transport/batch_builder.cc +15 -12
  235. data/src/core/lib/transport/batch_builder.h +39 -35
  236. data/src/core/plugin_registry/grpc_plugin_registry.cc +0 -2
  237. data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +2 -0
  238. data/src/core/tsi/ssl_transport_security.cc +5 -2
  239. data/src/core/tsi/ssl_transport_security.h +13 -1
  240. data/src/ruby/ext/grpc/extconf.rb +8 -9
  241. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +2 -0
  242. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +3 -0
  243. data/src/ruby/lib/grpc/version.rb +1 -1
  244. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_mbstr.c +9 -8
  245. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c +1 -1
  246. data/third_party/boringssl-with-bazel/src/crypto/asn1/internal.h +3 -3
  247. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +10 -6
  248. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +7 -4
  249. data/third_party/boringssl-with-bazel/src/crypto/bio/bio.c +6 -4
  250. data/third_party/boringssl-with-bazel/src/crypto/bio/fd.c +2 -1
  251. data/third_party/boringssl-with-bazel/src/crypto/bio/file.c +5 -9
  252. data/third_party/boringssl-with-bazel/src/crypto/bio/pair.c +4 -2
  253. data/third_party/boringssl-with-bazel/src/crypto/blake2/blake2.c +31 -22
  254. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_tls.c +29 -26
  255. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h +8 -0
  256. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +189 -13
  257. data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_openbsd.c +62 -0
  258. data/third_party/boringssl-with-bazel/src/crypto/cpu_arm_openbsd.c +31 -0
  259. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519.c +6 -4
  260. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519_tables.h +795 -795
  261. data/third_party/boringssl-with-bazel/src/crypto/curve25519/internal.h +1 -5
  262. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +4 -0
  263. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c +18 -6
  264. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h +15 -7
  265. data/third_party/boringssl-with-bazel/src/crypto/ecdh_extra/ecdh_extra.c +1 -1
  266. data/third_party/boringssl-with-bazel/src/crypto/evp/p_rsa.c +1 -1
  267. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +1 -0
  268. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/dh.c +3 -0
  269. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +24 -24
  270. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +1 -1
  271. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_montgomery.c +7 -7
  272. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +74 -74
  273. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/oct.c +1 -2
  274. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c +11 -11
  275. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-nistz.c +12 -12
  276. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.c +14 -15
  277. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256_table.h +1 -1
  278. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple.c +10 -10
  279. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c +23 -23
  280. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/wnaf.c +13 -13
  281. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdh/ecdh.c +1 -1
  282. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +2 -2
  283. data/third_party/boringssl-with-bazel/src/crypto/{hkdf → fipsmodule/hkdf}/hkdf.c +1 -1
  284. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cbc.c +2 -10
  285. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ctr.c +1 -4
  286. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm.c +115 -133
  287. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm_nohw.c +12 -14
  288. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/internal.h +57 -47
  289. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ofb.c +1 -8
  290. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/polyval.c +27 -28
  291. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +11 -23
  292. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h +21 -16
  293. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/padding.c +5 -288
  294. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +143 -83
  295. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +95 -183
  296. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +71 -0
  297. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/tls/internal.h +8 -0
  298. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/tls/kdf.c +33 -0
  299. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +162 -6
  300. data/third_party/boringssl-with-bazel/src/crypto/internal.h +18 -0
  301. data/third_party/boringssl-with-bazel/src/crypto/kyber/kyber.c +18 -11
  302. data/third_party/boringssl-with-bazel/src/crypto/obj/obj_dat.h +6 -13
  303. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_lib.c +18 -14
  304. data/third_party/boringssl-with-bazel/src/crypto/{refcount_lock.c → refcount_no_threads.c} +3 -13
  305. data/third_party/boringssl-with-bazel/src/crypto/refcount_win.c +89 -0
  306. data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/internal.h +77 -0
  307. data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/rsa_crypt.c +568 -0
  308. data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +62 -0
  309. data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +218 -44
  310. data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +35 -0
  311. data/third_party/boringssl-with-bazel/src/crypto/trust_token/voprf.c +588 -39
  312. data/third_party/boringssl-with-bazel/src/crypto/x509/a_sign.c +27 -18
  313. data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +1 -1
  314. data/third_party/boringssl-with-bazel/src/crypto/x509/name_print.c +17 -39
  315. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c +39 -48
  316. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c +0 -140
  317. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +72 -23
  318. data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +11 -14
  319. data/third_party/boringssl-with-bazel/src/crypto/x509/x509spki.c +1 -1
  320. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509a.c +2 -2
  321. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +1 -1
  322. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_conf.c +33 -46
  323. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +1 -0
  324. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_info.c +3 -5
  325. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +14 -46
  326. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +14 -26
  327. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +17 -10
  328. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +1 -1
  329. data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +5 -7
  330. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +6 -4
  331. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +32 -1
  332. data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +0 -4
  333. data/third_party/boringssl-with-bazel/src/include/openssl/blake2.h +1 -4
  334. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +3 -3
  335. data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +28 -0
  336. data/third_party/boringssl-with-bazel/src/include/openssl/nid.h +2 -11
  337. data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +0 -3
  338. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +91 -1
  339. data/third_party/boringssl-with-bazel/src/include/openssl/span.h +5 -0
  340. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +149 -20
  341. data/third_party/boringssl-with-bazel/src/include/openssl/thread.h +4 -0
  342. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +4 -0
  343. data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +8 -0
  344. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +774 -615
  345. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +42 -10
  346. data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +11 -6
  347. data/third_party/boringssl-with-bazel/src/ssl/extensions.cc +2 -4
  348. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +24 -16
  349. data/third_party/boringssl-with-bazel/src/ssl/internal.h +65 -18
  350. data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +37 -18
  351. data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +187 -193
  352. data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +13 -129
  353. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +85 -10
  354. data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +17 -4
  355. data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +27 -19
  356. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +1 -1
  357. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +5 -21
  358. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +5 -2
  359. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_64_msvc.h +1281 -0
  360. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_64_msvc.h +2002 -0
  361. data/third_party/cares/cares/include/ares.h +23 -1
  362. data/third_party/cares/cares/{src/lib → include}/ares_nameser.h +9 -7
  363. data/third_party/cares/cares/include/ares_rules.h +2 -2
  364. data/third_party/cares/cares/include/ares_version.h +3 -3
  365. data/third_party/cares/cares/src/lib/ares__addrinfo2hostent.c +266 -0
  366. data/third_party/cares/cares/src/lib/ares__addrinfo_localhost.c +240 -0
  367. data/third_party/cares/cares/src/lib/ares__parse_into_addrinfo.c +49 -80
  368. data/third_party/cares/cares/src/lib/ares__readaddrinfo.c +37 -43
  369. data/third_party/cares/cares/src/lib/ares__sortaddrinfo.c +12 -4
  370. data/third_party/cares/cares/src/lib/ares_data.c +16 -0
  371. data/third_party/cares/cares/src/lib/ares_data.h +7 -0
  372. data/third_party/cares/cares/src/lib/ares_destroy.c +8 -0
  373. data/third_party/cares/cares/src/lib/ares_expand_name.c +17 -6
  374. data/third_party/cares/cares/src/lib/ares_freeaddrinfo.c +1 -0
  375. data/third_party/cares/cares/src/lib/ares_getaddrinfo.c +156 -78
  376. data/third_party/cares/cares/src/lib/ares_gethostbyname.c +130 -326
  377. data/third_party/cares/cares/src/lib/ares_init.c +97 -485
  378. data/third_party/cares/cares/src/lib/ares_library_init.c +2 -89
  379. data/third_party/cares/cares/src/lib/ares_parse_a_reply.c +23 -142
  380. data/third_party/cares/cares/src/lib/ares_parse_aaaa_reply.c +22 -142
  381. data/third_party/cares/cares/src/lib/ares_parse_uri_reply.c +184 -0
  382. data/third_party/cares/cares/src/lib/ares_private.h +30 -16
  383. data/third_party/cares/cares/src/lib/ares_process.c +55 -16
  384. data/third_party/cares/cares/src/lib/ares_query.c +1 -35
  385. data/third_party/cares/cares/src/lib/ares_rand.c +279 -0
  386. data/third_party/cares/cares/src/lib/ares_send.c +5 -7
  387. data/third_party/cares/cares/src/lib/ares_strdup.c +12 -19
  388. data/third_party/cares/cares/src/lib/ares_strsplit.c +44 -128
  389. data/third_party/cares/cares/src/lib/ares_strsplit.h +9 -10
  390. data/third_party/cares/cares/src/lib/inet_net_pton.c +78 -116
  391. data/third_party/cares/cares/src/tools/ares_getopt.h +53 -0
  392. metadata +50 -12
  393. data/src/core/ext/filters/client_channel/health/health_check_client.cc +0 -175
  394. data/src/core/ext/filters/client_channel/health/health_check_client.h +0 -43
  395. 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,6 +43,11 @@ 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
+
46
51
  private:
47
52
  // The soft limit is the size at which we start rejecting items with a
48
53
  // 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