grpc 1.55.0 → 1.56.0

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

Potentially problematic release.


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

Files changed (374) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +100 -68
  3. data/include/grpc/event_engine/event_engine.h +4 -3
  4. data/include/grpc/grpc_audit_logging.h +96 -0
  5. data/include/grpc/module.modulemap +2 -0
  6. data/include/grpc/support/json.h +218 -0
  7. data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +5 -0
  8. data/src/core/ext/filters/client_channel/backend_metric.cc +2 -0
  9. data/src/core/ext/filters/client_channel/channel_connectivity.cc +4 -4
  10. data/src/core/ext/filters/client_channel/client_channel.cc +86 -104
  11. data/src/core/ext/filters/client_channel/client_channel.h +6 -0
  12. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +19 -18
  13. data/src/core/ext/filters/client_channel/client_channel_internal.h +16 -21
  14. data/src/core/ext/filters/client_channel/config_selector.h +9 -24
  15. data/src/core/ext/filters/client_channel/lb_policy/backend_metric_data.h +3 -0
  16. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +5 -4
  17. data/src/core/ext/filters/client_channel/lb_policy/health_check_client.cc +455 -0
  18. data/src/core/ext/filters/client_channel/lb_policy/health_check_client.h +54 -0
  19. data/src/core/ext/filters/client_channel/lb_policy/health_check_client_internal.h +186 -0
  20. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +2 -7
  21. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +52 -20
  22. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +23 -2
  23. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +19 -6
  24. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +1 -9
  25. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +16 -7
  26. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +18 -1
  27. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +12 -9
  28. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +6 -4
  29. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +36 -13
  30. data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/static_stride_scheduler.cc +76 -6
  31. data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/weighted_round_robin.cc +32 -39
  32. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +4 -10
  33. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +52 -47
  34. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +1 -9
  35. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +14 -16
  36. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +40 -43
  37. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.cc +7 -12
  38. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_wrr_locality.cc +12 -19
  39. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +35 -33
  40. data/src/core/ext/filters/client_channel/resolver/dns/event_engine/event_engine_client_channel_resolver.cc +29 -4
  41. data/src/core/ext/filters/client_channel/resolver/dns/event_engine/service_config_helper.cc +1 -1
  42. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +28 -27
  43. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +163 -46
  44. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +16 -1
  45. data/src/core/ext/filters/client_channel/retry_service_config.cc +1 -0
  46. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +10 -40
  47. data/src/core/ext/filters/client_channel/subchannel.cc +10 -196
  48. data/src/core/ext/filters/client_channel/subchannel.h +3 -43
  49. data/src/core/ext/filters/http/message_compress/compression_filter.cc +5 -5
  50. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +100 -6
  51. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +6 -8
  52. data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +3 -3
  53. data/src/core/ext/filters/stateful_session/stateful_session_filter.h +16 -1
  54. data/src/core/ext/transport/chttp2/transport/flow_control.cc +46 -95
  55. data/src/core/ext/transport/chttp2/transport/internal.h +1 -15
  56. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +11 -2
  57. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +15 -0
  58. data/src/core/ext/xds/certificate_provider_store.cc +4 -9
  59. data/src/core/ext/xds/certificate_provider_store.h +1 -1
  60. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +30 -42
  61. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +14 -9
  62. data/src/core/ext/xds/xds_api.cc +9 -6
  63. data/src/core/ext/xds/xds_api.h +3 -2
  64. data/src/core/ext/xds/xds_audit_logger_registry.cc +122 -0
  65. data/src/core/ext/xds/xds_audit_logger_registry.h +68 -0
  66. data/src/core/ext/xds/xds_bootstrap_grpc.cc +21 -9
  67. data/src/core/ext/xds/xds_bootstrap_grpc.h +5 -0
  68. data/src/core/ext/xds/xds_client.cc +5 -4
  69. data/src/core/ext/xds/xds_client_stats.h +1 -1
  70. data/src/core/ext/xds/xds_cluster.cc +20 -19
  71. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +11 -8
  72. data/src/core/ext/xds/xds_common_types.cc +3 -1
  73. data/src/core/ext/xds/xds_http_fault_filter.cc +16 -13
  74. data/src/core/ext/xds/xds_http_fault_filter.h +2 -1
  75. data/src/core/ext/xds/xds_http_filters.h +4 -2
  76. data/src/core/ext/xds/xds_http_rbac_filter.cc +154 -67
  77. data/src/core/ext/xds/xds_http_rbac_filter.h +2 -1
  78. data/src/core/ext/xds/xds_http_stateful_session_filter.cc +15 -11
  79. data/src/core/ext/xds/xds_http_stateful_session_filter.h +2 -1
  80. data/src/core/ext/xds/xds_lb_policy_registry.cc +22 -16
  81. data/src/core/ext/xds/xds_listener.cc +1 -0
  82. data/src/core/ext/xds/xds_route_config.cc +40 -3
  83. data/src/core/ext/xds/xds_routing.cc +2 -2
  84. data/src/core/ext/xds/xds_transport_grpc.cc +3 -1
  85. data/src/core/lib/avl/avl.h +5 -0
  86. data/src/core/lib/channel/channel_args.cc +80 -22
  87. data/src/core/lib/channel/channel_args.h +34 -1
  88. data/src/core/lib/channel/channel_trace.cc +16 -12
  89. data/src/core/lib/channel/channelz.cc +159 -132
  90. data/src/core/lib/channel/channelz.h +42 -35
  91. data/src/core/lib/channel/channelz_registry.cc +23 -20
  92. data/src/core/lib/channel/connected_channel.cc +17 -6
  93. data/src/core/lib/channel/promise_based_filter.cc +0 -4
  94. data/src/core/lib/channel/promise_based_filter.h +2 -0
  95. data/src/core/lib/compression/compression_internal.cc +2 -5
  96. data/src/core/lib/config/config_vars.cc +20 -18
  97. data/src/core/lib/config/config_vars.h +4 -4
  98. data/src/core/lib/config/load_config.cc +13 -0
  99. data/src/core/lib/config/load_config.h +6 -0
  100. data/src/core/lib/debug/event_log.h +1 -1
  101. data/src/core/lib/debug/stats_data.h +1 -1
  102. data/src/core/lib/debug/trace.cc +24 -55
  103. data/src/core/lib/debug/trace.h +3 -1
  104. data/src/core/lib/event_engine/cf_engine/cf_engine.cc +211 -0
  105. data/src/core/lib/event_engine/cf_engine/cf_engine.h +86 -0
  106. data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.cc +354 -0
  107. data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.h +146 -0
  108. data/src/core/lib/event_engine/cf_engine/cftype_unique_ref.h +79 -0
  109. data/src/core/lib/event_engine/default_event_engine.cc +13 -1
  110. data/src/core/lib/event_engine/default_event_engine_factory.cc +14 -2
  111. data/src/core/lib/event_engine/poller.h +2 -2
  112. data/src/core/lib/event_engine/posix.h +4 -0
  113. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +1 -1
  114. data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +7 -18
  115. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +9 -0
  116. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +33 -19
  117. data/src/core/lib/event_engine/posix_engine/posix_engine.h +1 -1
  118. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +4 -4
  119. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.h +7 -8
  120. data/src/core/lib/event_engine/posix_engine/timer_manager.h +1 -1
  121. data/src/core/lib/event_engine/shim.cc +7 -1
  122. data/src/core/lib/event_engine/{thread_pool.cc → thread_pool/original_thread_pool.cc} +28 -25
  123. data/src/core/lib/event_engine/{thread_pool.h → thread_pool/original_thread_pool.h} +11 -15
  124. data/src/core/lib/event_engine/thread_pool/thread_pool.h +50 -0
  125. data/src/core/lib/event_engine/{executor/executor.h → thread_pool/thread_pool_factory.cc} +17 -15
  126. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +489 -0
  127. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.h +249 -0
  128. data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.cc +166 -0
  129. data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.h +108 -0
  130. data/src/core/lib/event_engine/windows/iocp.cc +4 -3
  131. data/src/core/lib/event_engine/windows/iocp.h +3 -3
  132. data/src/core/lib/event_engine/windows/win_socket.cc +6 -6
  133. data/src/core/lib/event_engine/windows/win_socket.h +4 -4
  134. data/src/core/lib/event_engine/windows/windows_endpoint.cc +11 -10
  135. data/src/core/lib/event_engine/windows/windows_endpoint.h +3 -2
  136. data/src/core/lib/event_engine/windows/windows_engine.cc +19 -17
  137. data/src/core/lib/event_engine/windows/windows_engine.h +6 -6
  138. data/src/core/lib/event_engine/windows/windows_listener.cc +3 -3
  139. data/src/core/lib/event_engine/windows/windows_listener.h +3 -2
  140. data/src/core/lib/event_engine/work_queue/basic_work_queue.cc +63 -0
  141. data/src/core/lib/event_engine/work_queue/basic_work_queue.h +71 -0
  142. data/src/core/lib/event_engine/work_queue/work_queue.h +62 -0
  143. data/src/core/lib/experiments/config.cc +38 -7
  144. data/src/core/lib/experiments/config.h +16 -0
  145. data/src/core/lib/experiments/experiments.cc +67 -20
  146. data/src/core/lib/experiments/experiments.h +27 -21
  147. data/src/core/lib/gpr/log_internal.h +55 -0
  148. data/src/core/lib/gprpp/crash.cc +10 -0
  149. data/src/core/lib/gprpp/crash.h +3 -0
  150. data/src/core/lib/gprpp/per_cpu.cc +33 -0
  151. data/src/core/lib/gprpp/per_cpu.h +29 -6
  152. data/src/core/lib/gprpp/time.cc +1 -0
  153. data/src/core/lib/iomgr/cfstream_handle.cc +1 -1
  154. data/src/core/lib/iomgr/endpoint_cfstream.cc +10 -8
  155. data/src/core/lib/iomgr/ev_apple.cc +12 -12
  156. data/src/core/lib/iomgr/ev_epoll1_linux.cc +10 -3
  157. data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +15 -1
  158. data/src/core/lib/iomgr/iocp_windows.cc +24 -3
  159. data/src/core/lib/iomgr/iocp_windows.h +11 -0
  160. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +1 -1
  161. data/src/core/lib/iomgr/socket_utils_common_posix.cc +4 -2
  162. data/src/core/lib/iomgr/socket_windows.cc +61 -7
  163. data/src/core/lib/iomgr/socket_windows.h +9 -2
  164. data/src/core/lib/iomgr/tcp_client_cfstream.cc +14 -3
  165. data/src/core/lib/iomgr/tcp_server_posix.cc +148 -107
  166. data/src/core/lib/iomgr/tcp_server_utils_posix.h +1 -1
  167. data/src/core/lib/iomgr/tcp_server_windows.cc +1 -1
  168. data/src/core/lib/json/json.h +2 -166
  169. data/src/core/lib/json/json_object_loader.cc +8 -9
  170. data/src/core/lib/json/json_object_loader.h +25 -18
  171. data/src/core/lib/json/json_reader.cc +13 -6
  172. data/src/core/lib/json/json_util.cc +6 -11
  173. data/src/core/lib/json/json_writer.cc +7 -8
  174. data/src/core/lib/load_balancing/lb_policy.h +13 -0
  175. data/src/core/lib/load_balancing/lb_policy_registry.cc +2 -1
  176. data/src/core/lib/matchers/matchers.cc +3 -4
  177. data/src/core/lib/matchers/matchers.h +2 -1
  178. data/src/core/lib/promise/activity.cc +5 -0
  179. data/src/core/lib/promise/activity.h +10 -0
  180. data/src/core/lib/promise/detail/promise_factory.h +1 -1
  181. data/src/core/lib/promise/party.cc +31 -13
  182. data/src/core/lib/promise/party.h +11 -2
  183. data/src/core/lib/promise/pipe.h +9 -2
  184. data/src/core/lib/promise/prioritized_race.h +95 -0
  185. data/src/core/lib/promise/sleep.cc +2 -1
  186. data/src/core/lib/resolver/server_address.cc +0 -8
  187. data/src/core/lib/resolver/server_address.h +0 -6
  188. data/src/core/lib/resource_quota/memory_quota.cc +7 -7
  189. data/src/core/lib/resource_quota/memory_quota.h +1 -2
  190. data/src/core/lib/security/authorization/audit_logging.cc +98 -0
  191. data/src/core/lib/security/authorization/audit_logging.h +73 -0
  192. data/src/core/lib/security/authorization/grpc_authorization_engine.cc +47 -2
  193. data/src/core/lib/security/authorization/grpc_authorization_engine.h +18 -1
  194. data/src/core/lib/security/authorization/rbac_policy.cc +36 -4
  195. data/src/core/lib/security/authorization/rbac_policy.h +19 -2
  196. data/src/core/lib/security/authorization/stdout_logger.cc +75 -0
  197. data/src/core/lib/security/authorization/stdout_logger.h +61 -0
  198. data/src/core/lib/security/certificate_provider/certificate_provider_factory.h +8 -4
  199. data/src/core/lib/security/certificate_provider/certificate_provider_registry.cc +8 -18
  200. data/src/core/lib/security/certificate_provider/certificate_provider_registry.h +14 -8
  201. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +19 -12
  202. data/src/core/lib/security/credentials/external/external_account_credentials.cc +4 -2
  203. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +1 -0
  204. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +1 -0
  205. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +1 -0
  206. data/src/core/lib/security/credentials/jwt/json_token.cc +15 -14
  207. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +4 -2
  208. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +1 -0
  209. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +1 -0
  210. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +1 -5
  211. data/src/core/lib/security/util/json_util.cc +1 -0
  212. data/src/core/lib/service_config/service_config_call_data.h +49 -20
  213. data/src/core/lib/service_config/service_config_impl.cc +2 -1
  214. data/src/core/lib/surface/call.cc +38 -23
  215. data/src/core/lib/surface/completion_queue.cc +6 -2
  216. data/src/core/lib/surface/version.cc +2 -2
  217. data/src/core/lib/transport/batch_builder.cc +15 -12
  218. data/src/core/lib/transport/batch_builder.h +39 -35
  219. data/src/core/plugin_registry/grpc_plugin_registry.cc +0 -2
  220. data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +2 -0
  221. data/src/ruby/ext/grpc/extconf.rb +8 -9
  222. data/src/ruby/lib/grpc/version.rb +1 -1
  223. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_mbstr.c +9 -8
  224. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c +1 -1
  225. data/third_party/boringssl-with-bazel/src/crypto/asn1/internal.h +3 -3
  226. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +10 -6
  227. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +7 -4
  228. data/third_party/boringssl-with-bazel/src/crypto/bio/bio.c +6 -4
  229. data/third_party/boringssl-with-bazel/src/crypto/bio/fd.c +2 -1
  230. data/third_party/boringssl-with-bazel/src/crypto/bio/file.c +5 -9
  231. data/third_party/boringssl-with-bazel/src/crypto/bio/pair.c +4 -2
  232. data/third_party/boringssl-with-bazel/src/crypto/blake2/blake2.c +31 -22
  233. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_tls.c +29 -26
  234. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h +8 -0
  235. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +189 -13
  236. data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_openbsd.c +62 -0
  237. data/third_party/boringssl-with-bazel/src/crypto/cpu_arm_openbsd.c +31 -0
  238. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519.c +6 -4
  239. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519_tables.h +795 -795
  240. data/third_party/boringssl-with-bazel/src/crypto/curve25519/internal.h +1 -5
  241. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +4 -0
  242. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c +18 -6
  243. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h +15 -7
  244. data/third_party/boringssl-with-bazel/src/crypto/ecdh_extra/ecdh_extra.c +1 -1
  245. data/third_party/boringssl-with-bazel/src/crypto/evp/p_rsa.c +1 -1
  246. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +1 -0
  247. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/dh.c +3 -0
  248. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +24 -24
  249. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +1 -1
  250. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_montgomery.c +7 -7
  251. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +74 -74
  252. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/oct.c +1 -2
  253. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c +11 -11
  254. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-nistz.c +12 -12
  255. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.c +14 -15
  256. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256_table.h +1 -1
  257. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple.c +10 -10
  258. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c +23 -23
  259. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/wnaf.c +13 -13
  260. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdh/ecdh.c +1 -1
  261. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +2 -2
  262. data/third_party/boringssl-with-bazel/src/crypto/{hkdf → fipsmodule/hkdf}/hkdf.c +1 -1
  263. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cbc.c +2 -10
  264. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ctr.c +1 -4
  265. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm.c +115 -133
  266. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm_nohw.c +12 -14
  267. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/internal.h +57 -47
  268. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ofb.c +1 -8
  269. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/polyval.c +27 -28
  270. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +11 -23
  271. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h +21 -16
  272. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/padding.c +5 -288
  273. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +143 -83
  274. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +95 -183
  275. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +71 -0
  276. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/tls/internal.h +8 -0
  277. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/tls/kdf.c +33 -0
  278. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +162 -6
  279. data/third_party/boringssl-with-bazel/src/crypto/internal.h +18 -0
  280. data/third_party/boringssl-with-bazel/src/crypto/kyber/kyber.c +18 -11
  281. data/third_party/boringssl-with-bazel/src/crypto/obj/obj_dat.h +6 -13
  282. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_lib.c +18 -14
  283. data/third_party/boringssl-with-bazel/src/crypto/{refcount_lock.c → refcount_no_threads.c} +3 -13
  284. data/third_party/boringssl-with-bazel/src/crypto/refcount_win.c +89 -0
  285. data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/internal.h +77 -0
  286. data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/rsa_crypt.c +568 -0
  287. data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +62 -0
  288. data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +218 -44
  289. data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +35 -0
  290. data/third_party/boringssl-with-bazel/src/crypto/trust_token/voprf.c +588 -39
  291. data/third_party/boringssl-with-bazel/src/crypto/x509/a_sign.c +27 -18
  292. data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +1 -1
  293. data/third_party/boringssl-with-bazel/src/crypto/x509/name_print.c +17 -39
  294. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c +39 -48
  295. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c +0 -140
  296. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +72 -23
  297. data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +11 -14
  298. data/third_party/boringssl-with-bazel/src/crypto/x509/x509spki.c +1 -1
  299. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509a.c +2 -2
  300. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +1 -1
  301. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_conf.c +33 -46
  302. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +1 -0
  303. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_info.c +3 -5
  304. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +14 -46
  305. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +14 -26
  306. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +17 -10
  307. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +1 -1
  308. data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +5 -7
  309. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +6 -4
  310. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +32 -1
  311. data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +0 -4
  312. data/third_party/boringssl-with-bazel/src/include/openssl/blake2.h +1 -4
  313. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +3 -3
  314. data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +28 -0
  315. data/third_party/boringssl-with-bazel/src/include/openssl/nid.h +2 -11
  316. data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +0 -3
  317. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +91 -1
  318. data/third_party/boringssl-with-bazel/src/include/openssl/span.h +5 -0
  319. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +149 -20
  320. data/third_party/boringssl-with-bazel/src/include/openssl/thread.h +4 -0
  321. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +4 -0
  322. data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +8 -0
  323. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +774 -615
  324. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +42 -10
  325. data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +11 -6
  326. data/third_party/boringssl-with-bazel/src/ssl/extensions.cc +2 -4
  327. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +24 -16
  328. data/third_party/boringssl-with-bazel/src/ssl/internal.h +65 -18
  329. data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +37 -18
  330. data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +187 -193
  331. data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +13 -129
  332. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +85 -10
  333. data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +17 -4
  334. data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +27 -19
  335. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +1 -1
  336. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +5 -21
  337. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +5 -2
  338. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_64_msvc.h +1281 -0
  339. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_64_msvc.h +2002 -0
  340. data/third_party/cares/cares/include/ares.h +23 -1
  341. data/third_party/cares/cares/{src/lib → include}/ares_nameser.h +9 -7
  342. data/third_party/cares/cares/include/ares_rules.h +2 -2
  343. data/third_party/cares/cares/include/ares_version.h +3 -3
  344. data/third_party/cares/cares/src/lib/ares__addrinfo2hostent.c +266 -0
  345. data/third_party/cares/cares/src/lib/ares__addrinfo_localhost.c +240 -0
  346. data/third_party/cares/cares/src/lib/ares__parse_into_addrinfo.c +49 -80
  347. data/third_party/cares/cares/src/lib/ares__readaddrinfo.c +37 -43
  348. data/third_party/cares/cares/src/lib/ares__sortaddrinfo.c +12 -4
  349. data/third_party/cares/cares/src/lib/ares_data.c +16 -0
  350. data/third_party/cares/cares/src/lib/ares_data.h +7 -0
  351. data/third_party/cares/cares/src/lib/ares_destroy.c +8 -0
  352. data/third_party/cares/cares/src/lib/ares_expand_name.c +17 -6
  353. data/third_party/cares/cares/src/lib/ares_freeaddrinfo.c +1 -0
  354. data/third_party/cares/cares/src/lib/ares_getaddrinfo.c +156 -78
  355. data/third_party/cares/cares/src/lib/ares_gethostbyname.c +130 -326
  356. data/third_party/cares/cares/src/lib/ares_init.c +97 -485
  357. data/third_party/cares/cares/src/lib/ares_library_init.c +2 -89
  358. data/third_party/cares/cares/src/lib/ares_parse_a_reply.c +23 -142
  359. data/third_party/cares/cares/src/lib/ares_parse_aaaa_reply.c +22 -142
  360. data/third_party/cares/cares/src/lib/ares_parse_uri_reply.c +184 -0
  361. data/third_party/cares/cares/src/lib/ares_private.h +30 -16
  362. data/third_party/cares/cares/src/lib/ares_process.c +55 -16
  363. data/third_party/cares/cares/src/lib/ares_query.c +1 -35
  364. data/third_party/cares/cares/src/lib/ares_rand.c +279 -0
  365. data/third_party/cares/cares/src/lib/ares_send.c +5 -7
  366. data/third_party/cares/cares/src/lib/ares_strdup.c +12 -19
  367. data/third_party/cares/cares/src/lib/ares_strsplit.c +44 -128
  368. data/third_party/cares/cares/src/lib/ares_strsplit.h +9 -10
  369. data/third_party/cares/cares/src/lib/inet_net_pton.c +78 -116
  370. data/third_party/cares/cares/src/tools/ares_getopt.h +53 -0
  371. metadata +48 -12
  372. data/src/core/ext/filters/client_channel/health/health_check_client.cc +0 -175
  373. data/src/core/ext/filters/client_channel/health/health_check_client.h +0 -43
  374. data/third_party/cares/cares/src/lib/ares_library_init.h +0 -43
