grpc 1.55.3 → 1.56.0.pre3

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

Potentially problematic release.


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

Files changed (385) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +100 -70
  3. data/include/grpc/event_engine/event_engine.h +4 -3
  4. data/include/grpc/grpc_audit_logging.h +96 -0
  5. data/include/grpc/module.modulemap +2 -0
  6. data/include/grpc/support/json.h +218 -0
  7. data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +5 -0
  8. data/src/core/ext/filters/client_channel/backend_metric.cc +2 -0
  9. data/src/core/ext/filters/client_channel/channel_connectivity.cc +4 -4
  10. data/src/core/ext/filters/client_channel/client_channel.cc +82 -98
  11. data/src/core/ext/filters/client_channel/client_channel.h +4 -0
  12. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +19 -18
  13. data/src/core/ext/filters/client_channel/client_channel_internal.h +16 -21
  14. data/src/core/ext/filters/client_channel/config_selector.h +9 -24
  15. data/src/core/ext/filters/client_channel/lb_policy/backend_metric_data.h +3 -0
  16. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +5 -4
  17. data/src/core/ext/filters/client_channel/lb_policy/health_check_client.cc +455 -0
  18. data/src/core/ext/filters/client_channel/lb_policy/health_check_client.h +54 -0
  19. data/src/core/ext/filters/client_channel/lb_policy/health_check_client_internal.h +186 -0
  20. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +2 -7
  21. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +52 -20
  22. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +23 -2
  23. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +19 -6
  24. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +1 -9
  25. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +16 -7
  26. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +18 -1
  27. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +12 -9
  28. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +6 -4
  29. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +36 -13
  30. data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/static_stride_scheduler.cc +76 -6
  31. data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/weighted_round_robin.cc +32 -39
  32. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +4 -10
  33. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +52 -47
  34. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +1 -9
  35. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +14 -16
  36. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +40 -43
  37. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.cc +7 -12
  38. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_wrr_locality.cc +12 -19
  39. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +35 -33
  40. data/src/core/ext/filters/client_channel/resolver/dns/event_engine/event_engine_client_channel_resolver.cc +29 -4
  41. data/src/core/ext/filters/client_channel/resolver/dns/event_engine/service_config_helper.cc +1 -1
  42. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +28 -27
  43. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +163 -46
  44. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +16 -1
  45. data/src/core/ext/filters/client_channel/retry_service_config.cc +1 -0
  46. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +10 -40
  47. data/src/core/ext/filters/client_channel/subchannel.cc +10 -196
  48. data/src/core/ext/filters/client_channel/subchannel.h +3 -43
  49. data/src/core/ext/filters/http/message_compress/compression_filter.cc +5 -5
  50. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +100 -6
  51. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +6 -8
  52. data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +3 -3
  53. data/src/core/ext/filters/stateful_session/stateful_session_filter.h +16 -1
  54. data/src/core/ext/transport/chttp2/transport/flow_control.cc +46 -95
  55. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +543 -567
  56. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +9 -150
  57. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +32 -46
  58. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +5 -18
  59. data/src/core/ext/transport/chttp2/transport/internal.h +1 -15
  60. data/src/core/ext/transport/chttp2/transport/parsing.cc +12 -12
  61. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +11 -2
  62. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +15 -0
  63. data/src/core/ext/xds/certificate_provider_store.cc +4 -9
  64. data/src/core/ext/xds/certificate_provider_store.h +1 -1
  65. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +30 -42
  66. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +14 -9
  67. data/src/core/ext/xds/xds_api.cc +9 -6
  68. data/src/core/ext/xds/xds_api.h +3 -2
  69. data/src/core/ext/xds/xds_audit_logger_registry.cc +122 -0
  70. data/src/core/ext/xds/xds_audit_logger_registry.h +68 -0
  71. data/src/core/ext/xds/xds_bootstrap_grpc.cc +21 -9
  72. data/src/core/ext/xds/xds_bootstrap_grpc.h +5 -0
  73. data/src/core/ext/xds/xds_client.cc +5 -4
  74. data/src/core/ext/xds/xds_client_stats.h +1 -1
  75. data/src/core/ext/xds/xds_cluster.cc +20 -19
  76. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +11 -8
  77. data/src/core/ext/xds/xds_common_types.cc +3 -1
  78. data/src/core/ext/xds/xds_http_fault_filter.cc +16 -13
  79. data/src/core/ext/xds/xds_http_fault_filter.h +2 -1
  80. data/src/core/ext/xds/xds_http_filters.h +4 -2
  81. data/src/core/ext/xds/xds_http_rbac_filter.cc +154 -67
  82. data/src/core/ext/xds/xds_http_rbac_filter.h +2 -1
  83. data/src/core/ext/xds/xds_http_stateful_session_filter.cc +15 -11
  84. data/src/core/ext/xds/xds_http_stateful_session_filter.h +2 -1
  85. data/src/core/ext/xds/xds_lb_policy_registry.cc +22 -16
  86. data/src/core/ext/xds/xds_listener.cc +1 -0
  87. data/src/core/ext/xds/xds_route_config.cc +40 -3
  88. data/src/core/ext/xds/xds_routing.cc +2 -2
  89. data/src/core/ext/xds/xds_transport_grpc.cc +3 -1
  90. data/src/core/lib/avl/avl.h +5 -0
  91. data/src/core/lib/backoff/random_early_detection.h +0 -5
  92. data/src/core/lib/channel/channel_args.cc +80 -22
  93. data/src/core/lib/channel/channel_args.h +34 -1
  94. data/src/core/lib/channel/channel_trace.cc +16 -12
  95. data/src/core/lib/channel/channelz.cc +159 -132
  96. data/src/core/lib/channel/channelz.h +42 -35
  97. data/src/core/lib/channel/channelz_registry.cc +23 -20
  98. data/src/core/lib/channel/connected_channel.cc +17 -6
  99. data/src/core/lib/channel/promise_based_filter.cc +0 -4
  100. data/src/core/lib/channel/promise_based_filter.h +2 -0
  101. data/src/core/lib/compression/compression_internal.cc +2 -5
  102. data/src/core/lib/config/config_vars.cc +20 -18
  103. data/src/core/lib/config/config_vars.h +4 -4
  104. data/src/core/lib/config/load_config.cc +13 -0
  105. data/src/core/lib/config/load_config.h +6 -0
  106. data/src/core/lib/debug/event_log.h +1 -1
  107. data/src/core/lib/debug/stats_data.h +1 -1
  108. data/src/core/lib/debug/trace.cc +24 -55
  109. data/src/core/lib/debug/trace.h +3 -1
  110. data/src/core/lib/event_engine/cf_engine/cf_engine.cc +211 -0
  111. data/src/core/lib/event_engine/cf_engine/cf_engine.h +86 -0
  112. data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.cc +354 -0
  113. data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.h +146 -0
  114. data/src/core/lib/event_engine/cf_engine/cftype_unique_ref.h +79 -0
  115. data/src/core/lib/event_engine/default_event_engine.cc +13 -1
  116. data/src/core/lib/event_engine/default_event_engine_factory.cc +14 -2
  117. data/src/core/lib/event_engine/poller.h +2 -2
  118. data/src/core/lib/event_engine/posix.h +4 -0
  119. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +1 -1
  120. data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +7 -18
  121. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +9 -0
  122. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +3 -2
  123. data/src/core/lib/event_engine/posix_engine/posix_engine.h +1 -2
  124. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +4 -33
  125. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.h +7 -11
  126. data/src/core/lib/event_engine/posix_engine/timer_manager.h +1 -1
  127. data/src/core/lib/event_engine/shim.cc +7 -1
  128. data/src/core/lib/event_engine/{thread_pool.cc → thread_pool/original_thread_pool.cc} +28 -25
  129. data/src/core/lib/event_engine/{thread_pool.h → thread_pool/original_thread_pool.h} +11 -15
  130. data/src/core/lib/event_engine/thread_pool/thread_pool.h +50 -0
  131. data/src/core/lib/event_engine/{executor/executor.h → thread_pool/thread_pool_factory.cc} +17 -15
  132. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +489 -0
  133. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.h +249 -0
  134. data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.cc +166 -0
  135. data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.h +108 -0
  136. data/src/core/lib/event_engine/windows/iocp.cc +4 -3
  137. data/src/core/lib/event_engine/windows/iocp.h +3 -3
  138. data/src/core/lib/event_engine/windows/win_socket.cc +6 -6
  139. data/src/core/lib/event_engine/windows/win_socket.h +4 -4
  140. data/src/core/lib/event_engine/windows/windows_endpoint.cc +11 -10
  141. data/src/core/lib/event_engine/windows/windows_endpoint.h +3 -2
  142. data/src/core/lib/event_engine/windows/windows_engine.cc +19 -17
  143. data/src/core/lib/event_engine/windows/windows_engine.h +6 -6
  144. data/src/core/lib/event_engine/windows/windows_listener.cc +3 -3
  145. data/src/core/lib/event_engine/windows/windows_listener.h +3 -2
  146. data/src/core/lib/event_engine/work_queue/basic_work_queue.cc +63 -0
  147. data/src/core/lib/event_engine/work_queue/basic_work_queue.h +71 -0
  148. data/src/core/lib/event_engine/work_queue/work_queue.h +62 -0
  149. data/src/core/lib/experiments/config.cc +38 -7
  150. data/src/core/lib/experiments/config.h +16 -0
  151. data/src/core/lib/experiments/experiments.cc +67 -20
  152. data/src/core/lib/experiments/experiments.h +27 -21
  153. data/src/core/lib/gpr/log_internal.h +55 -0
  154. data/src/core/lib/gprpp/crash.cc +10 -0
  155. data/src/core/lib/gprpp/crash.h +3 -0
  156. data/src/core/lib/gprpp/per_cpu.cc +33 -0
  157. data/src/core/lib/gprpp/per_cpu.h +29 -6
  158. data/src/core/lib/gprpp/time.cc +1 -0
  159. data/src/core/lib/iomgr/cfstream_handle.cc +1 -1
  160. data/src/core/lib/iomgr/endpoint_cfstream.cc +10 -8
  161. data/src/core/lib/iomgr/ev_apple.cc +12 -12
  162. data/src/core/lib/iomgr/ev_epoll1_linux.cc +10 -3
  163. data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +15 -1
  164. data/src/core/lib/iomgr/iocp_windows.cc +24 -3
  165. data/src/core/lib/iomgr/iocp_windows.h +11 -0
  166. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +1 -1
  167. data/src/core/lib/iomgr/socket_utils_common_posix.cc +4 -2
  168. data/src/core/lib/iomgr/socket_windows.cc +61 -7
  169. data/src/core/lib/iomgr/socket_windows.h +9 -2
  170. data/src/core/lib/iomgr/tcp_client_cfstream.cc +14 -3
  171. data/src/core/lib/iomgr/tcp_server_posix.cc +156 -140
  172. data/src/core/lib/iomgr/tcp_server_utils_posix.h +1 -13
  173. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +0 -21
  174. data/src/core/lib/iomgr/tcp_server_windows.cc +1 -1
  175. data/src/core/lib/json/json.h +2 -166
  176. data/src/core/lib/json/json_object_loader.cc +8 -9
  177. data/src/core/lib/json/json_object_loader.h +25 -18
  178. data/src/core/lib/json/json_reader.cc +13 -6
  179. data/src/core/lib/json/json_util.cc +6 -11
  180. data/src/core/lib/json/json_writer.cc +7 -8
  181. data/src/core/lib/load_balancing/lb_policy.h +13 -0
  182. data/src/core/lib/load_balancing/lb_policy_registry.cc +2 -1
  183. data/src/core/lib/matchers/matchers.cc +3 -4
  184. data/src/core/lib/matchers/matchers.h +2 -1
  185. data/src/core/lib/promise/activity.cc +5 -0
  186. data/src/core/lib/promise/activity.h +10 -0
  187. data/src/core/lib/promise/detail/promise_factory.h +1 -1
  188. data/src/core/lib/promise/party.cc +31 -13
  189. data/src/core/lib/promise/party.h +11 -2
  190. data/src/core/lib/promise/pipe.h +9 -2
  191. data/src/core/lib/promise/prioritized_race.h +95 -0
  192. data/src/core/lib/promise/sleep.cc +2 -1
  193. data/src/core/lib/resolver/server_address.cc +0 -8
  194. data/src/core/lib/resolver/server_address.h +0 -6
  195. data/src/core/lib/resource_quota/memory_quota.cc +7 -7
  196. data/src/core/lib/resource_quota/memory_quota.h +1 -2
  197. data/src/core/lib/security/authorization/audit_logging.cc +98 -0
  198. data/src/core/lib/security/authorization/audit_logging.h +73 -0
  199. data/src/core/lib/security/authorization/grpc_authorization_engine.cc +47 -2
  200. data/src/core/lib/security/authorization/grpc_authorization_engine.h +18 -1
  201. data/src/core/lib/security/authorization/rbac_policy.cc +36 -4
  202. data/src/core/lib/security/authorization/rbac_policy.h +19 -2
  203. data/src/core/lib/security/authorization/stdout_logger.cc +75 -0
  204. data/src/core/lib/security/authorization/stdout_logger.h +61 -0
  205. data/src/core/lib/security/certificate_provider/certificate_provider_factory.h +8 -4
  206. data/src/core/lib/security/certificate_provider/certificate_provider_registry.cc +8 -18
  207. data/src/core/lib/security/certificate_provider/certificate_provider_registry.h +14 -8
  208. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +19 -12
  209. data/src/core/lib/security/credentials/external/external_account_credentials.cc +4 -2
  210. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +1 -0
  211. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +1 -0
  212. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +1 -0
  213. data/src/core/lib/security/credentials/jwt/json_token.cc +15 -14
  214. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +4 -2
  215. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +1 -0
  216. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +1 -0
  217. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +1 -5
  218. data/src/core/lib/security/util/json_util.cc +1 -0
  219. data/src/core/lib/service_config/service_config_call_data.h +49 -20
  220. data/src/core/lib/service_config/service_config_impl.cc +2 -1
  221. data/src/core/lib/surface/call.cc +38 -23
  222. data/src/core/lib/surface/completion_queue.cc +6 -2
  223. data/src/core/lib/surface/validate_metadata.cc +22 -37
  224. data/src/core/lib/surface/validate_metadata.h +3 -13
  225. data/src/core/lib/surface/version.cc +2 -2
  226. data/src/core/lib/transport/batch_builder.cc +15 -12
  227. data/src/core/lib/transport/batch_builder.h +39 -35
  228. data/src/core/plugin_registry/grpc_plugin_registry.cc +0 -2
  229. data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +2 -0
  230. data/src/ruby/ext/grpc/extconf.rb +8 -9
  231. data/src/ruby/lib/grpc/version.rb +1 -1
  232. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_mbstr.c +9 -8
  233. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c +1 -1
  234. data/third_party/boringssl-with-bazel/src/crypto/asn1/internal.h +3 -3
  235. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +10 -6
  236. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +7 -4
  237. data/third_party/boringssl-with-bazel/src/crypto/bio/bio.c +6 -4
  238. data/third_party/boringssl-with-bazel/src/crypto/bio/fd.c +2 -1
  239. data/third_party/boringssl-with-bazel/src/crypto/bio/file.c +5 -9
  240. data/third_party/boringssl-with-bazel/src/crypto/bio/pair.c +4 -2
  241. data/third_party/boringssl-with-bazel/src/crypto/blake2/blake2.c +31 -22
  242. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_tls.c +29 -26
  243. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h +8 -0
  244. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +189 -13
  245. data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_openbsd.c +62 -0
  246. data/third_party/boringssl-with-bazel/src/crypto/cpu_arm_openbsd.c +31 -0
  247. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519.c +6 -4
  248. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519_tables.h +795 -795
  249. data/third_party/boringssl-with-bazel/src/crypto/curve25519/internal.h +1 -5
  250. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +4 -0
  251. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c +18 -6
  252. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h +15 -7
  253. data/third_party/boringssl-with-bazel/src/crypto/ecdh_extra/ecdh_extra.c +1 -1
  254. data/third_party/boringssl-with-bazel/src/crypto/evp/p_rsa.c +1 -1
  255. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +1 -0
  256. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/dh.c +3 -0
  257. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +24 -24
  258. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +1 -1
  259. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_montgomery.c +7 -7
  260. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +74 -74
  261. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/oct.c +1 -2
  262. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c +11 -11
  263. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-nistz.c +12 -12
  264. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.c +14 -15
  265. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256_table.h +1 -1
  266. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple.c +10 -10
  267. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c +23 -23
  268. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/wnaf.c +13 -13
  269. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdh/ecdh.c +1 -1
  270. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +2 -2
  271. data/third_party/boringssl-with-bazel/src/crypto/{hkdf → fipsmodule/hkdf}/hkdf.c +1 -1
  272. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cbc.c +2 -10
  273. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ctr.c +1 -4
  274. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm.c +115 -133
  275. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm_nohw.c +12 -14
  276. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/internal.h +57 -47
  277. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ofb.c +1 -8
  278. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/polyval.c +27 -28
  279. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +11 -23
  280. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h +21 -16
  281. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/padding.c +5 -288
  282. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +143 -83
  283. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +95 -183
  284. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +71 -0
  285. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/tls/internal.h +8 -0
  286. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/tls/kdf.c +33 -0
  287. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +162 -6
  288. data/third_party/boringssl-with-bazel/src/crypto/internal.h +18 -0
  289. data/third_party/boringssl-with-bazel/src/crypto/kyber/kyber.c +18 -11
  290. data/third_party/boringssl-with-bazel/src/crypto/obj/obj_dat.h +6 -13
  291. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_lib.c +18 -14
  292. data/third_party/boringssl-with-bazel/src/crypto/{refcount_lock.c → refcount_no_threads.c} +3 -13
  293. data/third_party/boringssl-with-bazel/src/crypto/refcount_win.c +89 -0
  294. data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/internal.h +77 -0
  295. data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/rsa_crypt.c +568 -0
  296. data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +62 -0
  297. data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +218 -44
  298. data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +35 -0
  299. data/third_party/boringssl-with-bazel/src/crypto/trust_token/voprf.c +588 -39
  300. data/third_party/boringssl-with-bazel/src/crypto/x509/a_sign.c +27 -18
  301. data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +1 -1
  302. data/third_party/boringssl-with-bazel/src/crypto/x509/name_print.c +17 -39
  303. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c +39 -48
  304. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c +0 -140
  305. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +72 -23
  306. data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +11 -14
  307. data/third_party/boringssl-with-bazel/src/crypto/x509/x509spki.c +1 -1
  308. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509a.c +2 -2
  309. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +1 -1
  310. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_conf.c +33 -46
  311. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +1 -0
  312. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_info.c +3 -5
  313. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +14 -46
  314. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +14 -26
  315. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +17 -10
  316. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +1 -1
  317. data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +5 -7
  318. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +6 -4
  319. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +32 -1
  320. data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +0 -4
  321. data/third_party/boringssl-with-bazel/src/include/openssl/blake2.h +1 -4
  322. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +3 -3
  323. data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +28 -0
  324. data/third_party/boringssl-with-bazel/src/include/openssl/nid.h +2 -11
  325. data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +0 -3
  326. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +91 -1
  327. data/third_party/boringssl-with-bazel/src/include/openssl/span.h +5 -0
  328. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +149 -20
  329. data/third_party/boringssl-with-bazel/src/include/openssl/thread.h +4 -0
  330. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +4 -0
  331. data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +8 -0
  332. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +774 -615
  333. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +42 -10
  334. data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +11 -6
  335. data/third_party/boringssl-with-bazel/src/ssl/extensions.cc +2 -4
  336. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +24 -16
  337. data/third_party/boringssl-with-bazel/src/ssl/internal.h +65 -18
  338. data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +37 -18
  339. data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +187 -193
  340. data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +13 -129
  341. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +85 -10
  342. data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +17 -4
  343. data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +27 -19
  344. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +1 -1
  345. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +5 -21
  346. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +5 -2
  347. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_64_msvc.h +1281 -0
  348. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_64_msvc.h +2002 -0
  349. data/third_party/cares/cares/include/ares.h +23 -1
  350. data/third_party/cares/cares/{src/lib → include}/ares_nameser.h +9 -7
  351. data/third_party/cares/cares/include/ares_rules.h +2 -2
  352. data/third_party/cares/cares/include/ares_version.h +3 -3
  353. data/third_party/cares/cares/src/lib/ares__addrinfo2hostent.c +266 -0
  354. data/third_party/cares/cares/src/lib/ares__addrinfo_localhost.c +240 -0
  355. data/third_party/cares/cares/src/lib/ares__parse_into_addrinfo.c +49 -80
  356. data/third_party/cares/cares/src/lib/ares__readaddrinfo.c +37 -43
  357. data/third_party/cares/cares/src/lib/ares__sortaddrinfo.c +12 -4
  358. data/third_party/cares/cares/src/lib/ares_data.c +16 -0
  359. data/third_party/cares/cares/src/lib/ares_data.h +7 -0
  360. data/third_party/cares/cares/src/lib/ares_destroy.c +8 -0
  361. data/third_party/cares/cares/src/lib/ares_expand_name.c +17 -6
  362. data/third_party/cares/cares/src/lib/ares_freeaddrinfo.c +1 -0
  363. data/third_party/cares/cares/src/lib/ares_getaddrinfo.c +156 -78
  364. data/third_party/cares/cares/src/lib/ares_gethostbyname.c +130 -326
  365. data/third_party/cares/cares/src/lib/ares_init.c +97 -485
  366. data/third_party/cares/cares/src/lib/ares_library_init.c +2 -89
  367. data/third_party/cares/cares/src/lib/ares_parse_a_reply.c +23 -142
  368. data/third_party/cares/cares/src/lib/ares_parse_aaaa_reply.c +22 -142
  369. data/third_party/cares/cares/src/lib/ares_parse_uri_reply.c +184 -0
  370. data/third_party/cares/cares/src/lib/ares_private.h +30 -16
  371. data/third_party/cares/cares/src/lib/ares_process.c +55 -16
  372. data/third_party/cares/cares/src/lib/ares_query.c +1 -35
  373. data/third_party/cares/cares/src/lib/ares_rand.c +279 -0
  374. data/third_party/cares/cares/src/lib/ares_send.c +5 -7
  375. data/third_party/cares/cares/src/lib/ares_strdup.c +12 -19
  376. data/third_party/cares/cares/src/lib/ares_strsplit.c +44 -128
  377. data/third_party/cares/cares/src/lib/ares_strsplit.h +9 -10
  378. data/third_party/cares/cares/src/lib/inet_net_pton.c +78 -116
  379. data/third_party/cares/cares/src/tools/ares_getopt.h +53 -0
  380. metadata +50 -16
  381. data/src/core/ext/filters/client_channel/health/health_check_client.cc +0 -175
  382. data/src/core/ext/filters/client_channel/health/health_check_client.h +0 -43
  383. data/src/core/ext/transport/chttp2/transport/hpack_parse_result.cc +0 -176
  384. data/src/core/ext/transport/chttp2/transport/hpack_parse_result.h +0 -325
  385. data/third_party/cares/cares/src/lib/ares_library_init.h +0 -43
