grpc 1.28.0 → 1.30.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 +7694 -11190
- data/include/grpc/grpc.h +2 -2
- data/include/grpc/grpc_security.h +22 -9
- data/include/grpc/grpc_security_constants.h +1 -0
- data/include/grpc/impl/codegen/grpc_types.h +19 -21
- data/include/grpc/impl/codegen/port_platform.h +6 -2
- data/include/grpc/module.modulemap +24 -39
- data/src/core/ext/filters/client_channel/backend_metric.cc +7 -4
- data/src/core/ext/filters/client_channel/client_channel.cc +203 -236
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +3 -2
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +7 -22
- data/src/core/ext/filters/client_channel/health/health_check_client.h +3 -3
- data/src/core/ext/filters/client_channel/http_proxy.cc +17 -10
- data/src/core/ext/filters/client_channel/lb_policy.cc +19 -18
- data/src/core/ext/filters/client_channel/lb_policy.h +42 -33
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +83 -0
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +99 -0
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +10 -4
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +240 -301
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +89 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +40 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +11 -9
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +3 -2
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +871 -0
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +5 -11
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +734 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +84 -37
- data/src/core/ext/filters/client_channel/lb_policy/xds/eds.cc +938 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/lrs.cc +528 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +1 -2
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_routing.cc +834 -0
- data/src/core/ext/filters/client_channel/lb_policy_registry.cc +6 -2
- data/src/core/ext/filters/client_channel/local_subchannel_pool.h +2 -1
- data/src/core/ext/filters/client_channel/parse_address.cc +22 -21
- data/src/core/ext/filters/client_channel/resolver.cc +5 -8
- data/src/core/ext/filters/client_channel/resolver.h +12 -14
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +73 -59
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +35 -35
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +8 -7
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +16 -20
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +4 -4
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +72 -117
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +184 -133
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +5 -3
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +7 -4
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +40 -43
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +93 -102
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +0 -4
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +2 -2
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +32 -5
- data/src/core/ext/filters/client_channel/resolver_factory.h +2 -2
- data/src/core/ext/filters/client_channel/resolver_registry.cc +6 -3
- data/src/core/ext/filters/client_channel/resolver_registry.h +8 -8
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +16 -16
- data/src/core/ext/filters/client_channel/resolver_result_parsing.h +19 -16
- data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +20 -31
- data/src/core/ext/filters/client_channel/resolving_lb_policy.h +4 -3
- data/src/core/ext/filters/client_channel/server_address.cc +6 -9
- data/src/core/ext/filters/client_channel/server_address.h +6 -12
- data/src/core/ext/filters/client_channel/service_config.cc +104 -144
- data/src/core/ext/filters/client_channel/service_config.h +28 -98
- data/src/core/ext/filters/client_channel/service_config_call_data.h +68 -0
- data/src/core/ext/filters/client_channel/service_config_parser.cc +87 -0
- data/src/core/ext/filters/client_channel/service_config_parser.h +89 -0
- data/src/core/ext/filters/client_channel/subchannel.cc +54 -24
- data/src/core/ext/filters/client_channel/subchannel.h +35 -11
- data/src/core/ext/filters/client_channel/xds/xds_api.cc +348 -221
- data/src/core/ext/filters/client_channel/xds/xds_api.h +37 -37
- data/src/core/ext/filters/client_channel/xds/xds_bootstrap.cc +44 -49
- data/src/core/ext/filters/client_channel/xds/xds_bootstrap.h +4 -3
- data/src/core/ext/filters/client_channel/xds/xds_channel_secure.cc +4 -2
- data/src/core/ext/filters/client_channel/xds/xds_client.cc +532 -339
- data/src/core/ext/filters/client_channel/xds/xds_client.h +57 -22
- data/src/core/ext/filters/client_channel/xds/xds_client_stats.cc +11 -12
- data/src/core/ext/filters/client_channel/xds/xds_client_stats.h +31 -19
- data/src/core/ext/filters/http/client/http_client_filter.cc +23 -28
- data/src/core/ext/filters/http/client_authority_filter.cc +4 -4
- data/src/core/ext/filters/http/http_filters_plugin.cc +27 -12
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +258 -221
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +358 -0
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +29 -0
- data/src/core/ext/filters/message_size/message_size_filter.cc +7 -10
- data/src/core/ext/filters/message_size/message_size_filter.h +4 -4
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +4 -4
- data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +4 -6
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +23 -22
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +1 -0
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +3 -3
- data/src/core/ext/transport/chttp2/transport/frame_goaway.h +2 -3
- data/src/core/ext/transport/chttp2/transport/frame_ping.h +2 -3
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +2 -3
- data/src/core/ext/transport/chttp2/transport/frame_settings.h +2 -3
- data/src/core/ext/transport/chttp2/transport/frame_window_update.h +2 -3
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +29 -16
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +2 -3
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +2 -3
- data/src/core/ext/transport/chttp2/transport/hpack_table.h +2 -2
- data/src/core/ext/transport/chttp2/transport/http2_settings.h +4 -5
- data/src/core/ext/transport/chttp2/transport/huffsyms.h +2 -3
- data/src/core/ext/transport/chttp2/transport/internal.h +14 -21
- data/src/core/ext/transport/chttp2/transport/stream_map.h +2 -3
- data/src/core/ext/transport/chttp2/transport/writing.cc +15 -8
- data/src/core/ext/transport/inproc/inproc_transport.cc +19 -0
- data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.c +4 -229
- data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.h +5 -875
- data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.c +114 -0
- data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.h +418 -0
- data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.c +72 -0
- data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.h +197 -0
- data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.c +105 -0
- data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.h +378 -0
- data/src/core/ext/upb-generated/envoy/api/v2/cds.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.c +21 -8
- data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.h +43 -7
- data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.c +2 -1
- data/src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.c +35 -0
- data/src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.h +78 -0
- data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c +47 -26
- data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.h +115 -65
- data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.c +34 -0
- data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.h +72 -0
- data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.c +2 -1
- data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.c +24 -20
- data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.h +28 -13
- data/src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.c +38 -18
- data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.h +88 -6
- data/src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.c +34 -0
- data/src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.h +89 -0
- data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/eds.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.c +9 -6
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.h +12 -4
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/lds.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.c +15 -10
- data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.h +16 -0
- data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.c +2 -1
- data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/rds.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/route.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.c +63 -41
- data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.h +173 -77
- data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/api/v2/srds.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.c +48 -28
- data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.h +90 -30
- data/src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.c +51 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.h +125 -0
- data/src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.c +4 -2
- data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h +4 -0
- data/src/core/ext/upb-generated/envoy/type/http.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.c +16 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.h +36 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/type/percent.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/type/range.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/type/semantic_version.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.c +1 -0
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +9 -8
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +30 -24
- data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +28 -0
- data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +65 -0
- data/src/core/ext/upb-generated/validate/validate.upb.c +21 -20
- data/src/core/ext/upb-generated/validate/validate.upb.h +69 -63
- data/src/core/lib/channel/channel_args.cc +15 -14
- data/src/core/lib/channel/channel_args.h +3 -1
- data/src/core/lib/channel/channel_stack.h +20 -13
- data/src/core/lib/channel/channelz.cc +5 -6
- data/src/core/lib/channel/channelz.h +3 -2
- data/src/core/lib/channel/channelz_registry.cc +5 -3
- data/src/core/lib/channel/connected_channel.cc +7 -5
- data/src/core/lib/channel/context.h +1 -1
- data/src/core/lib/channel/handshaker.cc +11 -13
- data/src/core/lib/channel/handshaker.h +4 -2
- data/src/core/lib/channel/handshaker_registry.cc +5 -17
- data/src/core/lib/channel/status_util.cc +2 -3
- data/src/core/lib/compression/message_compress.cc +5 -1
- data/src/core/lib/debug/stats.cc +21 -27
- data/src/core/lib/debug/stats.h +3 -1
- data/src/core/lib/gpr/spinlock.h +2 -3
- data/src/core/lib/gpr/string.cc +2 -26
- data/src/core/lib/gpr/string.h +0 -16
- data/src/core/lib/gpr/sync_abseil.cc +2 -0
- data/src/core/lib/gpr/time.cc +4 -0
- data/src/core/lib/gpr/time_posix.cc +1 -1
- data/src/core/lib/gprpp/atomic.h +6 -6
- data/src/core/lib/gprpp/fork.cc +1 -1
- data/src/core/lib/gprpp/host_port.cc +29 -35
- data/src/core/lib/gprpp/host_port.h +14 -17
- data/src/core/lib/gprpp/map.h +5 -11
- data/src/core/lib/gprpp/ref_counted_ptr.h +5 -0
- data/src/core/lib/http/format_request.cc +46 -65
- data/src/core/lib/http/httpcli.cc +2 -3
- data/src/core/lib/http/httpcli.h +2 -3
- data/src/core/lib/http/httpcli_security_connector.cc +5 -5
- data/src/core/lib/http/parser.h +2 -3
- data/src/core/lib/iomgr/buffer_list.h +22 -21
- data/src/core/lib/iomgr/call_combiner.h +3 -2
- data/src/core/lib/iomgr/cfstream_handle.cc +3 -2
- data/src/core/lib/iomgr/closure.h +2 -3
- data/src/core/lib/iomgr/dualstack_socket_posix.cc +47 -0
- data/src/core/lib/iomgr/endpoint_cfstream.cc +2 -3
- data/src/core/lib/iomgr/endpoint_pair.h +2 -3
- data/src/core/lib/iomgr/error.cc +6 -9
- data/src/core/lib/iomgr/error.h +0 -1
- data/src/core/lib/iomgr/ev_apple.cc +356 -0
- data/src/core/lib/iomgr/ev_apple.h +43 -0
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +20 -23
- data/src/core/lib/iomgr/ev_epollex_linux.cc +2 -3
- data/src/core/lib/iomgr/ev_poll_posix.cc +3 -3
- data/src/core/lib/iomgr/ev_posix.cc +2 -3
- data/src/core/lib/iomgr/exec_ctx.h +14 -2
- data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +84 -20
- data/src/core/lib/iomgr/pollset_set_custom.cc +10 -10
- data/src/core/lib/{gprpp/optional.h → iomgr/pollset_uv.h} +11 -12
- data/src/core/lib/iomgr/port.h +1 -0
- data/src/core/lib/iomgr/python_util.h +46 -0
- data/src/core/lib/iomgr/resolve_address.h +4 -6
- data/src/core/lib/iomgr/resolve_address_custom.cc +29 -39
- data/src/core/lib/iomgr/resolve_address_custom.h +4 -2
- data/src/core/lib/iomgr/resolve_address_posix.cc +10 -11
- data/src/core/lib/iomgr/resolve_address_windows.cc +8 -17
- data/src/core/lib/iomgr/resource_quota.cc +4 -6
- data/src/core/lib/iomgr/sockaddr_utils.cc +23 -29
- data/src/core/lib/iomgr/sockaddr_utils.h +9 -14
- data/src/core/lib/iomgr/socket_factory_posix.h +2 -3
- data/src/core/lib/iomgr/socket_mutator.h +2 -3
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +7 -26
- data/src/core/lib/iomgr/socket_utils_posix.h +3 -0
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +5 -7
- data/src/core/lib/iomgr/tcp_client_posix.cc +8 -5
- data/src/core/lib/iomgr/tcp_client_windows.cc +2 -3
- data/src/core/lib/iomgr/tcp_custom.cc +2 -3
- data/src/core/lib/iomgr/tcp_server_custom.cc +5 -9
- data/src/core/lib/iomgr/tcp_server_posix.cc +5 -4
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +5 -4
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +8 -11
- data/src/core/lib/iomgr/tcp_uv.cc +3 -2
- data/src/core/lib/iomgr/time_averaged_stats.h +2 -3
- data/src/core/lib/iomgr/timer_generic.cc +2 -3
- data/src/core/lib/{gprpp/inlined_vector.h → iomgr/timer_generic.h} +19 -17
- data/src/core/lib/iomgr/timer_heap.h +2 -3
- data/src/core/lib/iomgr/udp_server.cc +9 -14
- data/src/core/lib/json/json.h +3 -2
- data/src/core/lib/json/json_reader.cc +5 -5
- data/src/core/lib/json/json_writer.cc +13 -12
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +12 -0
- data/src/core/lib/security/credentials/composite/composite_credentials.h +6 -3
- data/src/core/lib/security/credentials/credentials.cc +0 -84
- data/src/core/lib/security/credentials/credentials.h +8 -59
- data/src/core/lib/security/credentials/fake/fake_credentials.h +4 -0
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +3 -8
- data/src/core/lib/security/credentials/iam/iam_credentials.cc +8 -6
- data/src/core/lib/security/credentials/iam/iam_credentials.h +4 -0
- data/src/core/lib/security/credentials/jwt/json_token.cc +1 -1
- data/src/core/lib/security/credentials/jwt/json_token.h +2 -5
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +12 -0
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +8 -15
- data/src/core/lib/security/credentials/jwt/jwt_verifier.h +2 -3
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +55 -27
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +9 -3
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +13 -0
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +2 -0
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +23 -13
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +38 -11
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +21 -6
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +7 -7
- data/src/core/lib/security/security_connector/load_system_roots_linux.cc +3 -2
- data/src/core/lib/security/security_connector/local/local_security_connector.cc +1 -1
- data/src/core/lib/security/security_connector/security_connector.h +1 -1
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +20 -25
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +4 -6
- data/src/core/lib/security/security_connector/ssl_utils.cc +59 -12
- data/src/core/lib/security/security_connector/ssl_utils.h +12 -10
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +77 -51
- data/src/core/lib/security/security_connector/tls/tls_security_connector.h +27 -5
- data/src/core/lib/security/transport/client_auth_filter.cc +1 -2
- data/src/core/lib/slice/slice_intern.cc +2 -3
- data/src/core/lib/slice/slice_internal.h +14 -0
- data/src/core/lib/slice/slice_utils.h +9 -0
- data/src/core/lib/surface/byte_buffer_reader.cc +2 -47
- data/src/core/lib/surface/call.cc +2 -3
- data/src/core/lib/surface/call_log_batch.cc +50 -58
- data/src/core/lib/surface/channel.cc +53 -31
- data/src/core/lib/surface/channel.h +35 -4
- data/src/core/lib/surface/channel_ping.cc +2 -3
- data/src/core/lib/surface/completion_queue.cc +33 -33
- data/src/core/lib/surface/event_string.cc +18 -25
- data/src/core/lib/surface/event_string.h +3 -1
- data/src/core/lib/surface/init_secure.cc +1 -4
- data/src/core/lib/surface/server.cc +570 -369
- data/src/core/lib/surface/server.h +32 -0
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/byte_stream.h +7 -2
- data/src/core/lib/transport/connectivity_state.cc +7 -6
- data/src/core/lib/transport/connectivity_state.h +5 -3
- data/src/core/lib/transport/metadata.cc +3 -3
- data/src/core/lib/transport/metadata_batch.h +2 -3
- data/src/core/lib/transport/static_metadata.h +1 -1
- data/src/core/lib/transport/status_conversion.cc +6 -14
- data/src/core/lib/transport/transport.cc +2 -3
- data/src/core/lib/transport/transport.h +3 -2
- data/src/core/lib/transport/transport_op_string.cc +61 -102
- data/src/core/lib/uri/uri_parser.h +2 -3
- data/src/core/plugin_registry/grpc_plugin_registry.cc +20 -4
- data/src/core/tsi/alts/crypt/aes_gcm.cc +0 -2
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +8 -1
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +8 -4
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +32 -2
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +9 -1
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.h +2 -3
- data/src/core/tsi/fake_transport_security.cc +10 -15
- data/src/core/tsi/ssl/session_cache/ssl_session.h +0 -2
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +0 -2
- data/src/core/tsi/ssl_transport_security.cc +52 -39
- data/src/core/tsi/ssl_transport_security.h +8 -8
- data/src/core/tsi/ssl_types.h +0 -2
- data/src/core/tsi/transport_security.h +6 -9
- data/src/core/tsi/transport_security_grpc.h +2 -3
- data/src/core/tsi/transport_security_interface.h +3 -3
- data/src/ruby/ext/grpc/rb_call.c +9 -1
- data/src/ruby/lib/grpc/errors.rb +103 -42
- data/src/ruby/lib/grpc/generic/active_call.rb +2 -3
- data/src/ruby/lib/grpc/generic/interceptors.rb +4 -4
- data/src/ruby/lib/grpc/generic/rpc_server.rb +9 -10
- data/src/ruby/lib/grpc/generic/service.rb +5 -4
- data/src/ruby/lib/grpc/structs.rb +1 -1
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/generate_proto_ruby.sh +5 -3
- data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +11 -0
- data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +16 -0
- data/src/ruby/spec/debug_message_spec.rb +134 -0
- data/src/ruby/spec/generic/service_spec.rb +2 -0
- data/src/ruby/spec/pb/codegen/grpc/testing/package_options_ruby_style.proto +5 -0
- data/src/ruby/spec/pb/codegen/package_option_spec.rb +2 -0
- data/src/ruby/spec/testdata/ca.pem +18 -13
- data/src/ruby/spec/testdata/client.key +26 -14
- data/src/ruby/spec/testdata/client.pem +18 -12
- data/src/ruby/spec/testdata/server1.key +26 -14
- data/src/ruby/spec/testdata/server1.pem +20 -14
- data/third_party/abseil-cpp/absl/time/civil_time.cc +175 -0
- data/third_party/abseil-cpp/absl/time/civil_time.h +538 -0
- data/third_party/abseil-cpp/absl/time/clock.cc +569 -0
- data/third_party/abseil-cpp/absl/time/clock.h +74 -0
- data/third_party/abseil-cpp/absl/time/duration.cc +922 -0
- data/third_party/abseil-cpp/absl/time/format.cc +153 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time.h +332 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +622 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +384 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/zone_info_source.h +102 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/civil_time_detail.cc +94 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.cc +140 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.h +52 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +922 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.cc +45 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.h +76 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.cc +121 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.h +93 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +958 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.h +138 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +308 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.h +55 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +187 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.cc +159 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.h +132 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +122 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +115 -0
- data/third_party/abseil-cpp/absl/time/internal/get_current_time_chrono.inc +31 -0
- data/third_party/abseil-cpp/absl/time/internal/get_current_time_posix.inc +24 -0
- data/third_party/abseil-cpp/absl/time/time.cc +499 -0
- data/third_party/abseil-cpp/absl/time/time.h +1584 -0
- data/third_party/boringssl-with-bazel/err_data.c +329 -297
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/derive_key.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/cpu-arm-linux.c +7 -5
- data/third_party/boringssl-with-bazel/src/crypto/cpu-intel.c +13 -4
- data/third_party/boringssl-with-bazel/src/crypto/crypto.c +11 -0
- data/third_party/boringssl-with-bazel/src/{third_party/fiat → crypto/curve25519}/curve25519.c +18 -26
- data/third_party/boringssl-with-bazel/src/{third_party/fiat → crypto/curve25519}/curve25519_tables.h +13 -21
- data/third_party/boringssl-with-bazel/src/{third_party/fiat → crypto/curve25519}/internal.h +14 -22
- data/third_party/boringssl-with-bazel/src/crypto/curve25519/spake25519.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/dh/dh.c +15 -0
- data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +10 -0
- data/third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c +425 -0
- data/third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h +78 -0
- data/third_party/boringssl-with-bazel/src/crypto/ecdh_extra/ecdh_extra.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/err/err.c +33 -32
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/aes_nohw.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +2 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/exponentiation.c +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +14 -11
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery.c +8 -8
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/mul.c +30 -154
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digests.c +16 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +289 -117
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +13 -27
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_montgomery.c +96 -55
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/felem.c +25 -7
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +432 -160
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/oct.c +63 -71
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c +5 -14
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64-table.h +9481 -9485
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64.c +80 -99
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.c +736 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256_table.h +297 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/scalar.c +90 -11
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple.c +125 -148
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c +189 -3
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/wnaf.c +61 -18
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdh/ecdh.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +20 -5
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.c +137 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.h +49 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/getrandom_fillin.h +64 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +41 -5
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +32 -17
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +24 -114
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/blinding.c +4 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +51 -38
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +15 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +44 -35
- data/third_party/boringssl-with-bazel/src/crypto/mem.c +29 -12
- data/third_party/boringssl-with-bazel/src/crypto/obj/obj_dat.h +15 -1
- data/third_party/boringssl-with-bazel/src/crypto/rand_extra/deterministic.c +6 -10
- data/third_party/boringssl-with-bazel/src/crypto/rand_extra/windows.c +16 -0
- data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +4 -0
- data/third_party/boringssl-with-bazel/src/crypto/thread_win.c +4 -0
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +278 -0
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +1474 -0
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +720 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +16 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +5 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +4 -3
- data/third_party/boringssl-with-bazel/src/include/openssl/base.h +5 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +9 -4
- data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +20 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +1 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +16 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +6 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/err.h +2 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/nid.h +5 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +3 -17
- data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +31 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/sha.h +26 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +172 -77
- data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +1 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +291 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +5 -3
- data/third_party/boringssl-with-bazel/src/include/openssl/x509_vfy.h +1 -0
- data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +0 -4
- data/third_party/boringssl-with-bazel/src/ssl/d1_lib.cc +3 -3
- data/third_party/boringssl-with-bazel/src/ssl/dtls_method.cc +13 -4
- data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +146 -57
- data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +14 -3
- data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +28 -20
- data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +12 -4
- data/third_party/boringssl-with-bazel/src/ssl/internal.h +64 -47
- data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +10 -10
- data/third_party/boringssl-with-bazel/src/ssl/s3_lib.cc +2 -2
- data/third_party/boringssl-with-bazel/src/ssl/s3_pkt.cc +21 -21
- data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +29 -0
- data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +4 -0
- data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +6 -1
- data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +13 -2
- data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +64 -5
- data/third_party/boringssl-with-bazel/src/ssl/ssl_stat.cc +6 -0
- data/third_party/boringssl-with-bazel/src/ssl/t1_enc.cc +6 -2
- data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +47 -53
- data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +1 -1
- data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +98 -27
- data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +23 -75
- data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +50 -20
- data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +63 -25
- data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_32.h +245 -175
- data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_64.h +135 -75
- data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_32.h +1593 -1672
- data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_64.h +512 -503
- metadata +111 -37
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds.cc +0 -1754
- data/src/core/lib/gprpp/string_view.h +0 -60
- data/src/core/tsi/grpc_shadow_boringssl.h +0 -3311
- data/third_party/boringssl-with-bazel/src/third_party/fiat/p256.c +0 -1063
@@ -21,6 +21,8 @@
|
|
21
21
|
#include <assert.h>
|
22
22
|
#include <string.h>
|
23
23
|
|
24
|
+
#include "absl/types/optional.h"
|
25
|
+
|
24
26
|
#include <grpc/compression.h>
|
25
27
|
#include <grpc/slice_buffer.h>
|
26
28
|
#include <grpc/support/alloc.h>
|
@@ -40,94 +42,156 @@
|
|
40
42
|
#include "src/core/lib/surface/call.h"
|
41
43
|
#include "src/core/lib/transport/static_metadata.h"
|
42
44
|
|
43
|
-
static void start_send_message_batch(void* arg, grpc_error* unused);
|
44
|
-
static void send_message_on_complete(void* arg, grpc_error* error);
|
45
|
-
static void on_send_message_next_done(void* arg, grpc_error* error);
|
46
|
-
|
47
45
|
namespace {
|
48
46
|
|
49
|
-
|
47
|
+
class ChannelData {
|
48
|
+
public:
|
49
|
+
explicit ChannelData(grpc_channel_element_args* args) {
|
50
|
+
// Get the enabled and the default algorithms from channel args.
|
51
|
+
enabled_compression_algorithms_bitset_ =
|
52
|
+
grpc_channel_args_compression_algorithm_get_states(args->channel_args);
|
53
|
+
default_compression_algorithm_ =
|
54
|
+
grpc_channel_args_get_channel_default_compression_algorithm(
|
55
|
+
args->channel_args);
|
56
|
+
// Make sure the default is enabled.
|
57
|
+
if (!GPR_BITGET(enabled_compression_algorithms_bitset_,
|
58
|
+
default_compression_algorithm_)) {
|
59
|
+
const char* name;
|
60
|
+
GPR_ASSERT(grpc_compression_algorithm_name(default_compression_algorithm_,
|
61
|
+
&name) == 1);
|
62
|
+
gpr_log(GPR_ERROR,
|
63
|
+
"default compression algorithm %s not enabled: switching to none",
|
64
|
+
name);
|
65
|
+
default_compression_algorithm_ = GRPC_COMPRESS_NONE;
|
66
|
+
}
|
67
|
+
enabled_message_compression_algorithms_bitset_ =
|
68
|
+
grpc_compression_bitset_to_message_bitset(
|
69
|
+
enabled_compression_algorithms_bitset_);
|
70
|
+
enabled_stream_compression_algorithms_bitset_ =
|
71
|
+
grpc_compression_bitset_to_stream_bitset(
|
72
|
+
enabled_compression_algorithms_bitset_);
|
73
|
+
GPR_ASSERT(!args->is_last);
|
74
|
+
}
|
75
|
+
|
76
|
+
grpc_compression_algorithm default_compression_algorithm() const {
|
77
|
+
return default_compression_algorithm_;
|
78
|
+
}
|
79
|
+
|
80
|
+
uint32_t enabled_compression_algorithms_bitset() const {
|
81
|
+
return enabled_compression_algorithms_bitset_;
|
82
|
+
}
|
83
|
+
|
84
|
+
uint32_t enabled_message_compression_algorithms_bitset() const {
|
85
|
+
return enabled_message_compression_algorithms_bitset_;
|
86
|
+
}
|
87
|
+
|
88
|
+
uint32_t enabled_stream_compression_algorithms_bitset() const {
|
89
|
+
return enabled_stream_compression_algorithms_bitset_;
|
90
|
+
}
|
91
|
+
|
92
|
+
private:
|
50
93
|
/** The default, channel-level, compression algorithm */
|
51
|
-
grpc_compression_algorithm
|
94
|
+
grpc_compression_algorithm default_compression_algorithm_;
|
52
95
|
/** Bitset of enabled compression algorithms */
|
53
|
-
uint32_t
|
96
|
+
uint32_t enabled_compression_algorithms_bitset_;
|
54
97
|
/** Bitset of enabled message compression algorithms */
|
55
|
-
uint32_t
|
98
|
+
uint32_t enabled_message_compression_algorithms_bitset_;
|
56
99
|
/** Bitset of enabled stream compression algorithms */
|
57
|
-
uint32_t
|
100
|
+
uint32_t enabled_stream_compression_algorithms_bitset_;
|
58
101
|
};
|
59
102
|
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
103
|
+
class CallData {
|
104
|
+
public:
|
105
|
+
CallData(grpc_call_element* elem, const grpc_call_element_args& args)
|
106
|
+
: call_combiner_(args.call_combiner) {
|
107
|
+
ChannelData* channeld = static_cast<ChannelData*>(elem->channel_data);
|
64
108
|
// The call's message compression algorithm is set to channel's default
|
65
109
|
// setting. It can be overridden later by initial metadata.
|
66
|
-
if (GPR_LIKELY(GPR_BITGET(channeld->enabled_compression_algorithms_bitset,
|
67
|
-
channeld->default_compression_algorithm))) {
|
68
|
-
|
110
|
+
if (GPR_LIKELY(GPR_BITGET(channeld->enabled_compression_algorithms_bitset(),
|
111
|
+
channeld->default_compression_algorithm()))) {
|
112
|
+
message_compression_algorithm_ =
|
69
113
|
grpc_compression_algorithm_to_message_compression_algorithm(
|
70
|
-
channeld->default_compression_algorithm);
|
114
|
+
channeld->default_compression_algorithm());
|
71
115
|
}
|
72
|
-
GRPC_CLOSURE_INIT(&
|
73
|
-
|
74
|
-
grpc_schedule_on_exec_ctx);
|
116
|
+
GRPC_CLOSURE_INIT(&start_send_message_batch_in_call_combiner_,
|
117
|
+
StartSendMessageBatch, elem, grpc_schedule_on_exec_ctx);
|
75
118
|
}
|
76
119
|
|
77
|
-
~
|
78
|
-
if (
|
79
|
-
grpc_slice_buffer_destroy_internal(&
|
120
|
+
~CallData() {
|
121
|
+
if (state_initialized_) {
|
122
|
+
grpc_slice_buffer_destroy_internal(&slices_);
|
80
123
|
}
|
81
|
-
GRPC_ERROR_UNREF(
|
124
|
+
GRPC_ERROR_UNREF(cancel_error_);
|
82
125
|
}
|
83
126
|
|
84
|
-
|
85
|
-
|
127
|
+
void CompressStartTransportStreamOpBatch(
|
128
|
+
grpc_call_element* elem, grpc_transport_stream_op_batch* batch);
|
129
|
+
|
130
|
+
private:
|
131
|
+
bool SkipMessageCompression();
|
132
|
+
void InitializeState(grpc_call_element* elem);
|
133
|
+
|
134
|
+
grpc_error* ProcessSendInitialMetadata(grpc_call_element* elem,
|
135
|
+
grpc_metadata_batch* initial_metadata);
|
136
|
+
|
137
|
+
// Methods for processing a send_message batch
|
138
|
+
static void StartSendMessageBatch(void* elem_arg, grpc_error* unused);
|
139
|
+
static void OnSendMessageNextDone(void* elem_arg, grpc_error* error);
|
140
|
+
grpc_error* PullSliceFromSendMessage();
|
141
|
+
void ContinueReadingSendMessage(grpc_call_element* elem);
|
142
|
+
void FinishSendMessage(grpc_call_element* elem);
|
143
|
+
void SendMessageBatchContinue(grpc_call_element* elem);
|
144
|
+
static void FailSendMessageBatchInCallCombiner(void* calld_arg,
|
145
|
+
grpc_error* error);
|
146
|
+
|
147
|
+
static void SendMessageOnComplete(void* calld_arg, grpc_error* error);
|
148
|
+
|
149
|
+
grpc_core::CallCombiner* call_combiner_;
|
150
|
+
grpc_message_compression_algorithm message_compression_algorithm_ =
|
86
151
|
GRPC_MESSAGE_COMPRESS_NONE;
|
87
|
-
grpc_error*
|
88
|
-
grpc_transport_stream_op_batch*
|
89
|
-
bool
|
152
|
+
grpc_error* cancel_error_ = GRPC_ERROR_NONE;
|
153
|
+
grpc_transport_stream_op_batch* send_message_batch_ = nullptr;
|
154
|
+
bool seen_initial_metadata_ = false;
|
90
155
|
/* Set to true, if the fields below are initialized. */
|
91
|
-
bool
|
92
|
-
grpc_closure
|
156
|
+
bool state_initialized_ = false;
|
157
|
+
grpc_closure start_send_message_batch_in_call_combiner_;
|
93
158
|
/* The fields below are only initialized when we compress the payload.
|
94
159
|
* Keep them at the bottom of the struct, so they don't pollute the
|
95
160
|
* cache-lines. */
|
96
|
-
grpc_linked_mdelem
|
97
|
-
grpc_linked_mdelem
|
98
|
-
grpc_linked_mdelem
|
99
|
-
grpc_linked_mdelem
|
100
|
-
grpc_slice_buffer
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
grpc_closure
|
161
|
+
grpc_linked_mdelem message_compression_algorithm_storage_;
|
162
|
+
grpc_linked_mdelem stream_compression_algorithm_storage_;
|
163
|
+
grpc_linked_mdelem accept_encoding_storage_;
|
164
|
+
grpc_linked_mdelem accept_stream_encoding_storage_;
|
165
|
+
grpc_slice_buffer slices_; /**< Buffers up input slices to be compressed */
|
166
|
+
// Allocate space for the replacement stream
|
167
|
+
std::aligned_storage<sizeof(grpc_core::SliceBufferByteStream),
|
168
|
+
alignof(grpc_core::SliceBufferByteStream)>::type
|
169
|
+
replacement_stream_;
|
170
|
+
grpc_closure* original_send_message_on_complete_ = nullptr;
|
171
|
+
grpc_closure send_message_on_complete_;
|
172
|
+
grpc_closure on_send_message_next_done_;
|
106
173
|
};
|
107
174
|
|
108
|
-
} // namespace
|
109
|
-
|
110
175
|
// Returns true if we should skip message compression for the current message.
|
111
|
-
|
112
|
-
call_data* calld = static_cast<call_data*>(elem->call_data);
|
176
|
+
bool CallData::SkipMessageCompression() {
|
113
177
|
// If the flags of this message indicate that it shouldn't be compressed, we
|
114
178
|
// skip message compression.
|
115
179
|
uint32_t flags =
|
116
|
-
|
180
|
+
send_message_batch_->payload->send_message.send_message->flags();
|
117
181
|
if (flags & (GRPC_WRITE_NO_COMPRESS | GRPC_WRITE_INTERNAL_COMPRESS)) {
|
118
182
|
return true;
|
119
183
|
}
|
120
184
|
// If this call doesn't have any message compression algorithm set, skip
|
121
185
|
// message compression.
|
122
|
-
return
|
186
|
+
return message_compression_algorithm_ == GRPC_MESSAGE_COMPRESS_NONE;
|
123
187
|
}
|
124
188
|
|
125
189
|
// Determines the compression algorithm from the initial metadata and the
|
126
190
|
// channel's default setting.
|
127
|
-
|
128
|
-
grpc_metadata_batch* initial_metadata,
|
191
|
+
grpc_compression_algorithm FindCompressionAlgorithm(
|
192
|
+
grpc_metadata_batch* initial_metadata, ChannelData* channeld) {
|
129
193
|
if (initial_metadata->idx.named.grpc_internal_encoding_request == nullptr) {
|
130
|
-
return channeld->default_compression_algorithm;
|
194
|
+
return channeld->default_compression_algorithm();
|
131
195
|
}
|
132
196
|
grpc_compression_algorithm compression_algorithm;
|
133
197
|
// Parse the compression algorithm from the initial metadata.
|
@@ -143,7 +207,7 @@ static grpc_compression_algorithm find_compression_algorithm(
|
|
143
207
|
// enabled.
|
144
208
|
// TODO(juanlishen): Maybe use channel default or abort() if the algorithm
|
145
209
|
// from the initial metadata is disabled.
|
146
|
-
if (GPR_LIKELY(GPR_BITGET(channeld->enabled_compression_algorithms_bitset,
|
210
|
+
if (GPR_LIKELY(GPR_BITGET(channeld->enabled_compression_algorithms_bitset(),
|
147
211
|
compression_algorithm))) {
|
148
212
|
return compression_algorithm;
|
149
213
|
}
|
@@ -158,30 +222,24 @@ static grpc_compression_algorithm find_compression_algorithm(
|
|
158
222
|
return GRPC_COMPRESS_NONE;
|
159
223
|
}
|
160
224
|
|
161
|
-
|
162
|
-
GPR_DEBUG_ASSERT(!
|
163
|
-
|
164
|
-
grpc_slice_buffer_init(&
|
165
|
-
GRPC_CLOSURE_INIT(&
|
166
|
-
::send_message_on_complete, elem,
|
225
|
+
void CallData::InitializeState(grpc_call_element* elem) {
|
226
|
+
GPR_DEBUG_ASSERT(!state_initialized_);
|
227
|
+
state_initialized_ = true;
|
228
|
+
grpc_slice_buffer_init(&slices_);
|
229
|
+
GRPC_CLOSURE_INIT(&send_message_on_complete_, SendMessageOnComplete, this,
|
167
230
|
grpc_schedule_on_exec_ctx);
|
168
|
-
GRPC_CLOSURE_INIT(&
|
169
|
-
::on_send_message_next_done, elem,
|
231
|
+
GRPC_CLOSURE_INIT(&on_send_message_next_done_, OnSendMessageNextDone, elem,
|
170
232
|
grpc_schedule_on_exec_ctx);
|
171
233
|
}
|
172
234
|
|
173
|
-
|
174
|
-
grpc_call_element* elem,
|
175
|
-
grpc_metadata_batch* initial_metadata) GRPC_MUST_USE_RESULT;
|
176
|
-
static grpc_error* process_send_initial_metadata(
|
235
|
+
grpc_error* CallData::ProcessSendInitialMetadata(
|
177
236
|
grpc_call_element* elem, grpc_metadata_batch* initial_metadata) {
|
178
|
-
|
179
|
-
channel_data* channeld = static_cast<channel_data*>(elem->channel_data);
|
237
|
+
ChannelData* channeld = static_cast<ChannelData*>(elem->channel_data);
|
180
238
|
// Find the compression algorithm.
|
181
239
|
grpc_compression_algorithm compression_algorithm =
|
182
|
-
|
240
|
+
FindCompressionAlgorithm(initial_metadata, channeld);
|
183
241
|
// Note that at most one of the following algorithms can be set.
|
184
|
-
|
242
|
+
message_compression_algorithm_ =
|
185
243
|
grpc_compression_algorithm_to_message_compression_algorithm(
|
186
244
|
compression_algorithm);
|
187
245
|
grpc_stream_compression_algorithm stream_compression_algorithm =
|
@@ -189,321 +247,300 @@ static grpc_error* process_send_initial_metadata(
|
|
189
247
|
compression_algorithm);
|
190
248
|
// Hint compression algorithm.
|
191
249
|
grpc_error* error = GRPC_ERROR_NONE;
|
192
|
-
if (
|
193
|
-
|
250
|
+
if (message_compression_algorithm_ != GRPC_MESSAGE_COMPRESS_NONE) {
|
251
|
+
InitializeState(elem);
|
194
252
|
error = grpc_metadata_batch_add_tail(
|
195
|
-
initial_metadata, &
|
253
|
+
initial_metadata, &message_compression_algorithm_storage_,
|
196
254
|
grpc_message_compression_encoding_mdelem(
|
197
|
-
|
255
|
+
message_compression_algorithm_),
|
198
256
|
GRPC_BATCH_GRPC_ENCODING);
|
199
257
|
} else if (stream_compression_algorithm != GRPC_STREAM_COMPRESS_NONE) {
|
200
|
-
|
258
|
+
InitializeState(elem);
|
201
259
|
error = grpc_metadata_batch_add_tail(
|
202
|
-
initial_metadata, &
|
260
|
+
initial_metadata, &stream_compression_algorithm_storage_,
|
203
261
|
grpc_stream_compression_encoding_mdelem(stream_compression_algorithm),
|
204
262
|
GRPC_BATCH_CONTENT_ENCODING);
|
205
263
|
}
|
206
264
|
if (error != GRPC_ERROR_NONE) return error;
|
207
265
|
// Convey supported compression algorithms.
|
208
266
|
error = grpc_metadata_batch_add_tail(
|
209
|
-
initial_metadata, &
|
267
|
+
initial_metadata, &accept_encoding_storage_,
|
210
268
|
GRPC_MDELEM_ACCEPT_ENCODING_FOR_ALGORITHMS(
|
211
|
-
channeld->enabled_message_compression_algorithms_bitset),
|
269
|
+
channeld->enabled_message_compression_algorithms_bitset()),
|
212
270
|
GRPC_BATCH_GRPC_ACCEPT_ENCODING);
|
213
271
|
if (error != GRPC_ERROR_NONE) return error;
|
214
272
|
// Do not overwrite accept-encoding header if it already presents (e.g., added
|
215
273
|
// by some proxy).
|
216
274
|
if (!initial_metadata->idx.named.accept_encoding) {
|
217
275
|
error = grpc_metadata_batch_add_tail(
|
218
|
-
initial_metadata, &
|
276
|
+
initial_metadata, &accept_stream_encoding_storage_,
|
219
277
|
GRPC_MDELEM_ACCEPT_STREAM_ENCODING_FOR_ALGORITHMS(
|
220
|
-
channeld->enabled_stream_compression_algorithms_bitset),
|
278
|
+
channeld->enabled_stream_compression_algorithms_bitset()),
|
221
279
|
GRPC_BATCH_ACCEPT_ENCODING);
|
222
280
|
}
|
223
281
|
return error;
|
224
282
|
}
|
225
283
|
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
grpc_slice_buffer_reset_and_unref_internal(&calld->slices);
|
284
|
+
void CallData::SendMessageOnComplete(void* calld_arg, grpc_error* error) {
|
285
|
+
CallData* calld = static_cast<CallData*>(calld_arg);
|
286
|
+
grpc_slice_buffer_reset_and_unref_internal(&calld->slices_);
|
230
287
|
grpc_core::Closure::Run(DEBUG_LOCATION,
|
231
|
-
calld->
|
288
|
+
calld->original_send_message_on_complete_,
|
232
289
|
GRPC_ERROR_REF(error));
|
233
290
|
}
|
234
291
|
|
235
|
-
|
236
|
-
call_data* calld = static_cast<call_data*>(elem->call_data);
|
292
|
+
void CallData::SendMessageBatchContinue(grpc_call_element* elem) {
|
237
293
|
// Note: The call to grpc_call_next_op() results in yielding the
|
238
|
-
// call combiner, so we need to clear
|
239
|
-
|
240
|
-
|
241
|
-
calld->send_message_batch;
|
242
|
-
calld->send_message_batch = nullptr;
|
294
|
+
// call combiner, so we need to clear send_message_batch_ before we do that.
|
295
|
+
grpc_transport_stream_op_batch* send_message_batch = send_message_batch_;
|
296
|
+
send_message_batch_ = nullptr;
|
243
297
|
grpc_call_next_op(elem, send_message_batch);
|
244
298
|
}
|
245
299
|
|
246
|
-
|
247
|
-
|
248
|
-
GPR_DEBUG_ASSERT(calld->message_compression_algorithm !=
|
300
|
+
void CallData::FinishSendMessage(grpc_call_element* elem) {
|
301
|
+
GPR_DEBUG_ASSERT(message_compression_algorithm_ !=
|
249
302
|
GRPC_MESSAGE_COMPRESS_NONE);
|
250
303
|
// Compress the data if appropriate.
|
251
304
|
grpc_slice_buffer tmp;
|
252
305
|
grpc_slice_buffer_init(&tmp);
|
253
306
|
uint32_t send_flags =
|
254
|
-
|
255
|
-
bool did_compress =
|
256
|
-
|
307
|
+
send_message_batch_->payload->send_message.send_message->flags();
|
308
|
+
bool did_compress =
|
309
|
+
grpc_msg_compress(message_compression_algorithm_, &slices_, &tmp);
|
257
310
|
if (did_compress) {
|
258
311
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_compression_trace)) {
|
259
312
|
const char* algo_name;
|
260
|
-
const size_t before_size =
|
313
|
+
const size_t before_size = slices_.length;
|
261
314
|
const size_t after_size = tmp.length;
|
262
315
|
const float savings_ratio = 1.0f - static_cast<float>(after_size) /
|
263
316
|
static_cast<float>(before_size);
|
264
317
|
GPR_ASSERT(grpc_message_compression_algorithm_name(
|
265
|
-
|
318
|
+
message_compression_algorithm_, &algo_name));
|
266
319
|
gpr_log(GPR_INFO,
|
267
320
|
"Compressed[%s] %" PRIuPTR " bytes vs. %" PRIuPTR
|
268
321
|
" bytes (%.2f%% savings)",
|
269
322
|
algo_name, before_size, after_size, 100 * savings_ratio);
|
270
323
|
}
|
271
|
-
grpc_slice_buffer_swap(&
|
324
|
+
grpc_slice_buffer_swap(&slices_, &tmp);
|
272
325
|
send_flags |= GRPC_WRITE_INTERNAL_COMPRESS;
|
273
326
|
} else {
|
274
327
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_compression_trace)) {
|
275
328
|
const char* algo_name;
|
276
329
|
GPR_ASSERT(grpc_message_compression_algorithm_name(
|
277
|
-
|
330
|
+
message_compression_algorithm_, &algo_name));
|
278
331
|
gpr_log(GPR_INFO,
|
279
332
|
"Algorithm '%s' enabled but decided not to compress. Input size: "
|
280
333
|
"%" PRIuPTR,
|
281
|
-
algo_name,
|
334
|
+
algo_name, slices_.length);
|
282
335
|
}
|
283
336
|
}
|
284
337
|
grpc_slice_buffer_destroy_internal(&tmp);
|
285
338
|
// Swap out the original byte stream with our new one and send the
|
286
339
|
// batch down.
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
|
340
|
+
new (&replacement_stream_)
|
341
|
+
grpc_core::SliceBufferByteStream(&slices_, send_flags);
|
342
|
+
send_message_batch_->payload->send_message.send_message.reset(
|
343
|
+
reinterpret_cast<grpc_core::SliceBufferByteStream*>(
|
344
|
+
&replacement_stream_));
|
345
|
+
original_send_message_on_complete_ = send_message_batch_->on_complete;
|
346
|
+
send_message_batch_->on_complete = &send_message_on_complete_;
|
347
|
+
SendMessageBatchContinue(elem);
|
294
348
|
}
|
295
349
|
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
if (calld->
|
350
|
+
void CallData::FailSendMessageBatchInCallCombiner(void* calld_arg,
|
351
|
+
grpc_error* error) {
|
352
|
+
CallData* calld = static_cast<CallData*>(calld_arg);
|
353
|
+
if (calld->send_message_batch_ != nullptr) {
|
300
354
|
grpc_transport_stream_op_batch_finish_with_failure(
|
301
|
-
calld->
|
302
|
-
|
355
|
+
calld->send_message_batch_, GRPC_ERROR_REF(error),
|
356
|
+
calld->call_combiner_);
|
357
|
+
calld->send_message_batch_ = nullptr;
|
303
358
|
}
|
304
359
|
}
|
305
360
|
|
306
|
-
// Pulls a slice from the send_message byte stream and adds it to
|
307
|
-
|
361
|
+
// Pulls a slice from the send_message byte stream and adds it to slices_.
|
362
|
+
grpc_error* CallData::PullSliceFromSendMessage() {
|
308
363
|
grpc_slice incoming_slice;
|
309
364
|
grpc_error* error =
|
310
|
-
|
365
|
+
send_message_batch_->payload->send_message.send_message->Pull(
|
311
366
|
&incoming_slice);
|
312
367
|
if (error == GRPC_ERROR_NONE) {
|
313
|
-
grpc_slice_buffer_add(&
|
368
|
+
grpc_slice_buffer_add(&slices_, incoming_slice);
|
314
369
|
}
|
315
370
|
return error;
|
316
371
|
}
|
317
372
|
|
318
373
|
// Reads as many slices as possible from the send_message byte stream.
|
319
|
-
// If all data has been read, invokes
|
374
|
+
// If all data has been read, invokes FinishSendMessage(). Otherwise,
|
320
375
|
// an async call to ByteStream::Next() has been started, which will
|
321
|
-
// eventually result in calling
|
322
|
-
|
323
|
-
|
324
|
-
|
325
|
-
|
326
|
-
finish_send_message(elem);
|
376
|
+
// eventually result in calling OnSendMessageNextDone().
|
377
|
+
void CallData::ContinueReadingSendMessage(grpc_call_element* elem) {
|
378
|
+
if (slices_.length ==
|
379
|
+
send_message_batch_->payload->send_message.send_message->length()) {
|
380
|
+
FinishSendMessage(elem);
|
327
381
|
return;
|
328
382
|
}
|
329
|
-
while (
|
330
|
-
~static_cast<size_t>(0), &
|
331
|
-
grpc_error* error =
|
383
|
+
while (send_message_batch_->payload->send_message.send_message->Next(
|
384
|
+
~static_cast<size_t>(0), &on_send_message_next_done_)) {
|
385
|
+
grpc_error* error = PullSliceFromSendMessage();
|
332
386
|
if (error != GRPC_ERROR_NONE) {
|
333
387
|
// Closure callback; does not take ownership of error.
|
334
|
-
|
388
|
+
FailSendMessageBatchInCallCombiner(this, error);
|
335
389
|
GRPC_ERROR_UNREF(error);
|
336
390
|
return;
|
337
391
|
}
|
338
|
-
if (
|
339
|
-
|
340
|
-
|
392
|
+
if (slices_.length ==
|
393
|
+
send_message_batch_->payload->send_message.send_message->length()) {
|
394
|
+
FinishSendMessage(elem);
|
341
395
|
break;
|
342
396
|
}
|
343
397
|
}
|
344
398
|
}
|
345
399
|
|
346
400
|
// Async callback for ByteStream::Next().
|
347
|
-
|
348
|
-
grpc_call_element* elem = static_cast<grpc_call_element*>(
|
349
|
-
|
401
|
+
void CallData::OnSendMessageNextDone(void* elem_arg, grpc_error* error) {
|
402
|
+
grpc_call_element* elem = static_cast<grpc_call_element*>(elem_arg);
|
403
|
+
CallData* calld = static_cast<CallData*>(elem->call_data);
|
350
404
|
if (error != GRPC_ERROR_NONE) {
|
351
405
|
// Closure callback; does not take ownership of error.
|
352
|
-
|
406
|
+
FailSendMessageBatchInCallCombiner(calld, error);
|
353
407
|
return;
|
354
408
|
}
|
355
|
-
error =
|
409
|
+
error = calld->PullSliceFromSendMessage();
|
356
410
|
if (error != GRPC_ERROR_NONE) {
|
357
411
|
// Closure callback; does not take ownership of error.
|
358
|
-
|
412
|
+
FailSendMessageBatchInCallCombiner(calld, error);
|
359
413
|
GRPC_ERROR_UNREF(error);
|
360
414
|
return;
|
361
415
|
}
|
362
|
-
if (calld->
|
363
|
-
|
364
|
-
|
416
|
+
if (calld->slices_.length == calld->send_message_batch_->payload->send_message
|
417
|
+
.send_message->length()) {
|
418
|
+
calld->FinishSendMessage(elem);
|
365
419
|
} else {
|
366
|
-
|
420
|
+
calld->ContinueReadingSendMessage(elem);
|
367
421
|
}
|
368
422
|
}
|
369
423
|
|
370
|
-
|
371
|
-
grpc_call_element* elem = static_cast<grpc_call_element*>(
|
372
|
-
|
373
|
-
|
424
|
+
void CallData::StartSendMessageBatch(void* elem_arg, grpc_error* /*unused*/) {
|
425
|
+
grpc_call_element* elem = static_cast<grpc_call_element*>(elem_arg);
|
426
|
+
CallData* calld = static_cast<CallData*>(elem->call_data);
|
427
|
+
if (calld->SkipMessageCompression()) {
|
428
|
+
calld->SendMessageBatchContinue(elem);
|
374
429
|
} else {
|
375
|
-
|
430
|
+
calld->ContinueReadingSendMessage(elem);
|
376
431
|
}
|
377
432
|
}
|
378
433
|
|
379
|
-
|
434
|
+
void CallData::CompressStartTransportStreamOpBatch(
|
380
435
|
grpc_call_element* elem, grpc_transport_stream_op_batch* batch) {
|
381
436
|
GPR_TIMER_SCOPE("compress_start_transport_stream_op_batch", 0);
|
382
|
-
call_data* calld = static_cast<call_data*>(elem->call_data);
|
383
437
|
// Handle cancel_stream.
|
384
438
|
if (batch->cancel_stream) {
|
385
|
-
GRPC_ERROR_UNREF(
|
386
|
-
|
387
|
-
|
388
|
-
|
389
|
-
if (!calld->seen_initial_metadata) {
|
439
|
+
GRPC_ERROR_UNREF(cancel_error_);
|
440
|
+
cancel_error_ = GRPC_ERROR_REF(batch->payload->cancel_stream.cancel_error);
|
441
|
+
if (send_message_batch_ != nullptr) {
|
442
|
+
if (!seen_initial_metadata_) {
|
390
443
|
GRPC_CALL_COMBINER_START(
|
391
|
-
|
392
|
-
GRPC_CLOSURE_CREATE(
|
444
|
+
call_combiner_,
|
445
|
+
GRPC_CLOSURE_CREATE(FailSendMessageBatchInCallCombiner, this,
|
393
446
|
grpc_schedule_on_exec_ctx),
|
394
|
-
GRPC_ERROR_REF(
|
447
|
+
GRPC_ERROR_REF(cancel_error_), "failing send_message op");
|
395
448
|
} else {
|
396
|
-
|
397
|
-
GRPC_ERROR_REF(
|
449
|
+
send_message_batch_->payload->send_message.send_message->Shutdown(
|
450
|
+
GRPC_ERROR_REF(cancel_error_));
|
398
451
|
}
|
399
452
|
}
|
400
|
-
} else if (
|
453
|
+
} else if (cancel_error_ != GRPC_ERROR_NONE) {
|
401
454
|
grpc_transport_stream_op_batch_finish_with_failure(
|
402
|
-
batch, GRPC_ERROR_REF(
|
455
|
+
batch, GRPC_ERROR_REF(cancel_error_), call_combiner_);
|
403
456
|
return;
|
404
457
|
}
|
405
458
|
// Handle send_initial_metadata.
|
406
459
|
if (batch->send_initial_metadata) {
|
407
|
-
GPR_ASSERT(!
|
408
|
-
grpc_error* error =
|
460
|
+
GPR_ASSERT(!seen_initial_metadata_);
|
461
|
+
grpc_error* error = ProcessSendInitialMetadata(
|
409
462
|
elem, batch->payload->send_initial_metadata.send_initial_metadata);
|
410
463
|
if (error != GRPC_ERROR_NONE) {
|
411
464
|
grpc_transport_stream_op_batch_finish_with_failure(batch, error,
|
412
|
-
|
465
|
+
call_combiner_);
|
413
466
|
return;
|
414
467
|
}
|
415
|
-
|
468
|
+
seen_initial_metadata_ = true;
|
416
469
|
// If we had previously received a batch containing a send_message op,
|
417
470
|
// handle it now. Note that we need to re-enter the call combiner
|
418
471
|
// for this, since we can't send two batches down while holding the
|
419
472
|
// call combiner, since the connected_channel filter (at the bottom of
|
420
473
|
// the call stack) will release the call combiner for each batch it sees.
|
421
|
-
if (
|
474
|
+
if (send_message_batch_ != nullptr) {
|
422
475
|
GRPC_CALL_COMBINER_START(
|
423
|
-
|
424
|
-
|
425
|
-
"starting send_message after send_initial_metadata");
|
476
|
+
call_combiner_, &start_send_message_batch_in_call_combiner_,
|
477
|
+
GRPC_ERROR_NONE, "starting send_message after send_initial_metadata");
|
426
478
|
}
|
427
479
|
}
|
428
480
|
// Handle send_message.
|
429
481
|
if (batch->send_message) {
|
430
|
-
GPR_ASSERT(
|
431
|
-
|
482
|
+
GPR_ASSERT(send_message_batch_ == nullptr);
|
483
|
+
send_message_batch_ = batch;
|
432
484
|
// If we have not yet seen send_initial_metadata, then we have to
|
433
|
-
// wait. We save the batch
|
434
|
-
//
|
435
|
-
|
436
|
-
if (!calld->seen_initial_metadata) {
|
485
|
+
// wait. We save the batch and then drop the call combiner, which we'll
|
486
|
+
// have to pick up again later when we get send_initial_metadata.
|
487
|
+
if (!seen_initial_metadata_) {
|
437
488
|
GRPC_CALL_COMBINER_STOP(
|
438
|
-
|
439
|
-
"send_message batch pending send_initial_metadata");
|
489
|
+
call_combiner_, "send_message batch pending send_initial_metadata");
|
440
490
|
return;
|
441
491
|
}
|
442
|
-
|
492
|
+
StartSendMessageBatch(elem, GRPC_ERROR_NONE);
|
443
493
|
} else {
|
444
494
|
// Pass control down the stack.
|
445
495
|
grpc_call_next_op(elem, batch);
|
446
496
|
}
|
447
497
|
}
|
448
498
|
|
499
|
+
void CompressStartTransportStreamOpBatch(
|
500
|
+
grpc_call_element* elem, grpc_transport_stream_op_batch* batch) {
|
501
|
+
CallData* calld = static_cast<CallData*>(elem->call_data);
|
502
|
+
calld->CompressStartTransportStreamOpBatch(elem, batch);
|
503
|
+
}
|
504
|
+
|
449
505
|
/* Constructor for call_data */
|
450
|
-
|
451
|
-
|
452
|
-
new (elem->call_data)
|
506
|
+
grpc_error* CompressInitCallElem(grpc_call_element* elem,
|
507
|
+
const grpc_call_element_args* args) {
|
508
|
+
new (elem->call_data) CallData(elem, *args);
|
453
509
|
return GRPC_ERROR_NONE;
|
454
510
|
}
|
455
511
|
|
456
512
|
/* Destructor for call_data */
|
457
|
-
|
458
|
-
|
459
|
-
|
460
|
-
|
461
|
-
calld->~
|
513
|
+
void CompressDestroyCallElem(grpc_call_element* elem,
|
514
|
+
const grpc_call_final_info* /*final_info*/,
|
515
|
+
grpc_closure* /*ignored*/) {
|
516
|
+
CallData* calld = static_cast<CallData*>(elem->call_data);
|
517
|
+
calld->~CallData();
|
462
518
|
}
|
463
519
|
|
464
|
-
/* Constructor for
|
465
|
-
|
466
|
-
|
467
|
-
|
468
|
-
// Get the enabled and the default algorithms from channel args.
|
469
|
-
channeld->enabled_compression_algorithms_bitset =
|
470
|
-
grpc_channel_args_compression_algorithm_get_states(args->channel_args);
|
471
|
-
channeld->default_compression_algorithm =
|
472
|
-
grpc_channel_args_get_channel_default_compression_algorithm(
|
473
|
-
args->channel_args);
|
474
|
-
// Make sure the default is enabled.
|
475
|
-
if (!GPR_BITGET(channeld->enabled_compression_algorithms_bitset,
|
476
|
-
channeld->default_compression_algorithm)) {
|
477
|
-
const char* name;
|
478
|
-
GPR_ASSERT(grpc_compression_algorithm_name(
|
479
|
-
channeld->default_compression_algorithm, &name) == 1);
|
480
|
-
gpr_log(GPR_ERROR,
|
481
|
-
"default compression algorithm %s not enabled: switching to none",
|
482
|
-
name);
|
483
|
-
channeld->default_compression_algorithm = GRPC_COMPRESS_NONE;
|
484
|
-
}
|
485
|
-
channeld->enabled_message_compression_algorithms_bitset =
|
486
|
-
grpc_compression_bitset_to_message_bitset(
|
487
|
-
channeld->enabled_compression_algorithms_bitset);
|
488
|
-
channeld->enabled_stream_compression_algorithms_bitset =
|
489
|
-
grpc_compression_bitset_to_stream_bitset(
|
490
|
-
channeld->enabled_compression_algorithms_bitset);
|
491
|
-
GPR_ASSERT(!args->is_last);
|
520
|
+
/* Constructor for ChannelData */
|
521
|
+
grpc_error* CompressInitChannelElem(grpc_channel_element* elem,
|
522
|
+
grpc_channel_element_args* args) {
|
523
|
+
new (elem->channel_data) ChannelData(args);
|
492
524
|
return GRPC_ERROR_NONE;
|
493
525
|
}
|
494
526
|
|
495
527
|
/* Destructor for channel data */
|
496
|
-
|
528
|
+
void CompressDestroyChannelElem(grpc_channel_element* elem) {
|
529
|
+
ChannelData* channeld = static_cast<ChannelData*>(elem->channel_data);
|
530
|
+
channeld->~ChannelData();
|
531
|
+
}
|
532
|
+
|
533
|
+
} // namespace
|
497
534
|
|
498
535
|
const grpc_channel_filter grpc_message_compress_filter = {
|
499
|
-
|
536
|
+
CompressStartTransportStreamOpBatch,
|
500
537
|
grpc_channel_next_op,
|
501
|
-
sizeof(
|
502
|
-
|
538
|
+
sizeof(CallData),
|
539
|
+
CompressInitCallElem,
|
503
540
|
grpc_call_stack_ignore_set_pollset_or_pollset_set,
|
504
|
-
|
505
|
-
sizeof(
|
506
|
-
|
507
|
-
|
541
|
+
CompressDestroyCallElem,
|
542
|
+
sizeof(ChannelData),
|
543
|
+
CompressInitChannelElem,
|
544
|
+
CompressDestroyChannelElem,
|
508
545
|
grpc_channel_next_get_info,
|
509
546
|
"message_compress"};
|