grpc 1.55.0 → 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 (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 +50 -14
  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
@@ -22,12 +22,14 @@
22
22
 
23
23
  #include <algorithm>
24
24
  #include <atomic>
25
+ #include <cstdint>
25
26
 
26
27
  #include "absl/status/statusor.h"
27
28
  #include "absl/strings/escaping.h"
29
+ #include "absl/strings/str_cat.h"
28
30
  #include "absl/strings/strip.h"
29
31
 
30
- #include <grpc/support/cpu.h>
32
+ #include <grpc/support/json.h>
31
33
  #include <grpc/support/log.h>
32
34
  #include <grpc/support/time.h>
33
35
 
@@ -37,7 +39,6 @@
37
39
  #include "src/core/lib/channel/channelz_registry.h"
38
40
  #include "src/core/lib/gpr/string.h"
39
41
  #include "src/core/lib/gpr/useful.h"
40
- #include "src/core/lib/iomgr/exec_ctx.h"
41
42
  #include "src/core/lib/iomgr/resolved_address.h"
42
43
  #include "src/core/lib/json/json_writer.h"
43
44
  #include "src/core/lib/transport/connectivity_state.h"
@@ -67,66 +68,87 @@ std::string BaseNode::RenderJsonString() {
67
68
  // CallCountingHelper
68
69
  //
69
70
 
70
- CallCountingHelper::CallCountingHelper() {
71
- num_cores_ = std::max(1u, gpr_cpu_num_cores());
72
- per_cpu_counter_data_storage_.reserve(num_cores_);
73
- for (size_t i = 0; i < num_cores_; ++i) {
74
- per_cpu_counter_data_storage_.emplace_back();
71
+ void CallCountingHelper::RecordCallStarted() {
72
+ calls_started_.fetch_add(1, std::memory_order_relaxed);
73
+ last_call_started_cycle_.store(gpr_get_cycle_counter(),
74
+ std::memory_order_relaxed);
75
+ }
76
+
77
+ void CallCountingHelper::RecordCallFailed() {
78
+ calls_failed_.fetch_add(1, std::memory_order_relaxed);
79
+ }
80
+
81
+ void CallCountingHelper::RecordCallSucceeded() {
82
+ calls_succeeded_.fetch_add(1, std::memory_order_relaxed);
83
+ }
84
+
85
+ void CallCountingHelper::PopulateCallCounts(Json::Object* json) {
86
+ auto calls_started = calls_started_.load(std::memory_order_relaxed);
87
+ auto calls_succeeded = calls_succeeded_.load(std::memory_order_relaxed);
88
+ auto calls_failed = calls_failed_.load(std::memory_order_relaxed);
89
+ auto last_call_started_cycle =
90
+ last_call_started_cycle_.load(std::memory_order_relaxed);
91
+ if (calls_started != 0) {
92
+ (*json)["callsStarted"] = Json::FromString(absl::StrCat(calls_started));
93
+ gpr_timespec ts = gpr_convert_clock_type(
94
+ gpr_cycle_counter_to_time(last_call_started_cycle), GPR_CLOCK_REALTIME);
95
+ (*json)["lastCallStartedTimestamp"] =
96
+ Json::FromString(gpr_format_timespec(ts));
97
+ }
98
+ if (calls_succeeded != 0) {
99
+ (*json)["callsSucceeded"] = Json::FromString(absl::StrCat(calls_succeeded));
100
+ }
101
+ if (calls_failed != 0) {
102
+ (*json)["callsFailed"] = Json::FromString(absl::StrCat(calls_failed));
75
103
  }
76
104
  }
77
105
 
78
- void CallCountingHelper::RecordCallStarted() {
79
- AtomicCounterData& data =
80
- per_cpu_counter_data_storage_[ExecCtx::Get()->starting_cpu()];
106
+ //
107
+ // PerCpuCallCountingHelper
108
+ //
109
+
110
+ void PerCpuCallCountingHelper::RecordCallStarted() {
111
+ auto& data = per_cpu_data_.this_cpu();
81
112
  data.calls_started.fetch_add(1, std::memory_order_relaxed);
82
113
  data.last_call_started_cycle.store(gpr_get_cycle_counter(),
83
114
  std::memory_order_relaxed);
84
115
  }
85
116
 
86
- void CallCountingHelper::RecordCallFailed() {
87
- per_cpu_counter_data_storage_[ExecCtx::Get()->starting_cpu()]
88
- .calls_failed.fetch_add(1, std::memory_order_relaxed);
117
+ void PerCpuCallCountingHelper::RecordCallFailed() {
118
+ per_cpu_data_.this_cpu().calls_failed.fetch_add(1, std::memory_order_relaxed);
89
119
  }
90
120
 
91
- void CallCountingHelper::RecordCallSucceeded() {
92
- per_cpu_counter_data_storage_[ExecCtx::Get()->starting_cpu()]
93
- .calls_succeeded.fetch_add(1, std::memory_order_relaxed);
94
- }
95
-
96
- void CallCountingHelper::CollectData(CounterData* out) {
97
- for (size_t core = 0; core < num_cores_; ++core) {
98
- AtomicCounterData& data = per_cpu_counter_data_storage_[core];
99
-
100
- out->calls_started += data.calls_started.load(std::memory_order_relaxed);
101
- out->calls_succeeded +=
102
- per_cpu_counter_data_storage_[core].calls_succeeded.load(
103
- std::memory_order_relaxed);
104
- out->calls_failed += per_cpu_counter_data_storage_[core].calls_failed.load(
105
- std::memory_order_relaxed);
106
- const gpr_cycle_counter last_call =
107
- per_cpu_counter_data_storage_[core].last_call_started_cycle.load(
108
- std::memory_order_relaxed);
109
- if (last_call > out->last_call_started_cycle) {
110
- out->last_call_started_cycle = last_call;
111
- }
112
- }
121
+ void PerCpuCallCountingHelper::RecordCallSucceeded() {
122
+ per_cpu_data_.this_cpu().calls_succeeded.fetch_add(1,
123
+ std::memory_order_relaxed);
113
124
  }
114
125
 
115
- void CallCountingHelper::PopulateCallCounts(Json::Object* json) {
116
- CounterData data;
117
- CollectData(&data);
118
- if (data.calls_started != 0) {
119
- (*json)["callsStarted"] = std::to_string(data.calls_started);
126
+ void PerCpuCallCountingHelper::PopulateCallCounts(Json::Object* json) {
127
+ int64_t calls_started = 0;
128
+ int64_t calls_succeeded = 0;
129
+ int64_t calls_failed = 0;
130
+ gpr_cycle_counter last_call_started_cycle = 0;
131
+ for (const auto& cpu : per_cpu_data_) {
132
+ calls_started += cpu.calls_started.load(std::memory_order_relaxed);
133
+ calls_succeeded += cpu.calls_succeeded.load(std::memory_order_relaxed);
134
+ calls_failed += cpu.calls_failed.load(std::memory_order_relaxed);
135
+ last_call_started_cycle =
136
+ std::max(last_call_started_cycle,
137
+ cpu.last_call_started_cycle.load(std::memory_order_relaxed));
138
+ }
139
+
140
+ if (calls_started != 0) {
141
+ (*json)["callsStarted"] = Json::FromString(absl::StrCat(calls_started));
120
142
  gpr_timespec ts = gpr_convert_clock_type(
121
- gpr_cycle_counter_to_time(data.last_call_started_cycle),
122
- GPR_CLOCK_REALTIME);
123
- (*json)["lastCallStartedTimestamp"] = gpr_format_timespec(ts);
143
+ gpr_cycle_counter_to_time(last_call_started_cycle), GPR_CLOCK_REALTIME);
144
+ (*json)["lastCallStartedTimestamp"] =
145
+ Json::FromString(gpr_format_timespec(ts));
124
146
  }
125
- if (data.calls_succeeded != 0) {
126
- (*json)["callsSucceeded"] = std::to_string(data.calls_succeeded);
147
+ if (calls_succeeded != 0) {
148
+ (*json)["callsSucceeded"] = Json::FromString(absl::StrCat(calls_succeeded));
127
149
  }
128
- if (data.calls_failed) {
129
- (*json)["callsFailed"] = std::to_string(data.calls_failed);
150
+ if (calls_failed != 0) {
151
+ (*json)["callsFailed"] = Json::FromString(absl::StrCat(calls_failed));
130
152
  }
131
153
  }
132
154
 
@@ -161,7 +183,7 @@ const char* ChannelNode::GetChannelConnectivityStateChangeString(
161
183
 
162
184
  Json ChannelNode::RenderJson() {
163
185
  Json::Object data = {
164
- {"target", target_},
186
+ {"target", Json::FromString(target_)},
165
187
  };
166
188
  // Connectivity state.
167
189
  // If low-order bit is on, then the field is set.
@@ -169,9 +191,9 @@ Json ChannelNode::RenderJson() {
169
191
  if ((state_field & 1) != 0) {
170
192
  grpc_connectivity_state state =
171
193
  static_cast<grpc_connectivity_state>(state_field >> 1);
172
- data["state"] = Json::Object{
173
- {"state", ConnectivityStateName(state)},
174
- };
194
+ data["state"] = Json::FromObject({
195
+ {"state", Json::FromString(ConnectivityStateName(state))},
196
+ });
175
197
  }
176
198
  // Fill in the channel trace if applicable.
177
199
  Json trace_json = trace_.RenderJson();
@@ -182,16 +204,15 @@ Json ChannelNode::RenderJson() {
182
204
  call_counter_.PopulateCallCounts(&data);
183
205
  // Construct outer object.
184
206
  Json::Object json = {
185
- {"ref",
186
- Json::Object{
187
- {"channelId", std::to_string(uuid())},
188
- }},
189
- {"data", std::move(data)},
207
+ {"ref", Json::FromObject({
208
+ {"channelId", Json::FromString(absl::StrCat(uuid()))},
209
+ })},
210
+ {"data", Json::FromObject(std::move(data))},
190
211
  };
191
212
  // Template method. Child classes may override this to add their specific
192
213
  // functionality.
193
214
  PopulateChildRefs(&json);
194
- return json;
215
+ return Json::FromObject(std::move(json));
195
216
  }
196
217
 
197
218
  void ChannelNode::PopulateChildRefs(Json::Object* json) {
@@ -199,20 +220,20 @@ void ChannelNode::PopulateChildRefs(Json::Object* json) {
199
220
  if (!child_subchannels_.empty()) {
200
221
  Json::Array array;
201
222
  for (intptr_t subchannel_uuid : child_subchannels_) {
202
- array.emplace_back(Json::Object{
203
- {"subchannelId", std::to_string(subchannel_uuid)},
204
- });
223
+ array.emplace_back(Json::FromObject({
224
+ {"subchannelId", Json::FromString(absl::StrCat(subchannel_uuid))},
225
+ }));
205
226
  }
206
- (*json)["subchannelRef"] = std::move(array);
227
+ (*json)["subchannelRef"] = Json::FromArray(std::move(array));
207
228
  }
208
229
  if (!child_channels_.empty()) {
209
230
  Json::Array array;
210
231
  for (intptr_t channel_uuid : child_channels_) {
211
- array.emplace_back(Json::Object{
212
- {"channelId", std::to_string(channel_uuid)},
213
- });
232
+ array.emplace_back(Json::FromObject({
233
+ {"channelId", Json::FromString(absl::StrCat(channel_uuid))},
234
+ }));
214
235
  }
215
- (*json)["channelRef"] = std::move(array);
236
+ (*json)["channelRef"] = Json::FromArray(std::move(array));
216
237
  }
217
238
  }
218
239
 
@@ -286,16 +307,17 @@ std::string ServerNode::RenderServerSockets(intptr_t start_socket_id,
286
307
  auto it = child_sockets_.lower_bound(start_socket_id);
287
308
  for (; it != child_sockets_.end() && sockets_rendered < pagination_limit;
288
309
  ++it, ++sockets_rendered) {
289
- array.emplace_back(Json::Object{
290
- {"socketId", std::to_string(it->first)},
291
- {"name", it->second->name()},
292
- });
310
+ array.emplace_back(Json::FromObject({
311
+ {"socketId", Json::FromString(absl::StrCat(it->first))},
312
+ {"name", Json::FromString(it->second->name())},
313
+ }));
314
+ }
315
+ object["socketRef"] = Json::FromArray(std::move(array));
316
+ if (it == child_sockets_.end()) {
317
+ object["end"] = Json::FromBool(true);
293
318
  }
294
- object["socketRef"] = std::move(array);
295
- if (it == child_sockets_.end()) object["end"] = true;
296
319
  }
297
- Json json = std::move(object);
298
- return JsonDump(json);
320
+ return JsonDump(Json::FromObject(std::move(object)));
299
321
  }
300
322
 
301
323
  Json ServerNode::RenderJson() {
@@ -309,11 +331,10 @@ Json ServerNode::RenderJson() {
309
331
  call_counter_.PopulateCallCounts(&data);
310
332
  // Construct top-level object.
311
333
  Json::Object object = {
312
- {"ref",
313
- Json::Object{
314
- {"serverId", std::to_string(uuid())},
315
- }},
316
- {"data", std::move(data)},
334
+ {"ref", Json::FromObject({
335
+ {"serverId", Json::FromString(absl::StrCat(uuid()))},
336
+ })},
337
+ {"data", Json::FromObject(std::move(data))},
317
338
  };
318
339
  // Render listen sockets.
319
340
  {
@@ -321,15 +342,15 @@ Json ServerNode::RenderJson() {
321
342
  if (!child_listen_sockets_.empty()) {
322
343
  Json::Array array;
323
344
  for (const auto& it : child_listen_sockets_) {
324
- array.emplace_back(Json::Object{
325
- {"socketId", std::to_string(it.first)},
326
- {"name", it.second->name()},
327
- });
345
+ array.emplace_back(Json::FromObject({
346
+ {"socketId", Json::FromString(absl::StrCat(it.first))},
347
+ {"name", Json::FromString(it.second->name())},
348
+ }));
328
349
  }
329
- object["listenSocket"] = std::move(array);
350
+ object["listenSocket"] = Json::FromArray(std::move(array));
330
351
  }
331
352
  }
332
- return object;
353
+ return Json::FromObject(std::move(object));
333
354
  }
334
355
 
335
356
  //
@@ -339,17 +360,19 @@ Json ServerNode::RenderJson() {
339
360
  Json SocketNode::Security::Tls::RenderJson() {
340
361
  Json::Object data;
341
362
  if (type == NameType::kStandardName) {
342
- data["standard_name"] = name;
363
+ data["standard_name"] = Json::FromString(name);
343
364
  } else if (type == NameType::kOtherName) {
344
- data["other_name"] = name;
365
+ data["other_name"] = Json::FromString(name);
345
366
  }
346
367
  if (!local_certificate.empty()) {
347
- data["local_certificate"] = absl::Base64Escape(local_certificate);
368
+ data["local_certificate"] =
369
+ Json::FromString(absl::Base64Escape(local_certificate));
348
370
  }
349
371
  if (!remote_certificate.empty()) {
350
- data["remote_certificate"] = absl::Base64Escape(remote_certificate);
372
+ data["remote_certificate"] =
373
+ Json::FromString(absl::Base64Escape(remote_certificate));
351
374
  }
352
- return data;
375
+ return Json::FromObject(std::move(data));
353
376
  }
354
377
 
355
378
  //
@@ -367,12 +390,12 @@ Json SocketNode::Security::RenderJson() {
367
390
  }
368
391
  break;
369
392
  case ModelType::kOther:
370
- if (other) {
393
+ if (other.has_value()) {
371
394
  data["other"] = *other;
372
395
  }
373
396
  break;
374
397
  }
375
- return data;
398
+ return Json::FromObject(std::move(data));
376
399
  }
377
400
 
378
401
  namespace {
@@ -424,32 +447,32 @@ void PopulateSocketAddressJson(Json::Object* json, const char* name,
424
447
  auto address = StringToSockaddr(absl::StripPrefix(uri->path(), "/"));
425
448
  if (address.ok()) {
426
449
  std::string packed_host = grpc_sockaddr_get_packed_host(&*address);
427
- (*json)[name] = Json::Object{
450
+ (*json)[name] = Json::FromObject({
428
451
  {"tcpip_address",
429
- Json::Object{
430
- {"port", grpc_sockaddr_get_port(&*address)},
431
- {"ip_address", absl::Base64Escape(packed_host)},
432
- }},
433
- };
452
+ Json::FromObject({
453
+ {"port", Json::FromString(
454
+ absl::StrCat(grpc_sockaddr_get_port(&*address)))},
455
+ {"ip_address",
456
+ Json::FromString(absl::Base64Escape(packed_host))},
457
+ })},
458
+ });
434
459
  return;
435
460
  }
436
461
  } else if (uri->scheme() == "unix") {
437
- (*json)[name] = Json::Object{
438
- {"uds_address",
439
- Json::Object{
440
- {"filename", uri->path()},
441
- }},
442
- };
462
+ (*json)[name] = Json::FromObject({
463
+ {"uds_address", Json::FromObject({
464
+ {"filename", Json::FromString(uri->path())},
465
+ })},
466
+ });
443
467
  return;
444
468
  }
445
469
  }
446
470
  // Unknown address type.
447
- (*json)[name] = Json::Object{
448
- {"other_address",
449
- Json::Object{
450
- {"name", addr_str},
451
- }},
452
- };
471
+ (*json)[name] = Json::FromObject({
472
+ {"other_address", Json::FromObject({
473
+ {"name", Json::FromString(addr_str)},
474
+ })},
475
+ });
453
476
  }
454
477
 
455
478
  } // namespace
@@ -491,14 +514,15 @@ Json SocketNode::RenderJson() {
491
514
  gpr_timespec ts;
492
515
  int64_t streams_started = streams_started_.load(std::memory_order_relaxed);
493
516
  if (streams_started != 0) {
494
- data["streamsStarted"] = std::to_string(streams_started);
517
+ data["streamsStarted"] = Json::FromString(absl::StrCat(streams_started));
495
518
  gpr_cycle_counter last_local_stream_created_cycle =
496
519
  last_local_stream_created_cycle_.load(std::memory_order_relaxed);
497
520
  if (last_local_stream_created_cycle != 0) {
498
521
  ts = gpr_convert_clock_type(
499
522
  gpr_cycle_counter_to_time(last_local_stream_created_cycle),
500
523
  GPR_CLOCK_REALTIME);
501
- data["lastLocalStreamCreatedTimestamp"] = gpr_format_timespec(ts);
524
+ data["lastLocalStreamCreatedTimestamp"] =
525
+ Json::FromString(gpr_format_timespec(ts));
502
526
  }
503
527
  gpr_cycle_counter last_remote_stream_created_cycle =
504
528
  last_remote_stream_created_cycle_.load(std::memory_order_relaxed);
@@ -506,49 +530,53 @@ Json SocketNode::RenderJson() {
506
530
  ts = gpr_convert_clock_type(
507
531
  gpr_cycle_counter_to_time(last_remote_stream_created_cycle),
508
532
  GPR_CLOCK_REALTIME);
509
- data["lastRemoteStreamCreatedTimestamp"] = gpr_format_timespec(ts);
533
+ data["lastRemoteStreamCreatedTimestamp"] =
534
+ Json::FromString(gpr_format_timespec(ts));
510
535
  }
511
536
  }
512
537
  int64_t streams_succeeded =
513
538
  streams_succeeded_.load(std::memory_order_relaxed);
514
539
  if (streams_succeeded != 0) {
515
- data["streamsSucceeded"] = std::to_string(streams_succeeded);
540
+ data["streamsSucceeded"] =
541
+ Json::FromString(absl::StrCat(streams_succeeded));
516
542
  }
517
543
  int64_t streams_failed = streams_failed_.load(std::memory_order_relaxed);
518
544
  if (streams_failed != 0) {
519
- data["streamsFailed"] = std::to_string(streams_failed);
545
+ data["streamsFailed"] = Json::FromString(absl::StrCat(streams_failed));
520
546
  }
521
547
  int64_t messages_sent = messages_sent_.load(std::memory_order_relaxed);
522
548
  if (messages_sent != 0) {
523
- data["messagesSent"] = std::to_string(messages_sent);
549
+ data["messagesSent"] = Json::FromString(absl::StrCat(messages_sent));
524
550
  ts = gpr_convert_clock_type(
525
551
  gpr_cycle_counter_to_time(
526
552
  last_message_sent_cycle_.load(std::memory_order_relaxed)),
527
553
  GPR_CLOCK_REALTIME);
528
- data["lastMessageSentTimestamp"] = gpr_format_timespec(ts);
554
+ data["lastMessageSentTimestamp"] =
555
+ Json::FromString(gpr_format_timespec(ts));
529
556
  }
530
557
  int64_t messages_received =
531
558
  messages_received_.load(std::memory_order_relaxed);
532
559
  if (messages_received != 0) {
533
- data["messagesReceived"] = std::to_string(messages_received);
560
+ data["messagesReceived"] =
561
+ Json::FromString(absl::StrCat(messages_received));
534
562
  ts = gpr_convert_clock_type(
535
563
  gpr_cycle_counter_to_time(
536
564
  last_message_received_cycle_.load(std::memory_order_relaxed)),
537
565
  GPR_CLOCK_REALTIME);
538
- data["lastMessageReceivedTimestamp"] = gpr_format_timespec(ts);
566
+ data["lastMessageReceivedTimestamp"] =
567
+ Json::FromString(gpr_format_timespec(ts));
539
568
  }
540
569
  int64_t keepalives_sent = keepalives_sent_.load(std::memory_order_relaxed);
541
570
  if (keepalives_sent != 0) {
542
- data["keepAlivesSent"] = std::to_string(keepalives_sent);
571
+ data["keepAlivesSent"] = Json::FromString(absl::StrCat(keepalives_sent));
543
572
  }
544
573
  // Create and fill the parent object.
545
574
  Json::Object object = {
546
- {"ref",
547
- Json::Object{
548
- {"socketId", std::to_string(uuid())},
549
- {"name", name()},
550
- }},
551
- {"data", std::move(data)},
575
+ {"ref", Json::FromObject({
576
+ {"socketId", Json::FromString(absl::StrCat(uuid()))},
577
+ {"name", Json::FromString(name())},
578
+ })},
579
+ {"data", Json::FromObject(std::move(data))},
552
580
  };
553
581
  if (security_ != nullptr &&
554
582
  security_->type != SocketNode::Security::ModelType::kUnset) {
@@ -556,7 +584,7 @@ Json SocketNode::RenderJson() {
556
584
  }
557
585
  PopulateSocketAddressJson(&object, "remote", remote_.c_str());
558
586
  PopulateSocketAddressJson(&object, "local", local_.c_str());
559
- return object;
587
+ return Json::FromObject(std::move(object));
560
588
  }
561
589
 
562
590
  //
@@ -569,14 +597,13 @@ ListenSocketNode::ListenSocketNode(std::string local_addr, std::string name)
569
597
 
570
598
  Json ListenSocketNode::RenderJson() {
571
599
  Json::Object object = {
572
- {"ref",
573
- Json::Object{
574
- {"socketId", std::to_string(uuid())},
575
- {"name", name()},
576
- }},
600
+ {"ref", Json::FromObject({
601
+ {"socketId", Json::FromString(absl::StrCat(uuid()))},
602
+ {"name", Json::FromString(name())},
603
+ })},
577
604
  };
578
605
  PopulateSocketAddressJson(&object, "local", local_addr_.c_str());
579
- return object;
606
+ return Json::FromObject(std::move(object));
580
607
  }
581
608
 
582
609
  } // namespace channelz
@@ -29,7 +29,6 @@
29
29
  #include <set>
30
30
  #include <string>
31
31
  #include <utility>
32
- #include <vector>
33
32
 
34
33
  #include "absl/strings/string_view.h"
35
34
  #include "absl/types/optional.h"
@@ -41,6 +40,7 @@
41
40
  #include "src/core/lib/channel/channel_trace.h"
42
41
  #include "src/core/lib/gpr/time_precise.h"
43
42
  #include "src/core/lib/gpr/useful.h"
43
+ #include "src/core/lib/gprpp/per_cpu.h"
44
44
  #include "src/core/lib/gprpp/ref_counted.h"
45
45
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
46
46
  #include "src/core/lib/gprpp/sync.h"
@@ -122,8 +122,6 @@ class BaseNode : public RefCounted<BaseNode> {
122
122
  // - perform rendering of the above items
123
123
  class CallCountingHelper {
124
124
  public:
125
- CallCountingHelper();
126
-
127
125
  void RecordCallStarted();
128
126
  void RecordCallFailed();
129
127
  void RecordCallSucceeded();
@@ -135,44 +133,53 @@ class CallCountingHelper {
135
133
  // testing peer friend.
136
134
  friend class testing::CallCountingHelperPeer;
137
135
 
138
- // TODO(soheil): add a proper PerCPU helper and use it here.
139
- struct AtomicCounterData {
140
- // Define the ctors so that we can use this structure in InlinedVector.
141
- AtomicCounterData() = default;
142
- AtomicCounterData(const AtomicCounterData& that)
143
- : calls_started(that.calls_started.load(std::memory_order_relaxed)),
144
- calls_succeeded(that.calls_succeeded.load(std::memory_order_relaxed)),
145
- calls_failed(that.calls_failed.load(std::memory_order_relaxed)),
146
- last_call_started_cycle(
147
- that.last_call_started_cycle.load(std::memory_order_relaxed)) {}
136
+ std::atomic<int64_t> calls_started_{0};
137
+ std::atomic<int64_t> calls_succeeded_{0};
138
+ std::atomic<int64_t> calls_failed_{0};
139
+ std::atomic<gpr_cycle_counter> last_call_started_cycle_{0};
140
+ };
141
+
142
+ class PerCpuCallCountingHelper {
143
+ public:
144
+ void RecordCallStarted();
145
+ void RecordCallFailed();
146
+ void RecordCallSucceeded();
147
+
148
+ // Common rendering of the call count data and last_call_started_timestamp.
149
+ void PopulateCallCounts(Json::Object* json);
150
+
151
+ private:
152
+ // testing peer friend.
153
+ friend class testing::CallCountingHelperPeer;
148
154
 
155
+ // We want to ensure that this per-cpu data structure lands on different
156
+ // cachelines per cpu.
157
+ // With C++17 we can do so explicitly with an `alignas` specifier.
158
+ // Prior versions we can at best approximate it by padding the structure.
159
+ // It'll probably work out ok, but it's not guaranteed across allocators.
160
+ // (in the bad case where this gets split across cachelines we'll just have
161
+ // two cpus fighting over the same cacheline with a slight performance
162
+ // degregation).
163
+ // TODO(ctiller): When we move to C++17 delete the duplicate definition.
164
+ #if __cplusplus >= 201703L
165
+ struct alignas(GPR_CACHELINE_SIZE) PerCpuData {
149
166
  std::atomic<int64_t> calls_started{0};
150
167
  std::atomic<int64_t> calls_succeeded{0};
151
168
  std::atomic<int64_t> calls_failed{0};
152
169
  std::atomic<gpr_cycle_counter> last_call_started_cycle{0};
153
- // Make sure the size is exactly one cache line.
154
- uint8_t padding[GPR_CACHELINE_SIZE - 3 * sizeof(std::atomic<intptr_t>) -
155
- sizeof(std::atomic<gpr_cycle_counter>)];
156
170
  };
157
- // TODO(soheilhy,veblush): Revist this after abseil integration.
158
- // This has a problem when using abseil inlined_vector because it
159
- // carries an alignment attribute properly but our allocator doesn't
160
- // respect this. To avoid UBSAN errors, this should be removed with
161
- // abseil inlined_vector.
162
- // GPR_ALIGN_STRUCT(GPR_CACHELINE_SIZE);
163
-
164
- struct CounterData {
165
- int64_t calls_started = 0;
166
- int64_t calls_succeeded = 0;
167
- int64_t calls_failed = 0;
168
- gpr_cycle_counter last_call_started_cycle = 0;
171
+ #else
172
+ struct PerCpuDataHeader {
173
+ std::atomic<int64_t> calls_started{0};
174
+ std::atomic<int64_t> calls_succeeded{0};
175
+ std::atomic<int64_t> calls_failed{0};
176
+ std::atomic<gpr_cycle_counter> last_call_started_cycle{0};
169
177
  };
170
-
171
- // collects the sharded data into one CounterData struct.
172
- void CollectData(CounterData* out);
173
-
174
- std::vector<AtomicCounterData> per_cpu_counter_data_storage_;
175
- size_t num_cores_ = 0;
178
+ struct PerCpuData : public PerCpuDataHeader {
179
+ uint8_t padding[GPR_CACHELINE_SIZE - sizeof(PerCpuDataHeader)];
180
+ };
181
+ #endif
182
+ PerCpu<PerCpuData> per_cpu_data_{PerCpuOptions().SetCpusPerShard(4)};
176
183
  };
177
184
 
178
185
  // Handles channelz bookkeeping for channels
@@ -271,7 +278,7 @@ class ServerNode : public BaseNode {
271
278
  void RecordCallSucceeded() { call_counter_.RecordCallSucceeded(); }
272
279
 
273
280
  private:
274
- CallCountingHelper call_counter_;
281
+ PerCpuCallCountingHelper call_counter_;
275
282
  ChannelTrace trace_;
276
283
  Mutex child_mu_; // Guards child maps below.
277
284
  std::map<intptr_t, RefCountedPtr<SocketNode>> child_sockets_;