@@ -21,7 +21,6 @@
21
21
  #include "src/core/ext/transport/chttp2/transport/flow_control.h"
22
22
 
23
23
  #include <inttypes.h>
24
- #include <limits.h>
25
24
 
26
25
  #include <algorithm>
27
26
  #include <cmath>
@@ -245,7 +244,7 @@ TransportFlowControl::TargetInitialWindowSizeBasedOnMemoryPressureAndBdp()
245
244
  //
246
245
  // ▲
247
246
  // │
248
- // 16mb ────┤---------x----
247
+ // 4mb ────┤---------x----
249
248
  // │ -----
250
249
  // BDP ────┤ ----x---
251
250
  // │ ----
@@ -260,7 +259,8 @@ TransportFlowControl::TargetInitialWindowSizeBasedOnMemoryPressureAndBdp()
260
259
  // pressure
261
260
  const double kAnythingGoesPressure = 0.2;
262
261
  const double kAdjustedToBdpPressure = 0.5;
263
- const double kAnythingGoesWindow = std::max(double{1 << 24}, bdp);
262
+ const double kOneMegabyte = 1024.0 * 1024.0;
263
+ const double kAnythingGoesWindow = std::max(4.0 * kOneMegabyte, bdp);
264
264
  if (memory_pressure < kAnythingGoesPressure) {
265
265
  return kAnythingGoesWindow;
266
266
  } else if (memory_pressure < kAdjustedToBdpPressure) {
@@ -278,45 +278,33 @@ void TransportFlowControl::UpdateSetting(
278
278
  uint32_t new_desired_value, FlowControlAction* action,
279
279
  FlowControlAction& (FlowControlAction::*set)(FlowControlAction::Urgency,
280
280
  uint32_t)) {
281
- if (IsFlowControlFixesEnabled()) {
282
- new_desired_value =
283
- Clamp(new_desired_value, grpc_chttp2_settings_parameters[id].min_value,
284
- grpc_chttp2_settings_parameters[id].max_value);
285
- if (new_desired_value != *desired_value) {
286
- if (grpc_flowctl_trace.enabled()) {
287
- gpr_log(GPR_INFO, "[flowctl] UPDATE SETTING %s from %" PRId64 " to %d",
288
- grpc_chttp2_settings_parameters[id].name, *desired_value,
289
- new_desired_value);
290
- }
291
- // Reaching zero can only happen for initial window size, and if it occurs
292
- // we really want to wake up writes and ensure all the queued stream
293
- // window updates are flushed, since stream flow control operates
294
- // differently at zero window size.
295
- FlowControlAction::Urgency urgency =
296
- FlowControlAction::Urgency::QUEUE_UPDATE;
297
- if (*desired_value == 0 || new_desired_value == 0) {
298
- urgency = FlowControlAction::Urgency::UPDATE_IMMEDIATELY;
299
- }
300
- *desired_value = new_desired_value;
301
- (action->*set)(urgency, *desired_value);
281
+ new_desired_value =
282
+ Clamp(new_desired_value, grpc_chttp2_settings_parameters[id].min_value,
283
+ grpc_chttp2_settings_parameters[id].max_value);
284
+ if (new_desired_value != *desired_value) {
285
+ if (grpc_flowctl_trace.enabled()) {
286
+ gpr_log(GPR_INFO, "[flowctl] UPDATE SETTING %s from %" PRId64 " to %d",
287
+ grpc_chttp2_settings_parameters[id].name, *desired_value,
288
+ new_desired_value);
302
289
  }
303
- } else {
304
- int64_t delta = new_desired_value - *desired_value;
305
- // TODO(ncteisen): tune this
306
- if (delta != 0 &&
307
- (delta <= -*desired_value / 5 || delta >= *desired_value / 5)) {
308
- *desired_value = new_desired_value;
309
- (action->*set)(FlowControlAction::Urgency::QUEUE_UPDATE,
310
- static_cast<uint32_t>(*desired_value));
290
+ // Reaching zero can only happen for initial window size, and if it occurs
291
+ // we really want to wake up writes and ensure all the queued stream
292
+ // window updates are flushed, since stream flow control operates
293
+ // differently at zero window size.
294
+ FlowControlAction::Urgency urgency =
295
+ FlowControlAction::Urgency::QUEUE_UPDATE;
296
+ if (*desired_value == 0 || new_desired_value == 0) {
297
+ urgency = FlowControlAction::Urgency::UPDATE_IMMEDIATELY;
311
298
  }
299
+ *desired_value = new_desired_value;
300
+ (action->*set)(urgency, *desired_value);
312
301
  }
313
302
  }
314
303
 
315
304
  FlowControlAction TransportFlowControl::SetAckedInitialWindow(uint32_t value) {
316
305
  acked_init_window_ = value;
317
306
  FlowControlAction action;
318
- if (IsFlowControlFixesEnabled() &&
319
- acked_init_window_ != target_initial_window_size_) {
307
+ if (acked_init_window_ != target_initial_window_size_) {
320
308
  FlowControlAction::Urgency urgency =
321
309
  FlowControlAction::Urgency::QUEUE_UPDATE;
322
310
  if (acked_init_window_ == 0 || target_initial_window_size_ == 0) {
@@ -330,68 +318,31 @@ FlowControlAction TransportFlowControl::SetAckedInitialWindow(uint32_t value) {
330
318
  FlowControlAction TransportFlowControl::PeriodicUpdate() {
331
319
  FlowControlAction action;
332
320
  if (enable_bdp_probe_) {
333
- if (IsFlowControlFixesEnabled()) {
334
- // get bdp estimate and update initial_window accordingly.
335
- // target might change based on how much memory pressure we are under
336
- // TODO(ncteisen): experiment with setting target to be huge under low
337
- // memory pressure.
338
- uint32_t target = static_cast<uint32_t>(RoundUpToPowerOf2(
339
- Clamp(IsMemoryPressureControllerEnabled()
340
- ? TargetInitialWindowSizeBasedOnMemoryPressureAndBdp()
341
- : pow(2, SmoothLogBdp(TargetLogBdp())),
342
- 0.0, static_cast<double>(kMaxInitialWindowSize))));
343
- if (target < kMinPositiveInitialWindowSize) target = 0;
344
- if (g_test_only_transport_target_window_estimates_mocker != nullptr) {
345
- // Hook for simulating unusual flow control situations in tests.
346
- target = g_test_only_transport_target_window_estimates_mocker
347
- ->ComputeNextTargetInitialWindowSizeFromPeriodicUpdate(
348
- target_initial_window_size_ /* current target */);
349
- }
350
- // Though initial window 'could' drop to 0, we keep the floor at
351
- // kMinInitialWindowSize
352
- UpdateSetting(GRPC_CHTTP2_SETTINGS_INITIAL_WINDOW_SIZE,
353
- &target_initial_window_size_, target, &action,
354
- &FlowControlAction::set_send_initial_window_update);
355
- // we target the max of BDP or bandwidth in microseconds.
356
- UpdateSetting(GRPC_CHTTP2_SETTINGS_MAX_FRAME_SIZE, &target_frame_size_,
357
- target, &action,
358
- &FlowControlAction::set_send_max_frame_size_update);
359
- } else {
360
- // get bdp estimate and update initial_window accordingly.
361
- // target might change based on how much memory pressure we are under
362
- // TODO(ncteisen): experiment with setting target to be huge under low
363
- // memory pressure.
364
- double target = IsMemoryPressureControllerEnabled()
365
- ? TargetInitialWindowSizeBasedOnMemoryPressureAndBdp()
366
- : pow(2, SmoothLogBdp(TargetLogBdp()));
367
- if (g_test_only_transport_target_window_estimates_mocker != nullptr) {
368
- // Hook for simulating unusual flow control situations in tests.
369
- target = g_test_only_transport_target_window_estimates_mocker
370
- ->ComputeNextTargetInitialWindowSizeFromPeriodicUpdate(
371
- target_initial_window_size_ /* current target */);
372
- }
373
- // Though initial window 'could' drop to 0, we keep the floor at
374
- // kMinInitialWindowSize
375
- UpdateSetting(GRPC_CHTTP2_SETTINGS_INITIAL_WINDOW_SIZE,
376
- &target_initial_window_size_,
377
- static_cast<int32_t>(Clamp(
378
- target, static_cast<double>(kMinInitialWindowSize),
379
- static_cast<double>(kMaxInitialWindowSize))),
380
- &action,
381
- &FlowControlAction::set_send_initial_window_update);
382
- // get bandwidth estimate and update max_frame accordingly.
383
- double bw_dbl = bdp_estimator_.EstimateBandwidth();
384
- // we target the max of BDP or bandwidth in microseconds.
385
- UpdateSetting(
386
- GRPC_CHTTP2_SETTINGS_MAX_FRAME_SIZE, &target_frame_size_,
387
- static_cast<int32_t>(
388
- Clamp(std::max(static_cast<int32_t>(Clamp(
389
- bw_dbl, 0.0, static_cast<double>(INT_MAX))) /
390
- 1000,
391
- static_cast<int32_t>(target_initial_window_size_)),
392
- 16384, 16777215)),
393
- &action, &FlowControlAction::set_send_max_frame_size_update);
321
+ // get bdp estimate and update initial_window accordingly.
322
+ // target might change based on how much memory pressure we are under
323
+ // TODO(ncteisen): experiment with setting target to be huge under low
324
+ // memory pressure.
325
+ uint32_t target = static_cast<uint32_t>(RoundUpToPowerOf2(
326
+ Clamp(IsMemoryPressureControllerEnabled()
327
+ ? TargetInitialWindowSizeBasedOnMemoryPressureAndBdp()
328
+ : pow(2, SmoothLogBdp(TargetLogBdp())),
329
+ 0.0, static_cast<double>(kMaxInitialWindowSize))));
330
+ if (target < kMinPositiveInitialWindowSize) target = 0;
331
+ if (g_test_only_transport_target_window_estimates_mocker != nullptr) {
332
+ // Hook for simulating unusual flow control situations in tests.
333
+ target = g_test_only_transport_target_window_estimates_mocker
334
+ ->ComputeNextTargetInitialWindowSizeFromPeriodicUpdate(
335
+ target_initial_window_size_ /* current target */);
394
336
  }
337
+ // Though initial window 'could' drop to 0, we keep the floor at
338
+ // kMinInitialWindowSize
339
+ UpdateSetting(GRPC_CHTTP2_SETTINGS_INITIAL_WINDOW_SIZE,
340
+ &target_initial_window_size_, target, &action,
341
+ &FlowControlAction::set_send_initial_window_update);
342
+ // we target the max of BDP or bandwidth in microseconds.
343
+ UpdateSetting(GRPC_CHTTP2_SETTINGS_MAX_FRAME_SIZE, &target_frame_size_,
344
+ target, &action,
345
+ &FlowControlAction::set_send_max_frame_size_update);
395
346
 
396
347
  if (IsTcpFrameSizeTuningEnabled()) {
397
348
  // Advertise PREFERRED_RECEIVE_CRYPTO_FRAME_SIZE to peer. By advertising
@@ -244,21 +244,7 @@ typedef enum {
244
244
  GRPC_CHTTP2_KEEPALIVE_STATE_DISABLED,
245
245
  } grpc_chttp2_keepalive_state;
246
246
 
247
- struct grpc_chttp2_transport
248
- // TODO(ctiller): #31319 fixed a crash on Linux & Mac whereby iomgr was
249
- // accessed after shutdown by chttp2. We've not seen similar behavior on
250
- // Windows afaik, but this fix has exposed another refcounting bug whereby
251
- // transports leak on Windows and prevent test shutdown.
252
- // This hack attempts to compromise between two things that are blocking our CI
253
- // from giving us a good quality signal, but are unlikely to be problems for
254
- // most customers. We should continue tracking down what's causing the failure,
255
- // but this gives us some runway to do so - and given that we're actively
256
- // working on removing the problematic code paths, it may be that effort brings
257
- // the result we need.
258
- #ifndef GPR_WINDOWS
259
- : public grpc_core::KeepsGrpcInitialized
260
- #endif
261
- {
247
+ struct grpc_chttp2_transport : public grpc_core::KeepsGrpcInitialized {
262
248
  grpc_chttp2_transport(const grpc_core::ChannelArgs& channel_args,
263
249
  grpc_endpoint* ep, bool is_client);
264
250
  ~grpc_chttp2_transport();
@@ -22,7 +22,7 @@ static const upb_MiniTableSub xds_data_orca_v3_OrcaLoadReport_submsgs[3] = {
22
22
  {.submsg = &xds_data_orca_v3_OrcaLoadReport_NamedMetricsEntry_msg_init},
23
23
  };
24
24
 
25
- static const upb_MiniTableField xds_data_orca_v3_OrcaLoadReport__fields[8] = {
25
+ static const upb_MiniTableField xds_data_orca_v3_OrcaLoadReport__fields[9] = {
26
26
  {1, UPB_SIZE(16, 0), 0, kUpb_NoSub, 1, kUpb_FieldMode_Scalar | (kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)},
27
27
  {2, UPB_SIZE(24, 8), 0, kUpb_NoSub, 1, kUpb_FieldMode_Scalar | (kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)},
28
28
  {3, UPB_SIZE(32, 16), 0, kUpb_NoSub, 4, kUpb_FieldMode_Scalar | (kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)},
@@ -31,12 +31,13 @@ static const upb_MiniTableField xds_data_orca_v3_OrcaLoadReport__fields[8] = {
31
31
  {6, 40, 0, kUpb_NoSub, 1, kUpb_FieldMode_Scalar | (kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)},
32
32
  {7, 48, 0, kUpb_NoSub, 1, kUpb_FieldMode_Scalar | (kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)},
33
33
  {8, UPB_SIZE(8, 56), 0, 2, 11, kUpb_FieldMode_Map | (UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)},
34
+ {9, UPB_SIZE(56, 64), 0, kUpb_NoSub, 1, kUpb_FieldMode_Scalar | (kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)},
34
35
  };
35
36
 
36
37
  const upb_MiniTable xds_data_orca_v3_OrcaLoadReport_msg_init = {
37
38
  &xds_data_orca_v3_OrcaLoadReport_submsgs[0],
38
39
  &xds_data_orca_v3_OrcaLoadReport__fields[0],
39
- UPB_SIZE(56, 64), 8, kUpb_ExtMode_NonExtendable, 8, UPB_FASTTABLE_MASK(56), 0,
40
+ UPB_SIZE(64, 72), 9, kUpb_ExtMode_NonExtendable, 9, UPB_FASTTABLE_MASK(120), 0,
40
41
  UPB_FASTTABLE_INIT({
41
42
  {0x0000000000000000, &_upb_FastDecoder_DecodeGeneric},
42
43
  {0x000000003f000009, &upb_psf8_1bt},
@@ -46,6 +47,14 @@ const upb_MiniTable xds_data_orca_v3_OrcaLoadReport_msg_init = {
46
47
  {0x0000000000000000, &_upb_FastDecoder_DecodeGeneric},
47
48
  {0x002800003f000031, &upb_psf8_1bt},
48
49
  {0x003000003f000039, &upb_psf8_1bt},
50
+ {0x0000000000000000, &_upb_FastDecoder_DecodeGeneric},
51
+ {0x004000003f000049, &upb_psf8_1bt},
52
+ {0x0000000000000000, &_upb_FastDecoder_DecodeGeneric},
53
+ {0x0000000000000000, &_upb_FastDecoder_DecodeGeneric},
54
+ {0x0000000000000000, &_upb_FastDecoder_DecodeGeneric},
55
+ {0x0000000000000000, &_upb_FastDecoder_DecodeGeneric},
56
+ {0x0000000000000000, &_upb_FastDecoder_DecodeGeneric},
57
+ {0x0000000000000000, &_upb_FastDecoder_DecodeGeneric},
49
58
  })
50
59
  };
51
60
 
@@ -189,6 +189,17 @@ UPB_INLINE const xds_data_orca_v3_OrcaLoadReport_NamedMetricsEntry* xds_data_orc
189
189
  if (!map) return NULL;
190
190
  return (const xds_data_orca_v3_OrcaLoadReport_NamedMetricsEntry*)_upb_map_next(map, iter);
191
191
  }
192
+ UPB_INLINE void xds_data_orca_v3_OrcaLoadReport_clear_application_utilization(xds_data_orca_v3_OrcaLoadReport* msg) {
193
+ const upb_MiniTableField field = {9, UPB_SIZE(56, 64), 0, kUpb_NoSub, 1, kUpb_FieldMode_Scalar | (kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)};
194
+ _upb_Message_ClearNonExtensionField(msg, &field);
195
+ }
196
+ UPB_INLINE double xds_data_orca_v3_OrcaLoadReport_application_utilization(const xds_data_orca_v3_OrcaLoadReport* msg) {
197
+ double default_val = 0;
198
+ double ret;
199
+ const upb_MiniTableField field = {9, UPB_SIZE(56, 64), 0, kUpb_NoSub, 1, kUpb_FieldMode_Scalar | (kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)};
200
+ _upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
201
+ return ret;
202
+ }
192
203
 
193
204
  UPB_INLINE void xds_data_orca_v3_OrcaLoadReport_set_cpu_utilization(xds_data_orca_v3_OrcaLoadReport *msg, double value) {
194
205
  const upb_MiniTableField field = {1, UPB_SIZE(16, 0), 0, kUpb_NoSub, 1, kUpb_FieldMode_Scalar | (kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)};
@@ -282,6 +293,10 @@ UPB_INLINE xds_data_orca_v3_OrcaLoadReport_NamedMetricsEntry* xds_data_orca_v3_O
282
293
  if (!map) return NULL;
283
294
  return (xds_data_orca_v3_OrcaLoadReport_NamedMetricsEntry*)_upb_map_next(map, iter);
284
295
  }
296
+ UPB_INLINE void xds_data_orca_v3_OrcaLoadReport_set_application_utilization(xds_data_orca_v3_OrcaLoadReport *msg, double value) {
297
+ const upb_MiniTableField field = {9, UPB_SIZE(56, 64), 0, kUpb_NoSub, 1, kUpb_FieldMode_Scalar | (kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)};
298
+ _upb_Message_SetNonExtensionField(msg, &field, &value);
299
+ }
285
300
 
286
301
  /* xds.data.orca.v3.OrcaLoadReport.RequestCostEntry */
287
302
 
@@ -22,11 +22,10 @@
22
22
 
23
23
  #include "absl/strings/str_cat.h"
24
24
 
25
+ #include <grpc/support/json.h>
25
26
  #include <grpc/support/log.h>
26
27
 
27
28
  #include "src/core/lib/config/core_configuration.h"
28
- #include "src/core/lib/gprpp/status_helper.h"
29
- #include "src/core/lib/iomgr/error.h"
30
29
  #include "src/core/lib/security/certificate_provider/certificate_provider_registry.h"
31
30
 
32
31
  namespace grpc_core {
@@ -45,7 +44,7 @@ CertificateProviderStore::PluginDefinition::JsonLoader(const JsonArgs&) {
45
44
  }
46
45
 
47
46
  void CertificateProviderStore::PluginDefinition::JsonPostLoad(
48
- const Json& json, const JsonArgs&, ValidationErrors* errors) {
47
+ const Json& json, const JsonArgs& args, ValidationErrors* errors) {
49
48
  // Check that plugin is supported.
50
49
  CertificateProviderFactory* factory = nullptr;
51
50
  if (!plugin_name.empty()) {
@@ -75,12 +74,8 @@ void CertificateProviderStore::PluginDefinition::JsonPostLoad(
75
74
  }
76
75
  if (factory == nullptr) return;
77
76
  // Use plugin to validate and parse config.
78
- grpc_error_handle parse_error;
79
- config =
80
- factory->CreateCertificateProviderConfig(config_json, &parse_error);
81
- if (!parse_error.ok()) {
82
- errors->AddError(StatusToString(parse_error));
83
- }
77
+ config = factory->CreateCertificateProviderConfig(
78
+ Json::FromObject(std::move(config_json)), args, errors);
84
79
  }
85
80
  }
86
81
 
@@ -55,7 +55,7 @@ class CertificateProviderStore
55
55
  RefCountedPtr<CertificateProviderFactory::Config> config;
56
56
 
57
57
  static const JsonLoaderInterface* JsonLoader(const JsonArgs&);
58
- void JsonPostLoad(const Json& json, const JsonArgs&,
58
+ void JsonPostLoad(const Json& json, const JsonArgs& args,
59
59
  ValidationErrors* errors);
60
60
  };
61
61
 
@@ -22,6 +22,7 @@
22
22
 
23
23
  #include <algorithm>
24
24
  #include <initializer_list>
25
+ #include <map>
25
26
  #include <memory>
26
27
  #include <vector>
27
28
 
@@ -32,14 +33,13 @@
32
33
  #include <grpc/support/time.h>
33
34
 
34
35
  #include "src/core/lib/config/core_configuration.h"
35
- #include "src/core/lib/json/json_util.h"
36
36
  #include "src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h"
37
37
 
38
38
  namespace grpc_core {
39
39
 
40
40
  namespace {
41
41
 
42
- const char* kFileWatcherPlugin = "file_watcher";
42
+ constexpr absl::string_view kFileWatcherPlugin = "file_watcher";
43
43
 
44
44
  } // namespace
45
45
 
@@ -47,7 +47,7 @@ const char* kFileWatcherPlugin = "file_watcher";
47
47
  // FileWatcherCertificateProviderFactory::Config
48
48
  //
49
49
 
50
- const char* FileWatcherCertificateProviderFactory::Config::name() const {
50
+ absl::string_view FileWatcherCertificateProviderFactory::Config::name() const {
51
51
  return kFileWatcherPlugin;
52
52
  }
53
53
 
@@ -71,58 +71,46 @@ std::string FileWatcherCertificateProviderFactory::Config::ToString() const {
71
71
  return absl::StrJoin(parts, "");
72
72
  }
73
73
 
74
- RefCountedPtr<FileWatcherCertificateProviderFactory::Config>
75
- FileWatcherCertificateProviderFactory::Config::Parse(const Json& config_json,
76
- grpc_error_handle* error) {
77
- auto config = MakeRefCounted<FileWatcherCertificateProviderFactory::Config>();
78
- if (config_json.type() != Json::Type::kObject) {
79
- *error = GRPC_ERROR_CREATE("error:config type should be OBJECT.");
80
- return nullptr;
81
- }
82
- std::vector<grpc_error_handle> error_list;
83
- ParseJsonObjectField(config_json.object(), "certificate_file",
84
- &config->identity_cert_file_, &error_list, false);
85
- ParseJsonObjectField(config_json.object(), "private_key_file",
86
- &config->private_key_file_, &error_list, false);
87
- if (config->identity_cert_file_.empty() !=
88
- config->private_key_file_.empty()) {
89
- error_list.push_back(GRPC_ERROR_CREATE(
74
+ const JsonLoaderInterface*
75
+ FileWatcherCertificateProviderFactory::Config::JsonLoader(const JsonArgs&) {
76
+ static const auto* loader =
77
+ JsonObjectLoader<Config>()
78
+ .OptionalField("certificate_file", &Config::identity_cert_file_)
79
+ .OptionalField("private_key_file", &Config::private_key_file_)
80
+ .OptionalField("ca_certificate_file", &Config::root_cert_file_)
81
+ .OptionalField("refresh_interval", &Config::refresh_interval_)
82
+ .Finish();
83
+ return loader;
84
+ }
85
+
86
+ void FileWatcherCertificateProviderFactory::Config::JsonPostLoad(
87
+ const Json& json, const JsonArgs& /*args*/, ValidationErrors* errors) {
88
+ if ((json.object().find("certificate_file") == json.object().end()) !=
89
+ (json.object().find("private_key_file") == json.object().end())) {
90
+ errors->AddError(
90
91
  "fields \"certificate_file\" and \"private_key_file\" must be both set "
91
- "or both unset."));
92
+ "or both unset");
92
93
  }
93
- ParseJsonObjectField(config_json.object(), "ca_certificate_file",
94
- &config->root_cert_file_, &error_list, false);
95
- if (config->identity_cert_file_.empty() && config->root_cert_file_.empty()) {
96
- error_list.push_back(GRPC_ERROR_CREATE(
97
- "At least one of \"certificate_file\" and \"ca_certificate_file\" must "
98
- "be specified."));
99
- }
100
- if (!ParseJsonObjectFieldAsDuration(config_json.object(), "refresh_interval",
101
- &config->refresh_interval_, &error_list,
102
- false)) {
103
- config->refresh_interval_ = Duration::Minutes(10); // 10 minutes default
104
- }
105
- if (!error_list.empty()) {
106
- *error = GRPC_ERROR_CREATE_FROM_VECTOR(
107
- "Error parsing file watcher certificate provider config", &error_list);
108
- return nullptr;
94
+ if ((json.object().find("certificate_file") == json.object().end()) &&
95
+ (json.object().find("ca_certificate_file") == json.object().end())) {
96
+ errors->AddError(
97
+ "at least one of \"certificate_file\" and \"ca_certificate_file\" must "
98
+ "be specified");
109
99
  }
110
- return config;
111
100
  }
112
101
 
113
102
  //
114
103
  // FileWatcherCertificateProviderFactory
115
104
  //
116
105
 
117
- const char* FileWatcherCertificateProviderFactory::name() const {
106
+ absl::string_view FileWatcherCertificateProviderFactory::name() const {
118
107
  return kFileWatcherPlugin;
119
108
  }
120
109
 
121
110
  RefCountedPtr<CertificateProviderFactory::Config>
122
111
  FileWatcherCertificateProviderFactory::CreateCertificateProviderConfig(
123
- const Json& config_json, grpc_error_handle* error) {
124
- return FileWatcherCertificateProviderFactory::Config::Parse(config_json,
125
- error);
112
+ const Json& config_json, const JsonArgs& args, ValidationErrors* errors) {
113
+ return LoadFromJson<RefCountedPtr<Config>>(config_json, args, errors);
126
114
  }
127
115
 
128
116
  RefCountedPtr<grpc_tls_certificate_provider>
@@ -130,7 +118,7 @@ FileWatcherCertificateProviderFactory::CreateCertificateProvider(
130
118
  RefCountedPtr<CertificateProviderFactory::Config> config) {
131
119
  if (config->name() != name()) {
132
120
  gpr_log(GPR_ERROR, "Wrong config type Actual:%s vs Expected:%s",
133
- config->name(), name());
121
+ std::string(config->name()).c_str(), std::string(name()).c_str());
134
122
  return nullptr;
135
123
  }
136
124
  auto* file_watcher_config =
@@ -23,12 +23,16 @@
23
23
 
24
24
  #include <string>
25
25
 
26
+ #include "absl/strings/string_view.h"
27
+
26
28
  #include <grpc/grpc_security.h>
27
29
 
28
30
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
29
31
  #include "src/core/lib/gprpp/time.h"
30
- #include "src/core/lib/iomgr/error.h"
32
+ #include "src/core/lib/gprpp/validation_errors.h"
31
33
  #include "src/core/lib/json/json.h"
34
+ #include "src/core/lib/json/json_args.h"
35
+ #include "src/core/lib/json/json_object_loader.h"
32
36
  #include "src/core/lib/security/certificate_provider/certificate_provider_factory.h"
33
37
 
34
38
  namespace grpc_core {
@@ -38,10 +42,7 @@ class FileWatcherCertificateProviderFactory
38
42
  public:
39
43
  class Config : public CertificateProviderFactory::Config {
40
44
  public:
41
- static RefCountedPtr<Config> Parse(const Json& config_json,
42
- grpc_error_handle* error);
43
-
44
- const char* name() const override;
45
+ absl::string_view name() const override;
45
46
 
46
47
  std::string ToString() const override;
47
48
 
@@ -55,18 +56,22 @@ class FileWatcherCertificateProviderFactory
55
56
 
56
57
  Duration refresh_interval() const { return refresh_interval_; }
57
58
 
59
+ static const JsonLoaderInterface* JsonLoader(const JsonArgs& args);
60
+ void JsonPostLoad(const Json& json, const JsonArgs& args,
61
+ ValidationErrors* errors);
62
+
58
63
  private:
59
64
  std::string identity_cert_file_;
60
65
  std::string private_key_file_;
61
66
  std::string root_cert_file_;
62
- Duration refresh_interval_;
67
+ Duration refresh_interval_ = Duration::Minutes(10);
63
68
  };
64
69
 
65
- const char* name() const override;
70
+ absl::string_view name() const override;
66
71
 
67
72
  RefCountedPtr<CertificateProviderFactory::Config>
68
- CreateCertificateProviderConfig(const Json& config_json,
69
- grpc_error_handle* error) override;
73
+ CreateCertificateProviderConfig(const Json& config_json, const JsonArgs& args,
74
+ ValidationErrors* errors) override;
70
75
 
71
76
  RefCountedPtr<grpc_tls_certificate_provider> CreateCertificateProvider(
72
77
  RefCountedPtr<CertificateProviderFactory::Config> config) override;
@@ -114,11 +114,8 @@ void PopulateMetadataValue(const XdsApiContext& context,
114
114
  google_protobuf_Value_set_string_value(
115
115
  value_pb, StdStringToUpbString(value.string()));
116
116
  break;
117
- case Json::Type::kTrue:
118
- google_protobuf_Value_set_bool_value(value_pb, true);
119
- break;
120
- case Json::Type::kFalse:
121
- google_protobuf_Value_set_bool_value(value_pb, false);
117
+ case Json::Type::kBoolean:
118
+ google_protobuf_Value_set_bool_value(value_pb, value.boolean());
122
119
  break;
123
120
  case Json::Type::kObject: {
124
121
  google_protobuf_Struct* struct_value =
@@ -327,11 +324,17 @@ absl::Status XdsApi::ParseAdsResponse(absl::string_view encoded_response,
327
324
  const auto* resource_wrapper = envoy_service_discovery_v3_Resource_parse(
328
325
  serialized_resource.data(), serialized_resource.size(), arena.ptr());
329
326
  if (resource_wrapper == nullptr) {
330
- parser->ResourceWrapperParsingFailed(i);
327
+ parser->ResourceWrapperParsingFailed(
328
+ i, "Can't decode Resource proto wrapper");
331
329
  continue;
332
330
  }
333
331
  const auto* resource =
334
332
  envoy_service_discovery_v3_Resource_resource(resource_wrapper);
333
+ if (resource == nullptr) {
334
+ parser->ResourceWrapperParsingFailed(
335
+ i, "No resource present in Resource proto wrapper");
336
+ continue;
337
+ }
335
338
  type_url = absl::StripPrefix(
336
339
  UpbStringToAbsl(google_protobuf_Any_type_url(resource)),
337
340
  "type.googleapis.com/");
@@ -75,8 +75,9 @@ class XdsApi {
75
75
  absl::string_view serialized_resource) = 0;
76
76
 
77
77
  // Called when a resource is wrapped in a Resource wrapper proto but
78
- // we fail to deserialize the wrapper proto.
79
- virtual void ResourceWrapperParsingFailed(size_t idx) = 0;
78
+ // we fail to parse the Resource wrapper.
79
+ virtual void ResourceWrapperParsingFailed(size_t idx,
80
+ absl::string_view message) = 0;
80
81
  };
81
82
 
82
83
  struct ClusterLoadReport {