@@ -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 {
@@ -0,0 +1,122 @@
1
+ //
2
+ // Copyright 2023 gRPC authors.
3
+ //
4
+ // Licensed under the Apache License, Version 2.0 (the "License");
5
+ // you may not use this file except in compliance with the License.
6
+ // You may obtain a copy of the License at
7
+ //
8
+ // http://www.apache.org/licenses/LICENSE-2.0
9
+ //
10
+ // Unless required by applicable law or agreed to in writing, software
11
+ // distributed under the License is distributed on an "AS IS" BASIS,
12
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ // See the License for the specific language governing permissions and
14
+ // limitations under the License.
15
+ //
16
+
17
+ #include <grpc/support/port_platform.h>
18
+
19
+ #include "src/core/ext/xds/xds_audit_logger_registry.h"
20
+
21
+ #include <string>
22
+ #include <utility>
23
+
24
+ #include "absl/status/status.h"
25
+ #include "absl/status/statusor.h"
26
+ #include "absl/strings/string_view.h"
27
+ #include "absl/types/optional.h"
28
+ #include "envoy/config/core/v3/extension.upb.h"
29
+ #include "envoy/config/rbac/v3/rbac.upb.h"
30
+
31
+ #include "src/core/ext/xds/xds_common_types.h"
32
+ #include "src/core/lib/gprpp/match.h"
33
+ #include "src/core/lib/gprpp/validation_errors.h"
34
+ #include "src/core/lib/security/authorization/audit_logging.h"
35
+
36
+ namespace grpc_core {
37
+
38
+ namespace {
39
+
40
+ using experimental::AuditLoggerRegistry;
41
+
42
+ class StdoutLoggerConfigFactory : public XdsAuditLoggerRegistry::ConfigFactory {
43
+ public:
44
+ Json::Object ConvertXdsAuditLoggerConfig(
45
+ const XdsResourceType::DecodeContext& /*context*/,
46
+ absl::string_view /*configuration*/,
47
+ ValidationErrors* /*errors*/) override {
48
+ // Stdout logger has no configuration right now. So we don't process the
49
+ // config protobuf.
50
+ return {};
51
+ }
52
+
53
+ absl::string_view type() override { return Type(); }
54
+ absl::string_view name() override { return "stdout_logger"; }
55
+
56
+ static absl::string_view Type() {
57
+ return "envoy.extensions.rbac.audit_loggers.stream.v3.StdoutAuditLog";
58
+ }
59
+ };
60
+
61
+ } // namespace
62
+
63
+ XdsAuditLoggerRegistry::XdsAuditLoggerRegistry() {
64
+ audit_logger_config_factories_.emplace(
65
+ StdoutLoggerConfigFactory::Type(),
66
+ std::make_unique<StdoutLoggerConfigFactory>());
67
+ }
68
+
69
+ Json XdsAuditLoggerRegistry::ConvertXdsAuditLoggerConfig(
70
+ const XdsResourceType::DecodeContext& context,
71
+ const envoy_config_rbac_v3_RBAC_AuditLoggingOptions_AuditLoggerConfig*
72
+ logger_config,
73
+ ValidationErrors* errors) const {
74
+ const auto* typed_extension_config =
75
+ envoy_config_rbac_v3_RBAC_AuditLoggingOptions_AuditLoggerConfig_audit_logger(
76
+ logger_config);
77
+ ValidationErrors::ScopedField field(errors, ".audit_logger");
78
+ if (typed_extension_config == nullptr) {
79
+ errors->AddError("field not present");
80
+ return Json(); // A null Json object.
81
+ }
82
+ ValidationErrors::ScopedField field2(errors, ".typed_config");
83
+ const auto* typed_config =
84
+ envoy_config_core_v3_TypedExtensionConfig_typed_config(
85
+ typed_extension_config);
86
+ auto extension = ExtractXdsExtension(context, typed_config, errors);
87
+ if (!extension.has_value()) return Json();
88
+ absl::string_view name;
89
+ Json config;
90
+ Match(
91
+ extension->value,
92
+ // Built-in logger types.
93
+ [&](absl::string_view serialized_value) {
94
+ auto it = audit_logger_config_factories_.find(extension->type);
95
+ if (it == audit_logger_config_factories_.end()) return;
96
+ name = it->second->name();
97
+ config = Json::FromObject(it->second->ConvertXdsAuditLoggerConfig(
98
+ context, serialized_value, errors));
99
+ },
100
+ // Custom logger types.
101
+ [&](Json json) {
102
+ if (!AuditLoggerRegistry::FactoryExists(extension->type)) return;
103
+ name = extension->type;
104
+ config = json;
105
+ });
106
+ // Config not found in either case if name is empty.
107
+ if (name.empty()) {
108
+ if (!envoy_config_rbac_v3_RBAC_AuditLoggingOptions_AuditLoggerConfig_is_optional(
109
+ logger_config)) {
110
+ errors->AddError("unsupported audit logger type");
111
+ }
112
+ return Json();
113
+ }
114
+ // Validate the converted config.
115
+ auto result = AuditLoggerRegistry::ParseConfig(name, config);
116
+ if (!result.ok()) {
117
+ errors->AddError(result.status().message());
118
+ return Json();
119
+ }
120
+ return Json::FromObject({{std::string(name), std::move(config)}});
121
+ }
122
+ } // namespace grpc_core
@@ -0,0 +1,68 @@
1
+ //
2
+ // Copyright 2023 gRPC authors.
3
+ //
4
+ // Licensed under the Apache License, Version 2.0 (the "License");
5
+ // you may not use this file except in compliance with the License.
6
+ // You may obtain a copy of the License at
7
+ //
8
+ // http://www.apache.org/licenses/LICENSE-2.0
9
+ //
10
+ // Unless required by applicable law or agreed to in writing, software
11
+ // distributed under the License is distributed on an "AS IS" BASIS,
12
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ // See the License for the specific language governing permissions and
14
+ // limitations under the License.
15
+ //
16
+
17
+ #ifndef GRPC_SRC_CORE_EXT_XDS_XDS_AUDIT_LOGGER_REGISTRY_H
18
+ #define GRPC_SRC_CORE_EXT_XDS_XDS_AUDIT_LOGGER_REGISTRY_H
19
+
20
+ #include <grpc/support/port_platform.h>
21
+
22
+ #include <map>
23
+ #include <memory>
24
+
25
+ #include "absl/strings/string_view.h"
26
+ #include "envoy/config/rbac/v3/rbac.upb.h"
27
+
28
+ #include "src/core/ext/xds/xds_resource_type.h"
29
+ #include "src/core/lib/gprpp/validation_errors.h"
30
+ #include "src/core/lib/json/json.h"
31
+
32
+ namespace grpc_core {
33
+
34
+ // A registry that maintains a set of converters that are able to map xDS
35
+ // RBAC audit logger configuration to gRPC's JSON format.
36
+ class XdsAuditLoggerRegistry {
37
+ public:
38
+ class ConfigFactory {
39
+ public:
40
+ virtual ~ConfigFactory() = default;
41
+ virtual Json::Object ConvertXdsAuditLoggerConfig(
42
+ const XdsResourceType::DecodeContext& context,
43
+ absl::string_view configuration, ValidationErrors* errors) = 0;
44
+ // The full proto message name for the logger config.
45
+ virtual absl::string_view type() = 0;
46
+ // The logger name used for the gRPC registry.
47
+ virtual absl::string_view name() = 0;
48
+ };
49
+
50
+ XdsAuditLoggerRegistry();
51
+
52
+ Json ConvertXdsAuditLoggerConfig(
53
+ const XdsResourceType::DecodeContext& context,
54
+ const envoy_config_rbac_v3_RBAC_AuditLoggingOptions_AuditLoggerConfig*
55
+ logger_config,
56
+ ValidationErrors* errors) const;
57
+
58
+ private:
59
+ // A map of config factories that goes from the type of the audit logging
60
+ // config to the config factory.
61
+ std::map<absl::string_view /* Owned by ConfigFactory */,
62
+ std::unique_ptr<ConfigFactory>>
63
+ audit_logger_config_factories_;
64
+ };
65
+
66
+ } // namespace grpc_core
67
+
68
+ #endif // GRPC_SRC_CORE_EXT_XDS_XDS_AUDIT_LOGGER_REGISTRY_H
@@ -35,6 +35,8 @@
35
35
  #include "absl/strings/string_view.h"
36
36
  #include "absl/types/optional.h"
37
37
 
38
+ #include <grpc/support/json.h>
39
+
38
40
  #include "src/core/lib/config/core_configuration.h"
39
41
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
40
42
  #include "src/core/lib/json/json.h"
@@ -139,7 +141,7 @@ void GrpcXdsBootstrap::GrpcXdsServer::JsonPostLoad(const Json& json,
139
141
  CoreConfiguration::Get().channel_creds_registry().IsSupported(
140
142
  creds.type)) {
141
143
  if (!CoreConfiguration::Get().channel_creds_registry().IsValidConfig(
142
- creds.type, creds.config)) {
144
+ creds.type, Json::FromObject(creds.config))) {
143
145
  errors->AddError(absl::StrCat(
144
146
  "invalid config for channel creds type \"", creds.type, "\""));
145
147
  continue;
@@ -173,22 +175,25 @@ void GrpcXdsBootstrap::GrpcXdsServer::JsonPostLoad(const Json& json,
173
175
  }
174
176
 
175
177
  Json GrpcXdsBootstrap::GrpcXdsServer::ToJson() const {
176
- Json::Object channel_creds_json{{"type", channel_creds_.type}};
178
+ Json::Object channel_creds_json{
179
+ {"type", Json::FromString(channel_creds_.type)},
180
+ };
177
181
  if (!channel_creds_.config.empty()) {
178
- channel_creds_json["config"] = channel_creds_.config;
182
+ channel_creds_json["config"] = Json::FromObject(channel_creds_.config);
179
183
  }
180
184
  Json::Object json{
181
- {"server_uri", server_uri_},
182
- {"channel_creds", Json::Array{std::move(channel_creds_json)}},
185
+ {"server_uri", Json::FromString(server_uri_)},
186
+ {"channel_creds",
187
+ Json::FromArray({Json::FromObject(std::move(channel_creds_json))})},
183
188
  };
184
189
  if (!server_features_.empty()) {
185
190
  Json::Array server_features_json;
186
191
  for (auto& feature : server_features_) {
187
- server_features_json.emplace_back(feature);
192
+ server_features_json.emplace_back(Json::FromString(feature));
188
193
  }
189
- json["server_features"] = std::move(server_features_json);
194
+ json["server_features"] = Json::FromArray(std::move(server_features_json));
190
195
  }
191
- return json;
196
+ return Json::FromObject(std::move(json));
192
197
  }
193
198
 
194
199
  //
@@ -254,6 +259,13 @@ const JsonLoaderInterface* GrpcXdsBootstrap::JsonLoader(const JsonArgs&) {
254
259
  void GrpcXdsBootstrap::JsonPostLoad(const Json& /*json*/,
255
260
  const JsonArgs& /*args*/,
256
261
  ValidationErrors* errors) {
262
+ // Verify that there is at least one server present.
263
+ {
264
+ ValidationErrors::ScopedField field(errors, ".xds_servers");
265
+ if (servers_.empty() && !errors->FieldHasErrors()) {
266
+ errors->AddError("must be non-empty");
267
+ }
268
+ }
257
269
  // Verify that each authority has the right prefix in the
258
270
  // client_listener_resource_name_template field.
259
271
  {
@@ -292,7 +304,7 @@ std::string GrpcXdsBootstrap::ToString() const {
292
304
  "},\n",
293
305
  node_->id(), node_->cluster(), node_->locality_region(),
294
306
  node_->locality_zone(), node_->locality_sub_zone(),
295
- JsonDump(Json{node_->metadata()})));
307
+ JsonDump(Json::FromObject(node_->metadata()))));
296
308
  }
297
309
  parts.push_back(
298
310
  absl::StrFormat("servers=[\n%s\n],\n", JsonDump(servers_[0].ToJson())));
@@ -30,6 +30,7 @@
30
30
  #include "absl/types/optional.h"
31
31
 
32
32
  #include "src/core/ext/xds/certificate_provider_store.h"
33
+ #include "src/core/ext/xds/xds_audit_logger_registry.h"
33
34
  #include "src/core/ext/xds/xds_bootstrap.h"
34
35
  #include "src/core/ext/xds/xds_cluster_specifier_plugin.h"
35
36
  #include "src/core/ext/xds/xds_http_filters.h"
@@ -161,6 +162,9 @@ class GrpcXdsBootstrap : public XdsBootstrap {
161
162
  const XdsLbPolicyRegistry& lb_policy_registry() const {
162
163
  return lb_policy_registry_;
163
164
  }
165
+ const XdsAuditLoggerRegistry& audit_logger_registry() const {
166
+ return audit_logger_registry_;
167
+ }
164
168
 
165
169
  // Exposed for testing purposes only.
166
170
  const std::map<std::string, GrpcAuthority>& authorities() const {
@@ -177,6 +181,7 @@ class GrpcXdsBootstrap : public XdsBootstrap {
177
181
  XdsHttpFilterRegistry http_filter_registry_;
178
182
  XdsClusterSpecifierPluginRegistry cluster_specifier_plugin_registry_;
179
183
  XdsLbPolicyRegistry lb_policy_registry_;
184
+ XdsAuditLoggerRegistry audit_logger_registry_;
180
185
  };
181
186
 
182
187
  } // namespace grpc_core
@@ -152,7 +152,8 @@ class XdsClient::ChannelState::AdsCallState
152
152
  absl::string_view serialized_resource) override
153
153
  ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
154
154
 
155
- void ResourceWrapperParsingFailed(size_t idx) override;
155
+ void ResourceWrapperParsingFailed(size_t idx,
156
+ absl::string_view message) override;
156
157
 
157
158
  Result TakeResult() { return std::move(result_); }
158
159
 
@@ -878,9 +879,9 @@ void XdsClient::ChannelState::AdsCallState::AdsResponseParser::ParseResource(
878
879
  }
879
880
 
880
881
  void XdsClient::ChannelState::AdsCallState::AdsResponseParser::
881
- ResourceWrapperParsingFailed(size_t idx) {
882
- result_.errors.emplace_back(absl::StrCat(
883
- "resource index ", idx, ": Can't decode Resource proto wrapper"));
882
+ ResourceWrapperParsingFailed(size_t idx, absl::string_view message) {
883
+ result_.errors.emplace_back(
884
+ absl::StrCat("resource index ", idx, ": ", message));
884
885
  }
885
886
 
886
887
  //
@@ -239,7 +239,7 @@ class XdsClusterLocalityStats : public RefCounted<XdsClusterLocalityStats> {
239
239
  absl::string_view cluster_name_;
240
240
  absl::string_view eds_service_name_;
241
241
  RefCountedPtr<XdsLocalityName> name_;
242
- PerCpu<Stats> stats_{32};
242
+ PerCpu<Stats> stats_{PerCpuOptions().SetMaxShards(32).SetCpusPerShard(4)};
243
243
  };
244
244
 
245
245
  } // namespace grpc_core
@@ -46,6 +46,7 @@
46
46
  #include "upb/base/string_view.h"
47
47
  #include "upb/text/encode.h"
48
48
 
49
+ #include <grpc/support/json.h>
49
50
  #include <grpc/support/log.h>
50
51
 
51
52
  #include "src/core/ext/xds/upb_utils.h"
@@ -102,8 +103,8 @@ std::string XdsClusterResource::ToString() const {
102
103
  "prioritized_cluster_names=[",
103
104
  absl::StrJoin(aggregate.prioritized_cluster_names, ", "), "]"));
