grpc 1.55.0 → 1.56.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of grpc might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/Makefile +100 -68
- data/include/grpc/event_engine/event_engine.h +4 -3
- data/include/grpc/grpc_audit_logging.h +96 -0
- data/include/grpc/module.modulemap +2 -0
- data/include/grpc/support/json.h +218 -0
- data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +5 -0
- data/src/core/ext/filters/client_channel/backend_metric.cc +2 -0
- data/src/core/ext/filters/client_channel/channel_connectivity.cc +4 -4
- data/src/core/ext/filters/client_channel/client_channel.cc +86 -104
- data/src/core/ext/filters/client_channel/client_channel.h +6 -0
- data/src/core/ext/filters/client_channel/client_channel_channelz.cc +19 -18
- data/src/core/ext/filters/client_channel/client_channel_internal.h +16 -21
- data/src/core/ext/filters/client_channel/config_selector.h +9 -24
- data/src/core/ext/filters/client_channel/lb_policy/backend_metric_data.h +3 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +5 -4
- data/src/core/ext/filters/client_channel/lb_policy/health_check_client.cc +455 -0
- data/src/core/ext/filters/client_channel/lb_policy/health_check_client.h +54 -0
- data/src/core/ext/filters/client_channel/lb_policy/health_check_client_internal.h +186 -0
- data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +2 -7
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +52 -20
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +23 -2
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +19 -6
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +1 -9
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +16 -7
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +18 -1
- data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +12 -9
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +6 -4
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +36 -13
- data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/static_stride_scheduler.cc +76 -6
- data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/weighted_round_robin.cc +32 -39
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +4 -10
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +52 -47
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +1 -9
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +14 -16
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +40 -43
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.cc +7 -12
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_wrr_locality.cc +12 -19
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +35 -33
- data/src/core/ext/filters/client_channel/resolver/dns/event_engine/event_engine_client_channel_resolver.cc +29 -4
- data/src/core/ext/filters/client_channel/resolver/dns/event_engine/service_config_helper.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +28 -27
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +163 -46
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +16 -1
- data/src/core/ext/filters/client_channel/retry_service_config.cc +1 -0
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +10 -40
- data/src/core/ext/filters/client_channel/subchannel.cc +10 -196
- data/src/core/ext/filters/client_channel/subchannel.h +3 -43
- data/src/core/ext/filters/http/message_compress/compression_filter.cc +5 -5
- data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +100 -6
- data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +6 -8
- data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +3 -3
- data/src/core/ext/filters/stateful_session/stateful_session_filter.h +16 -1
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +46 -95
- data/src/core/ext/transport/chttp2/transport/internal.h +1 -15
- data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +11 -2
- data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +15 -0
- data/src/core/ext/xds/certificate_provider_store.cc +4 -9
- data/src/core/ext/xds/certificate_provider_store.h +1 -1
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +30 -42
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +14 -9
- data/src/core/ext/xds/xds_api.cc +9 -6
- data/src/core/ext/xds/xds_api.h +3 -2
- data/src/core/ext/xds/xds_audit_logger_registry.cc +122 -0
- data/src/core/ext/xds/xds_audit_logger_registry.h +68 -0
- data/src/core/ext/xds/xds_bootstrap_grpc.cc +21 -9
- data/src/core/ext/xds/xds_bootstrap_grpc.h +5 -0
- data/src/core/ext/xds/xds_client.cc +5 -4
- data/src/core/ext/xds/xds_client_stats.h +1 -1
- data/src/core/ext/xds/xds_cluster.cc +20 -19
- data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +11 -8
- data/src/core/ext/xds/xds_common_types.cc +3 -1
- data/src/core/ext/xds/xds_http_fault_filter.cc +16 -13
- data/src/core/ext/xds/xds_http_fault_filter.h +2 -1
- data/src/core/ext/xds/xds_http_filters.h +4 -2
- data/src/core/ext/xds/xds_http_rbac_filter.cc +154 -67
- data/src/core/ext/xds/xds_http_rbac_filter.h +2 -1
- data/src/core/ext/xds/xds_http_stateful_session_filter.cc +15 -11
- data/src/core/ext/xds/xds_http_stateful_session_filter.h +2 -1
- data/src/core/ext/xds/xds_lb_policy_registry.cc +22 -16
- data/src/core/ext/xds/xds_listener.cc +1 -0
- data/src/core/ext/xds/xds_route_config.cc +40 -3
- data/src/core/ext/xds/xds_routing.cc +2 -2
- data/src/core/ext/xds/xds_transport_grpc.cc +3 -1
- data/src/core/lib/avl/avl.h +5 -0
- data/src/core/lib/channel/channel_args.cc +80 -22
- data/src/core/lib/channel/channel_args.h +34 -1
- data/src/core/lib/channel/channel_trace.cc +16 -12
- data/src/core/lib/channel/channelz.cc +159 -132
- data/src/core/lib/channel/channelz.h +42 -35
- data/src/core/lib/channel/channelz_registry.cc +23 -20
- data/src/core/lib/channel/connected_channel.cc +17 -6
- data/src/core/lib/channel/promise_based_filter.cc +0 -4
- data/src/core/lib/channel/promise_based_filter.h +2 -0
- data/src/core/lib/compression/compression_internal.cc +2 -5
- data/src/core/lib/config/config_vars.cc +20 -18
- data/src/core/lib/config/config_vars.h +4 -4
- data/src/core/lib/config/load_config.cc +13 -0
- data/src/core/lib/config/load_config.h +6 -0
- data/src/core/lib/debug/event_log.h +1 -1
- data/src/core/lib/debug/stats_data.h +1 -1
- data/src/core/lib/debug/trace.cc +24 -55
- data/src/core/lib/debug/trace.h +3 -1
- data/src/core/lib/event_engine/cf_engine/cf_engine.cc +211 -0
- data/src/core/lib/event_engine/cf_engine/cf_engine.h +86 -0
- data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.cc +354 -0
- data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.h +146 -0
- data/src/core/lib/event_engine/cf_engine/cftype_unique_ref.h +79 -0
- data/src/core/lib/event_engine/default_event_engine.cc +13 -1
- data/src/core/lib/event_engine/default_event_engine_factory.cc +14 -2
- data/src/core/lib/event_engine/poller.h +2 -2
- data/src/core/lib/event_engine/posix.h +4 -0
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +1 -1
- data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +7 -18
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +9 -0
- data/src/core/lib/event_engine/posix_engine/posix_engine.cc +33 -19
- data/src/core/lib/event_engine/posix_engine/posix_engine.h +1 -1
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +4 -4
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener.h +7 -8
- data/src/core/lib/event_engine/posix_engine/timer_manager.h +1 -1
- data/src/core/lib/event_engine/shim.cc +7 -1
- data/src/core/lib/event_engine/{thread_pool.cc → thread_pool/original_thread_pool.cc} +28 -25
- data/src/core/lib/event_engine/{thread_pool.h → thread_pool/original_thread_pool.h} +11 -15
- data/src/core/lib/event_engine/thread_pool/thread_pool.h +50 -0
- data/src/core/lib/event_engine/{executor/executor.h → thread_pool/thread_pool_factory.cc} +17 -15
- data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +489 -0
- data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.h +249 -0
- data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.cc +166 -0
- data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.h +108 -0
- data/src/core/lib/event_engine/windows/iocp.cc +4 -3
- data/src/core/lib/event_engine/windows/iocp.h +3 -3
- data/src/core/lib/event_engine/windows/win_socket.cc +6 -6
- data/src/core/lib/event_engine/windows/win_socket.h +4 -4
- data/src/core/lib/event_engine/windows/windows_endpoint.cc +11 -10
- data/src/core/lib/event_engine/windows/windows_endpoint.h +3 -2
- data/src/core/lib/event_engine/windows/windows_engine.cc +19 -17
- data/src/core/lib/event_engine/windows/windows_engine.h +6 -6
- data/src/core/lib/event_engine/windows/windows_listener.cc +3 -3
- data/src/core/lib/event_engine/windows/windows_listener.h +3 -2
- data/src/core/lib/event_engine/work_queue/basic_work_queue.cc +63 -0
- data/src/core/lib/event_engine/work_queue/basic_work_queue.h +71 -0
- data/src/core/lib/event_engine/work_queue/work_queue.h +62 -0
- data/src/core/lib/experiments/config.cc +38 -7
- data/src/core/lib/experiments/config.h +16 -0
- data/src/core/lib/experiments/experiments.cc +67 -20
- data/src/core/lib/experiments/experiments.h +27 -21
- data/src/core/lib/gpr/log_internal.h +55 -0
- data/src/core/lib/gprpp/crash.cc +10 -0
- data/src/core/lib/gprpp/crash.h +3 -0
- data/src/core/lib/gprpp/per_cpu.cc +33 -0
- data/src/core/lib/gprpp/per_cpu.h +29 -6
- data/src/core/lib/gprpp/time.cc +1 -0
- data/src/core/lib/iomgr/cfstream_handle.cc +1 -1
- data/src/core/lib/iomgr/endpoint_cfstream.cc +10 -8
- data/src/core/lib/iomgr/ev_apple.cc +12 -12
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +10 -3
- data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +15 -1
- data/src/core/lib/iomgr/iocp_windows.cc +24 -3
- data/src/core/lib/iomgr/iocp_windows.h +11 -0
- data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +1 -1
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +4 -2
- data/src/core/lib/iomgr/socket_windows.cc +61 -7
- data/src/core/lib/iomgr/socket_windows.h +9 -2
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +14 -3
- data/src/core/lib/iomgr/tcp_server_posix.cc +148 -107
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +1 -1
- data/src/core/lib/iomgr/tcp_server_windows.cc +1 -1
- data/src/core/lib/json/json.h +2 -166
- data/src/core/lib/json/json_object_loader.cc +8 -9
- data/src/core/lib/json/json_object_loader.h +25 -18
- data/src/core/lib/json/json_reader.cc +13 -6
- data/src/core/lib/json/json_util.cc +6 -11
- data/src/core/lib/json/json_writer.cc +7 -8
- data/src/core/lib/load_balancing/lb_policy.h +13 -0
- data/src/core/lib/load_balancing/lb_policy_registry.cc +2 -1
- data/src/core/lib/matchers/matchers.cc +3 -4
- data/src/core/lib/matchers/matchers.h +2 -1
- data/src/core/lib/promise/activity.cc +5 -0
- data/src/core/lib/promise/activity.h +10 -0
- data/src/core/lib/promise/detail/promise_factory.h +1 -1
- data/src/core/lib/promise/party.cc +31 -13
- data/src/core/lib/promise/party.h +11 -2
- data/src/core/lib/promise/pipe.h +9 -2
- data/src/core/lib/promise/prioritized_race.h +95 -0
- data/src/core/lib/promise/sleep.cc +2 -1
- data/src/core/lib/resolver/server_address.cc +0 -8
- data/src/core/lib/resolver/server_address.h +0 -6
- data/src/core/lib/resource_quota/memory_quota.cc +7 -7
- data/src/core/lib/resource_quota/memory_quota.h +1 -2
- data/src/core/lib/security/authorization/audit_logging.cc +98 -0
- data/src/core/lib/security/authorization/audit_logging.h +73 -0
- data/src/core/lib/security/authorization/grpc_authorization_engine.cc +47 -2
- data/src/core/lib/security/authorization/grpc_authorization_engine.h +18 -1
- data/src/core/lib/security/authorization/rbac_policy.cc +36 -4
- data/src/core/lib/security/authorization/rbac_policy.h +19 -2
- data/src/core/lib/security/authorization/stdout_logger.cc +75 -0
- data/src/core/lib/security/authorization/stdout_logger.h +61 -0
- data/src/core/lib/security/certificate_provider/certificate_provider_factory.h +8 -4
- data/src/core/lib/security/certificate_provider/certificate_provider_registry.cc +8 -18
- data/src/core/lib/security/certificate_provider/certificate_provider_registry.h +14 -8
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +19 -12
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +4 -2
- data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +1 -0
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +1 -0
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +1 -0
- data/src/core/lib/security/credentials/jwt/json_token.cc +15 -14
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +4 -2
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +1 -0
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +1 -0
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +1 -5
- data/src/core/lib/security/util/json_util.cc +1 -0
- data/src/core/lib/service_config/service_config_call_data.h +49 -20
- data/src/core/lib/service_config/service_config_impl.cc +2 -1
- data/src/core/lib/surface/call.cc +38 -23
- data/src/core/lib/surface/completion_queue.cc +6 -2
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/batch_builder.cc +15 -12
- data/src/core/lib/transport/batch_builder.h +39 -35
- data/src/core/plugin_registry/grpc_plugin_registry.cc +0 -2
- data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +2 -0
- data/src/ruby/ext/grpc/extconf.rb +8 -9
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_mbstr.c +9 -8
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/internal.h +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +10 -6
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +7 -4
- data/third_party/boringssl-with-bazel/src/crypto/bio/bio.c +6 -4
- data/third_party/boringssl-with-bazel/src/crypto/bio/fd.c +2 -1
- data/third_party/boringssl-with-bazel/src/crypto/bio/file.c +5 -9
- data/third_party/boringssl-with-bazel/src/crypto/bio/pair.c +4 -2
- data/third_party/boringssl-with-bazel/src/crypto/blake2/blake2.c +31 -22
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_tls.c +29 -26
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h +8 -0
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +189 -13
- data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_openbsd.c +62 -0
- data/third_party/boringssl-with-bazel/src/crypto/cpu_arm_openbsd.c +31 -0
- data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519.c +6 -4
- data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519_tables.h +795 -795
- data/third_party/boringssl-with-bazel/src/crypto/curve25519/internal.h +1 -5
- data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +4 -0
- data/third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c +18 -6
- data/third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h +15 -7
- data/third_party/boringssl-with-bazel/src/crypto/ecdh_extra/ecdh_extra.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/evp/p_rsa.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/dh.c +3 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +24 -24
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_montgomery.c +7 -7
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +74 -74
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/oct.c +1 -2
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c +11 -11
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-nistz.c +12 -12
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.c +14 -15
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256_table.h +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple.c +10 -10
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c +23 -23
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/wnaf.c +13 -13
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdh/ecdh.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/{hkdf → fipsmodule/hkdf}/hkdf.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cbc.c +2 -10
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ctr.c +1 -4
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm.c +115 -133
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm_nohw.c +12 -14
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/internal.h +57 -47
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ofb.c +1 -8
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/polyval.c +27 -28
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +11 -23
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h +21 -16
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/padding.c +5 -288
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +143 -83
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +95 -183
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +71 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/tls/internal.h +8 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/tls/kdf.c +33 -0
- data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +162 -6
- data/third_party/boringssl-with-bazel/src/crypto/internal.h +18 -0
- data/third_party/boringssl-with-bazel/src/crypto/kyber/kyber.c +18 -11
- data/third_party/boringssl-with-bazel/src/crypto/obj/obj_dat.h +6 -13
- data/third_party/boringssl-with-bazel/src/crypto/pem/pem_lib.c +18 -14
- data/third_party/boringssl-with-bazel/src/crypto/{refcount_lock.c → refcount_no_threads.c} +3 -13
- data/third_party/boringssl-with-bazel/src/crypto/refcount_win.c +89 -0
- data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/internal.h +77 -0
- data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/rsa_crypt.c +568 -0
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +62 -0
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +218 -44
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +35 -0
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/voprf.c +588 -39
- data/third_party/boringssl-with-bazel/src/crypto/x509/a_sign.c +27 -18
- data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509/name_print.c +17 -39
- data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c +39 -48
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c +0 -140
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +72 -23
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +11 -14
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509spki.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509a.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_conf.c +33 -46
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_info.c +3 -5
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +14 -46
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +14 -26
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +17 -10
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +5 -7
- data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +6 -4
- data/third_party/boringssl-with-bazel/src/include/openssl/base.h +32 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +0 -4
- data/third_party/boringssl-with-bazel/src/include/openssl/blake2.h +1 -4
- data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +3 -3
- data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +28 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/nid.h +2 -11
- data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +0 -3
- data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +91 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/span.h +5 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +149 -20
- data/third_party/boringssl-with-bazel/src/include/openssl/thread.h +4 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +4 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +8 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +774 -615
- data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +42 -10
- data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +11 -6
- data/third_party/boringssl-with-bazel/src/ssl/extensions.cc +2 -4
- data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +24 -16
- data/third_party/boringssl-with-bazel/src/ssl/internal.h +65 -18
- data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +37 -18
- data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +187 -193
- data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +13 -129
- data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +85 -10
- data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +17 -4
- data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +27 -19
- data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +1 -1
- data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +5 -21
- data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +5 -2
- data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_64_msvc.h +1281 -0
- data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_64_msvc.h +2002 -0
- data/third_party/cares/cares/include/ares.h +23 -1
- data/third_party/cares/cares/{src/lib → include}/ares_nameser.h +9 -7
- data/third_party/cares/cares/include/ares_rules.h +2 -2
- data/third_party/cares/cares/include/ares_version.h +3 -3
- data/third_party/cares/cares/src/lib/ares__addrinfo2hostent.c +266 -0
- data/third_party/cares/cares/src/lib/ares__addrinfo_localhost.c +240 -0
- data/third_party/cares/cares/src/lib/ares__parse_into_addrinfo.c +49 -80
- data/third_party/cares/cares/src/lib/ares__readaddrinfo.c +37 -43
- data/third_party/cares/cares/src/lib/ares__sortaddrinfo.c +12 -4
- data/third_party/cares/cares/src/lib/ares_data.c +16 -0
- data/third_party/cares/cares/src/lib/ares_data.h +7 -0
- data/third_party/cares/cares/src/lib/ares_destroy.c +8 -0
- data/third_party/cares/cares/src/lib/ares_expand_name.c +17 -6
- data/third_party/cares/cares/src/lib/ares_freeaddrinfo.c +1 -0
- data/third_party/cares/cares/src/lib/ares_getaddrinfo.c +156 -78
- data/third_party/cares/cares/src/lib/ares_gethostbyname.c +130 -326
- data/third_party/cares/cares/src/lib/ares_init.c +97 -485
- data/third_party/cares/cares/src/lib/ares_library_init.c +2 -89
- data/third_party/cares/cares/src/lib/ares_parse_a_reply.c +23 -142
- data/third_party/cares/cares/src/lib/ares_parse_aaaa_reply.c +22 -142
- data/third_party/cares/cares/src/lib/ares_parse_uri_reply.c +184 -0
- data/third_party/cares/cares/src/lib/ares_private.h +30 -16
- data/third_party/cares/cares/src/lib/ares_process.c +55 -16
- data/third_party/cares/cares/src/lib/ares_query.c +1 -35
- data/third_party/cares/cares/src/lib/ares_rand.c +279 -0
- data/third_party/cares/cares/src/lib/ares_send.c +5 -7
- data/third_party/cares/cares/src/lib/ares_strdup.c +12 -19
- data/third_party/cares/cares/src/lib/ares_strsplit.c +44 -128
- data/third_party/cares/cares/src/lib/ares_strsplit.h +9 -10
- data/third_party/cares/cares/src/lib/inet_net_pton.c +78 -116
- data/third_party/cares/cares/src/tools/ares_getopt.h +53 -0
- metadata +48 -12
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +0 -175
- data/src/core/ext/filters/client_channel/health/health_check_client.h +0 -43
- data/third_party/cares/cares/src/lib/ares_library_init.h +0 -43
data/src/core/lib/json/json.h
CHANGED
@@ -19,175 +19,11 @@
|
|
19
19
|
|
20
20
|
#include <grpc/support/port_platform.h>
|
21
21
|
|
22
|
-
#include <
|
23
|
-
#include <string>
|
24
|
-
#include <utility>
|
25
|
-
#include <vector>
|
26
|
-
|
27
|
-
#include "absl/types/variant.h"
|
22
|
+
#include <grpc/support/json.h>
|
28
23
|
|
29
24
|
namespace grpc_core {
|
30
25
|
|
31
|
-
|
32
|
-
// number, true, false, or null.
|
33
|
-
class Json {
|
34
|
-
public:
|
35
|
-
// TODO(roth): Currently, numbers are stored internally as strings,
|
36
|
-
// which makes the API a bit cumbersome to use. When we have time,
|
37
|
-
// consider whether there's a better alternative (e.g., maybe storing
|
38
|
-
// each numeric type as the native C++ type and automatically converting
|
39
|
-
// to string as needed).
|
40
|
-
enum class Type { kNull, kTrue, kFalse, kNumber, kString, kObject, kArray };
|
41
|
-
|
42
|
-
using Object = std::map<std::string, Json>;
|
43
|
-
using Array = std::vector<Json>;
|
44
|
-
|
45
|
-
Json() = default;
|
46
|
-
|
47
|
-
// Copyable.
|
48
|
-
Json(const Json& other) = default;
|
49
|
-
Json& operator=(const Json& other) = default;
|
50
|
-
|
51
|
-
// Moveable.
|
52
|
-
Json(Json&& other) noexcept : value_(std::move(other.value_)) {
|
53
|
-
other.value_ = absl::monostate();
|
54
|
-
}
|
55
|
-
Json& operator=(Json&& other) noexcept {
|
56
|
-
value_ = std::move(other.value_);
|
57
|
-
other.value_ = absl::monostate();
|
58
|
-
return *this;
|
59
|
-
}
|
60
|
-
|
61
|
-
// Construct from copying a string.
|
62
|
-
// If is_number is true, the type will be kNumber instead of kString.
|
63
|
-
// NOLINTNEXTLINE(google-explicit-constructor)
|
64
|
-
Json(const std::string& string, bool is_number = false)
|
65
|
-
: value_(is_number ? Value(NumberValue{string}) : Value(string)) {}
|
66
|
-
Json& operator=(const std::string& string) {
|
67
|
-
value_ = string;
|
68
|
-
return *this;
|
69
|
-
}
|
70
|
-
|
71
|
-
// Same thing for C-style strings, both const and mutable.
|
72
|
-
// NOLINTNEXTLINE(google-explicit-constructor)
|
73
|
-
Json(const char* string, bool is_number = false)
|
74
|
-
: Json(std::string(string), is_number) {}
|
75
|
-
Json& operator=(const char* string) {
|
76
|
-
*this = std::string(string);
|
77
|
-
return *this;
|
78
|
-
}
|
79
|
-
// NOLINTNEXTLINE(google-explicit-constructor)
|
80
|
-
Json(char* string, bool is_number = false)
|
81
|
-
: Json(std::string(string), is_number) {}
|
82
|
-
Json& operator=(char* string) {
|
83
|
-
*this = std::string(string);
|
84
|
-
return *this;
|
85
|
-
}
|
86
|
-
|
87
|
-
// Construct by moving a string.
|
88
|
-
// NOLINTNEXTLINE(google-explicit-constructor)
|
89
|
-
Json(std::string&& string) : value_(Value(std::move(string))) {}
|
90
|
-
Json& operator=(std::string&& string) {
|
91
|
-
value_ = Value(std::move(string));
|
92
|
-
return *this;
|
93
|
-
}
|
94
|
-
|
95
|
-
// Construct from bool.
|
96
|
-
// NOLINTNEXTLINE(google-explicit-constructor)
|
97
|
-
Json(bool b) : value_(b) {}
|
98
|
-
Json& operator=(bool b) {
|
99
|
-
value_ = b;
|
100
|
-
return *this;
|
101
|
-
}
|
102
|
-
|
103
|
-
// Construct from any numeric type.
|
104
|
-
template <typename NumericType>
|
105
|
-
// NOLINTNEXTLINE(google-explicit-constructor)
|
106
|
-
Json(NumericType number) : value_(NumberValue{std::to_string(number)}) {}
|
107
|
-
template <typename NumericType>
|
108
|
-
Json& operator=(NumericType number) {
|
109
|
-
value_ = NumberValue{std::to_string(number)};
|
110
|
-
return *this;
|
111
|
-
}
|
112
|
-
|
113
|
-
// Construct by copying object.
|
114
|
-
// NOLINTNEXTLINE(google-explicit-constructor)
|
115
|
-
Json(const Object& object) : value_(object) {}
|
116
|
-
Json& operator=(const Object& object) {
|
117
|
-
value_ = object;
|
118
|
-
return *this;
|
119
|
-
}
|
120
|
-
|
121
|
-
// Construct by moving object.
|
122
|
-
// NOLINTNEXTLINE(google-explicit-constructor)
|
123
|
-
Json(Object&& object) : value_(std::move(object)) {}
|
124
|
-
Json& operator=(Object&& object) {
|
125
|
-
value_ = std::move(object);
|
126
|
-
return *this;
|
127
|
-
}
|
128
|
-
|
129
|
-
// Construct by copying array.
|
130
|
-
// NOLINTNEXTLINE(google-explicit-constructor)
|
131
|
-
Json(const Array& array) : value_(array) {}
|
132
|
-
Json& operator=(const Array& array) {
|
133
|
-
value_ = array;
|
134
|
-
return *this;
|
135
|
-
}
|
136
|
-
|
137
|
-
// Construct by moving array.
|
138
|
-
// NOLINTNEXTLINE(google-explicit-constructor)
|
139
|
-
Json(Array&& array) : value_(std::move(array)) {}
|
140
|
-
Json& operator=(Array&& array) {
|
141
|
-
value_ = std::move(array);
|
142
|
-
return *this;
|
143
|
-
}
|
144
|
-
|
145
|
-
// Returns the JSON type.
|
146
|
-
Type type() const {
|
147
|
-
struct ValueFunctor {
|
148
|
-
Json::Type operator()(const absl::monostate&) { return Type::kNull; }
|
149
|
-
Json::Type operator()(bool value) {
|
150
|
-
return value ? Type::kTrue : Type::kFalse;
|
151
|
-
}
|
152
|
-
Json::Type operator()(const NumberValue&) { return Type::kNumber; }
|
153
|
-
Json::Type operator()(const std::string&) { return Type::kString; }
|
154
|
-
Json::Type operator()(const Object&) { return Type::kObject; }
|
155
|
-
Json::Type operator()(const Array&) { return Type::kArray; }
|
156
|
-
};
|
157
|
-
return absl::visit(ValueFunctor(), value_);
|
158
|
-
}
|
159
|
-
|
160
|
-
// Accessor methods.
|
161
|
-
const std::string& string() const {
|
162
|
-
const NumberValue* num = absl::get_if<NumberValue>(&value_);
|
163
|
-
if (num != nullptr) return num->value;
|
164
|
-
return absl::get<std::string>(value_);
|
165
|
-
}
|
166
|
-
const Object& object() const { return absl::get<Object>(value_); }
|
167
|
-
const Array& array() const { return absl::get<Array>(value_); }
|
168
|
-
|
169
|
-
bool operator==(const Json& other) const { return value_ == other.value_; }
|
170
|
-
bool operator!=(const Json& other) const { return !(*this == other); }
|
171
|
-
|
172
|
-
private:
|
173
|
-
struct NumberValue {
|
174
|
-
std::string value;
|
175
|
-
|
176
|
-
bool operator==(const NumberValue& other) const {
|
177
|
-
return value == other.value;
|
178
|
-
}
|
179
|
-
};
|
180
|
-
using Value = absl::variant<absl::monostate, // kNull
|
181
|
-
bool, // kTrue or kFalse
|
182
|
-
NumberValue, // kNumber
|
183
|
-
std::string, // kString
|
184
|
-
Object, // kObject
|
185
|
-
Array>; // kArray
|
186
|
-
|
187
|
-
explicit Json(Value value) : value_(std::move(value)) {}
|
188
|
-
|
189
|
-
Value value_;
|
190
|
-
};
|
26
|
+
using Json = experimental::Json;
|
191
27
|
|
192
28
|
} // namespace grpc_core
|
193
29
|
|
@@ -22,6 +22,8 @@
|
|
22
22
|
#include "absl/strings/str_cat.h"
|
23
23
|
#include "absl/strings/strip.h"
|
24
24
|
|
25
|
+
#include <grpc/support/json.h>
|
26
|
+
|
25
27
|
namespace grpc_core {
|
26
28
|
namespace json_detail {
|
27
29
|
|
@@ -91,13 +93,11 @@ bool LoadNumber::IsNumber() const { return true; }
|
|
91
93
|
|
92
94
|
void LoadBool::LoadInto(const Json& json, const JsonArgs&, void* dst,
|
93
95
|
ValidationErrors* errors) const {
|
94
|
-
if (json.type()
|
95
|
-
*static_cast<bool*>(dst) = true;
|
96
|
-
} else if (json.type() == Json::Type::kFalse) {
|
97
|
-
*static_cast<bool*>(dst) = false;
|
98
|
-
} else {
|
96
|
+
if (json.type() != Json::Type::kBoolean) {
|
99
97
|
errors->AddError("is not a boolean");
|
98
|
+
return;
|
100
99
|
}
|
100
|
+
*static_cast<bool*>(dst) = json.boolean();
|
101
101
|
}
|
102
102
|
|
103
103
|
void LoadUnprocessedJsonObject::LoadInto(const Json& json, const JsonArgs&,
|
@@ -168,9 +168,8 @@ void LoadMap::LoadInto(const Json& json, const JsonArgs& args, void* dst,
|
|
168
168
|
}
|
169
169
|
}
|
170
170
|
|
171
|
-
void
|
172
|
-
|
173
|
-
if (json.type() == Json::Type::kNull) return;
|
171
|
+
void LoadWrapped::LoadInto(const Json& json, const JsonArgs& args, void* dst,
|
172
|
+
ValidationErrors* errors) const {
|
174
173
|
void* element = Emplace(dst);
|
175
174
|
size_t starting_error_size = errors->size();
|
176
175
|
ElementLoader()->LoadInto(json, args, element, errors);
|
@@ -191,7 +190,7 @@ bool LoadObject(const Json& json, const JsonArgs& args, const Element* elements,
|
|
191
190
|
ValidationErrors::ScopedField field(errors,
|
192
191
|
absl::StrCat(".", element.name));
|
193
192
|
const auto& it = json.object().find(element.name);
|
194
|
-
if (it == json.object().end()) {
|
193
|
+
if (it == json.object().end() || it->second.type() == Json::Type::kNull) {
|
195
194
|
if (element.optional) continue;
|
196
195
|
errors->AddError("field not present");
|
197
196
|
continue;
|
@@ -253,14 +253,14 @@ class LoadMap : public LoaderInterface {
|
|
253
253
|
virtual const LoaderInterface* ElementLoader() const = 0;
|
254
254
|
};
|
255
255
|
|
256
|
-
// Load
|
257
|
-
class
|
256
|
+
// Load a wrapped value of some type.
|
257
|
+
class LoadWrapped : public LoaderInterface {
|
258
258
|
public:
|
259
259
|
void LoadInto(const Json& json, const JsonArgs& args, void* dst,
|
260
260
|
ValidationErrors* errors) const override;
|
261
261
|
|
262
262
|
protected:
|
263
|
-
~
|
263
|
+
~LoadWrapped() = default;
|
264
264
|
|
265
265
|
private:
|
266
266
|
virtual void* Emplace(void* dst) const = 0;
|
@@ -392,7 +392,7 @@ class AutoLoader<std::map<std::string, T>> final : public LoadMap {
|
|
392
392
|
|
393
393
|
// Specializations of AutoLoader for absl::optional<>.
|
394
394
|
template <typename T>
|
395
|
-
class AutoLoader<absl::optional<T>> final : public
|
395
|
+
class AutoLoader<absl::optional<T>> final : public LoadWrapped {
|
396
396
|
public:
|
397
397
|
void* Emplace(void* dst) const final {
|
398
398
|
return &static_cast<absl::optional<T>*>(dst)->emplace();
|
@@ -410,7 +410,7 @@ class AutoLoader<absl::optional<T>> final : public LoadOptional {
|
|
410
410
|
|
411
411
|
// Specializations of AutoLoader for std::unique_ptr<>.
|
412
412
|
template <typename T>
|
413
|
-
class AutoLoader<std::unique_ptr<T>> final : public
|
413
|
+
class AutoLoader<std::unique_ptr<T>> final : public LoadWrapped {
|
414
414
|
public:
|
415
415
|
void* Emplace(void* dst) const final {
|
416
416
|
auto& p = *static_cast<std::unique_ptr<T>*>(dst);
|
@@ -428,6 +428,26 @@ class AutoLoader<std::unique_ptr<T>> final : public LoadOptional {
|
|
428
428
|
~AutoLoader() = default;
|
429
429
|
};
|
430
430
|
|
431
|
+
// Specializations of AutoLoader for RefCountedPtr<>.
|
432
|
+
template <typename T>
|
433
|
+
class AutoLoader<RefCountedPtr<T>> final : public LoadWrapped {
|
434
|
+
public:
|
435
|
+
void* Emplace(void* dst) const final {
|
436
|
+
auto& p = *static_cast<RefCountedPtr<T>*>(dst);
|
437
|
+
p = MakeRefCounted<T>();
|
438
|
+
return p.get();
|
439
|
+
}
|
440
|
+
void Reset(void* dst) const final {
|
441
|
+
static_cast<RefCountedPtr<T>*>(dst)->reset();
|
442
|
+
}
|
443
|
+
const LoaderInterface* ElementLoader() const final {
|
444
|
+
return LoaderForType<T>();
|
445
|
+
}
|
446
|
+
|
447
|
+
private:
|
448
|
+
~AutoLoader() = default;
|
449
|
+
};
|
450
|
+
|
431
451
|
// Implementation of aforementioned LoaderForType.
|
432
452
|
// Simply keeps a static AutoLoader<T> and returns a pointer to that.
|
433
453
|
template <typename T>
|
@@ -596,19 +616,6 @@ absl::StatusOr<T> LoadFromJson(
|
|
596
616
|
return std::move(result);
|
597
617
|
}
|
598
618
|
|
599
|
-
template <typename T>
|
600
|
-
absl::StatusOr<RefCountedPtr<T>> LoadRefCountedFromJson(
|
601
|
-
const Json& json, const JsonArgs& args = JsonArgs(),
|
602
|
-
absl::string_view error_prefix = "errors validating JSON") {
|
603
|
-
ValidationErrors errors;
|
604
|
-
auto result = MakeRefCounted<T>();
|
605
|
-
json_detail::LoaderForType<T>()->LoadInto(json, args, result.get(), &errors);
|
606
|
-
if (!errors.ok()) {
|
607
|
-
return errors.status(absl::StatusCode::kInvalidArgument, error_prefix);
|
608
|
-
}
|
609
|
-
return std::move(result);
|
610
|
-
}
|
611
|
-
|
612
619
|
template <typename T>
|
613
620
|
T LoadFromJson(const Json& json, const JsonArgs& args,
|
614
621
|
ValidationErrors* errors) {
|
@@ -35,6 +35,7 @@
|
|
35
35
|
#include "absl/strings/string_view.h"
|
36
36
|
#include "absl/types/variant.h"
|
37
37
|
|
38
|
+
#include <grpc/support/json.h>
|
38
39
|
#include <grpc/support/log.h>
|
39
40
|
|
40
41
|
#include "src/core/lib/gprpp/match.h"
|
@@ -107,8 +108,13 @@ class JsonReader {
|
|
107
108
|
|
108
109
|
Json TakeAsJson() {
|
109
110
|
return MatchMutable(
|
110
|
-
&data,
|
111
|
-
[&](Json::
|
111
|
+
&data,
|
112
|
+
[&](Json::Object* object) {
|
113
|
+
return Json::FromObject(std::move(*object));
|
114
|
+
},
|
115
|
+
[&](Json::Array* array) {
|
116
|
+
return Json::FromArray(std::move(*array));
|
117
|
+
});
|
112
118
|
}
|
113
119
|
};
|
114
120
|
|
@@ -307,26 +313,26 @@ void JsonReader::SetKey() {
|
|
307
313
|
|
308
314
|
void JsonReader::SetString() {
|
309
315
|
Json* value = CreateAndLinkValue();
|
310
|
-
*value = std::move(string_);
|
316
|
+
*value = Json::FromString(std::move(string_));
|
311
317
|
string_.clear();
|
312
318
|
}
|
313
319
|
|
314
320
|
bool JsonReader::SetNumber() {
|
315
321
|
Json* value = CreateAndLinkValue();
|
316
|
-
*value = Json(string_
|
322
|
+
*value = Json::FromNumber(std::move(string_));
|
317
323
|
string_.clear();
|
318
324
|
return true;
|
319
325
|
}
|
320
326
|
|
321
327
|
void JsonReader::SetTrue() {
|
322
328
|
Json* value = CreateAndLinkValue();
|
323
|
-
*value = true;
|
329
|
+
*value = Json::FromBool(true);
|
324
330
|
string_.clear();
|
325
331
|
}
|
326
332
|
|
327
333
|
void JsonReader::SetFalse() {
|
328
334
|
Json* value = CreateAndLinkValue();
|
329
|
-
*value = false;
|
335
|
+
*value = Json::FromBool(false);
|
330
336
|
string_.clear();
|
331
337
|
}
|
332
338
|
|
@@ -470,6 +476,7 @@ JsonReader::Status JsonReader::Run() {
|
|
470
476
|
return Status::GRPC_JSON_PARSE_ERROR;
|
471
477
|
}
|
472
478
|
state_ = State::GRPC_JSON_STATE_VALUE_END;
|
479
|
+
container_just_begun_ = false;
|
473
480
|
EndContainer();
|
474
481
|
if (stack_.empty()) {
|
475
482
|
state_ = State::GRPC_JSON_STATE_END;
|
@@ -37,18 +37,13 @@ bool ParseDurationFromJson(const Json& field, Duration* duration) {
|
|
37
37
|
|
38
38
|
bool ExtractJsonBool(const Json& json, absl::string_view field_name,
|
39
39
|
bool* output, std::vector<grpc_error_handle>* error_list) {
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
case Json::Type::kFalse:
|
45
|
-
*output = false;
|
46
|
-
return true;
|
47
|
-
default:
|
48
|
-
error_list->push_back(GRPC_ERROR_CREATE(
|
49
|
-
absl::StrCat("field:", field_name, " error:type should be BOOLEAN")));
|
50
|
-
return false;
|
40
|
+
if (json.type() != Json::Type::kBoolean) {
|
41
|
+
error_list->push_back(GRPC_ERROR_CREATE(
|
42
|
+
absl::StrCat("field:", field_name, " error:type should be BOOLEAN")));
|
43
|
+
return false;
|
51
44
|
}
|
45
|
+
*output = json.boolean();
|
46
|
+
return true;
|
52
47
|
}
|
53
48
|
|
54
49
|
bool ExtractJsonArray(const Json& json, absl::string_view field_name,
|
@@ -145,9 +145,7 @@ void JsonWriter::EscapeString(const std::string& string) {
|
|
145
145
|
OutputChar('"');
|
146
146
|
for (size_t idx = 0; idx < string.size(); ++idx) {
|
147
147
|
uint8_t c = static_cast<uint8_t>(string[idx]);
|
148
|
-
if (c
|
149
|
-
break;
|
150
|
-
} else if (c >= 32 && c <= 126) {
|
148
|
+
if (c >= 32 && c <= 126) {
|
151
149
|
if (c == '\\' || c == '"') OutputChar('\\');
|
152
150
|
OutputChar(static_cast<char>(c));
|
153
151
|
} else if (c < 32 || c == 127) {
|
@@ -311,11 +309,12 @@ void JsonWriter::DumpValue(const Json& value) {
|
|
311
309
|
case Json::Type::kNumber:
|
312
310
|
ValueRaw(value.string());
|
313
311
|
break;
|
314
|
-
case Json::Type::
|
315
|
-
|
316
|
-
|
317
|
-
|
318
|
-
|
312
|
+
case Json::Type::kBoolean:
|
313
|
+
if (value.boolean()) {
|
314
|
+
ValueRaw(std::string("true", 4));
|
315
|
+
} else {
|
316
|
+
ValueRaw(std::string("false", 5));
|
317
|
+
}
|
319
318
|
break;
|
320
319
|
case Json::Type::kNull:
|
321
320
|
ValueRaw(std::string("null", 4));
|
@@ -366,6 +366,19 @@ class LoadBalancingPolicy : public InternallyRefCounted<LoadBalancingPolicy> {
|
|
366
366
|
/// whether the LB policy accepted the update; if non-OK, informs
|
367
367
|
/// polling-based resolvers that they should go into backoff delay and
|
368
368
|
/// eventually reattempt the resolution.
|
369
|
+
///
|
370
|
+
/// The first time that UpdateLocked() is called, the LB policy will
|
371
|
+
/// generally not be able to determine the appropriate connectivity
|
372
|
+
/// state by the time UpdateLocked() returns (e.g., it will need to
|
373
|
+
/// wait for connectivity state notifications from each subchannel,
|
374
|
+
/// which will be delivered asynchronously). In this case, the LB
|
375
|
+
/// policy should not call the helper's UpdateState() method until it
|
376
|
+
/// does have a clear picture of the connectivity state (e.g., it
|
377
|
+
/// should wait for all subchannels to report connectivity state
|
378
|
+
/// before calling the helper's UpdateState() method), although it is
|
379
|
+
/// expected to do so within some short period of time. The parent of
|
380
|
+
/// the LB policy will assume that the policy's initial state is
|
381
|
+
/// CONNECTING and that picks should be queued.
|
369
382
|
virtual absl::Status UpdateLocked(UpdateArgs) = 0; // NOLINT
|
370
383
|
|
371
384
|
/// Tries to enter a READY connectivity state.
|
@@ -31,6 +31,7 @@
|
|
31
31
|
#include "absl/strings/str_join.h"
|
32
32
|
#include "absl/strings/string_view.h"
|
33
33
|
|
34
|
+
#include <grpc/support/json.h>
|
34
35
|
#include <grpc/support/log.h>
|
35
36
|
|
36
37
|
#include "src/core/lib/load_balancing/lb_policy.h"
|
@@ -83,7 +84,7 @@ bool LoadBalancingPolicyRegistry::LoadBalancingPolicyExists(
|
|
83
84
|
if (factory == nullptr) return false;
|
84
85
|
// If requested, check if the load balancing policy allows an empty config.
|
85
86
|
if (requires_config != nullptr) {
|
86
|
-
auto config = factory->ParseLoadBalancingConfig(Json());
|
87
|
+
auto config = factory->ParseLoadBalancingConfig(Json::FromObject({}));
|
87
88
|
*requires_config = !config.ok();
|
88
89
|
}
|
89
90
|
return true;
|
@@ -159,12 +159,11 @@ std::string StringMatcher::ToString() const {
|
|
159
159
|
absl::StatusOr<HeaderMatcher> HeaderMatcher::Create(
|
160
160
|
absl::string_view name, Type type, absl::string_view matcher,
|
161
161
|
int64_t range_start, int64_t range_end, bool present_match,
|
162
|
-
bool invert_match) {
|
162
|
+
bool invert_match, bool case_sensitive) {
|
163
163
|
if (static_cast<int>(type) < 5) {
|
164
164
|
// Only for EXACT, PREFIX, SUFFIX, SAFE_REGEX and CONTAINS.
|
165
|
-
absl::StatusOr<StringMatcher> string_matcher =
|
166
|
-
|
167
|
-
/*case_sensitive=*/true);
|
165
|
+
absl::StatusOr<StringMatcher> string_matcher = StringMatcher::Create(
|
166
|
+
static_cast<StringMatcher::Type>(type), matcher, case_sensitive);
|
168
167
|
if (!string_matcher.ok()) {
|
169
168
|
return string_matcher.status();
|
170
169
|
}
|
@@ -113,7 +113,8 @@ class HeaderMatcher {
|
|
113
113
|
int64_t range_start = 0,
|
114
114
|
int64_t range_end = 0,
|
115
115
|
bool present_match = false,
|
116
|
-
bool invert_match = false
|
116
|
+
bool invert_match = false,
|
117
|
+
bool case_sensitive = true);
|
117
118
|
|
118
119
|
HeaderMatcher() = default;
|
119
120
|
HeaderMatcher(const HeaderMatcher& other);
|
@@ -26,6 +26,7 @@
|
|
26
26
|
#include "absl/strings/str_join.h"
|
27
27
|
|
28
28
|
#include "src/core/lib/gprpp/atomic_utils.h"
|
29
|
+
#include "src/core/lib/gprpp/crash.h"
|
29
30
|
|
30
31
|
namespace grpc_core {
|
31
32
|
|
@@ -83,6 +84,10 @@ class FreestandingActivity::Handle final : public Wakeable {
|
|
83
84
|
Unref();
|
84
85
|
}
|
85
86
|
|
87
|
+
void WakeupAsync(WakeupMask) override ABSL_LOCKS_EXCLUDED(mu_) {
|
88
|
+
Crash("not implemented");
|
89
|
+
}
|
90
|
+
|
86
91
|
void Drop(WakeupMask) override { Unref(); }
|
87
92
|
|
88
93
|
std::string ActivityDebugTag(WakeupMask) const override {
|
@@ -32,6 +32,7 @@
|
|
32
32
|
#include <grpc/support/log.h>
|
33
33
|
|
34
34
|
#include "src/core/lib/gprpp/construct_destruct.h"
|
35
|
+
#include "src/core/lib/gprpp/crash.h"
|
35
36
|
#include "src/core/lib/gprpp/no_destruct.h"
|
36
37
|
#include "src/core/lib/gprpp/orphanable.h"
|
37
38
|
#include "src/core/lib/gprpp/sync.h"
|
@@ -56,6 +57,9 @@ class Wakeable {
|
|
56
57
|
// WakeupMask comes from the activity that created this Wakeable and specifies
|
57
58
|
// the set of promises that should be awoken.
|
58
59
|
virtual void Wakeup(WakeupMask wakeup_mask) = 0;
|
60
|
+
// Per Wakeup, but guarantee that the activity will be woken up out-of-line.
|
61
|
+
// Useful if there may be mutexes or the like held by the current thread.
|
62
|
+
virtual void WakeupAsync(WakeupMask wakeup_mask) = 0;
|
59
63
|
// Drop this wakeable without waking up the underlying activity.
|
60
64
|
virtual void Drop(WakeupMask wakeup_mask) = 0;
|
61
65
|
|
@@ -69,6 +73,7 @@ class Wakeable {
|
|
69
73
|
namespace promise_detail {
|
70
74
|
struct Unwakeable final : public Wakeable {
|
71
75
|
void Wakeup(WakeupMask) override {}
|
76
|
+
void WakeupAsync(WakeupMask) override {}
|
72
77
|
void Drop(WakeupMask) override {}
|
73
78
|
std::string ActivityDebugTag(WakeupMask) const override;
|
74
79
|
};
|
@@ -96,6 +101,8 @@ class Waker {
|
|
96
101
|
// Wake the underlying activity.
|
97
102
|
void Wakeup() { Take().Wakeup(); }
|
98
103
|
|
104
|
+
void WakeupAsync() { Take().WakeupAsync(); }
|
105
|
+
|
99
106
|
template <typename H>
|
100
107
|
friend H AbslHashValue(H h, const Waker& w) {
|
101
108
|
return H::combine(H::combine(std::move(h), w.wakeable_and_arg_.wakeable),
|
@@ -125,6 +132,7 @@ class Waker {
|
|
125
132
|
WakeupMask wakeup_mask;
|
126
133
|
|
127
134
|
void Wakeup() { wakeable->Wakeup(wakeup_mask); }
|
135
|
+
void WakeupAsync() { wakeable->WakeupAsync(wakeup_mask); }
|
128
136
|
void Drop() { wakeable->Drop(wakeup_mask); }
|
129
137
|
std::string ActivityDebugTag() const {
|
130
138
|
return wakeable == nullptr ? "<unknown>"
|
@@ -512,6 +520,8 @@ class PromiseActivity final
|
|
512
520
|
}
|
513
521
|
}
|
514
522
|
|
523
|
+
void WakeupAsync(WakeupMask) final { Crash("not implemented"); }
|
524
|
+
|
515
525
|
// Drop a wakeup
|
516
526
|
void Drop(WakeupMask) final { this->WakeupComplete(); }
|
517
527
|
|
@@ -26,12 +26,11 @@
|
|
26
26
|
|
27
27
|
#include "src/core/lib/debug/trace.h"
|
28
28
|
#include "src/core/lib/gprpp/sync.h"
|
29
|
+
#include "src/core/lib/iomgr/exec_ctx.h"
|
29
30
|
#include "src/core/lib/promise/activity.h"
|
30
31
|
#include "src/core/lib/promise/trace.h"
|
31
32
|
|
32
|
-
|
33
|
-
|
34
|
-
#ifdef GRPC_PARTY_MAXIMIZE_THREADS
|
33
|
+
#ifdef GRPC_MAXIMIZE_THREADYNESS
|
35
34
|
#include "src/core/lib/gprpp/thd.h" // IWYU pragma: keep
|
36
35
|
#include "src/core/lib/iomgr/exec_ctx.h" // IWYU pragma: keep
|
37
36
|
#endif
|
@@ -100,9 +99,9 @@ class Party::Handle final : public Wakeable {
|
|
100
99
|
Unref();
|
101
100
|
}
|
102
101
|
|
103
|
-
|
104
|
-
|
105
|
-
|
102
|
+
void WakeupGeneric(WakeupMask wakeup_mask,
|
103
|
+
void (Party::*wakeup_method)(WakeupMask))
|
104
|
+
ABSL_LOCKS_EXCLUDED(mu_) {
|
106
105
|
mu_.Lock();
|
107
106
|
// Note that activity refcount can drop to zero, but we could win the lock
|
108
107
|
// against DropActivity, so we need to only increase activities refcount if
|
@@ -112,7 +111,7 @@ class Party::Handle final : public Wakeable {
|
|
112
111
|
mu_.Unlock();
|
113
112
|
// Activity still exists and we have a reference: wake it up, which will
|
114
113
|
// drop the ref.
|
115
|
-
party
|
114
|
+
(party->*wakeup_method)(wakeup_mask);
|
116
115
|
} else {
|
117
116
|
// Could not get the activity - it's either gone or going. No need to wake
|
118
117
|
// it up!
|
@@ -122,6 +121,16 @@ class Party::Handle final : public Wakeable {
|
|
122
121
|
Unref();
|
123
122
|
}
|
124
123
|
|
124
|
+
// Activity needs to wake up (if it still exists!) - wake it up, and drop the
|
125
|
+
// ref that was kept for this handle.
|
126
|
+
void Wakeup(WakeupMask wakeup_mask) override ABSL_LOCKS_EXCLUDED(mu_) {
|
127
|
+
WakeupGeneric(wakeup_mask, &Party::Wakeup);
|
128
|
+
}
|
129
|
+
|
130
|
+
void WakeupAsync(WakeupMask wakeup_mask) override ABSL_LOCKS_EXCLUDED(mu_) {
|
131
|
+
WakeupGeneric(wakeup_mask, &Party::WakeupAsync);
|
132
|
+
}
|
133
|
+
|
125
134
|
void Drop(WakeupMask) override { Unref(); }
|
126
135
|
|
127
136
|
std::string ActivityDebugTag(WakeupMask) const override {
|
@@ -202,7 +211,7 @@ void Party::RunLocked() {
|
|
202
211
|
PartyOver();
|
203
212
|
}
|
204
213
|
};
|
205
|
-
#ifdef
|
214
|
+
#ifdef GRPC_MAXIMIZE_THREADYNESS
|
206
215
|
Thread thd(
|
207
216
|
"RunParty",
|
208
217
|
[body]() {
|
@@ -267,15 +276,24 @@ void Party::AddParticipants(Participant** participants, size_t count) {
|
|
267
276
|
Unref();
|
268
277
|
}
|
269
278
|
|
270
|
-
void Party::ScheduleWakeup(WakeupMask mask) {
|
271
|
-
if (sync_.ScheduleWakeup(mask)) RunLocked();
|
272
|
-
}
|
273
|
-
|
274
279
|
void Party::Wakeup(WakeupMask wakeup_mask) {
|
275
|
-
ScheduleWakeup(wakeup_mask);
|
280
|
+
if (sync_.ScheduleWakeup(wakeup_mask)) RunLocked();
|
276
281
|
Unref();
|
277
282
|
}
|
278
283
|
|
284
|
+
void Party::WakeupAsync(WakeupMask wakeup_mask) {
|
285
|
+
if (sync_.ScheduleWakeup(wakeup_mask)) {
|
286
|
+
event_engine()->Run([this]() {
|
287
|
+
ApplicationCallbackExecCtx app_exec_ctx;
|
288
|
+
ExecCtx exec_ctx;
|
289
|
+
RunLocked();
|
290
|
+
Unref();
|
291
|
+
});
|
292
|
+
} else {
|
293
|
+
Unref();
|
294
|
+
}
|
295
|
+
}
|
296
|
+
|
279
297
|
void Party::Drop(WakeupMask) { Unref(); }
|
280
298
|
|
281
299
|
void Party::PartyIsOver() {
|