grpc 1.51.0 → 1.52.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 +91 -23
- data/include/grpc/byte_buffer.h +76 -1
- data/include/grpc/byte_buffer_reader.h +19 -1
- data/include/grpc/compression.h +2 -2
- data/include/grpc/event_engine/event_engine.h +17 -3
- data/include/grpc/event_engine/internal/memory_allocator_impl.h +1 -1
- data/include/grpc/event_engine/internal/slice_cast.h +67 -0
- data/include/grpc/event_engine/memory_allocator.h +1 -1
- data/include/grpc/event_engine/slice.h +24 -4
- data/include/grpc/event_engine/slice_buffer.h +14 -2
- data/include/grpc/fork.h +25 -1
- data/include/grpc/grpc.h +3 -3
- data/include/grpc/grpc_posix.h +1 -1
- data/include/grpc/impl/codegen/atm.h +3 -71
- data/include/grpc/impl/codegen/atm_gcc_atomic.h +3 -58
- data/include/grpc/impl/codegen/atm_gcc_sync.h +3 -59
- data/include/grpc/impl/codegen/atm_windows.h +3 -106
- data/include/grpc/impl/codegen/byte_buffer.h +4 -78
- data/include/grpc/impl/codegen/byte_buffer_reader.h +4 -19
- data/include/grpc/impl/codegen/compression_types.h +3 -82
- data/include/grpc/impl/codegen/connectivity_state.h +3 -20
- data/include/grpc/impl/codegen/fork.h +4 -25
- data/include/grpc/impl/codegen/gpr_types.h +2 -34
- data/include/grpc/impl/codegen/grpc_types.h +3 -787
- data/include/grpc/impl/codegen/log.h +3 -86
- data/include/grpc/impl/codegen/port_platform.h +3 -755
- data/include/grpc/impl/codegen/propagation_bits.h +3 -28
- data/include/grpc/impl/codegen/slice.h +3 -106
- data/include/grpc/impl/codegen/status.h +4 -131
- data/include/grpc/impl/codegen/sync.h +3 -42
- data/include/grpc/impl/codegen/sync_abseil.h +3 -12
- data/include/grpc/impl/codegen/sync_custom.h +3 -14
- data/include/grpc/impl/codegen/sync_generic.h +3 -25
- data/include/grpc/impl/codegen/sync_posix.h +3 -28
- data/include/grpc/impl/codegen/sync_windows.h +3 -16
- data/include/grpc/impl/compression_types.h +109 -0
- data/include/grpc/impl/connectivity_state.h +47 -0
- data/include/grpc/impl/grpc_types.h +824 -0
- data/include/grpc/impl/propagation_bits.h +54 -0
- data/include/grpc/impl/slice_type.h +112 -0
- data/include/grpc/load_reporting.h +1 -1
- data/include/grpc/module.modulemap +5 -1
- data/include/grpc/slice.h +1 -1
- data/include/grpc/status.h +131 -1
- data/include/grpc/support/atm.h +70 -1
- data/include/grpc/support/atm_gcc_atomic.h +59 -1
- data/include/grpc/support/atm_gcc_sync.h +58 -1
- data/include/grpc/support/atm_windows.h +105 -1
- data/include/grpc/support/log.h +87 -1
- data/include/grpc/support/log_windows.h +1 -1
- data/include/grpc/support/port_platform.h +767 -1
- data/include/grpc/support/string_util.h +1 -1
- data/include/grpc/support/sync.h +35 -2
- data/include/grpc/support/sync_abseil.h +11 -1
- data/include/grpc/support/sync_custom.h +13 -1
- data/include/grpc/support/sync_generic.h +24 -1
- data/include/grpc/support/sync_posix.h +27 -1
- data/include/grpc/support/sync_windows.h +15 -1
- data/include/grpc/support/time.h +25 -2
- data/src/core/ext/filters/census/grpc_context.cc +17 -18
- data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +9 -9
- data/src/core/ext/filters/channel_idle/channel_idle_filter.h +1 -1
- data/src/core/ext/filters/channel_idle/idle_filter_state.h +1 -1
- data/src/core/ext/filters/client_channel/backend_metric.cc +2 -0
- data/src/core/ext/filters/client_channel/backup_poller.cc +21 -21
- data/src/core/ext/filters/client_channel/backup_poller.h +21 -21
- data/src/core/ext/filters/client_channel/channel_connectivity.cc +45 -24
- data/src/core/ext/filters/client_channel/client_channel.cc +40 -31
- data/src/core/ext/filters/client_channel/client_channel.h +7 -6
- data/src/core/ext/filters/client_channel/client_channel_channelz.cc +17 -17
- data/src/core/ext/filters/client_channel/client_channel_channelz.h +19 -19
- data/src/core/ext/filters/client_channel/client_channel_factory.cc +17 -17
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +17 -17
- data/src/core/ext/filters/client_channel/config_selector.h +16 -20
- data/src/core/ext/filters/client_channel/dynamic_filters.cc +8 -8
- data/src/core/ext/filters/client_channel/global_subchannel_pool.h +18 -18
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +1 -1
- data/src/core/ext/filters/client_channel/http_proxy.cc +39 -39
- data/src/core/ext/filters/client_channel/http_proxy.h +18 -18
- data/src/core/ext/filters/client_channel/lb_call_state_internal.h +39 -0
- data/src/core/ext/filters/client_channel/lb_policy/backend_metric_data.h +17 -17
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +2 -2
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +1 -2
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +58 -130
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +37 -21
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +102 -116
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +24 -25
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +2 -4
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +17 -17
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +18 -19
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +18 -19
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +18 -19
- data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +5 -5
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +173 -196
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +10 -19
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +66 -97
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +14 -13
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +98 -84
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +10 -8
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +30 -16
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +21 -35
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +45 -39
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +11 -23
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +16 -49
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +31 -21
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.cc +651 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.h +60 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_wrr_locality.cc +4 -4
- data/src/core/ext/filters/client_channel/local_subchannel_pool.h +18 -18
- data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +0 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +3 -3
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +40 -41
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +21 -21
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +60 -59
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +67 -66
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +50 -51
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_posix.cc +18 -18
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +18 -18
- data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.h +18 -19
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +1 -1
- data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +0 -1
- data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +44 -33
- data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +8 -10
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +59 -73
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +1 -1
- data/src/core/ext/filters/client_channel/retry_filter.cc +1 -1
- data/src/core/ext/filters/client_channel/retry_service_config.cc +1 -1
- data/src/core/ext/filters/client_channel/retry_throttle.cc +19 -21
- data/src/core/ext/filters/client_channel/retry_throttle.h +18 -18
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +1 -1
- data/src/core/ext/filters/client_channel/subchannel.cc +139 -155
- data/src/core/ext/filters/client_channel/subchannel.h +15 -38
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +18 -18
- data/src/core/ext/filters/deadline/deadline_filter.cc +21 -3
- data/src/core/ext/filters/deadline/deadline_filter.h +1 -1
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +2 -1
- data/src/core/ext/filters/http/client/http_client_filter.cc +20 -21
- data/src/core/ext/filters/http/client/http_client_filter.h +17 -17
- data/src/core/ext/filters/http/client_authority_filter.cc +18 -18
- data/src/core/ext/filters/http/client_authority_filter.h +18 -18
- data/src/core/ext/filters/http/http_filters_plugin.cc +35 -51
- data/src/core/ext/filters/http/message_compress/compression_filter.cc +315 -0
- data/src/core/ext/filters/http/message_compress/compression_filter.h +132 -0
- data/src/core/ext/filters/http/server/http_server_filter.cc +18 -18
- data/src/core/ext/filters/http/server/http_server_filter.h +18 -18
- data/src/core/ext/filters/message_size/message_size_filter.cc +6 -6
- data/src/core/ext/filters/message_size/message_size_filter.h +1 -1
- data/src/core/ext/filters/server_config_selector/server_config_selector.h +6 -8
- data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +3 -4
- data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +229 -0
- data/src/core/ext/filters/stateful_session/stateful_session_filter.h +66 -0
- data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.cc +82 -0
- data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.h +93 -0
- data/src/core/ext/transport/chttp2/alpn/alpn.cc +18 -18
- data/src/core/ext/transport/chttp2/alpn/alpn.h +22 -22
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +54 -44
- data/src/core/ext/transport/chttp2/client/chttp2_connector.h +28 -22
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +24 -25
- data/src/core/ext/transport/chttp2/server/chttp2_server.h +18 -18
- data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +17 -17
- data/src/core/ext/transport/chttp2/transport/bin_decoder.h +30 -30
- data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +29 -29
- data/src/core/ext/transport/chttp2/transport/bin_encoder.h +27 -27
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +66 -35
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +18 -19
- data/src/core/ext/transport/chttp2/transport/context_list.cc +19 -19
- data/src/core/ext/transport/chttp2/transport/context_list.h +25 -25
- data/src/core/ext/transport/chttp2/transport/decode_huff.cc +0 -36
- data/src/core/ext/transport/chttp2/transport/decode_huff.h +35 -82
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +75 -38
- data/src/core/ext/transport/chttp2/transport/flow_control.h +56 -31
- data/src/core/ext/transport/chttp2/transport/frame.h +19 -19
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +17 -17
- data/src/core/ext/transport/chttp2/transport/frame_data.h +22 -22
- data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +23 -23
- data/src/core/ext/transport/chttp2/transport/frame_goaway.h +18 -18
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +21 -21
- data/src/core/ext/transport/chttp2/transport/frame_ping.h +19 -19
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +18 -18
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +18 -18
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +19 -19
- data/src/core/ext/transport/chttp2/transport/frame_settings.h +20 -20
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +17 -17
- data/src/core/ext/transport/chttp2/transport/frame_window_update.h +18 -18
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +129 -176
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +39 -58
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +69 -111
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +20 -20
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +19 -20
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +18 -18
- data/src/core/ext/transport/chttp2/transport/http2_settings.cc +21 -19
- data/src/core/ext/transport/chttp2/transport/http2_settings.h +36 -34
- data/src/core/ext/transport/chttp2/transport/http_trace.cc +19 -0
- data/src/core/ext/transport/chttp2/transport/http_trace.h +24 -0
- data/src/core/ext/transport/chttp2/transport/huffsyms.cc +20 -20
- data/src/core/ext/transport/chttp2/transport/huffsyms.h +19 -19
- data/src/core/ext/transport/chttp2/transport/internal.h +170 -163
- data/src/core/ext/transport/chttp2/transport/parsing.cc +96 -28
- data/src/core/ext/transport/chttp2/transport/stream_lists.cc +19 -19
- data/src/core/ext/transport/chttp2/transport/stream_map.cc +23 -23
- data/src/core/ext/transport/chttp2/transport/stream_map.h +31 -31
- data/src/core/ext/transport/chttp2/transport/varint.cc +17 -17
- data/src/core/ext/transport/chttp2/transport/varint.h +24 -24
- data/src/core/ext/transport/chttp2/transport/writing.cc +45 -41
- data/src/core/ext/transport/inproc/inproc_plugin.cc +17 -17
- data/src/core/ext/transport/inproc/inproc_transport.cc +25 -25
- data/src/core/ext/transport/inproc/inproc_transport.h +19 -19
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.c +62 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.h +179 -0
- data/src/core/ext/upb-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb.c +46 -0
- data/src/core/ext/upb-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb.h +98 -0
- data/src/core/ext/upb-generated/xds/core/v3/cidr.upb.c +47 -0
- data/src/core/ext/upb-generated/xds/core/v3/cidr.upb.h +107 -0
- data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +3 -2
- data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +9 -0
- data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.c +0 -1
- data/src/core/ext/upb-generated/xds/type/matcher/v3/cel.upb.c +46 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/cel.upb.h +98 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/domain.upb.c +62 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/domain.upb.h +174 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/http_inputs.upb.c +36 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/http_inputs.upb.h +74 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/ip.upb.c +65 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/ip.upb.h +191 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/range.upb.c +127 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/range.upb.h +474 -0
- data/src/core/ext/upb-generated/xds/type/v3/cel.upb.c +67 -0
- data/src/core/ext/upb-generated/xds/type/v3/cel.upb.h +214 -0
- data/src/core/ext/upb-generated/xds/type/v3/range.upb.c +64 -0
- data/src/core/ext/upb-generated/xds/type/v3/range.upb.h +208 -0
- data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.c +0 -1
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.c +60 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upbdefs.c +50 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/cidr.upbdefs.c +45 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/cidr.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/cel.upbdefs.c +43 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/cel.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/domain.upbdefs.c +51 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/domain.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/http_inputs.upbdefs.c +36 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/http_inputs.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/ip.upbdefs.c +55 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/ip.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/matcher.upbdefs.c +9 -9
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/range.upbdefs.c +71 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/range.upbdefs.h +60 -0
- data/src/core/ext/upbdefs-generated/xds/type/v3/cel.upbdefs.c +60 -0
- data/src/core/ext/upbdefs-generated/xds/type/v3/cel.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/xds/type/v3/range.upbdefs.c +36 -0
- data/src/core/ext/upbdefs-generated/xds/type/v3/range.upbdefs.h +45 -0
- data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.c +4 -7
- data/src/core/ext/xds/xds_api.cc +5 -27
- data/src/core/ext/xds/xds_api.h +2 -1
- data/src/core/ext/xds/xds_certificate_provider.h +1 -1
- data/src/core/ext/xds/xds_channel_args.h +1 -1
- data/src/core/ext/xds/xds_channel_stack_modifier.h +2 -2
- data/src/core/ext/xds/xds_client.cc +14 -6
- data/src/core/ext/xds/xds_client.h +6 -3
- data/src/core/ext/xds/xds_client_grpc.cc +26 -0
- data/src/core/ext/xds/xds_client_grpc.h +1 -1
- data/src/core/ext/xds/xds_client_stats.cc +17 -17
- data/src/core/ext/xds/xds_client_stats.h +18 -18
- data/src/core/ext/xds/xds_cluster.cc +94 -46
- data/src/core/ext/xds/xds_cluster.h +44 -23
- data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +30 -50
- data/src/core/ext/xds/xds_cluster_specifier_plugin.h +14 -9
- data/src/core/ext/xds/xds_common_types.cc +4 -3
- data/src/core/ext/xds/xds_endpoint.cc +8 -2
- data/src/core/ext/xds/xds_health_status.cc +80 -0
- data/src/core/ext/xds/xds_health_status.h +82 -0
- data/src/core/ext/xds/xds_http_fault_filter.cc +7 -6
- data/src/core/ext/xds/xds_http_fault_filter.h +3 -3
- data/src/core/ext/xds/xds_http_filters.cc +11 -6
- data/src/core/ext/xds/xds_http_filters.h +5 -5
- data/src/core/ext/xds/xds_http_rbac_filter.cc +7 -6
- data/src/core/ext/xds/xds_http_rbac_filter.h +3 -3
- data/src/core/ext/xds/xds_http_stateful_session_filter.cc +218 -0
- data/src/core/ext/xds/xds_http_stateful_session_filter.h +58 -0
- data/src/core/ext/xds/xds_lb_policy_registry.cc +0 -4
- data/src/core/ext/xds/xds_listener.cc +14 -28
- data/src/core/ext/xds/xds_listener.h +2 -0
- data/src/core/ext/xds/xds_resource_type_impl.h +8 -6
- data/src/core/ext/xds/xds_route_config.cc +501 -529
- data/src/core/ext/xds/xds_route_config.h +29 -18
- data/src/core/ext/xds/xds_server_config_fetcher.cc +12 -24
- data/src/core/ext/xds/xds_transport_grpc.cc +2 -2
- data/src/core/ext/xds/xds_transport_grpc.h +1 -1
- data/src/core/lib/address_utils/parse_address.cc +19 -19
- data/src/core/lib/address_utils/parse_address.h +32 -32
- data/src/core/lib/address_utils/sockaddr_utils.cc +29 -28
- data/src/core/lib/address_utils/sockaddr_utils.h +33 -33
- data/src/core/lib/avl/avl.h +4 -4
- data/src/core/lib/backoff/backoff.cc +17 -17
- data/src/core/lib/backoff/backoff.h +18 -18
- data/src/core/lib/channel/call_tracer.h +10 -1
- data/src/core/lib/channel/channel_args.cc +19 -20
- data/src/core/lib/channel/channel_args.h +43 -42
- data/src/core/lib/channel/channel_args_preconditioning.h +1 -1
- data/src/core/lib/channel/channel_stack.cc +39 -38
- data/src/core/lib/channel/channel_stack.h +127 -127
- data/src/core/lib/channel/channel_stack_builder.cc +17 -17
- data/src/core/lib/channel/channel_stack_builder_impl.cc +18 -18
- data/src/core/lib/channel/channel_trace.cc +17 -17
- data/src/core/lib/channel/channel_trace.h +19 -19
- data/src/core/lib/channel/channelz.cc +17 -18
- data/src/core/lib/channel/channelz.h +26 -26
- data/src/core/lib/channel/channelz_registry.cc +17 -17
- data/src/core/lib/channel/channelz_registry.h +18 -18
- data/src/core/lib/channel/connected_channel.cc +43 -34
- data/src/core/lib/channel/connected_channel.h +18 -18
- data/src/core/lib/channel/context.h +18 -18
- data/src/core/lib/channel/promise_based_filter.cc +191 -68
- data/src/core/lib/channel/promise_based_filter.h +10 -1
- data/src/core/lib/channel/status_util.cc +35 -17
- data/src/core/lib/channel/status_util.h +26 -19
- data/src/core/lib/compression/compression.cc +19 -19
- data/src/core/lib/compression/compression_internal.cc +41 -48
- data/src/core/lib/compression/compression_internal.h +22 -22
- data/src/core/lib/compression/message_compress.cc +21 -21
- data/src/core/lib/compression/message_compress.h +25 -25
- data/src/core/lib/config/core_configuration.h +1 -1
- data/src/core/lib/debug/stats.cc +17 -17
- data/src/core/lib/debug/stats.h +17 -17
- data/src/core/lib/debug/trace.cc +18 -18
- data/src/core/lib/debug/trace.h +19 -19
- data/src/core/lib/event_engine/executor/executor.h +1 -1
- data/src/core/lib/event_engine/forkable.h +1 -1
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +27 -31
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h +2 -2
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +36 -37
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +3 -3
- data/src/core/lib/event_engine/posix_engine/event_poller.h +3 -3
- data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +2 -2
- data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.h +2 -2
- data/src/core/lib/event_engine/posix_engine/internal_errqueue.cc +2 -2
- data/src/core/lib/event_engine/posix_engine/internal_errqueue.h +46 -46
- data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +10 -12
- data/src/core/lib/event_engine/posix_engine/lockfree_event.h +2 -2
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +79 -41
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +11 -9
- data/src/core/lib/event_engine/posix_engine/posix_engine.cc +33 -40
- data/src/core/lib/event_engine/posix_engine/posix_engine.h +14 -14
- data/src/core/lib/event_engine/posix_engine/posix_engine_closure.h +2 -2
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +236 -0
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener.h +228 -0
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +380 -0
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.h +91 -0
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +55 -283
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +4 -49
- data/src/core/lib/event_engine/posix_engine/timer.cc +49 -49
- data/src/core/lib/event_engine/posix_engine/timer.h +87 -87
- data/src/core/lib/event_engine/posix_engine/timer_heap.cc +27 -27
- data/src/core/lib/event_engine/posix_engine/timer_heap.h +21 -21
- data/src/core/lib/event_engine/posix_engine/timer_manager.cc +19 -20
- data/src/core/lib/event_engine/posix_engine/timer_manager.h +20 -20
- data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +39 -8
- data/src/core/lib/event_engine/posix_engine/traced_buffer_list.h +46 -40
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.cc +8 -7
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.h +2 -2
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.cc +6 -7
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.h +2 -2
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h +28 -28
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.cc +4 -4
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h +3 -3
- data/src/core/lib/event_engine/socket_notifier.h +1 -1
- data/src/core/lib/event_engine/tcp_socket_utils.cc +373 -0
- data/src/core/lib/event_engine/tcp_socket_utils.h +85 -0
- data/src/core/lib/event_engine/thread_pool.cc +19 -18
- data/src/core/lib/event_engine/thread_pool.h +17 -17
- data/src/core/lib/event_engine/time_util.h +1 -1
- data/src/core/lib/event_engine/windows/iocp.cc +13 -12
- data/src/core/lib/event_engine/windows/iocp.h +1 -1
- data/src/core/lib/event_engine/windows/win_socket.cc +2 -2
- data/src/core/lib/event_engine/windows/windows_engine.cc +8 -8
- data/src/core/lib/event_engine/windows/windows_engine.h +1 -1
- data/src/core/lib/experiments/experiments.cc +5 -16
- data/src/core/lib/experiments/experiments.h +7 -12
- data/src/core/lib/gpr/alloc.cc +19 -17
- data/src/core/lib/gpr/alloc.h +18 -18
- data/src/core/lib/gpr/atm.cc +17 -17
- data/src/core/lib/gpr/cpu_iphone.cc +24 -24
- data/src/core/lib/gpr/cpu_linux.cc +22 -21
- data/src/core/lib/gpr/cpu_posix.cc +23 -22
- data/src/core/lib/gpr/cpu_windows.cc +20 -18
- data/src/core/lib/gpr/log.cc +27 -19
- data/src/core/lib/gpr/log_android.cc +22 -20
- data/src/core/lib/gpr/log_linux.cc +21 -20
- data/src/core/lib/gpr/log_posix.cc +20 -19
- data/src/core/lib/gpr/log_windows.cc +25 -24
- data/src/core/lib/gpr/spinlock.h +18 -18
- data/src/core/lib/gpr/string.cc +25 -24
- data/src/core/lib/gpr/string.h +57 -57
- data/src/core/lib/gpr/string_posix.cc +24 -24
- data/src/core/lib/gpr/string_util_windows.cc +22 -22
- data/src/core/lib/gpr/string_windows.cc +24 -24
- data/src/core/lib/gpr/sync.cc +25 -25
- data/src/core/lib/gpr/sync_abseil.cc +22 -20
- data/src/core/lib/gpr/sync_posix.cc +23 -21
- data/src/core/lib/gpr/sync_windows.cc +29 -27
- data/src/core/lib/gpr/time.cc +23 -21
- data/src/core/lib/gpr/time_posix.cc +35 -30
- data/src/core/lib/gpr/time_precise.cc +22 -22
- data/src/core/lib/gpr/time_precise.h +18 -19
- data/src/core/lib/gpr/time_windows.cc +25 -22
- data/src/core/lib/gpr/tmpfile.h +22 -22
- data/src/core/lib/gpr/tmpfile_msys.cc +21 -20
- data/src/core/lib/gpr/tmpfile_posix.cc +19 -18
- data/src/core/lib/gpr/tmpfile_windows.cc +23 -22
- data/src/core/lib/gpr/useful.h +40 -27
- data/src/core/lib/gpr/wrap_memcpy.cc +23 -23
- data/src/core/lib/gprpp/atomic_utils.h +18 -18
- data/src/core/lib/gprpp/bitset.h +24 -0
- data/src/core/{ext/filters/http/message_compress/message_decompress_filter.h → lib/gprpp/crash.cc} +15 -14
- data/src/core/lib/gprpp/crash.h +34 -0
- data/src/core/lib/gprpp/debug_location.h +18 -18
- data/src/core/lib/gprpp/dual_ref_counted.h +1 -1
- data/src/core/lib/gprpp/env.h +20 -20
- data/src/core/lib/gprpp/env_linux.cc +21 -21
- data/src/core/lib/gprpp/env_posix.cc +18 -18
- data/src/core/lib/gprpp/env_windows.cc +18 -18
- data/src/core/lib/gprpp/examine_stack.cc +17 -17
- data/src/core/lib/gprpp/examine_stack.h +18 -18
- data/src/core/lib/gprpp/fork.cc +21 -22
- data/src/core/lib/gprpp/fork.h +22 -22
- data/src/core/lib/gprpp/global_config.h +18 -18
- data/src/core/lib/gprpp/global_config_custom.h +18 -18
- data/src/core/lib/gprpp/global_config_env.cc +17 -17
- data/src/core/lib/gprpp/global_config_env.h +23 -23
- data/src/core/lib/gprpp/global_config_generic.h +18 -18
- data/src/core/lib/gprpp/host_port.cc +26 -26
- data/src/core/lib/gprpp/host_port.h +29 -28
- data/src/core/lib/gprpp/manual_constructor.h +18 -17
- data/src/core/lib/gprpp/memory.h +18 -18
- data/src/core/lib/gprpp/mpscq.cc +17 -17
- data/src/core/lib/gprpp/mpscq.h +18 -18
- data/src/core/lib/gprpp/no_destruct.h +1 -0
- data/src/core/lib/gprpp/orphanable.h +18 -18
- data/src/core/lib/gprpp/ref_counted.h +18 -18
- data/src/core/lib/gprpp/ref_counted_ptr.h +19 -18
- data/src/core/lib/gprpp/stat_windows.cc +1 -0
- data/src/core/lib/gprpp/status_helper.cc +4 -3
- data/src/core/lib/gprpp/sync.h +20 -20
- data/src/core/lib/gprpp/table.h +1 -0
- data/src/core/lib/gprpp/thd.h +19 -19
- data/src/core/lib/gprpp/thd_posix.cc +30 -31
- data/src/core/lib/gprpp/thd_windows.cc +25 -24
- data/src/core/lib/gprpp/time.cc +13 -7
- data/src/core/lib/gprpp/time.h +0 -1
- data/src/core/lib/gprpp/time_averaged_stats.cc +20 -20
- data/src/core/lib/gprpp/time_averaged_stats.h +48 -48
- data/src/core/lib/gprpp/time_util.h +1 -1
- data/src/core/lib/gprpp/unique_type_name.h +18 -18
- data/src/core/lib/handshaker/proxy_mapper.h +18 -18
- data/src/core/lib/handshaker/proxy_mapper_registry.cc +17 -17
- data/src/core/lib/handshaker/proxy_mapper_registry.h +18 -18
- data/src/core/lib/http/format_request.cc +18 -18
- data/src/core/lib/http/format_request.h +18 -18
- data/src/core/lib/http/httpcli.cc +17 -17
- data/src/core/lib/http/httpcli.h +20 -21
- data/src/core/lib/http/httpcli_security_connector.cc +18 -19
- data/src/core/lib/http/parser.cc +22 -22
- data/src/core/lib/http/parser.h +32 -32
- data/src/core/lib/iomgr/block_annotate.h +21 -21
- data/src/core/lib/iomgr/buffer_list.cc +52 -21
- data/src/core/lib/iomgr/buffer_list.h +63 -57
- data/src/core/lib/iomgr/call_combiner.cc +18 -17
- data/src/core/lib/iomgr/call_combiner.h +18 -18
- data/src/core/lib/iomgr/cfstream_handle.cc +20 -20
- data/src/core/lib/iomgr/cfstream_handle.h +22 -22
- data/src/core/lib/iomgr/closure.h +42 -41
- data/src/core/lib/iomgr/combiner.cc +18 -17
- data/src/core/lib/iomgr/combiner.h +18 -18
- data/src/core/lib/iomgr/dualstack_socket_posix.cc +21 -21
- data/src/core/lib/iomgr/dynamic_annotations.h +20 -20
- data/src/core/lib/iomgr/endpoint.cc +17 -17
- data/src/core/lib/iomgr/endpoint.h +46 -46
- data/src/core/lib/iomgr/endpoint_cfstream.cc +18 -18
- data/src/core/lib/iomgr/endpoint_cfstream.h +27 -27
- data/src/core/lib/iomgr/endpoint_pair.h +18 -18
- data/src/core/lib/iomgr/endpoint_pair_posix.cc +18 -17
- data/src/core/lib/iomgr/endpoint_pair_windows.cc +18 -17
- data/src/core/lib/iomgr/error.cc +22 -19
- data/src/core/lib/iomgr/error.h +20 -21
- data/src/core/lib/iomgr/error_cfstream.cc +18 -18
- data/src/core/lib/iomgr/error_cfstream.h +19 -19
- data/src/core/lib/iomgr/ev_apple.cc +17 -17
- data/src/core/lib/iomgr/ev_apple.h +17 -17
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +182 -170
- data/src/core/lib/iomgr/ev_epoll1_linux.h +18 -18
- data/src/core/lib/iomgr/ev_poll_posix.cc +185 -174
- data/src/core/lib/iomgr/ev_poll_posix.h +18 -18
- data/src/core/lib/iomgr/ev_posix.cc +36 -28
- data/src/core/lib/iomgr/ev_posix.h +85 -81
- data/src/core/lib/iomgr/ev_windows.cc +18 -18
- data/src/core/lib/iomgr/exec_ctx.cc +31 -30
- data/src/core/lib/iomgr/exec_ctx.h +139 -138
- data/src/core/lib/iomgr/executor.cc +20 -19
- data/src/core/lib/iomgr/executor.h +24 -24
- data/src/core/lib/iomgr/fork_posix.cc +24 -22
- data/src/core/lib/iomgr/fork_windows.cc +21 -21
- data/src/core/lib/iomgr/gethostname.h +18 -18
- data/src/core/lib/iomgr/gethostname_fallback.cc +17 -17
- data/src/core/lib/iomgr/gethostname_host_name_max.cc +17 -17
- data/src/core/lib/iomgr/gethostname_sysconf.cc +17 -17
- data/src/core/lib/iomgr/grpc_if_nametoindex.h +20 -20
- data/src/core/lib/iomgr/grpc_if_nametoindex_posix.cc +20 -19
- data/src/core/lib/iomgr/grpc_if_nametoindex_unsupported.cc +20 -19
- data/src/core/lib/iomgr/internal_errqueue.cc +1 -1
- data/src/core/lib/iomgr/internal_errqueue.h +80 -80
- data/src/core/lib/iomgr/iocp_windows.cc +21 -21
- data/src/core/lib/iomgr/iocp_windows.h +18 -18
- data/src/core/lib/iomgr/iomgr.cc +19 -18
- data/src/core/lib/iomgr/iomgr.h +32 -32
- data/src/core/lib/iomgr/iomgr_internal.cc +17 -17
- data/src/core/lib/iomgr/iomgr_internal.h +25 -25
- data/src/core/lib/iomgr/iomgr_posix.cc +18 -18
- data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +18 -18
- data/src/core/lib/iomgr/iomgr_windows.cc +22 -21
- data/src/core/lib/iomgr/load_file.cc +19 -18
- data/src/core/lib/iomgr/load_file.h +20 -20
- data/src/core/lib/iomgr/lockfree_event.cc +104 -104
- data/src/core/lib/iomgr/lockfree_event.h +19 -19
- data/src/core/lib/iomgr/nameser.h +84 -84
- data/src/core/lib/iomgr/polling_entity.cc +25 -21
- data/src/core/lib/iomgr/polling_entity.h +27 -27
- data/src/core/lib/iomgr/pollset.cc +17 -17
- data/src/core/lib/iomgr/pollset.h +51 -51
- data/src/core/lib/iomgr/pollset_set.cc +17 -17
- data/src/core/lib/iomgr/pollset_set.h +22 -22
- data/src/core/lib/iomgr/pollset_set_windows.cc +18 -18
- data/src/core/lib/iomgr/pollset_set_windows.h +18 -18
- data/src/core/lib/iomgr/pollset_windows.cc +26 -25
- data/src/core/lib/iomgr/pollset_windows.h +22 -22
- data/src/core/lib/iomgr/port.h +29 -29
- data/src/core/lib/iomgr/python_util.h +18 -18
- data/src/core/lib/iomgr/resolve_address.cc +18 -17
- data/src/core/lib/iomgr/resolve_address.h +18 -18
- data/src/core/lib/iomgr/resolve_address_impl.h +1 -1
- data/src/core/lib/iomgr/resolve_address_posix.cc +21 -20
- data/src/core/lib/iomgr/resolve_address_windows.cc +4 -3
- data/src/core/lib/iomgr/resolved_address.h +1 -1
- data/src/core/lib/iomgr/sockaddr.h +21 -21
- data/src/core/lib/iomgr/sockaddr_posix.h +18 -18
- data/src/core/lib/iomgr/sockaddr_utils_posix.cc +18 -17
- data/src/core/lib/iomgr/sockaddr_windows.h +18 -18
- data/src/core/lib/iomgr/socket_factory_posix.cc +18 -18
- data/src/core/lib/iomgr/socket_factory_posix.h +30 -30
- data/src/core/lib/iomgr/socket_mutator.cc +19 -18
- data/src/core/lib/iomgr/socket_mutator.h +37 -37
- data/src/core/lib/iomgr/socket_utils.h +24 -24
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +38 -37
- data/src/core/lib/iomgr/socket_utils_linux.cc +18 -17
- data/src/core/lib/iomgr/socket_utils_posix.cc +21 -20
- data/src/core/lib/iomgr/socket_utils_posix.h +76 -76
- data/src/core/lib/iomgr/socket_utils_windows.cc +20 -19
- data/src/core/lib/iomgr/socket_windows.cc +35 -34
- data/src/core/lib/iomgr/socket_windows.h +56 -56
- data/src/core/lib/iomgr/systemd_utils.cc +116 -0
- data/src/core/lib/iomgr/systemd_utils.h +33 -0
- data/src/core/lib/iomgr/tcp_client.cc +17 -17
- data/src/core/lib/iomgr/tcp_client.h +26 -26
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +19 -18
- data/src/core/lib/iomgr/tcp_client_posix.cc +39 -38
- data/src/core/lib/iomgr/tcp_client_posix.h +43 -43
- data/src/core/lib/iomgr/tcp_client_windows.cc +28 -27
- data/src/core/lib/iomgr/tcp_posix.cc +136 -134
- data/src/core/lib/iomgr/tcp_posix.h +27 -27
- data/src/core/lib/iomgr/tcp_server.cc +30 -22
- data/src/core/lib/iomgr/tcp_server.h +68 -62
- data/src/core/lib/iomgr/tcp_server_posix.cc +91 -61
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +54 -51
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +72 -34
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +28 -27
- data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +18 -18
- data/src/core/lib/iomgr/tcp_server_windows.cc +71 -75
- data/src/core/lib/iomgr/tcp_windows.cc +83 -60
- data/src/core/lib/iomgr/tcp_windows.h +29 -29
- data/src/core/lib/iomgr/timer.cc +17 -17
- data/src/core/lib/iomgr/timer.h +65 -65
- data/src/core/lib/iomgr/timer_generic.cc +106 -107
- data/src/core/lib/iomgr/timer_generic.h +19 -19
- data/src/core/lib/iomgr/timer_heap.cc +25 -25
- data/src/core/lib/iomgr/timer_heap.h +19 -19
- data/src/core/lib/iomgr/timer_manager.cc +30 -29
- data/src/core/lib/iomgr/timer_manager.h +25 -25
- data/src/core/lib/iomgr/unix_sockets_posix.cc +18 -17
- data/src/core/lib/iomgr/unix_sockets_posix.h +18 -18
- data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +19 -17
- data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +19 -18
- data/src/core/lib/iomgr/wakeup_fd_nospecial.cc +23 -23
- data/src/core/lib/iomgr/wakeup_fd_pipe.cc +19 -18
- data/src/core/lib/iomgr/wakeup_fd_pipe.h +18 -18
- data/src/core/lib/iomgr/wakeup_fd_posix.cc +18 -18
- data/src/core/lib/iomgr/wakeup_fd_posix.h +50 -50
- data/src/core/lib/json/json_object_loader.cc +10 -0
- data/src/core/lib/json/json_object_loader.h +15 -1
- data/src/core/lib/json/json_reader.cc +28 -28
- data/src/core/lib/json/json_writer.cc +56 -56
- data/src/core/lib/load_balancing/lb_policy.cc +17 -17
- data/src/core/lib/load_balancing/lb_policy.h +3 -4
- data/src/core/lib/load_balancing/subchannel_interface.h +1 -1
- data/src/core/lib/matchers/matchers.cc +3 -1
- data/src/core/lib/matchers/matchers.h +1 -1
- data/src/core/lib/promise/activity.h +20 -12
- data/src/core/lib/promise/arena_promise.h +2 -1
- data/src/core/lib/promise/context.h +1 -0
- data/src/core/lib/promise/detail/promise_factory.h +1 -0
- data/src/core/lib/promise/detail/switch.h +18 -18
- data/src/core/lib/promise/exec_ctx_wakeup_scheduler.h +18 -12
- data/src/core/lib/promise/for_each.h +68 -42
- data/src/core/lib/promise/latch.h +13 -19
- data/src/core/lib/promise/map.h +1 -0
- data/src/core/lib/promise/map_pipe.h +1 -0
- data/src/core/lib/promise/poll.h +6 -0
- data/src/core/lib/promise/seq.h +1 -0
- data/src/core/lib/promise/try_concurrently.h +1 -0
- data/src/core/lib/promise/try_seq.h +1 -0
- data/src/core/lib/resolver/resolver.cc +17 -17
- data/src/core/lib/resolver/server_address.cc +17 -17
- data/src/core/lib/resolver/server_address.h +18 -18
- data/src/core/lib/resource_quota/api.h +1 -1
- data/src/core/lib/resource_quota/arena.cc +17 -17
- data/src/core/lib/resource_quota/arena.h +18 -18
- data/src/core/lib/resource_quota/memory_quota.cc +139 -43
- data/src/core/lib/resource_quota/memory_quota.h +85 -23
- data/src/core/lib/resource_quota/resource_quota.h +1 -1
- data/src/core/lib/security/authorization/authorization_policy_provider.h +1 -1
- data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +0 -1
- data/src/core/lib/security/authorization/rbac_policy.h +1 -1
- data/src/core/lib/security/context/security_context.cc +22 -23
- data/src/core/lib/security/context/security_context.h +30 -30
- data/src/core/lib/security/credentials/alts/alts_credentials.cc +17 -17
- data/src/core/lib/security/credentials/alts/alts_credentials.h +50 -50
- data/src/core/lib/security/credentials/alts/check_gcp_environment.cc +19 -19
- data/src/core/lib/security/credentials/alts/check_gcp_environment.h +41 -41
- data/src/core/lib/security/credentials/alts/check_gcp_environment_linux.cc +17 -17
- data/src/core/lib/security/credentials/alts/check_gcp_environment_no_op.cc +18 -17
- data/src/core/lib/security/credentials/alts/check_gcp_environment_windows.cc +18 -17
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc +19 -19
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.cc +18 -18
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.h +36 -37
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +18 -18
- data/src/core/lib/security/credentials/call_creds_util.h +1 -1
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +21 -21
- data/src/core/lib/security/credentials/composite/composite_credentials.h +20 -21
- data/src/core/lib/security/credentials/credentials.cc +19 -18
- data/src/core/lib/security/credentials/credentials.h +34 -33
- data/src/core/lib/security/credentials/fake/fake_credentials.cc +19 -19
- data/src/core/lib/security/credentials/fake/fake_credentials.h +34 -35
- data/src/core/lib/security/credentials/google_default/credentials_generic.cc +17 -17
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +48 -49
- data/src/core/lib/security/credentials/google_default/google_default_credentials.h +18 -19
- data/src/core/lib/security/credentials/iam/iam_credentials.cc +17 -17
- data/src/core/lib/security/credentials/iam/iam_credentials.h +18 -18
- data/src/core/lib/security/credentials/jwt/json_token.cc +23 -23
- data/src/core/lib/security/credentials/jwt/json_token.h +32 -32
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +17 -17
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +18 -19
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +70 -70
- data/src/core/lib/security/credentials/jwt/jwt_verifier.h +43 -43
- data/src/core/lib/security/credentials/local/local_credentials.cc +17 -17
- data/src/core/lib/security/credentials/local/local_credentials.h +20 -20
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +28 -29
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +19 -19
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +18 -18
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +19 -19
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +19 -20
- data/src/core/lib/security/credentials/ssl/ssl_credentials.h +18 -18
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +1 -1
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +1 -2
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +18 -18
- data/src/core/lib/security/credentials/tls/tls_credentials.cc +18 -19
- data/src/core/lib/security/credentials/tls/tls_credentials.h +18 -18
- data/src/core/lib/security/credentials/xds/xds_credentials.cc +1 -2
- data/src/core/lib/security/credentials/xds/xds_credentials.h +1 -1
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +26 -27
- data/src/core/lib/security/security_connector/alts/alts_security_connector.h +41 -42
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +24 -26
- data/src/core/lib/security/security_connector/fake/fake_security_connector.h +20 -21
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +1 -2
- data/src/core/lib/security/security_connector/load_system_roots.h +18 -18
- data/src/core/lib/security/security_connector/load_system_roots_fallback.cc +18 -18
- data/src/core/lib/security/security_connector/load_system_roots_supported.cc +18 -18
- data/src/core/lib/security/security_connector/load_system_roots_supported.h +19 -20
- data/src/core/lib/security/security_connector/local/local_security_connector.cc +23 -23
- data/src/core/lib/security/security_connector/local/local_security_connector.h +40 -41
- data/src/core/lib/security/security_connector/security_connector.cc +17 -17
- data/src/core/lib/security/security_connector/security_connector.h +32 -33
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +25 -25
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +38 -39
- data/src/core/lib/security/security_connector/ssl_utils.cc +32 -32
- data/src/core/lib/security/security_connector/ssl_utils.h +31 -31
- data/src/core/lib/security/security_connector/ssl_utils_config.cc +22 -22
- data/src/core/lib/security/security_connector/ssl_utils_config.h +18 -19
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +21 -21
- data/src/core/lib/security/security_connector/tls/tls_security_connector.h +17 -17
- data/src/core/lib/security/transport/auth_filters.h +18 -18
- data/src/core/lib/security/transport/client_auth_filter.cc +20 -20
- data/src/core/lib/security/transport/secure_endpoint.cc +28 -28
- data/src/core/lib/security/transport/secure_endpoint.h +22 -22
- data/src/core/lib/security/transport/security_handshaker.cc +17 -17
- data/src/core/lib/security/transport/security_handshaker.h +19 -19
- data/src/core/lib/security/transport/server_auth_filter.cc +22 -23
- data/src/core/lib/security/transport/tsi_error.cc +17 -17
- data/src/core/lib/security/transport/tsi_error.h +18 -18
- data/src/core/lib/security/util/json_util.cc +17 -17
- data/src/core/lib/security/util/json_util.h +18 -18
- data/src/core/lib/service_config/service_config.h +1 -1
- data/src/core/lib/service_config/service_config_call_data.h +7 -1
- data/src/core/lib/slice/b64.cc +24 -24
- data/src/core/lib/slice/b64.h +29 -29
- data/src/core/lib/slice/percent_encoding.cc +17 -17
- data/src/core/lib/slice/percent_encoding.h +24 -24
- data/src/core/lib/slice/slice.cc +37 -37
- data/src/core/lib/slice/slice.h +38 -5
- data/src/core/lib/slice/slice_buffer.cc +50 -45
- data/src/core/lib/slice/slice_buffer.h +27 -2
- data/src/core/lib/slice/slice_internal.h +18 -18
- data/src/core/lib/slice/slice_string_helpers.cc +17 -17
- data/src/core/lib/slice/slice_string_helpers.h +19 -19
- data/src/core/lib/surface/api_trace.cc +17 -17
- data/src/core/lib/surface/api_trace.h +22 -22
- data/src/core/lib/surface/byte_buffer.cc +19 -19
- data/src/core/lib/surface/byte_buffer_reader.cc +19 -19
- data/src/core/lib/surface/call.cc +163 -104
- data/src/core/lib/surface/call.h +42 -39
- data/src/core/lib/surface/call_details.cc +17 -18
- data/src/core/lib/surface/call_log_batch.cc +18 -18
- data/src/core/lib/surface/call_test_only.h +30 -30
- data/src/core/lib/surface/call_trace.cc +5 -5
- data/src/core/lib/surface/channel.cc +18 -18
- data/src/core/lib/surface/channel.h +31 -31
- data/src/core/lib/surface/channel_init.cc +17 -17
- data/src/core/lib/surface/channel_init.h +18 -18
- data/src/core/lib/surface/channel_ping.cc +18 -18
- data/src/core/lib/surface/channel_stack_type.cc +17 -17
- data/src/core/lib/surface/channel_stack_type.h +18 -18
- data/src/core/lib/surface/completion_queue.cc +136 -140
- data/src/core/lib/surface/completion_queue.h +32 -32
- data/src/core/lib/surface/completion_queue_factory.cc +28 -28
- data/src/core/lib/surface/completion_queue_factory.h +20 -20
- data/src/core/lib/surface/event_string.cc +17 -17
- data/src/core/lib/surface/event_string.h +20 -20
- data/src/core/lib/surface/init.cc +21 -19
- data/src/core/lib/surface/init.h +18 -18
- data/src/core/lib/surface/init_internally.cc +1 -0
- data/src/core/lib/surface/init_internally.h +1 -0
- data/src/core/lib/surface/lame_client.cc +18 -18
- data/src/core/lib/surface/lame_client.h +19 -19
- data/src/core/lib/surface/metadata_array.cc +17 -18
- data/src/core/lib/surface/server.cc +15 -15
- data/src/core/lib/surface/server.h +2 -3
- data/src/core/lib/surface/validate_metadata.cc +17 -17
- data/src/core/lib/surface/validate_metadata.h +18 -18
- data/src/core/lib/surface/version.cc +21 -21
- data/src/core/lib/transport/bdp_estimator.cc +17 -17
- data/src/core/lib/transport/bdp_estimator.h +18 -19
- data/src/core/lib/transport/connectivity_state.cc +17 -17
- data/src/core/lib/transport/connectivity_state.h +19 -19
- data/src/core/lib/transport/error_utils.cc +17 -17
- data/src/core/lib/transport/error_utils.h +18 -18
- data/src/core/lib/transport/handshaker.cc +37 -34
- data/src/core/lib/transport/handshaker.h +42 -37
- data/src/core/lib/transport/handshaker_factory.h +18 -18
- data/src/core/lib/transport/handshaker_registry.cc +17 -17
- data/src/core/lib/transport/handshaker_registry.h +18 -18
- data/src/core/lib/transport/http2_errors.h +20 -20
- data/src/core/lib/transport/http_connect_handshaker.cc +17 -17
- data/src/core/lib/transport/http_connect_handshaker.h +18 -18
- data/src/core/lib/transport/metadata_batch.cc +4 -1
- data/src/core/lib/transport/metadata_batch.h +30 -20
- data/src/core/lib/transport/parsed_metadata.h +1 -0
- data/src/core/lib/transport/pid_controller.cc +20 -20
- data/src/core/lib/transport/pid_controller.h +24 -24
- data/src/core/lib/transport/status_conversion.cc +22 -22
- data/src/core/lib/transport/status_conversion.h +20 -20
- data/src/core/lib/transport/tcp_connect_handshaker.h +1 -1
- data/src/core/lib/transport/timeout_encoding.cc +22 -22
- data/src/core/lib/transport/timeout_encoding.h +18 -18
- data/src/core/lib/transport/transport.cc +25 -24
- data/src/core/lib/transport/transport.h +134 -132
- data/src/core/lib/transport/transport_impl.h +41 -41
- data/src/core/lib/transport/transport_op_string.cc +19 -19
- data/src/core/plugin_registry/grpc_plugin_registry.cc +21 -19
- data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +5 -0
- data/src/core/tsi/alts/crypt/aes_gcm.cc +20 -20
- data/src/core/tsi/alts/crypt/gsec.cc +26 -26
- data/src/core/tsi/alts/crypt/gsec.h +334 -334
- data/src/core/tsi/alts/frame_protector/alts_counter.cc +23 -23
- data/src/core/tsi/alts/frame_protector/alts_counter.h +66 -66
- data/src/core/tsi/alts/frame_protector/alts_crypter.cc +19 -19
- data/src/core/tsi/alts/frame_protector/alts_crypter.h +206 -206
- data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +72 -71
- data/src/core/tsi/alts/frame_protector/alts_frame_protector.h +38 -38
- data/src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.cc +18 -18
- data/src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.h +80 -81
- data/src/core/tsi/alts/frame_protector/alts_seal_privacy_integrity_crypter.cc +22 -22
- data/src/core/tsi/alts/frame_protector/alts_unseal_privacy_integrity_crypter.cc +22 -22
- data/src/core/tsi/alts/frame_protector/frame_handler.cc +26 -25
- data/src/core/tsi/alts/frame_protector/frame_handler.h +166 -166
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +68 -67
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +99 -99
- data/src/core/tsi/alts/handshaker/alts_shared_resource.cc +18 -17
- data/src/core/tsi/alts/handshaker/alts_shared_resource.h +41 -42
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +29 -28
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +58 -58
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +20 -20
- data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +19 -19
- data/src/core/tsi/alts/handshaker/alts_tsi_utils.h +36 -36
- data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +19 -19
- data/src/core/tsi/alts/handshaker/transport_security_common_api.h +102 -101
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +38 -37
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.h +38 -39
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.cc +31 -30
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.h +33 -34
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol.h +65 -66
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +31 -30
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.h +53 -54
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.cc +54 -53
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.h +138 -139
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +53 -52
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.h +41 -42
- data/src/core/tsi/fake_transport_security.cc +77 -76
- data/src/core/tsi/fake_transport_security.h +30 -30
- data/src/core/tsi/local_transport_security.cc +34 -33
- data/src/core/tsi/local_transport_security.h +31 -31
- data/src/core/tsi/ssl/key_logging/ssl_key_logging.cc +1 -0
- data/src/core/tsi/ssl/session_cache/ssl_session.h +18 -18
- data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +18 -18
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +18 -17
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +19 -19
- data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +19 -18
- data/src/core/tsi/ssl_transport_security.cc +139 -323
- data/src/core/tsi/ssl_transport_security.h +201 -200
- data/src/core/tsi/ssl_transport_security_utils.cc +250 -0
- data/src/core/tsi/ssl_transport_security_utils.h +147 -0
- data/src/core/tsi/ssl_types.h +25 -25
- data/src/core/tsi/transport_security.cc +26 -26
- data/src/core/tsi/transport_security.h +45 -45
- data/src/core/tsi/transport_security_grpc.cc +20 -20
- data/src/core/tsi/transport_security_grpc.h +39 -39
- data/src/core/tsi/transport_security_interface.h +330 -330
- data/src/ruby/ext/grpc/{ext-export-truffleruby.clang → ext-export-truffleruby-with-ruby-abi-version.clang} +0 -0
- data/src/ruby/ext/grpc/{ext-export-truffleruby.gcc → ext-export-truffleruby-with-ruby-abi-version.gcc} +0 -0
- data/src/ruby/ext/grpc/ext-export-with-ruby-abi-version.clang +2 -0
- data/src/ruby/ext/grpc/ext-export-with-ruby-abi-version.gcc +7 -0
- data/src/ruby/ext/grpc/ext-export.clang +0 -1
- data/src/ruby/ext/grpc/ext-export.gcc +1 -2
- data/src/ruby/ext/grpc/extconf.rb +47 -2
- data/src/ruby/ext/grpc/rb_call.c +1 -0
- data/src/ruby/ext/grpc/rb_channel.c +1 -0
- data/src/ruby/ext/grpc/rb_channel_args.c +1 -0
- data/src/ruby/ext/grpc/rb_compression_options.c +1 -1
- data/src/ruby/ext/grpc/rb_grpc.c +1 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +38 -36
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +59 -56
- data/src/ruby/lib/grpc/generic/bidi_call.rb +2 -0
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/spec/client_server_spec.rb +20 -8
- data/third_party/re2/re2/bitstate.cc +3 -3
- data/third_party/re2/re2/dfa.cc +13 -13
- data/third_party/re2/re2/nfa.cc +4 -4
- data/third_party/re2/re2/onepass.cc +2 -2
- data/third_party/re2/re2/prefilter_tree.cc +27 -59
- data/third_party/re2/re2/prefilter_tree.h +3 -2
- data/third_party/re2/re2/prog.cc +11 -2
- data/third_party/re2/re2/prog.h +17 -5
- data/third_party/re2/re2/re2.cc +6 -11
- data/third_party/re2/re2/re2.h +1 -1
- data/third_party/re2/re2/regexp.cc +1 -2
- data/third_party/re2/re2/stringpiece.h +10 -7
- data/third_party/re2/re2/unicode_casefold.cc +25 -11
- data/third_party/re2/re2/unicode_groups.cc +319 -151
- data/third_party/re2/re2/walker-inl.h +3 -2
- data/third_party/re2/util/mutex.h +4 -4
- metadata +93 -24
- data/include/grpc/impl/codegen/gpr_slice.h +0 -71
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +0 -332
- data/src/core/ext/filters/http/message_compress/message_compress_filter.h +0 -52
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +0 -322
- data/src/core/ext/filters/server_config_selector/server_config_selector.cc +0 -62
@@ -63,12 +63,15 @@
|
|
63
63
|
#include "src/core/ext/xds/xds_resource_type.h"
|
64
64
|
#include "src/core/ext/xds/xds_routing.h"
|
65
65
|
#include "src/core/lib/channel/status_util.h"
|
66
|
+
#include "src/core/lib/config/core_configuration.h"
|
66
67
|
#include "src/core/lib/debug/trace.h"
|
67
68
|
#include "src/core/lib/gpr/string.h"
|
68
69
|
#include "src/core/lib/gprpp/env.h"
|
69
70
|
#include "src/core/lib/gprpp/match.h"
|
71
|
+
#include "src/core/lib/gprpp/ref_counted_ptr.h"
|
70
72
|
#include "src/core/lib/gprpp/time.h"
|
71
|
-
#include "src/core/lib/
|
73
|
+
#include "src/core/lib/json/json.h"
|
74
|
+
#include "src/core/lib/load_balancing/lb_policy_registry.h"
|
72
75
|
#include "src/core/lib/matchers/matchers.h"
|
73
76
|
|
74
77
|
namespace grpc_core {
|
@@ -122,13 +125,12 @@ std::string XdsRouteConfigResource::Route::Matchers::ToString() const {
|
|
122
125
|
}
|
123
126
|
|
124
127
|
//
|
125
|
-
// XdsRouteConfigResource::Route::RouteAction::HashPolicy
|
128
|
+
// XdsRouteConfigResource::Route::RouteAction::HashPolicy::Header
|
126
129
|
//
|
127
130
|
|
128
|
-
XdsRouteConfigResource::Route::RouteAction::HashPolicy::
|
129
|
-
const
|
130
|
-
:
|
131
|
-
header_name(other.header_name),
|
131
|
+
XdsRouteConfigResource::Route::RouteAction::HashPolicy::Header::Header(
|
132
|
+
const Header& other)
|
133
|
+
: header_name(other.header_name),
|
132
134
|
regex_substitution(other.regex_substitution) {
|
133
135
|
if (other.regex != nullptr) {
|
134
136
|
regex =
|
@@ -136,10 +138,9 @@ XdsRouteConfigResource::Route::RouteAction::HashPolicy::HashPolicy(
|
|
136
138
|
}
|
137
139
|
}
|
138
140
|
|
139
|
-
XdsRouteConfigResource::Route::RouteAction::HashPolicy&
|
140
|
-
XdsRouteConfigResource::Route::RouteAction::HashPolicy::operator=(
|
141
|
-
const
|
142
|
-
type = other.type;
|
141
|
+
XdsRouteConfigResource::Route::RouteAction::HashPolicy::Header&
|
142
|
+
XdsRouteConfigResource::Route::RouteAction::HashPolicy::Header::operator=(
|
143
|
+
const Header& other) {
|
143
144
|
header_name = other.header_name;
|
144
145
|
if (other.regex != nullptr) {
|
145
146
|
regex =
|
@@ -149,58 +150,52 @@ XdsRouteConfigResource::Route::RouteAction::HashPolicy::operator=(
|
|
149
150
|
return *this;
|
150
151
|
}
|
151
152
|
|
152
|
-
XdsRouteConfigResource::Route::RouteAction::HashPolicy::
|
153
|
-
|
154
|
-
:
|
155
|
-
header_name(std::move(other.header_name)),
|
153
|
+
XdsRouteConfigResource::Route::RouteAction::HashPolicy::Header::Header(
|
154
|
+
Header&& other) noexcept
|
155
|
+
: header_name(std::move(other.header_name)),
|
156
156
|
regex(std::move(other.regex)),
|
157
157
|
regex_substitution(std::move(other.regex_substitution)) {}
|
158
158
|
|
159
|
-
XdsRouteConfigResource::Route::RouteAction::HashPolicy&
|
160
|
-
XdsRouteConfigResource::Route::RouteAction::HashPolicy::operator=(
|
161
|
-
|
162
|
-
type = other.type;
|
159
|
+
XdsRouteConfigResource::Route::RouteAction::HashPolicy::Header&
|
160
|
+
XdsRouteConfigResource::Route::RouteAction::HashPolicy::Header::operator=(
|
161
|
+
Header&& other) noexcept {
|
163
162
|
header_name = std::move(other.header_name);
|
164
163
|
regex = std::move(other.regex);
|
165
164
|
regex_substitution = std::move(other.regex_substitution);
|
166
165
|
return *this;
|
167
166
|
}
|
168
167
|
|
169
|
-
bool XdsRouteConfigResource::Route::RouteAction::HashPolicy::
|
170
|
-
|
171
|
-
if (
|
172
|
-
if (
|
173
|
-
if (regex
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
return header_name == other.header_name &&
|
178
|
-
regex->pattern() == other.regex->pattern() &&
|
179
|
-
regex_substitution == other.regex_substitution;
|
180
|
-
}
|
168
|
+
bool XdsRouteConfigResource::Route::RouteAction::HashPolicy::Header::operator==(
|
169
|
+
const Header& other) const {
|
170
|
+
if (header_name != other.header_name) return false;
|
171
|
+
if (regex == nullptr) {
|
172
|
+
if (other.regex != nullptr) return false;
|
173
|
+
} else {
|
174
|
+
if (other.regex == nullptr) return false;
|
175
|
+
if (regex->pattern() != other.regex->pattern()) return false;
|
181
176
|
}
|
182
|
-
return
|
177
|
+
return regex_substitution == other.regex_substitution;
|
178
|
+
}
|
179
|
+
|
180
|
+
std::string
|
181
|
+
XdsRouteConfigResource::Route::RouteAction::HashPolicy::Header::ToString()
|
182
|
+
const {
|
183
|
+
return absl::StrCat("Header ", header_name, "/",
|
184
|
+
(regex == nullptr) ? "" : regex->pattern(), "/",
|
185
|
+
regex_substitution);
|
183
186
|
}
|
184
187
|
|
188
|
+
//
|
189
|
+
// XdsRouteConfigResource::Route::RouteAction::HashPolicy
|
190
|
+
//
|
191
|
+
|
185
192
|
std::string XdsRouteConfigResource::Route::RouteAction::HashPolicy::ToString()
|
186
193
|
const {
|
187
|
-
std::
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
case Type::CHANNEL_ID:
|
193
|
-
contents.push_back("type=CHANNEL_ID");
|
194
|
-
break;
|
195
|
-
}
|
196
|
-
contents.push_back(
|
197
|
-
absl::StrFormat("terminal=%s", terminal ? "true" : "false"));
|
198
|
-
if (type == Type::HEADER) {
|
199
|
-
contents.push_back(absl::StrFormat(
|
200
|
-
"Header %s:/%s/%s", header_name,
|
201
|
-
(regex == nullptr) ? "" : regex->pattern(), regex_substitution));
|
202
|
-
}
|
203
|
-
return absl::StrCat("{", absl::StrJoin(contents, ", "), "}");
|
194
|
+
std::string type = Match(
|
195
|
+
policy, [](const Header& header) { return header.ToString(); },
|
196
|
+
[](const ChannelId&) -> std::string { return "ChannelId"; });
|
197
|
+
return absl::StrCat("{", type, ", terminal=", terminal ? "true" : "false",
|
198
|
+
"}");
|
204
199
|
}
|
205
200
|
|
206
201
|
//
|
@@ -328,10 +323,10 @@ std::string XdsRouteConfigResource::ToString() const {
|
|
328
323
|
|
329
324
|
namespace {
|
330
325
|
|
331
|
-
|
332
|
-
ClusterSpecifierPluginParse(
|
326
|
+
XdsRouteConfigResource::ClusterSpecifierPluginMap ClusterSpecifierPluginParse(
|
333
327
|
const XdsResourceType::DecodeContext& context,
|
334
|
-
const envoy_config_route_v3_RouteConfiguration* route_config
|
328
|
+
const envoy_config_route_v3_RouteConfiguration* route_config,
|
329
|
+
ValidationErrors* errors) {
|
335
330
|
XdsRouteConfigResource::ClusterSpecifierPluginMap
|
336
331
|
cluster_specifier_plugin_map;
|
337
332
|
const auto& cluster_specifier_plugin_registry =
|
@@ -343,6 +338,10 @@ ClusterSpecifierPluginParse(
|
|
343
338
|
envoy_config_route_v3_RouteConfiguration_cluster_specifier_plugins(
|
344
339
|
route_config, &num_cluster_specifier_plugins);
|
345
340
|
for (size_t i = 0; i < num_cluster_specifier_plugins; ++i) {
|
341
|
+
bool is_optional = envoy_config_route_v3_ClusterSpecifierPlugin_is_optional(
|
342
|
+
cluster_specifier_plugin[i]);
|
343
|
+
ValidationErrors::ScopedField field(
|
344
|
+
errors, absl::StrCat(".cluster_specifier_plugins[", i, "].extension"));
|
346
345
|
const envoy_config_core_v3_TypedExtensionConfig* typed_extension_config =
|
347
346
|
envoy_config_route_v3_ClusterSpecifierPlugin_extension(
|
348
347
|
cluster_specifier_plugin[i]);
|
@@ -350,54 +349,58 @@ ClusterSpecifierPluginParse(
|
|
350
349
|
envoy_config_core_v3_TypedExtensionConfig_name(typed_extension_config));
|
351
350
|
if (cluster_specifier_plugin_map.find(name) !=
|
352
351
|
cluster_specifier_plugin_map.end()) {
|
353
|
-
|
354
|
-
|
352
|
+
ValidationErrors::ScopedField field(errors, ".name");
|
353
|
+
errors->AddError(absl::StrCat("duplicate name \"", name, "\""));
|
354
|
+
} else {
|
355
|
+
// Add a sentinel entry in case we encounter an error later, just so we
|
356
|
+
// don't generate duplicate errors for each route that uses this plugin.
|
357
|
+
cluster_specifier_plugin_map[name] = "<sentinel>";
|
355
358
|
}
|
359
|
+
ValidationErrors::ScopedField field2(errors, ".typed_config");
|
356
360
|
const google_protobuf_Any* any =
|
357
361
|
envoy_config_core_v3_TypedExtensionConfig_typed_config(
|
358
362
|
typed_extension_config);
|
359
|
-
|
360
|
-
|
361
|
-
"Could not obtrain TypedExtensionConfig for plugin config.");
|
362
|
-
}
|
363
|
-
ValidationErrors validation_errors;
|
364
|
-
ValidationErrors::ScopedField field(
|
365
|
-
&validation_errors, absl::StrCat(".cluster_specifier_plugins[", i,
|
366
|
-
"].extension.typed_config"));
|
367
|
-
auto extension = ExtractXdsExtension(context, any, &validation_errors);
|
368
|
-
if (!validation_errors.ok()) {
|
369
|
-
return validation_errors.status("could not determine extension type");
|
370
|
-
}
|
371
|
-
GPR_ASSERT(extension.has_value());
|
372
|
-
bool is_optional = envoy_config_route_v3_ClusterSpecifierPlugin_is_optional(
|
373
|
-
cluster_specifier_plugin[i]);
|
363
|
+
auto extension = ExtractXdsExtension(context, any, errors);
|
364
|
+
if (!extension.has_value()) continue;
|
374
365
|
const XdsClusterSpecifierPluginImpl* cluster_specifier_plugin_impl =
|
375
366
|
cluster_specifier_plugin_registry.GetPluginForType(extension->type);
|
376
|
-
std::string lb_policy_config;
|
377
367
|
if (cluster_specifier_plugin_impl == nullptr) {
|
378
|
-
if (
|
379
|
-
|
380
|
-
|
368
|
+
if (is_optional) {
|
369
|
+
// Empty string indicates an optional plugin.
|
370
|
+
// This is used later when validating routes, and since we will skip
|
371
|
+
// any routes that refer to this plugin, we won't wind up including
|
372
|
+
// this plugin in the resource that we return to the watcher.
|
373
|
+
cluster_specifier_plugin_map[std::move(name)] = "";
|
374
|
+
} else {
|
375
|
+
// Not optional, report error.
|
376
|
+
errors->AddError("unsupported ClusterSpecifierPlugin type");
|
381
377
|
}
|
382
|
-
|
378
|
+
continue;
|
379
|
+
}
|
380
|
+
const size_t original_error_size = errors->size();
|
381
|
+
Json lb_policy_config =
|
382
|
+
cluster_specifier_plugin_impl->GenerateLoadBalancingPolicyConfig(
|
383
|
+
std::move(*extension), context.arena, context.symtab, errors);
|
384
|
+
if (errors->size() != original_error_size) continue;
|
385
|
+
auto config =
|
386
|
+
CoreConfiguration::Get().lb_policy_registry().ParseLoadBalancingConfig(
|
387
|
+
lb_policy_config);
|
388
|
+
if (!config.ok()) {
|
389
|
+
errors->AddError(absl::StrCat(
|
390
|
+
"ClusterSpecifierPlugin returned invalid LB policy config: ",
|
391
|
+
config.status().message()));
|
383
392
|
} else {
|
384
|
-
|
385
|
-
cluster_specifier_plugin_impl->GenerateLoadBalancingPolicyConfig(
|
386
|
-
std::move(*extension), context.arena, context.symtab);
|
387
|
-
if (!config.ok()) return config.status();
|
388
|
-
lb_policy_config = std::move(*config);
|
393
|
+
cluster_specifier_plugin_map[std::move(name)] = lb_policy_config.Dump();
|
389
394
|
}
|
390
|
-
cluster_specifier_plugin_map[std::move(name)] = std::move(lb_policy_config);
|
391
395
|
}
|
392
396
|
return cluster_specifier_plugin_map;
|
393
397
|
}
|
394
398
|
|
395
|
-
absl::
|
396
|
-
|
397
|
-
|
399
|
+
absl::optional<StringMatcher> RoutePathMatchParse(
|
400
|
+
const envoy_config_route_v3_RouteMatch* match, ValidationErrors* errors) {
|
401
|
+
bool case_sensitive = true;
|
398
402
|
auto* case_sensitive_ptr =
|
399
403
|
envoy_config_route_v3_RouteMatch_case_sensitive(match);
|
400
|
-
bool case_sensitive = true;
|
401
404
|
if (case_sensitive_ptr != nullptr) {
|
402
405
|
case_sensitive = google_protobuf_BoolValue_value(case_sensitive_ptr);
|
403
406
|
}
|
@@ -406,25 +409,18 @@ absl::Status RoutePathMatchParse(const envoy_config_route_v3_RouteMatch* match,
|
|
406
409
|
if (envoy_config_route_v3_RouteMatch_has_prefix(match)) {
|
407
410
|
absl::string_view prefix =
|
408
411
|
UpbStringToAbsl(envoy_config_route_v3_RouteMatch_prefix(match));
|
409
|
-
//
|
412
|
+
// For any prefix that cannot match a path of the form "/service/method",
|
413
|
+
// ignore the route.
|
410
414
|
if (!prefix.empty()) {
|
411
|
-
//
|
412
|
-
if (prefix[0] != '/')
|
413
|
-
// Prefix which does not start with a / will never match anything, so
|
414
|
-
// ignore this route.
|
415
|
-
*ignore_route = true;
|
416
|
-
return absl::OkStatus();
|
417
|
-
}
|
415
|
+
// Does not start with a slash.
|
416
|
+
if (prefix[0] != '/') return absl::nullopt;
|
418
417
|
std::vector<absl::string_view> prefix_elements =
|
419
418
|
absl::StrSplit(prefix.substr(1), absl::MaxSplits('/', 2));
|
420
|
-
|
421
|
-
|
422
|
-
|
423
|
-
|
424
|
-
|
425
|
-
// Prefix contains empty string between the 2 slashes
|
426
|
-
*ignore_route = true;
|
427
|
-
return absl::OkStatus();
|
419
|
+
// More than 2 slashes.
|
420
|
+
if (prefix_elements.size() > 2) return absl::nullopt;
|
421
|
+
// Two consecutive slashes.
|
422
|
+
if (prefix_elements.size() == 2 && prefix_elements[0].empty()) {
|
423
|
+
return absl::nullopt;
|
428
424
|
}
|
429
425
|
}
|
430
426
|
type = StringMatcher::Type::kPrefix;
|
@@ -432,35 +428,19 @@ absl::Status RoutePathMatchParse(const envoy_config_route_v3_RouteMatch* match,
|
|
432
428
|
} else if (envoy_config_route_v3_RouteMatch_has_path(match)) {
|
433
429
|
absl::string_view path =
|
434
430
|
UpbStringToAbsl(envoy_config_route_v3_RouteMatch_path(match));
|
435
|
-
|
436
|
-
|
437
|
-
|
438
|
-
|
439
|
-
|
440
|
-
if (path[0] != '/') {
|
441
|
-
// Path which does not start with a / will never match anything, so
|
442
|
-
// ignore this route.
|
443
|
-
*ignore_route = true;
|
444
|
-
return absl::OkStatus();
|
445
|
-
}
|
431
|
+
// For any path not of the form "/service/method", ignore the route.
|
432
|
+
// Empty path.
|
433
|
+
if (path.empty()) return absl::nullopt;
|
434
|
+
// Does not start with a slash.
|
435
|
+
if (path[0] != '/') return absl::nullopt;
|
446
436
|
std::vector<absl::string_view> path_elements =
|
447
437
|
absl::StrSplit(path.substr(1), absl::MaxSplits('/', 2));
|
448
|
-
|
449
|
-
|
450
|
-
|
451
|
-
|
452
|
-
|
453
|
-
|
454
|
-
// Path contains empty service name will never match anything, so ignore
|
455
|
-
// this route.
|
456
|
-
*ignore_route = true;
|
457
|
-
return absl::OkStatus();
|
458
|
-
} else if (path_elements[1].empty()) {
|
459
|
-
// Path contains empty method name will never match anything, so ignore
|
460
|
-
// this route.
|
461
|
-
*ignore_route = true;
|
462
|
-
return absl::OkStatus();
|
463
|
-
}
|
438
|
+
// Number of slashes does not equal 2.
|
439
|
+
if (path_elements.size() != 2) return absl::nullopt;
|
440
|
+
// Empty service name.
|
441
|
+
if (path_elements[0].empty()) return absl::nullopt;
|
442
|
+
// Empty method name.
|
443
|
+
if (path_elements[1].empty()) return absl::nullopt;
|
464
444
|
type = StringMatcher::Type::kExact;
|
465
445
|
match_string = std::string(path);
|
466
446
|
} else if (envoy_config_route_v3_RouteMatch_has_safe_regex(match)) {
|
@@ -471,27 +451,30 @@ absl::Status RoutePathMatchParse(const envoy_config_route_v3_RouteMatch* match,
|
|
471
451
|
match_string = UpbStringToStdString(
|
472
452
|
envoy_type_matcher_v3_RegexMatcher_regex(regex_matcher));
|
473
453
|
} else {
|
474
|
-
|
475
|
-
|
454
|
+
errors->AddError("invalid path specifier");
|
455
|
+
return absl::nullopt;
|
476
456
|
}
|
477
457
|
absl::StatusOr<StringMatcher> string_matcher =
|
478
458
|
StringMatcher::Create(type, match_string, case_sensitive);
|
479
459
|
if (!string_matcher.ok()) {
|
480
|
-
|
481
|
-
|
460
|
+
errors->AddError(absl::StrCat("error creating path matcher: ",
|
461
|
+
string_matcher.status().message()));
|
462
|
+
return absl::nullopt;
|
482
463
|
}
|
483
|
-
|
484
|
-
return absl::OkStatus();
|
464
|
+
return std::move(*string_matcher);
|
485
465
|
}
|
486
466
|
|
487
|
-
|
488
|
-
|
489
|
-
|
467
|
+
void RouteHeaderMatchersParse(const envoy_config_route_v3_RouteMatch* match,
|
468
|
+
XdsRouteConfigResource::Route* route,
|
469
|
+
ValidationErrors* errors) {
|
490
470
|
size_t size;
|
491
471
|
const envoy_config_route_v3_HeaderMatcher* const* headers =
|
492
472
|
envoy_config_route_v3_RouteMatch_headers(match, &size);
|
493
473
|
for (size_t i = 0; i < size; ++i) {
|
474
|
+
ValidationErrors::ScopedField field(errors,
|
475
|
+
absl::StrCat(".headers[", i, "]"));
|
494
476
|
const envoy_config_route_v3_HeaderMatcher* header = headers[i];
|
477
|
+
GPR_ASSERT(header != nullptr);
|
495
478
|
const std::string name =
|
496
479
|
UpbStringToStdString(envoy_config_route_v3_HeaderMatcher_name(header));
|
497
480
|
HeaderMatcher::Type type;
|
@@ -503,6 +486,18 @@ absl::Status RouteHeaderMatchersParse(
|
|
503
486
|
type = HeaderMatcher::Type::kExact;
|
504
487
|
match_string = UpbStringToStdString(
|
505
488
|
envoy_config_route_v3_HeaderMatcher_exact_match(header));
|
489
|
+
} else if (envoy_config_route_v3_HeaderMatcher_has_prefix_match(header)) {
|
490
|
+
type = HeaderMatcher::Type::kPrefix;
|
491
|
+
match_string = UpbStringToStdString(
|
492
|
+
envoy_config_route_v3_HeaderMatcher_prefix_match(header));
|
493
|
+
} else if (envoy_config_route_v3_HeaderMatcher_has_suffix_match(header)) {
|
494
|
+
type = HeaderMatcher::Type::kSuffix;
|
495
|
+
match_string = UpbStringToStdString(
|
496
|
+
envoy_config_route_v3_HeaderMatcher_suffix_match(header));
|
497
|
+
} else if (envoy_config_route_v3_HeaderMatcher_has_contains_match(header)) {
|
498
|
+
type = HeaderMatcher::Type::kContains;
|
499
|
+
match_string = UpbStringToStdString(
|
500
|
+
envoy_config_route_v3_HeaderMatcher_contains_match(header));
|
506
501
|
} else if (envoy_config_route_v3_HeaderMatcher_has_safe_regex_match(
|
507
502
|
header)) {
|
508
503
|
const envoy_type_matcher_v3_RegexMatcher* regex_matcher =
|
@@ -520,21 +515,9 @@ absl::Status RouteHeaderMatchersParse(
|
|
520
515
|
} else if (envoy_config_route_v3_HeaderMatcher_has_present_match(header)) {
|
521
516
|
type = HeaderMatcher::Type::kPresent;
|
522
517
|
present_match = envoy_config_route_v3_HeaderMatcher_present_match(header);
|
523
|
-
} else if (envoy_config_route_v3_HeaderMatcher_has_prefix_match(header)) {
|
524
|
-
type = HeaderMatcher::Type::kPrefix;
|
525
|
-
match_string = UpbStringToStdString(
|
526
|
-
envoy_config_route_v3_HeaderMatcher_prefix_match(header));
|
527
|
-
} else if (envoy_config_route_v3_HeaderMatcher_has_suffix_match(header)) {
|
528
|
-
type = HeaderMatcher::Type::kSuffix;
|
529
|
-
match_string = UpbStringToStdString(
|
530
|
-
envoy_config_route_v3_HeaderMatcher_suffix_match(header));
|
531
|
-
} else if (envoy_config_route_v3_HeaderMatcher_has_contains_match(header)) {
|
532
|
-
type = HeaderMatcher::Type::kContains;
|
533
|
-
match_string = UpbStringToStdString(
|
534
|
-
envoy_config_route_v3_HeaderMatcher_contains_match(header));
|
535
518
|
} else {
|
536
|
-
|
537
|
-
|
519
|
+
errors->AddError("invalid header matcher");
|
520
|
+
continue;
|
538
521
|
}
|
539
522
|
bool invert_match =
|
540
523
|
envoy_config_route_v3_HeaderMatcher_invert_match(header);
|
@@ -542,18 +525,17 @@ absl::Status RouteHeaderMatchersParse(
|
|
542
525
|
HeaderMatcher::Create(name, type, match_string, range_start, range_end,
|
543
526
|
present_match, invert_match);
|
544
527
|
if (!header_matcher.ok()) {
|
545
|
-
|
546
|
-
|
528
|
+
errors->AddError(absl::StrCat("cannot create header matcher: ",
|
529
|
+
header_matcher.status().message()));
|
530
|
+
} else {
|
531
|
+
route->matchers.header_matchers.emplace_back(std::move(*header_matcher));
|
547
532
|
}
|
548
|
-
route->matchers.header_matchers.emplace_back(
|
549
|
-
std::move(header_matcher.value()));
|
550
533
|
}
|
551
|
-
return absl::OkStatus();
|
552
534
|
}
|
553
535
|
|
554
|
-
|
555
|
-
|
556
|
-
|
536
|
+
void RouteRuntimeFractionParse(const envoy_config_route_v3_RouteMatch* match,
|
537
|
+
XdsRouteConfigResource::Route* route,
|
538
|
+
ValidationErrors* errors) {
|
557
539
|
const envoy_config_core_v3_RuntimeFractionalPercent* runtime_fraction =
|
558
540
|
envoy_config_route_v3_RouteMatch_runtime_fraction(match);
|
559
541
|
if (runtime_fraction != nullptr) {
|
@@ -562,9 +544,8 @@ absl::Status RouteRuntimeFractionParse(
|
|
562
544
|
runtime_fraction);
|
563
545
|
if (fraction != nullptr) {
|
564
546
|
uint32_t numerator = envoy_type_v3_FractionalPercent_numerator(fraction);
|
565
|
-
const
|
566
|
-
|
567
|
-
envoy_type_v3_FractionalPercent_denominator(fraction));
|
547
|
+
const uint32_t denominator =
|
548
|
+
envoy_type_v3_FractionalPercent_denominator(fraction);
|
568
549
|
// Normalize to million.
|
569
550
|
switch (denominator) {
|
570
551
|
case envoy_type_v3_FractionalPercent_HUNDRED:
|
@@ -575,108 +556,98 @@ absl::Status RouteRuntimeFractionParse(
|
|
575
556
|
break;
|
576
557
|
case envoy_type_v3_FractionalPercent_MILLION:
|
577
558
|
break;
|
578
|
-
default:
|
579
|
-
|
559
|
+
default: {
|
560
|
+
ValidationErrors::ScopedField field(
|
561
|
+
errors, ".runtime_fraction.default_value.denominator");
|
562
|
+
errors->AddError("unknown denominator type");
|
563
|
+
return;
|
564
|
+
}
|
580
565
|
}
|
581
566
|
route->matchers.fraction_per_million = numerator;
|
582
567
|
}
|
583
568
|
}
|
584
|
-
return absl::OkStatus();
|
585
569
|
}
|
586
570
|
|
587
571
|
template <typename ParentType, typename EntryType>
|
588
|
-
|
589
|
-
ParseTypedPerFilterConfig(
|
572
|
+
XdsRouteConfigResource::TypedPerFilterConfig ParseTypedPerFilterConfig(
|
590
573
|
const XdsResourceType::DecodeContext& context, const ParentType* parent,
|
591
574
|
const EntryType* (*entry_func)(const ParentType*, size_t*),
|
592
575
|
upb_StringView (*key_func)(const EntryType*),
|
593
|
-
const google_protobuf_Any* (*value_func)(const EntryType*)
|
576
|
+
const google_protobuf_Any* (*value_func)(const EntryType*),
|
577
|
+
ValidationErrors* errors) {
|
594
578
|
XdsRouteConfigResource::TypedPerFilterConfig typed_per_filter_config;
|
595
579
|
size_t filter_it = kUpb_Map_Begin;
|
596
580
|
while (true) {
|
597
581
|
const auto* filter_entry = entry_func(parent, &filter_it);
|
598
582
|
if (filter_entry == nullptr) break;
|
599
583
|
absl::string_view key = UpbStringToAbsl(key_func(filter_entry));
|
600
|
-
|
601
|
-
|
602
|
-
}
|
584
|
+
ValidationErrors::ScopedField field(errors, absl::StrCat("[", key, "]"));
|
585
|
+
if (key.empty()) errors->AddError("filter name must be non-empty");
|
603
586
|
const google_protobuf_Any* any = value_func(filter_entry);
|
604
|
-
|
605
|
-
|
606
|
-
|
607
|
-
|
608
|
-
return absl::InvalidArgumentError(
|
609
|
-
absl::StrCat("no filter config specified for filter name ", key));
|
610
|
-
}
|
587
|
+
auto extension = ExtractXdsExtension(context, any, errors);
|
588
|
+
if (!extension.has_value()) continue;
|
589
|
+
auto* extension_to_use = &*extension;
|
590
|
+
absl::optional<XdsExtension> nested_extension;
|
611
591
|
bool is_optional = false;
|
612
|
-
if (
|
613
|
-
|
614
|
-
|
592
|
+
if (extension->type == "envoy.config.route.v3.FilterConfig") {
|
593
|
+
absl::string_view* serialized_config =
|
594
|
+
absl::get_if<absl::string_view>(&extension->value);
|
595
|
+
if (serialized_config == nullptr) {
|
596
|
+
errors->AddError("could not parse FilterConfig");
|
597
|
+
continue;
|
598
|
+
}
|
615
599
|
const auto* filter_config = envoy_config_route_v3_FilterConfig_parse(
|
616
|
-
|
600
|
+
serialized_config->data(), serialized_config->size(), context.arena);
|
617
601
|
if (filter_config == nullptr) {
|
618
|
-
|
619
|
-
|
602
|
+
errors->AddError("could not parse FilterConfig");
|
603
|
+
continue;
|
620
604
|
}
|
621
605
|
is_optional =
|
622
606
|
envoy_config_route_v3_FilterConfig_is_optional(filter_config);
|
623
607
|
any = envoy_config_route_v3_FilterConfig_config(filter_config);
|
624
|
-
|
625
|
-
|
626
|
-
|
627
|
-
|
628
|
-
}
|
629
|
-
}
|
630
|
-
ValidationErrors errors;
|
631
|
-
ValidationErrors::ScopedField field(
|
632
|
-
&errors, absl::StrCat(".typed_per_filter_config[", key, "]"));
|
633
|
-
auto extension = ExtractXdsExtension(context, any, &errors);
|
634
|
-
if (!errors.ok()) {
|
635
|
-
return errors.status("could not determine extension type");
|
608
|
+
extension->validation_fields.emplace_back(errors, ".config");
|
609
|
+
nested_extension = ExtractXdsExtension(context, any, errors);
|
610
|
+
if (!nested_extension.has_value()) continue;
|
611
|
+
extension_to_use = &*nested_extension;
|
636
612
|
}
|
637
|
-
GPR_ASSERT(extension.has_value());
|
638
613
|
const auto& http_filter_registry =
|
639
614
|
static_cast<const GrpcXdsBootstrap&>(context.client->bootstrap())
|
640
615
|
.http_filter_registry();
|
641
616
|
const XdsHttpFilterImpl* filter_impl =
|
642
|
-
http_filter_registry.GetFilterForType(
|
617
|
+
http_filter_registry.GetFilterForType(extension_to_use->type);
|
643
618
|
if (filter_impl == nullptr) {
|
644
|
-
if (is_optional)
|
645
|
-
|
646
|
-
"no filter registered for config type ", extension->type));
|
619
|
+
if (!is_optional) errors->AddError("unsupported filter type");
|
620
|
+
continue;
|
647
621
|
}
|
648
622
|
absl::optional<XdsHttpFilterImpl::FilterConfig> filter_config =
|
649
|
-
filter_impl->GenerateFilterConfigOverride(
|
650
|
-
|
651
|
-
if (
|
652
|
-
|
623
|
+
filter_impl->GenerateFilterConfigOverride(
|
624
|
+
context, std::move(*extension_to_use), errors);
|
625
|
+
if (filter_config.has_value()) {
|
626
|
+
typed_per_filter_config[std::string(key)] = std::move(*filter_config);
|
653
627
|
}
|
654
|
-
GPR_ASSERT(filter_config.has_value());
|
655
|
-
typed_per_filter_config[std::string(key)] = std::move(*filter_config);
|
656
628
|
}
|
657
629
|
return typed_per_filter_config;
|
658
630
|
}
|
659
631
|
|
660
|
-
|
632
|
+
XdsRouteConfigResource::RetryPolicy RetryPolicyParse(
|
661
633
|
const XdsResourceType::DecodeContext& context,
|
662
|
-
const envoy_config_route_v3_RetryPolicy*
|
663
|
-
|
664
|
-
|
665
|
-
XdsRouteConfigResource::RetryPolicy retry_to_return;
|
634
|
+
const envoy_config_route_v3_RetryPolicy* retry_policy_proto,
|
635
|
+
ValidationErrors* errors) {
|
636
|
+
XdsRouteConfigResource::RetryPolicy retry_policy;
|
666
637
|
auto retry_on = UpbStringToStdString(
|
667
|
-
envoy_config_route_v3_RetryPolicy_retry_on(
|
638
|
+
envoy_config_route_v3_RetryPolicy_retry_on(retry_policy_proto));
|
668
639
|
std::vector<absl::string_view> codes = absl::StrSplit(retry_on, ',');
|
669
640
|
for (const auto& code : codes) {
|
670
641
|
if (code == "cancelled") {
|
671
|
-
|
642
|
+
retry_policy.retry_on.Add(GRPC_STATUS_CANCELLED);
|
672
643
|
} else if (code == "deadline-exceeded") {
|
673
|
-
|
644
|
+
retry_policy.retry_on.Add(GRPC_STATUS_DEADLINE_EXCEEDED);
|
674
645
|
} else if (code == "internal") {
|
675
|
-
|
646
|
+
retry_policy.retry_on.Add(GRPC_STATUS_INTERNAL);
|
676
647
|
} else if (code == "resource-exhausted") {
|
677
|
-
|
648
|
+
retry_policy.retry_on.Add(GRPC_STATUS_RESOURCE_EXHAUSTED);
|
678
649
|
} else if (code == "unavailable") {
|
679
|
-
|
650
|
+
retry_policy.retry_on.Add(GRPC_STATUS_UNAVAILABLE);
|
680
651
|
} else {
|
681
652
|
if (GRPC_TRACE_FLAG_ENABLED(*context.tracer)) {
|
682
653
|
gpr_log(GPR_INFO, "Unsupported retry_on policy %s.",
|
@@ -685,198 +656,90 @@ absl::Status RetryPolicyParse(
|
|
685
656
|
}
|
686
657
|
}
|
687
658
|
const google_protobuf_UInt32Value* num_retries =
|
688
|
-
envoy_config_route_v3_RetryPolicy_num_retries(
|
659
|
+
envoy_config_route_v3_RetryPolicy_num_retries(retry_policy_proto);
|
689
660
|
if (num_retries != nullptr) {
|
690
661
|
uint32_t num_retries_value = google_protobuf_UInt32Value_value(num_retries);
|
691
662
|
if (num_retries_value == 0) {
|
692
|
-
errors.
|
693
|
-
|
663
|
+
ValidationErrors::ScopedField field(errors, ".num_retries");
|
664
|
+
errors->AddError("must be greater than 0");
|
694
665
|
} else {
|
695
|
-
|
666
|
+
retry_policy.num_retries = num_retries_value;
|
696
667
|
}
|
697
668
|
} else {
|
698
|
-
|
669
|
+
retry_policy.num_retries = 1;
|
699
670
|
}
|
700
671
|
const envoy_config_route_v3_RetryPolicy_RetryBackOff* backoff =
|
701
|
-
envoy_config_route_v3_RetryPolicy_retry_back_off(
|
672
|
+
envoy_config_route_v3_RetryPolicy_retry_back_off(retry_policy_proto);
|
702
673
|
if (backoff != nullptr) {
|
703
|
-
|
704
|
-
|
705
|
-
|
706
|
-
|
707
|
-
|
708
|
-
|
709
|
-
|
710
|
-
|
711
|
-
|
712
|
-
|
713
|
-
errors.emplace_back(
|
714
|
-
validation_errors.status("base_interval").message());
|
674
|
+
ValidationErrors::ScopedField field(errors, ".retry_back_off");
|
675
|
+
{
|
676
|
+
ValidationErrors::ScopedField field(errors, ".base_interval");
|
677
|
+
const google_protobuf_Duration* base_interval =
|
678
|
+
envoy_config_route_v3_RetryPolicy_RetryBackOff_base_interval(backoff);
|
679
|
+
if (base_interval == nullptr) {
|
680
|
+
errors->AddError("field not present");
|
681
|
+
} else {
|
682
|
+
retry_policy.retry_back_off.base_interval =
|
683
|
+
ParseDuration(base_interval, errors);
|
715
684
|
}
|
716
685
|
}
|
717
|
-
|
718
|
-
|
719
|
-
|
720
|
-
|
721
|
-
|
722
|
-
|
723
|
-
|
724
|
-
|
686
|
+
{
|
687
|
+
ValidationErrors::ScopedField field(errors, ".max_interval");
|
688
|
+
const google_protobuf_Duration* max_interval =
|
689
|
+
envoy_config_route_v3_RetryPolicy_RetryBackOff_max_interval(backoff);
|
690
|
+
Duration max;
|
691
|
+
if (max_interval != nullptr) {
|
692
|
+
max = ParseDuration(max_interval, errors);
|
693
|
+
} else {
|
694
|
+
// if max interval is not set, it is 10x the base.
|
695
|
+
max = 10 * retry_policy.retry_back_off.base_interval;
|
725
696
|
}
|
726
|
-
|
727
|
-
// if max interval is not set, it is 10x the base.
|
728
|
-
max = 10 * retry_to_return.retry_back_off.base_interval;
|
697
|
+
retry_policy.retry_back_off.max_interval = max;
|
729
698
|
}
|
730
|
-
retry_to_return.retry_back_off.max_interval = max;
|
731
699
|
} else {
|
732
|
-
|
733
|
-
|
700
|
+
retry_policy.retry_back_off.base_interval = Duration::Milliseconds(25);
|
701
|
+
retry_policy.retry_back_off.max_interval = Duration::Milliseconds(250);
|
734
702
|
}
|
735
|
-
|
736
|
-
if (!errors.empty()) {
|
737
|
-
return absl::InvalidArgumentError(absl::StrCat(
|
738
|
-
"Errors parsing retry policy: [", absl::StrJoin(errors, "; "), "]"));
|
739
|
-
}
|
740
|
-
*retry = retry_to_return;
|
741
|
-
return absl::OkStatus();
|
703
|
+
return retry_policy;
|
742
704
|
}
|
743
705
|
|
744
|
-
absl::
|
706
|
+
absl::optional<XdsRouteConfigResource::Route::RouteAction> RouteActionParse(
|
745
707
|
const XdsResourceType::DecodeContext& context,
|
746
|
-
const
|
708
|
+
const envoy_config_route_v3_RouteAction* route_action_proto,
|
747
709
|
const std::map<std::string /*cluster_specifier_plugin_name*/,
|
748
710
|
std::string /*LB policy config*/>&
|
749
711
|
cluster_specifier_plugin_map,
|
750
|
-
|
751
|
-
XdsRouteConfigResource::Route::RouteAction
|
752
|
-
|
753
|
-
|
754
|
-
|
755
|
-
if (
|
756
|
-
|
757
|
-
|
758
|
-
|
759
|
-
|
760
|
-
|
761
|
-
|
762
|
-
|
763
|
-
|
764
|
-
|
765
|
-
|
766
|
-
std::vector<XdsRouteConfigResource::Route::RouteAction::ClusterWeight>
|
767
|
-
action_weighted_clusters;
|
768
|
-
const envoy_config_route_v3_WeightedCluster* weighted_cluster =
|
769
|
-
envoy_config_route_v3_RouteAction_weighted_clusters(route_action);
|
770
|
-
uint32_t total_weight = 100;
|
771
|
-
const google_protobuf_UInt32Value* weight =
|
772
|
-
envoy_config_route_v3_WeightedCluster_total_weight(weighted_cluster);
|
773
|
-
if (weight != nullptr) {
|
774
|
-
total_weight = google_protobuf_UInt32Value_value(weight);
|
775
|
-
}
|
776
|
-
size_t clusters_size;
|
777
|
-
const envoy_config_route_v3_WeightedCluster_ClusterWeight* const* clusters =
|
778
|
-
envoy_config_route_v3_WeightedCluster_clusters(weighted_cluster,
|
779
|
-
&clusters_size);
|
780
|
-
uint32_t sum_of_weights = 0;
|
781
|
-
for (size_t j = 0; j < clusters_size; ++j) {
|
782
|
-
const envoy_config_route_v3_WeightedCluster_ClusterWeight*
|
783
|
-
cluster_weight = clusters[j];
|
784
|
-
XdsRouteConfigResource::Route::RouteAction::ClusterWeight cluster;
|
785
|
-
cluster.name = UpbStringToStdString(
|
786
|
-
envoy_config_route_v3_WeightedCluster_ClusterWeight_name(
|
787
|
-
cluster_weight));
|
788
|
-
if (cluster.name.empty()) {
|
789
|
-
return absl::InvalidArgumentError(
|
790
|
-
"RouteAction weighted_cluster cluster contains empty cluster "
|
791
|
-
"name.");
|
792
|
-
}
|
793
|
-
const google_protobuf_UInt32Value* weight =
|
794
|
-
envoy_config_route_v3_WeightedCluster_ClusterWeight_weight(
|
795
|
-
cluster_weight);
|
796
|
-
if (weight == nullptr) {
|
797
|
-
return absl::InvalidArgumentError(
|
798
|
-
"RouteAction weighted_cluster cluster missing weight");
|
799
|
-
}
|
800
|
-
cluster.weight = google_protobuf_UInt32Value_value(weight);
|
801
|
-
if (cluster.weight == 0) continue;
|
802
|
-
sum_of_weights += cluster.weight;
|
803
|
-
auto typed_per_filter_config = ParseTypedPerFilterConfig<
|
804
|
-
envoy_config_route_v3_WeightedCluster_ClusterWeight,
|
805
|
-
envoy_config_route_v3_WeightedCluster_ClusterWeight_TypedPerFilterConfigEntry>(
|
806
|
-
context, cluster_weight,
|
807
|
-
envoy_config_route_v3_WeightedCluster_ClusterWeight_typed_per_filter_config_next,
|
808
|
-
envoy_config_route_v3_WeightedCluster_ClusterWeight_TypedPerFilterConfigEntry_key,
|
809
|
-
envoy_config_route_v3_WeightedCluster_ClusterWeight_TypedPerFilterConfigEntry_value);
|
810
|
-
if (!typed_per_filter_config.ok()) {
|
811
|
-
return typed_per_filter_config.status();
|
812
|
-
}
|
813
|
-
cluster.typed_per_filter_config = std::move(*typed_per_filter_config);
|
814
|
-
action_weighted_clusters.emplace_back(std::move(cluster));
|
815
|
-
}
|
816
|
-
if (total_weight != sum_of_weights) {
|
817
|
-
return absl::InvalidArgumentError(
|
818
|
-
"RouteAction weighted_cluster has incorrect total weight");
|
819
|
-
}
|
820
|
-
if (action_weighted_clusters.empty()) {
|
821
|
-
return absl::InvalidArgumentError(
|
822
|
-
"RouteAction weighted_cluster has no valid clusters specified.");
|
823
|
-
}
|
824
|
-
route.action = std::move(action_weighted_clusters);
|
825
|
-
} else if (XdsRlsEnabled() &&
|
826
|
-
envoy_config_route_v3_RouteAction_has_cluster_specifier_plugin(
|
827
|
-
route_action)) {
|
828
|
-
std::string plugin_name = UpbStringToStdString(
|
829
|
-
envoy_config_route_v3_RouteAction_cluster_specifier_plugin(
|
830
|
-
route_action));
|
831
|
-
if (plugin_name.empty()) {
|
832
|
-
return absl::InvalidArgumentError(
|
833
|
-
"RouteAction cluster contains empty cluster specifier plugin name.");
|
834
|
-
}
|
835
|
-
auto it = cluster_specifier_plugin_map.find(plugin_name);
|
836
|
-
if (it == cluster_specifier_plugin_map.end()) {
|
837
|
-
return absl::InvalidArgumentError(
|
838
|
-
absl::StrCat("RouteAction cluster contains cluster specifier plugin "
|
839
|
-
"name not configured: ",
|
840
|
-
plugin_name));
|
841
|
-
}
|
842
|
-
if (it->second.empty()) *ignore_route = true;
|
843
|
-
route.action =
|
844
|
-
XdsRouteConfigResource::Route::RouteAction::ClusterSpecifierPluginName{
|
845
|
-
std::move(plugin_name)};
|
846
|
-
} else {
|
847
|
-
// No cluster or weighted_clusters or plugin found in RouteAction, ignore
|
848
|
-
// this route.
|
849
|
-
*ignore_route = true;
|
850
|
-
}
|
851
|
-
if (!*ignore_route) {
|
852
|
-
const envoy_config_route_v3_RouteAction_MaxStreamDuration*
|
853
|
-
max_stream_duration =
|
854
|
-
envoy_config_route_v3_RouteAction_max_stream_duration(route_action);
|
855
|
-
if (max_stream_duration != nullptr) {
|
856
|
-
const google_protobuf_Duration* duration =
|
857
|
-
envoy_config_route_v3_RouteAction_MaxStreamDuration_grpc_timeout_header_max(
|
712
|
+
ValidationErrors* errors) {
|
713
|
+
XdsRouteConfigResource::Route::RouteAction route_action;
|
714
|
+
// grpc_timeout_header_max or max_stream_duration
|
715
|
+
const auto* max_stream_duration =
|
716
|
+
envoy_config_route_v3_RouteAction_max_stream_duration(route_action_proto);
|
717
|
+
if (max_stream_duration != nullptr) {
|
718
|
+
ValidationErrors::ScopedField field(errors, ".max_stream_duration");
|
719
|
+
const google_protobuf_Duration* duration =
|
720
|
+
envoy_config_route_v3_RouteAction_MaxStreamDuration_grpc_timeout_header_max(
|
721
|
+
max_stream_duration);
|
722
|
+
if (duration != nullptr) {
|
723
|
+
ValidationErrors::ScopedField field(errors, ".grpc_timeout_header_max");
|
724
|
+
route_action.max_stream_duration = ParseDuration(duration, errors);
|
725
|
+
} else {
|
726
|
+
duration =
|
727
|
+
envoy_config_route_v3_RouteAction_MaxStreamDuration_max_stream_duration(
|
858
728
|
max_stream_duration);
|
859
|
-
if (duration == nullptr) {
|
860
|
-
duration =
|
861
|
-
envoy_config_route_v3_RouteAction_MaxStreamDuration_max_stream_duration(
|
862
|
-
max_stream_duration);
|
863
|
-
}
|
864
729
|
if (duration != nullptr) {
|
865
|
-
ValidationErrors
|
866
|
-
|
867
|
-
if (!validation_errors.ok()) {
|
868
|
-
return validation_errors.status("max_stream_duration");
|
869
|
-
}
|
730
|
+
ValidationErrors::ScopedField field(errors, ".max_stream_duration");
|
731
|
+
route_action.max_stream_duration = ParseDuration(duration, errors);
|
870
732
|
}
|
871
733
|
}
|
872
734
|
}
|
873
|
-
//
|
735
|
+
// hash_policy
|
874
736
|
size_t size = 0;
|
875
737
|
const envoy_config_route_v3_RouteAction_HashPolicy* const* hash_policies =
|
876
|
-
envoy_config_route_v3_RouteAction_hash_policy(
|
738
|
+
envoy_config_route_v3_RouteAction_hash_policy(route_action_proto, &size);
|
877
739
|
for (size_t i = 0; i < size; ++i) {
|
878
|
-
|
879
|
-
|
740
|
+
ValidationErrors::ScopedField field(errors,
|
741
|
+
absl::StrCat(".hash_policy[", i, "]"));
|
742
|
+
const auto* hash_policy = hash_policies[i];
|
880
743
|
XdsRouteConfigResource::Route::RouteAction::HashPolicy policy;
|
881
744
|
policy.terminal =
|
882
745
|
envoy_config_route_v3_RouteAction_HashPolicy_terminal(hash_policy);
|
@@ -885,94 +748,260 @@ absl::StatusOr<XdsRouteConfigResource::Route::RouteAction> RouteActionParse(
|
|
885
748
|
filter_state;
|
886
749
|
if ((header = envoy_config_route_v3_RouteAction_HashPolicy_header(
|
887
750
|
hash_policy)) != nullptr) {
|
888
|
-
|
889
|
-
|
890
|
-
|
751
|
+
// header
|
752
|
+
ValidationErrors::ScopedField field(errors, ".header");
|
753
|
+
XdsRouteConfigResource::Route::RouteAction::HashPolicy::Header
|
754
|
+
header_policy;
|
755
|
+
header_policy.header_name = UpbStringToStdString(
|
891
756
|
envoy_config_route_v3_RouteAction_HashPolicy_Header_header_name(
|
892
757
|
header));
|
893
|
-
|
894
|
-
|
895
|
-
|
896
|
-
|
758
|
+
if (header_policy.header_name.empty()) {
|
759
|
+
ValidationErrors::ScopedField field(errors, ".header_name");
|
760
|
+
errors->AddError("must be non-empty");
|
761
|
+
}
|
762
|
+
// regex_rewrite
|
763
|
+
const auto* regex_rewrite =
|
764
|
+
envoy_config_route_v3_RouteAction_HashPolicy_Header_regex_rewrite(
|
765
|
+
header);
|
897
766
|
if (regex_rewrite != nullptr) {
|
898
|
-
|
767
|
+
ValidationErrors::ScopedField field(errors, ".regex_rewrite.pattern");
|
768
|
+
const auto* pattern =
|
899
769
|
envoy_type_matcher_v3_RegexMatchAndSubstitute_pattern(
|
900
770
|
regex_rewrite);
|
901
|
-
if (
|
902
|
-
|
903
|
-
|
904
|
-
|
905
|
-
|
906
|
-
|
771
|
+
if (pattern == nullptr) {
|
772
|
+
errors->AddError("field not present");
|
773
|
+
continue;
|
774
|
+
}
|
775
|
+
ValidationErrors::ScopedField field2(errors, ".regex");
|
776
|
+
std::string regex = UpbStringToStdString(
|
777
|
+
envoy_type_matcher_v3_RegexMatcher_regex(pattern));
|
778
|
+
if (regex.empty()) {
|
779
|
+
errors->AddError("field not present");
|
907
780
|
continue;
|
908
781
|
}
|
909
782
|
RE2::Options options;
|
910
|
-
|
911
|
-
|
912
|
-
|
913
|
-
|
914
|
-
if (!policy.regex->ok()) {
|
915
|
-
gpr_log(
|
916
|
-
GPR_DEBUG,
|
917
|
-
"RouteAction HashPolicy contains policy specifier Header with "
|
918
|
-
"RegexMatchAndSubstitution but RegexMatcher pattern does not "
|
919
|
-
"compile");
|
783
|
+
header_policy.regex = std::make_unique<RE2>(regex, options);
|
784
|
+
if (!header_policy.regex->ok()) {
|
785
|
+
errors->AddError(absl::StrCat("errors compiling regex: ",
|
786
|
+
header_policy.regex->error()));
|
920
787
|
continue;
|
921
788
|
}
|
922
|
-
|
789
|
+
header_policy.regex_substitution = UpbStringToStdString(
|
923
790
|
envoy_type_matcher_v3_RegexMatchAndSubstitute_substitution(
|
924
791
|
regex_rewrite));
|
925
792
|
}
|
793
|
+
policy.policy = std::move(header_policy);
|
926
794
|
} else if ((filter_state =
|
927
795
|
envoy_config_route_v3_RouteAction_HashPolicy_filter_state(
|
928
796
|
hash_policy)) != nullptr) {
|
797
|
+
// filter_state
|
929
798
|
std::string key = UpbStringToStdString(
|
930
799
|
envoy_config_route_v3_RouteAction_HashPolicy_FilterState_key(
|
931
800
|
filter_state));
|
932
|
-
if (key
|
933
|
-
|
934
|
-
|
935
|
-
} else {
|
936
|
-
gpr_log(GPR_DEBUG,
|
937
|
-
"RouteAction HashPolicy contains policy specifier "
|
938
|
-
"FilterState but "
|
939
|
-
"key is not io.grpc.channel_id.");
|
940
|
-
continue;
|
941
|
-
}
|
801
|
+
if (key != "io.grpc.channel_id") continue;
|
802
|
+
policy.policy =
|
803
|
+
XdsRouteConfigResource::Route::RouteAction::HashPolicy::ChannelId();
|
942
804
|
} else {
|
943
|
-
|
944
|
-
"RouteAction HashPolicy contains unsupported policy specifier.");
|
805
|
+
// Unsupported hash policy type, ignore it.
|
945
806
|
continue;
|
946
807
|
}
|
947
|
-
|
808
|
+
route_action.hash_policies.emplace_back(std::move(policy));
|
948
809
|
}
|
949
810
|
// Get retry policy
|
950
811
|
const envoy_config_route_v3_RetryPolicy* retry_policy =
|
951
|
-
envoy_config_route_v3_RouteAction_retry_policy(
|
812
|
+
envoy_config_route_v3_RouteAction_retry_policy(route_action_proto);
|
952
813
|
if (retry_policy != nullptr) {
|
953
|
-
|
954
|
-
|
955
|
-
|
956
|
-
|
814
|
+
ValidationErrors::ScopedField field(errors, ".retry_policy");
|
815
|
+
route_action.retry_policy = RetryPolicyParse(context, retry_policy, errors);
|
816
|
+
}
|
817
|
+
// Parse cluster specifier, which is one of several options.
|
818
|
+
if (envoy_config_route_v3_RouteAction_has_cluster(route_action_proto)) {
|
819
|
+
// Cluster name.
|
820
|
+
std::string cluster_name = UpbStringToStdString(
|
821
|
+
envoy_config_route_v3_RouteAction_cluster(route_action_proto));
|
822
|
+
if (cluster_name.empty()) {
|
823
|
+
ValidationErrors::ScopedField field(errors, ".cluster");
|
824
|
+
errors->AddError("must be non-empty");
|
825
|
+
}
|
826
|
+
route_action.action =
|
827
|
+
XdsRouteConfigResource::Route::RouteAction::ClusterName{
|
828
|
+
std::move(cluster_name)};
|
829
|
+
} else if (envoy_config_route_v3_RouteAction_has_weighted_clusters(
|
830
|
+
route_action_proto)) {
|
831
|
+
// WeightedClusters.
|
832
|
+
ValidationErrors::ScopedField field(errors, ".weighted_clusters");
|
833
|
+
const envoy_config_route_v3_WeightedCluster* weighted_clusters_proto =
|
834
|
+
envoy_config_route_v3_RouteAction_weighted_clusters(route_action_proto);
|
835
|
+
GPR_ASSERT(weighted_clusters_proto != nullptr);
|
836
|
+
std::vector<XdsRouteConfigResource::Route::RouteAction::ClusterWeight>
|
837
|
+
action_weighted_clusters;
|
838
|
+
size_t clusters_size;
|
839
|
+
const envoy_config_route_v3_WeightedCluster_ClusterWeight* const* clusters =
|
840
|
+
envoy_config_route_v3_WeightedCluster_clusters(weighted_clusters_proto,
|
841
|
+
&clusters_size);
|
842
|
+
for (size_t i = 0; i < clusters_size; ++i) {
|
843
|
+
ValidationErrors::ScopedField field(errors,
|
844
|
+
absl::StrCat(".clusters[", i, "]"));
|
845
|
+
const auto* cluster_proto = clusters[i];
|
846
|
+
XdsRouteConfigResource::Route::RouteAction::ClusterWeight cluster;
|
847
|
+
// typed_per_filter_config
|
848
|
+
{
|
849
|
+
ValidationErrors::ScopedField field(errors, ".typed_per_filter_config");
|
850
|
+
cluster.typed_per_filter_config = ParseTypedPerFilterConfig<
|
851
|
+
envoy_config_route_v3_WeightedCluster_ClusterWeight,
|
852
|
+
envoy_config_route_v3_WeightedCluster_ClusterWeight_TypedPerFilterConfigEntry>(
|
853
|
+
context, cluster_proto,
|
854
|
+
envoy_config_route_v3_WeightedCluster_ClusterWeight_typed_per_filter_config_next,
|
855
|
+
envoy_config_route_v3_WeightedCluster_ClusterWeight_TypedPerFilterConfigEntry_key,
|
856
|
+
envoy_config_route_v3_WeightedCluster_ClusterWeight_TypedPerFilterConfigEntry_value,
|
857
|
+
errors);
|
858
|
+
}
|
859
|
+
// name
|
860
|
+
cluster.name = UpbStringToStdString(
|
861
|
+
envoy_config_route_v3_WeightedCluster_ClusterWeight_name(
|
862
|
+
cluster_proto));
|
863
|
+
if (cluster.name.empty()) {
|
864
|
+
ValidationErrors::ScopedField field(errors, ".name");
|
865
|
+
errors->AddError("must be non-empty");
|
866
|
+
}
|
867
|
+
// weight
|
868
|
+
const google_protobuf_UInt32Value* weight_proto =
|
869
|
+
envoy_config_route_v3_WeightedCluster_ClusterWeight_weight(
|
870
|
+
cluster_proto);
|
871
|
+
if (weight_proto == nullptr) {
|
872
|
+
ValidationErrors::ScopedField field(errors, ".weight");
|
873
|
+
errors->AddError("field not present");
|
874
|
+
} else {
|
875
|
+
cluster.weight = google_protobuf_UInt32Value_value(weight_proto);
|
876
|
+
if (cluster.weight == 0) continue;
|
877
|
+
}
|
878
|
+
// Add entry to WeightedClusters.
|
879
|
+
action_weighted_clusters.emplace_back(std::move(cluster));
|
880
|
+
}
|
881
|
+
if (action_weighted_clusters.empty()) {
|
882
|
+
errors->AddError("no valid clusters specified");
|
883
|
+
}
|
884
|
+
route_action.action = std::move(action_weighted_clusters);
|
885
|
+
} else if (XdsRlsEnabled() &&
|
886
|
+
envoy_config_route_v3_RouteAction_has_cluster_specifier_plugin(
|
887
|
+
route_action_proto)) {
|
888
|
+
// ClusterSpecifierPlugin
|
889
|
+
ValidationErrors::ScopedField field(errors, ".cluster_specifier_plugin");
|
890
|
+
std::string plugin_name = UpbStringToStdString(
|
891
|
+
envoy_config_route_v3_RouteAction_cluster_specifier_plugin(
|
892
|
+
route_action_proto));
|
893
|
+
if (plugin_name.empty()) {
|
894
|
+
errors->AddError("must be non-empty");
|
895
|
+
return absl::nullopt;
|
896
|
+
}
|
897
|
+
auto it = cluster_specifier_plugin_map.find(plugin_name);
|
898
|
+
if (it == cluster_specifier_plugin_map.end()) {
|
899
|
+
errors->AddError(absl::StrCat("unknown cluster specifier plugin name \"",
|
900
|
+
plugin_name, "\""));
|
901
|
+
} else {
|
902
|
+
// If the cluster specifier config is empty, that means that the
|
903
|
+
// plugin was unsupported but optional. In that case, skip this route.
|
904
|
+
if (it->second.empty()) return absl::nullopt;
|
905
|
+
}
|
906
|
+
route_action.action =
|
907
|
+
XdsRouteConfigResource::Route::RouteAction::ClusterSpecifierPluginName{
|
908
|
+
std::move(plugin_name)};
|
909
|
+
} else {
|
910
|
+
// Not a supported cluster specifier, so ignore this route.
|
911
|
+
return absl::nullopt;
|
912
|
+
}
|
913
|
+
return route_action;
|
914
|
+
}
|
915
|
+
|
916
|
+
absl::optional<XdsRouteConfigResource::Route> ParseRoute(
|
917
|
+
const XdsResourceType::DecodeContext& context,
|
918
|
+
const envoy_config_route_v3_Route* route_proto,
|
919
|
+
const absl::optional<XdsRouteConfigResource::RetryPolicy>&
|
920
|
+
virtual_host_retry_policy,
|
921
|
+
const XdsRouteConfigResource::ClusterSpecifierPluginMap&
|
922
|
+
cluster_specifier_plugin_map,
|
923
|
+
std::set<absl::string_view>* cluster_specifier_plugins_not_seen,
|
924
|
+
ValidationErrors* errors) {
|
925
|
+
XdsRouteConfigResource::Route route;
|
926
|
+
// Parse route match.
|
927
|
+
{
|
928
|
+
ValidationErrors::ScopedField field(errors, ".match");
|
929
|
+
const auto* match = envoy_config_route_v3_Route_match(route_proto);
|
930
|
+
if (match == nullptr) {
|
931
|
+
errors->AddError("field not present");
|
932
|
+
return absl::nullopt;
|
933
|
+
}
|
934
|
+
// Skip routes with query_parameters set.
|
935
|
+
size_t query_parameters_size;
|
936
|
+
static_cast<void>(envoy_config_route_v3_RouteMatch_query_parameters(
|
937
|
+
match, &query_parameters_size));
|
938
|
+
if (query_parameters_size > 0) return absl::nullopt;
|
939
|
+
// Parse matchers.
|
940
|
+
auto path_matcher = RoutePathMatchParse(match, errors);
|
941
|
+
if (!path_matcher.has_value()) return absl::nullopt;
|
942
|
+
route.matchers.path_matcher = std::move(*path_matcher);
|
943
|
+
RouteHeaderMatchersParse(match, &route, errors);
|
944
|
+
RouteRuntimeFractionParse(match, &route, errors);
|
945
|
+
}
|
946
|
+
// Parse route action.
|
947
|
+
const envoy_config_route_v3_RouteAction* route_action_proto =
|
948
|
+
envoy_config_route_v3_Route_route(route_proto);
|
949
|
+
if (route_action_proto != nullptr) {
|
950
|
+
ValidationErrors::ScopedField field(errors, ".route");
|
951
|
+
auto route_action = RouteActionParse(context, route_action_proto,
|
952
|
+
cluster_specifier_plugin_map, errors);
|
953
|
+
if (!route_action.has_value()) return absl::nullopt;
|
954
|
+
// If the route does not have a retry policy but the vhost does,
|
955
|
+
// use the vhost retry policy for this route.
|
956
|
+
if (!route_action->retry_policy.has_value()) {
|
957
|
+
route_action->retry_policy = virtual_host_retry_policy;
|
958
|
+
}
|
959
|
+
// Mark off plugins used in route action.
|
960
|
+
auto* cluster_specifier_action = absl::get_if<
|
961
|
+
XdsRouteConfigResource::Route::RouteAction::ClusterSpecifierPluginName>(
|
962
|
+
&route_action->action);
|
963
|
+
if (cluster_specifier_action != nullptr) {
|
964
|
+
cluster_specifier_plugins_not_seen->erase(
|
965
|
+
cluster_specifier_action->cluster_specifier_plugin_name);
|
966
|
+
}
|
967
|
+
route.action = std::move(*route_action);
|
968
|
+
} else if (envoy_config_route_v3_Route_has_non_forwarding_action(
|
969
|
+
route_proto)) {
|
970
|
+
route.action = XdsRouteConfigResource::Route::NonForwardingAction();
|
971
|
+
} else {
|
972
|
+
// Leave route.action initialized to UnknownAction (its default).
|
973
|
+
}
|
974
|
+
// Parse typed_per_filter_config.
|
975
|
+
{
|
976
|
+
ValidationErrors::ScopedField field(errors, ".typed_per_filter_config");
|
977
|
+
route.typed_per_filter_config = ParseTypedPerFilterConfig<
|
978
|
+
envoy_config_route_v3_Route,
|
979
|
+
envoy_config_route_v3_Route_TypedPerFilterConfigEntry>(
|
980
|
+
context, route_proto,
|
981
|
+
envoy_config_route_v3_Route_typed_per_filter_config_next,
|
982
|
+
envoy_config_route_v3_Route_TypedPerFilterConfigEntry_key,
|
983
|
+
envoy_config_route_v3_Route_TypedPerFilterConfigEntry_value, errors);
|
957
984
|
}
|
958
985
|
return route;
|
959
986
|
}
|
960
987
|
|
961
988
|
} // namespace
|
962
989
|
|
963
|
-
|
990
|
+
XdsRouteConfigResource XdsRouteConfigResource::Parse(
|
964
991
|
const XdsResourceType::DecodeContext& context,
|
965
|
-
const envoy_config_route_v3_RouteConfiguration* route_config
|
992
|
+
const envoy_config_route_v3_RouteConfiguration* route_config,
|
993
|
+
ValidationErrors* errors) {
|
966
994
|
XdsRouteConfigResource rds_update;
|
967
|
-
// Get the cluster spcifier
|
995
|
+
// Get the cluster spcifier plugin map.
|
968
996
|
if (XdsRlsEnabled()) {
|
969
|
-
auto cluster_specifier_plugin_map =
|
970
|
-
ClusterSpecifierPluginParse(context, route_config);
|
971
|
-
if (!cluster_specifier_plugin_map.ok()) {
|
972
|
-
return cluster_specifier_plugin_map.status();
|
973
|
-
}
|
974
997
|
rds_update.cluster_specifier_plugin_map =
|
975
|
-
|
998
|
+
ClusterSpecifierPluginParse(context, route_config, errors);
|
999
|
+
}
|
1000
|
+
// Build a set of configured cluster_specifier_plugin names to make sure
|
1001
|
+
// each is actually referenced by a route action.
|
1002
|
+
std::set<absl::string_view> cluster_specifier_plugins_not_seen;
|
1003
|
+
for (auto& plugin : rds_update.cluster_specifier_plugin_map) {
|
1004
|
+
cluster_specifier_plugins_not_seen.emplace(plugin.first);
|
976
1005
|
}
|
977
1006
|
// Get the virtual hosts.
|
978
1007
|
size_t num_virtual_hosts;
|
@@ -980,6 +1009,8 @@ absl::StatusOr<XdsRouteConfigResource> XdsRouteConfigResource::Parse(
|
|
980
1009
|
envoy_config_route_v3_RouteConfiguration_virtual_hosts(
|
981
1010
|
route_config, &num_virtual_hosts);
|
982
1011
|
for (size_t i = 0; i < num_virtual_hosts; ++i) {
|
1012
|
+
ValidationErrors::ScopedField field(
|
1013
|
+
errors, absl::StrCat(".virtual_hosts[", i, "]"));
|
983
1014
|
rds_update.virtual_hosts.emplace_back();
|
984
1015
|
XdsRouteConfigResource::VirtualHost& vhost =
|
985
1016
|
rds_update.virtual_hosts.back();
|
@@ -990,118 +1021,57 @@ absl::StatusOr<XdsRouteConfigResource> XdsRouteConfigResource::Parse(
|
|
990
1021
|
for (size_t j = 0; j < domain_size; ++j) {
|
991
1022
|
std::string domain_pattern = UpbStringToStdString(domains[j]);
|
992
1023
|
if (!XdsRouting::IsValidDomainPattern(domain_pattern)) {
|
993
|
-
|
994
|
-
|
1024
|
+
ValidationErrors::ScopedField field(errors,
|
1025
|
+
absl::StrCat(".domains[", j, "]"));
|
1026
|
+
errors->AddError(
|
1027
|
+
absl::StrCat("invalid domain pattern \"", domain_pattern, "\""));
|
995
1028
|
}
|
996
1029
|
vhost.domains.emplace_back(std::move(domain_pattern));
|
997
1030
|
}
|
998
1031
|
if (vhost.domains.empty()) {
|
999
|
-
|
1032
|
+
ValidationErrors::ScopedField field(errors, ".domains");
|
1033
|
+
errors->AddError("must be non-empty");
|
1000
1034
|
}
|
1001
1035
|
// Parse typed_per_filter_config.
|
1002
|
-
|
1003
|
-
|
1004
|
-
|
1005
|
-
|
1006
|
-
|
1007
|
-
|
1008
|
-
|
1009
|
-
|
1010
|
-
|
1036
|
+
{
|
1037
|
+
ValidationErrors::ScopedField field(errors, ".typed_per_filter_config");
|
1038
|
+
vhost.typed_per_filter_config = ParseTypedPerFilterConfig<
|
1039
|
+
envoy_config_route_v3_VirtualHost,
|
1040
|
+
envoy_config_route_v3_VirtualHost_TypedPerFilterConfigEntry>(
|
1041
|
+
context, virtual_hosts[i],
|
1042
|
+
envoy_config_route_v3_VirtualHost_typed_per_filter_config_next,
|
1043
|
+
envoy_config_route_v3_VirtualHost_TypedPerFilterConfigEntry_key,
|
1044
|
+
envoy_config_route_v3_VirtualHost_TypedPerFilterConfigEntry_value,
|
1045
|
+
errors);
|
1011
1046
|
}
|
1012
|
-
vhost.typed_per_filter_config = std::move(*typed_per_filter_config);
|
1013
1047
|
// Parse retry policy.
|
1014
1048
|
absl::optional<XdsRouteConfigResource::RetryPolicy>
|
1015
1049
|
virtual_host_retry_policy;
|
1016
1050
|
const envoy_config_route_v3_RetryPolicy* retry_policy =
|
1017
1051
|
envoy_config_route_v3_VirtualHost_retry_policy(virtual_hosts[i]);
|
1018
1052
|
if (retry_policy != nullptr) {
|
1019
|
-
|
1020
|
-
|
1021
|
-
|
1053
|
+
ValidationErrors::ScopedField field(errors, ".retry_policy");
|
1054
|
+
virtual_host_retry_policy =
|
1055
|
+
RetryPolicyParse(context, retry_policy, errors);
|
1022
1056
|
}
|
1023
1057
|
// Parse routes.
|
1058
|
+
ValidationErrors::ScopedField field2(errors, ".routes");
|
1024
1059
|
size_t num_routes;
|
1025
1060
|
const envoy_config_route_v3_Route* const* routes =
|
1026
1061
|
envoy_config_route_v3_VirtualHost_routes(virtual_hosts[i], &num_routes);
|
1027
|
-
if (num_routes < 1) {
|
1028
|
-
return absl::InvalidArgumentError("No route found in the virtual host.");
|
1029
|
-
}
|
1030
|
-
// Build a set of cluster_specifier_plugin configured to make sure each is
|
1031
|
-
// actually referenced by a route action.
|
1032
|
-
std::set<absl::string_view> cluster_specifier_plugins;
|
1033
|
-
for (auto& plugin : rds_update.cluster_specifier_plugin_map) {
|
1034
|
-
cluster_specifier_plugins.emplace(plugin.first);
|
1035
|
-
}
|
1036
|
-
// Loop over the whole list of routes
|
1037
1062
|
for (size_t j = 0; j < num_routes; ++j) {
|
1038
|
-
|
1039
|
-
|
1040
|
-
|
1041
|
-
|
1042
|
-
|
1043
|
-
size_t query_parameters_size;
|
1044
|
-
static_cast<void>(envoy_config_route_v3_RouteMatch_query_parameters(
|
1045
|
-
match, &query_parameters_size));
|
1046
|
-
if (query_parameters_size > 0) {
|
1047
|
-
continue;
|
1048
|
-
}
|
1049
|
-
XdsRouteConfigResource::Route route;
|
1050
|
-
bool ignore_route = false;
|
1051
|
-
absl::Status status = RoutePathMatchParse(match, &route, &ignore_route);
|
1052
|
-
if (!status.ok()) return status;
|
1053
|
-
if (ignore_route) continue;
|
1054
|
-
status = RouteHeaderMatchersParse(match, &route);
|
1055
|
-
if (!status.ok()) return status;
|
1056
|
-
status = RouteRuntimeFractionParse(match, &route);
|
1057
|
-
if (!status.ok()) return status;
|
1058
|
-
if (envoy_config_route_v3_Route_has_route(routes[j])) {
|
1059
|
-
route.action.emplace<XdsRouteConfigResource::Route::RouteAction>();
|
1060
|
-
auto route_action = RouteActionParse(
|
1061
|
-
context, routes[j], rds_update.cluster_specifier_plugin_map,
|
1062
|
-
&ignore_route);
|
1063
|
-
if (!route_action.ok()) return route_action.status();
|
1064
|
-
if (ignore_route) continue;
|
1065
|
-
if (route_action->retry_policy == absl::nullopt &&
|
1066
|
-
retry_policy != nullptr) {
|
1067
|
-
route_action->retry_policy = virtual_host_retry_policy;
|
1068
|
-
}
|
1069
|
-
// Mark off plugins used in route action.
|
1070
|
-
auto* cluster_specifier_action =
|
1071
|
-
absl::get_if<XdsRouteConfigResource::Route::RouteAction::
|
1072
|
-
ClusterSpecifierPluginName>(&route_action->action);
|
1073
|
-
if (cluster_specifier_action != nullptr) {
|
1074
|
-
cluster_specifier_plugins.erase(
|
1075
|
-
cluster_specifier_action->cluster_specifier_plugin_name);
|
1076
|
-
}
|
1077
|
-
route.action = std::move(*route_action);
|
1078
|
-
} else if (envoy_config_route_v3_Route_has_non_forwarding_action(
|
1079
|
-
routes[j])) {
|
1080
|
-
route.action
|
1081
|
-
.emplace<XdsRouteConfigResource::Route::NonForwardingAction>();
|
1082
|
-
}
|
1083
|
-
auto typed_per_filter_config = ParseTypedPerFilterConfig<
|
1084
|
-
envoy_config_route_v3_Route,
|
1085
|
-
envoy_config_route_v3_Route_TypedPerFilterConfigEntry>(
|
1086
|
-
context, routes[j],
|
1087
|
-
envoy_config_route_v3_Route_typed_per_filter_config_next,
|
1088
|
-
envoy_config_route_v3_Route_TypedPerFilterConfigEntry_key,
|
1089
|
-
envoy_config_route_v3_Route_TypedPerFilterConfigEntry_value);
|
1090
|
-
if (!typed_per_filter_config.ok()) {
|
1091
|
-
return typed_per_filter_config.status();
|
1092
|
-
}
|
1093
|
-
route.typed_per_filter_config = std::move(*typed_per_filter_config);
|
1094
|
-
vhost.routes.emplace_back(std::move(route));
|
1095
|
-
}
|
1096
|
-
if (vhost.routes.empty()) {
|
1097
|
-
return absl::InvalidArgumentError("No valid routes specified.");
|
1098
|
-
}
|
1099
|
-
// For plugins not used in route action, delete from the update to prevent
|
1100
|
-
// further use.
|
1101
|
-
for (auto& unused_plugin : cluster_specifier_plugins) {
|
1102
|
-
rds_update.cluster_specifier_plugin_map.erase(std::string(unused_plugin));
|
1063
|
+
ValidationErrors::ScopedField field(errors, absl::StrCat("[", j, "]"));
|
1064
|
+
auto route = ParseRoute(context, routes[j], virtual_host_retry_policy,
|
1065
|
+
rds_update.cluster_specifier_plugin_map,
|
1066
|
+
&cluster_specifier_plugins_not_seen, errors);
|
1067
|
+
if (route.has_value()) vhost.routes.emplace_back(std::move(*route));
|
1103
1068
|
}
|
1104
1069
|
}
|
1070
|
+
// For cluster specifier plugins that were not used in any route action,
|
1071
|
+
// delete them from the update, since they will never be used.
|
1072
|
+
for (auto& unused_plugin : cluster_specifier_plugins_not_seen) {
|
1073
|
+
rds_update.cluster_specifier_plugin_map.erase(std::string(unused_plugin));
|
1074
|
+
}
|
1105
1075
|
return rds_update;
|
1106
1076
|
}
|
1107
1077
|
|
@@ -1143,22 +1113,24 @@ XdsResourceType::DecodeResult XdsRouteConfigResourceType::Decode(
|
|
1143
1113
|
// Validate resource.
|
1144
1114
|
result.name = UpbStringToStdString(
|
1145
1115
|
envoy_config_route_v3_RouteConfiguration_name(resource));
|
1146
|
-
|
1147
|
-
|
1116
|
+
ValidationErrors errors;
|
1117
|
+
auto rds_update = XdsRouteConfigResource::Parse(context, resource, &errors);
|
1118
|
+
if (!errors.ok()) {
|
1119
|
+
absl::Status status =
|
1120
|
+
errors.status("errors validating RouteConfiguration resource");
|
1148
1121
|
if (GRPC_TRACE_FLAG_ENABLED(*context.tracer)) {
|
1149
1122
|
gpr_log(GPR_ERROR, "[xds_client %p] invalid RouteConfiguration %s: %s",
|
1150
|
-
context.client, result.name->c_str(),
|
1151
|
-
rds_update.status().ToString().c_str());
|
1123
|
+
context.client, result.name->c_str(), status.ToString().c_str());
|
1152
1124
|
}
|
1153
|
-
result.resource =
|
1125
|
+
result.resource = std::move(status);
|
1154
1126
|
} else {
|
1155
1127
|
if (GRPC_TRACE_FLAG_ENABLED(*context.tracer)) {
|
1156
1128
|
gpr_log(GPR_INFO, "[xds_client %p] parsed RouteConfiguration %s: %s",
|
1157
1129
|
context.client, result.name->c_str(),
|
1158
|
-
rds_update
|
1130
|
+
rds_update.ToString().c_str());
|
1159
1131
|
}
|
1160
1132
|
result.resource =
|
1161
|
-
std::make_unique<XdsRouteConfigResource>(std::move(
|
1133
|
+
std::make_unique<XdsRouteConfigResource>(std::move(rds_update));
|
1162
1134
|
}
|
1163
1135
|
return result;
|
1164
1136
|
}
|