104
105
  });
105
- contents.push_back(
106
- absl::StrCat("lb_policy_config=", JsonDump(Json{lb_policy_config})));
106
+ contents.push_back(absl::StrCat("lb_policy_config=",
107
+ JsonDump(Json::FromArray(lb_policy_config))));
107
108
  if (lrs_load_reporting_server.has_value()) {
108
109
  contents.push_back(absl::StrCat("lrs_load_reporting_server_name=",
109
110
  lrs_load_reporting_server->server_uri()));
@@ -329,7 +330,8 @@ void ParseLbPolicyConfig(const XdsResourceType::DecodeContext& context,
329
330
  if (original_error_count == errors->size()) {
330
331
  auto config = CoreConfiguration::Get()
331
332
  .lb_policy_registry()
332
- .ParseLoadBalancingConfig(cds_update->lb_policy_config);
333
+ .ParseLoadBalancingConfig(
334
+ Json::FromArray(cds_update->lb_policy_config));
333
335
  if (!config.ok()) errors->AddError(config.status().message());
334
336
  }
335
337
  return;
@@ -339,17 +341,16 @@ void ParseLbPolicyConfig(const XdsResourceType::DecodeContext& context,
339
341
  if (envoy_config_cluster_v3_Cluster_lb_policy(cluster) ==
340
342
  envoy_config_cluster_v3_Cluster_ROUND_ROBIN) {
341
343
  cds_update->lb_policy_config = {
342
- Json::Object{
344
+ Json::FromObject({
343
345
  {"xds_wrr_locality_experimental",
344
- Json::Object{
345
- {"childPolicy",
346
- Json::Array{
347
- Json::Object{
348
- {"round_robin", Json::Object()},
349
- },
350
- }},
351
- }},
352
- },
346
+ Json::FromObject({
347
+ {"childPolicy", Json::FromArray({
348
+ Json::FromObject({
349
+ {"round_robin", Json::FromObject({})},
350
+ }),
351
+ })},
352
+ })},
353
+ }),
353
354
  };
354
355
  } else if (envoy_config_cluster_v3_Cluster_lb_policy(cluster) ==
355
356
  envoy_config_cluster_v3_Cluster_RING_HASH) {
@@ -391,13 +392,13 @@ void ParseLbPolicyConfig(const XdsResourceType::DecodeContext& context,
391
392
  }
392
393
  }
393
394
  cds_update->lb_policy_config = {
394
- Json::Object{
395
+ Json::FromObject({
395
396
  {"ring_hash_experimental",
396
- Json::Object{
397
- {"minRingSize", min_ring_size},
398
- {"maxRingSize", max_ring_size},
399
- }},
400
- },
397
+ Json::FromObject({
398
+ {"minRingSize", Json::FromNumber(min_ring_size)},
399
+ {"maxRingSize", Json::FromNumber(max_ring_size)},
400
+ })},
401
+ }),
401
402
  };
402
403
  } else {
403
404
  ValidationErrors::ScopedField field(errors, ".lb_policy");
@@ -30,6 +30,7 @@
30
30
  #include "upb/json/encode.h"
31
31
  #include "upb/upb.hpp"
32
32
 
33
+ #include <grpc/support/json.h>
33
34
  #include <grpc/support/log.h>
34
35
 
35
36
  #include "src/core/lib/json/json.h"
@@ -91,14 +92,16 @@ Json XdsRouteLookupClusterSpecifierPlugin::GenerateLoadBalancingPolicyConfig(
91
92
  reinterpret_cast<char*>(buf), json_size + 1, status.ptr());
92
93
  auto json = JsonParse(reinterpret_cast<char*>(buf));
93
94
  GPR_ASSERT(json.ok());
94
- return Json::Array{Json::Object{
95
- {"rls_experimental",
96
- Json::Object{
97
- {"routeLookupConfig", std::move(*json)},
98
- {"childPolicy",
99
- Json::Array{Json::Object{{"cds_experimental", Json::Object()}}}},
100
- {"childPolicyConfigTargetFieldName", "cluster"},
101
- }}}};
95
+ return Json::FromArray({Json::FromObject(
96
+ {{"rls_experimental",
97
+ Json::FromObject({
98
+ {"routeLookupConfig", std::move(*json)},
99
+ {"childPolicy",
100
+ Json::FromArray({
101
+ Json::FromObject({{"cds_experimental", Json::FromObject({})}}),
102
+ })},
103
+ {"childPolicyConfigTargetFieldName", Json::FromString("cluster")},
104
+ })}})});
102
105
  }
103
106
 
104
107
  //