grpc 1.30.2 → 1.32.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 +723 -15910
- data/include/grpc/grpc_security.h +31 -14
- data/include/grpc/grpc_security_constants.h +3 -0
- data/include/grpc/impl/codegen/README.md +22 -0
- data/include/grpc/impl/codegen/grpc_types.h +7 -5
- data/include/grpc/impl/codegen/port_platform.h +6 -33
- data/src/core/ext/filters/client_channel/backend_metric.cc +12 -9
- data/src/core/ext/filters/client_channel/backup_poller.cc +3 -2
- data/src/core/ext/filters/client_channel/client_channel.cc +470 -285
- data/src/core/ext/filters/client_channel/client_channel.h +1 -1
- data/src/core/ext/filters/client_channel/client_channel_channelz.h +0 -3
- data/src/core/ext/filters/client_channel/config_selector.cc +62 -0
- data/src/core/ext/filters/client_channel/config_selector.h +93 -0
- data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +24 -2
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +8 -1
- data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +8 -8
- data/src/core/ext/filters/client_channel/http_proxy.cc +6 -4
- data/src/core/ext/filters/client_channel/lb_policy.h +4 -0
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +6 -4
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +59 -36
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +0 -13
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +0 -3
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +1 -37
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +19 -13
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +29 -10
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +5 -4
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +4 -6
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +23 -13
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +18 -12
- data/src/core/ext/filters/client_channel/lb_policy/xds/eds.cc +22 -14
- data/src/core/ext/filters/client_channel/lb_policy/xds/lrs.cc +18 -9
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_routing.cc +385 -78
- data/src/core/ext/filters/client_channel/lb_policy_registry.cc +4 -5
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +5 -2
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +6 -5
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +8 -6
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +9 -7
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +7 -5
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +36 -51
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +6 -2
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +383 -31
- data/src/core/ext/filters/client_channel/resolver_registry.cc +13 -14
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +6 -7
- data/src/core/ext/filters/client_channel/resolver_result_parsing.h +0 -1
- data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +38 -32
- data/src/core/ext/filters/client_channel/resolving_lb_policy.h +39 -20
- data/src/core/ext/filters/client_channel/server_address.cc +40 -7
- data/src/core/ext/filters/client_channel/server_address.h +42 -4
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +142 -0
- data/src/core/ext/filters/client_channel/subchannel.cc +65 -24
- data/src/core/ext/filters/client_channel/subchannel.h +16 -4
- data/src/core/ext/filters/http/client/http_client_filter.cc +5 -5
- data/src/core/ext/filters/http/http_filters_plugin.cc +2 -1
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +74 -33
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +3 -1
- data/src/core/ext/filters/max_age/max_age_filter.cc +2 -1
- data/src/core/ext/filters/message_size/message_size_filter.cc +56 -80
- data/src/core/ext/filters/message_size/message_size_filter.h +6 -0
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +87 -31
- data/src/core/ext/transport/chttp2/client/chttp2_connector.h +18 -1
- data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +10 -35
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +378 -348
- data/src/core/ext/transport/chttp2/server/chttp2_server.h +7 -2
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +3 -3
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +10 -16
- data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +9 -9
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +256 -279
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +23 -28
- data/src/core/ext/transport/chttp2/transport/flow_control.h +14 -16
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +9 -12
- data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +4 -6
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +5 -6
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +12 -13
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +8 -9
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +9 -12
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +25 -29
- data/src/core/ext/transport/chttp2/transport/hpack_table.cc +13 -17
- data/src/core/ext/transport/chttp2/transport/internal.h +18 -1
- data/src/core/ext/transport/chttp2/transport/parsing.cc +34 -71
- data/src/core/ext/transport/chttp2/transport/writing.cc +15 -19
- data/src/core/ext/transport/inproc/inproc_transport.cc +47 -27
- data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +0 -1
- data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +3 -4
- data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +224 -0
- data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +700 -0
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +74 -0
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +226 -0
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +380 -0
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +1378 -0
- data/src/core/ext/upb-generated/envoy/{api/v2/cluster → config/cluster/v3}/filter.upb.c +8 -8
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +69 -0
- data/src/core/ext/upb-generated/envoy/{api/v2/cluster → config/cluster/v3}/outlier_detection.upb.c +8 -8
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +323 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +112 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +334 -0
- data/src/core/ext/upb-generated/envoy/{api/v2/core → config/core/v3}/backoff.upb.c +8 -8
- data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +79 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +309 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +869 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +96 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +328 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +34 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +71 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +195 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +634 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +170 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +684 -0
- data/src/core/ext/upb-generated/envoy/{api/v2/core → config/core/v3}/http_uri.upb.c +8 -8
- data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +80 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +152 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +536 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +28 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +58 -0
- data/src/core/ext/upb-generated/envoy/{api/v2/core → config/core/v3}/socket_option.upb.c +6 -6
- data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +88 -0
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +91 -0
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +220 -0
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +91 -0
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +273 -0
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +112 -0
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +332 -0
- data/src/core/ext/upb-generated/envoy/config/listener/{v2 → v3}/api_listener.upb.c +8 -8
- data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +65 -0
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +108 -0
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +401 -0
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +138 -0
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +490 -0
- data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +41 -0
- data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +94 -0
- data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +174 -0
- data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +599 -0
- data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +63 -0
- data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +204 -0
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +773 -0
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +2855 -0
- data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +59 -0
- data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +135 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +50 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +108 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +312 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +1125 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c +20 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h +34 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +111 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +401 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +72 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +198 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +105 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +388 -0
- data/src/core/ext/upb-generated/envoy/{api/v2 → service/cluster/v3}/cds.upb.c +5 -6
- data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.h +49 -0
- data/src/core/ext/upb-generated/envoy/service/discovery/{v2 → v3}/ads.upb.c +5 -4
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +49 -0
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +129 -0
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +386 -0
- data/src/core/ext/upb-generated/envoy/{api/v2 → service/endpoint/v3}/eds.upb.c +5 -6
- data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.h +49 -0
- data/src/core/ext/upb-generated/envoy/{api/v2 → service/listener/v3}/lds.upb.c +5 -6
- data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.h +49 -0
- data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +55 -0
- data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +136 -0
- data/src/core/ext/upb-generated/envoy/{api/v2 → service/route/v3}/rds.upb.c +5 -6
- data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.h +49 -0
- data/src/core/ext/upb-generated/envoy/{api/v2 → service/route/v3}/srds.upb.c +5 -6
- data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.h +49 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +47 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +114 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +35 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +77 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +34 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +71 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +64 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +145 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +53 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +127 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +63 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +188 -0
- data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +88 -0
- data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +258 -0
- data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +90 -0
- data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +250 -0
- data/src/core/ext/upb-generated/envoy/type/{http.upb.c → v3/http.upb.c} +2 -2
- data/src/core/ext/upb-generated/envoy/type/{http.upb.h → v3/http.upb.h} +8 -9
- data/src/core/ext/upb-generated/envoy/type/{percent.upb.c → v3/percent.upb.c} +9 -8
- data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +86 -0
- data/src/core/ext/upb-generated/envoy/type/{range.upb.c → v3/range.upb.c} +12 -11
- data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +111 -0
- data/src/core/ext/upb-generated/envoy/type/{semantic_version.upb.c → v3/semantic_version.upb.c} +6 -5
- data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +61 -0
- data/src/core/ext/upb-generated/gogoproto/gogo.upb.h +0 -1
- data/src/core/ext/upb-generated/google/api/annotations.upb.h +0 -1
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +234 -0
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +759 -0
- data/src/core/ext/upb-generated/google/api/http.upb.h +29 -28
- data/src/core/ext/upb-generated/google/protobuf/any.upb.h +5 -6
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +39 -39
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +412 -386
- data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +5 -6
- data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +1 -2
- data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +1 -1
- data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +34 -55
- data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +5 -6
- data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +27 -28
- data/src/core/ext/upb-generated/google/rpc/status.upb.h +8 -8
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +1 -1
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +32 -45
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +4 -4
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +157 -178
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +14 -13
- data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +6 -7
- data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +59 -56
- data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +11 -12
- data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +0 -1
- data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +5 -6
- data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +27 -0
- data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +53 -0
- data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c +6 -6
- data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h +41 -68
- data/src/core/ext/upb-generated/validate/validate.upb.c +11 -11
- data/src/core/ext/upb-generated/validate/validate.upb.h +537 -536
- data/src/core/ext/xds/xds_api.cc +2388 -0
- data/src/core/ext/{filters/client_channel/xds → xds}/xds_api.h +120 -40
- data/src/core/ext/{filters/client_channel/xds → xds}/xds_bootstrap.cc +56 -25
- data/src/core/ext/{filters/client_channel/xds → xds}/xds_bootstrap.h +8 -3
- data/src/core/ext/{filters/client_channel/xds → xds}/xds_channel.h +4 -4
- data/src/core/ext/{filters/client_channel/xds → xds}/xds_channel_args.h +3 -3
- data/src/core/ext/{filters/client_channel/xds → xds}/xds_channel_secure.cc +2 -5
- data/src/core/ext/{filters/client_channel/xds → xds}/xds_client.cc +94 -347
- data/src/core/ext/{filters/client_channel/xds → xds}/xds_client.h +12 -45
- data/src/core/ext/{filters/client_channel/xds → xds}/xds_client_stats.cc +2 -2
- data/src/core/ext/{filters/client_channel/xds → xds}/xds_client_stats.h +13 -13
- data/src/core/lib/channel/channel_trace.cc +2 -6
- data/src/core/lib/channel/channelz.cc +19 -30
- data/src/core/lib/channel/channelz.h +1 -1
- data/src/core/lib/channel/channelz_registry.cc +3 -1
- data/src/core/lib/gpr/log_linux.cc +6 -8
- data/src/core/lib/gpr/log_posix.cc +6 -8
- data/src/core/lib/gpr/string.cc +10 -9
- data/src/core/lib/gpr/string.h +4 -2
- data/src/core/lib/gpr/sync_posix.cc +2 -8
- data/src/core/lib/gprpp/global_config_env.cc +8 -6
- data/src/core/lib/http/httpcli.cc +13 -10
- data/src/core/lib/http/httpcli_security_connector.cc +5 -5
- data/src/core/lib/iomgr/cfstream_handle.cc +1 -0
- data/src/core/lib/iomgr/endpoint.cc +5 -1
- data/src/core/lib/iomgr/endpoint.h +7 -3
- data/src/core/lib/iomgr/endpoint_cfstream.cc +32 -11
- data/src/core/lib/iomgr/endpoint_pair_posix.cc +10 -10
- data/src/core/lib/iomgr/error_cfstream.cc +9 -8
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +5 -6
- data/src/core/lib/iomgr/ev_epollex_linux.cc +15 -21
- data/src/core/lib/iomgr/ev_poll_posix.cc +6 -5
- data/src/core/lib/iomgr/is_epollexclusive_available.cc +14 -0
- data/src/core/{ext/filters/client_channel → lib/iomgr}/parse_address.cc +1 -1
- data/src/core/{ext/filters/client_channel → lib/iomgr}/parse_address.h +3 -3
- data/src/core/lib/iomgr/port.h +1 -21
- data/src/core/lib/iomgr/resolve_address_custom.cc +13 -18
- data/src/core/lib/iomgr/resolve_address_windows.cc +8 -8
- data/src/core/lib/iomgr/resource_quota.cc +34 -31
- data/src/core/lib/iomgr/sockaddr_utils.cc +9 -6
- data/src/core/lib/iomgr/sockaddr_utils.h +3 -2
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +95 -55
- data/src/core/lib/iomgr/socket_windows.cc +4 -5
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +9 -11
- data/src/core/lib/iomgr/tcp_client_custom.cc +6 -9
- data/src/core/lib/iomgr/tcp_client_posix.cc +27 -36
- data/src/core/lib/iomgr/tcp_client_windows.cc +9 -9
- data/src/core/lib/iomgr/tcp_custom.cc +33 -17
- data/src/core/lib/iomgr/tcp_custom.h +1 -1
- data/src/core/lib/iomgr/tcp_posix.cc +31 -13
- data/src/core/lib/iomgr/tcp_server.cc +3 -4
- data/src/core/lib/iomgr/tcp_server.h +7 -5
- data/src/core/lib/iomgr/tcp_server_custom.cc +6 -14
- data/src/core/lib/iomgr/tcp_server_posix.cc +34 -41
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +3 -4
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +5 -7
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +4 -9
- data/src/core/lib/iomgr/tcp_server_windows.cc +16 -16
- data/src/core/lib/iomgr/tcp_windows.cc +26 -10
- data/src/core/lib/iomgr/timer_generic.cc +13 -12
- data/src/core/lib/iomgr/udp_server.cc +24 -23
- data/src/core/lib/iomgr/udp_server.h +5 -2
- data/src/core/lib/iomgr/unix_sockets_posix.cc +9 -14
- data/src/core/lib/iomgr/unix_sockets_posix.h +3 -1
- data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +5 -2
- data/src/core/lib/json/json_reader.cc +20 -21
- data/src/core/lib/security/authorization/authorization_engine.cc +177 -0
- data/src/core/lib/security/authorization/authorization_engine.h +84 -0
- data/src/core/lib/security/authorization/evaluate_args.cc +153 -0
- data/src/core/lib/security/authorization/evaluate_args.h +59 -0
- data/src/core/lib/security/authorization/mock_cel/activation.h +57 -0
- data/src/core/lib/security/authorization/mock_cel/cel_expr_builder_factory.h +42 -0
- data/src/core/lib/security/authorization/mock_cel/cel_expression.h +68 -0
- data/src/core/lib/security/authorization/mock_cel/cel_value.h +93 -0
- data/src/core/lib/security/authorization/mock_cel/evaluator_core.h +67 -0
- data/src/core/lib/security/authorization/mock_cel/flat_expr_builder.h +56 -0
- data/src/core/lib/security/authorization/mock_cel/statusor.h +50 -0
- data/src/core/lib/security/credentials/credentials.h +5 -3
- data/src/core/lib/security/credentials/google_default/credentials_generic.cc +8 -6
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +64 -43
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +7 -4
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +19 -28
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +6 -6
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +20 -0
- data/src/core/lib/security/credentials/ssl/ssl_credentials.h +10 -0
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +10 -0
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +11 -12
- data/src/core/lib/security/security_connector/security_connector.cc +2 -0
- data/src/core/lib/security/security_connector/security_connector.h +1 -1
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +18 -11
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +5 -0
- data/src/core/lib/security/security_connector/ssl_utils.cc +44 -23
- data/src/core/lib/security/security_connector/ssl_utils.h +6 -2
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +27 -24
- data/src/core/lib/security/transport/client_auth_filter.cc +10 -9
- data/src/core/lib/security/transport/secure_endpoint.cc +7 -1
- data/src/core/lib/security/util/json_util.cc +12 -13
- data/src/core/lib/slice/slice.cc +38 -1
- data/src/core/lib/slice/slice_internal.h +1 -0
- data/src/core/lib/surface/call.cc +52 -53
- data/src/core/lib/surface/call.h +2 -1
- data/src/core/lib/surface/channel.cc +28 -20
- data/src/core/lib/surface/channel.h +12 -2
- data/src/core/lib/surface/completion_queue.cc +0 -5
- data/src/core/lib/surface/init.cc +1 -1
- data/src/core/lib/surface/server.cc +1102 -1347
- data/src/core/lib/surface/server.h +369 -71
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/authority_override.cc +38 -0
- data/src/core/lib/transport/authority_override.h +32 -0
- data/src/core/lib/transport/connectivity_state.cc +18 -13
- data/src/core/lib/transport/connectivity_state.h +18 -6
- data/src/core/lib/transport/error_utils.cc +13 -0
- data/src/core/lib/transport/error_utils.h +6 -0
- data/src/core/lib/transport/static_metadata.cc +295 -276
- data/src/core/lib/transport/static_metadata.h +80 -73
- data/src/core/lib/transport/transport.h +13 -0
- data/src/core/lib/uri/uri_parser.cc +30 -35
- data/src/core/lib/uri/uri_parser.h +3 -1
- data/src/core/plugin_registry/grpc_plugin_registry.cc +4 -0
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +23 -13
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +24 -0
- data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +2 -0
- data/src/core/tsi/ssl_transport_security.cc +102 -11
- data/src/core/tsi/ssl_transport_security.h +14 -2
- data/src/core/tsi/transport_security_interface.h +5 -0
- data/src/ruby/bin/math_services_pb.rb +4 -4
- data/src/ruby/ext/grpc/extconf.rb +5 -2
- data/src/ruby/ext/grpc/rb_call.c +3 -2
- data/src/ruby/ext/grpc/rb_call.h +4 -0
- data/src/ruby/ext/grpc/rb_call_credentials.c +54 -10
- data/src/ruby/ext/grpc/rb_channel_credentials.c +9 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +2 -2
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +4 -4
- data/src/ruby/lib/grpc/generic/client_stub.rb +1 -1
- data/src/ruby/lib/grpc/generic/interceptors.rb +1 -1
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +2 -2
- data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +5 -0
- data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +28 -12
- data/src/ruby/spec/channel_credentials_spec.rb +10 -0
- data/src/ruby/spec/generic/active_call_spec.rb +19 -8
- data/src/ruby/spec/pb/codegen/grpc/testing/same_package_service_name.proto +27 -0
- data/src/ruby/spec/pb/codegen/grpc/testing/same_ruby_package_service_name.proto +29 -0
- data/src/ruby/spec/pb/codegen/package_option_spec.rb +20 -0
- data/src/ruby/spec/user_agent_spec.rb +74 -0
- data/third_party/abseil-cpp/absl/algorithm/container.h +1727 -0
- data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +161 -0
- data/third_party/abseil-cpp/absl/base/internal/exponential_biased.cc +93 -0
- data/third_party/abseil-cpp/absl/base/internal/exponential_biased.h +130 -0
- data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +620 -0
- data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.h +126 -0
- data/third_party/abseil-cpp/absl/container/fixed_array.h +515 -0
- data/third_party/abseil-cpp/absl/container/flat_hash_set.h +503 -0
- data/third_party/abseil-cpp/absl/container/internal/common.h +202 -0
- data/third_party/abseil-cpp/absl/container/internal/container_memory.h +440 -0
- data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +146 -0
- data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +191 -0
- data/third_party/abseil-cpp/absl/container/internal/hashtable_debug_hooks.h +85 -0
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +269 -0
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +297 -0
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler_force_weak_definition.cc +30 -0
- data/third_party/abseil-cpp/absl/container/internal/have_sse.h +49 -0
- data/third_party/abseil-cpp/absl/container/internal/layout.h +741 -0
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +48 -0
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +1882 -0
- data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +138 -0
- data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.h +32 -0
- data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +1895 -0
- data/third_party/abseil-cpp/absl/debugging/internal/demangle.h +71 -0
- data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +382 -0
- data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +134 -0
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +192 -0
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +125 -0
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +70 -0
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +99 -0
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +248 -0
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_unimplemented-inl.inc +24 -0
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +85 -0
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +346 -0
- data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +128 -0
- data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +194 -0
- data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.h +158 -0
- data/third_party/abseil-cpp/absl/debugging/stacktrace.cc +140 -0
- data/third_party/abseil-cpp/absl/debugging/stacktrace.h +231 -0
- data/third_party/abseil-cpp/absl/debugging/symbolize.cc +25 -0
- data/third_party/abseil-cpp/absl/debugging/symbolize.h +99 -0
- data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +1480 -0
- data/third_party/abseil-cpp/absl/debugging/symbolize_unimplemented.inc +40 -0
- data/third_party/abseil-cpp/absl/debugging/symbolize_win32.inc +81 -0
- data/third_party/abseil-cpp/absl/functional/function_ref.h +139 -0
- data/third_party/abseil-cpp/absl/functional/internal/function_ref.h +106 -0
- data/third_party/abseil-cpp/absl/hash/hash.h +324 -0
- data/third_party/abseil-cpp/absl/hash/internal/city.cc +346 -0
- data/third_party/abseil-cpp/absl/hash/internal/city.h +96 -0
- data/third_party/abseil-cpp/absl/hash/internal/hash.cc +55 -0
- data/third_party/abseil-cpp/absl/hash/internal/hash.h +988 -0
- data/third_party/abseil-cpp/absl/status/status.cc +447 -0
- data/third_party/abseil-cpp/absl/status/status.h +428 -0
- data/third_party/abseil-cpp/absl/status/status_payload_printer.cc +43 -0
- data/third_party/abseil-cpp/absl/status/status_payload_printer.h +51 -0
- data/third_party/abseil-cpp/absl/strings/cord.cc +2019 -0
- data/third_party/abseil-cpp/absl/strings/cord.h +1121 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +151 -0
- data/third_party/abseil-cpp/absl/synchronization/barrier.cc +52 -0
- data/third_party/abseil-cpp/absl/synchronization/barrier.h +79 -0
- data/third_party/abseil-cpp/absl/synchronization/blocking_counter.cc +57 -0
- data/third_party/abseil-cpp/absl/synchronization/blocking_counter.h +99 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +140 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.h +60 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +697 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.h +141 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +155 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/mutex_nonprod.inc +261 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +106 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +115 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +484 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +159 -0
- data/third_party/abseil-cpp/absl/synchronization/mutex.cc +2728 -0
- data/third_party/abseil-cpp/absl/synchronization/mutex.h +1056 -0
- data/third_party/abseil-cpp/absl/synchronization/notification.cc +78 -0
- data/third_party/abseil-cpp/absl/synchronization/notification.h +123 -0
- data/third_party/abseil-cpp/absl/types/bad_variant_access.cc +64 -0
- data/third_party/abseil-cpp/absl/types/bad_variant_access.h +82 -0
- data/third_party/abseil-cpp/absl/types/internal/variant.h +1646 -0
- data/third_party/abseil-cpp/absl/types/variant.h +861 -0
- data/third_party/boringssl-with-bazel/err_data.c +266 -254
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_enum.c +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_int.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/asn_pack.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/f_enum.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/f_int.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/f_string.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c +12 -52
- data/third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h +0 -22
- data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +159 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/mode_wrappers.c +17 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +11 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +2 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c +13 -11
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64.c +24 -23
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.c +20 -16
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/util.c +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +62 -0
- data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +456 -0
- data/third_party/boringssl-with-bazel/src/crypto/hpke/internal.h +192 -0
- data/third_party/boringssl-with-bazel/src/crypto/mem.c +29 -15
- data/third_party/boringssl-with-bazel/src/crypto/pkcs8/internal.h +7 -0
- data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +36 -5
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +0 -29
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +116 -363
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +7 -45
- data/third_party/boringssl-with-bazel/src/crypto/x509/a_strex.c +4 -4
- data/third_party/boringssl-with-bazel/src/crypto/x509/algorithm.c +8 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +4 -4
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509.c +0 -67
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +13 -6
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +10 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +41 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +4 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +28 -9
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +25 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +35 -13
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +0 -154
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_sig.c +20 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +28 -6
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +5 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +74 -35
- data/third_party/boringssl-with-bazel/src/include/openssl/aes.h +16 -4
- data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +52 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +22 -22
- data/third_party/boringssl-with-bazel/src/include/openssl/base.h +2 -2
- data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +69 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +72 -23
- data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +2 -3
- data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +1 -10
- data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +800 -715
- data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +3 -3
- data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +9 -2
- data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +2 -2
- data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +9 -0
- data/third_party/boringssl-with-bazel/src/ssl/internal.h +21 -14
- data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +7 -7
- data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +3 -6
- data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +38 -0
- data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +4 -24
- data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +5 -5
- data/third_party/boringssl-with-bazel/src/ssl/t1_enc.cc +45 -24
- data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +34 -9
- data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +31 -21
- data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +17 -9
- data/third_party/boringssl-with-bazel/src/ssl/tls_record.cc +5 -3
- data/third_party/re2/re2/bitmap256.h +117 -0
- data/third_party/re2/re2/bitstate.cc +385 -0
- data/third_party/re2/re2/compile.cc +1279 -0
- data/third_party/re2/re2/dfa.cc +2130 -0
- data/third_party/re2/re2/filtered_re2.cc +121 -0
- data/third_party/re2/re2/filtered_re2.h +109 -0
- data/third_party/re2/re2/mimics_pcre.cc +197 -0
- data/third_party/re2/re2/nfa.cc +713 -0
- data/third_party/re2/re2/onepass.cc +623 -0
- data/third_party/re2/re2/parse.cc +2464 -0
- data/third_party/re2/re2/perl_groups.cc +119 -0
- data/third_party/re2/re2/pod_array.h +55 -0
- data/third_party/re2/re2/prefilter.cc +710 -0
- data/third_party/re2/re2/prefilter.h +108 -0
- data/third_party/re2/re2/prefilter_tree.cc +407 -0
- data/third_party/re2/re2/prefilter_tree.h +139 -0
- data/third_party/re2/re2/prog.cc +988 -0
- data/third_party/re2/re2/prog.h +436 -0
- data/third_party/re2/re2/re2.cc +1362 -0
- data/third_party/re2/re2/re2.h +1002 -0
- data/third_party/re2/re2/regexp.cc +980 -0
- data/third_party/re2/re2/regexp.h +659 -0
- data/third_party/re2/re2/set.cc +154 -0
- data/third_party/re2/re2/set.h +80 -0
- data/third_party/re2/re2/simplify.cc +657 -0
- data/third_party/re2/re2/sparse_array.h +392 -0
- data/third_party/re2/re2/sparse_set.h +264 -0
- data/third_party/re2/re2/stringpiece.cc +65 -0
- data/third_party/re2/re2/stringpiece.h +210 -0
- data/third_party/re2/re2/tostring.cc +351 -0
- data/third_party/re2/re2/unicode_casefold.cc +582 -0
- data/third_party/re2/re2/unicode_casefold.h +78 -0
- data/third_party/re2/re2/unicode_groups.cc +6269 -0
- data/third_party/re2/re2/unicode_groups.h +67 -0
- data/third_party/re2/re2/walker-inl.h +246 -0
- data/third_party/re2/util/benchmark.h +156 -0
- data/third_party/re2/util/flags.h +26 -0
- data/third_party/re2/util/logging.h +109 -0
- data/third_party/re2/util/malloc_counter.h +19 -0
- data/third_party/re2/util/mix.h +41 -0
- data/third_party/re2/util/mutex.h +148 -0
- data/third_party/re2/util/pcre.cc +1025 -0
- data/third_party/re2/util/pcre.h +681 -0
- data/third_party/re2/util/rune.cc +260 -0
- data/third_party/re2/util/strutil.cc +149 -0
- data/third_party/re2/util/strutil.h +21 -0
- data/third_party/re2/util/test.h +50 -0
- data/third_party/re2/util/utf.h +44 -0
- data/third_party/re2/util/util.h +42 -0
- data/third_party/upb/upb/decode.c +517 -505
- data/third_party/upb/upb/encode.c +165 -123
- data/third_party/upb/upb/msg.c +130 -64
- data/third_party/upb/upb/msg.h +418 -14
- data/third_party/upb/upb/port_def.inc +35 -6
- data/third_party/upb/upb/port_undef.inc +8 -1
- data/third_party/upb/upb/table.c +53 -86
- data/third_party/upb/upb/table.int.h +11 -52
- data/third_party/upb/upb/upb.c +151 -125
- data/third_party/upb/upb/upb.h +91 -147
- data/third_party/upb/upb/upb.hpp +88 -0
- metadata +308 -148
- data/src/core/ext/filters/client_channel/xds/xds_api.cc +0 -1906
- data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.c +0 -21
- data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.h +0 -35
- data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.c +0 -114
- data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.h +0 -418
- data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.c +0 -72
- data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.h +0 -197
- data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.c +0 -105
- data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.h +0 -378
- data/src/core/ext/upb-generated/envoy/api/v2/cds.upb.h +0 -53
- data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.c +0 -403
- data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.h +0 -1447
- data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.c +0 -74
- data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.h +0 -218
- data/src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.h +0 -69
- data/src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.h +0 -305
- data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.c +0 -112
- data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.h +0 -328
- data/src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.h +0 -78
- data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c +0 -313
- data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.h +0 -897
- data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.c +0 -96
- data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.h +0 -322
- data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.c +0 -34
- data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.h +0 -72
- data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.c +0 -197
- data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.h +0 -642
- data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.c +0 -172
- data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.h +0 -673
- data/src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.h +0 -80
- data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.c +0 -152
- data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.h +0 -518
- data/src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.h +0 -89
- data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c +0 -129
- data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.h +0 -392
- data/src/core/ext/upb-generated/envoy/api/v2/eds.upb.h +0 -53
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.c +0 -92
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.h +0 -240
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.c +0 -18
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.h +0 -33
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.c +0 -91
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.h +0 -266
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.c +0 -112
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.h +0 -324
- data/src/core/ext/upb-generated/envoy/api/v2/lds.upb.h +0 -53
- data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.c +0 -109
- data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.h +0 -399
- data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.c +0 -18
- data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.h +0 -33
- data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.c +0 -145
- data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.h +0 -527
- data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.c +0 -43
- data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.h +0 -112
- data/src/core/ext/upb-generated/envoy/api/v2/rds.upb.h +0 -53
- data/src/core/ext/upb-generated/envoy/api/v2/route.upb.c +0 -63
- data/src/core/ext/upb-generated/envoy/api/v2/route.upb.h +0 -199
- data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.c +0 -18
- data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.h +0 -33
- data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.c +0 -815
- data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.h +0 -3032
- data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.c +0 -59
- data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.h +0 -134
- data/src/core/ext/upb-generated/envoy/api/v2/srds.upb.h +0 -53
- data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.c +0 -228
- data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.h +0 -725
- data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.c +0 -316
- data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.h +0 -1132
- data/src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.h +0 -65
- data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.c +0 -51
- data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.h +0 -125
- data/src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.h +0 -50
- data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.c +0 -54
- data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h +0 -134
- data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.c +0 -63
- data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.h +0 -144
- data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.c +0 -53
- data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.h +0 -133
- data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.c +0 -88
- data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.h +0 -258
- data/src/core/ext/upb-generated/envoy/type/percent.upb.h +0 -87
- data/src/core/ext/upb-generated/envoy/type/range.upb.h +0 -112
- data/src/core/ext/upb-generated/envoy/type/semantic_version.upb.h +0 -62
- data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.c +0 -89
- data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.h +0 -249
- data/src/core/lib/security/transport/target_authority_table.cc +0 -75
- data/src/core/lib/security/transport/target_authority_table.h +0 -40
- data/src/core/lib/slice/slice_hash_table.h +0 -199
- data/src/core/lib/slice/slice_weak_hash_table.h +0 -102
- data/third_party/upb/upb/generated_util.h +0 -105
@@ -0,0 +1,146 @@
|
|
1
|
+
// Copyright 2018 The Abseil Authors.
|
2
|
+
//
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
// you may not use this file except in compliance with the License.
|
5
|
+
// You may obtain a copy of the License at
|
6
|
+
//
|
7
|
+
// https://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
//
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
10
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
// See the License for the specific language governing permissions and
|
13
|
+
// limitations under the License.
|
14
|
+
//
|
15
|
+
// Define the default Hash and Eq functions for SwissTable containers.
|
16
|
+
//
|
17
|
+
// std::hash<T> and std::equal_to<T> are not appropriate hash and equal
|
18
|
+
// functions for SwissTable containers. There are two reasons for this.
|
19
|
+
//
|
20
|
+
// SwissTable containers are power of 2 sized containers:
|
21
|
+
//
|
22
|
+
// This means they use the lower bits of the hash value to find the slot for
|
23
|
+
// each entry. The typical hash function for integral types is the identity.
|
24
|
+
// This is a very weak hash function for SwissTable and any power of 2 sized
|
25
|
+
// hashtable implementation which will lead to excessive collisions. For
|
26
|
+
// SwissTable we use murmur3 style mixing to reduce collisions to a minimum.
|
27
|
+
//
|
28
|
+
// SwissTable containers support heterogeneous lookup:
|
29
|
+
//
|
30
|
+
// In order to make heterogeneous lookup work, hash and equal functions must be
|
31
|
+
// polymorphic. At the same time they have to satisfy the same requirements the
|
32
|
+
// C++ standard imposes on hash functions and equality operators. That is:
|
33
|
+
//
|
34
|
+
// if hash_default_eq<T>(a, b) returns true for any a and b of type T, then
|
35
|
+
// hash_default_hash<T>(a) must equal hash_default_hash<T>(b)
|
36
|
+
//
|
37
|
+
// For SwissTable containers this requirement is relaxed to allow a and b of
|
38
|
+
// any and possibly different types. Note that like the standard the hash and
|
39
|
+
// equal functions are still bound to T. This is important because some type U
|
40
|
+
// can be hashed by/tested for equality differently depending on T. A notable
|
41
|
+
// example is `const char*`. `const char*` is treated as a c-style string when
|
42
|
+
// the hash function is hash<std::string> but as a pointer when the hash
|
43
|
+
// function is hash<void*>.
|
44
|
+
//
|
45
|
+
#ifndef ABSL_CONTAINER_INTERNAL_HASH_FUNCTION_DEFAULTS_H_
|
46
|
+
#define ABSL_CONTAINER_INTERNAL_HASH_FUNCTION_DEFAULTS_H_
|
47
|
+
|
48
|
+
#include <stdint.h>
|
49
|
+
#include <cstddef>
|
50
|
+
#include <memory>
|
51
|
+
#include <string>
|
52
|
+
#include <type_traits>
|
53
|
+
|
54
|
+
#include "absl/base/config.h"
|
55
|
+
#include "absl/hash/hash.h"
|
56
|
+
#include "absl/strings/string_view.h"
|
57
|
+
|
58
|
+
namespace absl {
|
59
|
+
ABSL_NAMESPACE_BEGIN
|
60
|
+
namespace container_internal {
|
61
|
+
|
62
|
+
// The hash of an object of type T is computed by using absl::Hash.
|
63
|
+
template <class T, class E = void>
|
64
|
+
struct HashEq {
|
65
|
+
using Hash = absl::Hash<T>;
|
66
|
+
using Eq = std::equal_to<T>;
|
67
|
+
};
|
68
|
+
|
69
|
+
struct StringHash {
|
70
|
+
using is_transparent = void;
|
71
|
+
|
72
|
+
size_t operator()(absl::string_view v) const {
|
73
|
+
return absl::Hash<absl::string_view>{}(v);
|
74
|
+
}
|
75
|
+
};
|
76
|
+
|
77
|
+
// Supports heterogeneous lookup for string-like elements.
|
78
|
+
struct StringHashEq {
|
79
|
+
using Hash = StringHash;
|
80
|
+
struct Eq {
|
81
|
+
using is_transparent = void;
|
82
|
+
bool operator()(absl::string_view lhs, absl::string_view rhs) const {
|
83
|
+
return lhs == rhs;
|
84
|
+
}
|
85
|
+
};
|
86
|
+
};
|
87
|
+
|
88
|
+
template <>
|
89
|
+
struct HashEq<std::string> : StringHashEq {};
|
90
|
+
template <>
|
91
|
+
struct HashEq<absl::string_view> : StringHashEq {};
|
92
|
+
|
93
|
+
// Supports heterogeneous lookup for pointers and smart pointers.
|
94
|
+
template <class T>
|
95
|
+
struct HashEq<T*> {
|
96
|
+
struct Hash {
|
97
|
+
using is_transparent = void;
|
98
|
+
template <class U>
|
99
|
+
size_t operator()(const U& ptr) const {
|
100
|
+
return absl::Hash<const T*>{}(HashEq::ToPtr(ptr));
|
101
|
+
}
|
102
|
+
};
|
103
|
+
struct Eq {
|
104
|
+
using is_transparent = void;
|
105
|
+
template <class A, class B>
|
106
|
+
bool operator()(const A& a, const B& b) const {
|
107
|
+
return HashEq::ToPtr(a) == HashEq::ToPtr(b);
|
108
|
+
}
|
109
|
+
};
|
110
|
+
|
111
|
+
private:
|
112
|
+
static const T* ToPtr(const T* ptr) { return ptr; }
|
113
|
+
template <class U, class D>
|
114
|
+
static const T* ToPtr(const std::unique_ptr<U, D>& ptr) {
|
115
|
+
return ptr.get();
|
116
|
+
}
|
117
|
+
template <class U>
|
118
|
+
static const T* ToPtr(const std::shared_ptr<U>& ptr) {
|
119
|
+
return ptr.get();
|
120
|
+
}
|
121
|
+
};
|
122
|
+
|
123
|
+
template <class T, class D>
|
124
|
+
struct HashEq<std::unique_ptr<T, D>> : HashEq<T*> {};
|
125
|
+
template <class T>
|
126
|
+
struct HashEq<std::shared_ptr<T>> : HashEq<T*> {};
|
127
|
+
|
128
|
+
// This header's visibility is restricted. If you need to access the default
|
129
|
+
// hasher please use the container's ::hasher alias instead.
|
130
|
+
//
|
131
|
+
// Example: typename Hash = typename absl::flat_hash_map<K, V>::hasher
|
132
|
+
template <class T>
|
133
|
+
using hash_default_hash = typename container_internal::HashEq<T>::Hash;
|
134
|
+
|
135
|
+
// This header's visibility is restricted. If you need to access the default
|
136
|
+
// key equal please use the container's ::key_equal alias instead.
|
137
|
+
//
|
138
|
+
// Example: typename Eq = typename absl::flat_hash_map<K, V, Hash>::key_equal
|
139
|
+
template <class T>
|
140
|
+
using hash_default_eq = typename container_internal::HashEq<T>::Eq;
|
141
|
+
|
142
|
+
} // namespace container_internal
|
143
|
+
ABSL_NAMESPACE_END
|
144
|
+
} // namespace absl
|
145
|
+
|
146
|
+
#endif // ABSL_CONTAINER_INTERNAL_HASH_FUNCTION_DEFAULTS_H_
|
@@ -0,0 +1,191 @@
|
|
1
|
+
// Copyright 2018 The Abseil Authors.
|
2
|
+
//
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
// you may not use this file except in compliance with the License.
|
5
|
+
// You may obtain a copy of the License at
|
6
|
+
//
|
7
|
+
// https://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
//
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
10
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
// See the License for the specific language governing permissions and
|
13
|
+
// limitations under the License.
|
14
|
+
|
15
|
+
#ifndef ABSL_CONTAINER_INTERNAL_HASH_POLICY_TRAITS_H_
|
16
|
+
#define ABSL_CONTAINER_INTERNAL_HASH_POLICY_TRAITS_H_
|
17
|
+
|
18
|
+
#include <cstddef>
|
19
|
+
#include <memory>
|
20
|
+
#include <type_traits>
|
21
|
+
#include <utility>
|
22
|
+
|
23
|
+
#include "absl/meta/type_traits.h"
|
24
|
+
|
25
|
+
namespace absl {
|
26
|
+
ABSL_NAMESPACE_BEGIN
|
27
|
+
namespace container_internal {
|
28
|
+
|
29
|
+
// Defines how slots are initialized/destroyed/moved.
|
30
|
+
template <class Policy, class = void>
|
31
|
+
struct hash_policy_traits {
|
32
|
+
private:
|
33
|
+
struct ReturnKey {
|
34
|
+
// We return `Key` here.
|
35
|
+
// When Key=T&, we forward the lvalue reference.
|
36
|
+
// When Key=T, we return by value to avoid a dangling reference.
|
37
|
+
// eg, for string_hash_map.
|
38
|
+
template <class Key, class... Args>
|
39
|
+
Key operator()(Key&& k, const Args&...) const {
|
40
|
+
return std::forward<Key>(k);
|
41
|
+
}
|
42
|
+
};
|
43
|
+
|
44
|
+
template <class P = Policy, class = void>
|
45
|
+
struct ConstantIteratorsImpl : std::false_type {};
|
46
|
+
|
47
|
+
template <class P>
|
48
|
+
struct ConstantIteratorsImpl<P, absl::void_t<typename P::constant_iterators>>
|
49
|
+
: P::constant_iterators {};
|
50
|
+
|
51
|
+
public:
|
52
|
+
// The actual object stored in the hash table.
|
53
|
+
using slot_type = typename Policy::slot_type;
|
54
|
+
|
55
|
+
// The type of the keys stored in the hashtable.
|
56
|
+
using key_type = typename Policy::key_type;
|
57
|
+
|
58
|
+
// The argument type for insertions into the hashtable. This is different
|
59
|
+
// from value_type for increased performance. See initializer_list constructor
|
60
|
+
// and insert() member functions for more details.
|
61
|
+
using init_type = typename Policy::init_type;
|
62
|
+
|
63
|
+
using reference = decltype(Policy::element(std::declval<slot_type*>()));
|
64
|
+
using pointer = typename std::remove_reference<reference>::type*;
|
65
|
+
using value_type = typename std::remove_reference<reference>::type;
|
66
|
+
|
67
|
+
// Policies can set this variable to tell raw_hash_set that all iterators
|
68
|
+
// should be constant, even `iterator`. This is useful for set-like
|
69
|
+
// containers.
|
70
|
+
// Defaults to false if not provided by the policy.
|
71
|
+
using constant_iterators = ConstantIteratorsImpl<>;
|
72
|
+
|
73
|
+
// PRECONDITION: `slot` is UNINITIALIZED
|
74
|
+
// POSTCONDITION: `slot` is INITIALIZED
|
75
|
+
template <class Alloc, class... Args>
|
76
|
+
static void construct(Alloc* alloc, slot_type* slot, Args&&... args) {
|
77
|
+
Policy::construct(alloc, slot, std::forward<Args>(args)...);
|
78
|
+
}
|
79
|
+
|
80
|
+
// PRECONDITION: `slot` is INITIALIZED
|
81
|
+
// POSTCONDITION: `slot` is UNINITIALIZED
|
82
|
+
template <class Alloc>
|
83
|
+
static void destroy(Alloc* alloc, slot_type* slot) {
|
84
|
+
Policy::destroy(alloc, slot);
|
85
|
+
}
|
86
|
+
|
87
|
+
// Transfers the `old_slot` to `new_slot`. Any memory allocated by the
|
88
|
+
// allocator inside `old_slot` to `new_slot` can be transferred.
|
89
|
+
//
|
90
|
+
// OPTIONAL: defaults to:
|
91
|
+
//
|
92
|
+
// clone(new_slot, std::move(*old_slot));
|
93
|
+
// destroy(old_slot);
|
94
|
+
//
|
95
|
+
// PRECONDITION: `new_slot` is UNINITIALIZED and `old_slot` is INITIALIZED
|
96
|
+
// POSTCONDITION: `new_slot` is INITIALIZED and `old_slot` is
|
97
|
+
// UNINITIALIZED
|
98
|
+
template <class Alloc>
|
99
|
+
static void transfer(Alloc* alloc, slot_type* new_slot, slot_type* old_slot) {
|
100
|
+
transfer_impl(alloc, new_slot, old_slot, 0);
|
101
|
+
}
|
102
|
+
|
103
|
+
// PRECONDITION: `slot` is INITIALIZED
|
104
|
+
// POSTCONDITION: `slot` is INITIALIZED
|
105
|
+
template <class P = Policy>
|
106
|
+
static auto element(slot_type* slot) -> decltype(P::element(slot)) {
|
107
|
+
return P::element(slot);
|
108
|
+
}
|
109
|
+
|
110
|
+
// Returns the amount of memory owned by `slot`, exclusive of `sizeof(*slot)`.
|
111
|
+
//
|
112
|
+
// If `slot` is nullptr, returns the constant amount of memory owned by any
|
113
|
+
// full slot or -1 if slots own variable amounts of memory.
|
114
|
+
//
|
115
|
+
// PRECONDITION: `slot` is INITIALIZED or nullptr
|
116
|
+
template <class P = Policy>
|
117
|
+
static size_t space_used(const slot_type* slot) {
|
118
|
+
return P::space_used(slot);
|
119
|
+
}
|
120
|
+
|
121
|
+
// Provides generalized access to the key for elements, both for elements in
|
122
|
+
// the table and for elements that have not yet been inserted (or even
|
123
|
+
// constructed). We would like an API that allows us to say: `key(args...)`
|
124
|
+
// but we cannot do that for all cases, so we use this more general API that
|
125
|
+
// can be used for many things, including the following:
|
126
|
+
//
|
127
|
+
// - Given an element in a table, get its key.
|
128
|
+
// - Given an element initializer, get its key.
|
129
|
+
// - Given `emplace()` arguments, get the element key.
|
130
|
+
//
|
131
|
+
// Implementations of this must adhere to a very strict technical
|
132
|
+
// specification around aliasing and consuming arguments:
|
133
|
+
//
|
134
|
+
// Let `value_type` be the result type of `element()` without ref- and
|
135
|
+
// cv-qualifiers. The first argument is a functor, the rest are constructor
|
136
|
+
// arguments for `value_type`. Returns `std::forward<F>(f)(k, xs...)`, where
|
137
|
+
// `k` is the element key, and `xs...` are the new constructor arguments for
|
138
|
+
// `value_type`. It's allowed for `k` to alias `xs...`, and for both to alias
|
139
|
+
// `ts...`. The key won't be touched once `xs...` are used to construct an
|
140
|
+
// element; `ts...` won't be touched at all, which allows `apply()` to consume
|
141
|
+
// any rvalues among them.
|
142
|
+
//
|
143
|
+
// If `value_type` is constructible from `Ts&&...`, `Policy::apply()` must not
|
144
|
+
// trigger a hard compile error unless it originates from `f`. In other words,
|
145
|
+
// `Policy::apply()` must be SFINAE-friendly. If `value_type` is not
|
146
|
+
// constructible from `Ts&&...`, either SFINAE or a hard compile error is OK.
|
147
|
+
//
|
148
|
+
// If `Ts...` is `[cv] value_type[&]` or `[cv] init_type[&]`,
|
149
|
+
// `Policy::apply()` must work. A compile error is not allowed, SFINAE or not.
|
150
|
+
template <class F, class... Ts, class P = Policy>
|
151
|
+
static auto apply(F&& f, Ts&&... ts)
|
152
|
+
-> decltype(P::apply(std::forward<F>(f), std::forward<Ts>(ts)...)) {
|
153
|
+
return P::apply(std::forward<F>(f), std::forward<Ts>(ts)...);
|
154
|
+
}
|
155
|
+
|
156
|
+
// Returns the "key" portion of the slot.
|
157
|
+
// Used for node handle manipulation.
|
158
|
+
template <class P = Policy>
|
159
|
+
static auto key(slot_type* slot)
|
160
|
+
-> decltype(P::apply(ReturnKey(), element(slot))) {
|
161
|
+
return P::apply(ReturnKey(), element(slot));
|
162
|
+
}
|
163
|
+
|
164
|
+
// Returns the "value" (as opposed to the "key") portion of the element. Used
|
165
|
+
// by maps to implement `operator[]`, `at()` and `insert_or_assign()`.
|
166
|
+
template <class T, class P = Policy>
|
167
|
+
static auto value(T* elem) -> decltype(P::value(elem)) {
|
168
|
+
return P::value(elem);
|
169
|
+
}
|
170
|
+
|
171
|
+
private:
|
172
|
+
// Use auto -> decltype as an enabler.
|
173
|
+
template <class Alloc, class P = Policy>
|
174
|
+
static auto transfer_impl(Alloc* alloc, slot_type* new_slot,
|
175
|
+
slot_type* old_slot, int)
|
176
|
+
-> decltype((void)P::transfer(alloc, new_slot, old_slot)) {
|
177
|
+
P::transfer(alloc, new_slot, old_slot);
|
178
|
+
}
|
179
|
+
template <class Alloc>
|
180
|
+
static void transfer_impl(Alloc* alloc, slot_type* new_slot,
|
181
|
+
slot_type* old_slot, char) {
|
182
|
+
construct(alloc, new_slot, std::move(element(old_slot)));
|
183
|
+
destroy(alloc, old_slot);
|
184
|
+
}
|
185
|
+
};
|
186
|
+
|
187
|
+
} // namespace container_internal
|
188
|
+
ABSL_NAMESPACE_END
|
189
|
+
} // namespace absl
|
190
|
+
|
191
|
+
#endif // ABSL_CONTAINER_INTERNAL_HASH_POLICY_TRAITS_H_
|
@@ -0,0 +1,85 @@
|
|
1
|
+
// Copyright 2018 The Abseil Authors.
|
2
|
+
//
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
// you may not use this file except in compliance with the License.
|
5
|
+
// You may obtain a copy of the License at
|
6
|
+
//
|
7
|
+
// https://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
//
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
10
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
// See the License for the specific language governing permissions and
|
13
|
+
// limitations under the License.
|
14
|
+
//
|
15
|
+
// Provides the internal API for hashtable_debug.h.
|
16
|
+
|
17
|
+
#ifndef ABSL_CONTAINER_INTERNAL_HASHTABLE_DEBUG_HOOKS_H_
|
18
|
+
#define ABSL_CONTAINER_INTERNAL_HASHTABLE_DEBUG_HOOKS_H_
|
19
|
+
|
20
|
+
#include <cstddef>
|
21
|
+
|
22
|
+
#include <algorithm>
|
23
|
+
#include <type_traits>
|
24
|
+
#include <vector>
|
25
|
+
|
26
|
+
#include "absl/base/config.h"
|
27
|
+
|
28
|
+
namespace absl {
|
29
|
+
ABSL_NAMESPACE_BEGIN
|
30
|
+
namespace container_internal {
|
31
|
+
namespace hashtable_debug_internal {
|
32
|
+
|
33
|
+
// If it is a map, call get<0>().
|
34
|
+
using std::get;
|
35
|
+
template <typename T, typename = typename T::mapped_type>
|
36
|
+
auto GetKey(const typename T::value_type& pair, int) -> decltype(get<0>(pair)) {
|
37
|
+
return get<0>(pair);
|
38
|
+
}
|
39
|
+
|
40
|
+
// If it is not a map, return the value directly.
|
41
|
+
template <typename T>
|
42
|
+
const typename T::key_type& GetKey(const typename T::key_type& key, char) {
|
43
|
+
return key;
|
44
|
+
}
|
45
|
+
|
46
|
+
// Containers should specialize this to provide debug information for that
|
47
|
+
// container.
|
48
|
+
template <class Container, typename Enabler = void>
|
49
|
+
struct HashtableDebugAccess {
|
50
|
+
// Returns the number of probes required to find `key` in `c`. The "number of
|
51
|
+
// probes" is a concept that can vary by container. Implementations should
|
52
|
+
// return 0 when `key` was found in the minimum number of operations and
|
53
|
+
// should increment the result for each non-trivial operation required to find
|
54
|
+
// `key`.
|
55
|
+
//
|
56
|
+
// The default implementation uses the bucket api from the standard and thus
|
57
|
+
// works for `std::unordered_*` containers.
|
58
|
+
static size_t GetNumProbes(const Container& c,
|
59
|
+
const typename Container::key_type& key) {
|
60
|
+
if (!c.bucket_count()) return {};
|
61
|
+
size_t num_probes = 0;
|
62
|
+
size_t bucket = c.bucket(key);
|
63
|
+
for (auto it = c.begin(bucket), e = c.end(bucket);; ++it, ++num_probes) {
|
64
|
+
if (it == e) return num_probes;
|
65
|
+
if (c.key_eq()(key, GetKey<Container>(*it, 0))) return num_probes;
|
66
|
+
}
|
67
|
+
}
|
68
|
+
|
69
|
+
// Returns the number of bytes requested from the allocator by the container
|
70
|
+
// and not freed.
|
71
|
+
//
|
72
|
+
// static size_t AllocatedByteSize(const Container& c);
|
73
|
+
|
74
|
+
// Returns a tight lower bound for AllocatedByteSize(c) where `c` is of type
|
75
|
+
// `Container` and `c.size()` is equal to `num_elements`.
|
76
|
+
//
|
77
|
+
// static size_t LowerBoundAllocatedByteSize(size_t num_elements);
|
78
|
+
};
|
79
|
+
|
80
|
+
} // namespace hashtable_debug_internal
|
81
|
+
} // namespace container_internal
|
82
|
+
ABSL_NAMESPACE_END
|
83
|
+
} // namespace absl
|
84
|
+
|
85
|
+
#endif // ABSL_CONTAINER_INTERNAL_HASHTABLE_DEBUG_HOOKS_H_
|
@@ -0,0 +1,269 @@
|
|
1
|
+
// Copyright 2018 The Abseil Authors.
|
2
|
+
//
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
// you may not use this file except in compliance with the License.
|
5
|
+
// You may obtain a copy of the License at
|
6
|
+
//
|
7
|
+
// https://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
//
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
10
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
// See the License for the specific language governing permissions and
|
13
|
+
// limitations under the License.
|
14
|
+
|
15
|
+
#include "absl/container/internal/hashtablez_sampler.h"
|
16
|
+
|
17
|
+
#include <atomic>
|
18
|
+
#include <cassert>
|
19
|
+
#include <cmath>
|
20
|
+
#include <functional>
|
21
|
+
#include <limits>
|
22
|
+
|
23
|
+
#include "absl/base/attributes.h"
|
24
|
+
#include "absl/base/internal/exponential_biased.h"
|
25
|
+
#include "absl/container/internal/have_sse.h"
|
26
|
+
#include "absl/debugging/stacktrace.h"
|
27
|
+
#include "absl/memory/memory.h"
|
28
|
+
#include "absl/synchronization/mutex.h"
|
29
|
+
|
30
|
+
namespace absl {
|
31
|
+
ABSL_NAMESPACE_BEGIN
|
32
|
+
namespace container_internal {
|
33
|
+
constexpr int HashtablezInfo::kMaxStackDepth;
|
34
|
+
|
35
|
+
namespace {
|
36
|
+
ABSL_CONST_INIT std::atomic<bool> g_hashtablez_enabled{
|
37
|
+
false
|
38
|
+
};
|
39
|
+
ABSL_CONST_INIT std::atomic<int32_t> g_hashtablez_sample_parameter{1 << 10};
|
40
|
+
ABSL_CONST_INIT std::atomic<int32_t> g_hashtablez_max_samples{1 << 20};
|
41
|
+
|
42
|
+
#if defined(ABSL_INTERNAL_HASHTABLEZ_SAMPLE)
|
43
|
+
ABSL_PER_THREAD_TLS_KEYWORD absl::base_internal::ExponentialBiased
|
44
|
+
g_exponential_biased_generator;
|
45
|
+
#endif
|
46
|
+
|
47
|
+
} // namespace
|
48
|
+
|
49
|
+
#if defined(ABSL_INTERNAL_HASHTABLEZ_SAMPLE)
|
50
|
+
ABSL_PER_THREAD_TLS_KEYWORD int64_t global_next_sample = 0;
|
51
|
+
#endif // defined(ABSL_INTERNAL_HASHTABLEZ_SAMPLE)
|
52
|
+
|
53
|
+
HashtablezSampler& HashtablezSampler::Global() {
|
54
|
+
static auto* sampler = new HashtablezSampler();
|
55
|
+
return *sampler;
|
56
|
+
}
|
57
|
+
|
58
|
+
HashtablezSampler::DisposeCallback HashtablezSampler::SetDisposeCallback(
|
59
|
+
DisposeCallback f) {
|
60
|
+
return dispose_.exchange(f, std::memory_order_relaxed);
|
61
|
+
}
|
62
|
+
|
63
|
+
HashtablezInfo::HashtablezInfo() { PrepareForSampling(); }
|
64
|
+
HashtablezInfo::~HashtablezInfo() = default;
|
65
|
+
|
66
|
+
void HashtablezInfo::PrepareForSampling() {
|
67
|
+
capacity.store(0, std::memory_order_relaxed);
|
68
|
+
size.store(0, std::memory_order_relaxed);
|
69
|
+
num_erases.store(0, std::memory_order_relaxed);
|
70
|
+
max_probe_length.store(0, std::memory_order_relaxed);
|
71
|
+
total_probe_length.store(0, std::memory_order_relaxed);
|
72
|
+
hashes_bitwise_or.store(0, std::memory_order_relaxed);
|
73
|
+
hashes_bitwise_and.store(~size_t{}, std::memory_order_relaxed);
|
74
|
+
|
75
|
+
create_time = absl::Now();
|
76
|
+
// The inliner makes hardcoded skip_count difficult (especially when combined
|
77
|
+
// with LTO). We use the ability to exclude stacks by regex when encoding
|
78
|
+
// instead.
|
79
|
+
depth = absl::GetStackTrace(stack, HashtablezInfo::kMaxStackDepth,
|
80
|
+
/* skip_count= */ 0);
|
81
|
+
dead = nullptr;
|
82
|
+
}
|
83
|
+
|
84
|
+
HashtablezSampler::HashtablezSampler()
|
85
|
+
: dropped_samples_(0), size_estimate_(0), all_(nullptr), dispose_(nullptr) {
|
86
|
+
absl::MutexLock l(&graveyard_.init_mu);
|
87
|
+
graveyard_.dead = &graveyard_;
|
88
|
+
}
|
89
|
+
|
90
|
+
HashtablezSampler::~HashtablezSampler() {
|
91
|
+
HashtablezInfo* s = all_.load(std::memory_order_acquire);
|
92
|
+
while (s != nullptr) {
|
93
|
+
HashtablezInfo* next = s->next;
|
94
|
+
delete s;
|
95
|
+
s = next;
|
96
|
+
}
|
97
|
+
}
|
98
|
+
|
99
|
+
void HashtablezSampler::PushNew(HashtablezInfo* sample) {
|
100
|
+
sample->next = all_.load(std::memory_order_relaxed);
|
101
|
+
while (!all_.compare_exchange_weak(sample->next, sample,
|
102
|
+
std::memory_order_release,
|
103
|
+
std::memory_order_relaxed)) {
|
104
|
+
}
|
105
|
+
}
|
106
|
+
|
107
|
+
void HashtablezSampler::PushDead(HashtablezInfo* sample) {
|
108
|
+
if (auto* dispose = dispose_.load(std::memory_order_relaxed)) {
|
109
|
+
dispose(*sample);
|
110
|
+
}
|
111
|
+
|
112
|
+
absl::MutexLock graveyard_lock(&graveyard_.init_mu);
|
113
|
+
absl::MutexLock sample_lock(&sample->init_mu);
|
114
|
+
sample->dead = graveyard_.dead;
|
115
|
+
graveyard_.dead = sample;
|
116
|
+
}
|
117
|
+
|
118
|
+
HashtablezInfo* HashtablezSampler::PopDead() {
|
119
|
+
absl::MutexLock graveyard_lock(&graveyard_.init_mu);
|
120
|
+
|
121
|
+
// The list is circular, so eventually it collapses down to
|
122
|
+
// graveyard_.dead == &graveyard_
|
123
|
+
// when it is empty.
|
124
|
+
HashtablezInfo* sample = graveyard_.dead;
|
125
|
+
if (sample == &graveyard_) return nullptr;
|
126
|
+
|
127
|
+
absl::MutexLock sample_lock(&sample->init_mu);
|
128
|
+
graveyard_.dead = sample->dead;
|
129
|
+
sample->PrepareForSampling();
|
130
|
+
return sample;
|
131
|
+
}
|
132
|
+
|
133
|
+
HashtablezInfo* HashtablezSampler::Register() {
|
134
|
+
int64_t size = size_estimate_.fetch_add(1, std::memory_order_relaxed);
|
135
|
+
if (size > g_hashtablez_max_samples.load(std::memory_order_relaxed)) {
|
136
|
+
size_estimate_.fetch_sub(1, std::memory_order_relaxed);
|
137
|
+
dropped_samples_.fetch_add(1, std::memory_order_relaxed);
|
138
|
+
return nullptr;
|
139
|
+
}
|
140
|
+
|
141
|
+
HashtablezInfo* sample = PopDead();
|
142
|
+
if (sample == nullptr) {
|
143
|
+
// Resurrection failed. Hire a new warlock.
|
144
|
+
sample = new HashtablezInfo();
|
145
|
+
PushNew(sample);
|
146
|
+
}
|
147
|
+
|
148
|
+
return sample;
|
149
|
+
}
|
150
|
+
|
151
|
+
void HashtablezSampler::Unregister(HashtablezInfo* sample) {
|
152
|
+
PushDead(sample);
|
153
|
+
size_estimate_.fetch_sub(1, std::memory_order_relaxed);
|
154
|
+
}
|
155
|
+
|
156
|
+
int64_t HashtablezSampler::Iterate(
|
157
|
+
const std::function<void(const HashtablezInfo& stack)>& f) {
|
158
|
+
HashtablezInfo* s = all_.load(std::memory_order_acquire);
|
159
|
+
while (s != nullptr) {
|
160
|
+
absl::MutexLock l(&s->init_mu);
|
161
|
+
if (s->dead == nullptr) {
|
162
|
+
f(*s);
|
163
|
+
}
|
164
|
+
s = s->next;
|
165
|
+
}
|
166
|
+
|
167
|
+
return dropped_samples_.load(std::memory_order_relaxed);
|
168
|
+
}
|
169
|
+
|
170
|
+
static bool ShouldForceSampling() {
|
171
|
+
enum ForceState {
|
172
|
+
kDontForce,
|
173
|
+
kForce,
|
174
|
+
kUninitialized
|
175
|
+
};
|
176
|
+
ABSL_CONST_INIT static std::atomic<ForceState> global_state{
|
177
|
+
kUninitialized};
|
178
|
+
ForceState state = global_state.load(std::memory_order_relaxed);
|
179
|
+
if (ABSL_PREDICT_TRUE(state == kDontForce)) return false;
|
180
|
+
|
181
|
+
if (state == kUninitialized) {
|
182
|
+
state = AbslContainerInternalSampleEverything() ? kForce : kDontForce;
|
183
|
+
global_state.store(state, std::memory_order_relaxed);
|
184
|
+
}
|
185
|
+
return state == kForce;
|
186
|
+
}
|
187
|
+
|
188
|
+
HashtablezInfo* SampleSlow(int64_t* next_sample) {
|
189
|
+
if (ABSL_PREDICT_FALSE(ShouldForceSampling())) {
|
190
|
+
*next_sample = 1;
|
191
|
+
return HashtablezSampler::Global().Register();
|
192
|
+
}
|
193
|
+
|
194
|
+
#if !defined(ABSL_INTERNAL_HASHTABLEZ_SAMPLE)
|
195
|
+
*next_sample = std::numeric_limits<int64_t>::max();
|
196
|
+
return nullptr;
|
197
|
+
#else
|
198
|
+
bool first = *next_sample < 0;
|
199
|
+
*next_sample = g_exponential_biased_generator.GetStride(
|
200
|
+
g_hashtablez_sample_parameter.load(std::memory_order_relaxed));
|
201
|
+
// Small values of interval are equivalent to just sampling next time.
|
202
|
+
ABSL_ASSERT(*next_sample >= 1);
|
203
|
+
|
204
|
+
// g_hashtablez_enabled can be dynamically flipped, we need to set a threshold
|
205
|
+
// low enough that we will start sampling in a reasonable time, so we just use
|
206
|
+
// the default sampling rate.
|
207
|
+
if (!g_hashtablez_enabled.load(std::memory_order_relaxed)) return nullptr;
|
208
|
+
|
209
|
+
// We will only be negative on our first count, so we should just retry in
|
210
|
+
// that case.
|
211
|
+
if (first) {
|
212
|
+
if (ABSL_PREDICT_TRUE(--*next_sample > 0)) return nullptr;
|
213
|
+
return SampleSlow(next_sample);
|
214
|
+
}
|
215
|
+
|
216
|
+
return HashtablezSampler::Global().Register();
|
217
|
+
#endif
|
218
|
+
}
|
219
|
+
|
220
|
+
void UnsampleSlow(HashtablezInfo* info) {
|
221
|
+
HashtablezSampler::Global().Unregister(info);
|
222
|
+
}
|
223
|
+
|
224
|
+
void RecordInsertSlow(HashtablezInfo* info, size_t hash,
|
225
|
+
size_t distance_from_desired) {
|
226
|
+
// SwissTables probe in groups of 16, so scale this to count items probes and
|
227
|
+
// not offset from desired.
|
228
|
+
size_t probe_length = distance_from_desired;
|
229
|
+
#if SWISSTABLE_HAVE_SSE2
|
230
|
+
probe_length /= 16;
|
231
|
+
#else
|
232
|
+
probe_length /= 8;
|
233
|
+
#endif
|
234
|
+
|
235
|
+
info->hashes_bitwise_and.fetch_and(hash, std::memory_order_relaxed);
|
236
|
+
info->hashes_bitwise_or.fetch_or(hash, std::memory_order_relaxed);
|
237
|
+
info->max_probe_length.store(
|
238
|
+
std::max(info->max_probe_length.load(std::memory_order_relaxed),
|
239
|
+
probe_length),
|
240
|
+
std::memory_order_relaxed);
|
241
|
+
info->total_probe_length.fetch_add(probe_length, std::memory_order_relaxed);
|
242
|
+
info->size.fetch_add(1, std::memory_order_relaxed);
|
243
|
+
}
|
244
|
+
|
245
|
+
void SetHashtablezEnabled(bool enabled) {
|
246
|
+
g_hashtablez_enabled.store(enabled, std::memory_order_release);
|
247
|
+
}
|
248
|
+
|
249
|
+
void SetHashtablezSampleParameter(int32_t rate) {
|
250
|
+
if (rate > 0) {
|
251
|
+
g_hashtablez_sample_parameter.store(rate, std::memory_order_release);
|
252
|
+
} else {
|
253
|
+
ABSL_RAW_LOG(ERROR, "Invalid hashtablez sample rate: %lld",
|
254
|
+
static_cast<long long>(rate)); // NOLINT(runtime/int)
|
255
|
+
}
|
256
|
+
}
|
257
|
+
|
258
|
+
void SetHashtablezMaxSamples(int32_t max) {
|
259
|
+
if (max > 0) {
|
260
|
+
g_hashtablez_max_samples.store(max, std::memory_order_release);
|
261
|
+
} else {
|
262
|
+
ABSL_RAW_LOG(ERROR, "Invalid hashtablez max samples: %lld",
|
263
|
+
static_cast<long long>(max)); // NOLINT(runtime/int)
|
264
|
+
}
|
265
|
+
}
|
266
|
+
|
267
|
+
} // namespace container_internal
|
268
|
+
ABSL_NAMESPACE_END
|
269
|
+
} // namespace absl
|