Merge remote-tracking branch 'origin/master' into fix_protobuf_build
This commit is contained in:
commit
c2aa95dc6e
10
BUILD
10
BUILD
|
|
@ -4304,6 +4304,16 @@ grpc_upb_proto_reflection_library(
|
|||
deps = ["@envoy_api//envoy/extensions/transport_sockets/tls/v3:pkg"],
|
||||
)
|
||||
|
||||
grpc_upb_proto_library(
|
||||
name = "envoy_extensions_upstreams_http_upb",
|
||||
deps = ["@envoy_api//envoy/extensions/upstreams/http/v3:pkg"],
|
||||
)
|
||||
|
||||
grpc_upb_proto_reflection_library(
|
||||
name = "envoy_extensions_upstreams_http_upbdefs",
|
||||
deps = ["@envoy_api//envoy/extensions/upstreams/http/v3:pkg"],
|
||||
)
|
||||
|
||||
grpc_upb_proto_library(
|
||||
name = "envoy_service_discovery_upb",
|
||||
deps = ["@envoy_api//envoy/service/discovery/v3:pkg"],
|
||||
|
|
|
|||
|
|
@ -738,6 +738,9 @@ protobuf_generate_grpc_cpp_with_import_path_correction(
|
|||
protobuf_generate_grpc_cpp_with_import_path_correction(
|
||||
src/proto/grpc/testing/xds/v3/http_filter_rbac.proto src/proto/grpc/testing/xds/v3/http_filter_rbac.proto
|
||||
)
|
||||
protobuf_generate_grpc_cpp_with_import_path_correction(
|
||||
src/proto/grpc/testing/xds/v3/http_protocol_options.proto src/proto/grpc/testing/xds/v3/http_protocol_options.proto
|
||||
)
|
||||
protobuf_generate_grpc_cpp_with_import_path_correction(
|
||||
src/proto/grpc/testing/xds/v3/listener.proto src/proto/grpc/testing/xds/v3/listener.proto
|
||||
)
|
||||
|
|
@ -880,6 +883,7 @@ if(gRPC_BUILD_TESTS)
|
|||
add_dependencies(buildtests_cxx avl_test)
|
||||
add_dependencies(buildtests_cxx aws_request_signer_test)
|
||||
add_dependencies(buildtests_cxx b64_test)
|
||||
add_dependencies(buildtests_cxx backend_metrics_lb_policy_test)
|
||||
add_dependencies(buildtests_cxx backoff_test)
|
||||
add_dependencies(buildtests_cxx bad_ping_test)
|
||||
add_dependencies(buildtests_cxx bad_server_response_test)
|
||||
|
|
@ -958,8 +962,6 @@ if(gRPC_BUILD_TESTS)
|
|||
add_dependencies(buildtests_cxx client_ssl_test)
|
||||
endif()
|
||||
add_dependencies(buildtests_cxx client_streaming_test)
|
||||
add_dependencies(buildtests_cxx client_transport_error_test)
|
||||
add_dependencies(buildtests_cxx client_transport_test)
|
||||
add_dependencies(buildtests_cxx cmdline_test)
|
||||
add_dependencies(buildtests_cxx codegen_test_full)
|
||||
add_dependencies(buildtests_cxx codegen_test_minimal)
|
||||
|
|
@ -1044,7 +1046,7 @@ if(gRPC_BUILD_TESTS)
|
|||
add_dependencies(buildtests_cxx forkable_test)
|
||||
add_dependencies(buildtests_cxx format_request_test)
|
||||
add_dependencies(buildtests_cxx frame_handler_test)
|
||||
add_dependencies(buildtests_cxx frame_header_test)
|
||||
add_dependencies(buildtests_cxx frame_test)
|
||||
if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_POSIX)
|
||||
add_dependencies(buildtests_cxx fuzzing_event_engine_test)
|
||||
endif()
|
||||
|
|
@ -1402,8 +1404,6 @@ if(gRPC_BUILD_TESTS)
|
|||
add_dependencies(buildtests_cxx test_core_security_ssl_credentials_test)
|
||||
add_dependencies(buildtests_cxx test_core_slice_slice_buffer_test)
|
||||
add_dependencies(buildtests_cxx test_core_slice_slice_test)
|
||||
add_dependencies(buildtests_cxx test_core_transport_chaotic_good_frame_test)
|
||||
add_dependencies(buildtests_cxx test_core_transport_chttp2_frame_test)
|
||||
add_dependencies(buildtests_cxx test_cpp_client_credentials_test)
|
||||
add_dependencies(buildtests_cxx test_cpp_end2end_ssl_credentials_test)
|
||||
add_dependencies(buildtests_cxx test_cpp_server_credentials_test)
|
||||
|
|
@ -1954,6 +1954,7 @@ add_library(grpc
|
|||
src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/secret.upb_minitable.c
|
||||
src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/tls.upb_minitable.c
|
||||
src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb_minitable.c
|
||||
src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb_minitable.c
|
||||
src/core/ext/upb-gen/envoy/service/discovery/v3/ads.upb_minitable.c
|
||||
src/core/ext/upb-gen/envoy/service/discovery/v3/discovery.upb_minitable.c
|
||||
src/core/ext/upb-gen/envoy/service/load_stats/v3/lrs.upb_minitable.c
|
||||
|
|
@ -2112,6 +2113,7 @@ add_library(grpc
|
|||
src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c
|
||||
src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c
|
||||
src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upbdefs.c
|
||||
src/core/ext/upbdefs-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upbdefs.c
|
||||
src/core/ext/upbdefs-gen/envoy/service/discovery/v3/ads.upbdefs.c
|
||||
src/core/ext/upbdefs-gen/envoy/service/discovery/v3/discovery.upbdefs.c
|
||||
src/core/ext/upbdefs-gen/envoy/service/load_stats/v3/lrs.upbdefs.c
|
||||
|
|
@ -2252,7 +2254,7 @@ add_library(grpc
|
|||
src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc
|
||||
src/core/lib/event_engine/posix_engine/internal_errqueue.cc
|
||||
src/core/lib/event_engine/posix_engine/lockfree_event.cc
|
||||
src/core/lib/event_engine/posix_engine/native_dns_resolver.cc
|
||||
src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.cc
|
||||
src/core/lib/event_engine/posix_engine/posix_endpoint.cc
|
||||
src/core/lib/event_engine/posix_engine/posix_engine.cc
|
||||
src/core/lib/event_engine/posix_engine/posix_engine_listener.cc
|
||||
|
|
@ -2279,6 +2281,7 @@ add_library(grpc
|
|||
src/core/lib/event_engine/utils.cc
|
||||
src/core/lib/event_engine/windows/grpc_polled_fd_windows.cc
|
||||
src/core/lib/event_engine/windows/iocp.cc
|
||||
src/core/lib/event_engine/windows/native_windows_dns_resolver.cc
|
||||
src/core/lib/event_engine/windows/win_socket.cc
|
||||
src/core/lib/event_engine/windows/windows_endpoint.cc
|
||||
src/core/lib/event_engine/windows/windows_engine.cc
|
||||
|
|
@ -2983,7 +2986,7 @@ add_library(grpc_unsecure
|
|||
src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc
|
||||
src/core/lib/event_engine/posix_engine/internal_errqueue.cc
|
||||
src/core/lib/event_engine/posix_engine/lockfree_event.cc
|
||||
src/core/lib/event_engine/posix_engine/native_dns_resolver.cc
|
||||
src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.cc
|
||||
src/core/lib/event_engine/posix_engine/posix_endpoint.cc
|
||||
src/core/lib/event_engine/posix_engine/posix_engine.cc
|
||||
src/core/lib/event_engine/posix_engine/posix_engine_listener.cc
|
||||
|
|
@ -3010,6 +3013,7 @@ add_library(grpc_unsecure
|
|||
src/core/lib/event_engine/utils.cc
|
||||
src/core/lib/event_engine/windows/grpc_polled_fd_windows.cc
|
||||
src/core/lib/event_engine/windows/iocp.cc
|
||||
src/core/lib/event_engine/windows/native_windows_dns_resolver.cc
|
||||
src/core/lib/event_engine/windows/win_socket.cc
|
||||
src/core/lib/event_engine/windows/windows_endpoint.cc
|
||||
src/core/lib/event_engine/windows/windows_engine.cc
|
||||
|
|
@ -4972,7 +4976,7 @@ add_library(grpc_authorization_provider
|
|||
src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc
|
||||
src/core/lib/event_engine/posix_engine/internal_errqueue.cc
|
||||
src/core/lib/event_engine/posix_engine/lockfree_event.cc
|
||||
src/core/lib/event_engine/posix_engine/native_dns_resolver.cc
|
||||
src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.cc
|
||||
src/core/lib/event_engine/posix_engine/posix_endpoint.cc
|
||||
src/core/lib/event_engine/posix_engine/posix_engine.cc
|
||||
src/core/lib/event_engine/posix_engine/posix_engine_listener.cc
|
||||
|
|
@ -4999,6 +5003,7 @@ add_library(grpc_authorization_provider
|
|||
src/core/lib/event_engine/utils.cc
|
||||
src/core/lib/event_engine/windows/grpc_polled_fd_windows.cc
|
||||
src/core/lib/event_engine/windows/iocp.cc
|
||||
src/core/lib/event_engine/windows/native_windows_dns_resolver.cc
|
||||
src/core/lib/event_engine/windows/win_socket.cc
|
||||
src/core/lib/event_engine/windows/windows_endpoint.cc
|
||||
src/core/lib/event_engine/windows/windows_engine.cc
|
||||
|
|
@ -6849,6 +6854,55 @@ target_link_libraries(b64_test
|
|||
)
|
||||
|
||||
|
||||
endif()
|
||||
if(gRPC_BUILD_TESTS)
|
||||
|
||||
add_executable(backend_metrics_lb_policy_test
|
||||
${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/empty.pb.cc
|
||||
${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/empty.grpc.pb.cc
|
||||
${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/empty.pb.h
|
||||
${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/empty.grpc.pb.h
|
||||
${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/messages.pb.cc
|
||||
${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/messages.grpc.pb.cc
|
||||
${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/messages.pb.h
|
||||
${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/messages.grpc.pb.h
|
||||
${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/test.pb.cc
|
||||
${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/test.grpc.pb.cc
|
||||
${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/test.pb.h
|
||||
${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/test.grpc.pb.h
|
||||
src/cpp/server/orca/orca_service.cc
|
||||
test/cpp/interop/backend_metrics_lb_policy.cc
|
||||
test/cpp/interop/backend_metrics_lb_policy_test.cc
|
||||
)
|
||||
target_compile_features(backend_metrics_lb_policy_test PUBLIC cxx_std_14)
|
||||
target_include_directories(backend_metrics_lb_policy_test
|
||||
PRIVATE
|
||||
${CMAKE_CURRENT_SOURCE_DIR}
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/include
|
||||
${_gRPC_ADDRESS_SORTING_INCLUDE_DIR}
|
||||
${_gRPC_RE2_INCLUDE_DIR}
|
||||
${_gRPC_SSL_INCLUDE_DIR}
|
||||
${_gRPC_UPB_GENERATED_DIR}
|
||||
${_gRPC_UPB_GRPC_GENERATED_DIR}
|
||||
${_gRPC_UPB_INCLUDE_DIR}
|
||||
${_gRPC_XXHASH_INCLUDE_DIR}
|
||||
${_gRPC_ZLIB_INCLUDE_DIR}
|
||||
third_party/googletest/googletest/include
|
||||
third_party/googletest/googletest
|
||||
third_party/googletest/googlemock/include
|
||||
third_party/googletest/googlemock
|
||||
${_gRPC_PROTO_GENS_DIR}
|
||||
)
|
||||
|
||||
target_link_libraries(backend_metrics_lb_policy_test
|
||||
${_gRPC_ALLTARGETS_LIBRARIES}
|
||||
gtest
|
||||
grpc++
|
||||
grpc_test_util
|
||||
grpc++_test_config
|
||||
)
|
||||
|
||||
|
||||
endif()
|
||||
if(gRPC_BUILD_TESTS)
|
||||
|
||||
|
|
@ -9525,92 +9579,6 @@ target_link_libraries(client_streaming_test
|
|||
)
|
||||
|
||||
|
||||
endif()
|
||||
if(gRPC_BUILD_TESTS)
|
||||
|
||||
add_executable(client_transport_error_test
|
||||
${_gRPC_PROTO_GENS_DIR}/test/core/event_engine/fuzzing_event_engine/fuzzing_event_engine.pb.cc
|
||||
${_gRPC_PROTO_GENS_DIR}/test/core/event_engine/fuzzing_event_engine/fuzzing_event_engine.grpc.pb.cc
|
||||
${_gRPC_PROTO_GENS_DIR}/test/core/event_engine/fuzzing_event_engine/fuzzing_event_engine.pb.h
|
||||
${_gRPC_PROTO_GENS_DIR}/test/core/event_engine/fuzzing_event_engine/fuzzing_event_engine.grpc.pb.h
|
||||
src/core/ext/transport/chaotic_good/client_transport.cc
|
||||
src/core/ext/transport/chaotic_good/frame.cc
|
||||
src/core/ext/transport/chaotic_good/frame_header.cc
|
||||
src/core/lib/transport/promise_endpoint.cc
|
||||
test/core/event_engine/fuzzing_event_engine/fuzzing_event_engine.cc
|
||||
test/core/transport/chaotic_good/client_transport_error_test.cc
|
||||
)
|
||||
target_compile_features(client_transport_error_test PUBLIC cxx_std_14)
|
||||
target_include_directories(client_transport_error_test
|
||||
PRIVATE
|
||||
${CMAKE_CURRENT_SOURCE_DIR}
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/include
|
||||
${_gRPC_ADDRESS_SORTING_INCLUDE_DIR}
|
||||
${_gRPC_RE2_INCLUDE_DIR}
|
||||
${_gRPC_SSL_INCLUDE_DIR}
|
||||
${_gRPC_UPB_GENERATED_DIR}
|
||||
${_gRPC_UPB_GRPC_GENERATED_DIR}
|
||||
${_gRPC_UPB_INCLUDE_DIR}
|
||||
${_gRPC_XXHASH_INCLUDE_DIR}
|
||||
${_gRPC_ZLIB_INCLUDE_DIR}
|
||||
third_party/googletest/googletest/include
|
||||
third_party/googletest/googletest
|
||||
third_party/googletest/googlemock/include
|
||||
third_party/googletest/googlemock
|
||||
${_gRPC_PROTO_GENS_DIR}
|
||||
)
|
||||
|
||||
target_link_libraries(client_transport_error_test
|
||||
${_gRPC_ALLTARGETS_LIBRARIES}
|
||||
gtest
|
||||
${_gRPC_PROTOBUF_LIBRARIES}
|
||||
grpc_test_util
|
||||
)
|
||||
|
||||
|
||||
endif()
|
||||
if(gRPC_BUILD_TESTS)
|
||||
|
||||
add_executable(client_transport_test
|
||||
${_gRPC_PROTO_GENS_DIR}/test/core/event_engine/fuzzing_event_engine/fuzzing_event_engine.pb.cc
|
||||
${_gRPC_PROTO_GENS_DIR}/test/core/event_engine/fuzzing_event_engine/fuzzing_event_engine.grpc.pb.cc
|
||||
${_gRPC_PROTO_GENS_DIR}/test/core/event_engine/fuzzing_event_engine/fuzzing_event_engine.pb.h
|
||||
${_gRPC_PROTO_GENS_DIR}/test/core/event_engine/fuzzing_event_engine/fuzzing_event_engine.grpc.pb.h
|
||||
src/core/ext/transport/chaotic_good/client_transport.cc
|
||||
src/core/ext/transport/chaotic_good/frame.cc
|
||||
src/core/ext/transport/chaotic_good/frame_header.cc
|
||||
src/core/lib/transport/promise_endpoint.cc
|
||||
test/core/event_engine/fuzzing_event_engine/fuzzing_event_engine.cc
|
||||
test/core/transport/chaotic_good/client_transport_test.cc
|
||||
)
|
||||
target_compile_features(client_transport_test PUBLIC cxx_std_14)
|
||||
target_include_directories(client_transport_test
|
||||
PRIVATE
|
||||
${CMAKE_CURRENT_SOURCE_DIR}
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/include
|
||||
${_gRPC_ADDRESS_SORTING_INCLUDE_DIR}
|
||||
${_gRPC_RE2_INCLUDE_DIR}
|
||||
${_gRPC_SSL_INCLUDE_DIR}
|
||||
${_gRPC_UPB_GENERATED_DIR}
|
||||
${_gRPC_UPB_GRPC_GENERATED_DIR}
|
||||
${_gRPC_UPB_INCLUDE_DIR}
|
||||
${_gRPC_XXHASH_INCLUDE_DIR}
|
||||
${_gRPC_ZLIB_INCLUDE_DIR}
|
||||
third_party/googletest/googletest/include
|
||||
third_party/googletest/googletest
|
||||
third_party/googletest/googlemock/include
|
||||
third_party/googletest/googlemock
|
||||
${_gRPC_PROTO_GENS_DIR}
|
||||
)
|
||||
|
||||
target_link_libraries(client_transport_test
|
||||
${_gRPC_ALLTARGETS_LIBRARIES}
|
||||
gtest
|
||||
${_gRPC_PROTOBUF_LIBRARIES}
|
||||
grpc_test_util
|
||||
)
|
||||
|
||||
|
||||
endif()
|
||||
if(gRPC_BUILD_TESTS)
|
||||
|
||||
|
|
@ -12520,12 +12488,17 @@ target_link_libraries(frame_handler_test
|
|||
endif()
|
||||
if(gRPC_BUILD_TESTS)
|
||||
|
||||
add_executable(frame_header_test
|
||||
src/core/ext/transport/chaotic_good/frame_header.cc
|
||||
test/core/transport/chaotic_good/frame_header_test.cc
|
||||
add_executable(frame_test
|
||||
src/core/ext/transport/chttp2/transport/frame.cc
|
||||
src/core/lib/debug/trace.cc
|
||||
src/core/lib/slice/slice.cc
|
||||
src/core/lib/slice/slice_buffer.cc
|
||||
src/core/lib/slice/slice_refcount.cc
|
||||
src/core/lib/slice/slice_string_helpers.cc
|
||||
test/core/transport/chttp2/frame_test.cc
|
||||
)
|
||||
target_compile_features(frame_header_test PUBLIC cxx_std_14)
|
||||
target_include_directories(frame_header_test
|
||||
target_compile_features(frame_test PUBLIC cxx_std_14)
|
||||
target_include_directories(frame_test
|
||||
PRIVATE
|
||||
${CMAKE_CURRENT_SOURCE_DIR}
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/include
|
||||
|
|
@ -12544,10 +12517,12 @@ target_include_directories(frame_header_test
|
|||
${_gRPC_PROTO_GENS_DIR}
|
||||
)
|
||||
|
||||
target_link_libraries(frame_header_test
|
||||
target_link_libraries(frame_test
|
||||
${_gRPC_ALLTARGETS_LIBRARIES}
|
||||
gtest
|
||||
absl::hash
|
||||
absl::statusor
|
||||
absl::span
|
||||
gpr
|
||||
)
|
||||
|
||||
|
|
@ -24619,359 +24594,6 @@ target_link_libraries(test_core_slice_slice_test
|
|||
)
|
||||
|
||||
|
||||
endif()
|
||||
if(gRPC_BUILD_TESTS)
|
||||
|
||||
add_executable(test_core_transport_chaotic_good_frame_test
|
||||
src/core/ext/transport/chaotic_good/frame.cc
|
||||
src/core/ext/transport/chaotic_good/frame_header.cc
|
||||
src/core/ext/transport/chttp2/transport/bin_encoder.cc
|
||||
src/core/ext/transport/chttp2/transport/decode_huff.cc
|
||||
src/core/ext/transport/chttp2/transport/hpack_encoder.cc
|
||||
src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc
|
||||
src/core/ext/transport/chttp2/transport/hpack_parse_result.cc
|
||||
src/core/ext/transport/chttp2/transport/hpack_parser.cc
|
||||
src/core/ext/transport/chttp2/transport/hpack_parser_table.cc
|
||||
src/core/ext/transport/chttp2/transport/http_trace.cc
|
||||
src/core/ext/transport/chttp2/transport/huffsyms.cc
|
||||
src/core/ext/transport/chttp2/transport/varint.cc
|
||||
src/core/ext/upb-gen/google/protobuf/any.upb_minitable.c
|
||||
src/core/ext/upb-gen/google/protobuf/descriptor.upb_minitable.c
|
||||
src/core/ext/upb-gen/google/rpc/status.upb_minitable.c
|
||||
src/core/ext/upb-gen/src/proto/grpc/gcp/altscontext.upb_minitable.c
|
||||
src/core/ext/upb-gen/src/proto/grpc/gcp/handshaker.upb_minitable.c
|
||||
src/core/ext/upb-gen/src/proto/grpc/gcp/transport_security_common.upb_minitable.c
|
||||
src/core/lib/address_utils/parse_address.cc
|
||||
src/core/lib/address_utils/sockaddr_utils.cc
|
||||
src/core/lib/backoff/backoff.cc
|
||||
src/core/lib/backoff/random_early_detection.cc
|
||||
src/core/lib/channel/call_tracer.cc
|
||||
src/core/lib/channel/channel_args.cc
|
||||
src/core/lib/channel/channel_args_preconditioning.cc
|
||||
src/core/lib/channel/channel_stack.cc
|
||||
src/core/lib/channel/channel_stack_builder.cc
|
||||
src/core/lib/channel/channel_stack_builder_impl.cc
|
||||
src/core/lib/channel/channel_stack_trace.cc
|
||||
src/core/lib/channel/channel_trace.cc
|
||||
src/core/lib/channel/channelz.cc
|
||||
src/core/lib/channel/channelz_registry.cc
|
||||
src/core/lib/channel/connected_channel.cc
|
||||
src/core/lib/channel/promise_based_filter.cc
|
||||
src/core/lib/channel/server_call_tracer_filter.cc
|
||||
src/core/lib/channel/status_util.cc
|
||||
src/core/lib/compression/compression.cc
|
||||
src/core/lib/compression/compression_internal.cc
|
||||
src/core/lib/compression/message_compress.cc
|
||||
src/core/lib/config/core_configuration.cc
|
||||
src/core/lib/debug/event_log.cc
|
||||
src/core/lib/debug/histogram_view.cc
|
||||
src/core/lib/debug/stats.cc
|
||||
src/core/lib/debug/stats_data.cc
|
||||
src/core/lib/debug/trace.cc
|
||||
src/core/lib/event_engine/ares_resolver.cc
|
||||
src/core/lib/event_engine/cf_engine/cf_engine.cc
|
||||
src/core/lib/event_engine/cf_engine/cfstream_endpoint.cc
|
||||
src/core/lib/event_engine/cf_engine/dns_service_resolver.cc
|
||||
src/core/lib/event_engine/channel_args_endpoint_config.cc
|
||||
src/core/lib/event_engine/default_event_engine.cc
|
||||
src/core/lib/event_engine/default_event_engine_factory.cc
|
||||
src/core/lib/event_engine/event_engine.cc
|
||||
src/core/lib/event_engine/forkable.cc
|
||||
src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc
|
||||
src/core/lib/event_engine/posix_engine/ev_poll_posix.cc
|
||||
src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc
|
||||
src/core/lib/event_engine/posix_engine/internal_errqueue.cc
|
||||
src/core/lib/event_engine/posix_engine/lockfree_event.cc
|
||||
src/core/lib/event_engine/posix_engine/native_dns_resolver.cc
|
||||
src/core/lib/event_engine/posix_engine/posix_endpoint.cc
|
||||
src/core/lib/event_engine/posix_engine/posix_engine.cc
|
||||
src/core/lib/event_engine/posix_engine/posix_engine_listener.cc
|
||||
src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc
|
||||
src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc
|
||||
src/core/lib/event_engine/posix_engine/timer.cc
|
||||
src/core/lib/event_engine/posix_engine/timer_heap.cc
|
||||
src/core/lib/event_engine/posix_engine/timer_manager.cc
|
||||
src/core/lib/event_engine/posix_engine/traced_buffer_list.cc
|
||||
src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.cc
|
||||
src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.cc
|
||||
src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.cc
|
||||
src/core/lib/event_engine/resolved_address.cc
|
||||
src/core/lib/event_engine/shim.cc
|
||||
src/core/lib/event_engine/slice.cc
|
||||
src/core/lib/event_engine/slice_buffer.cc
|
||||
src/core/lib/event_engine/tcp_socket_utils.cc
|
||||
src/core/lib/event_engine/thread_pool/thread_count.cc
|
||||
src/core/lib/event_engine/thread_pool/thread_pool_factory.cc
|
||||
src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc
|
||||
src/core/lib/event_engine/thready_event_engine/thready_event_engine.cc
|
||||
src/core/lib/event_engine/time_util.cc
|
||||
src/core/lib/event_engine/trace.cc
|
||||
src/core/lib/event_engine/utils.cc
|
||||
src/core/lib/event_engine/windows/grpc_polled_fd_windows.cc
|
||||
src/core/lib/event_engine/windows/iocp.cc
|
||||
src/core/lib/event_engine/windows/win_socket.cc
|
||||
src/core/lib/event_engine/windows/windows_endpoint.cc
|
||||
src/core/lib/event_engine/windows/windows_engine.cc
|
||||
src/core/lib/event_engine/windows/windows_listener.cc
|
||||
src/core/lib/event_engine/work_queue/basic_work_queue.cc
|
||||
src/core/lib/experiments/config.cc
|
||||
src/core/lib/experiments/experiments.cc
|
||||
src/core/lib/gprpp/load_file.cc
|
||||
src/core/lib/gprpp/per_cpu.cc
|
||||
src/core/lib/gprpp/ref_counted_string.cc
|
||||
src/core/lib/gprpp/status_helper.cc
|
||||
src/core/lib/gprpp/time.cc
|
||||
src/core/lib/gprpp/time_averaged_stats.cc
|
||||
src/core/lib/gprpp/validation_errors.cc
|
||||
src/core/lib/gprpp/work_serializer.cc
|
||||
src/core/lib/handshaker/proxy_mapper_registry.cc
|
||||
src/core/lib/iomgr/buffer_list.cc
|
||||
src/core/lib/iomgr/call_combiner.cc
|
||||
src/core/lib/iomgr/cfstream_handle.cc
|
||||
src/core/lib/iomgr/closure.cc
|
||||
src/core/lib/iomgr/combiner.cc
|
||||
src/core/lib/iomgr/dualstack_socket_posix.cc
|
||||
src/core/lib/iomgr/endpoint.cc
|
||||
src/core/lib/iomgr/endpoint_cfstream.cc
|
||||
src/core/lib/iomgr/endpoint_pair_posix.cc
|
||||
src/core/lib/iomgr/endpoint_pair_windows.cc
|
||||
src/core/lib/iomgr/error.cc
|
||||
src/core/lib/iomgr/error_cfstream.cc
|
||||
src/core/lib/iomgr/ev_apple.cc
|
||||
src/core/lib/iomgr/ev_epoll1_linux.cc
|
||||
src/core/lib/iomgr/ev_poll_posix.cc
|
||||
src/core/lib/iomgr/ev_posix.cc
|
||||
src/core/lib/iomgr/ev_windows.cc
|
||||
src/core/lib/iomgr/event_engine_shims/closure.cc
|
||||
src/core/lib/iomgr/event_engine_shims/endpoint.cc
|
||||
src/core/lib/iomgr/event_engine_shims/tcp_client.cc
|
||||
src/core/lib/iomgr/exec_ctx.cc
|
||||
src/core/lib/iomgr/executor.cc
|
||||
src/core/lib/iomgr/fork_posix.cc
|
||||
src/core/lib/iomgr/fork_windows.cc
|
||||
src/core/lib/iomgr/gethostname_fallback.cc
|
||||
src/core/lib/iomgr/gethostname_host_name_max.cc
|
||||
src/core/lib/iomgr/gethostname_sysconf.cc
|
||||
src/core/lib/iomgr/grpc_if_nametoindex_posix.cc
|
||||
src/core/lib/iomgr/grpc_if_nametoindex_unsupported.cc
|
||||
src/core/lib/iomgr/internal_errqueue.cc
|
||||
src/core/lib/iomgr/iocp_windows.cc
|
||||
src/core/lib/iomgr/iomgr.cc
|
||||
src/core/lib/iomgr/iomgr_internal.cc
|
||||
src/core/lib/iomgr/iomgr_posix.cc
|
||||
src/core/lib/iomgr/iomgr_posix_cfstream.cc
|
||||
src/core/lib/iomgr/iomgr_windows.cc
|
||||
src/core/lib/iomgr/load_file.cc
|
||||
src/core/lib/iomgr/lockfree_event.cc
|
||||
src/core/lib/iomgr/polling_entity.cc
|
||||
src/core/lib/iomgr/pollset.cc
|
||||
src/core/lib/iomgr/pollset_set.cc
|
||||
src/core/lib/iomgr/pollset_set_windows.cc
|
||||
src/core/lib/iomgr/pollset_windows.cc
|
||||
src/core/lib/iomgr/resolve_address.cc
|
||||
src/core/lib/iomgr/resolve_address_posix.cc
|
||||
src/core/lib/iomgr/resolve_address_windows.cc
|
||||
src/core/lib/iomgr/sockaddr_utils_posix.cc
|
||||
src/core/lib/iomgr/socket_factory_posix.cc
|
||||
src/core/lib/iomgr/socket_mutator.cc
|
||||
src/core/lib/iomgr/socket_utils_common_posix.cc
|
||||
src/core/lib/iomgr/socket_utils_linux.cc
|
||||
src/core/lib/iomgr/socket_utils_posix.cc
|
||||
src/core/lib/iomgr/socket_utils_windows.cc
|
||||
src/core/lib/iomgr/socket_windows.cc
|
||||
src/core/lib/iomgr/systemd_utils.cc
|
||||
src/core/lib/iomgr/tcp_client.cc
|
||||
src/core/lib/iomgr/tcp_client_cfstream.cc
|
||||
src/core/lib/iomgr/tcp_client_posix.cc
|
||||
src/core/lib/iomgr/tcp_client_windows.cc
|
||||
src/core/lib/iomgr/tcp_posix.cc
|
||||
src/core/lib/iomgr/tcp_server.cc
|
||||
src/core/lib/iomgr/tcp_server_posix.cc
|
||||
src/core/lib/iomgr/tcp_server_utils_posix_common.cc
|
||||
src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc
|
||||
src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc
|
||||
src/core/lib/iomgr/tcp_server_windows.cc
|
||||
src/core/lib/iomgr/tcp_windows.cc
|
||||
src/core/lib/iomgr/timer.cc
|
||||
src/core/lib/iomgr/timer_generic.cc
|
||||
src/core/lib/iomgr/timer_heap.cc
|
||||
src/core/lib/iomgr/timer_manager.cc
|
||||
src/core/lib/iomgr/unix_sockets_posix.cc
|
||||
src/core/lib/iomgr/unix_sockets_posix_noop.cc
|
||||
src/core/lib/iomgr/vsock.cc
|
||||
src/core/lib/iomgr/wakeup_fd_eventfd.cc
|
||||
src/core/lib/iomgr/wakeup_fd_nospecial.cc
|
||||
src/core/lib/iomgr/wakeup_fd_pipe.cc
|
||||
src/core/lib/iomgr/wakeup_fd_posix.cc
|
||||
src/core/lib/json/json_writer.cc
|
||||
src/core/lib/load_balancing/lb_policy.cc
|
||||
src/core/lib/load_balancing/lb_policy_registry.cc
|
||||
src/core/lib/promise/activity.cc
|
||||
src/core/lib/promise/party.cc
|
||||
src/core/lib/promise/trace.cc
|
||||
src/core/lib/resolver/endpoint_addresses.cc
|
||||
src/core/lib/resolver/resolver.cc
|
||||
src/core/lib/resolver/resolver_registry.cc
|
||||
src/core/lib/resource_quota/api.cc
|
||||
src/core/lib/resource_quota/arena.cc
|
||||
src/core/lib/resource_quota/memory_quota.cc
|
||||
src/core/lib/resource_quota/periodic_update.cc
|
||||
src/core/lib/resource_quota/resource_quota.cc
|
||||
src/core/lib/resource_quota/thread_quota.cc
|
||||
src/core/lib/resource_quota/trace.cc
|
||||
src/core/lib/security/certificate_provider/certificate_provider_registry.cc
|
||||
src/core/lib/security/credentials/alts/check_gcp_environment.cc
|
||||
src/core/lib/security/credentials/alts/check_gcp_environment_linux.cc
|
||||
src/core/lib/security/credentials/alts/check_gcp_environment_no_op.cc
|
||||
src/core/lib/security/credentials/alts/check_gcp_environment_windows.cc
|
||||
src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc
|
||||
src/core/lib/security/credentials/alts/grpc_alts_credentials_options.cc
|
||||
src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc
|
||||
src/core/lib/service_config/service_config_parser.cc
|
||||
src/core/lib/slice/b64.cc
|
||||
src/core/lib/slice/percent_encoding.cc
|
||||
src/core/lib/slice/slice.cc
|
||||
src/core/lib/slice/slice_buffer.cc
|
||||
src/core/lib/slice/slice_refcount.cc
|
||||
src/core/lib/slice/slice_string_helpers.cc
|
||||
src/core/lib/surface/api_trace.cc
|
||||
src/core/lib/surface/builtins.cc
|
||||
src/core/lib/surface/byte_buffer.cc
|
||||
src/core/lib/surface/byte_buffer_reader.cc
|
||||
src/core/lib/surface/call.cc
|
||||
src/core/lib/surface/call_details.cc
|
||||
src/core/lib/surface/call_log_batch.cc
|
||||
src/core/lib/surface/call_trace.cc
|
||||
src/core/lib/surface/channel.cc
|
||||
src/core/lib/surface/channel_init.cc
|
||||
src/core/lib/surface/channel_ping.cc
|
||||
src/core/lib/surface/channel_stack_type.cc
|
||||
src/core/lib/surface/completion_queue.cc
|
||||
src/core/lib/surface/completion_queue_factory.cc
|
||||
src/core/lib/surface/event_string.cc
|
||||
src/core/lib/surface/init_internally.cc
|
||||
src/core/lib/surface/lame_client.cc
|
||||
src/core/lib/surface/metadata_array.cc
|
||||
src/core/lib/surface/server.cc
|
||||
src/core/lib/surface/validate_metadata.cc
|
||||
src/core/lib/surface/version.cc
|
||||
src/core/lib/transport/batch_builder.cc
|
||||
src/core/lib/transport/connectivity_state.cc
|
||||
src/core/lib/transport/error_utils.cc
|
||||
src/core/lib/transport/handshaker_registry.cc
|
||||
src/core/lib/transport/metadata_batch.cc
|
||||
src/core/lib/transport/parsed_metadata.cc
|
||||
src/core/lib/transport/status_conversion.cc
|
||||
src/core/lib/transport/timeout_encoding.cc
|
||||
src/core/lib/transport/transport.cc
|
||||
src/core/lib/transport/transport_op_string.cc
|
||||
src/core/lib/uri/uri_parser.cc
|
||||
src/core/tsi/alts/handshaker/transport_security_common_api.cc
|
||||
test/core/transport/chaotic_good/frame_test.cc
|
||||
third_party/protobuf/upb/hash/common.c
|
||||
third_party/protobuf/upb/message/accessors.c
|
||||
third_party/protobuf/upb/message/array.c
|
||||
third_party/protobuf/upb/message/map.c
|
||||
third_party/protobuf/upb/message/map_sorter.c
|
||||
third_party/protobuf/upb/message/message.c
|
||||
third_party/protobuf/upb/mini_descriptor/build_enum.c
|
||||
third_party/protobuf/upb/mini_descriptor/decode.c
|
||||
third_party/protobuf/upb/mini_descriptor/internal/base92.c
|
||||
third_party/protobuf/upb/mini_descriptor/internal/encode.c
|
||||
third_party/protobuf/upb/mini_descriptor/link.c
|
||||
third_party/protobuf/upb/mini_table/extension_registry.c
|
||||
third_party/protobuf/upb/mini_table/internal/message.c
|
||||
third_party/protobuf/upb/mini_table/message.c
|
||||
third_party/protobuf/upb/wire/decode.c
|
||||
third_party/protobuf/upb/wire/decode_fast.c
|
||||
third_party/protobuf/upb/wire/encode.c
|
||||
third_party/protobuf/upb/wire/eps_copy_input_stream.c
|
||||
third_party/protobuf/upb/wire/reader.c
|
||||
)
|
||||
target_compile_features(test_core_transport_chaotic_good_frame_test PUBLIC cxx_std_14)
|
||||
target_include_directories(test_core_transport_chaotic_good_frame_test
|
||||
PRIVATE
|
||||
${CMAKE_CURRENT_SOURCE_DIR}
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/include
|
||||
${_gRPC_ADDRESS_SORTING_INCLUDE_DIR}
|
||||
${_gRPC_RE2_INCLUDE_DIR}
|
||||
${_gRPC_SSL_INCLUDE_DIR}
|
||||
${_gRPC_UPB_GENERATED_DIR}
|
||||
${_gRPC_UPB_GRPC_GENERATED_DIR}
|
||||
${_gRPC_UPB_INCLUDE_DIR}
|
||||
${_gRPC_XXHASH_INCLUDE_DIR}
|
||||
${_gRPC_ZLIB_INCLUDE_DIR}
|
||||
third_party/googletest/googletest/include
|
||||
third_party/googletest/googletest
|
||||
third_party/googletest/googlemock/include
|
||||
third_party/googletest/googlemock
|
||||
${_gRPC_PROTO_GENS_DIR}
|
||||
)
|
||||
|
||||
target_link_libraries(test_core_transport_chaotic_good_frame_test
|
||||
${_gRPC_ALLTARGETS_LIBRARIES}
|
||||
gtest
|
||||
upb
|
||||
utf8_range_lib
|
||||
${_gRPC_ZLIB_LIBRARIES}
|
||||
absl::cleanup
|
||||
absl::flat_hash_map
|
||||
absl::inlined_vector
|
||||
absl::function_ref
|
||||
absl::hash
|
||||
absl::type_traits
|
||||
absl::random_bit_gen_ref
|
||||
absl::random_distributions
|
||||
absl::statusor
|
||||
absl::span
|
||||
absl::utility
|
||||
${_gRPC_CARES_LIBRARIES}
|
||||
gpr
|
||||
)
|
||||
|
||||
|
||||
endif()
|
||||
if(gRPC_BUILD_TESTS)
|
||||
|
||||
add_executable(test_core_transport_chttp2_frame_test
|
||||
src/core/ext/transport/chttp2/transport/frame.cc
|
||||
src/core/lib/debug/trace.cc
|
||||
src/core/lib/slice/slice.cc
|
||||
src/core/lib/slice/slice_buffer.cc
|
||||
src/core/lib/slice/slice_refcount.cc
|
||||
src/core/lib/slice/slice_string_helpers.cc
|
||||
test/core/transport/chttp2/frame_test.cc
|
||||
)
|
||||
target_compile_features(test_core_transport_chttp2_frame_test PUBLIC cxx_std_14)
|
||||
target_include_directories(test_core_transport_chttp2_frame_test
|
||||
PRIVATE
|
||||
${CMAKE_CURRENT_SOURCE_DIR}
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/include
|
||||
${_gRPC_ADDRESS_SORTING_INCLUDE_DIR}
|
||||
${_gRPC_RE2_INCLUDE_DIR}
|
||||
${_gRPC_SSL_INCLUDE_DIR}
|
||||
${_gRPC_UPB_GENERATED_DIR}
|
||||
${_gRPC_UPB_GRPC_GENERATED_DIR}
|
||||
${_gRPC_UPB_INCLUDE_DIR}
|
||||
${_gRPC_XXHASH_INCLUDE_DIR}
|
||||
${_gRPC_ZLIB_INCLUDE_DIR}
|
||||
third_party/googletest/googletest/include
|
||||
third_party/googletest/googletest
|
||||
third_party/googletest/googlemock/include
|
||||
third_party/googletest/googlemock
|
||||
${_gRPC_PROTO_GENS_DIR}
|
||||
)
|
||||
|
||||
target_link_libraries(test_core_transport_chttp2_frame_test
|
||||
${_gRPC_ALLTARGETS_LIBRARIES}
|
||||
gtest
|
||||
absl::hash
|
||||
absl::statusor
|
||||
absl::span
|
||||
gpr
|
||||
)
|
||||
|
||||
|
||||
endif()
|
||||
if(gRPC_BUILD_TESTS)
|
||||
|
||||
|
|
@ -27490,6 +27112,10 @@ add_executable(xds_cluster_resource_type_test
|
|||
${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/health_check.grpc.pb.cc
|
||||
${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/health_check.pb.h
|
||||
${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/health_check.grpc.pb.h
|
||||
${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/http_protocol_options.pb.cc
|
||||
${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/http_protocol_options.grpc.pb.cc
|
||||
${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/http_protocol_options.pb.h
|
||||
${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/http_protocol_options.grpc.pb.h
|
||||
${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/outlier_detection.pb.cc
|
||||
${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/outlier_detection.grpc.pb.cc
|
||||
${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/outlier_detection.pb.h
|
||||
|
|
@ -27498,6 +27124,10 @@ add_executable(xds_cluster_resource_type_test
|
|||
${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/percent.grpc.pb.cc
|
||||
${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/percent.pb.h
|
||||
${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/percent.grpc.pb.h
|
||||
${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/protocol.pb.cc
|
||||
${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/protocol.grpc.pb.cc
|
||||
${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/protocol.pb.h
|
||||
${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/protocol.grpc.pb.h
|
||||
${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/regex.pb.cc
|
||||
${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/regex.grpc.pb.cc
|
||||
${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/regex.pb.h
|
||||
|
|
|
|||
|
|
@ -1155,6 +1155,7 @@ LIBGRPC_SRC = \
|
|||
src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/secret.upb_minitable.c \
|
||||
src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/tls.upb_minitable.c \
|
||||
src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb_minitable.c \
|
||||
src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb_minitable.c \
|
||||
src/core/ext/upb-gen/envoy/service/discovery/v3/ads.upb_minitable.c \
|
||||
src/core/ext/upb-gen/envoy/service/discovery/v3/discovery.upb_minitable.c \
|
||||
src/core/ext/upb-gen/envoy/service/load_stats/v3/lrs.upb_minitable.c \
|
||||
|
|
@ -1313,6 +1314,7 @@ LIBGRPC_SRC = \
|
|||
src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c \
|
||||
src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c \
|
||||
src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upbdefs.c \
|
||||
src/core/ext/upbdefs-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upbdefs.c \
|
||||
src/core/ext/upbdefs-gen/envoy/service/discovery/v3/ads.upbdefs.c \
|
||||
src/core/ext/upbdefs-gen/envoy/service/discovery/v3/discovery.upbdefs.c \
|
||||
src/core/ext/upbdefs-gen/envoy/service/load_stats/v3/lrs.upbdefs.c \
|
||||
|
|
@ -1453,7 +1455,7 @@ LIBGRPC_SRC = \
|
|||
src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc \
|
||||
src/core/lib/event_engine/posix_engine/internal_errqueue.cc \
|
||||
src/core/lib/event_engine/posix_engine/lockfree_event.cc \
|
||||
src/core/lib/event_engine/posix_engine/native_dns_resolver.cc \
|
||||
src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.cc \
|
||||
src/core/lib/event_engine/posix_engine/posix_endpoint.cc \
|
||||
src/core/lib/event_engine/posix_engine/posix_engine.cc \
|
||||
src/core/lib/event_engine/posix_engine/posix_engine_listener.cc \
|
||||
|
|
@ -1480,6 +1482,7 @@ LIBGRPC_SRC = \
|
|||
src/core/lib/event_engine/utils.cc \
|
||||
src/core/lib/event_engine/windows/grpc_polled_fd_windows.cc \
|
||||
src/core/lib/event_engine/windows/iocp.cc \
|
||||
src/core/lib/event_engine/windows/native_windows_dns_resolver.cc \
|
||||
src/core/lib/event_engine/windows/win_socket.cc \
|
||||
src/core/lib/event_engine/windows/windows_endpoint.cc \
|
||||
src/core/lib/event_engine/windows/windows_engine.cc \
|
||||
|
|
@ -2034,7 +2037,7 @@ LIBGRPC_UNSECURE_SRC = \
|
|||
src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc \
|
||||
src/core/lib/event_engine/posix_engine/internal_errqueue.cc \
|
||||
src/core/lib/event_engine/posix_engine/lockfree_event.cc \
|
||||
src/core/lib/event_engine/posix_engine/native_dns_resolver.cc \
|
||||
src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.cc \
|
||||
src/core/lib/event_engine/posix_engine/posix_endpoint.cc \
|
||||
src/core/lib/event_engine/posix_engine/posix_engine.cc \
|
||||
src/core/lib/event_engine/posix_engine/posix_engine_listener.cc \
|
||||
|
|
@ -2061,6 +2064,7 @@ LIBGRPC_UNSECURE_SRC = \
|
|||
src/core/lib/event_engine/utils.cc \
|
||||
src/core/lib/event_engine/windows/grpc_polled_fd_windows.cc \
|
||||
src/core/lib/event_engine/windows/iocp.cc \
|
||||
src/core/lib/event_engine/windows/native_windows_dns_resolver.cc \
|
||||
src/core/lib/event_engine/windows/win_socket.cc \
|
||||
src/core/lib/event_engine/windows/windows_endpoint.cc \
|
||||
src/core/lib/event_engine/windows/windows_engine.cc \
|
||||
|
|
@ -3469,6 +3473,7 @@ src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/common.upb_minita
|
|||
src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/secret.upb_minitable.c: $(OPENSSL_DEP)
|
||||
src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/tls.upb_minitable.c: $(OPENSSL_DEP)
|
||||
src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb_minitable.c: $(OPENSSL_DEP)
|
||||
src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb_minitable.c: $(OPENSSL_DEP)
|
||||
src/core/ext/upb-gen/envoy/service/discovery/v3/ads.upb_minitable.c: $(OPENSSL_DEP)
|
||||
src/core/ext/upb-gen/envoy/service/discovery/v3/discovery.upb_minitable.c: $(OPENSSL_DEP)
|
||||
src/core/ext/upb-gen/envoy/service/load_stats/v3/lrs.upb_minitable.c: $(OPENSSL_DEP)
|
||||
|
|
@ -3608,6 +3613,7 @@ src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/common.upbdef
|
|||
src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c: $(OPENSSL_DEP)
|
||||
src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c: $(OPENSSL_DEP)
|
||||
src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upbdefs.c: $(OPENSSL_DEP)
|
||||
src/core/ext/upbdefs-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upbdefs.c: $(OPENSSL_DEP)
|
||||
src/core/ext/upbdefs-gen/envoy/service/discovery/v3/ads.upbdefs.c: $(OPENSSL_DEP)
|
||||
src/core/ext/upbdefs-gen/envoy/service/discovery/v3/discovery.upbdefs.c: $(OPENSSL_DEP)
|
||||
src/core/ext/upbdefs-gen/envoy/service/load_stats/v3/lrs.upbdefs.c: $(OPENSSL_DEP)
|
||||
|
|
|
|||
|
|
@ -586,6 +586,9 @@ let package = Package(
|
|||
"src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.h",
|
||||
"src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb_minitable.c",
|
||||
"src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb_minitable.h",
|
||||
"src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb.h",
|
||||
"src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb_minitable.c",
|
||||
"src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb_minitable.h",
|
||||
"src/core/ext/upb-gen/envoy/service/discovery/v3/ads.upb.h",
|
||||
"src/core/ext/upb-gen/envoy/service/discovery/v3/ads.upb_minitable.c",
|
||||
"src/core/ext/upb-gen/envoy/service/discovery/v3/ads.upb_minitable.h",
|
||||
|
|
@ -983,6 +986,8 @@ let package = Package(
|
|||
"src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.h",
|
||||
"src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upbdefs.c",
|
||||
"src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upbdefs.h",
|
||||
"src/core/ext/upbdefs-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upbdefs.c",
|
||||
"src/core/ext/upbdefs-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upbdefs.h",
|
||||
"src/core/ext/upbdefs-gen/envoy/service/discovery/v3/ads.upbdefs.c",
|
||||
"src/core/ext/upbdefs-gen/envoy/service/discovery/v3/ads.upbdefs.h",
|
||||
"src/core/ext/upbdefs-gen/envoy/service/discovery/v3/discovery.upbdefs.c",
|
||||
|
|
@ -1284,8 +1289,8 @@ let package = Package(
|
|||
"src/core/lib/event_engine/posix_engine/internal_errqueue.h",
|
||||
"src/core/lib/event_engine/posix_engine/lockfree_event.cc",
|
||||
"src/core/lib/event_engine/posix_engine/lockfree_event.h",
|
||||
"src/core/lib/event_engine/posix_engine/native_dns_resolver.cc",
|
||||
"src/core/lib/event_engine/posix_engine/native_dns_resolver.h",
|
||||
"src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.cc",
|
||||
"src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.h",
|
||||
"src/core/lib/event_engine/posix_engine/posix_endpoint.cc",
|
||||
"src/core/lib/event_engine/posix_engine/posix_endpoint.h",
|
||||
"src/core/lib/event_engine/posix_engine/posix_engine.cc",
|
||||
|
|
@ -1341,6 +1346,8 @@ let package = Package(
|
|||
"src/core/lib/event_engine/windows/grpc_polled_fd_windows.h",
|
||||
"src/core/lib/event_engine/windows/iocp.cc",
|
||||
"src/core/lib/event_engine/windows/iocp.h",
|
||||
"src/core/lib/event_engine/windows/native_windows_dns_resolver.cc",
|
||||
"src/core/lib/event_engine/windows/native_windows_dns_resolver.h",
|
||||
"src/core/lib/event_engine/windows/win_socket.cc",
|
||||
"src/core/lib/event_engine/windows/win_socket.h",
|
||||
"src/core/lib/event_engine/windows/windows_endpoint.cc",
|
||||
|
|
|
|||
|
|
@ -488,6 +488,8 @@ libs:
|
|||
- src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/tls.upb_minitable.h
|
||||
- src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.h
|
||||
- src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb_minitable.h
|
||||
- src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb.h
|
||||
- src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb_minitable.h
|
||||
- src/core/ext/upb-gen/envoy/service/discovery/v3/ads.upb.h
|
||||
- src/core/ext/upb-gen/envoy/service/discovery/v3/ads.upb_minitable.h
|
||||
- src/core/ext/upb-gen/envoy/service/discovery/v3/discovery.upb.h
|
||||
|
|
@ -727,6 +729,7 @@ libs:
|
|||
- src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.h
|
||||
- src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.h
|
||||
- src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upbdefs.h
|
||||
- src/core/ext/upbdefs-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upbdefs.h
|
||||
- src/core/ext/upbdefs-gen/envoy/service/discovery/v3/ads.upbdefs.h
|
||||
- src/core/ext/upbdefs-gen/envoy/service/discovery/v3/discovery.upbdefs.h
|
||||
- src/core/ext/upbdefs-gen/envoy/service/load_stats/v3/lrs.upbdefs.h
|
||||
|
|
@ -883,7 +886,7 @@ libs:
|
|||
- src/core/lib/event_engine/posix_engine/grpc_polled_fd_posix.h
|
||||
- src/core/lib/event_engine/posix_engine/internal_errqueue.h
|
||||
- src/core/lib/event_engine/posix_engine/lockfree_event.h
|
||||
- src/core/lib/event_engine/posix_engine/native_dns_resolver.h
|
||||
- src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.h
|
||||
- src/core/lib/event_engine/posix_engine/posix_endpoint.h
|
||||
- src/core/lib/event_engine/posix_engine/posix_engine.h
|
||||
- src/core/lib/event_engine/posix_engine/posix_engine_closure.h
|
||||
|
|
@ -911,6 +914,7 @@ libs:
|
|||
- src/core/lib/event_engine/utils.h
|
||||
- src/core/lib/event_engine/windows/grpc_polled_fd_windows.h
|
||||
- src/core/lib/event_engine/windows/iocp.h
|
||||
- src/core/lib/event_engine/windows/native_windows_dns_resolver.h
|
||||
- src/core/lib/event_engine/windows/win_socket.h
|
||||
- src/core/lib/event_engine/windows/windows_endpoint.h
|
||||
- src/core/lib/event_engine/windows/windows_engine.h
|
||||
|
|
@ -1414,6 +1418,7 @@ libs:
|
|||
- src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/secret.upb_minitable.c
|
||||
- src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/tls.upb_minitable.c
|
||||
- src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb_minitable.c
|
||||
- src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb_minitable.c
|
||||
- src/core/ext/upb-gen/envoy/service/discovery/v3/ads.upb_minitable.c
|
||||
- src/core/ext/upb-gen/envoy/service/discovery/v3/discovery.upb_minitable.c
|
||||
- src/core/ext/upb-gen/envoy/service/load_stats/v3/lrs.upb_minitable.c
|
||||
|
|
@ -1572,6 +1577,7 @@ libs:
|
|||
- src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c
|
||||
- src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c
|
||||
- src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upbdefs.c
|
||||
- src/core/ext/upbdefs-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upbdefs.c
|
||||
- src/core/ext/upbdefs-gen/envoy/service/discovery/v3/ads.upbdefs.c
|
||||
- src/core/ext/upbdefs-gen/envoy/service/discovery/v3/discovery.upbdefs.c
|
||||
- src/core/ext/upbdefs-gen/envoy/service/load_stats/v3/lrs.upbdefs.c
|
||||
|
|
@ -1712,7 +1718,7 @@ libs:
|
|||
- src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc
|
||||
- src/core/lib/event_engine/posix_engine/internal_errqueue.cc
|
||||
- src/core/lib/event_engine/posix_engine/lockfree_event.cc
|
||||
- src/core/lib/event_engine/posix_engine/native_dns_resolver.cc
|
||||
- src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.cc
|
||||
- src/core/lib/event_engine/posix_engine/posix_endpoint.cc
|
||||
- src/core/lib/event_engine/posix_engine/posix_engine.cc
|
||||
- src/core/lib/event_engine/posix_engine/posix_engine_listener.cc
|
||||
|
|
@ -1739,6 +1745,7 @@ libs:
|
|||
- src/core/lib/event_engine/utils.cc
|
||||
- src/core/lib/event_engine/windows/grpc_polled_fd_windows.cc
|
||||
- src/core/lib/event_engine/windows/iocp.cc
|
||||
- src/core/lib/event_engine/windows/native_windows_dns_resolver.cc
|
||||
- src/core/lib/event_engine/windows/win_socket.cc
|
||||
- src/core/lib/event_engine/windows/windows_endpoint.cc
|
||||
- src/core/lib/event_engine/windows/windows_engine.cc
|
||||
|
|
@ -2348,7 +2355,7 @@ libs:
|
|||
- src/core/lib/event_engine/posix_engine/grpc_polled_fd_posix.h
|
||||
- src/core/lib/event_engine/posix_engine/internal_errqueue.h
|
||||
- src/core/lib/event_engine/posix_engine/lockfree_event.h
|
||||
- src/core/lib/event_engine/posix_engine/native_dns_resolver.h
|
||||
- src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.h
|
||||
- src/core/lib/event_engine/posix_engine/posix_endpoint.h
|
||||
- src/core/lib/event_engine/posix_engine/posix_engine.h
|
||||
- src/core/lib/event_engine/posix_engine/posix_engine_closure.h
|
||||
|
|
@ -2376,6 +2383,7 @@ libs:
|
|||
- src/core/lib/event_engine/utils.h
|
||||
- src/core/lib/event_engine/windows/grpc_polled_fd_windows.h
|
||||
- src/core/lib/event_engine/windows/iocp.h
|
||||
- src/core/lib/event_engine/windows/native_windows_dns_resolver.h
|
||||
- src/core/lib/event_engine/windows/win_socket.h
|
||||
- src/core/lib/event_engine/windows/windows_endpoint.h
|
||||
- src/core/lib/event_engine/windows/windows_engine.h
|
||||
|
|
@ -2800,7 +2808,7 @@ libs:
|
|||
- src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc
|
||||
- src/core/lib/event_engine/posix_engine/internal_errqueue.cc
|
||||
- src/core/lib/event_engine/posix_engine/lockfree_event.cc
|
||||
- src/core/lib/event_engine/posix_engine/native_dns_resolver.cc
|
||||
- src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.cc
|
||||
- src/core/lib/event_engine/posix_engine/posix_endpoint.cc
|
||||
- src/core/lib/event_engine/posix_engine/posix_engine.cc
|
||||
- src/core/lib/event_engine/posix_engine/posix_engine_listener.cc
|
||||
|
|
@ -2827,6 +2835,7 @@ libs:
|
|||
- src/core/lib/event_engine/utils.cc
|
||||
- src/core/lib/event_engine/windows/grpc_polled_fd_windows.cc
|
||||
- src/core/lib/event_engine/windows/iocp.cc
|
||||
- src/core/lib/event_engine/windows/native_windows_dns_resolver.cc
|
||||
- src/core/lib/event_engine/windows/win_socket.cc
|
||||
- src/core/lib/event_engine/windows/windows_endpoint.cc
|
||||
- src/core/lib/event_engine/windows/windows_engine.cc
|
||||
|
|
@ -4490,7 +4499,7 @@ libs:
|
|||
- src/core/lib/event_engine/posix_engine/grpc_polled_fd_posix.h
|
||||
- src/core/lib/event_engine/posix_engine/internal_errqueue.h
|
||||
- src/core/lib/event_engine/posix_engine/lockfree_event.h
|
||||
- src/core/lib/event_engine/posix_engine/native_dns_resolver.h
|
||||
- src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.h
|
||||
- src/core/lib/event_engine/posix_engine/posix_endpoint.h
|
||||
- src/core/lib/event_engine/posix_engine/posix_engine.h
|
||||
- src/core/lib/event_engine/posix_engine/posix_engine_closure.h
|
||||
|
|
@ -4518,6 +4527,7 @@ libs:
|
|||
- src/core/lib/event_engine/utils.h
|
||||
- src/core/lib/event_engine/windows/grpc_polled_fd_windows.h
|
||||
- src/core/lib/event_engine/windows/iocp.h
|
||||
- src/core/lib/event_engine/windows/native_windows_dns_resolver.h
|
||||
- src/core/lib/event_engine/windows/win_socket.h
|
||||
- src/core/lib/event_engine/windows/windows_endpoint.h
|
||||
- src/core/lib/event_engine/windows/windows_engine.h
|
||||
|
|
@ -4848,7 +4858,7 @@ libs:
|
|||
- src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc
|
||||
- src/core/lib/event_engine/posix_engine/internal_errqueue.cc
|
||||
- src/core/lib/event_engine/posix_engine/lockfree_event.cc
|
||||
- src/core/lib/event_engine/posix_engine/native_dns_resolver.cc
|
||||
- src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.cc
|
||||
- src/core/lib/event_engine/posix_engine/posix_endpoint.cc
|
||||
- src/core/lib/event_engine/posix_engine/posix_engine.cc
|
||||
- src/core/lib/event_engine/posix_engine/posix_engine_listener.cc
|
||||
|
|
@ -4875,6 +4885,7 @@ libs:
|
|||
- src/core/lib/event_engine/utils.cc
|
||||
- src/core/lib/event_engine/windows/grpc_polled_fd_windows.cc
|
||||
- src/core/lib/event_engine/windows/iocp.cc
|
||||
- src/core/lib/event_engine/windows/native_windows_dns_resolver.cc
|
||||
- src/core/lib/event_engine/windows/win_socket.cc
|
||||
- src/core/lib/event_engine/windows/windows_endpoint.cc
|
||||
- src/core/lib/event_engine/windows/windows_engine.cc
|
||||
|
|
@ -5843,6 +5854,24 @@ targets:
|
|||
- gtest
|
||||
- grpc_test_util
|
||||
uses_polling: false
|
||||
- name: backend_metrics_lb_policy_test
|
||||
gtest: true
|
||||
build: test
|
||||
language: c++
|
||||
headers:
|
||||
- test/cpp/interop/backend_metrics_lb_policy.h
|
||||
src:
|
||||
- src/proto/grpc/testing/empty.proto
|
||||
- src/proto/grpc/testing/messages.proto
|
||||
- src/proto/grpc/testing/test.proto
|
||||
- src/cpp/server/orca/orca_service.cc
|
||||
- test/cpp/interop/backend_metrics_lb_policy.cc
|
||||
- test/cpp/interop/backend_metrics_lb_policy_test.cc
|
||||
deps:
|
||||
- gtest
|
||||
- grpc++
|
||||
- grpc_test_util
|
||||
- grpc++_test_config
|
||||
- name: backoff_test
|
||||
gtest: true
|
||||
build: test
|
||||
|
|
@ -7641,62 +7670,6 @@ targets:
|
|||
- grpc_authorization_provider
|
||||
- grpc_unsecure
|
||||
- grpc_test_util
|
||||
- name: client_transport_error_test
|
||||
gtest: true
|
||||
build: test
|
||||
language: c++
|
||||
headers:
|
||||
- src/core/ext/transport/chaotic_good/client_transport.h
|
||||
- src/core/ext/transport/chaotic_good/frame.h
|
||||
- src/core/ext/transport/chaotic_good/frame_header.h
|
||||
- src/core/lib/promise/event_engine_wakeup_scheduler.h
|
||||
- src/core/lib/promise/inter_activity_pipe.h
|
||||
- src/core/lib/promise/join.h
|
||||
- src/core/lib/promise/mpsc.h
|
||||
- src/core/lib/promise/wait_set.h
|
||||
- src/core/lib/transport/promise_endpoint.h
|
||||
- test/core/event_engine/fuzzing_event_engine/fuzzing_event_engine.h
|
||||
src:
|
||||
- test/core/event_engine/fuzzing_event_engine/fuzzing_event_engine.proto
|
||||
- src/core/ext/transport/chaotic_good/client_transport.cc
|
||||
- src/core/ext/transport/chaotic_good/frame.cc
|
||||
- src/core/ext/transport/chaotic_good/frame_header.cc
|
||||
- src/core/lib/transport/promise_endpoint.cc
|
||||
- test/core/event_engine/fuzzing_event_engine/fuzzing_event_engine.cc
|
||||
- test/core/transport/chaotic_good/client_transport_error_test.cc
|
||||
deps:
|
||||
- gtest
|
||||
- protobuf
|
||||
- grpc_test_util
|
||||
uses_polling: false
|
||||
- name: client_transport_test
|
||||
gtest: true
|
||||
build: test
|
||||
language: c++
|
||||
headers:
|
||||
- src/core/ext/transport/chaotic_good/client_transport.h
|
||||
- src/core/ext/transport/chaotic_good/frame.h
|
||||
- src/core/ext/transport/chaotic_good/frame_header.h
|
||||
- src/core/lib/promise/event_engine_wakeup_scheduler.h
|
||||
- src/core/lib/promise/inter_activity_pipe.h
|
||||
- src/core/lib/promise/join.h
|
||||
- src/core/lib/promise/mpsc.h
|
||||
- src/core/lib/promise/wait_set.h
|
||||
- src/core/lib/transport/promise_endpoint.h
|
||||
- test/core/event_engine/fuzzing_event_engine/fuzzing_event_engine.h
|
||||
src:
|
||||
- test/core/event_engine/fuzzing_event_engine/fuzzing_event_engine.proto
|
||||
- src/core/ext/transport/chaotic_good/client_transport.cc
|
||||
- src/core/ext/transport/chaotic_good/frame.cc
|
||||
- src/core/ext/transport/chaotic_good/frame_header.cc
|
||||
- src/core/lib/transport/promise_endpoint.cc
|
||||
- test/core/event_engine/fuzzing_event_engine/fuzzing_event_engine.cc
|
||||
- test/core/transport/chaotic_good/client_transport_test.cc
|
||||
deps:
|
||||
- gtest
|
||||
- protobuf
|
||||
- grpc_test_util
|
||||
uses_polling: false
|
||||
- name: cmdline_test
|
||||
gtest: true
|
||||
build: test
|
||||
|
|
@ -9642,20 +9615,34 @@ targets:
|
|||
deps:
|
||||
- gtest
|
||||
- grpc_test_util
|
||||
- name: frame_header_test
|
||||
- name: frame_test
|
||||
gtest: true
|
||||
build: test
|
||||
language: c++
|
||||
headers:
|
||||
- src/core/ext/transport/chaotic_good/frame_header.h
|
||||
- src/core/lib/gprpp/bitset.h
|
||||
- src/core/ext/transport/chttp2/transport/frame.h
|
||||
- src/core/lib/debug/trace.h
|
||||
- src/core/lib/slice/slice.h
|
||||
- src/core/lib/slice/slice_buffer.h
|
||||
- src/core/lib/slice/slice_internal.h
|
||||
- src/core/lib/slice/slice_refcount.h
|
||||
- src/core/lib/slice/slice_string_helpers.h
|
||||
- src/core/lib/transport/http2_errors.h
|
||||
src:
|
||||
- src/core/ext/transport/chaotic_good/frame_header.cc
|
||||
- test/core/transport/chaotic_good/frame_header_test.cc
|
||||
- src/core/ext/transport/chttp2/transport/frame.cc
|
||||
- src/core/lib/debug/trace.cc
|
||||
- src/core/lib/slice/slice.cc
|
||||
- src/core/lib/slice/slice_buffer.cc
|
||||
- src/core/lib/slice/slice_refcount.cc
|
||||
- src/core/lib/slice/slice_string_helpers.cc
|
||||
- test/core/transport/chttp2/frame_test.cc
|
||||
deps:
|
||||
- gtest
|
||||
- absl/hash:hash
|
||||
- absl/status:statusor
|
||||
- absl/types:span
|
||||
- gpr
|
||||
uses_polling: false
|
||||
- name: fuzzing_event_engine_test
|
||||
gtest: true
|
||||
build: test
|
||||
|
|
@ -16770,680 +16757,6 @@ targets:
|
|||
- gtest
|
||||
- grpc
|
||||
uses_polling: false
|
||||
- name: test_core_transport_chaotic_good_frame_test
|
||||
gtest: true
|
||||
build: test
|
||||
language: c++
|
||||
headers:
|
||||
- src/core/ext/filters/client_channel/lb_policy/backend_metric_data.h
|
||||
- src/core/ext/transport/chaotic_good/frame.h
|
||||
- src/core/ext/transport/chaotic_good/frame_header.h
|
||||
- src/core/ext/transport/chttp2/transport/bin_encoder.h
|
||||
- src/core/ext/transport/chttp2/transport/decode_huff.h
|
||||
- src/core/ext/transport/chttp2/transport/hpack_constants.h
|
||||
- src/core/ext/transport/chttp2/transport/hpack_encoder.h
|
||||
- src/core/ext/transport/chttp2/transport/hpack_encoder_table.h
|
||||
- src/core/ext/transport/chttp2/transport/hpack_parse_result.h
|
||||
- src/core/ext/transport/chttp2/transport/hpack_parser.h
|
||||
- src/core/ext/transport/chttp2/transport/hpack_parser_table.h
|
||||
- src/core/ext/transport/chttp2/transport/http_trace.h
|
||||
- src/core/ext/transport/chttp2/transport/huffsyms.h
|
||||
- src/core/ext/transport/chttp2/transport/legacy_frame.h
|
||||
- src/core/ext/transport/chttp2/transport/varint.h
|
||||
- src/core/ext/upb-gen/google/protobuf/any.upb.h
|
||||
- src/core/ext/upb-gen/google/protobuf/any.upb_minitable.h
|
||||
- src/core/ext/upb-gen/google/protobuf/descriptor.upb.h
|
||||
- src/core/ext/upb-gen/google/rpc/status.upb.h
|
||||
- src/core/ext/upb-gen/google/rpc/status.upb_minitable.h
|
||||
- src/core/ext/upb-gen/src/proto/grpc/gcp/altscontext.upb.h
|
||||
- src/core/ext/upb-gen/src/proto/grpc/gcp/altscontext.upb_minitable.h
|
||||
- src/core/ext/upb-gen/src/proto/grpc/gcp/handshaker.upb.h
|
||||
- src/core/ext/upb-gen/src/proto/grpc/gcp/handshaker.upb_minitable.h
|
||||
- src/core/ext/upb-gen/src/proto/grpc/gcp/transport_security_common.upb.h
|
||||
- src/core/ext/upb-gen/src/proto/grpc/gcp/transport_security_common.upb_minitable.h
|
||||
- src/core/lib/address_utils/parse_address.h
|
||||
- src/core/lib/address_utils/sockaddr_utils.h
|
||||
- src/core/lib/avl/avl.h
|
||||
- src/core/lib/backoff/backoff.h
|
||||
- src/core/lib/backoff/random_early_detection.h
|
||||
- src/core/lib/channel/call_finalization.h
|
||||
- src/core/lib/channel/call_tracer.h
|
||||
- src/core/lib/channel/channel_args.h
|
||||
- src/core/lib/channel/channel_args_preconditioning.h
|
||||
- src/core/lib/channel/channel_fwd.h
|
||||
- src/core/lib/channel/channel_stack.h
|
||||
- src/core/lib/channel/channel_stack_builder.h
|
||||
- src/core/lib/channel/channel_stack_builder_impl.h
|
||||
- src/core/lib/channel/channel_stack_trace.h
|
||||
- src/core/lib/channel/channel_trace.h
|
||||
- src/core/lib/channel/channelz.h
|
||||
- src/core/lib/channel/channelz_registry.h
|
||||
- src/core/lib/channel/connected_channel.h
|
||||
- src/core/lib/channel/context.h
|
||||
- src/core/lib/channel/promise_based_filter.h
|
||||
- src/core/lib/channel/status_util.h
|
||||
- src/core/lib/channel/tcp_tracer.h
|
||||
- src/core/lib/compression/compression_internal.h
|
||||
- src/core/lib/compression/message_compress.h
|
||||
- src/core/lib/config/core_configuration.h
|
||||
- src/core/lib/debug/event_log.h
|
||||
- src/core/lib/debug/histogram_view.h
|
||||
- src/core/lib/debug/stats.h
|
||||
- src/core/lib/debug/stats_data.h
|
||||
- src/core/lib/debug/trace.h
|
||||
- src/core/lib/event_engine/ares_resolver.h
|
||||
- src/core/lib/event_engine/cf_engine/cf_engine.h
|
||||
- src/core/lib/event_engine/cf_engine/cfstream_endpoint.h
|
||||
- src/core/lib/event_engine/cf_engine/cftype_unique_ref.h
|
||||
- src/core/lib/event_engine/cf_engine/dns_service_resolver.h
|
||||
- src/core/lib/event_engine/channel_args_endpoint_config.h
|
||||
- src/core/lib/event_engine/common_closures.h
|
||||
- src/core/lib/event_engine/default_event_engine.h
|
||||
- src/core/lib/event_engine/default_event_engine_factory.h
|
||||
- src/core/lib/event_engine/forkable.h
|
||||
- src/core/lib/event_engine/grpc_polled_fd.h
|
||||
- src/core/lib/event_engine/handle_containers.h
|
||||
- src/core/lib/event_engine/memory_allocator_factory.h
|
||||
- src/core/lib/event_engine/nameser.h
|
||||
- src/core/lib/event_engine/poller.h
|
||||
- src/core/lib/event_engine/posix.h
|
||||
- src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h
|
||||
- src/core/lib/event_engine/posix_engine/ev_poll_posix.h
|
||||
- src/core/lib/event_engine/posix_engine/event_poller.h
|
||||
- src/core/lib/event_engine/posix_engine/event_poller_posix_default.h
|
||||
- src/core/lib/event_engine/posix_engine/grpc_polled_fd_posix.h
|
||||
- src/core/lib/event_engine/posix_engine/internal_errqueue.h
|
||||
- src/core/lib/event_engine/posix_engine/lockfree_event.h
|
||||
- src/core/lib/event_engine/posix_engine/native_dns_resolver.h
|
||||
- src/core/lib/event_engine/posix_engine/posix_endpoint.h
|
||||
- src/core/lib/event_engine/posix_engine/posix_engine.h
|
||||
- src/core/lib/event_engine/posix_engine/posix_engine_closure.h
|
||||
- src/core/lib/event_engine/posix_engine/posix_engine_listener.h
|
||||
- src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.h
|
||||
- src/core/lib/event_engine/posix_engine/tcp_socket_utils.h
|
||||
- src/core/lib/event_engine/posix_engine/timer.h
|
||||
- src/core/lib/event_engine/posix_engine/timer_heap.h
|
||||
- src/core/lib/event_engine/posix_engine/timer_manager.h
|
||||
- src/core/lib/event_engine/posix_engine/traced_buffer_list.h
|
||||
- src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.h
|
||||
- src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.h
|
||||
- src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h
|
||||
- src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h
|
||||
- src/core/lib/event_engine/ref_counted_dns_resolver_interface.h
|
||||
- src/core/lib/event_engine/resolved_address_internal.h
|
||||
- src/core/lib/event_engine/shim.h
|
||||
- src/core/lib/event_engine/tcp_socket_utils.h
|
||||
- src/core/lib/event_engine/thread_pool/thread_count.h
|
||||
- src/core/lib/event_engine/thread_pool/thread_pool.h
|
||||
- src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.h
|
||||
- src/core/lib/event_engine/thready_event_engine/thready_event_engine.h
|
||||
- src/core/lib/event_engine/time_util.h
|
||||
- src/core/lib/event_engine/trace.h
|
||||
- src/core/lib/event_engine/utils.h
|
||||
- src/core/lib/event_engine/windows/grpc_polled_fd_windows.h
|
||||
- src/core/lib/event_engine/windows/iocp.h
|
||||
- src/core/lib/event_engine/windows/win_socket.h
|
||||
- src/core/lib/event_engine/windows/windows_endpoint.h
|
||||
- src/core/lib/event_engine/windows/windows_engine.h
|
||||
- src/core/lib/event_engine/windows/windows_listener.h
|
||||
- src/core/lib/event_engine/work_queue/basic_work_queue.h
|
||||
- src/core/lib/event_engine/work_queue/work_queue.h
|
||||
- src/core/lib/experiments/config.h
|
||||
- src/core/lib/experiments/experiments.h
|
||||
- src/core/lib/gpr/spinlock.h
|
||||
- src/core/lib/gprpp/atomic_utils.h
|
||||
- src/core/lib/gprpp/bitset.h
|
||||
- src/core/lib/gprpp/chunked_vector.h
|
||||
- src/core/lib/gprpp/cpp_impl_of.h
|
||||
- src/core/lib/gprpp/dual_ref_counted.h
|
||||
- src/core/lib/gprpp/if_list.h
|
||||
- src/core/lib/gprpp/load_file.h
|
||||
- src/core/lib/gprpp/manual_constructor.h
|
||||
- src/core/lib/gprpp/match.h
|
||||
- src/core/lib/gprpp/notification.h
|
||||
- src/core/lib/gprpp/orphanable.h
|
||||
- src/core/lib/gprpp/overload.h
|
||||
- src/core/lib/gprpp/packed_table.h
|
||||
- src/core/lib/gprpp/per_cpu.h
|
||||
- src/core/lib/gprpp/ref_counted.h
|
||||
- src/core/lib/gprpp/ref_counted_ptr.h
|
||||
- src/core/lib/gprpp/ref_counted_string.h
|
||||
- src/core/lib/gprpp/sorted_pack.h
|
||||
- src/core/lib/gprpp/status_helper.h
|
||||
- src/core/lib/gprpp/table.h
|
||||
- src/core/lib/gprpp/time.h
|
||||
- src/core/lib/gprpp/time_averaged_stats.h
|
||||
- src/core/lib/gprpp/type_list.h
|
||||
- src/core/lib/gprpp/unique_type_name.h
|
||||
- src/core/lib/gprpp/validation_errors.h
|
||||
- src/core/lib/gprpp/work_serializer.h
|
||||
- src/core/lib/handshaker/proxy_mapper.h
|
||||
- src/core/lib/handshaker/proxy_mapper_registry.h
|
||||
- src/core/lib/iomgr/block_annotate.h
|
||||
- src/core/lib/iomgr/buffer_list.h
|
||||
- src/core/lib/iomgr/call_combiner.h
|
||||
- src/core/lib/iomgr/cfstream_handle.h
|
||||
- src/core/lib/iomgr/closure.h
|
||||
- src/core/lib/iomgr/combiner.h
|
||||
- src/core/lib/iomgr/dynamic_annotations.h
|
||||
- src/core/lib/iomgr/endpoint.h
|
||||
- src/core/lib/iomgr/endpoint_cfstream.h
|
||||
- src/core/lib/iomgr/endpoint_pair.h
|
||||
- src/core/lib/iomgr/error.h
|
||||
- src/core/lib/iomgr/error_cfstream.h
|
||||
- src/core/lib/iomgr/ev_apple.h
|
||||
- src/core/lib/iomgr/ev_epoll1_linux.h
|
||||
- src/core/lib/iomgr/ev_poll_posix.h
|
||||
- src/core/lib/iomgr/ev_posix.h
|
||||
- src/core/lib/iomgr/event_engine_shims/closure.h
|
||||
- src/core/lib/iomgr/event_engine_shims/endpoint.h
|
||||
- src/core/lib/iomgr/event_engine_shims/tcp_client.h
|
||||
- src/core/lib/iomgr/exec_ctx.h
|
||||
- src/core/lib/iomgr/executor.h
|
||||
- src/core/lib/iomgr/gethostname.h
|
||||
- src/core/lib/iomgr/grpc_if_nametoindex.h
|
||||
- src/core/lib/iomgr/internal_errqueue.h
|
||||
- src/core/lib/iomgr/iocp_windows.h
|
||||
- src/core/lib/iomgr/iomgr.h
|
||||
- src/core/lib/iomgr/iomgr_fwd.h
|
||||
- src/core/lib/iomgr/iomgr_internal.h
|
||||
- src/core/lib/iomgr/load_file.h
|
||||
- src/core/lib/iomgr/lockfree_event.h
|
||||
- src/core/lib/iomgr/nameser.h
|
||||
- src/core/lib/iomgr/polling_entity.h
|
||||
- src/core/lib/iomgr/pollset.h
|
||||
- src/core/lib/iomgr/pollset_set.h
|
||||
- src/core/lib/iomgr/pollset_set_windows.h
|
||||
- src/core/lib/iomgr/pollset_windows.h
|
||||
- src/core/lib/iomgr/port.h
|
||||
- src/core/lib/iomgr/python_util.h
|
||||
- src/core/lib/iomgr/resolve_address.h
|
||||
- src/core/lib/iomgr/resolve_address_impl.h
|
||||
- src/core/lib/iomgr/resolve_address_posix.h
|
||||
- src/core/lib/iomgr/resolve_address_windows.h
|
||||
- src/core/lib/iomgr/resolved_address.h
|
||||
- src/core/lib/iomgr/sockaddr.h
|
||||
- src/core/lib/iomgr/sockaddr_posix.h
|
||||
- src/core/lib/iomgr/sockaddr_windows.h
|
||||
- src/core/lib/iomgr/socket_factory_posix.h
|
||||
- src/core/lib/iomgr/socket_mutator.h
|
||||
- src/core/lib/iomgr/socket_utils.h
|
||||
- src/core/lib/iomgr/socket_utils_posix.h
|
||||
- src/core/lib/iomgr/socket_windows.h
|
||||
- src/core/lib/iomgr/systemd_utils.h
|
||||
- src/core/lib/iomgr/tcp_client.h
|
||||
- src/core/lib/iomgr/tcp_client_posix.h
|
||||
- src/core/lib/iomgr/tcp_posix.h
|
||||
- src/core/lib/iomgr/tcp_server.h
|
||||
- src/core/lib/iomgr/tcp_server_utils_posix.h
|
||||
- src/core/lib/iomgr/tcp_windows.h
|
||||
- src/core/lib/iomgr/timer.h
|
||||
- src/core/lib/iomgr/timer_generic.h
|
||||
- src/core/lib/iomgr/timer_heap.h
|
||||
- src/core/lib/iomgr/timer_manager.h
|
||||
- src/core/lib/iomgr/unix_sockets_posix.h
|
||||
- src/core/lib/iomgr/vsock.h
|
||||
- src/core/lib/iomgr/wakeup_fd_pipe.h
|
||||
- src/core/lib/iomgr/wakeup_fd_posix.h
|
||||
- src/core/lib/json/json.h
|
||||
- src/core/lib/json/json_args.h
|
||||
- src/core/lib/json/json_writer.h
|
||||
- src/core/lib/load_balancing/lb_policy.h
|
||||
- src/core/lib/load_balancing/lb_policy_factory.h
|
||||
- src/core/lib/load_balancing/lb_policy_registry.h
|
||||
- src/core/lib/load_balancing/subchannel_interface.h
|
||||
- src/core/lib/promise/activity.h
|
||||
- src/core/lib/promise/all_ok.h
|
||||
- src/core/lib/promise/arena_promise.h
|
||||
- src/core/lib/promise/cancel_callback.h
|
||||
- src/core/lib/promise/context.h
|
||||
- src/core/lib/promise/detail/basic_seq.h
|
||||
- src/core/lib/promise/detail/join_state.h
|
||||
- src/core/lib/promise/detail/promise_factory.h
|
||||
- src/core/lib/promise/detail/promise_like.h
|
||||
- src/core/lib/promise/detail/seq_state.h
|
||||
- src/core/lib/promise/detail/status.h
|
||||
- src/core/lib/promise/exec_ctx_wakeup_scheduler.h
|
||||
- src/core/lib/promise/for_each.h
|
||||
- src/core/lib/promise/if.h
|
||||
- src/core/lib/promise/interceptor_list.h
|
||||
- src/core/lib/promise/latch.h
|
||||
- src/core/lib/promise/loop.h
|
||||
- src/core/lib/promise/map.h
|
||||
- src/core/lib/promise/party.h
|
||||
- src/core/lib/promise/pipe.h
|
||||
- src/core/lib/promise/poll.h
|
||||
- src/core/lib/promise/promise.h
|
||||
- src/core/lib/promise/race.h
|
||||
- src/core/lib/promise/seq.h
|
||||
- src/core/lib/promise/status_flag.h
|
||||
- src/core/lib/promise/trace.h
|
||||
- src/core/lib/promise/try_join.h
|
||||
- src/core/lib/promise/try_seq.h
|
||||
- src/core/lib/resolver/endpoint_addresses.h
|
||||
- src/core/lib/resolver/resolver.h
|
||||
- src/core/lib/resolver/resolver_factory.h
|
||||
- src/core/lib/resolver/resolver_registry.h
|
||||
- src/core/lib/resolver/server_address.h
|
||||
- src/core/lib/resource_quota/api.h
|
||||
- src/core/lib/resource_quota/arena.h
|
||||
- src/core/lib/resource_quota/memory_quota.h
|
||||
- src/core/lib/resource_quota/periodic_update.h
|
||||
- src/core/lib/resource_quota/resource_quota.h
|
||||
- src/core/lib/resource_quota/thread_quota.h
|
||||
- src/core/lib/resource_quota/trace.h
|
||||
- src/core/lib/security/certificate_provider/certificate_provider_factory.h
|
||||
- src/core/lib/security/certificate_provider/certificate_provider_registry.h
|
||||
- src/core/lib/security/credentials/alts/check_gcp_environment.h
|
||||
- src/core/lib/security/credentials/alts/grpc_alts_credentials_options.h
|
||||
- src/core/lib/security/credentials/channel_creds_registry.h
|
||||
- src/core/lib/service_config/service_config.h
|
||||
- src/core/lib/service_config/service_config_call_data.h
|
||||
- src/core/lib/service_config/service_config_parser.h
|
||||
- src/core/lib/slice/b64.h
|
||||
- src/core/lib/slice/percent_encoding.h
|
||||
- src/core/lib/slice/slice.h
|
||||
- src/core/lib/slice/slice_buffer.h
|
||||
- src/core/lib/slice/slice_internal.h
|
||||
- src/core/lib/slice/slice_refcount.h
|
||||
- src/core/lib/slice/slice_string_helpers.h
|
||||
- src/core/lib/surface/api_trace.h
|
||||
- src/core/lib/surface/builtins.h
|
||||
- src/core/lib/surface/call.h
|
||||
- src/core/lib/surface/call_test_only.h
|
||||
- src/core/lib/surface/call_trace.h
|
||||
- src/core/lib/surface/channel.h
|
||||
- src/core/lib/surface/channel_init.h
|
||||
- src/core/lib/surface/channel_stack_type.h
|
||||
- src/core/lib/surface/completion_queue.h
|
||||
- src/core/lib/surface/completion_queue_factory.h
|
||||
- src/core/lib/surface/event_string.h
|
||||
- src/core/lib/surface/init.h
|
||||
- src/core/lib/surface/init_internally.h
|
||||
- src/core/lib/surface/lame_client.h
|
||||
- src/core/lib/surface/server.h
|
||||
- src/core/lib/surface/validate_metadata.h
|
||||
- src/core/lib/surface/wait_for_cq_end_op.h
|
||||
- src/core/lib/transport/batch_builder.h
|
||||
- src/core/lib/transport/connectivity_state.h
|
||||
- src/core/lib/transport/custom_metadata.h
|
||||
- src/core/lib/transport/error_utils.h
|
||||
- src/core/lib/transport/handshaker_factory.h
|
||||
- src/core/lib/transport/handshaker_registry.h
|
||||
- src/core/lib/transport/http2_errors.h
|
||||
- src/core/lib/transport/metadata_batch.h
|
||||
- src/core/lib/transport/metadata_compression_traits.h
|
||||
- src/core/lib/transport/parsed_metadata.h
|
||||
- src/core/lib/transport/simple_slice_based_metadata.h
|
||||
- src/core/lib/transport/status_conversion.h
|
||||
- src/core/lib/transport/timeout_encoding.h
|
||||
- src/core/lib/transport/transport.h
|
||||
- src/core/lib/transport/transport_fwd.h
|
||||
- src/core/lib/uri/uri_parser.h
|
||||
- src/core/tsi/alts/handshaker/transport_security_common_api.h
|
||||
- third_party/protobuf/upb/base/internal/log2.h
|
||||
- third_party/protobuf/upb/generated_code_support.h
|
||||
- third_party/protobuf/upb/hash/common.h
|
||||
- third_party/protobuf/upb/hash/int_table.h
|
||||
- third_party/protobuf/upb/hash/str_table.h
|
||||
- third_party/protobuf/upb/message/accessors.h
|
||||
- third_party/protobuf/upb/message/array.h
|
||||
- third_party/protobuf/upb/message/internal/accessors.h
|
||||
- third_party/protobuf/upb/message/internal/array.h
|
||||
- third_party/protobuf/upb/message/internal/extension.h
|
||||
- third_party/protobuf/upb/message/internal/map.h
|
||||
- third_party/protobuf/upb/message/internal/map_entry.h
|
||||
- third_party/protobuf/upb/message/internal/map_sorter.h
|
||||
- third_party/protobuf/upb/message/internal/message.h
|
||||
- third_party/protobuf/upb/message/internal/types.h
|
||||
- third_party/protobuf/upb/message/map.h
|
||||
- third_party/protobuf/upb/message/map_gencode_util.h
|
||||
- third_party/protobuf/upb/message/message.h
|
||||
- third_party/protobuf/upb/message/tagged_ptr.h
|
||||
- third_party/protobuf/upb/message/types.h
|
||||
- third_party/protobuf/upb/message/value.h
|
||||
- third_party/protobuf/upb/mini_descriptor/build_enum.h
|
||||
- third_party/protobuf/upb/mini_descriptor/decode.h
|
||||
- third_party/protobuf/upb/mini_descriptor/internal/base92.h
|
||||
- third_party/protobuf/upb/mini_descriptor/internal/decoder.h
|
||||
- third_party/protobuf/upb/mini_descriptor/internal/encode.h
|
||||
- third_party/protobuf/upb/mini_descriptor/internal/encode.hpp
|
||||
- third_party/protobuf/upb/mini_descriptor/internal/modifiers.h
|
||||
- third_party/protobuf/upb/mini_descriptor/internal/wire_constants.h
|
||||
- third_party/protobuf/upb/mini_descriptor/link.h
|
||||
- third_party/protobuf/upb/mini_table/enum.h
|
||||
- third_party/protobuf/upb/mini_table/extension.h
|
||||
- third_party/protobuf/upb/mini_table/extension_registry.h
|
||||
- third_party/protobuf/upb/mini_table/field.h
|
||||
- third_party/protobuf/upb/mini_table/file.h
|
||||
- third_party/protobuf/upb/mini_table/internal/enum.h
|
||||
- third_party/protobuf/upb/mini_table/internal/extension.h
|
||||
- third_party/protobuf/upb/mini_table/internal/field.h
|
||||
- third_party/protobuf/upb/mini_table/internal/file.h
|
||||
- third_party/protobuf/upb/mini_table/internal/message.h
|
||||
- third_party/protobuf/upb/mini_table/internal/sub.h
|
||||
- third_party/protobuf/upb/mini_table/message.h
|
||||
- third_party/protobuf/upb/mini_table/sub.h
|
||||
- third_party/protobuf/upb/wire/decode.h
|
||||
- third_party/protobuf/upb/wire/decode_fast.h
|
||||
- third_party/protobuf/upb/wire/encode.h
|
||||
- third_party/protobuf/upb/wire/eps_copy_input_stream.h
|
||||
- third_party/protobuf/upb/wire/internal/constants.h
|
||||
- third_party/protobuf/upb/wire/internal/decode.h
|
||||
- third_party/protobuf/upb/wire/internal/swap.h
|
||||
- third_party/protobuf/upb/wire/reader.h
|
||||
- third_party/protobuf/upb/wire/types.h
|
||||
src:
|
||||
- src/core/ext/transport/chaotic_good/frame.cc
|
||||
- src/core/ext/transport/chaotic_good/frame_header.cc
|
||||
- src/core/ext/transport/chttp2/transport/bin_encoder.cc
|
||||
- src/core/ext/transport/chttp2/transport/decode_huff.cc
|
||||
- src/core/ext/transport/chttp2/transport/hpack_encoder.cc
|
||||
- src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc
|
||||
- src/core/ext/transport/chttp2/transport/hpack_parse_result.cc
|
||||
- src/core/ext/transport/chttp2/transport/hpack_parser.cc
|
||||
- src/core/ext/transport/chttp2/transport/hpack_parser_table.cc
|
||||
- src/core/ext/transport/chttp2/transport/http_trace.cc
|
||||
- src/core/ext/transport/chttp2/transport/huffsyms.cc
|
||||
- src/core/ext/transport/chttp2/transport/varint.cc
|
||||
- src/core/ext/upb-gen/google/protobuf/any.upb_minitable.c
|
||||
- src/core/ext/upb-gen/google/protobuf/descriptor.upb_minitable.c
|
||||
- src/core/ext/upb-gen/google/rpc/status.upb_minitable.c
|
||||
- src/core/ext/upb-gen/src/proto/grpc/gcp/altscontext.upb_minitable.c
|
||||
- src/core/ext/upb-gen/src/proto/grpc/gcp/handshaker.upb_minitable.c
|
||||
- src/core/ext/upb-gen/src/proto/grpc/gcp/transport_security_common.upb_minitable.c
|
||||
- src/core/lib/address_utils/parse_address.cc
|
||||
- src/core/lib/address_utils/sockaddr_utils.cc
|
||||
- src/core/lib/backoff/backoff.cc
|
||||
- src/core/lib/backoff/random_early_detection.cc
|
||||
- src/core/lib/channel/call_tracer.cc
|
||||
- src/core/lib/channel/channel_args.cc
|
||||
- src/core/lib/channel/channel_args_preconditioning.cc
|
||||
- src/core/lib/channel/channel_stack.cc
|
||||
- src/core/lib/channel/channel_stack_builder.cc
|
||||
- src/core/lib/channel/channel_stack_builder_impl.cc
|
||||
- src/core/lib/channel/channel_stack_trace.cc
|
||||
- src/core/lib/channel/channel_trace.cc
|
||||
- src/core/lib/channel/channelz.cc
|
||||
- src/core/lib/channel/channelz_registry.cc
|
||||
- src/core/lib/channel/connected_channel.cc
|
||||
- src/core/lib/channel/promise_based_filter.cc
|
||||
- src/core/lib/channel/server_call_tracer_filter.cc
|
||||
- src/core/lib/channel/status_util.cc
|
||||
- src/core/lib/compression/compression.cc
|
||||
- src/core/lib/compression/compression_internal.cc
|
||||
- src/core/lib/compression/message_compress.cc
|
||||
- src/core/lib/config/core_configuration.cc
|
||||
- src/core/lib/debug/event_log.cc
|
||||
- src/core/lib/debug/histogram_view.cc
|
||||
- src/core/lib/debug/stats.cc
|
||||
- src/core/lib/debug/stats_data.cc
|
||||
- src/core/lib/debug/trace.cc
|
||||
- src/core/lib/event_engine/ares_resolver.cc
|
||||
- src/core/lib/event_engine/cf_engine/cf_engine.cc
|
||||
- src/core/lib/event_engine/cf_engine/cfstream_endpoint.cc
|
||||
- src/core/lib/event_engine/cf_engine/dns_service_resolver.cc
|
||||
- src/core/lib/event_engine/channel_args_endpoint_config.cc
|
||||
- src/core/lib/event_engine/default_event_engine.cc
|
||||
- src/core/lib/event_engine/default_event_engine_factory.cc
|
||||
- src/core/lib/event_engine/event_engine.cc
|
||||
- src/core/lib/event_engine/forkable.cc
|
||||
- src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc
|
||||
- src/core/lib/event_engine/posix_engine/ev_poll_posix.cc
|
||||
- src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc
|
||||
- src/core/lib/event_engine/posix_engine/internal_errqueue.cc
|
||||
- src/core/lib/event_engine/posix_engine/lockfree_event.cc
|
||||
- src/core/lib/event_engine/posix_engine/native_dns_resolver.cc
|
||||
- src/core/lib/event_engine/posix_engine/posix_endpoint.cc
|
||||
- src/core/lib/event_engine/posix_engine/posix_engine.cc
|
||||
- src/core/lib/event_engine/posix_engine/posix_engine_listener.cc
|
||||
- src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc
|
||||
- src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc
|
||||
- src/core/lib/event_engine/posix_engine/timer.cc
|
||||
- src/core/lib/event_engine/posix_engine/timer_heap.cc
|
||||
- src/core/lib/event_engine/posix_engine/timer_manager.cc
|
||||
- src/core/lib/event_engine/posix_engine/traced_buffer_list.cc
|
||||
- src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.cc
|
||||
- src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.cc
|
||||
- src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.cc
|
||||
- src/core/lib/event_engine/resolved_address.cc
|
||||
- src/core/lib/event_engine/shim.cc
|
||||
- src/core/lib/event_engine/slice.cc
|
||||
- src/core/lib/event_engine/slice_buffer.cc
|
||||
- src/core/lib/event_engine/tcp_socket_utils.cc
|
||||
- src/core/lib/event_engine/thread_pool/thread_count.cc
|
||||
- src/core/lib/event_engine/thread_pool/thread_pool_factory.cc
|
||||
- src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc
|
||||
- src/core/lib/event_engine/thready_event_engine/thready_event_engine.cc
|
||||
- src/core/lib/event_engine/time_util.cc
|
||||
- src/core/lib/event_engine/trace.cc
|
||||
- src/core/lib/event_engine/utils.cc
|
||||
- src/core/lib/event_engine/windows/grpc_polled_fd_windows.cc
|
||||
- src/core/lib/event_engine/windows/iocp.cc
|
||||
- src/core/lib/event_engine/windows/win_socket.cc
|
||||
- src/core/lib/event_engine/windows/windows_endpoint.cc
|
||||
- src/core/lib/event_engine/windows/windows_engine.cc
|
||||
- src/core/lib/event_engine/windows/windows_listener.cc
|
||||
- src/core/lib/event_engine/work_queue/basic_work_queue.cc
|
||||
- src/core/lib/experiments/config.cc
|
||||
- src/core/lib/experiments/experiments.cc
|
||||
- src/core/lib/gprpp/load_file.cc
|
||||
- src/core/lib/gprpp/per_cpu.cc
|
||||
- src/core/lib/gprpp/ref_counted_string.cc
|
||||
- src/core/lib/gprpp/status_helper.cc
|
||||
- src/core/lib/gprpp/time.cc
|
||||
- src/core/lib/gprpp/time_averaged_stats.cc
|
||||
- src/core/lib/gprpp/validation_errors.cc
|
||||
- src/core/lib/gprpp/work_serializer.cc
|
||||
- src/core/lib/handshaker/proxy_mapper_registry.cc
|
||||
- src/core/lib/iomgr/buffer_list.cc
|
||||
- src/core/lib/iomgr/call_combiner.cc
|
||||
- src/core/lib/iomgr/cfstream_handle.cc
|
||||
- src/core/lib/iomgr/closure.cc
|
||||
- src/core/lib/iomgr/combiner.cc
|
||||
- src/core/lib/iomgr/dualstack_socket_posix.cc
|
||||
- src/core/lib/iomgr/endpoint.cc
|
||||
- src/core/lib/iomgr/endpoint_cfstream.cc
|
||||
- src/core/lib/iomgr/endpoint_pair_posix.cc
|
||||
- src/core/lib/iomgr/endpoint_pair_windows.cc
|
||||
- src/core/lib/iomgr/error.cc
|
||||
- src/core/lib/iomgr/error_cfstream.cc
|
||||
- src/core/lib/iomgr/ev_apple.cc
|
||||
- src/core/lib/iomgr/ev_epoll1_linux.cc
|
||||
- src/core/lib/iomgr/ev_poll_posix.cc
|
||||
- src/core/lib/iomgr/ev_posix.cc
|
||||
- src/core/lib/iomgr/ev_windows.cc
|
||||
- src/core/lib/iomgr/event_engine_shims/closure.cc
|
||||
- src/core/lib/iomgr/event_engine_shims/endpoint.cc
|
||||
- src/core/lib/iomgr/event_engine_shims/tcp_client.cc
|
||||
- src/core/lib/iomgr/exec_ctx.cc
|
||||
- src/core/lib/iomgr/executor.cc
|
||||
- src/core/lib/iomgr/fork_posix.cc
|
||||
- src/core/lib/iomgr/fork_windows.cc
|
||||
- src/core/lib/iomgr/gethostname_fallback.cc
|
||||
- src/core/lib/iomgr/gethostname_host_name_max.cc
|
||||
- src/core/lib/iomgr/gethostname_sysconf.cc
|
||||
- src/core/lib/iomgr/grpc_if_nametoindex_posix.cc
|
||||
- src/core/lib/iomgr/grpc_if_nametoindex_unsupported.cc
|
||||
- src/core/lib/iomgr/internal_errqueue.cc
|
||||
- src/core/lib/iomgr/iocp_windows.cc
|
||||
- src/core/lib/iomgr/iomgr.cc
|
||||
- src/core/lib/iomgr/iomgr_internal.cc
|
||||
- src/core/lib/iomgr/iomgr_posix.cc
|
||||
- src/core/lib/iomgr/iomgr_posix_cfstream.cc
|
||||
- src/core/lib/iomgr/iomgr_windows.cc
|
||||
- src/core/lib/iomgr/load_file.cc
|
||||
- src/core/lib/iomgr/lockfree_event.cc
|
||||
- src/core/lib/iomgr/polling_entity.cc
|
||||
- src/core/lib/iomgr/pollset.cc
|
||||
- src/core/lib/iomgr/pollset_set.cc
|
||||
- src/core/lib/iomgr/pollset_set_windows.cc
|
||||
- src/core/lib/iomgr/pollset_windows.cc
|
||||
- src/core/lib/iomgr/resolve_address.cc
|
||||
- src/core/lib/iomgr/resolve_address_posix.cc
|
||||
- src/core/lib/iomgr/resolve_address_windows.cc
|
||||
- src/core/lib/iomgr/sockaddr_utils_posix.cc
|
||||
- src/core/lib/iomgr/socket_factory_posix.cc
|
||||
- src/core/lib/iomgr/socket_mutator.cc
|
||||
- src/core/lib/iomgr/socket_utils_common_posix.cc
|
||||
- src/core/lib/iomgr/socket_utils_linux.cc
|
||||
- src/core/lib/iomgr/socket_utils_posix.cc
|
||||
- src/core/lib/iomgr/socket_utils_windows.cc
|
||||
- src/core/lib/iomgr/socket_windows.cc
|
||||
- src/core/lib/iomgr/systemd_utils.cc
|
||||
- src/core/lib/iomgr/tcp_client.cc
|
||||
- src/core/lib/iomgr/tcp_client_cfstream.cc
|
||||
- src/core/lib/iomgr/tcp_client_posix.cc
|
||||
- src/core/lib/iomgr/tcp_client_windows.cc
|
||||
- src/core/lib/iomgr/tcp_posix.cc
|
||||
- src/core/lib/iomgr/tcp_server.cc
|
||||
- src/core/lib/iomgr/tcp_server_posix.cc
|
||||
- src/core/lib/iomgr/tcp_server_utils_posix_common.cc
|
||||
- src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc
|
||||
- src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc
|
||||
- src/core/lib/iomgr/tcp_server_windows.cc
|
||||
- src/core/lib/iomgr/tcp_windows.cc
|
||||
- src/core/lib/iomgr/timer.cc
|
||||
- src/core/lib/iomgr/timer_generic.cc
|
||||
- src/core/lib/iomgr/timer_heap.cc
|
||||
- src/core/lib/iomgr/timer_manager.cc
|
||||
- src/core/lib/iomgr/unix_sockets_posix.cc
|
||||
- src/core/lib/iomgr/unix_sockets_posix_noop.cc
|
||||
- src/core/lib/iomgr/vsock.cc
|
||||
- src/core/lib/iomgr/wakeup_fd_eventfd.cc
|
||||
- src/core/lib/iomgr/wakeup_fd_nospecial.cc
|
||||
- src/core/lib/iomgr/wakeup_fd_pipe.cc
|
||||
- src/core/lib/iomgr/wakeup_fd_posix.cc
|
||||
- src/core/lib/json/json_writer.cc
|
||||
- src/core/lib/load_balancing/lb_policy.cc
|
||||
- src/core/lib/load_balancing/lb_policy_registry.cc
|
||||
- src/core/lib/promise/activity.cc
|
||||
- src/core/lib/promise/party.cc
|
||||
- src/core/lib/promise/trace.cc
|
||||
- src/core/lib/resolver/endpoint_addresses.cc
|
||||
- src/core/lib/resolver/resolver.cc
|
||||
- src/core/lib/resolver/resolver_registry.cc
|
||||
- src/core/lib/resource_quota/api.cc
|
||||
- src/core/lib/resource_quota/arena.cc
|
||||
- src/core/lib/resource_quota/memory_quota.cc
|
||||
- src/core/lib/resource_quota/periodic_update.cc
|
||||
- src/core/lib/resource_quota/resource_quota.cc
|
||||
- src/core/lib/resource_quota/thread_quota.cc
|
||||
- src/core/lib/resource_quota/trace.cc
|
||||
- src/core/lib/security/certificate_provider/certificate_provider_registry.cc
|
||||
- src/core/lib/security/credentials/alts/check_gcp_environment.cc
|
||||
- src/core/lib/security/credentials/alts/check_gcp_environment_linux.cc
|
||||
- src/core/lib/security/credentials/alts/check_gcp_environment_no_op.cc
|
||||
- src/core/lib/security/credentials/alts/check_gcp_environment_windows.cc
|
||||
- src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc
|
||||
- src/core/lib/security/credentials/alts/grpc_alts_credentials_options.cc
|
||||
- src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc
|
||||
- src/core/lib/service_config/service_config_parser.cc
|
||||
- src/core/lib/slice/b64.cc
|
||||
- src/core/lib/slice/percent_encoding.cc
|
||||
- src/core/lib/slice/slice.cc
|
||||
- src/core/lib/slice/slice_buffer.cc
|
||||
- src/core/lib/slice/slice_refcount.cc
|
||||
- src/core/lib/slice/slice_string_helpers.cc
|
||||
- src/core/lib/surface/api_trace.cc
|
||||
- src/core/lib/surface/builtins.cc
|
||||
- src/core/lib/surface/byte_buffer.cc
|
||||
- src/core/lib/surface/byte_buffer_reader.cc
|
||||
- src/core/lib/surface/call.cc
|
||||
- src/core/lib/surface/call_details.cc
|
||||
- src/core/lib/surface/call_log_batch.cc
|
||||
- src/core/lib/surface/call_trace.cc
|
||||
- src/core/lib/surface/channel.cc
|
||||
- src/core/lib/surface/channel_init.cc
|
||||
- src/core/lib/surface/channel_ping.cc
|
||||
- src/core/lib/surface/channel_stack_type.cc
|
||||
- src/core/lib/surface/completion_queue.cc
|
||||
- src/core/lib/surface/completion_queue_factory.cc
|
||||
- src/core/lib/surface/event_string.cc
|
||||
- src/core/lib/surface/init_internally.cc
|
||||
- src/core/lib/surface/lame_client.cc
|
||||
- src/core/lib/surface/metadata_array.cc
|
||||
- src/core/lib/surface/server.cc
|
||||
- src/core/lib/surface/validate_metadata.cc
|
||||
- src/core/lib/surface/version.cc
|
||||
- src/core/lib/transport/batch_builder.cc
|
||||
- src/core/lib/transport/connectivity_state.cc
|
||||
- src/core/lib/transport/error_utils.cc
|
||||
- src/core/lib/transport/handshaker_registry.cc
|
||||
- src/core/lib/transport/metadata_batch.cc
|
||||
- src/core/lib/transport/parsed_metadata.cc
|
||||
- src/core/lib/transport/status_conversion.cc
|
||||
- src/core/lib/transport/timeout_encoding.cc
|
||||
- src/core/lib/transport/transport.cc
|
||||
- src/core/lib/transport/transport_op_string.cc
|
||||
- src/core/lib/uri/uri_parser.cc
|
||||
- src/core/tsi/alts/handshaker/transport_security_common_api.cc
|
||||
- test/core/transport/chaotic_good/frame_test.cc
|
||||
- third_party/protobuf/upb/hash/common.c
|
||||
- third_party/protobuf/upb/message/accessors.c
|
||||
- third_party/protobuf/upb/message/array.c
|
||||
- third_party/protobuf/upb/message/map.c
|
||||
- third_party/protobuf/upb/message/map_sorter.c
|
||||
- third_party/protobuf/upb/message/message.c
|
||||
- third_party/protobuf/upb/mini_descriptor/build_enum.c
|
||||
- third_party/protobuf/upb/mini_descriptor/decode.c
|
||||
- third_party/protobuf/upb/mini_descriptor/internal/base92.c
|
||||
- third_party/protobuf/upb/mini_descriptor/internal/encode.c
|
||||
- third_party/protobuf/upb/mini_descriptor/link.c
|
||||
- third_party/protobuf/upb/mini_table/extension_registry.c
|
||||
- third_party/protobuf/upb/mini_table/internal/message.c
|
||||
- third_party/protobuf/upb/mini_table/message.c
|
||||
- third_party/protobuf/upb/wire/decode.c
|
||||
- third_party/protobuf/upb/wire/decode_fast.c
|
||||
- third_party/protobuf/upb/wire/encode.c
|
||||
- third_party/protobuf/upb/wire/eps_copy_input_stream.c
|
||||
- third_party/protobuf/upb/wire/reader.c
|
||||
deps:
|
||||
- gtest
|
||||
- upb
|
||||
- utf8_range_lib
|
||||
- z
|
||||
- absl/cleanup:cleanup
|
||||
- absl/container:flat_hash_map
|
||||
- absl/container:inlined_vector
|
||||
- absl/functional:function_ref
|
||||
- absl/hash:hash
|
||||
- absl/meta:type_traits
|
||||
- absl/random:bit_gen_ref
|
||||
- absl/random:distributions
|
||||
- absl/status:statusor
|
||||
- absl/types:span
|
||||
- absl/utility:utility
|
||||
- cares
|
||||
- gpr
|
||||
- name: test_core_transport_chttp2_frame_test
|
||||
gtest: true
|
||||
build: test
|
||||
language: c++
|
||||
headers:
|
||||
- src/core/ext/transport/chttp2/transport/frame.h
|
||||
- src/core/lib/debug/trace.h
|
||||
- src/core/lib/slice/slice.h
|
||||
- src/core/lib/slice/slice_buffer.h
|
||||
- src/core/lib/slice/slice_internal.h
|
||||
- src/core/lib/slice/slice_refcount.h
|
||||
- src/core/lib/slice/slice_string_helpers.h
|
||||
- src/core/lib/transport/http2_errors.h
|
||||
src:
|
||||
- src/core/ext/transport/chttp2/transport/frame.cc
|
||||
- src/core/lib/debug/trace.cc
|
||||
- src/core/lib/slice/slice.cc
|
||||
- src/core/lib/slice/slice_buffer.cc
|
||||
- src/core/lib/slice/slice_refcount.cc
|
||||
- src/core/lib/slice/slice_string_helpers.cc
|
||||
- test/core/transport/chttp2/frame_test.cc
|
||||
deps:
|
||||
- gtest
|
||||
- absl/hash:hash
|
||||
- absl/status:statusor
|
||||
- absl/types:span
|
||||
- gpr
|
||||
uses_polling: false
|
||||
- name: test_cpp_client_credentials_test
|
||||
gtest: true
|
||||
build: test
|
||||
|
|
@ -18765,8 +18078,10 @@ targets:
|
|||
- src/proto/grpc/testing/xds/v3/endpoint.proto
|
||||
- src/proto/grpc/testing/xds/v3/extension.proto
|
||||
- src/proto/grpc/testing/xds/v3/health_check.proto
|
||||
- src/proto/grpc/testing/xds/v3/http_protocol_options.proto
|
||||
- src/proto/grpc/testing/xds/v3/outlier_detection.proto
|
||||
- src/proto/grpc/testing/xds/v3/percent.proto
|
||||
- src/proto/grpc/testing/xds/v3/protocol.proto
|
||||
- src/proto/grpc/testing/xds/v3/regex.proto
|
||||
- src/proto/grpc/testing/xds/v3/round_robin.proto
|
||||
- src/proto/grpc/testing/xds/v3/string.proto
|
||||
|
|
|
|||
|
|
@ -241,6 +241,7 @@ if test "$PHP_GRPC" != "no"; then
|
|||
src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/secret.upb_minitable.c \
|
||||
src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/tls.upb_minitable.c \
|
||||
src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb_minitable.c \
|
||||
src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb_minitable.c \
|
||||
src/core/ext/upb-gen/envoy/service/discovery/v3/ads.upb_minitable.c \
|
||||
src/core/ext/upb-gen/envoy/service/discovery/v3/discovery.upb_minitable.c \
|
||||
src/core/ext/upb-gen/envoy/service/load_stats/v3/lrs.upb_minitable.c \
|
||||
|
|
@ -399,6 +400,7 @@ if test "$PHP_GRPC" != "no"; then
|
|||
src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c \
|
||||
src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c \
|
||||
src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upbdefs.c \
|
||||
src/core/ext/upbdefs-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upbdefs.c \
|
||||
src/core/ext/upbdefs-gen/envoy/service/discovery/v3/ads.upbdefs.c \
|
||||
src/core/ext/upbdefs-gen/envoy/service/discovery/v3/discovery.upbdefs.c \
|
||||
src/core/ext/upbdefs-gen/envoy/service/load_stats/v3/lrs.upbdefs.c \
|
||||
|
|
@ -542,7 +544,7 @@ if test "$PHP_GRPC" != "no"; then
|
|||
src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc \
|
||||
src/core/lib/event_engine/posix_engine/internal_errqueue.cc \
|
||||
src/core/lib/event_engine/posix_engine/lockfree_event.cc \
|
||||
src/core/lib/event_engine/posix_engine/native_dns_resolver.cc \
|
||||
src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.cc \
|
||||
src/core/lib/event_engine/posix_engine/posix_endpoint.cc \
|
||||
src/core/lib/event_engine/posix_engine/posix_engine.cc \
|
||||
src/core/lib/event_engine/posix_engine/posix_engine_listener.cc \
|
||||
|
|
@ -570,6 +572,7 @@ if test "$PHP_GRPC" != "no"; then
|
|||
src/core/lib/event_engine/utils.cc \
|
||||
src/core/lib/event_engine/windows/grpc_polled_fd_windows.cc \
|
||||
src/core/lib/event_engine/windows/iocp.cc \
|
||||
src/core/lib/event_engine/windows/native_windows_dns_resolver.cc \
|
||||
src/core/lib/event_engine/windows/win_socket.cc \
|
||||
src/core/lib/event_engine/windows/windows_endpoint.cc \
|
||||
src/core/lib/event_engine/windows/windows_engine.cc \
|
||||
|
|
@ -1424,6 +1427,7 @@ if test "$PHP_GRPC" != "no"; then
|
|||
PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/ring_hash/v3)
|
||||
PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/wrr_locality/v3)
|
||||
PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3)
|
||||
PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3)
|
||||
PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-gen/envoy/service/discovery/v3)
|
||||
PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-gen/envoy/service/load_stats/v3)
|
||||
PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upb-gen/envoy/service/status/v3)
|
||||
|
|
@ -1474,6 +1478,7 @@ if test "$PHP_GRPC" != "no"; then
|
|||
PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upbdefs-gen/envoy/extensions/filters/network/http_connection_manager/v3)
|
||||
PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upbdefs-gen/envoy/extensions/http/stateful_session/cookie/v3)
|
||||
PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3)
|
||||
PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upbdefs-gen/envoy/extensions/upstreams/http/v3)
|
||||
PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upbdefs-gen/envoy/service/discovery/v3)
|
||||
PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upbdefs-gen/envoy/service/load_stats/v3)
|
||||
PHP_ADD_BUILD_DIR($ext_builddir/src/core/ext/upbdefs-gen/envoy/service/status/v3)
|
||||
|
|
|
|||
|
|
@ -206,6 +206,7 @@ if (PHP_GRPC != "no") {
|
|||
"src\\core\\ext\\upb-gen\\envoy\\extensions\\transport_sockets\\tls\\v3\\secret.upb_minitable.c " +
|
||||
"src\\core\\ext\\upb-gen\\envoy\\extensions\\transport_sockets\\tls\\v3\\tls.upb_minitable.c " +
|
||||
"src\\core\\ext\\upb-gen\\envoy\\extensions\\transport_sockets\\tls\\v3\\tls_spiffe_validator_config.upb_minitable.c " +
|
||||
"src\\core\\ext\\upb-gen\\envoy\\extensions\\upstreams\\http\\v3\\http_protocol_options.upb_minitable.c " +
|
||||
"src\\core\\ext\\upb-gen\\envoy\\service\\discovery\\v3\\ads.upb_minitable.c " +
|
||||
"src\\core\\ext\\upb-gen\\envoy\\service\\discovery\\v3\\discovery.upb_minitable.c " +
|
||||
"src\\core\\ext\\upb-gen\\envoy\\service\\load_stats\\v3\\lrs.upb_minitable.c " +
|
||||
|
|
@ -364,6 +365,7 @@ if (PHP_GRPC != "no") {
|
|||
"src\\core\\ext\\upbdefs-gen\\envoy\\extensions\\transport_sockets\\tls\\v3\\secret.upbdefs.c " +
|
||||
"src\\core\\ext\\upbdefs-gen\\envoy\\extensions\\transport_sockets\\tls\\v3\\tls.upbdefs.c " +
|
||||
"src\\core\\ext\\upbdefs-gen\\envoy\\extensions\\transport_sockets\\tls\\v3\\tls_spiffe_validator_config.upbdefs.c " +
|
||||
"src\\core\\ext\\upbdefs-gen\\envoy\\extensions\\upstreams\\http\\v3\\http_protocol_options.upbdefs.c " +
|
||||
"src\\core\\ext\\upbdefs-gen\\envoy\\service\\discovery\\v3\\ads.upbdefs.c " +
|
||||
"src\\core\\ext\\upbdefs-gen\\envoy\\service\\discovery\\v3\\discovery.upbdefs.c " +
|
||||
"src\\core\\ext\\upbdefs-gen\\envoy\\service\\load_stats\\v3\\lrs.upbdefs.c " +
|
||||
|
|
@ -507,7 +509,7 @@ if (PHP_GRPC != "no") {
|
|||
"src\\core\\lib\\event_engine\\posix_engine\\event_poller_posix_default.cc " +
|
||||
"src\\core\\lib\\event_engine\\posix_engine\\internal_errqueue.cc " +
|
||||
"src\\core\\lib\\event_engine\\posix_engine\\lockfree_event.cc " +
|
||||
"src\\core\\lib\\event_engine\\posix_engine\\native_dns_resolver.cc " +
|
||||
"src\\core\\lib\\event_engine\\posix_engine\\native_posix_dns_resolver.cc " +
|
||||
"src\\core\\lib\\event_engine\\posix_engine\\posix_endpoint.cc " +
|
||||
"src\\core\\lib\\event_engine\\posix_engine\\posix_engine.cc " +
|
||||
"src\\core\\lib\\event_engine\\posix_engine\\posix_engine_listener.cc " +
|
||||
|
|
@ -535,6 +537,7 @@ if (PHP_GRPC != "no") {
|
|||
"src\\core\\lib\\event_engine\\utils.cc " +
|
||||
"src\\core\\lib\\event_engine\\windows\\grpc_polled_fd_windows.cc " +
|
||||
"src\\core\\lib\\event_engine\\windows\\iocp.cc " +
|
||||
"src\\core\\lib\\event_engine\\windows\\native_windows_dns_resolver.cc " +
|
||||
"src\\core\\lib\\event_engine\\windows\\win_socket.cc " +
|
||||
"src\\core\\lib\\event_engine\\windows\\windows_endpoint.cc " +
|
||||
"src\\core\\lib\\event_engine\\windows\\windows_engine.cc " +
|
||||
|
|
@ -1464,6 +1467,9 @@ if (PHP_GRPC != "no") {
|
|||
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-gen\\envoy\\extensions\\transport_sockets");
|
||||
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-gen\\envoy\\extensions\\transport_sockets\\tls");
|
||||
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-gen\\envoy\\extensions\\transport_sockets\\tls\\v3");
|
||||
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-gen\\envoy\\extensions\\upstreams");
|
||||
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-gen\\envoy\\extensions\\upstreams\\http");
|
||||
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-gen\\envoy\\extensions\\upstreams\\http\\v3");
|
||||
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-gen\\envoy\\service");
|
||||
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-gen\\envoy\\service\\discovery");
|
||||
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upb-gen\\envoy\\service\\discovery\\v3");
|
||||
|
|
@ -1582,6 +1588,9 @@ if (PHP_GRPC != "no") {
|
|||
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upbdefs-gen\\envoy\\extensions\\transport_sockets");
|
||||
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upbdefs-gen\\envoy\\extensions\\transport_sockets\\tls");
|
||||
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upbdefs-gen\\envoy\\extensions\\transport_sockets\\tls\\v3");
|
||||
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upbdefs-gen\\envoy\\extensions\\upstreams");
|
||||
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upbdefs-gen\\envoy\\extensions\\upstreams\\http");
|
||||
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upbdefs-gen\\envoy\\extensions\\upstreams\\http\\v3");
|
||||
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upbdefs-gen\\envoy\\service");
|
||||
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upbdefs-gen\\envoy\\service\\discovery");
|
||||
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\ext\\upbdefs-gen\\envoy\\service\\discovery\\v3");
|
||||
|
|
|
|||
|
|
@ -1,11 +1,12 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
||||
# source: helloworld.proto
|
||||
# Protobuf Python Version: 4.25.0
|
||||
"""Generated protocol buffer code."""
|
||||
from google.protobuf.internal import builder as _builder
|
||||
from google.protobuf import descriptor as _descriptor
|
||||
from google.protobuf import descriptor_pool as _descriptor_pool
|
||||
from google.protobuf import symbol_database as _symbol_database
|
||||
from google.protobuf.internal import builder as _builder
|
||||
# @@protoc_insertion_point(imports)
|
||||
|
||||
_sym_db = _symbol_database.Default()
|
||||
|
|
@ -13,18 +14,18 @@ _sym_db = _symbol_database.Default()
|
|||
|
||||
|
||||
|
||||
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x10helloworld.proto\x12\nhelloworld\"\x1c\n\x0cHelloRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\"\x1d\n\nHelloReply\x12\x0f\n\x07message\x18\x01 \x01(\t2I\n\x07Greeter\x12>\n\x08SayHello\x12\x18.helloworld.HelloRequest\x1a\x16.helloworld.HelloReply\"\x00\x42\x36\n\x1bio.grpc.examples.helloworldB\x0fHelloWorldProtoP\x01\xa2\x02\x03HLWb\x06proto3')
|
||||
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x10helloworld.proto\x12\nhelloworld\"\x1c\n\x0cHelloRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\"\x1d\n\nHelloReply\x12\x0f\n\x07message\x18\x01 \x01(\t2\xe4\x01\n\x07Greeter\x12>\n\x08SayHello\x12\x18.helloworld.HelloRequest\x1a\x16.helloworld.HelloReply\"\x00\x12K\n\x13SayHelloStreamReply\x12\x18.helloworld.HelloRequest\x1a\x16.helloworld.HelloReply\"\x00\x30\x01\x12L\n\x12SayHelloBidiStream\x12\x18.helloworld.HelloRequest\x1a\x16.helloworld.HelloReply\"\x00(\x01\x30\x01\x42\x36\n\x1bio.grpc.examples.helloworldB\x0fHelloWorldProtoP\x01\xa2\x02\x03HLWb\x06proto3')
|
||||
|
||||
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
|
||||
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'helloworld_pb2', globals())
|
||||
_globals = globals()
|
||||
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
|
||||
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'helloworld_pb2', _globals)
|
||||
if _descriptor._USE_C_DESCRIPTORS == False:
|
||||
|
||||
DESCRIPTOR._options = None
|
||||
DESCRIPTOR._serialized_options = b'\n\033io.grpc.examples.helloworldB\017HelloWorldProtoP\001\242\002\003HLW'
|
||||
_HELLOREQUEST._serialized_start=32
|
||||
_HELLOREQUEST._serialized_end=60
|
||||
_HELLOREPLY._serialized_start=62
|
||||
_HELLOREPLY._serialized_end=91
|
||||
_GREETER._serialized_start=93
|
||||
_GREETER._serialized_end=166
|
||||
_globals['DESCRIPTOR']._options = None
|
||||
_globals['DESCRIPTOR']._serialized_options = b'\n\033io.grpc.examples.helloworldB\017HelloWorldProtoP\001\242\002\003HLW'
|
||||
_globals['_HELLOREQUEST']._serialized_start=32
|
||||
_globals['_HELLOREQUEST']._serialized_end=60
|
||||
_globals['_HELLOREPLY']._serialized_start=62
|
||||
_globals['_HELLOREPLY']._serialized_end=91
|
||||
_globals['_GREETER']._serialized_start=94
|
||||
_globals['_GREETER']._serialized_end=322
|
||||
# @@protoc_insertion_point(module_scope)
|
||||
|
|
|
|||
|
|
@ -4,14 +4,14 @@ from typing import ClassVar as _ClassVar, Optional as _Optional
|
|||
|
||||
DESCRIPTOR: _descriptor.FileDescriptor
|
||||
|
||||
class HelloReply(_message.Message):
|
||||
__slots__ = ["message"]
|
||||
MESSAGE_FIELD_NUMBER: _ClassVar[int]
|
||||
message: str
|
||||
def __init__(self, message: _Optional[str] = ...) -> None: ...
|
||||
|
||||
class HelloRequest(_message.Message):
|
||||
__slots__ = ["name"]
|
||||
__slots__ = ("name",)
|
||||
NAME_FIELD_NUMBER: _ClassVar[int]
|
||||
name: str
|
||||
def __init__(self, name: _Optional[str] = ...) -> None: ...
|
||||
|
||||
class HelloReply(_message.Message):
|
||||
__slots__ = ("message",)
|
||||
MESSAGE_FIELD_NUMBER: _ClassVar[int]
|
||||
message: str
|
||||
def __init__(self, message: _Optional[str] = ...) -> None: ...
|
||||
|
|
|
|||
|
|
@ -19,7 +19,17 @@ class GreeterStub(object):
|
|||
'/helloworld.Greeter/SayHello',
|
||||
request_serializer=helloworld__pb2.HelloRequest.SerializeToString,
|
||||
response_deserializer=helloworld__pb2.HelloReply.FromString,
|
||||
)
|
||||
_registered_method=True)
|
||||
self.SayHelloStreamReply = channel.unary_stream(
|
||||
'/helloworld.Greeter/SayHelloStreamReply',
|
||||
request_serializer=helloworld__pb2.HelloRequest.SerializeToString,
|
||||
response_deserializer=helloworld__pb2.HelloReply.FromString,
|
||||
_registered_method=True)
|
||||
self.SayHelloBidiStream = channel.stream_stream(
|
||||
'/helloworld.Greeter/SayHelloBidiStream',
|
||||
request_serializer=helloworld__pb2.HelloRequest.SerializeToString,
|
||||
response_deserializer=helloworld__pb2.HelloReply.FromString,
|
||||
_registered_method=True)
|
||||
|
||||
|
||||
class GreeterServicer(object):
|
||||
|
|
@ -33,6 +43,18 @@ class GreeterServicer(object):
|
|||
context.set_details('Method not implemented!')
|
||||
raise NotImplementedError('Method not implemented!')
|
||||
|
||||
def SayHelloStreamReply(self, request, context):
|
||||
"""Missing associated documentation comment in .proto file."""
|
||||
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
|
||||
context.set_details('Method not implemented!')
|
||||
raise NotImplementedError('Method not implemented!')
|
||||
|
||||
def SayHelloBidiStream(self, request_iterator, context):
|
||||
"""Missing associated documentation comment in .proto file."""
|
||||
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
|
||||
context.set_details('Method not implemented!')
|
||||
raise NotImplementedError('Method not implemented!')
|
||||
|
||||
|
||||
def add_GreeterServicer_to_server(servicer, server):
|
||||
rpc_method_handlers = {
|
||||
|
|
@ -41,6 +63,16 @@ def add_GreeterServicer_to_server(servicer, server):
|
|||
request_deserializer=helloworld__pb2.HelloRequest.FromString,
|
||||
response_serializer=helloworld__pb2.HelloReply.SerializeToString,
|
||||
),
|
||||
'SayHelloStreamReply': grpc.unary_stream_rpc_method_handler(
|
||||
servicer.SayHelloStreamReply,
|
||||
request_deserializer=helloworld__pb2.HelloRequest.FromString,
|
||||
response_serializer=helloworld__pb2.HelloReply.SerializeToString,
|
||||
),
|
||||
'SayHelloBidiStream': grpc.stream_stream_rpc_method_handler(
|
||||
servicer.SayHelloBidiStream,
|
||||
request_deserializer=helloworld__pb2.HelloRequest.FromString,
|
||||
response_serializer=helloworld__pb2.HelloReply.SerializeToString,
|
||||
),
|
||||
}
|
||||
generic_handler = grpc.method_handlers_generic_handler(
|
||||
'helloworld.Greeter', rpc_method_handlers)
|
||||
|
|
@ -63,8 +95,72 @@ class Greeter(object):
|
|||
wait_for_ready=None,
|
||||
timeout=None,
|
||||
metadata=None):
|
||||
return grpc.experimental.unary_unary(request, target, '/helloworld.Greeter/SayHello',
|
||||
return grpc.experimental.unary_unary(
|
||||
request,
|
||||
target,
|
||||
'/helloworld.Greeter/SayHello',
|
||||
helloworld__pb2.HelloRequest.SerializeToString,
|
||||
helloworld__pb2.HelloReply.FromString,
|
||||
options, channel_credentials,
|
||||
insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
|
||||
options,
|
||||
channel_credentials,
|
||||
insecure,
|
||||
call_credentials,
|
||||
compression,
|
||||
wait_for_ready,
|
||||
timeout,
|
||||
metadata,
|
||||
_registered_method=True)
|
||||
|
||||
@staticmethod
|
||||
def SayHelloStreamReply(request,
|
||||
target,
|
||||
options=(),
|
||||
channel_credentials=None,
|
||||
call_credentials=None,
|
||||
insecure=False,
|
||||
compression=None,
|
||||
wait_for_ready=None,
|
||||
timeout=None,
|
||||
metadata=None):
|
||||
return grpc.experimental.unary_stream(
|
||||
request,
|
||||
target,
|
||||
'/helloworld.Greeter/SayHelloStreamReply',
|
||||
helloworld__pb2.HelloRequest.SerializeToString,
|
||||
helloworld__pb2.HelloReply.FromString,
|
||||
options,
|
||||
channel_credentials,
|
||||
insecure,
|
||||
call_credentials,
|
||||
compression,
|
||||
wait_for_ready,
|
||||
timeout,
|
||||
metadata,
|
||||
_registered_method=True)
|
||||
|
||||
@staticmethod
|
||||
def SayHelloBidiStream(request_iterator,
|
||||
target,
|
||||
options=(),
|
||||
channel_credentials=None,
|
||||
call_credentials=None,
|
||||
insecure=False,
|
||||
compression=None,
|
||||
wait_for_ready=None,
|
||||
timeout=None,
|
||||
metadata=None):
|
||||
return grpc.experimental.stream_stream(
|
||||
request_iterator,
|
||||
target,
|
||||
'/helloworld.Greeter/SayHelloBidiStream',
|
||||
helloworld__pb2.HelloRequest.SerializeToString,
|
||||
helloworld__pb2.HelloReply.FromString,
|
||||
options,
|
||||
channel_credentials,
|
||||
insecure,
|
||||
call_credentials,
|
||||
compression,
|
||||
wait_for_ready,
|
||||
timeout,
|
||||
metadata,
|
||||
_registered_method=True)
|
||||
|
|
|
|||
|
|
@ -557,6 +557,8 @@ Pod::Spec.new do |s|
|
|||
'src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/tls.upb_minitable.h',
|
||||
'src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.h',
|
||||
'src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb_minitable.h',
|
||||
'src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb.h',
|
||||
'src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb_minitable.h',
|
||||
'src/core/ext/upb-gen/envoy/service/discovery/v3/ads.upb.h',
|
||||
'src/core/ext/upb-gen/envoy/service/discovery/v3/ads.upb_minitable.h',
|
||||
'src/core/ext/upb-gen/envoy/service/discovery/v3/discovery.upb.h',
|
||||
|
|
@ -796,6 +798,7 @@ Pod::Spec.new do |s|
|
|||
'src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.h',
|
||||
'src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.h',
|
||||
'src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upbdefs.h',
|
||||
'src/core/ext/upbdefs-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upbdefs.h',
|
||||
'src/core/ext/upbdefs-gen/envoy/service/discovery/v3/ads.upbdefs.h',
|
||||
'src/core/ext/upbdefs-gen/envoy/service/discovery/v3/discovery.upbdefs.h',
|
||||
'src/core/ext/upbdefs-gen/envoy/service/load_stats/v3/lrs.upbdefs.h',
|
||||
|
|
@ -955,7 +958,7 @@ Pod::Spec.new do |s|
|
|||
'src/core/lib/event_engine/posix_engine/grpc_polled_fd_posix.h',
|
||||
'src/core/lib/event_engine/posix_engine/internal_errqueue.h',
|
||||
'src/core/lib/event_engine/posix_engine/lockfree_event.h',
|
||||
'src/core/lib/event_engine/posix_engine/native_dns_resolver.h',
|
||||
'src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.h',
|
||||
'src/core/lib/event_engine/posix_engine/posix_endpoint.h',
|
||||
'src/core/lib/event_engine/posix_engine/posix_engine.h',
|
||||
'src/core/lib/event_engine/posix_engine/posix_engine_closure.h',
|
||||
|
|
@ -984,6 +987,7 @@ Pod::Spec.new do |s|
|
|||
'src/core/lib/event_engine/utils.h',
|
||||
'src/core/lib/event_engine/windows/grpc_polled_fd_windows.h',
|
||||
'src/core/lib/event_engine/windows/iocp.h',
|
||||
'src/core/lib/event_engine/windows/native_windows_dns_resolver.h',
|
||||
'src/core/lib/event_engine/windows/win_socket.h',
|
||||
'src/core/lib/event_engine/windows/windows_endpoint.h',
|
||||
'src/core/lib/event_engine/windows/windows_engine.h',
|
||||
|
|
@ -1798,6 +1802,8 @@ Pod::Spec.new do |s|
|
|||
'src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/tls.upb_minitable.h',
|
||||
'src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.h',
|
||||
'src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb_minitable.h',
|
||||
'src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb.h',
|
||||
'src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb_minitable.h',
|
||||
'src/core/ext/upb-gen/envoy/service/discovery/v3/ads.upb.h',
|
||||
'src/core/ext/upb-gen/envoy/service/discovery/v3/ads.upb_minitable.h',
|
||||
'src/core/ext/upb-gen/envoy/service/discovery/v3/discovery.upb.h',
|
||||
|
|
@ -2037,6 +2043,7 @@ Pod::Spec.new do |s|
|
|||
'src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.h',
|
||||
'src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.h',
|
||||
'src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upbdefs.h',
|
||||
'src/core/ext/upbdefs-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upbdefs.h',
|
||||
'src/core/ext/upbdefs-gen/envoy/service/discovery/v3/ads.upbdefs.h',
|
||||
'src/core/ext/upbdefs-gen/envoy/service/discovery/v3/discovery.upbdefs.h',
|
||||
'src/core/ext/upbdefs-gen/envoy/service/load_stats/v3/lrs.upbdefs.h',
|
||||
|
|
@ -2196,7 +2203,7 @@ Pod::Spec.new do |s|
|
|||
'src/core/lib/event_engine/posix_engine/grpc_polled_fd_posix.h',
|
||||
'src/core/lib/event_engine/posix_engine/internal_errqueue.h',
|
||||
'src/core/lib/event_engine/posix_engine/lockfree_event.h',
|
||||
'src/core/lib/event_engine/posix_engine/native_dns_resolver.h',
|
||||
'src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.h',
|
||||
'src/core/lib/event_engine/posix_engine/posix_endpoint.h',
|
||||
'src/core/lib/event_engine/posix_engine/posix_engine.h',
|
||||
'src/core/lib/event_engine/posix_engine/posix_engine_closure.h',
|
||||
|
|
@ -2225,6 +2232,7 @@ Pod::Spec.new do |s|
|
|||
'src/core/lib/event_engine/utils.h',
|
||||
'src/core/lib/event_engine/windows/grpc_polled_fd_windows.h',
|
||||
'src/core/lib/event_engine/windows/iocp.h',
|
||||
'src/core/lib/event_engine/windows/native_windows_dns_resolver.h',
|
||||
'src/core/lib/event_engine/windows/win_socket.h',
|
||||
'src/core/lib/event_engine/windows/windows_endpoint.h',
|
||||
'src/core/lib/event_engine/windows/windows_engine.h',
|
||||
|
|
|
|||
|
|
@ -689,6 +689,9 @@ Pod::Spec.new do |s|
|
|||
'src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.h',
|
||||
'src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb_minitable.c',
|
||||
'src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb_minitable.h',
|
||||
'src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb.h',
|
||||
'src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb_minitable.c',
|
||||
'src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb_minitable.h',
|
||||
'src/core/ext/upb-gen/envoy/service/discovery/v3/ads.upb.h',
|
||||
'src/core/ext/upb-gen/envoy/service/discovery/v3/ads.upb_minitable.c',
|
||||
'src/core/ext/upb-gen/envoy/service/discovery/v3/ads.upb_minitable.h',
|
||||
|
|
@ -1086,6 +1089,8 @@ Pod::Spec.new do |s|
|
|||
'src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.h',
|
||||
'src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upbdefs.c',
|
||||
'src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upbdefs.h',
|
||||
'src/core/ext/upbdefs-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upbdefs.c',
|
||||
'src/core/ext/upbdefs-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upbdefs.h',
|
||||
'src/core/ext/upbdefs-gen/envoy/service/discovery/v3/ads.upbdefs.c',
|
||||
'src/core/ext/upbdefs-gen/envoy/service/discovery/v3/ads.upbdefs.h',
|
||||
'src/core/ext/upbdefs-gen/envoy/service/discovery/v3/discovery.upbdefs.c',
|
||||
|
|
@ -1387,8 +1392,8 @@ Pod::Spec.new do |s|
|
|||
'src/core/lib/event_engine/posix_engine/internal_errqueue.h',
|
||||
'src/core/lib/event_engine/posix_engine/lockfree_event.cc',
|
||||
'src/core/lib/event_engine/posix_engine/lockfree_event.h',
|
||||
'src/core/lib/event_engine/posix_engine/native_dns_resolver.cc',
|
||||
'src/core/lib/event_engine/posix_engine/native_dns_resolver.h',
|
||||
'src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.cc',
|
||||
'src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.h',
|
||||
'src/core/lib/event_engine/posix_engine/posix_endpoint.cc',
|
||||
'src/core/lib/event_engine/posix_engine/posix_endpoint.h',
|
||||
'src/core/lib/event_engine/posix_engine/posix_engine.cc',
|
||||
|
|
@ -1444,6 +1449,8 @@ Pod::Spec.new do |s|
|
|||
'src/core/lib/event_engine/windows/grpc_polled_fd_windows.h',
|
||||
'src/core/lib/event_engine/windows/iocp.cc',
|
||||
'src/core/lib/event_engine/windows/iocp.h',
|
||||
'src/core/lib/event_engine/windows/native_windows_dns_resolver.cc',
|
||||
'src/core/lib/event_engine/windows/native_windows_dns_resolver.h',
|
||||
'src/core/lib/event_engine/windows/win_socket.cc',
|
||||
'src/core/lib/event_engine/windows/win_socket.h',
|
||||
'src/core/lib/event_engine/windows/windows_endpoint.cc',
|
||||
|
|
@ -2565,6 +2572,8 @@ Pod::Spec.new do |s|
|
|||
'src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/tls.upb_minitable.h',
|
||||
'src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.h',
|
||||
'src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb_minitable.h',
|
||||
'src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb.h',
|
||||
'src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb_minitable.h',
|
||||
'src/core/ext/upb-gen/envoy/service/discovery/v3/ads.upb.h',
|
||||
'src/core/ext/upb-gen/envoy/service/discovery/v3/ads.upb_minitable.h',
|
||||
'src/core/ext/upb-gen/envoy/service/discovery/v3/discovery.upb.h',
|
||||
|
|
@ -2804,6 +2813,7 @@ Pod::Spec.new do |s|
|
|||
'src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.h',
|
||||
'src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.h',
|
||||
'src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upbdefs.h',
|
||||
'src/core/ext/upbdefs-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upbdefs.h',
|
||||
'src/core/ext/upbdefs-gen/envoy/service/discovery/v3/ads.upbdefs.h',
|
||||
'src/core/ext/upbdefs-gen/envoy/service/discovery/v3/discovery.upbdefs.h',
|
||||
'src/core/ext/upbdefs-gen/envoy/service/load_stats/v3/lrs.upbdefs.h',
|
||||
|
|
@ -2962,7 +2972,7 @@ Pod::Spec.new do |s|
|
|||
'src/core/lib/event_engine/posix_engine/grpc_polled_fd_posix.h',
|
||||
'src/core/lib/event_engine/posix_engine/internal_errqueue.h',
|
||||
'src/core/lib/event_engine/posix_engine/lockfree_event.h',
|
||||
'src/core/lib/event_engine/posix_engine/native_dns_resolver.h',
|
||||
'src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.h',
|
||||
'src/core/lib/event_engine/posix_engine/posix_endpoint.h',
|
||||
'src/core/lib/event_engine/posix_engine/posix_engine.h',
|
||||
'src/core/lib/event_engine/posix_engine/posix_engine_closure.h',
|
||||
|
|
@ -2991,6 +3001,7 @@ Pod::Spec.new do |s|
|
|||
'src/core/lib/event_engine/utils.h',
|
||||
'src/core/lib/event_engine/windows/grpc_polled_fd_windows.h',
|
||||
'src/core/lib/event_engine/windows/iocp.h',
|
||||
'src/core/lib/event_engine/windows/native_windows_dns_resolver.h',
|
||||
'src/core/lib/event_engine/windows/win_socket.h',
|
||||
'src/core/lib/event_engine/windows/windows_endpoint.h',
|
||||
'src/core/lib/event_engine/windows/windows_engine.h',
|
||||
|
|
|
|||
|
|
@ -592,6 +592,9 @@ Gem::Specification.new do |s|
|
|||
s.files += %w( src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.h )
|
||||
s.files += %w( src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb_minitable.c )
|
||||
s.files += %w( src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb_minitable.h )
|
||||
s.files += %w( src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb.h )
|
||||
s.files += %w( src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb_minitable.c )
|
||||
s.files += %w( src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb_minitable.h )
|
||||
s.files += %w( src/core/ext/upb-gen/envoy/service/discovery/v3/ads.upb.h )
|
||||
s.files += %w( src/core/ext/upb-gen/envoy/service/discovery/v3/ads.upb_minitable.c )
|
||||
s.files += %w( src/core/ext/upb-gen/envoy/service/discovery/v3/ads.upb_minitable.h )
|
||||
|
|
@ -989,6 +992,8 @@ Gem::Specification.new do |s|
|
|||
s.files += %w( src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.h )
|
||||
s.files += %w( src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upbdefs.c )
|
||||
s.files += %w( src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upbdefs.h )
|
||||
s.files += %w( src/core/ext/upbdefs-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upbdefs.c )
|
||||
s.files += %w( src/core/ext/upbdefs-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upbdefs.h )
|
||||
s.files += %w( src/core/ext/upbdefs-gen/envoy/service/discovery/v3/ads.upbdefs.c )
|
||||
s.files += %w( src/core/ext/upbdefs-gen/envoy/service/discovery/v3/ads.upbdefs.h )
|
||||
s.files += %w( src/core/ext/upbdefs-gen/envoy/service/discovery/v3/discovery.upbdefs.c )
|
||||
|
|
@ -1290,8 +1295,8 @@ Gem::Specification.new do |s|
|
|||
s.files += %w( src/core/lib/event_engine/posix_engine/internal_errqueue.h )
|
||||
s.files += %w( src/core/lib/event_engine/posix_engine/lockfree_event.cc )
|
||||
s.files += %w( src/core/lib/event_engine/posix_engine/lockfree_event.h )
|
||||
s.files += %w( src/core/lib/event_engine/posix_engine/native_dns_resolver.cc )
|
||||
s.files += %w( src/core/lib/event_engine/posix_engine/native_dns_resolver.h )
|
||||
s.files += %w( src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.cc )
|
||||
s.files += %w( src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.h )
|
||||
s.files += %w( src/core/lib/event_engine/posix_engine/posix_endpoint.cc )
|
||||
s.files += %w( src/core/lib/event_engine/posix_engine/posix_endpoint.h )
|
||||
s.files += %w( src/core/lib/event_engine/posix_engine/posix_engine.cc )
|
||||
|
|
@ -1347,6 +1352,8 @@ Gem::Specification.new do |s|
|
|||
s.files += %w( src/core/lib/event_engine/windows/grpc_polled_fd_windows.h )
|
||||
s.files += %w( src/core/lib/event_engine/windows/iocp.cc )
|
||||
s.files += %w( src/core/lib/event_engine/windows/iocp.h )
|
||||
s.files += %w( src/core/lib/event_engine/windows/native_windows_dns_resolver.cc )
|
||||
s.files += %w( src/core/lib/event_engine/windows/native_windows_dns_resolver.h )
|
||||
s.files += %w( src/core/lib/event_engine/windows/win_socket.cc )
|
||||
s.files += %w( src/core/lib/event_engine/windows/win_socket.h )
|
||||
s.files += %w( src/core/lib/event_engine/windows/windows_endpoint.cc )
|
||||
|
|
|
|||
|
|
@ -474,6 +474,7 @@
|
|||
'src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/secret.upb_minitable.c',
|
||||
'src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/tls.upb_minitable.c',
|
||||
'src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb_minitable.c',
|
||||
'src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb_minitable.c',
|
||||
'src/core/ext/upb-gen/envoy/service/discovery/v3/ads.upb_minitable.c',
|
||||
'src/core/ext/upb-gen/envoy/service/discovery/v3/discovery.upb_minitable.c',
|
||||
'src/core/ext/upb-gen/envoy/service/load_stats/v3/lrs.upb_minitable.c',
|
||||
|
|
@ -632,6 +633,7 @@
|
|||
'src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c',
|
||||
'src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c',
|
||||
'src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upbdefs.c',
|
||||
'src/core/ext/upbdefs-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upbdefs.c',
|
||||
'src/core/ext/upbdefs-gen/envoy/service/discovery/v3/ads.upbdefs.c',
|
||||
'src/core/ext/upbdefs-gen/envoy/service/discovery/v3/discovery.upbdefs.c',
|
||||
'src/core/ext/upbdefs-gen/envoy/service/load_stats/v3/lrs.upbdefs.c',
|
||||
|
|
@ -772,7 +774,7 @@
|
|||
'src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc',
|
||||
'src/core/lib/event_engine/posix_engine/internal_errqueue.cc',
|
||||
'src/core/lib/event_engine/posix_engine/lockfree_event.cc',
|
||||
'src/core/lib/event_engine/posix_engine/native_dns_resolver.cc',
|
||||
'src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.cc',
|
||||
'src/core/lib/event_engine/posix_engine/posix_endpoint.cc',
|
||||
'src/core/lib/event_engine/posix_engine/posix_engine.cc',
|
||||
'src/core/lib/event_engine/posix_engine/posix_engine_listener.cc',
|
||||
|
|
@ -799,6 +801,7 @@
|
|||
'src/core/lib/event_engine/utils.cc',
|
||||
'src/core/lib/event_engine/windows/grpc_polled_fd_windows.cc',
|
||||
'src/core/lib/event_engine/windows/iocp.cc',
|
||||
'src/core/lib/event_engine/windows/native_windows_dns_resolver.cc',
|
||||
'src/core/lib/event_engine/windows/win_socket.cc',
|
||||
'src/core/lib/event_engine/windows/windows_endpoint.cc',
|
||||
'src/core/lib/event_engine/windows/windows_engine.cc',
|
||||
|
|
@ -1294,7 +1297,7 @@
|
|||
'src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc',
|
||||
'src/core/lib/event_engine/posix_engine/internal_errqueue.cc',
|
||||
'src/core/lib/event_engine/posix_engine/lockfree_event.cc',
|
||||
'src/core/lib/event_engine/posix_engine/native_dns_resolver.cc',
|
||||
'src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.cc',
|
||||
'src/core/lib/event_engine/posix_engine/posix_endpoint.cc',
|
||||
'src/core/lib/event_engine/posix_engine/posix_engine.cc',
|
||||
'src/core/lib/event_engine/posix_engine/posix_engine_listener.cc',
|
||||
|
|
@ -1321,6 +1324,7 @@
|
|||
'src/core/lib/event_engine/utils.cc',
|
||||
'src/core/lib/event_engine/windows/grpc_polled_fd_windows.cc',
|
||||
'src/core/lib/event_engine/windows/iocp.cc',
|
||||
'src/core/lib/event_engine/windows/native_windows_dns_resolver.cc',
|
||||
'src/core/lib/event_engine/windows/win_socket.cc',
|
||||
'src/core/lib/event_engine/windows/windows_endpoint.cc',
|
||||
'src/core/lib/event_engine/windows/windows_engine.cc',
|
||||
|
|
@ -2073,7 +2077,7 @@
|
|||
'src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc',
|
||||
'src/core/lib/event_engine/posix_engine/internal_errqueue.cc',
|
||||
'src/core/lib/event_engine/posix_engine/lockfree_event.cc',
|
||||
'src/core/lib/event_engine/posix_engine/native_dns_resolver.cc',
|
||||
'src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.cc',
|
||||
'src/core/lib/event_engine/posix_engine/posix_endpoint.cc',
|
||||
'src/core/lib/event_engine/posix_engine/posix_engine.cc',
|
||||
'src/core/lib/event_engine/posix_engine/posix_engine_listener.cc',
|
||||
|
|
@ -2100,6 +2104,7 @@
|
|||
'src/core/lib/event_engine/utils.cc',
|
||||
'src/core/lib/event_engine/windows/grpc_polled_fd_windows.cc',
|
||||
'src/core/lib/event_engine/windows/iocp.cc',
|
||||
'src/core/lib/event_engine/windows/native_windows_dns_resolver.cc',
|
||||
'src/core/lib/event_engine/windows/win_socket.cc',
|
||||
'src/core/lib/event_engine/windows/windows_endpoint.cc',
|
||||
'src/core/lib/event_engine/windows/windows_engine.cc',
|
||||
|
|
|
|||
|
|
@ -60,6 +60,18 @@ Result& SliceCast(T& value, SliceCastable<Result, T> = {}) {
|
|||
return reinterpret_cast<Result&>(value);
|
||||
}
|
||||
|
||||
// Cast to `Result&&` from `T&&` without any runtime checks.
|
||||
// This is only valid if `sizeof(Result) == sizeof(T)`, and if `Result`, `T` are
|
||||
// opted in as compatible via `SliceCastable`.
|
||||
template <typename Result, typename T>
|
||||
Result&& SliceCast(T&& value, SliceCastable<Result, T> = {}) {
|
||||
// Insist upon sizes being equal to catch mismatches.
|
||||
// We assume if sizes are opted in and sizes are equal then yes, these two
|
||||
// types are expected to be layout compatible and actually appear to be.
|
||||
static_assert(sizeof(Result) == sizeof(T), "size mismatch");
|
||||
return reinterpret_cast<Result&&>(value);
|
||||
}
|
||||
|
||||
} // namespace internal
|
||||
} // namespace experimental
|
||||
} // namespace grpc_event_engine
|
||||
|
|
|
|||
|
|
@ -169,6 +169,11 @@ struct CopyConstructors {
|
|||
return Out(grpc_slice_from_copied_buffer(p, len));
|
||||
}
|
||||
|
||||
static Out FromCopiedBuffer(const uint8_t* p, size_t len) {
|
||||
return Out(
|
||||
grpc_slice_from_copied_buffer(reinterpret_cast<const char*>(p), len));
|
||||
}
|
||||
|
||||
template <typename Buffer>
|
||||
static Out FromCopiedBuffer(const Buffer& buffer) {
|
||||
return FromCopiedBuffer(reinterpret_cast<const char*>(buffer.data()),
|
||||
|
|
|
|||
|
|
@ -106,6 +106,12 @@
|
|||
*/
|
||||
#define GRPC_ARG_HTTP2_MIN_RECV_PING_INTERVAL_WITHOUT_DATA_MS \
|
||||
"grpc.http2.min_ping_interval_without_data_ms"
|
||||
/** Maximum time to allow a request to be:
|
||||
(1) received by the server, but
|
||||
(2) not requested by a RequestCall (in the completion queue based API)
|
||||
before the request is cancelled */
|
||||
#define GRPC_ARG_SERVER_MAX_UNREQUESTED_TIME_IN_SERVER_SECONDS \
|
||||
"grpc.server_max_unrequested_time_in_server"
|
||||
/** Channel arg to override the http2 :scheme header */
|
||||
#define GRPC_ARG_HTTP2_SCHEME "grpc.http2_scheme"
|
||||
/** How many pings can the client send before needing to send a
|
||||
|
|
|
|||
|
|
@ -28,6 +28,8 @@
|
|||
#include "absl/strings/string_view.h"
|
||||
#include "opentelemetry/sdk/metrics/meter_provider.h"
|
||||
|
||||
#include <grpcpp/ext/otel_plugin.h>
|
||||
|
||||
namespace grpc {
|
||||
|
||||
namespace internal {
|
||||
|
|
@ -88,6 +90,18 @@ class CsmObservabilityBuilder {
|
|||
std::unique_ptr<grpc::internal::OpenTelemetryPluginBuilderImpl> builder_;
|
||||
};
|
||||
|
||||
class OpenTelemetryPluginOption;
|
||||
|
||||
/// Creates an OpenTelemetryPluginOption that would add additional labels on
|
||||
/// gRPC metrics to enhance observability for CSM users.
|
||||
///
|
||||
/// Sample Usage -
|
||||
/// OpenTelemetryPluginBuilder()
|
||||
/// .SetMeterProvider(provider)
|
||||
/// .AddPluginOption(MakeCsmOpenTelemetryPluginOption())
|
||||
/// .BuildAndRegisterGlobal();
|
||||
std::unique_ptr<OpenTelemetryPluginOption> MakeCsmOpenTelemetryPluginOption();
|
||||
|
||||
} // namespace experimental
|
||||
} // namespace grpc
|
||||
|
||||
|
|
|
|||
|
|
@ -38,6 +38,11 @@ class OpenTelemetryPluginBuilderImpl;
|
|||
|
||||
namespace experimental {
|
||||
|
||||
class OpenTelemetryPluginOption {
|
||||
public:
|
||||
virtual ~OpenTelemetryPluginOption() = default;
|
||||
};
|
||||
|
||||
/// The most common way to use this API is -
|
||||
///
|
||||
/// OpenTelemetryPluginBuilder().SetMeterProvider(provider).BuildAndRegister();
|
||||
|
|
@ -76,6 +81,7 @@ class OpenTelemetryPluginBuilder {
|
|||
"grpc.server.call.rcvd_total_compressed_message_size";
|
||||
|
||||
OpenTelemetryPluginBuilder();
|
||||
~OpenTelemetryPluginBuilder();
|
||||
/// If `SetMeterProvider()` is not called, no metrics are collected.
|
||||
OpenTelemetryPluginBuilder& SetMeterProvider(
|
||||
std::shared_ptr<opentelemetry::metrics::MeterProvider> meter_provider);
|
||||
|
|
@ -95,6 +101,12 @@ class OpenTelemetryPluginBuilder {
|
|||
OpenTelemetryPluginBuilder& SetGenericMethodAttributeFilter(
|
||||
absl::AnyInvocable<bool(absl::string_view /*generic_method*/) const>
|
||||
generic_method_attribute_filter);
|
||||
/// Add a plugin option to add to the opentelemetry plugin being built. At
|
||||
/// present, this type is an opaque type. Ownership of \a option is
|
||||
/// transferred when `AddPluginOption` is invoked. A maximum of 64 plugin
|
||||
/// options can be added.
|
||||
OpenTelemetryPluginBuilder& AddPluginOption(
|
||||
std::unique_ptr<OpenTelemetryPluginOption> option);
|
||||
/// Registers a global plugin that acts on all channels and servers running on
|
||||
/// the process.
|
||||
void BuildAndRegisterGlobal();
|
||||
|
|
|
|||
|
|
@ -32,7 +32,6 @@ class ChannelTestPeer {
|
|||
/// Provide the gRPC Core channel
|
||||
grpc_channel* channel() const { return channel_->c_channel_; }
|
||||
int registered_calls() const;
|
||||
int registration_attempts() const;
|
||||
|
||||
private:
|
||||
Channel* channel_; // not owned
|
||||
|
|
|
|||
|
|
@ -574,6 +574,9 @@
|
|||
<file baseinstalldir="/" name="src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.h" role="src" />
|
||||
<file baseinstalldir="/" name="src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb_minitable.c" role="src" />
|
||||
<file baseinstalldir="/" name="src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb_minitable.h" role="src" />
|
||||
<file baseinstalldir="/" name="src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb.h" role="src" />
|
||||
<file baseinstalldir="/" name="src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb_minitable.c" role="src" />
|
||||
<file baseinstalldir="/" name="src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb_minitable.h" role="src" />
|
||||
<file baseinstalldir="/" name="src/core/ext/upb-gen/envoy/service/discovery/v3/ads.upb.h" role="src" />
|
||||
<file baseinstalldir="/" name="src/core/ext/upb-gen/envoy/service/discovery/v3/ads.upb_minitable.c" role="src" />
|
||||
<file baseinstalldir="/" name="src/core/ext/upb-gen/envoy/service/discovery/v3/ads.upb_minitable.h" role="src" />
|
||||
|
|
@ -971,6 +974,8 @@
|
|||
<file baseinstalldir="/" name="src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.h" role="src" />
|
||||
<file baseinstalldir="/" name="src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upbdefs.c" role="src" />
|
||||
<file baseinstalldir="/" name="src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upbdefs.h" role="src" />
|
||||
<file baseinstalldir="/" name="src/core/ext/upbdefs-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upbdefs.c" role="src" />
|
||||
<file baseinstalldir="/" name="src/core/ext/upbdefs-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upbdefs.h" role="src" />
|
||||
<file baseinstalldir="/" name="src/core/ext/upbdefs-gen/envoy/service/discovery/v3/ads.upbdefs.c" role="src" />
|
||||
<file baseinstalldir="/" name="src/core/ext/upbdefs-gen/envoy/service/discovery/v3/ads.upbdefs.h" role="src" />
|
||||
<file baseinstalldir="/" name="src/core/ext/upbdefs-gen/envoy/service/discovery/v3/discovery.upbdefs.c" role="src" />
|
||||
|
|
@ -1272,8 +1277,8 @@
|
|||
<file baseinstalldir="/" name="src/core/lib/event_engine/posix_engine/internal_errqueue.h" role="src" />
|
||||
<file baseinstalldir="/" name="src/core/lib/event_engine/posix_engine/lockfree_event.cc" role="src" />
|
||||
<file baseinstalldir="/" name="src/core/lib/event_engine/posix_engine/lockfree_event.h" role="src" />
|
||||
<file baseinstalldir="/" name="src/core/lib/event_engine/posix_engine/native_dns_resolver.cc" role="src" />
|
||||
<file baseinstalldir="/" name="src/core/lib/event_engine/posix_engine/native_dns_resolver.h" role="src" />
|
||||
<file baseinstalldir="/" name="src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.cc" role="src" />
|
||||
<file baseinstalldir="/" name="src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.h" role="src" />
|
||||
<file baseinstalldir="/" name="src/core/lib/event_engine/posix_engine/posix_endpoint.cc" role="src" />
|
||||
<file baseinstalldir="/" name="src/core/lib/event_engine/posix_engine/posix_endpoint.h" role="src" />
|
||||
<file baseinstalldir="/" name="src/core/lib/event_engine/posix_engine/posix_engine.cc" role="src" />
|
||||
|
|
@ -1329,6 +1334,8 @@
|
|||
<file baseinstalldir="/" name="src/core/lib/event_engine/windows/grpc_polled_fd_windows.h" role="src" />
|
||||
<file baseinstalldir="/" name="src/core/lib/event_engine/windows/iocp.cc" role="src" />
|
||||
<file baseinstalldir="/" name="src/core/lib/event_engine/windows/iocp.h" role="src" />
|
||||
<file baseinstalldir="/" name="src/core/lib/event_engine/windows/native_windows_dns_resolver.cc" role="src" />
|
||||
<file baseinstalldir="/" name="src/core/lib/event_engine/windows/native_windows_dns_resolver.h" role="src" />
|
||||
<file baseinstalldir="/" name="src/core/lib/event_engine/windows/win_socket.cc" role="src" />
|
||||
<file baseinstalldir="/" name="src/core/lib/event_engine/windows/win_socket.h" role="src" />
|
||||
<file baseinstalldir="/" name="src/core/lib/event_engine/windows/windows_endpoint.cc" role="src" />
|
||||
|
|
|
|||
|
|
@ -467,7 +467,7 @@ bool PrivateGenerator::PrintStub(
|
|||
out->Print(
|
||||
method_dict,
|
||||
"response_deserializer=$ResponseModuleAndClass$.FromString,\n");
|
||||
out->Print(")\n");
|
||||
out->Print("_registered_method=True)\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -642,22 +642,27 @@ bool PrivateGenerator::PrintServiceClass(
|
|||
args_dict["ArityMethodName"] = arity_method_name;
|
||||
args_dict["PackageQualifiedService"] = package_qualified_service_name;
|
||||
args_dict["Method"] = method->name();
|
||||
out->Print(args_dict,
|
||||
"return "
|
||||
"grpc.experimental.$ArityMethodName$($RequestParameter$, "
|
||||
"target, '/$PackageQualifiedService$/$Method$',\n");
|
||||
out->Print(args_dict, "return grpc.experimental.$ArityMethodName$(\n");
|
||||
{
|
||||
IndentScope continuation_indent(out);
|
||||
StringMap serializer_dict;
|
||||
out->Print(args_dict, "$RequestParameter$,\n");
|
||||
out->Print("target,\n");
|
||||
out->Print(args_dict, "'/$PackageQualifiedService$/$Method$',\n");
|
||||
serializer_dict["RequestModuleAndClass"] = request_module_and_class;
|
||||
serializer_dict["ResponseModuleAndClass"] = response_module_and_class;
|
||||
out->Print(serializer_dict,
|
||||
"$RequestModuleAndClass$.SerializeToString,\n");
|
||||
out->Print(serializer_dict, "$ResponseModuleAndClass$.FromString,\n");
|
||||
out->Print("options, channel_credentials,\n");
|
||||
out->Print(
|
||||
"insecure, call_credentials, compression, wait_for_ready, "
|
||||
"timeout, metadata)\n");
|
||||
out->Print("options,\n");
|
||||
out->Print("channel_credentials,\n");
|
||||
out->Print("insecure,\n");
|
||||
out->Print("call_credentials,\n");
|
||||
out->Print("compression,\n");
|
||||
out->Print("wait_for_ready,\n");
|
||||
out->Print("timeout,\n");
|
||||
out->Print("metadata,\n");
|
||||
out->Print("_registered_method=True)\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
120
src/core/BUILD
120
src/core/BUILD
|
|
@ -2175,7 +2175,7 @@ grpc_cc_library(
|
|||
"forkable",
|
||||
"init_internally",
|
||||
"iomgr_port",
|
||||
"native_dns_resolver",
|
||||
"native_posix_dns_resolver",
|
||||
"no_destruct",
|
||||
"posix_event_engine_base_hdrs",
|
||||
"posix_event_engine_closure",
|
||||
|
|
@ -2222,6 +2222,20 @@ grpc_cc_library(
|
|||
"windows_endpoint",
|
||||
"windows_event_engine_listener",
|
||||
"windows_iocp",
|
||||
"windows_native_resolver",
|
||||
"//:event_engine_base_hdrs",
|
||||
"//:gpr",
|
||||
],
|
||||
)
|
||||
|
||||
grpc_cc_library(
|
||||
name = "windows_native_resolver",
|
||||
srcs = ["lib/event_engine/windows/native_windows_dns_resolver.cc"],
|
||||
hdrs = ["lib/event_engine/windows/native_windows_dns_resolver.h"],
|
||||
external_deps = ["absl/strings:str_format"],
|
||||
deps = [
|
||||
"error",
|
||||
"status_helper",
|
||||
"//:event_engine_base_hdrs",
|
||||
"//:gpr",
|
||||
],
|
||||
|
|
@ -2521,12 +2535,12 @@ grpc_cc_library(
|
|||
)
|
||||
|
||||
grpc_cc_library(
|
||||
name = "native_dns_resolver",
|
||||
name = "native_posix_dns_resolver",
|
||||
srcs = [
|
||||
"lib/event_engine/posix_engine/native_dns_resolver.cc",
|
||||
"lib/event_engine/posix_engine/native_posix_dns_resolver.cc",
|
||||
],
|
||||
hdrs = [
|
||||
"lib/event_engine/posix_engine/native_dns_resolver.h",
|
||||
"lib/event_engine/posix_engine/native_posix_dns_resolver.h",
|
||||
],
|
||||
external_deps = [
|
||||
"absl/functional:any_invocable",
|
||||
|
|
@ -4507,6 +4521,8 @@ grpc_cc_library(
|
|||
"envoy_extensions_load_balancing_policies_wrr_locality_upb",
|
||||
"envoy_extensions_transport_sockets_tls_upb",
|
||||
"envoy_extensions_transport_sockets_tls_upbdefs",
|
||||
"envoy_extensions_upstreams_http_upb",
|
||||
"envoy_extensions_upstreams_http_upbdefs",
|
||||
"envoy_service_discovery_upb",
|
||||
"envoy_service_discovery_upbdefs",
|
||||
"envoy_service_load_stats_upb",
|
||||
|
|
@ -6213,6 +6229,7 @@ grpc_cc_library(
|
|||
"bitset",
|
||||
"chaotic_good_frame_header",
|
||||
"context",
|
||||
"match",
|
||||
"no_destruct",
|
||||
"slice",
|
||||
"slice_buffer",
|
||||
|
|
@ -6236,6 +6253,7 @@ grpc_cc_library(
|
|||
external_deps = [
|
||||
"absl/status",
|
||||
"absl/status:statusor",
|
||||
"absl/strings",
|
||||
],
|
||||
deps = [
|
||||
"bitset",
|
||||
|
|
@ -6368,6 +6386,29 @@ grpc_cc_library(
|
|||
],
|
||||
)
|
||||
|
||||
grpc_cc_library(
|
||||
name = "chaotic_good_transport",
|
||||
srcs = [
|
||||
"ext/transport/chaotic_good/chaotic_good_transport.cc",
|
||||
],
|
||||
hdrs = [
|
||||
"ext/transport/chaotic_good/chaotic_good_transport.h",
|
||||
],
|
||||
external_deps = ["absl/random"],
|
||||
language = "c++",
|
||||
deps = [
|
||||
"chaotic_good_frame",
|
||||
"chaotic_good_frame_header",
|
||||
"grpc_promise_endpoint",
|
||||
"if",
|
||||
"try_join",
|
||||
"try_seq",
|
||||
"//:gpr_platform",
|
||||
"//:hpack_encoder",
|
||||
"//:promise",
|
||||
],
|
||||
)
|
||||
|
||||
grpc_cc_library(
|
||||
name = "chaotic_good_client_transport",
|
||||
srcs = [
|
||||
|
|
@ -6378,6 +6419,7 @@ grpc_cc_library(
|
|||
],
|
||||
external_deps = [
|
||||
"absl/base:core_headers",
|
||||
"absl/container:flat_hash_map",
|
||||
"absl/random",
|
||||
"absl/random:bit_gen_ref",
|
||||
"absl/status",
|
||||
|
|
@ -6388,9 +6430,11 @@ grpc_cc_library(
|
|||
language = "c++",
|
||||
deps = [
|
||||
"activity",
|
||||
"all_ok",
|
||||
"arena",
|
||||
"chaotic_good_frame",
|
||||
"chaotic_good_frame_header",
|
||||
"chaotic_good_transport",
|
||||
"context",
|
||||
"event_engine_wakeup_scheduler",
|
||||
"for_each",
|
||||
|
|
@ -6398,6 +6442,7 @@ grpc_cc_library(
|
|||
"if",
|
||||
"inter_activity_pipe",
|
||||
"loop",
|
||||
"map",
|
||||
"match",
|
||||
"memory_quota",
|
||||
"mpsc",
|
||||
|
|
@ -6414,6 +6459,63 @@ grpc_cc_library(
|
|||
"//:grpc_base",
|
||||
"//:hpack_encoder",
|
||||
"//:hpack_parser",
|
||||
"//:promise",
|
||||
"//:ref_counted_ptr",
|
||||
],
|
||||
)
|
||||
|
||||
grpc_cc_library(
|
||||
name = "chaotic_good_server_transport",
|
||||
srcs = [
|
||||
"ext/transport/chaotic_good/server_transport.cc",
|
||||
],
|
||||
hdrs = [
|
||||
"ext/transport/chaotic_good/server_transport.h",
|
||||
],
|
||||
external_deps = [
|
||||
"absl/base:core_headers",
|
||||
"absl/container:flat_hash_map",
|
||||
"absl/functional:any_invocable",
|
||||
"absl/random",
|
||||
"absl/random:bit_gen_ref",
|
||||
"absl/status",
|
||||
"absl/status:statusor",
|
||||
"absl/types:optional",
|
||||
"absl/types:variant",
|
||||
],
|
||||
language = "c++",
|
||||
deps = [
|
||||
"1999",
|
||||
"activity",
|
||||
"arena",
|
||||
"chaotic_good_frame",
|
||||
"chaotic_good_frame_header",
|
||||
"chaotic_good_transport",
|
||||
"context",
|
||||
"default_event_engine",
|
||||
"event_engine_wakeup_scheduler",
|
||||
"for_each",
|
||||
"grpc_promise_endpoint",
|
||||
"if",
|
||||
"inter_activity_pipe",
|
||||
"loop",
|
||||
"memory_quota",
|
||||
"mpsc",
|
||||
"pipe",
|
||||
"poll",
|
||||
"resource_quota",
|
||||
"seq",
|
||||
"slice",
|
||||
"slice_buffer",
|
||||
"switch",
|
||||
"try_join",
|
||||
"try_seq",
|
||||
"//:exec_ctx",
|
||||
"//:gpr",
|
||||
"//:gpr_platform",
|
||||
"//:grpc_base",
|
||||
"//:hpack_encoder",
|
||||
"//:hpack_parser",
|
||||
"//:ref_counted_ptr",
|
||||
],
|
||||
)
|
||||
|
|
@ -6591,6 +6693,16 @@ grpc_upb_proto_reflection_library(
|
|||
deps = ["@envoy_api//envoy/extensions/transport_sockets/tls/v3:pkg"],
|
||||
)
|
||||
|
||||
grpc_upb_proto_library(
|
||||
name = "envoy_extensions_upstreams_http_upb",
|
||||
deps = ["@envoy_api//envoy/extensions/upstreams/http/v3:pkg"],
|
||||
)
|
||||
|
||||
grpc_upb_proto_reflection_library(
|
||||
name = "envoy_extensions_upstreams_http_upbdefs",
|
||||
deps = ["@envoy_api//envoy/extensions/upstreams/http/v3:pkg"],
|
||||
)
|
||||
|
||||
grpc_upb_proto_library(
|
||||
name = "envoy_service_discovery_upb",
|
||||
deps = ["@envoy_api//envoy/service/discovery/v3:pkg"],
|
||||
|
|
|
|||
|
|
@ -190,12 +190,15 @@ void BackendMetricFilter::Call::OnServerTrailingMetadata(ServerMetadata& md) {
|
|||
}
|
||||
|
||||
void RegisterBackendMetricFilter(CoreConfiguration::Builder* builder) {
|
||||
builder->channel_init()
|
||||
->RegisterFilter(GRPC_SERVER_CHANNEL,
|
||||
IsV3BackendMetricFilterEnabled()
|
||||
? &BackendMetricFilter::kFilter
|
||||
: &LegacyBackendMetricFilter::kFilter)
|
||||
.IfHasChannelArg(GRPC_ARG_SERVER_CALL_METRIC_RECORDING);
|
||||
if (IsV3BackendMetricFilterEnabled()) {
|
||||
builder->channel_init()
|
||||
->RegisterFilter<BackendMetricFilter>(GRPC_SERVER_CHANNEL)
|
||||
.IfHasChannelArg(GRPC_ARG_SERVER_CALL_METRIC_RECORDING);
|
||||
} else {
|
||||
builder->channel_init()
|
||||
->RegisterFilter<LegacyBackendMetricFilter>(GRPC_SERVER_CHANNEL)
|
||||
.IfHasChannelArg(GRPC_ARG_SERVER_CALL_METRIC_RECORDING);
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace grpc_core
|
||||
|
|
|
|||
|
|
@ -296,13 +296,13 @@ const grpc_channel_filter MaxAgeFilter::kFilter =
|
|||
void RegisterChannelIdleFilters(CoreConfiguration::Builder* builder) {
|
||||
if (!IsV3ChannelIdleFiltersEnabled()) return;
|
||||
builder->channel_init()
|
||||
->RegisterFilter(GRPC_CLIENT_CHANNEL, &ClientIdleFilter::kFilter)
|
||||
->RegisterFilter<ClientIdleFilter>(GRPC_CLIENT_CHANNEL)
|
||||
.ExcludeFromMinimalStack()
|
||||
.If([](const ChannelArgs& channel_args) {
|
||||
return GetClientIdleTimeout(channel_args) != Duration::Infinity();
|
||||
});
|
||||
builder->channel_init()
|
||||
->RegisterFilter(GRPC_SERVER_CHANNEL, &MaxAgeFilter::kFilter)
|
||||
->RegisterFilter<MaxAgeFilter>(GRPC_SERVER_CHANNEL)
|
||||
.ExcludeFromMinimalStack()
|
||||
.If([](const ChannelArgs& channel_args) {
|
||||
return MaxAgeFilter::Config::FromChannelArgs(channel_args).enable();
|
||||
|
|
|
|||
|
|
@ -302,13 +302,13 @@ const grpc_channel_filter LegacyMaxAgeFilter::kFilter =
|
|||
void RegisterLegacyChannelIdleFilters(CoreConfiguration::Builder* builder) {
|
||||
if (IsV3ChannelIdleFiltersEnabled()) return;
|
||||
builder->channel_init()
|
||||
->RegisterFilter(GRPC_CLIENT_CHANNEL, &LegacyClientIdleFilter::kFilter)
|
||||
->RegisterFilter<LegacyClientIdleFilter>(GRPC_CLIENT_CHANNEL)
|
||||
.ExcludeFromMinimalStack()
|
||||
.If([](const ChannelArgs& channel_args) {
|
||||
return GetClientIdleTimeout(channel_args) != Duration::Infinity();
|
||||
});
|
||||
builder->channel_init()
|
||||
->RegisterFilter(GRPC_SERVER_CHANNEL, &LegacyMaxAgeFilter::kFilter)
|
||||
->RegisterFilter<LegacyMaxAgeFilter>(GRPC_SERVER_CHANNEL)
|
||||
.ExcludeFromMinimalStack()
|
||||
.If([](const ChannelArgs& channel_args) {
|
||||
return LegacyMaxAgeFilter::Config::FromChannelArgs(channel_args)
|
||||
|
|
|
|||
|
|
@ -69,6 +69,9 @@ class EndpointList::Endpoint::Helper
|
|||
grpc_connectivity_state state, const absl::Status& status,
|
||||
RefCountedPtr<LoadBalancingPolicy::SubchannelPicker> picker) override {
|
||||
auto old_state = std::exchange(endpoint_->connectivity_state_, state);
|
||||
if (!old_state.has_value()) {
|
||||
++endpoint_->endpoint_list_->num_endpoints_seen_initial_state_;
|
||||
}
|
||||
endpoint_->picker_ = std::move(picker);
|
||||
endpoint_->OnStateUpdate(old_state, state, status);
|
||||
}
|
||||
|
|
@ -181,11 +184,4 @@ void EndpointList::ResetBackoffLocked() {
|
|||
}
|
||||
}
|
||||
|
||||
bool EndpointList::AllEndpointsSeenInitialState() const {
|
||||
for (const auto& endpoint : endpoints_) {
|
||||
if (!endpoint->connectivity_state().has_value()) return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
} // namespace grpc_core
|
||||
|
|
|
|||
|
|
@ -199,7 +199,9 @@ class EndpointList : public InternallyRefCounted<EndpointList> {
|
|||
|
||||
// Returns true if all endpoints have seen their initial connectivity
|
||||
// state notification.
|
||||
bool AllEndpointsSeenInitialState() const;
|
||||
bool AllEndpointsSeenInitialState() const {
|
||||
return num_endpoints_seen_initial_state_ == size();
|
||||
}
|
||||
|
||||
private:
|
||||
// Returns the parent policy's helper. Needed because the accessor
|
||||
|
|
@ -210,6 +212,7 @@ class EndpointList : public InternallyRefCounted<EndpointList> {
|
|||
RefCountedPtr<LoadBalancingPolicy> policy_;
|
||||
const char* tracer_;
|
||||
std::vector<OrphanablePtr<Endpoint>> endpoints_;
|
||||
size_t num_endpoints_seen_initial_state_ = 0;
|
||||
};
|
||||
|
||||
} // namespace grpc_core
|
||||
|
|
|
|||
|
|
@ -1928,8 +1928,7 @@ void RegisterGrpcLbPolicy(CoreConfiguration::Builder* builder) {
|
|||
builder->lb_policy_registry()->RegisterLoadBalancingPolicyFactory(
|
||||
std::make_unique<GrpcLbFactory>());
|
||||
builder->channel_init()
|
||||
->RegisterFilter(GRPC_CLIENT_SUBCHANNEL,
|
||||
&ClientLoadReportingFilter::kFilter)
|
||||
->RegisterFilter<ClientLoadReportingFilter>(GRPC_CLIENT_SUBCHANNEL)
|
||||
.IfChannelArg(GRPC_ARG_GRPCLB_ENABLE_LOAD_REPORTING_FILTER, false);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -224,7 +224,9 @@ class PickFirst : public LoadBalancingPolicy {
|
|||
private:
|
||||
// Returns true if all subchannels have seen their initial
|
||||
// connectivity state notifications.
|
||||
bool AllSubchannelsSeenInitialState();
|
||||
bool AllSubchannelsSeenInitialState() const {
|
||||
return num_subchannels_seen_initial_notification_ == size();
|
||||
}
|
||||
|
||||
// Looks through subchannels_ starting from attempting_index_ to
|
||||
// find the first one not currently in TRANSIENT_FAILURE, then
|
||||
|
|
@ -255,6 +257,8 @@ class PickFirst : public LoadBalancingPolicy {
|
|||
// TODO(roth): Remove this when we remove the Happy Eyeballs experiment.
|
||||
bool in_transient_failure_ = false;
|
||||
|
||||
size_t num_subchannels_seen_initial_notification_ = 0;
|
||||
|
||||
// The index into subchannels_ to which we are currently attempting
|
||||
// to connect during the initial Happy Eyeballs pass. Once the
|
||||
// initial pass is over, this will be equal to size().
|
||||
|
|
@ -754,6 +758,11 @@ void PickFirst::SubchannelList::SubchannelData::OnConnectivityStateChange(
|
|||
seen_transient_failure_ = true;
|
||||
subchannel_list_->last_failure_ = connectivity_status_;
|
||||
}
|
||||
// If this is the initial connectivity state update for this subchannel,
|
||||
// increment the counter in the subchannel list.
|
||||
if (!old_state.has_value()) {
|
||||
++subchannel_list_->num_subchannels_seen_initial_notification_;
|
||||
}
|
||||
// If we haven't yet seen the initial connectivity state notification
|
||||
// for all subchannels, do nothing.
|
||||
if (!subchannel_list_->AllSubchannelsSeenInitialState()) return;
|
||||
|
|
@ -1122,13 +1131,6 @@ void PickFirst::SubchannelList::ResetBackoffLocked() {
|
|||
}
|
||||
}
|
||||
|
||||
bool PickFirst::SubchannelList::AllSubchannelsSeenInitialState() {
|
||||
for (auto& sd : subchannels_) {
|
||||
if (!sd.connectivity_state().has_value()) return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void PickFirst::SubchannelList::StartConnectingNextSubchannel() {
|
||||
// Find the next subchannel not in state TRANSIENT_FAILURE.
|
||||
// We skip subchannels in state TRANSIENT_FAILURE to avoid a
|
||||
|
|
|
|||
|
|
@ -128,7 +128,7 @@ void RegisterServiceConfigChannelArgFilter(
|
|||
&kServiceConfigChannelArgFilter)
|
||||
.ExcludeFromMinimalStack()
|
||||
.IfHasChannelArg(GRPC_ARG_SERVICE_CONFIG)
|
||||
.Before({&ClientMessageSizeFilter::kFilter});
|
||||
.Before<ClientMessageSizeFilter>();
|
||||
}
|
||||
|
||||
} // namespace grpc_core
|
||||
|
|
|
|||
|
|
@ -37,6 +37,12 @@
|
|||
|
||||
namespace grpc_core {
|
||||
|
||||
const NoInterceptor ClientAuthorityFilter::Call::OnServerInitialMetadata;
|
||||
const NoInterceptor ClientAuthorityFilter::Call::OnServerTrailingMetadata;
|
||||
const NoInterceptor ClientAuthorityFilter::Call::OnClientToServerMessage;
|
||||
const NoInterceptor ClientAuthorityFilter::Call::OnServerToClientMessage;
|
||||
const NoInterceptor ClientAuthorityFilter::Call::OnFinalize;
|
||||
|
||||
absl::StatusOr<ClientAuthorityFilter> ClientAuthorityFilter::Create(
|
||||
const ChannelArgs& args, ChannelFilter::Args) {
|
||||
absl::optional<absl::string_view> default_authority =
|
||||
|
|
@ -49,17 +55,12 @@ absl::StatusOr<ClientAuthorityFilter> ClientAuthorityFilter::Create(
|
|||
return ClientAuthorityFilter(Slice::FromCopiedString(*default_authority));
|
||||
}
|
||||
|
||||
ArenaPromise<ServerMetadataHandle> ClientAuthorityFilter::MakeCallPromise(
|
||||
CallArgs call_args, NextPromiseFactory next_promise_factory) {
|
||||
void ClientAuthorityFilter::Call::OnClientInitialMetadata(
|
||||
ClientMetadata& md, ClientAuthorityFilter* filter) {
|
||||
// If no authority is set, set the default authority.
|
||||
if (call_args.client_initial_metadata->get_pointer(HttpAuthorityMetadata()) ==
|
||||
nullptr) {
|
||||
call_args.client_initial_metadata->Set(HttpAuthorityMetadata(),
|
||||
default_authority_.Ref());
|
||||
if (md.get_pointer(HttpAuthorityMetadata()) == nullptr) {
|
||||
md.Set(HttpAuthorityMetadata(), filter->default_authority_.Ref());
|
||||
}
|
||||
// We have no asynchronous work, so we can just ask the next promise to run,
|
||||
// passing down initial_metadata.
|
||||
return next_promise_factory(std::move(call_args));
|
||||
}
|
||||
|
||||
const grpc_channel_filter ClientAuthorityFilter::kFilter =
|
||||
|
|
@ -75,14 +76,13 @@ bool NeedsClientAuthorityFilter(const ChannelArgs& args) {
|
|||
|
||||
void RegisterClientAuthorityFilter(CoreConfiguration::Builder* builder) {
|
||||
builder->channel_init()
|
||||
->RegisterFilter(GRPC_CLIENT_SUBCHANNEL, &ClientAuthorityFilter::kFilter)
|
||||
->RegisterFilter<ClientAuthorityFilter>(GRPC_CLIENT_SUBCHANNEL)
|
||||
.If(NeedsClientAuthorityFilter)
|
||||
.Before({&ClientAuthFilter::kFilter});
|
||||
.Before<ClientAuthFilter>();
|
||||
builder->channel_init()
|
||||
->RegisterFilter(GRPC_CLIENT_DIRECT_CHANNEL,
|
||||
&ClientAuthorityFilter::kFilter)
|
||||
->RegisterFilter<ClientAuthorityFilter>(GRPC_CLIENT_DIRECT_CHANNEL)
|
||||
.If(NeedsClientAuthorityFilter)
|
||||
.Before({&ClientAuthFilter::kFilter});
|
||||
.Before<ClientAuthFilter>();
|
||||
}
|
||||
|
||||
} // namespace grpc_core
|
||||
|
|
|
|||
|
|
@ -34,16 +34,24 @@
|
|||
|
||||
namespace grpc_core {
|
||||
|
||||
class ClientAuthorityFilter final : public ChannelFilter {
|
||||
class ClientAuthorityFilter final
|
||||
: public ImplementChannelFilter<ClientAuthorityFilter> {
|
||||
public:
|
||||
static const grpc_channel_filter kFilter;
|
||||
|
||||
static absl::StatusOr<ClientAuthorityFilter> Create(const ChannelArgs& args,
|
||||
ChannelFilter::Args);
|
||||
|
||||
// Construct a promise for one call.
|
||||
ArenaPromise<ServerMetadataHandle> MakeCallPromise(
|
||||
CallArgs call_args, NextPromiseFactory next_promise_factory) override;
|
||||
class Call {
|
||||
public:
|
||||
void OnClientInitialMetadata(ClientMetadata& md,
|
||||
ClientAuthorityFilter* filter);
|
||||
static const NoInterceptor OnServerInitialMetadata;
|
||||
static const NoInterceptor OnServerTrailingMetadata;
|
||||
static const NoInterceptor OnClientToServerMessage;
|
||||
static const NoInterceptor OnServerToClientMessage;
|
||||
static const NoInterceptor OnFinalize;
|
||||
};
|
||||
|
||||
private:
|
||||
explicit ClientAuthorityFilter(Slice default_authority)
|
||||
|
|
|
|||
|
|
@ -42,47 +42,49 @@ bool IsBuildingHttpLikeTransport(const ChannelArgs& args) {
|
|||
void RegisterHttpFilters(CoreConfiguration::Builder* builder) {
|
||||
if (IsV3CompressionFilterEnabled()) {
|
||||
builder->channel_init()
|
||||
->RegisterFilter(GRPC_CLIENT_SUBCHANNEL,
|
||||
&ClientCompressionFilter::kFilter)
|
||||
->RegisterFilter<ClientCompressionFilter>(GRPC_CLIENT_SUBCHANNEL)
|
||||
.If(IsBuildingHttpLikeTransport)
|
||||
.After({&HttpClientFilter::kFilter, &ClientMessageSizeFilter::kFilter});
|
||||
.After<HttpClientFilter>()
|
||||
.After<ClientMessageSizeFilter>();
|
||||
builder->channel_init()
|
||||
->RegisterFilter(GRPC_CLIENT_DIRECT_CHANNEL,
|
||||
&ClientCompressionFilter::kFilter)
|
||||
->RegisterFilter<ClientCompressionFilter>(GRPC_CLIENT_DIRECT_CHANNEL)
|
||||
.If(IsBuildingHttpLikeTransport)
|
||||
.After({&HttpClientFilter::kFilter, &ClientMessageSizeFilter::kFilter});
|
||||
.After<HttpClientFilter>()
|
||||
.After<ClientMessageSizeFilter>();
|
||||
builder->channel_init()
|
||||
->RegisterFilter(GRPC_SERVER_CHANNEL, &ServerCompressionFilter::kFilter)
|
||||
->RegisterFilter<ServerCompressionFilter>(GRPC_SERVER_CHANNEL)
|
||||
.If(IsBuildingHttpLikeTransport)
|
||||
.After({&HttpServerFilter::kFilter, &ServerMessageSizeFilter::kFilter});
|
||||
.After<HttpServerFilter>()
|
||||
.After<ServerMessageSizeFilter>();
|
||||
} else {
|
||||
builder->channel_init()
|
||||
->RegisterFilter(GRPC_CLIENT_SUBCHANNEL,
|
||||
&LegacyClientCompressionFilter::kFilter)
|
||||
->RegisterFilter<LegacyClientCompressionFilter>(GRPC_CLIENT_SUBCHANNEL)
|
||||
.If(IsBuildingHttpLikeTransport)
|
||||
.After({&HttpClientFilter::kFilter, &ClientMessageSizeFilter::kFilter});
|
||||
.After<HttpClientFilter>()
|
||||
.After<ClientMessageSizeFilter>();
|
||||
builder->channel_init()
|
||||
->RegisterFilter(GRPC_CLIENT_DIRECT_CHANNEL,
|
||||
&LegacyClientCompressionFilter::kFilter)
|
||||
->RegisterFilter<LegacyClientCompressionFilter>(
|
||||
GRPC_CLIENT_DIRECT_CHANNEL)
|
||||
.If(IsBuildingHttpLikeTransport)
|
||||
.After({&HttpClientFilter::kFilter, &ClientMessageSizeFilter::kFilter});
|
||||
.After<HttpClientFilter>()
|
||||
.After<ClientMessageSizeFilter>();
|
||||
builder->channel_init()
|
||||
->RegisterFilter(GRPC_SERVER_CHANNEL,
|
||||
&LegacyServerCompressionFilter::kFilter)
|
||||
->RegisterFilter<LegacyServerCompressionFilter>(GRPC_SERVER_CHANNEL)
|
||||
.If(IsBuildingHttpLikeTransport)
|
||||
.After({&HttpServerFilter::kFilter, &ServerMessageSizeFilter::kFilter});
|
||||
.After<HttpServerFilter>()
|
||||
.After<ServerMessageSizeFilter>();
|
||||
}
|
||||
builder->channel_init()
|
||||
->RegisterFilter(GRPC_CLIENT_SUBCHANNEL, &HttpClientFilter::kFilter)
|
||||
->RegisterFilter<HttpClientFilter>(GRPC_CLIENT_SUBCHANNEL)
|
||||
.If(IsBuildingHttpLikeTransport)
|
||||
.After({&ClientMessageSizeFilter::kFilter});
|
||||
.After<ClientMessageSizeFilter>();
|
||||
builder->channel_init()
|
||||
->RegisterFilter(GRPC_CLIENT_DIRECT_CHANNEL, &HttpClientFilter::kFilter)
|
||||
->RegisterFilter<HttpClientFilter>(GRPC_CLIENT_DIRECT_CHANNEL)
|
||||
.If(IsBuildingHttpLikeTransport)
|
||||
.After({&ClientMessageSizeFilter::kFilter});
|
||||
.After<ClientMessageSizeFilter>();
|
||||
builder->channel_init()
|
||||
->RegisterFilter(GRPC_SERVER_CHANNEL, &HttpServerFilter::kFilter)
|
||||
->RegisterFilter<HttpServerFilter>(GRPC_SERVER_CHANNEL)
|
||||
.If(IsBuildingHttpLikeTransport)
|
||||
.After({&ServerMessageSizeFilter::kFilter});
|
||||
.After<ServerMessageSizeFilter>();
|
||||
}
|
||||
} // namespace grpc_core
|
||||
|
|
|
|||
|
|
@ -72,6 +72,10 @@ constexpr char kEncodedIpv4AddressLengthString[] = "08";
|
|||
constexpr char kEncodedIpv6AddressLengthString[] = "32";
|
||||
constexpr char kEmptyAddressLengthString[] = "00";
|
||||
|
||||
const NoInterceptor ServerLoadReportingFilter::Call::OnServerInitialMetadata;
|
||||
const NoInterceptor ServerLoadReportingFilter::Call::OnClientToServerMessage;
|
||||
const NoInterceptor ServerLoadReportingFilter::Call::OnServerToClientMessage;
|
||||
|
||||
absl::StatusOr<ServerLoadReportingFilter> ServerLoadReportingFilter::Create(
|
||||
const ChannelArgs& channel_args, ChannelFilter::Args) {
|
||||
// Find and record the peer_identity.
|
||||
|
|
@ -93,9 +97,9 @@ absl::StatusOr<ServerLoadReportingFilter> ServerLoadReportingFilter::Create(
|
|||
|
||||
namespace {
|
||||
std::string GetCensusSafeClientIpString(
|
||||
const ClientMetadataHandle& initial_metadata) {
|
||||
const ClientMetadata& initial_metadata) {
|
||||
// Find the client URI string.
|
||||
Slice* client_uri_slice = initial_metadata->get_pointer(PeerString());
|
||||
const Slice* client_uri_slice = initial_metadata.get_pointer(PeerString());
|
||||
if (client_uri_slice == nullptr) {
|
||||
gpr_log(GPR_ERROR,
|
||||
"Unable to extract client URI string (peer string) from gRPC "
|
||||
|
|
@ -139,8 +143,8 @@ std::string GetCensusSafeClientIpString(
|
|||
}
|
||||
}
|
||||
|
||||
std::string MakeClientIpAndLrToken(
|
||||
absl::string_view lr_token, const ClientMetadataHandle& initial_metadata) {
|
||||
std::string MakeClientIpAndLrToken(absl::string_view lr_token,
|
||||
const ClientMetadata& initial_metadata) {
|
||||
std::string client_ip = GetCensusSafeClientIpString(initial_metadata);
|
||||
absl::string_view prefix;
|
||||
switch (client_ip.length()) {
|
||||
|
|
@ -176,82 +180,68 @@ const char* GetStatusTagForStatus(grpc_status_code status) {
|
|||
}
|
||||
} // namespace
|
||||
|
||||
ArenaPromise<ServerMetadataHandle> ServerLoadReportingFilter::MakeCallPromise(
|
||||
CallArgs call_args, NextPromiseFactory next_promise_factory) {
|
||||
void ServerLoadReportingFilter::Call::OnClientInitialMetadata(
|
||||
ClientMetadata& md, ServerLoadReportingFilter* filter) {
|
||||
// Gather up basic facts about the request
|
||||
Slice service_method;
|
||||
if (const Slice* path =
|
||||
call_args.client_initial_metadata->get_pointer(HttpPathMetadata())) {
|
||||
if (const Slice* path = md.get_pointer(HttpPathMetadata())) {
|
||||
service_method = path->Ref();
|
||||
}
|
||||
std::string target_host;
|
||||
if (const Slice* authority = call_args.client_initial_metadata->get_pointer(
|
||||
HttpAuthorityMetadata())) {
|
||||
target_host = absl::AsciiStrToLower(authority->as_string_view());
|
||||
if (const Slice* authority = md.get_pointer(HttpAuthorityMetadata())) {
|
||||
target_host_ = absl::AsciiStrToLower(authority->as_string_view());
|
||||
}
|
||||
std::string client_ip_and_lr_token;
|
||||
auto lb_token = call_args.client_initial_metadata->Take(LbTokenMetadata())
|
||||
.value_or(Slice());
|
||||
client_ip_and_lr_token = MakeClientIpAndLrToken(
|
||||
lb_token.as_string_view(), call_args.client_initial_metadata);
|
||||
auto lb_token = md.Take(LbTokenMetadata()).value_or(Slice());
|
||||
client_ip_and_lr_token_ =
|
||||
MakeClientIpAndLrToken(lb_token.as_string_view(), md);
|
||||
// Record the beginning of the request
|
||||
opencensus::stats::Record(
|
||||
{{::grpc::load_reporter::MeasureStartCount(), 1}},
|
||||
{{::grpc::load_reporter::TagKeyToken(),
|
||||
{client_ip_and_lr_token.data(), client_ip_and_lr_token.length()}},
|
||||
{client_ip_and_lr_token_.data(), client_ip_and_lr_token_.length()}},
|
||||
{::grpc::load_reporter::TagKeyHost(),
|
||||
{target_host.data(), target_host.length()}},
|
||||
{target_host_.data(), target_host_.length()}},
|
||||
{::grpc::load_reporter::TagKeyUserId(),
|
||||
{peer_identity_.data(), peer_identity_.length()}}});
|
||||
// Returned promise runs the rest of the request, then reports costs and
|
||||
// records measurements
|
||||
return ArenaPromise<ServerMetadataHandle>(Seq(
|
||||
// Call down the stack
|
||||
next_promise_factory(std::move(call_args)),
|
||||
// And then record the call result
|
||||
[this, client_ip_and_lr_token,
|
||||
target_host](ServerMetadataHandle trailing_metadata) {
|
||||
const auto& costs = trailing_metadata->Take(LbCostBinMetadata());
|
||||
for (const auto& cost : costs) {
|
||||
opencensus::stats::Record(
|
||||
{{::grpc::load_reporter::MeasureOtherCallMetric(), cost.cost}},
|
||||
{{::grpc::load_reporter::TagKeyToken(),
|
||||
{client_ip_and_lr_token.data(),
|
||||
client_ip_and_lr_token.length()}},
|
||||
{::grpc::load_reporter::TagKeyHost(),
|
||||
{target_host.data(), target_host.length()}},
|
||||
{::grpc::load_reporter::TagKeyUserId(),
|
||||
{peer_identity_.data(), peer_identity_.length()}},
|
||||
{::grpc::load_reporter::TagKeyMetricName(),
|
||||
{cost.name.data(), cost.name.length()}}});
|
||||
}
|
||||
GetContext<CallFinalization>()->Add([this, client_ip_and_lr_token,
|
||||
target_host](
|
||||
const grpc_call_final_info*
|
||||
final_info) {
|
||||
if (final_info == nullptr) return;
|
||||
// After the last bytes have been placed on the wire we record
|
||||
// final measurements
|
||||
opencensus::stats::Record(
|
||||
{{::grpc::load_reporter::MeasureEndCount(), 1},
|
||||
{::grpc::load_reporter::MeasureEndBytesSent(),
|
||||
final_info->stats.transport_stream_stats.outgoing.data_bytes},
|
||||
{::grpc::load_reporter::MeasureEndBytesReceived(),
|
||||
final_info->stats.transport_stream_stats.incoming.data_bytes},
|
||||
{::grpc::load_reporter::MeasureEndLatencyMs(),
|
||||
gpr_time_to_millis(final_info->stats.latency)}},
|
||||
{{::grpc::load_reporter::TagKeyToken(),
|
||||
{client_ip_and_lr_token.data(),
|
||||
client_ip_and_lr_token.length()}},
|
||||
{::grpc::load_reporter::TagKeyHost(),
|
||||
{target_host.data(), target_host.length()}},
|
||||
{::grpc::load_reporter::TagKeyUserId(),
|
||||
{peer_identity_.data(), peer_identity_.length()}},
|
||||
{::grpc::load_reporter::TagKeyStatus(),
|
||||
GetStatusTagForStatus(final_info->final_status)}});
|
||||
});
|
||||
return Immediate(std::move(trailing_metadata));
|
||||
}));
|
||||
{filter->peer_identity_.data(), filter->peer_identity_.length()}}});
|
||||
}
|
||||
|
||||
void ServerLoadReportingFilter::Call::OnServerTrailingMetadata(
|
||||
ServerMetadata& md, ServerLoadReportingFilter* filter) {
|
||||
const auto& costs = md.Take(LbCostBinMetadata());
|
||||
for (const auto& cost : costs) {
|
||||
opencensus::stats::Record(
|
||||
{{::grpc::load_reporter::MeasureOtherCallMetric(), cost.cost}},
|
||||
{{::grpc::load_reporter::TagKeyToken(),
|
||||
{client_ip_and_lr_token_.data(), client_ip_and_lr_token_.length()}},
|
||||
{::grpc::load_reporter::TagKeyHost(),
|
||||
{target_host_.data(), target_host_.length()}},
|
||||
{::grpc::load_reporter::TagKeyUserId(),
|
||||
{filter->peer_identity_.data(), filter->peer_identity_.length()}},
|
||||
{::grpc::load_reporter::TagKeyMetricName(),
|
||||
{cost.name.data(), cost.name.length()}}});
|
||||
}
|
||||
}
|
||||
|
||||
void ServerLoadReportingFilter::Call::OnFinalize(
|
||||
const grpc_call_final_info* final_info, ServerLoadReportingFilter* filter) {
|
||||
if (final_info == nullptr) return;
|
||||
// After the last bytes have been placed on the wire we record
|
||||
// final measurements
|
||||
opencensus::stats::Record(
|
||||
{{::grpc::load_reporter::MeasureEndCount(), 1},
|
||||
{::grpc::load_reporter::MeasureEndBytesSent(),
|
||||
final_info->stats.transport_stream_stats.outgoing.data_bytes},
|
||||
{::grpc::load_reporter::MeasureEndBytesReceived(),
|
||||
final_info->stats.transport_stream_stats.incoming.data_bytes},
|
||||
{::grpc::load_reporter::MeasureEndLatencyMs(),
|
||||
gpr_time_to_millis(final_info->stats.latency)}},
|
||||
{{::grpc::load_reporter::TagKeyToken(),
|
||||
{client_ip_and_lr_token_.data(), client_ip_and_lr_token_.length()}},
|
||||
{::grpc::load_reporter::TagKeyHost(),
|
||||
{target_host_.data(), target_host_.length()}},
|
||||
{::grpc::load_reporter::TagKeyUserId(),
|
||||
{filter->peer_identity_.data(), filter->peer_identity_.length()}},
|
||||
{::grpc::load_reporter::TagKeyStatus(),
|
||||
GetStatusTagForStatus(final_info->final_status)}});
|
||||
}
|
||||
|
||||
namespace {
|
||||
|
|
|
|||
|
|
@ -34,7 +34,8 @@
|
|||
|
||||
namespace grpc_core {
|
||||
|
||||
class ServerLoadReportingFilter : public ChannelFilter {
|
||||
class ServerLoadReportingFilter
|
||||
: public ImplementChannelFilter<ServerLoadReportingFilter> {
|
||||
public:
|
||||
static absl::StatusOr<ServerLoadReportingFilter> Create(
|
||||
const ChannelArgs& args, ChannelFilter::Args);
|
||||
|
|
@ -43,9 +44,22 @@ class ServerLoadReportingFilter : public ChannelFilter {
|
|||
const char* peer_identity() { return peer_identity_.c_str(); }
|
||||
size_t peer_identity_len() { return peer_identity_.length(); }
|
||||
|
||||
// Construct a promise for one call.
|
||||
ArenaPromise<ServerMetadataHandle> MakeCallPromise(
|
||||
CallArgs call_args, NextPromiseFactory next_promise_factory) override;
|
||||
class Call {
|
||||
public:
|
||||
void OnClientInitialMetadata(ClientMetadata& md,
|
||||
ServerLoadReportingFilter* filter);
|
||||
static const NoInterceptor OnServerInitialMetadata;
|
||||
void OnServerTrailingMetadata(ServerMetadata& md,
|
||||
ServerLoadReportingFilter* filter);
|
||||
static const NoInterceptor OnClientToServerMessage;
|
||||
static const NoInterceptor OnServerToClientMessage;
|
||||
void OnFinalize(const grpc_call_final_info* final_info,
|
||||
ServerLoadReportingFilter* filter);
|
||||
|
||||
private:
|
||||
std::string client_ip_and_lr_token_;
|
||||
std::string target_host_;
|
||||
};
|
||||
|
||||
private:
|
||||
// The peer's authenticated identity.
|
||||
|
|
|
|||
|
|
@ -536,11 +536,11 @@ void RegisterLoggingFilter(LoggingSink* sink) {
|
|||
g_logging_sink = sink;
|
||||
CoreConfiguration::RegisterBuilder([](CoreConfiguration::Builder* builder) {
|
||||
builder->channel_init()
|
||||
->RegisterFilter(GRPC_SERVER_CHANNEL, &ServerLoggingFilter::kFilter)
|
||||
->RegisterFilter<ServerLoggingFilter>(GRPC_SERVER_CHANNEL)
|
||||
// TODO(yashykt) : Figure out a good place to place this channel arg
|
||||
.IfChannelArg("grpc.experimental.enable_observability", true);
|
||||
builder->channel_init()
|
||||
->RegisterFilter(GRPC_CLIENT_CHANNEL, &ClientLoggingFilter::kFilter)
|
||||
->RegisterFilter<ClientLoggingFilter>(GRPC_CLIENT_CHANNEL)
|
||||
// TODO(yashykt) : Figure out a good place to place this channel arg
|
||||
.IfChannelArg("grpc.experimental.enable_observability", true);
|
||||
});
|
||||
|
|
|
|||
|
|
@ -240,12 +240,10 @@ bool HasMessageSizeLimits(const ChannelArgs& channel_args) {
|
|||
void RegisterMessageSizeFilter(CoreConfiguration::Builder* builder) {
|
||||
MessageSizeParser::Register(builder);
|
||||
builder->channel_init()
|
||||
->RegisterFilter(GRPC_CLIENT_SUBCHANNEL,
|
||||
&ClientMessageSizeFilter::kFilter)
|
||||
->RegisterFilter<ClientMessageSizeFilter>(GRPC_CLIENT_SUBCHANNEL)
|
||||
.ExcludeFromMinimalStack();
|
||||
builder->channel_init()
|
||||
->RegisterFilter(GRPC_CLIENT_DIRECT_CHANNEL,
|
||||
&ClientMessageSizeFilter::kFilter)
|
||||
->RegisterFilter<ClientMessageSizeFilter>(GRPC_CLIENT_DIRECT_CHANNEL)
|
||||
.ExcludeFromMinimalStack()
|
||||
.If(HasMessageSizeLimits)
|
||||
// TODO(ctiller): ordering constraint is here to match the ordering that
|
||||
|
|
@ -253,7 +251,7 @@ void RegisterMessageSizeFilter(CoreConfiguration::Builder* builder) {
|
|||
// filters from first principles.
|
||||
.Before({&grpc_client_deadline_filter});
|
||||
builder->channel_init()
|
||||
->RegisterFilter(GRPC_SERVER_CHANNEL, &ServerMessageSizeFilter::kFilter)
|
||||
->RegisterFilter<ServerMessageSizeFilter>(GRPC_SERVER_CHANNEL)
|
||||
.ExcludeFromMinimalStack()
|
||||
.If(HasMessageSizeLimits)
|
||||
// TODO(ctiller): ordering constraint is here to match the ordering that
|
||||
|
|
|
|||
|
|
@ -47,7 +47,8 @@ namespace grpc_core {
|
|||
|
||||
namespace {
|
||||
|
||||
class ServerConfigSelectorFilter final : public ChannelFilter {
|
||||
class ServerConfigSelectorFilter final
|
||||
: public ImplementChannelFilter<ServerConfigSelectorFilter> {
|
||||
public:
|
||||
~ServerConfigSelectorFilter() override;
|
||||
|
||||
|
|
@ -60,8 +61,16 @@ class ServerConfigSelectorFilter final : public ChannelFilter {
|
|||
static absl::StatusOr<ServerConfigSelectorFilter> Create(
|
||||
const ChannelArgs& args, ChannelFilter::Args);
|
||||
|
||||
ArenaPromise<ServerMetadataHandle> MakeCallPromise(
|
||||
CallArgs call_args, NextPromiseFactory next_promise_factory) override;
|
||||
class Call {
|
||||
public:
|
||||
absl::Status OnClientInitialMetadata(ClientMetadata& md,
|
||||
ServerConfigSelectorFilter* filter);
|
||||
static const NoInterceptor OnServerInitialMetadata;
|
||||
static const NoInterceptor OnServerTrailingMetadata;
|
||||
static const NoInterceptor OnClientToServerMessage;
|
||||
static const NoInterceptor OnServerToClientMessage;
|
||||
static const NoInterceptor OnFinalize;
|
||||
};
|
||||
|
||||
absl::StatusOr<RefCountedPtr<ServerConfigSelector>> config_selector() {
|
||||
MutexLock lock(&state_->mu);
|
||||
|
|
@ -130,25 +139,28 @@ ServerConfigSelectorFilter::~ServerConfigSelectorFilter() {
|
|||
}
|
||||
}
|
||||
|
||||
ArenaPromise<ServerMetadataHandle> ServerConfigSelectorFilter::MakeCallPromise(
|
||||
CallArgs call_args, NextPromiseFactory next_promise_factory) {
|
||||
auto sel = config_selector();
|
||||
if (!sel.ok()) return Immediate(ServerMetadataFromStatus(sel.status()));
|
||||
auto call_config =
|
||||
sel.value()->GetCallConfig(call_args.client_initial_metadata.get());
|
||||
absl::Status ServerConfigSelectorFilter::Call::OnClientInitialMetadata(
|
||||
ClientMetadata& md, ServerConfigSelectorFilter* filter) {
|
||||
auto sel = filter->config_selector();
|
||||
if (!sel.ok()) return sel.status();
|
||||
auto call_config = sel.value()->GetCallConfig(&md);
|
||||
if (!call_config.ok()) {
|
||||
auto r = Immediate(ServerMetadataFromStatus(
|
||||
absl::UnavailableError(StatusToString(call_config.status()))));
|
||||
return std::move(r);
|
||||
return absl::UnavailableError(StatusToString(call_config.status()));
|
||||
}
|
||||
auto* service_config_call_data =
|
||||
GetContext<Arena>()->New<ServiceConfigCallData>(
|
||||
GetContext<Arena>(), GetContext<grpc_call_context_element>());
|
||||
service_config_call_data->SetServiceConfig(
|
||||
std::move(call_config->service_config), call_config->method_configs);
|
||||
return next_promise_factory(std::move(call_args));
|
||||
return absl::OkStatus();
|
||||
}
|
||||
|
||||
const NoInterceptor ServerConfigSelectorFilter::Call::OnServerInitialMetadata;
|
||||
const NoInterceptor ServerConfigSelectorFilter::Call::OnServerTrailingMetadata;
|
||||
const NoInterceptor ServerConfigSelectorFilter::Call::OnClientToServerMessage;
|
||||
const NoInterceptor ServerConfigSelectorFilter::Call::OnServerToClientMessage;
|
||||
const NoInterceptor ServerConfigSelectorFilter::Call::OnFinalize;
|
||||
|
||||
} // namespace
|
||||
|
||||
const grpc_channel_filter kServerConfigSelectorFilter =
|
||||
|
|
|
|||
|
|
@ -0,0 +1,19 @@
|
|||
// Copyright 2023 gRPC authors.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
#include <grpc/support/port_platform.h>
|
||||
|
||||
#include "src/core/ext/transport/chaotic_good/chaotic_good_transport.h"
|
||||
|
||||
namespace grpc_core {} // namespace grpc_core
|
||||
|
|
@ -0,0 +1,111 @@
|
|||
// Copyright 2023 gRPC authors.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
#ifndef GRPC_SRC_CORE_EXT_TRANSPORT_CHAOTIC_GOOD_CHAOTIC_GOOD_TRANSPORT_H
|
||||
#define GRPC_SRC_CORE_EXT_TRANSPORT_CHAOTIC_GOOD_CHAOTIC_GOOD_TRANSPORT_H
|
||||
|
||||
#include <grpc/support/port_platform.h>
|
||||
|
||||
#include "absl/random/random.h"
|
||||
|
||||
#include "src/core/ext/transport/chaotic_good/frame.h"
|
||||
#include "src/core/ext/transport/chaotic_good/frame_header.h"
|
||||
#include "src/core/ext/transport/chttp2/transport/hpack_encoder.h"
|
||||
#include "src/core/lib/promise/if.h"
|
||||
#include "src/core/lib/promise/promise.h"
|
||||
#include "src/core/lib/promise/try_join.h"
|
||||
#include "src/core/lib/promise/try_seq.h"
|
||||
#include "src/core/lib/transport/promise_endpoint.h"
|
||||
|
||||
namespace grpc_core {
|
||||
namespace chaotic_good {
|
||||
|
||||
class ChaoticGoodTransport {
|
||||
public:
|
||||
ChaoticGoodTransport(std::unique_ptr<PromiseEndpoint> control_endpoint,
|
||||
std::unique_ptr<PromiseEndpoint> data_endpoint)
|
||||
: control_endpoint_(std::move(control_endpoint)),
|
||||
data_endpoint_(std::move(data_endpoint)) {}
|
||||
|
||||
auto WriteFrame(const FrameInterface& frame) {
|
||||
auto buffers = frame.Serialize(&encoder_);
|
||||
return TryJoin<absl::StatusOr>(
|
||||
control_endpoint_->Write(std::move(buffers.control)),
|
||||
data_endpoint_->Write(std::move(buffers.data)));
|
||||
}
|
||||
|
||||
// Read frame header and payloads for control and data portions of one frame.
|
||||
// Resolves to StatusOr<tuple<FrameHeader, BufferPair>>.
|
||||
auto ReadFrameBytes() {
|
||||
return TrySeq(
|
||||
control_endpoint_->ReadSlice(FrameHeader::frame_header_size_),
|
||||
[this](Slice read_buffer) {
|
||||
auto frame_header =
|
||||
FrameHeader::Parse(reinterpret_cast<const uint8_t*>(
|
||||
GRPC_SLICE_START_PTR(read_buffer.c_slice())));
|
||||
// Read header and trailers from control endpoint.
|
||||
// Read message padding and message from data endpoint.
|
||||
return If(
|
||||
frame_header.ok(),
|
||||
[this, &frame_header] {
|
||||
const uint32_t message_padding = std::exchange(
|
||||
last_message_padding_, frame_header->message_padding);
|
||||
const uint32_t message_length = frame_header->message_length;
|
||||
return Map(
|
||||
TryJoin<absl::StatusOr>(
|
||||
control_endpoint_->Read(frame_header->GetFrameLength()),
|
||||
TrySeq(data_endpoint_->Read(message_padding),
|
||||
[this, message_length]() {
|
||||
return data_endpoint_->Read(message_length);
|
||||
})),
|
||||
[frame_header = *frame_header](
|
||||
absl::StatusOr<std::tuple<SliceBuffer, SliceBuffer>>
|
||||
buffers)
|
||||
-> absl::StatusOr<std::tuple<FrameHeader, BufferPair>> {
|
||||
if (!buffers.ok()) return buffers.status();
|
||||
return std::tuple<FrameHeader, BufferPair>(
|
||||
frame_header,
|
||||
BufferPair{std::move(std::get<0>(*buffers)),
|
||||
std::move(std::get<1>(*buffers))});
|
||||
});
|
||||
},
|
||||
[&frame_header]()
|
||||
-> absl::StatusOr<std::tuple<FrameHeader, BufferPair>> {
|
||||
return frame_header.status();
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
absl::Status DeserializeFrame(FrameHeader header, BufferPair buffers,
|
||||
Arena* arena, FrameInterface& frame) {
|
||||
return frame.Deserialize(&parser_, header, bitgen_, arena,
|
||||
std::move(buffers));
|
||||
}
|
||||
|
||||
// Skip a frame, but correctly handle any hpack state updates.
|
||||
void SkipFrame(FrameHeader, BufferPair) { Crash("not implemented"); }
|
||||
|
||||
private:
|
||||
const std::unique_ptr<PromiseEndpoint> control_endpoint_;
|
||||
const std::unique_ptr<PromiseEndpoint> data_endpoint_;
|
||||
uint32_t last_message_padding_ = 0;
|
||||
HPackCompressor encoder_;
|
||||
HPackParser parser_;
|
||||
absl::BitGen bitgen_;
|
||||
};
|
||||
|
||||
} // namespace chaotic_good
|
||||
} // namespace grpc_core
|
||||
|
||||
#endif // GRPC_SRC_CORE_EXT_TRANSPORT_CHAOTIC_GOOD_CHAOTIC_GOOD_TRANSPORT_H
|
||||
|
|
@ -17,9 +17,11 @@
|
|||
#include "src/core/ext/transport/chaotic_good/client_transport.h"
|
||||
|
||||
#include <cstdint>
|
||||
#include <cstdlib>
|
||||
#include <memory>
|
||||
#include <string>
|
||||
#include <tuple>
|
||||
#include <utility>
|
||||
|
||||
#include "absl/random/bit_gen_ref.h"
|
||||
#include "absl/random/random.h"
|
||||
|
|
@ -36,9 +38,13 @@
|
|||
#include "src/core/lib/gprpp/ref_counted_ptr.h"
|
||||
#include "src/core/lib/iomgr/exec_ctx.h"
|
||||
#include "src/core/lib/promise/activity.h"
|
||||
#include "src/core/lib/promise/all_ok.h"
|
||||
#include "src/core/lib/promise/event_engine_wakeup_scheduler.h"
|
||||
#include "src/core/lib/promise/loop.h"
|
||||
#include "src/core/lib/promise/map.h"
|
||||
#include "src/core/lib/promise/promise.h"
|
||||
#include "src/core/lib/promise/try_join.h"
|
||||
#include "src/core/lib/promise/try_seq.h"
|
||||
#include "src/core/lib/resource_quota/arena.h"
|
||||
#include "src/core/lib/resource_quota/resource_quota.h"
|
||||
#include "src/core/lib/slice/slice.h"
|
||||
|
|
@ -49,59 +55,15 @@
|
|||
namespace grpc_core {
|
||||
namespace chaotic_good {
|
||||
|
||||
ClientTransport::ClientTransport(
|
||||
std::unique_ptr<PromiseEndpoint> control_endpoint,
|
||||
std::unique_ptr<PromiseEndpoint> data_endpoint,
|
||||
std::shared_ptr<grpc_event_engine::experimental::EventEngine> event_engine)
|
||||
: outgoing_frames_(MpscReceiver<ClientFrame>(4)),
|
||||
control_endpoint_(std::move(control_endpoint)),
|
||||
data_endpoint_(std::move(data_endpoint)),
|
||||
control_endpoint_write_buffer_(SliceBuffer()),
|
||||
data_endpoint_write_buffer_(SliceBuffer()),
|
||||
hpack_compressor_(std::make_unique<HPackCompressor>()),
|
||||
hpack_parser_(std::make_unique<HPackParser>()),
|
||||
memory_allocator_(
|
||||
ResourceQuota::Default()->memory_quota()->CreateMemoryAllocator(
|
||||
"client_transport")),
|
||||
arena_(MakeScopedArena(1024, &memory_allocator_)),
|
||||
context_(arena_.get()),
|
||||
event_engine_(event_engine) {
|
||||
auto write_loop = Loop([this] {
|
||||
auto ChaoticGoodClientTransport::TransportWriteLoop() {
|
||||
return Loop([this] {
|
||||
return TrySeq(
|
||||
// Get next outgoing frame.
|
||||
this->outgoing_frames_.Next(),
|
||||
// Construct data buffers that will be sent to the endpoints.
|
||||
outgoing_frames_.Next(),
|
||||
// Serialize and write it out.
|
||||
[this](ClientFrame client_frame) {
|
||||
MatchMutable(
|
||||
&client_frame,
|
||||
[this](ClientFragmentFrame* frame) mutable {
|
||||
control_endpoint_write_buffer_.Append(
|
||||
frame->Serialize(hpack_compressor_.get()));
|
||||
if (frame->message != nullptr) {
|
||||
std::string message_padding(frame->message_padding, '0');
|
||||
Slice slice(grpc_slice_from_cpp_string(message_padding));
|
||||
// Append message padding to data_endpoint_buffer.
|
||||
data_endpoint_write_buffer_.Append(std::move(slice));
|
||||
// Append message payload to data_endpoint_buffer.
|
||||
frame->message->payload()->MoveFirstNBytesIntoSliceBuffer(
|
||||
frame->message->payload()->Length(),
|
||||
data_endpoint_write_buffer_);
|
||||
}
|
||||
},
|
||||
[this](CancelFrame* frame) mutable {
|
||||
control_endpoint_write_buffer_.Append(
|
||||
frame->Serialize(hpack_compressor_.get()));
|
||||
});
|
||||
return absl::OkStatus();
|
||||
return transport_.WriteFrame(GetFrameInterface(client_frame));
|
||||
},
|
||||
// Write buffers to corresponding endpoints concurrently.
|
||||
[this]() {
|
||||
return TryJoin<absl::StatusOr>(
|
||||
control_endpoint_->Write(
|
||||
std::move(control_endpoint_write_buffer_)),
|
||||
data_endpoint_->Write(std::move(data_endpoint_write_buffer_)));
|
||||
},
|
||||
// Finish writes to difference endpoints and continue the loop.
|
||||
[]() -> LoopCtl<absl::Status> {
|
||||
// The write failures will be caught in TrySeq and exit loop.
|
||||
// Therefore, only need to return Continue() in the last lambda
|
||||
|
|
@ -109,78 +71,215 @@ ClientTransport::ClientTransport(
|
|||
return Continue();
|
||||
});
|
||||
});
|
||||
writer_ = MakeActivity(
|
||||
// Continuously write next outgoing frames to promise endpoints.
|
||||
std::move(write_loop), EventEngineWakeupScheduler(event_engine_),
|
||||
[this](absl::Status status) {
|
||||
if (!(status.ok() || status.code() == absl::StatusCode::kCancelled)) {
|
||||
this->AbortWithError();
|
||||
}
|
||||
}
|
||||
|
||||
absl::optional<CallHandler> ChaoticGoodClientTransport::LookupStream(
|
||||
uint32_t stream_id) {
|
||||
MutexLock lock(&mu_);
|
||||
auto it = stream_map_.find(stream_id);
|
||||
if (it == stream_map_.end()) {
|
||||
return absl::nullopt;
|
||||
}
|
||||
return it->second;
|
||||
}
|
||||
|
||||
auto ChaoticGoodClientTransport::PushFrameIntoCall(ServerFragmentFrame frame,
|
||||
CallHandler call_handler) {
|
||||
auto& headers = frame.headers;
|
||||
return TrySeq(
|
||||
If(
|
||||
headers != nullptr,
|
||||
[call_handler, &headers]() mutable {
|
||||
return call_handler.PushServerInitialMetadata(std::move(headers));
|
||||
},
|
||||
[]() -> StatusFlag { return Success{}; }),
|
||||
[call_handler, message = std::move(frame.message)]() mutable {
|
||||
return If(
|
||||
message.has_value(),
|
||||
[&call_handler, &message]() mutable {
|
||||
return call_handler.PushMessage(std::move(message->message));
|
||||
},
|
||||
[]() -> StatusFlag { return Success{}; });
|
||||
},
|
||||
// Hold Arena in activity for GetContext<Arena> usage.
|
||||
arena_.get());
|
||||
auto read_loop = Loop([this] {
|
||||
[call_handler, trailers = std::move(frame.trailers)]() mutable {
|
||||
return If(
|
||||
trailers != nullptr,
|
||||
[&call_handler, &trailers]() mutable {
|
||||
return call_handler.PushServerTrailingMetadata(
|
||||
std::move(trailers));
|
||||
},
|
||||
[]() -> StatusFlag { return Success{}; });
|
||||
});
|
||||
}
|
||||
|
||||
auto ChaoticGoodClientTransport::TransportReadLoop() {
|
||||
return Loop([this] {
|
||||
return TrySeq(
|
||||
// Read frame header from control endpoint.
|
||||
// TODO(ladynana): remove memcpy in ReadSlice.
|
||||
this->control_endpoint_->ReadSlice(FrameHeader::frame_header_size_),
|
||||
// Read different parts of the server frame from control/data endpoints
|
||||
// based on frame header.
|
||||
[this](Slice read_buffer) mutable {
|
||||
frame_header_ = std::make_shared<FrameHeader>(
|
||||
FrameHeader::Parse(
|
||||
reinterpret_cast<const uint8_t*>(
|
||||
GRPC_SLICE_START_PTR(read_buffer.c_slice())))
|
||||
.value());
|
||||
// Read header and trailers from control endpoint.
|
||||
// Read message padding and message from data endpoint.
|
||||
return TryJoin<absl::StatusOr>(
|
||||
control_endpoint_->Read(frame_header_->GetFrameLength()),
|
||||
data_endpoint_->Read(frame_header_->message_padding +
|
||||
frame_header_->message_length));
|
||||
},
|
||||
// Construct and send the server frame to corresponding stream.
|
||||
[this](std::tuple<SliceBuffer, SliceBuffer> ret) mutable {
|
||||
control_endpoint_read_buffer_ = std::move(std::get<0>(ret));
|
||||
// Discard message padding and only keep message in data read buffer.
|
||||
std::get<1>(ret).MoveLastNBytesIntoSliceBuffer(
|
||||
frame_header_->message_length, data_endpoint_read_buffer_);
|
||||
ServerFragmentFrame frame;
|
||||
// Initialized to get this_cpu() info in global_stat().
|
||||
ExecCtx exec_ctx;
|
||||
// Deserialize frame from read buffer.
|
||||
absl::BitGen bitgen;
|
||||
auto status = frame.Deserialize(hpack_parser_.get(), *frame_header_,
|
||||
absl::BitGenRef(bitgen),
|
||||
control_endpoint_read_buffer_);
|
||||
GPR_ASSERT(status.ok());
|
||||
// Move message into frame.
|
||||
frame.message = arena_->MakePooled<Message>(
|
||||
std::move(data_endpoint_read_buffer_), 0);
|
||||
MutexLock lock(&mu_);
|
||||
const uint32_t stream_id = frame_header_->stream_id;
|
||||
return stream_map_[stream_id]->Push(ServerFrame(std::move(frame)));
|
||||
},
|
||||
// Check if send frame to corresponding stream successfully.
|
||||
[](bool ret) -> LoopCtl<absl::Status> {
|
||||
if (ret) {
|
||||
// Send incoming frames successfully.
|
||||
return Continue();
|
||||
} else {
|
||||
return absl::InternalError("Send incoming frames failed.");
|
||||
transport_.ReadFrameBytes(),
|
||||
[](std::tuple<FrameHeader, BufferPair> frame_bytes)
|
||||
-> absl::StatusOr<std::tuple<FrameHeader, BufferPair>> {
|
||||
const auto& frame_header = std::get<0>(frame_bytes);
|
||||
if (frame_header.type != FrameType::kFragment) {
|
||||
return absl::InternalError(
|
||||
absl::StrCat("Expected fragment frame, got ",
|
||||
static_cast<int>(frame_header.type)));
|
||||
}
|
||||
});
|
||||
return frame_bytes;
|
||||
},
|
||||
[this](std::tuple<FrameHeader, BufferPair> frame_bytes) {
|
||||
const auto& frame_header = std::get<0>(frame_bytes);
|
||||
auto& buffers = std::get<1>(frame_bytes);
|
||||
absl::optional<CallHandler> call_handler =
|
||||
LookupStream(frame_header.stream_id);
|
||||
ServerFragmentFrame frame;
|
||||
absl::Status deserialize_status;
|
||||
if (call_handler.has_value()) {
|
||||
deserialize_status = transport_.DeserializeFrame(
|
||||
frame_header, std::move(buffers), call_handler->arena(), frame);
|
||||
} else {
|
||||
// Stream not found, skip the frame.
|
||||
transport_.SkipFrame(frame_header, std::move(buffers));
|
||||
deserialize_status = absl::OkStatus();
|
||||
}
|
||||
return If(
|
||||
deserialize_status.ok() && call_handler.has_value(),
|
||||
[this, &frame, &call_handler]() {
|
||||
return call_handler->SpawnWaitable(
|
||||
"push-frame", [this, call_handler = *call_handler,
|
||||
frame = std::move(frame)]() mutable {
|
||||
return Map(call_handler.CancelIfFails(PushFrameIntoCall(
|
||||
std::move(frame), call_handler)),
|
||||
[](StatusFlag f) {
|
||||
return StatusCast<absl::Status>(f);
|
||||
});
|
||||
});
|
||||
},
|
||||
[&deserialize_status]() -> absl::Status {
|
||||
// Stream not found, nothing to do.
|
||||
return std::move(deserialize_status);
|
||||
});
|
||||
},
|
||||
[]() -> LoopCtl<absl::Status> { return Continue{}; });
|
||||
});
|
||||
reader_ = MakeActivity(
|
||||
// Continuously read next incoming frames from promise endpoints.
|
||||
std::move(read_loop), EventEngineWakeupScheduler(event_engine_),
|
||||
[this](absl::Status status) {
|
||||
if (!(status.ok() || status.code() == absl::StatusCode::kCancelled)) {
|
||||
this->AbortWithError();
|
||||
}
|
||||
}
|
||||
|
||||
auto ChaoticGoodClientTransport::OnTransportActivityDone() {
|
||||
return [this](absl::Status status) {
|
||||
if (!(status.ok() || status.code() == absl::StatusCode::kCancelled)) {
|
||||
this->AbortWithError();
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
ChaoticGoodClientTransport::ChaoticGoodClientTransport(
|
||||
std::unique_ptr<PromiseEndpoint> control_endpoint,
|
||||
std::unique_ptr<PromiseEndpoint> data_endpoint,
|
||||
std::shared_ptr<grpc_event_engine::experimental::EventEngine> event_engine)
|
||||
: outgoing_frames_(4),
|
||||
transport_(std::move(control_endpoint), std::move(data_endpoint)),
|
||||
writer_{
|
||||
MakeActivity(
|
||||
// Continuously write next outgoing frames to promise endpoints.
|
||||
TransportWriteLoop(), EventEngineWakeupScheduler(event_engine),
|
||||
OnTransportActivityDone()),
|
||||
},
|
||||
// Hold Arena in activity for GetContext<Arena> usage.
|
||||
arena_.get());
|
||||
reader_{MakeActivity(
|
||||
// Continuously read next incoming frames from promise endpoints.
|
||||
TransportReadLoop(), EventEngineWakeupScheduler(event_engine),
|
||||
OnTransportActivityDone())} {}
|
||||
|
||||
ChaoticGoodClientTransport::~ChaoticGoodClientTransport() {
|
||||
if (writer_ != nullptr) {
|
||||
writer_.reset();
|
||||
}
|
||||
if (reader_ != nullptr) {
|
||||
reader_.reset();
|
||||
}
|
||||
}
|
||||
|
||||
void ChaoticGoodClientTransport::AbortWithError() {
|
||||
// Mark transport as unavailable when the endpoint write/read failed.
|
||||
// Close all the available pipes.
|
||||
outgoing_frames_.MarkClosed();
|
||||
ReleasableMutexLock lock(&mu_);
|
||||
StreamMap stream_map = std::move(stream_map_);
|
||||
stream_map_.clear();
|
||||
lock.Release();
|
||||
for (const auto& pair : stream_map) {
|
||||
auto call_handler = pair.second;
|
||||
call_handler.SpawnInfallible("cancel", [call_handler]() mutable {
|
||||
call_handler.Cancel(ServerMetadataFromStatus(
|
||||
absl::UnavailableError("Transport closed.")));
|
||||
return Empty{};
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
uint32_t ChaoticGoodClientTransport::MakeStream(CallHandler call_handler) {
|
||||
ReleasableMutexLock lock(&mu_);
|
||||
const uint32_t stream_id = next_stream_id_++;
|
||||
stream_map_.emplace(stream_id, call_handler);
|
||||
lock.Release();
|
||||
call_handler.OnDone([this, stream_id]() {
|
||||
MutexLock lock(&mu_);
|
||||
stream_map_.erase(stream_id);
|
||||
});
|
||||
return stream_id;
|
||||
}
|
||||
|
||||
auto ChaoticGoodClientTransport::CallOutboundLoop(uint32_t stream_id,
|
||||
CallHandler call_handler) {
|
||||
auto send_fragment = [stream_id,
|
||||
outgoing_frames = outgoing_frames_.MakeSender()](
|
||||
ClientFragmentFrame frame) mutable {
|
||||
frame.stream_id = stream_id;
|
||||
return Map(outgoing_frames.Send(std::move(frame)),
|
||||
[](bool success) -> absl::Status {
|
||||
if (!success) {
|
||||
// Failed to send outgoing frame.
|
||||
return absl::UnavailableError("Transport closed.");
|
||||
}
|
||||
return absl::OkStatus();
|
||||
});
|
||||
};
|
||||
return TrySeq(
|
||||
// Wait for initial metadata then send it out.
|
||||
call_handler.PullClientInitialMetadata(),
|
||||
[send_fragment](ClientMetadataHandle md) mutable {
|
||||
ClientFragmentFrame frame;
|
||||
frame.headers = std::move(md);
|
||||
return send_fragment(std::move(frame));
|
||||
},
|
||||
// Continuously send client frame with client to server messages.
|
||||
ForEach(OutgoingMessages(call_handler),
|
||||
[send_fragment,
|
||||
aligned_bytes = aligned_bytes_](MessageHandle message) mutable {
|
||||
ClientFragmentFrame frame;
|
||||
// Construct frame header (flags, header_length and
|
||||
// trailer_length will be added in serialization).
|
||||
const uint32_t message_length = message->payload()->Length();
|
||||
const uint32_t padding =
|
||||
message_length % aligned_bytes == 0
|
||||
? 0
|
||||
: aligned_bytes - message_length % aligned_bytes;
|
||||
GPR_ASSERT((message_length + padding) % aligned_bytes == 0);
|
||||
frame.message = FragmentMessage(std::move(message), padding,
|
||||
message_length);
|
||||
return send_fragment(std::move(frame));
|
||||
}),
|
||||
[send_fragment]() mutable {
|
||||
ClientFragmentFrame frame;
|
||||
frame.end_of_stream = true;
|
||||
return send_fragment(std::move(frame));
|
||||
});
|
||||
}
|
||||
|
||||
void ChaoticGoodClientTransport::StartCall(CallHandler call_handler) {
|
||||
// At this point, the connection is set up.
|
||||
// Start sending data frames.
|
||||
call_handler.SpawnGuarded("outbound_loop", [this, call_handler]() mutable {
|
||||
return CallOutboundLoop(MakeStream(call_handler), call_handler);
|
||||
});
|
||||
}
|
||||
|
||||
} // namespace chaotic_good
|
||||
|
|
|
|||
|
|
@ -20,6 +20,7 @@
|
|||
#include <stdint.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#include <cstdint>
|
||||
#include <initializer_list> // IWYU pragma: keep
|
||||
#include <map>
|
||||
#include <memory>
|
||||
|
|
@ -28,6 +29,8 @@
|
|||
#include <utility>
|
||||
|
||||
#include "absl/base/thread_annotations.h"
|
||||
#include "absl/container/flat_hash_map.h"
|
||||
#include "absl/random/random.h"
|
||||
#include "absl/status/status.h"
|
||||
#include "absl/types/optional.h"
|
||||
#include "absl/types/variant.h"
|
||||
|
|
@ -35,6 +38,7 @@
|
|||
#include <grpc/event_engine/event_engine.h>
|
||||
#include <grpc/event_engine/memory_allocator.h>
|
||||
|
||||
#include "src/core/ext/transport/chaotic_good/chaotic_good_transport.h"
|
||||
#include "src/core/ext/transport/chaotic_good/frame.h"
|
||||
#include "src/core/ext/transport/chaotic_good/frame_header.h"
|
||||
#include "src/core/ext/transport/chttp2/transport/hpack_encoder.h"
|
||||
|
|
@ -61,178 +65,56 @@
|
|||
namespace grpc_core {
|
||||
namespace chaotic_good {
|
||||
|
||||
class ClientTransport {
|
||||
class ChaoticGoodClientTransport final : public Transport,
|
||||
public ClientTransport {
|
||||
public:
|
||||
ClientTransport(std::unique_ptr<PromiseEndpoint> control_endpoint,
|
||||
std::unique_ptr<PromiseEndpoint> data_endpoint,
|
||||
std::shared_ptr<grpc_event_engine::experimental::EventEngine>
|
||||
event_engine);
|
||||
~ClientTransport() {
|
||||
if (writer_ != nullptr) {
|
||||
writer_.reset();
|
||||
}
|
||||
if (reader_ != nullptr) {
|
||||
reader_.reset();
|
||||
}
|
||||
}
|
||||
void AbortWithError() {
|
||||
// Mark transport as unavailable when the endpoint write/read failed.
|
||||
// Close all the available pipes.
|
||||
if (!outgoing_frames_.IsClosed()) {
|
||||
outgoing_frames_.MarkClosed();
|
||||
}
|
||||
MutexLock lock(&mu_);
|
||||
for (const auto& pair : stream_map_) {
|
||||
if (!pair.second->IsClose()) {
|
||||
pair.second->MarkClose();
|
||||
}
|
||||
}
|
||||
}
|
||||
auto AddStream(CallArgs call_args) {
|
||||
// At this point, the connection is set up.
|
||||
// Start sending data frames.
|
||||
uint32_t stream_id;
|
||||
InterActivityPipe<ServerFrame, server_frame_queue_size_> pipe_server_frames;
|
||||
{
|
||||
MutexLock lock(&mu_);
|
||||
stream_id = next_stream_id_++;
|
||||
stream_map_.insert(
|
||||
std::pair<uint32_t,
|
||||
std::shared_ptr<InterActivityPipe<
|
||||
ServerFrame, server_frame_queue_size_>::Sender>>(
|
||||
stream_id, std::make_shared<InterActivityPipe<
|
||||
ServerFrame, server_frame_queue_size_>::Sender>(
|
||||
std::move(pipe_server_frames.sender))));
|
||||
}
|
||||
return TrySeq(
|
||||
TryJoin<absl::StatusOr>(
|
||||
// Continuously send client frame with client to server messages.
|
||||
ForEach(std::move(*call_args.client_to_server_messages),
|
||||
[stream_id, initial_frame = true,
|
||||
client_initial_metadata =
|
||||
std::move(call_args.client_initial_metadata),
|
||||
outgoing_frames = outgoing_frames_.MakeSender(),
|
||||
this](MessageHandle result) mutable {
|
||||
ClientFragmentFrame frame;
|
||||
// Construct frame header (flags, header_length and
|
||||
// trailer_length will be added in serialization).
|
||||
uint32_t message_length = result->payload()->Length();
|
||||
frame.stream_id = stream_id;
|
||||
frame.message_padding = message_length % aligned_bytes;
|
||||
frame.message = std::move(result);
|
||||
if (initial_frame) {
|
||||
// Send initial frame with client intial metadata.
|
||||
frame.headers = std::move(client_initial_metadata);
|
||||
initial_frame = false;
|
||||
}
|
||||
return TrySeq(
|
||||
outgoing_frames.Send(ClientFrame(std::move(frame))),
|
||||
[](bool success) -> absl::Status {
|
||||
if (!success) {
|
||||
// TODO(ladynana): propagate the actual error
|
||||
// message from EventEngine.
|
||||
return absl::UnavailableError(
|
||||
"Transport closed due to endpoint write/read "
|
||||
"failed.");
|
||||
}
|
||||
return absl::OkStatus();
|
||||
});
|
||||
}),
|
||||
// Continuously receive server frames from endpoints and save
|
||||
// results to call_args.
|
||||
Loop([server_initial_metadata = call_args.server_initial_metadata,
|
||||
server_to_client_messages =
|
||||
call_args.server_to_client_messages,
|
||||
receiver = std::move(pipe_server_frames.receiver)]() mutable {
|
||||
return TrySeq(
|
||||
// Receive incoming server frame.
|
||||
receiver.Next(),
|
||||
// Save incomming frame results to call_args.
|
||||
[server_initial_metadata, server_to_client_messages](
|
||||
absl::optional<ServerFrame> server_frame) mutable {
|
||||
bool transport_closed = false;
|
||||
ServerFragmentFrame frame;
|
||||
if (!server_frame.has_value()) {
|
||||
// Incoming server frame pipe is closed, which only
|
||||
// happens when transport is aborted.
|
||||
transport_closed = true;
|
||||
} else {
|
||||
frame = std::move(
|
||||
absl::get<ServerFragmentFrame>(*server_frame));
|
||||
};
|
||||
bool has_headers = (frame.headers != nullptr);
|
||||
bool has_message = (frame.message != nullptr);
|
||||
bool has_trailers = (frame.trailers != nullptr);
|
||||
return TrySeq(
|
||||
If((!transport_closed) && has_headers,
|
||||
[server_initial_metadata,
|
||||
headers = std::move(frame.headers)]() mutable {
|
||||
return server_initial_metadata->Push(
|
||||
std::move(headers));
|
||||
},
|
||||
[] { return false; }),
|
||||
If((!transport_closed) && has_message,
|
||||
[server_to_client_messages,
|
||||
message = std::move(frame.message)]() mutable {
|
||||
return server_to_client_messages->Push(
|
||||
std::move(message));
|
||||
},
|
||||
[] { return false; }),
|
||||
If((!transport_closed) && has_trailers,
|
||||
[trailers = std::move(frame.trailers)]() mutable
|
||||
-> LoopCtl<ServerMetadataHandle> {
|
||||
return std::move(trailers);
|
||||
},
|
||||
[transport_closed]()
|
||||
-> LoopCtl<ServerMetadataHandle> {
|
||||
if (transport_closed) {
|
||||
// TODO(ladynana): propagate the actual error
|
||||
// message from EventEngine.
|
||||
return ServerMetadataFromStatus(
|
||||
absl::UnavailableError(
|
||||
"Transport closed due to endpoint "
|
||||
"write/read failed."));
|
||||
}
|
||||
return Continue();
|
||||
}));
|
||||
});
|
||||
})),
|
||||
[](std::tuple<Empty, ServerMetadataHandle> ret) {
|
||||
return std::move(std::get<1>(ret));
|
||||
});
|
||||
}
|
||||
ChaoticGoodClientTransport(
|
||||
std::unique_ptr<PromiseEndpoint> control_endpoint,
|
||||
std::unique_ptr<PromiseEndpoint> data_endpoint,
|
||||
std::shared_ptr<grpc_event_engine::experimental::EventEngine>
|
||||
event_engine);
|
||||
~ChaoticGoodClientTransport() override;
|
||||
|
||||
FilterStackTransport* filter_stack_transport() override { return nullptr; }
|
||||
ClientTransport* client_transport() override { return this; }
|
||||
ServerTransport* server_transport() override { return nullptr; }
|
||||
absl::string_view GetTransportName() const override { return "chaotic_good"; }
|
||||
void SetPollset(grpc_stream*, grpc_pollset*) override {}
|
||||
void SetPollsetSet(grpc_stream*, grpc_pollset_set*) override {}
|
||||
void PerformOp(grpc_transport_op*) override { Crash("unimplemented"); }
|
||||
grpc_endpoint* GetEndpoint() override { return nullptr; }
|
||||
void Orphan() override { delete this; }
|
||||
|
||||
void StartCall(CallHandler call_handler) override;
|
||||
void AbortWithError();
|
||||
|
||||
private:
|
||||
// Queue size of each stream pipe is set to 2, so that for each stream read it
|
||||
// will queue at most 2 frames.
|
||||
static const size_t kServerFrameQueueSize = 2;
|
||||
using StreamMap = absl::flat_hash_map<uint32_t, CallHandler>;
|
||||
|
||||
uint32_t MakeStream(CallHandler call_handler);
|
||||
absl::optional<CallHandler> LookupStream(uint32_t stream_id);
|
||||
auto CallOutboundLoop(uint32_t stream_id, CallHandler call_handler);
|
||||
auto OnTransportActivityDone();
|
||||
auto TransportWriteLoop();
|
||||
auto TransportReadLoop();
|
||||
// Push one frame into a call
|
||||
auto PushFrameIntoCall(ServerFragmentFrame frame, CallHandler call_handler);
|
||||
|
||||
// Max buffer is set to 4, so that for stream writes each time it will queue
|
||||
// at most 2 frames.
|
||||
MpscReceiver<ClientFrame> outgoing_frames_;
|
||||
// Queue size of each stream pipe is set to 2, so that for each stream read it
|
||||
// will queue at most 2 frames.
|
||||
static const size_t server_frame_queue_size_ = 2;
|
||||
ChaoticGoodTransport transport_;
|
||||
// Assigned aligned bytes from setting frame.
|
||||
size_t aligned_bytes = 64;
|
||||
size_t aligned_bytes_ = 64;
|
||||
Mutex mu_;
|
||||
uint32_t next_stream_id_ ABSL_GUARDED_BY(mu_) = 1;
|
||||
// Map of stream incoming server frames, key is stream_id.
|
||||
std::map<uint32_t, std::shared_ptr<InterActivityPipe<
|
||||
ServerFrame, server_frame_queue_size_>::Sender>>
|
||||
stream_map_ ABSL_GUARDED_BY(mu_);
|
||||
StreamMap stream_map_ ABSL_GUARDED_BY(mu_);
|
||||
ActivityPtr writer_;
|
||||
ActivityPtr reader_;
|
||||
std::unique_ptr<PromiseEndpoint> control_endpoint_;
|
||||
std::unique_ptr<PromiseEndpoint> data_endpoint_;
|
||||
SliceBuffer control_endpoint_write_buffer_;
|
||||
SliceBuffer data_endpoint_write_buffer_;
|
||||
SliceBuffer control_endpoint_read_buffer_;
|
||||
SliceBuffer data_endpoint_read_buffer_;
|
||||
std::unique_ptr<HPackCompressor> hpack_compressor_;
|
||||
std::unique_ptr<HPackParser> hpack_parser_;
|
||||
std::shared_ptr<FrameHeader> frame_header_;
|
||||
MemoryAllocator memory_allocator_;
|
||||
ScopedArenaPtr arena_;
|
||||
promise_detail::Context<Arena> context_;
|
||||
// Use to synchronize writer_ and reader_ activity with outside activities;
|
||||
std::shared_ptr<grpc_event_engine::experimental::EventEngine> event_engine_;
|
||||
};
|
||||
|
||||
} // namespace chaotic_good
|
||||
|
|
|
|||
|
|
@ -40,6 +40,10 @@
|
|||
namespace grpc_core {
|
||||
namespace chaotic_good {
|
||||
|
||||
namespace {
|
||||
const uint8_t kZeros[64] = {};
|
||||
}
|
||||
|
||||
namespace {
|
||||
const NoDestruct<Slice> kZeroSlice{[] {
|
||||
// Frame header size is fixed to 24 bytes.
|
||||
|
|
@ -50,53 +54,65 @@ const NoDestruct<Slice> kZeroSlice{[] {
|
|||
|
||||
class FrameSerializer {
|
||||
public:
|
||||
explicit FrameSerializer(FrameType frame_type, uint32_t stream_id,
|
||||
uint32_t message_padding) {
|
||||
output_.AppendIndexed(kZeroSlice->Copy());
|
||||
explicit FrameSerializer(FrameType frame_type, uint32_t stream_id) {
|
||||
output_.control.AppendIndexed(kZeroSlice->Copy());
|
||||
header_.type = frame_type;
|
||||
header_.stream_id = stream_id;
|
||||
header_.message_padding = message_padding;
|
||||
header_.flags.SetAll(false);
|
||||
}
|
||||
|
||||
// If called, must be called before AddTrailers, Finish.
|
||||
SliceBuffer& AddHeaders() {
|
||||
header_.flags.set(0);
|
||||
return output_;
|
||||
}
|
||||
// If called, must be called before Finish.
|
||||
SliceBuffer& AddTrailers() {
|
||||
header_.flags.set(1);
|
||||
header_.header_length = output_.Length() - FrameHeader::frame_header_size_;
|
||||
return output_;
|
||||
return output_.control;
|
||||
}
|
||||
|
||||
SliceBuffer Finish() {
|
||||
void AddMessage(const FragmentMessage& msg) {
|
||||
header_.flags.set(1);
|
||||
header_.message_length = msg.length;
|
||||
header_.message_padding = msg.padding;
|
||||
output_.data = msg.message->payload()->Copy();
|
||||
if (msg.padding != 0) {
|
||||
output_.data.Append(Slice::FromStaticBuffer(kZeros, msg.padding));
|
||||
}
|
||||
}
|
||||
|
||||
// If called, must be called before Finish.
|
||||
SliceBuffer& AddTrailers() {
|
||||
header_.flags.set(2);
|
||||
header_.header_length =
|
||||
output_.control.Length() - FrameHeader::frame_header_size_;
|
||||
return output_.control;
|
||||
}
|
||||
|
||||
BufferPair Finish() {
|
||||
// Calculate frame header_length or trailer_length if available.
|
||||
if (header_.flags.is_set(1)) {
|
||||
if (header_.flags.is_set(2)) {
|
||||
// Header length is already known in AddTrailers().
|
||||
header_.trailer_length = output_.Length() - header_.header_length -
|
||||
header_.trailer_length = output_.control.Length() -
|
||||
header_.header_length -
|
||||
FrameHeader::frame_header_size_;
|
||||
} else {
|
||||
if (header_.flags.is_set(0)) {
|
||||
// Calculate frame header length in Finish() since AddTrailers() isn't
|
||||
// called.
|
||||
header_.header_length =
|
||||
output_.Length() - FrameHeader::frame_header_size_;
|
||||
output_.control.Length() - FrameHeader::frame_header_size_;
|
||||
}
|
||||
}
|
||||
header_.Serialize(
|
||||
GRPC_SLICE_START_PTR(output_.c_slice_buffer()->slices[0]));
|
||||
GRPC_SLICE_START_PTR(output_.control.c_slice_buffer()->slices[0]));
|
||||
return std::move(output_);
|
||||
}
|
||||
|
||||
private:
|
||||
FrameHeader header_;
|
||||
SliceBuffer output_;
|
||||
BufferPair output_;
|
||||
};
|
||||
|
||||
class FrameDeserializer {
|
||||
public:
|
||||
FrameDeserializer(const FrameHeader& header, SliceBuffer& input)
|
||||
FrameDeserializer(const FrameHeader& header, BufferPair& input)
|
||||
: header_(header), input_(input) {}
|
||||
const FrameHeader& header() const { return header_; }
|
||||
// If called, must be called before ReceiveTrailers, Finish.
|
||||
|
|
@ -118,28 +134,27 @@ class FrameDeserializer {
|
|||
private:
|
||||
absl::StatusOr<SliceBuffer> Take(uint32_t length) {
|
||||
if (length == 0) return SliceBuffer{};
|
||||
if (input_.Length() < length) {
|
||||
if (input_.control.Length() < length) {
|
||||
return absl::InvalidArgumentError(
|
||||
"Frame too short (insufficient payload)");
|
||||
}
|
||||
SliceBuffer out;
|
||||
input_.MoveFirstNBytesIntoSliceBuffer(length, out);
|
||||
input_.control.MoveFirstNBytesIntoSliceBuffer(length, out);
|
||||
return std::move(out);
|
||||
}
|
||||
FrameHeader header_;
|
||||
SliceBuffer& input_;
|
||||
BufferPair& input_;
|
||||
};
|
||||
|
||||
template <typename Metadata>
|
||||
absl::StatusOr<Arena::PoolPtr<Metadata>> ReadMetadata(
|
||||
HPackParser* parser, absl::StatusOr<SliceBuffer> maybe_slices,
|
||||
uint32_t stream_id, bool is_header, bool is_client,
|
||||
absl::BitGenRef bitsrc) {
|
||||
uint32_t stream_id, bool is_header, bool is_client, absl::BitGenRef bitsrc,
|
||||
Arena* arena) {
|
||||
if (!maybe_slices.ok()) return maybe_slices.status();
|
||||
auto& slices = *maybe_slices;
|
||||
auto arena = GetContext<Arena>();
|
||||
GPR_ASSERT(arena != nullptr);
|
||||
Arena::PoolPtr<Metadata> metadata = arena->MakePooled<Metadata>(arena);
|
||||
Arena::PoolPtr<Metadata> metadata = Arena::MakePooled<Metadata>(arena);
|
||||
parser->BeginFrame(
|
||||
metadata.get(), std::numeric_limits<uint32_t>::max(),
|
||||
std::numeric_limits<uint32_t>::max(),
|
||||
|
|
@ -161,20 +176,23 @@ absl::StatusOr<Arena::PoolPtr<Metadata>> ReadMetadata(
|
|||
} // namespace
|
||||
|
||||
absl::Status SettingsFrame::Deserialize(HPackParser*, const FrameHeader& header,
|
||||
absl::BitGenRef,
|
||||
SliceBuffer& slice_buffer) {
|
||||
absl::BitGenRef, Arena*,
|
||||
BufferPair buffers) {
|
||||
if (header.type != FrameType::kSettings) {
|
||||
return absl::InvalidArgumentError("Expected settings frame");
|
||||
}
|
||||
if (header.flags.any()) {
|
||||
return absl::InvalidArgumentError("Unexpected flags");
|
||||
}
|
||||
FrameDeserializer deserializer(header, slice_buffer);
|
||||
if (buffers.data.Length() != 0) {
|
||||
return absl::InvalidArgumentError("Unexpected data");
|
||||
}
|
||||
FrameDeserializer deserializer(header, buffers);
|
||||
return deserializer.Finish();
|
||||
}
|
||||
|
||||
SliceBuffer SettingsFrame::Serialize(HPackCompressor*) const {
|
||||
FrameSerializer serializer(FrameType::kSettings, 0, 0);
|
||||
BufferPair SettingsFrame::Serialize(HPackCompressor*) const {
|
||||
FrameSerializer serializer(FrameType::kSettings, 0);
|
||||
return serializer.Finish();
|
||||
}
|
||||
|
||||
|
|
@ -183,19 +201,20 @@ std::string SettingsFrame::ToString() const { return "SettingsFrame{}"; }
|
|||
absl::Status ClientFragmentFrame::Deserialize(HPackParser* parser,
|
||||
const FrameHeader& header,
|
||||
absl::BitGenRef bitsrc,
|
||||
SliceBuffer& slice_buffer) {
|
||||
Arena* arena,
|
||||
BufferPair buffers) {
|
||||
if (header.stream_id == 0) {
|
||||
return absl::InvalidArgumentError("Expected non-zero stream id");
|
||||
}
|
||||
stream_id = header.stream_id;
|
||||
message_padding = header.message_padding;
|
||||
if (header.type != FrameType::kFragment) {
|
||||
return absl::InvalidArgumentError("Expected fragment frame");
|
||||
}
|
||||
FrameDeserializer deserializer(header, slice_buffer);
|
||||
FrameDeserializer deserializer(header, buffers);
|
||||
if (header.flags.is_set(0)) {
|
||||
auto r = ReadMetadata<ClientMetadata>(parser, deserializer.ReceiveHeaders(),
|
||||
header.stream_id, true, true, bitsrc);
|
||||
header.stream_id, true, true, bitsrc,
|
||||
arena);
|
||||
if (!r.ok()) return r.status();
|
||||
if (r.value() != nullptr) {
|
||||
headers = std::move(r.value());
|
||||
|
|
@ -205,8 +224,17 @@ absl::Status ClientFragmentFrame::Deserialize(HPackParser* parser,
|
|||
"Unexpected non-zero header length", header.header_length));
|
||||
}
|
||||
if (header.flags.is_set(1)) {
|
||||
message =
|
||||
FragmentMessage{Arena::MakePooled<Message>(std::move(buffers.data), 0),
|
||||
header.message_padding, header.message_length};
|
||||
} else if (buffers.data.Length() != 0) {
|
||||
return absl::InvalidArgumentError(absl::StrCat(
|
||||
"Unexpected non-zero message length ", buffers.data.Length()));
|
||||
}
|
||||
if (header.flags.is_set(2)) {
|
||||
if (header.trailer_length != 0) {
|
||||
return absl::InvalidArgumentError("Unexpected trailer length");
|
||||
return absl::InvalidArgumentError(
|
||||
absl::StrCat("Unexpected trailer length ", header.trailer_length));
|
||||
}
|
||||
end_of_stream = true;
|
||||
} else {
|
||||
|
|
@ -215,42 +243,53 @@ absl::Status ClientFragmentFrame::Deserialize(HPackParser* parser,
|
|||
return deserializer.Finish();
|
||||
}
|
||||
|
||||
SliceBuffer ClientFragmentFrame::Serialize(HPackCompressor* encoder) const {
|
||||
BufferPair ClientFragmentFrame::Serialize(HPackCompressor* encoder) const {
|
||||
GPR_ASSERT(stream_id != 0);
|
||||
FrameSerializer serializer(FrameType::kFragment, stream_id, message_padding);
|
||||
FrameSerializer serializer(FrameType::kFragment, stream_id);
|
||||
if (headers.get() != nullptr) {
|
||||
encoder->EncodeRawHeaders(*headers.get(), serializer.AddHeaders());
|
||||
}
|
||||
if (message.has_value()) {
|
||||
serializer.AddMessage(message.value());
|
||||
}
|
||||
if (end_of_stream) {
|
||||
serializer.AddTrailers();
|
||||
}
|
||||
return serializer.Finish();
|
||||
}
|
||||
|
||||
std::string FragmentMessage::ToString() const {
|
||||
std::string out =
|
||||
absl::StrCat("FragmentMessage{length=", length, ", padding=", padding);
|
||||
if (message.get() != nullptr) {
|
||||
absl::StrAppend(&out, ", message=", message->DebugString().c_str());
|
||||
}
|
||||
absl::StrAppend(&out, "}");
|
||||
return out;
|
||||
}
|
||||
|
||||
std::string ClientFragmentFrame::ToString() const {
|
||||
return absl::StrCat(
|
||||
"ClientFragmentFrame{stream_id=", stream_id, ", headers=",
|
||||
headers.get() != nullptr ? headers->DebugString().c_str() : "nullptr",
|
||||
", message=",
|
||||
message.get() != nullptr ? message->DebugString().c_str() : "nullptr",
|
||||
", message_padding=", message_padding, ", end_of_stream=", end_of_stream,
|
||||
"}");
|
||||
", message=", message.has_value() ? message->ToString().c_str() : "none",
|
||||
", end_of_stream=", end_of_stream, "}");
|
||||
}
|
||||
|
||||
absl::Status ServerFragmentFrame::Deserialize(HPackParser* parser,
|
||||
const FrameHeader& header,
|
||||
absl::BitGenRef bitsrc,
|
||||
SliceBuffer& slice_buffer) {
|
||||
Arena* arena,
|
||||
BufferPair buffers) {
|
||||
if (header.stream_id == 0) {
|
||||
return absl::InvalidArgumentError("Expected non-zero stream id");
|
||||
}
|
||||
stream_id = header.stream_id;
|
||||
message_padding = header.message_padding;
|
||||
FrameDeserializer deserializer(header, slice_buffer);
|
||||
FrameDeserializer deserializer(header, buffers);
|
||||
if (header.flags.is_set(0)) {
|
||||
auto r =
|
||||
ReadMetadata<ServerMetadata>(parser, deserializer.ReceiveHeaders(),
|
||||
header.stream_id, true, false, bitsrc);
|
||||
auto r = ReadMetadata<ServerMetadata>(parser, deserializer.ReceiveHeaders(),
|
||||
header.stream_id, true, false, bitsrc,
|
||||
arena);
|
||||
if (!r.ok()) return r.status();
|
||||
if (r.value() != nullptr) {
|
||||
headers = std::move(r.value());
|
||||
|
|
@ -260,9 +299,16 @@ absl::Status ServerFragmentFrame::Deserialize(HPackParser* parser,
|
|||
"Unexpected non-zero header length", header.header_length));
|
||||
}
|
||||
if (header.flags.is_set(1)) {
|
||||
auto r =
|
||||
ReadMetadata<ServerMetadata>(parser, deserializer.ReceiveTrailers(),
|
||||
header.stream_id, false, false, bitsrc);
|
||||
message.emplace(Arena::MakePooled<Message>(std::move(buffers.data), 0),
|
||||
header.message_padding, header.message_length);
|
||||
} else if (buffers.data.Length() != 0) {
|
||||
return absl::InvalidArgumentError(absl::StrCat(
|
||||
"Unexpected non-zero message length", buffers.data.Length()));
|
||||
}
|
||||
if (header.flags.is_set(2)) {
|
||||
auto r = ReadMetadata<ServerMetadata>(
|
||||
parser, deserializer.ReceiveTrailers(), header.stream_id, false, false,
|
||||
bitsrc, arena);
|
||||
if (!r.ok()) return r.status();
|
||||
if (r.value() != nullptr) {
|
||||
trailers = std::move(r.value());
|
||||
|
|
@ -274,12 +320,15 @@ absl::Status ServerFragmentFrame::Deserialize(HPackParser* parser,
|
|||
return deserializer.Finish();
|
||||
}
|
||||
|
||||
SliceBuffer ServerFragmentFrame::Serialize(HPackCompressor* encoder) const {
|
||||
BufferPair ServerFragmentFrame::Serialize(HPackCompressor* encoder) const {
|
||||
GPR_ASSERT(stream_id != 0);
|
||||
FrameSerializer serializer(FrameType::kFragment, stream_id, message_padding);
|
||||
FrameSerializer serializer(FrameType::kFragment, stream_id);
|
||||
if (headers.get() != nullptr) {
|
||||
encoder->EncodeRawHeaders(*headers.get(), serializer.AddHeaders());
|
||||
}
|
||||
if (message.has_value()) {
|
||||
serializer.AddMessage(message.value());
|
||||
}
|
||||
if (trailers.get() != nullptr) {
|
||||
encoder->EncodeRawHeaders(*trailers.get(), serializer.AddTrailers());
|
||||
}
|
||||
|
|
@ -290,16 +339,15 @@ std::string ServerFragmentFrame::ToString() const {
|
|||
return absl::StrCat(
|
||||
"ServerFragmentFrame{stream_id=", stream_id, ", headers=",
|
||||
headers.get() != nullptr ? headers->DebugString().c_str() : "nullptr",
|
||||
", message=",
|
||||
message.get() != nullptr ? message->DebugString().c_str() : "nullptr",
|
||||
", message_padding=", message_padding, ", trailers=",
|
||||
", message=", message.has_value() ? message->ToString().c_str() : "none",
|
||||
", trailers=",
|
||||
trailers.get() != nullptr ? trailers->DebugString().c_str() : "nullptr",
|
||||
"}");
|
||||
}
|
||||
|
||||
absl::Status CancelFrame::Deserialize(HPackParser*, const FrameHeader& header,
|
||||
absl::BitGenRef,
|
||||
SliceBuffer& slice_buffer) {
|
||||
absl::BitGenRef, Arena*,
|
||||
BufferPair buffers) {
|
||||
if (header.type != FrameType::kCancel) {
|
||||
return absl::InvalidArgumentError("Expected cancel frame");
|
||||
}
|
||||
|
|
@ -309,14 +357,17 @@ absl::Status CancelFrame::Deserialize(HPackParser*, const FrameHeader& header,
|
|||
if (header.stream_id == 0) {
|
||||
return absl::InvalidArgumentError("Expected non-zero stream id");
|
||||
}
|
||||
FrameDeserializer deserializer(header, slice_buffer);
|
||||
if (buffers.data.Length() != 0) {
|
||||
return absl::InvalidArgumentError("Unexpected data");
|
||||
}
|
||||
FrameDeserializer deserializer(header, buffers);
|
||||
stream_id = header.stream_id;
|
||||
return deserializer.Finish();
|
||||
}
|
||||
|
||||
SliceBuffer CancelFrame::Serialize(HPackCompressor*) const {
|
||||
BufferPair CancelFrame::Serialize(HPackCompressor*) const {
|
||||
GPR_ASSERT(stream_id != 0);
|
||||
FrameSerializer serializer(FrameType::kCancel, stream_id, 0);
|
||||
FrameSerializer serializer(FrameType::kCancel, stream_id);
|
||||
return serializer.Finish();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -28,6 +28,7 @@
|
|||
#include "src/core/ext/transport/chaotic_good/frame_header.h"
|
||||
#include "src/core/ext/transport/chttp2/transport/hpack_encoder.h"
|
||||
#include "src/core/ext/transport/chttp2/transport/hpack_parser.h"
|
||||
#include "src/core/lib/gprpp/match.h"
|
||||
#include "src/core/lib/resource_quota/arena.h"
|
||||
#include "src/core/lib/slice/slice_buffer.h"
|
||||
#include "src/core/lib/transport/metadata_batch.h"
|
||||
|
|
@ -36,20 +37,21 @@
|
|||
namespace grpc_core {
|
||||
namespace chaotic_good {
|
||||
|
||||
struct BufferPair {
|
||||
SliceBuffer control;
|
||||
SliceBuffer data;
|
||||
};
|
||||
|
||||
class FrameInterface {
|
||||
public:
|
||||
virtual absl::Status Deserialize(HPackParser* parser,
|
||||
const FrameHeader& header,
|
||||
absl::BitGenRef bitsrc,
|
||||
SliceBuffer& slice_buffer) = 0;
|
||||
virtual SliceBuffer Serialize(HPackCompressor* encoder) const = 0;
|
||||
absl::BitGenRef bitsrc, Arena* arena,
|
||||
BufferPair buffers) = 0;
|
||||
virtual BufferPair Serialize(HPackCompressor* encoder) const = 0;
|
||||
virtual std::string ToString() const = 0;
|
||||
|
||||
protected:
|
||||
static bool EqVal(const Message& a, const Message& b) {
|
||||
return a.payload()->JoinIntoString() == b.payload()->JoinIntoString() &&
|
||||
a.flags() == b.flags();
|
||||
}
|
||||
static bool EqVal(const grpc_metadata_batch& a,
|
||||
const grpc_metadata_batch& b) {
|
||||
return a.DebugString() == b.DebugString();
|
||||
|
|
@ -65,57 +67,75 @@ class FrameInterface {
|
|||
|
||||
struct SettingsFrame final : public FrameInterface {
|
||||
absl::Status Deserialize(HPackParser* parser, const FrameHeader& header,
|
||||
absl::BitGenRef bitsrc,
|
||||
SliceBuffer& slice_buffer) override;
|
||||
SliceBuffer Serialize(HPackCompressor* encoder) const override;
|
||||
absl::BitGenRef bitsrc, Arena* arena,
|
||||
BufferPair buffers) override;
|
||||
BufferPair Serialize(HPackCompressor* encoder) const override;
|
||||
std::string ToString() const override;
|
||||
|
||||
bool operator==(const SettingsFrame&) const { return true; }
|
||||
};
|
||||
|
||||
struct FragmentMessage {
|
||||
FragmentMessage(MessageHandle message, uint32_t padding, uint32_t length)
|
||||
: message(std::move(message)), padding(padding), length(length) {}
|
||||
|
||||
MessageHandle message;
|
||||
uint32_t padding;
|
||||
uint32_t length;
|
||||
|
||||
std::string ToString() const;
|
||||
|
||||
static bool EqVal(const Message& a, const Message& b) {
|
||||
return a.payload()->JoinIntoString() == b.payload()->JoinIntoString() &&
|
||||
a.flags() == b.flags();
|
||||
}
|
||||
|
||||
bool operator==(const FragmentMessage& other) const {
|
||||
return EqVal(*message, *other.message) && length == other.length;
|
||||
}
|
||||
};
|
||||
|
||||
struct ClientFragmentFrame final : public FrameInterface {
|
||||
absl::Status Deserialize(HPackParser* parser, const FrameHeader& header,
|
||||
absl::BitGenRef bitsrc,
|
||||
SliceBuffer& slice_buffer) override;
|
||||
SliceBuffer Serialize(HPackCompressor* encoder) const override;
|
||||
absl::BitGenRef bitsrc, Arena* arena,
|
||||
BufferPair buffers) override;
|
||||
BufferPair Serialize(HPackCompressor* encoder) const override;
|
||||
std::string ToString() const override;
|
||||
|
||||
uint32_t stream_id;
|
||||
ClientMetadataHandle headers;
|
||||
MessageHandle message;
|
||||
uint32_t message_padding;
|
||||
absl::optional<FragmentMessage> message;
|
||||
bool end_of_stream = false;
|
||||
|
||||
bool operator==(const ClientFragmentFrame& other) const {
|
||||
return stream_id == other.stream_id && EqHdl(headers, other.headers) &&
|
||||
end_of_stream == other.end_of_stream;
|
||||
message == other.message && end_of_stream == other.end_of_stream;
|
||||
}
|
||||
};
|
||||
|
||||
struct ServerFragmentFrame final : public FrameInterface {
|
||||
absl::Status Deserialize(HPackParser* parser, const FrameHeader& header,
|
||||
absl::BitGenRef bitsrc,
|
||||
SliceBuffer& slice_buffer) override;
|
||||
SliceBuffer Serialize(HPackCompressor* encoder) const override;
|
||||
absl::BitGenRef bitsrc, Arena* arena,
|
||||
BufferPair buffers) override;
|
||||
BufferPair Serialize(HPackCompressor* encoder) const override;
|
||||
std::string ToString() const override;
|
||||
|
||||
uint32_t stream_id;
|
||||
ServerMetadataHandle headers;
|
||||
MessageHandle message;
|
||||
uint32_t message_padding;
|
||||
absl::optional<FragmentMessage> message;
|
||||
ServerMetadataHandle trailers;
|
||||
|
||||
bool operator==(const ServerFragmentFrame& other) const {
|
||||
return stream_id == other.stream_id && EqHdl(headers, other.headers) &&
|
||||
EqHdl(trailers, other.trailers);
|
||||
message == other.message && EqHdl(trailers, other.trailers);
|
||||
}
|
||||
};
|
||||
|
||||
struct CancelFrame final : public FrameInterface {
|
||||
absl::Status Deserialize(HPackParser* parser, const FrameHeader& header,
|
||||
absl::BitGenRef bitsrc,
|
||||
SliceBuffer& slice_buffer) override;
|
||||
SliceBuffer Serialize(HPackCompressor* encoder) const override;
|
||||
absl::BitGenRef bitsrc, Arena* arena,
|
||||
BufferPair buffers) override;
|
||||
BufferPair Serialize(HPackCompressor* encoder) const override;
|
||||
std::string ToString() const override;
|
||||
|
||||
uint32_t stream_id;
|
||||
|
|
@ -128,6 +148,19 @@ struct CancelFrame final : public FrameInterface {
|
|||
using ClientFrame = absl::variant<ClientFragmentFrame, CancelFrame>;
|
||||
using ServerFrame = absl::variant<ServerFragmentFrame>;
|
||||
|
||||
inline FrameInterface& GetFrameInterface(ClientFrame& frame) {
|
||||
return MatchMutable(
|
||||
&frame,
|
||||
[](ClientFragmentFrame* frame) -> FrameInterface& { return *frame; },
|
||||
[](CancelFrame* frame) -> FrameInterface& { return *frame; });
|
||||
}
|
||||
|
||||
inline FrameInterface& GetFrameInterface(ServerFrame& frame) {
|
||||
return MatchMutable(
|
||||
&frame,
|
||||
[](ServerFragmentFrame* frame) -> FrameInterface& { return *frame; });
|
||||
}
|
||||
|
||||
} // namespace chaotic_good
|
||||
} // namespace grpc_core
|
||||
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@
|
|||
#include <cstdint>
|
||||
|
||||
#include "absl/status/status.h"
|
||||
#include "absl/strings/str_cat.h"
|
||||
|
||||
#include <grpc/support/log.h>
|
||||
|
||||
|
|
@ -46,7 +47,6 @@ void FrameHeader::Serialize(uint8_t* data) const {
|
|||
WriteLittleEndianUint32(
|
||||
static_cast<uint32_t>(type) | (flags.ToInt<uint32_t>() << 8), data);
|
||||
if (flags.is_set(0)) GPR_ASSERT(header_length > 0);
|
||||
if (flags.is_set(1)) GPR_ASSERT(trailer_length > 0);
|
||||
WriteLittleEndianUint32(stream_id, data + 4);
|
||||
WriteLittleEndianUint32(header_length, data + 8);
|
||||
WriteLittleEndianUint32(message_length, data + 12);
|
||||
|
|
@ -60,8 +60,8 @@ absl::StatusOr<FrameHeader> FrameHeader::Parse(const uint8_t* data) {
|
|||
const uint32_t type_and_flags = ReadLittleEndianUint32(data);
|
||||
header.type = static_cast<FrameType>(type_and_flags & 0xff);
|
||||
const uint32_t flags = type_and_flags >> 8;
|
||||
if (flags > 3) return absl::InvalidArgumentError("Invalid flags");
|
||||
header.flags = BitSet<2>::FromInt(flags);
|
||||
if (flags > 7) return absl::InvalidArgumentError("Invalid flags");
|
||||
header.flags = BitSet<3>::FromInt(flags);
|
||||
header.stream_id = ReadLittleEndianUint32(data + 4);
|
||||
header.header_length = ReadLittleEndianUint32(data + 8);
|
||||
if (header.flags.is_set(0) && header.header_length <= 0) {
|
||||
|
|
@ -70,11 +70,11 @@ absl::StatusOr<FrameHeader> FrameHeader::Parse(const uint8_t* data) {
|
|||
}
|
||||
header.message_length = ReadLittleEndianUint32(data + 12);
|
||||
header.message_padding = ReadLittleEndianUint32(data + 16);
|
||||
header.trailer_length = ReadLittleEndianUint32(data + 20);
|
||||
if (header.flags.is_set(1) && header.trailer_length <= 0) {
|
||||
if (header.flags.is_set(1) && header.message_length <= 0) {
|
||||
return absl::InvalidArgumentError(
|
||||
absl::StrCat("Invalid trailer length", header.trailer_length));
|
||||
absl::StrCat("Invalid message length: ", header.message_length));
|
||||
}
|
||||
header.trailer_length = ReadLittleEndianUint32(data + 20);
|
||||
return header;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@ enum class FrameType : uint8_t {
|
|||
|
||||
struct FrameHeader {
|
||||
FrameType type = FrameType::kCancel;
|
||||
BitSet<2> flags;
|
||||
BitSet<3> flags;
|
||||
uint32_t stream_id = 0;
|
||||
uint32_t header_length = 0;
|
||||
uint32_t message_length = 0;
|
||||
|
|
|
|||
|
|
@ -0,0 +1,332 @@
|
|||
// Copyright 2022 gRPC authors.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
#include <grpc/support/port_platform.h>
|
||||
|
||||
#include "src/core/ext/transport/chaotic_good/server_transport.h"
|
||||
|
||||
#include <memory>
|
||||
#include <string>
|
||||
#include <tuple>
|
||||
|
||||
#include "absl/random/bit_gen_ref.h"
|
||||
#include "absl/random/random.h"
|
||||
#include "absl/status/status.h"
|
||||
#include "absl/status/statusor.h"
|
||||
|
||||
#include <grpc/event_engine/event_engine.h>
|
||||
#include <grpc/slice.h>
|
||||
#include <grpc/support/log.h>
|
||||
|
||||
#include "src/core/ext/transport/chaotic_good/frame.h"
|
||||
#include "src/core/ext/transport/chaotic_good/frame_header.h"
|
||||
#include "src/core/ext/transport/chttp2/transport/hpack_encoder.h"
|
||||
#include "src/core/lib/gprpp/ref_counted_ptr.h"
|
||||
#include "src/core/lib/iomgr/exec_ctx.h"
|
||||
#include "src/core/lib/promise/activity.h"
|
||||
#include "src/core/lib/promise/event_engine_wakeup_scheduler.h"
|
||||
#include "src/core/lib/promise/for_each.h"
|
||||
#include "src/core/lib/promise/loop.h"
|
||||
#include "src/core/lib/promise/switch.h"
|
||||
#include "src/core/lib/promise/try_seq.h"
|
||||
#include "src/core/lib/resource_quota/arena.h"
|
||||
#include "src/core/lib/resource_quota/resource_quota.h"
|
||||
#include "src/core/lib/slice/slice.h"
|
||||
#include "src/core/lib/slice/slice_buffer.h"
|
||||
#include "src/core/lib/transport/promise_endpoint.h"
|
||||
|
||||
namespace grpc_core {
|
||||
namespace chaotic_good {
|
||||
|
||||
auto ChaoticGoodServerTransport::TransportWriteLoop() {
|
||||
return Loop([this] {
|
||||
return TrySeq(
|
||||
// Get next outgoing frame.
|
||||
outgoing_frames_.Next(),
|
||||
// Serialize and write it out.
|
||||
[this](ServerFrame client_frame) {
|
||||
return transport_.WriteFrame(GetFrameInterface(client_frame));
|
||||
},
|
||||
[]() -> LoopCtl<absl::Status> {
|
||||
// The write failures will be caught in TrySeq and exit loop.
|
||||
// Therefore, only need to return Continue() in the last lambda
|
||||
// function.
|
||||
return Continue();
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
auto ChaoticGoodServerTransport::PushFragmentIntoCall(
|
||||
CallInitiator call_initiator, ClientFragmentFrame frame) {
|
||||
auto& headers = frame.headers;
|
||||
return TrySeq(
|
||||
If(
|
||||
headers != nullptr,
|
||||
[call_initiator, &headers]() mutable {
|
||||
return call_initiator.PushClientInitialMetadata(std::move(headers));
|
||||
},
|
||||
[]() -> StatusFlag { return Success{}; }),
|
||||
[call_initiator, message = std::move(frame.message)]() mutable {
|
||||
return If(
|
||||
message.has_value(),
|
||||
[&call_initiator, &message]() mutable {
|
||||
return call_initiator.PushMessage(std::move(message->message));
|
||||
},
|
||||
[]() -> StatusFlag { return Success{}; });
|
||||
},
|
||||
[call_initiator,
|
||||
end_of_stream = frame.end_of_stream]() mutable -> StatusFlag {
|
||||
if (end_of_stream) call_initiator.FinishSends();
|
||||
return Success{};
|
||||
});
|
||||
}
|
||||
|
||||
auto ChaoticGoodServerTransport::MaybePushFragmentIntoCall(
|
||||
absl::optional<CallInitiator> call_initiator, absl::Status error,
|
||||
ClientFragmentFrame frame) {
|
||||
return If(
|
||||
call_initiator.has_value() && error.ok(),
|
||||
[this, &call_initiator, &frame]() {
|
||||
return Map(
|
||||
call_initiator->SpawnWaitable(
|
||||
"push-fragment",
|
||||
[call_initiator, frame = std::move(frame), this]() mutable {
|
||||
return call_initiator->CancelIfFails(
|
||||
PushFragmentIntoCall(*call_initiator, std::move(frame)));
|
||||
}),
|
||||
[](StatusFlag status) { return StatusCast<absl::Status>(status); });
|
||||
},
|
||||
[error = std::move(error)]() { return error; });
|
||||
}
|
||||
|
||||
auto ChaoticGoodServerTransport::CallOutboundLoop(
|
||||
uint32_t stream_id, CallInitiator call_initiator) {
|
||||
auto send_fragment = [stream_id,
|
||||
outgoing_frames = outgoing_frames_.MakeSender()](
|
||||
ServerFragmentFrame frame) mutable {
|
||||
frame.stream_id = stream_id;
|
||||
return Map(outgoing_frames.Send(std::move(frame)),
|
||||
[](bool success) -> absl::Status {
|
||||
if (!success) {
|
||||
// Failed to send outgoing frame.
|
||||
return absl::UnavailableError("Transport closed.");
|
||||
}
|
||||
return absl::OkStatus();
|
||||
});
|
||||
};
|
||||
return Seq(
|
||||
TrySeq(
|
||||
// Wait for initial metadata then send it out.
|
||||
call_initiator.PullServerInitialMetadata(),
|
||||
[send_fragment](ServerMetadataHandle md) mutable {
|
||||
ServerFragmentFrame frame;
|
||||
frame.headers = std::move(md);
|
||||
return send_fragment(std::move(frame));
|
||||
},
|
||||
// Continuously send client frame with client to server messages.
|
||||
ForEach(OutgoingMessages(call_initiator),
|
||||
[send_fragment, aligned_bytes = aligned_bytes_](
|
||||
MessageHandle message) mutable {
|
||||
ServerFragmentFrame frame;
|
||||
// Construct frame header (flags, header_length and
|
||||
// trailer_length will be added in serialization).
|
||||
const uint32_t message_length =
|
||||
message->payload()->Length();
|
||||
const uint32_t padding =
|
||||
message_length % aligned_bytes == 0
|
||||
? 0
|
||||
: aligned_bytes - message_length % aligned_bytes;
|
||||
GPR_ASSERT((message_length + padding) % aligned_bytes == 0);
|
||||
frame.message = FragmentMessage(std::move(message), padding,
|
||||
message_length);
|
||||
return send_fragment(std::move(frame));
|
||||
})),
|
||||
call_initiator.PullServerTrailingMetadata(),
|
||||
[send_fragment](ServerMetadataHandle md) mutable {
|
||||
ServerFragmentFrame frame;
|
||||
frame.trailers = std::move(md);
|
||||
return send_fragment(std::move(frame));
|
||||
});
|
||||
}
|
||||
|
||||
auto ChaoticGoodServerTransport::DeserializeAndPushFragmentToNewCall(
|
||||
FrameHeader frame_header, BufferPair buffers) {
|
||||
ClientFragmentFrame fragment_frame;
|
||||
ScopedArenaPtr arena(acceptor_->CreateArena());
|
||||
absl::Status status = transport_.DeserializeFrame(
|
||||
frame_header, std::move(buffers), arena.get(), fragment_frame);
|
||||
absl::optional<CallInitiator> call_initiator;
|
||||
if (status.ok()) {
|
||||
auto create_call_result =
|
||||
acceptor_->CreateCall(*fragment_frame.headers, arena.release());
|
||||
if (create_call_result.ok()) {
|
||||
call_initiator.emplace(std::move(*create_call_result));
|
||||
call_initiator->SpawnGuarded(
|
||||
"server-write", [this, stream_id = frame_header.stream_id,
|
||||
call_initiator = *call_initiator]() {
|
||||
return CallOutboundLoop(stream_id, call_initiator);
|
||||
});
|
||||
} else {
|
||||
status = create_call_result.status();
|
||||
}
|
||||
}
|
||||
return MaybePushFragmentIntoCall(std::move(call_initiator), std::move(status),
|
||||
std::move(fragment_frame));
|
||||
}
|
||||
|
||||
auto ChaoticGoodServerTransport::DeserializeAndPushFragmentToExistingCall(
|
||||
FrameHeader frame_header, BufferPair buffers) {
|
||||
absl::optional<CallInitiator> call_initiator =
|
||||
LookupStream(frame_header.stream_id);
|
||||
Arena* arena = nullptr;
|
||||
if (call_initiator.has_value()) arena = call_initiator->arena();
|
||||
ClientFragmentFrame fragment_frame;
|
||||
absl::Status status = transport_.DeserializeFrame(
|
||||
frame_header, std::move(buffers), arena, fragment_frame);
|
||||
return MaybePushFragmentIntoCall(std::move(call_initiator), std::move(status),
|
||||
std::move(fragment_frame));
|
||||
}
|
||||
|
||||
auto ChaoticGoodServerTransport::TransportReadLoop() {
|
||||
return Loop([this] {
|
||||
return TrySeq(
|
||||
transport_.ReadFrameBytes(),
|
||||
[this](std::tuple<FrameHeader, BufferPair> frame_bytes) {
|
||||
const auto& frame_header = std::get<0>(frame_bytes);
|
||||
auto& buffers = std::get<1>(frame_bytes);
|
||||
return Switch(
|
||||
frame_header.type,
|
||||
Case(FrameType::kSettings,
|
||||
[]() -> absl::Status {
|
||||
return absl::InternalError("Unexpected settings frame");
|
||||
}),
|
||||
Case(FrameType::kFragment,
|
||||
[this, &frame_header, &buffers]() {
|
||||
return If(
|
||||
frame_header.flags.is_set(0),
|
||||
[this, &frame_header, &buffers]() {
|
||||
return DeserializeAndPushFragmentToNewCall(
|
||||
frame_header, std::move(buffers));
|
||||
},
|
||||
[this, &frame_header, &buffers]() {
|
||||
return DeserializeAndPushFragmentToExistingCall(
|
||||
frame_header, std::move(buffers));
|
||||
});
|
||||
}),
|
||||
Case(FrameType::kCancel,
|
||||
[this, &frame_header]() {
|
||||
absl::optional<CallInitiator> call_initiator =
|
||||
ExtractStream(frame_header.stream_id);
|
||||
return If(
|
||||
call_initiator.has_value(),
|
||||
[&call_initiator]() {
|
||||
auto c = std::move(*call_initiator);
|
||||
return c.SpawnWaitable("cancel", [c]() mutable {
|
||||
c.Cancel();
|
||||
return absl::OkStatus();
|
||||
});
|
||||
},
|
||||
[]() -> absl::Status {
|
||||
return absl::InternalError(
|
||||
"Unexpected cancel frame");
|
||||
});
|
||||
}),
|
||||
Default([frame_header]() {
|
||||
return absl::InternalError(
|
||||
absl::StrCat("Unexpected frame type: ",
|
||||
static_cast<uint8_t>(frame_header.type)));
|
||||
}));
|
||||
},
|
||||
[]() -> LoopCtl<absl::Status> { return Continue{}; });
|
||||
});
|
||||
}
|
||||
|
||||
auto ChaoticGoodServerTransport::OnTransportActivityDone() {
|
||||
return [this](absl::Status status) {
|
||||
if (!(status.ok() || status.code() == absl::StatusCode::kCancelled)) {
|
||||
this->AbortWithError();
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
ChaoticGoodServerTransport::ChaoticGoodServerTransport(
|
||||
const ChannelArgs& args, std::unique_ptr<PromiseEndpoint> control_endpoint,
|
||||
std::unique_ptr<PromiseEndpoint> data_endpoint,
|
||||
std::shared_ptr<grpc_event_engine::experimental::EventEngine> event_engine)
|
||||
: outgoing_frames_(4),
|
||||
transport_(std::move(control_endpoint), std::move(data_endpoint)),
|
||||
allocator_(args.GetObject<ResourceQuota>()
|
||||
->memory_quota()
|
||||
->CreateMemoryAllocator("chaotic-good")),
|
||||
event_engine_(event_engine),
|
||||
writer_{MakeActivity(TransportWriteLoop(),
|
||||
EventEngineWakeupScheduler(event_engine),
|
||||
OnTransportActivityDone())},
|
||||
reader_{nullptr} {}
|
||||
|
||||
void ChaoticGoodServerTransport::SetAcceptor(Acceptor* acceptor) {
|
||||
GPR_ASSERT(acceptor_ == nullptr);
|
||||
GPR_ASSERT(acceptor != nullptr);
|
||||
acceptor_ = acceptor;
|
||||
reader_ = MakeActivity(TransportReadLoop(),
|
||||
EventEngineWakeupScheduler(event_engine_),
|
||||
OnTransportActivityDone());
|
||||
}
|
||||
|
||||
ChaoticGoodServerTransport::~ChaoticGoodServerTransport() {
|
||||
if (writer_ != nullptr) {
|
||||
writer_.reset();
|
||||
}
|
||||
if (reader_ != nullptr) {
|
||||
reader_.reset();
|
||||
}
|
||||
}
|
||||
|
||||
void ChaoticGoodServerTransport::AbortWithError() {
|
||||
// Mark transport as unavailable when the endpoint write/read failed.
|
||||
// Close all the available pipes.
|
||||
outgoing_frames_.MarkClosed();
|
||||
ReleasableMutexLock lock(&mu_);
|
||||
StreamMap stream_map = std::move(stream_map_);
|
||||
stream_map_.clear();
|
||||
lock.Release();
|
||||
for (const auto& pair : stream_map) {
|
||||
auto call_initiator = pair.second;
|
||||
call_initiator.SpawnInfallible("cancel", [call_initiator]() mutable {
|
||||
call_initiator.Cancel();
|
||||
return Empty{};
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
absl::optional<CallInitiator> ChaoticGoodServerTransport::LookupStream(
|
||||
uint32_t stream_id) {
|
||||
MutexLock lock(&mu_);
|
||||
auto it = stream_map_.find(stream_id);
|
||||
if (it == stream_map_.end()) return absl::nullopt;
|
||||
return it->second;
|
||||
}
|
||||
|
||||
absl::optional<CallInitiator> ChaoticGoodServerTransport::ExtractStream(
|
||||
uint32_t stream_id) {
|
||||
MutexLock lock(&mu_);
|
||||
auto it = stream_map_.find(stream_id);
|
||||
if (it == stream_map_.end()) return absl::nullopt;
|
||||
auto r = std::move(it->second);
|
||||
stream_map_.erase(it);
|
||||
return std::move(r);
|
||||
}
|
||||
|
||||
} // namespace chaotic_good
|
||||
} // namespace grpc_core
|
||||
|
|
@ -0,0 +1,145 @@
|
|||
// Copyright 2022 gRPC authors.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
#ifndef GRPC_SRC_CORE_EXT_TRANSPORT_CHAOTIC_GOOD_SERVER_TRANSPORT_H
|
||||
#define GRPC_SRC_CORE_EXT_TRANSPORT_CHAOTIC_GOOD_SERVER_TRANSPORT_H
|
||||
|
||||
#include <grpc/support/port_platform.h>
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#include <cstdint>
|
||||
#include <initializer_list> // IWYU pragma: keep
|
||||
#include <iostream>
|
||||
#include <map>
|
||||
#include <memory>
|
||||
#include <optional>
|
||||
#include <string>
|
||||
#include <tuple>
|
||||
#include <type_traits>
|
||||
#include <utility>
|
||||
|
||||
#include "absl/base/thread_annotations.h"
|
||||
#include "absl/container/flat_hash_map.h"
|
||||
#include "absl/functional/any_invocable.h"
|
||||
#include "absl/random/random.h"
|
||||
#include "absl/status/status.h"
|
||||
#include "absl/status/statusor.h"
|
||||
#include "absl/types/optional.h"
|
||||
#include "absl/types/variant.h"
|
||||
|
||||
#include <grpc/event_engine/event_engine.h>
|
||||
#include <grpc/event_engine/memory_allocator.h>
|
||||
#include <grpc/slice.h>
|
||||
#include <grpc/support/log.h>
|
||||
|
||||
#include "src/core/ext/transport/chaotic_good/chaotic_good_transport.h"
|
||||
#include "src/core/ext/transport/chaotic_good/frame.h"
|
||||
#include "src/core/ext/transport/chaotic_good/frame_header.h"
|
||||
#include "src/core/ext/transport/chttp2/transport/hpack_encoder.h"
|
||||
#include "src/core/ext/transport/chttp2/transport/hpack_parser.h"
|
||||
#include "src/core/lib/event_engine/default_event_engine.h" // IWYU pragma: keep
|
||||
#include "src/core/lib/gprpp/ref_counted_ptr.h"
|
||||
#include "src/core/lib/gprpp/sync.h"
|
||||
#include "src/core/lib/promise/activity.h"
|
||||
#include "src/core/lib/promise/context.h"
|
||||
#include "src/core/lib/promise/if.h"
|
||||
#include "src/core/lib/promise/inter_activity_pipe.h"
|
||||
#include "src/core/lib/promise/loop.h"
|
||||
#include "src/core/lib/promise/mpsc.h"
|
||||
#include "src/core/lib/promise/party.h"
|
||||
#include "src/core/lib/promise/pipe.h"
|
||||
#include "src/core/lib/promise/poll.h"
|
||||
#include "src/core/lib/promise/seq.h"
|
||||
#include "src/core/lib/promise/try_join.h"
|
||||
#include "src/core/lib/promise/try_seq.h"
|
||||
#include "src/core/lib/resource_quota/arena.h"
|
||||
#include "src/core/lib/resource_quota/memory_quota.h"
|
||||
#include "src/core/lib/slice/slice.h"
|
||||
#include "src/core/lib/slice/slice_buffer.h"
|
||||
#include "src/core/lib/slice/slice_internal.h"
|
||||
#include "src/core/lib/transport/metadata_batch.h"
|
||||
#include "src/core/lib/transport/promise_endpoint.h"
|
||||
#include "src/core/lib/transport/transport.h"
|
||||
|
||||
namespace grpc_core {
|
||||
namespace chaotic_good {
|
||||
|
||||
class ChaoticGoodServerTransport final : public Transport,
|
||||
public ServerTransport {
|
||||
public:
|
||||
ChaoticGoodServerTransport(
|
||||
const ChannelArgs& args,
|
||||
std::unique_ptr<PromiseEndpoint> control_endpoint,
|
||||
std::unique_ptr<PromiseEndpoint> data_endpoint,
|
||||
std::shared_ptr<grpc_event_engine::experimental::EventEngine>
|
||||
event_engine);
|
||||
~ChaoticGoodServerTransport() override;
|
||||
|
||||
FilterStackTransport* filter_stack_transport() override { return nullptr; }
|
||||
ClientTransport* client_transport() override { return nullptr; }
|
||||
ServerTransport* server_transport() override { return this; }
|
||||
absl::string_view GetTransportName() const override { return "chaotic_good"; }
|
||||
void SetPollset(grpc_stream*, grpc_pollset*) override {}
|
||||
void SetPollsetSet(grpc_stream*, grpc_pollset_set*) override {}
|
||||
void PerformOp(grpc_transport_op*) override { Crash("unimplemented"); }
|
||||
grpc_endpoint* GetEndpoint() override { return nullptr; }
|
||||
void Orphan() override { delete this; }
|
||||
|
||||
void SetAcceptor(Acceptor* acceptor) override;
|
||||
void AbortWithError();
|
||||
|
||||
private:
|
||||
using StreamMap = absl::flat_hash_map<uint32_t, CallInitiator>;
|
||||
|
||||
absl::Status NewStream(uint32_t stream_id, CallInitiator call_initiator);
|
||||
absl::optional<CallInitiator> LookupStream(uint32_t stream_id);
|
||||
absl::optional<CallInitiator> ExtractStream(uint32_t stream_id);
|
||||
auto CallOutboundLoop(uint32_t stream_id, CallInitiator call_initiator);
|
||||
auto OnTransportActivityDone();
|
||||
auto TransportReadLoop();
|
||||
auto TransportWriteLoop();
|
||||
// Read different parts of the server frame from control/data endpoints
|
||||
// based on frame header.
|
||||
// Resolves to a StatusOr<tuple<SliceBuffer, SliceBuffer>>
|
||||
auto ReadFrameBody(Slice read_buffer);
|
||||
void SendCancel(uint32_t stream_id, absl::Status why);
|
||||
auto DeserializeAndPushFragmentToNewCall(FrameHeader frame_header,
|
||||
BufferPair buffers);
|
||||
auto DeserializeAndPushFragmentToExistingCall(FrameHeader frame_header,
|
||||
BufferPair buffers);
|
||||
auto MaybePushFragmentIntoCall(absl::optional<CallInitiator> call_initiator,
|
||||
absl::Status error, ClientFragmentFrame frame);
|
||||
auto PushFragmentIntoCall(CallInitiator call_initiator,
|
||||
ClientFragmentFrame frame);
|
||||
|
||||
Acceptor* acceptor_ = nullptr;
|
||||
MpscReceiver<ServerFrame> outgoing_frames_;
|
||||
ChaoticGoodTransport transport_;
|
||||
// Assigned aligned bytes from setting frame.
|
||||
size_t aligned_bytes_ = 64;
|
||||
Mutex mu_;
|
||||
// Map of stream incoming server frames, key is stream_id.
|
||||
StreamMap stream_map_ ABSL_GUARDED_BY(mu_);
|
||||
grpc_event_engine::experimental::MemoryAllocator allocator_;
|
||||
std::shared_ptr<grpc_event_engine::experimental::EventEngine> event_engine_;
|
||||
ActivityPtr writer_;
|
||||
ActivityPtr reader_;
|
||||
};
|
||||
|
||||
} // namespace chaotic_good
|
||||
} // namespace grpc_core
|
||||
|
||||
#endif // GRPC_SRC_CORE_EXT_TRANSPORT_CHAOTIC_GOOD_SERVER_TRANSPORT_H
|
||||
|
|
@ -617,8 +617,17 @@ void Chttp2ServerListener::ActiveConnection::Start(
|
|||
RefCountedPtr<HandshakingState> handshaking_state_ref;
|
||||
listener_ = std::move(listener);
|
||||
{
|
||||
MutexLock lock(&mu_);
|
||||
if (shutdown_) return;
|
||||
ReleasableMutexLock lock(&mu_);
|
||||
if (shutdown_) {
|
||||
lock.Release();
|
||||
// If the Connection is already shutdown at this point, it implies the
|
||||
// owning Chttp2ServerListener and all associated ActiveConnections have
|
||||
// been orphaned. The generated endpoints need to be shutdown here to
|
||||
// ensure the tcp connections are closed appropriately.
|
||||
grpc_endpoint_shutdown(endpoint, absl::OkStatus());
|
||||
grpc_endpoint_destroy(endpoint);
|
||||
return;
|
||||
}
|
||||
// Hold a ref to HandshakingState to allow starting the handshake outside
|
||||
// the critical region.
|
||||
handshaking_state_ref = handshaking_state_->Ref();
|
||||
|
|
|
|||
|
|
@ -36,8 +36,8 @@ class InprocServerTransport final : public RefCounted<InprocServerTransport>,
|
|||
public Transport,
|
||||
public ServerTransport {
|
||||
public:
|
||||
void SetAcceptFunction(AcceptFunction accept_function) override {
|
||||
accept_ = std::move(accept_function);
|
||||
void SetAcceptor(Acceptor* acceptor) override {
|
||||
acceptor_ = acceptor;
|
||||
ConnectionState expect = ConnectionState::kInitial;
|
||||
state_.compare_exchange_strong(expect, ConnectionState::kReady,
|
||||
std::memory_order_acq_rel,
|
||||
|
|
@ -92,7 +92,7 @@ class InprocServerTransport final : public RefCounted<InprocServerTransport>,
|
|||
case ConnectionState::kReady:
|
||||
break;
|
||||
}
|
||||
return accept_(md);
|
||||
return acceptor_->CreateCall(md, acceptor_->CreateArena());
|
||||
}
|
||||
|
||||
private:
|
||||
|
|
@ -100,7 +100,7 @@ class InprocServerTransport final : public RefCounted<InprocServerTransport>,
|
|||
|
||||
std::atomic<ConnectionState> state_{ConnectionState::kInitial};
|
||||
std::atomic<bool> disconnecting_{false};
|
||||
AcceptFunction accept_;
|
||||
Acceptor* acceptor_;
|
||||
absl::Status disconnect_error_;
|
||||
Mutex state_tracker_mu_;
|
||||
ConnectivityStateTracker state_tracker_ ABSL_GUARDED_BY(state_tracker_mu_){
|
||||
|
|
|
|||
712
src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb.h
generated
Normal file
712
src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb.h
generated
Normal file
|
|
@ -0,0 +1,712 @@
|
|||
/* This file was generated by upb_generator from the input file:
|
||||
*
|
||||
* envoy/extensions/upstreams/http/v3/http_protocol_options.proto
|
||||
*
|
||||
* Do not edit -- your changes will be discarded when the file is
|
||||
* regenerated. */
|
||||
|
||||
#ifndef ENVOY_EXTENSIONS_UPSTREAMS_HTTP_V3_HTTP_PROTOCOL_OPTIONS_PROTO_UPB_H_
|
||||
#define ENVOY_EXTENSIONS_UPSTREAMS_HTTP_V3_HTTP_PROTOCOL_OPTIONS_PROTO_UPB_H_
|
||||
|
||||
#include "upb/generated_code_support.h"
|
||||
|
||||
#include "envoy/extensions/upstreams/http/v3/http_protocol_options.upb_minitable.h"
|
||||
|
||||
#include "envoy/config/core/v3/extension.upb_minitable.h"
|
||||
#include "envoy/config/core/v3/protocol.upb_minitable.h"
|
||||
#include "envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb_minitable.h"
|
||||
#include "udpa/annotations/status.upb_minitable.h"
|
||||
#include "validate/validate.upb_minitable.h"
|
||||
|
||||
// Must be last.
|
||||
#include "upb/port/def.inc"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef struct envoy_extensions_upstreams_http_v3_HttpProtocolOptions envoy_extensions_upstreams_http_v3_HttpProtocolOptions;
|
||||
typedef struct envoy_extensions_upstreams_http_v3_HttpProtocolOptions_ExplicitHttpConfig envoy_extensions_upstreams_http_v3_HttpProtocolOptions_ExplicitHttpConfig;
|
||||
typedef struct envoy_extensions_upstreams_http_v3_HttpProtocolOptions_UseDownstreamHttpConfig envoy_extensions_upstreams_http_v3_HttpProtocolOptions_UseDownstreamHttpConfig;
|
||||
typedef struct envoy_extensions_upstreams_http_v3_HttpProtocolOptions_AutoHttpConfig envoy_extensions_upstreams_http_v3_HttpProtocolOptions_AutoHttpConfig;
|
||||
struct envoy_config_core_v3_AlternateProtocolsCacheOptions;
|
||||
struct envoy_config_core_v3_Http1ProtocolOptions;
|
||||
struct envoy_config_core_v3_Http2ProtocolOptions;
|
||||
struct envoy_config_core_v3_Http3ProtocolOptions;
|
||||
struct envoy_config_core_v3_HttpProtocolOptions;
|
||||
struct envoy_config_core_v3_TypedExtensionConfig;
|
||||
struct envoy_config_core_v3_UpstreamHttpProtocolOptions;
|
||||
struct envoy_extensions_filters_network_http_connection_manager_v3_HttpFilter;
|
||||
|
||||
|
||||
|
||||
/* envoy.extensions.upstreams.http.v3.HttpProtocolOptions */
|
||||
|
||||
UPB_INLINE envoy_extensions_upstreams_http_v3_HttpProtocolOptions* envoy_extensions_upstreams_http_v3_HttpProtocolOptions_new(upb_Arena* arena) {
|
||||
return (envoy_extensions_upstreams_http_v3_HttpProtocolOptions*)_upb_Message_New(&envoy__extensions__upstreams__http__v3__HttpProtocolOptions_msg_init, arena);
|
||||
}
|
||||
UPB_INLINE envoy_extensions_upstreams_http_v3_HttpProtocolOptions* envoy_extensions_upstreams_http_v3_HttpProtocolOptions_parse(const char* buf, size_t size, upb_Arena* arena) {
|
||||
envoy_extensions_upstreams_http_v3_HttpProtocolOptions* ret = envoy_extensions_upstreams_http_v3_HttpProtocolOptions_new(arena);
|
||||
if (!ret) return NULL;
|
||||
if (upb_Decode(buf, size, ret, &envoy__extensions__upstreams__http__v3__HttpProtocolOptions_msg_init, NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
|
||||
return NULL;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
UPB_INLINE envoy_extensions_upstreams_http_v3_HttpProtocolOptions* envoy_extensions_upstreams_http_v3_HttpProtocolOptions_parse_ex(const char* buf, size_t size,
|
||||
const upb_ExtensionRegistry* extreg,
|
||||
int options, upb_Arena* arena) {
|
||||
envoy_extensions_upstreams_http_v3_HttpProtocolOptions* ret = envoy_extensions_upstreams_http_v3_HttpProtocolOptions_new(arena);
|
||||
if (!ret) return NULL;
|
||||
if (upb_Decode(buf, size, ret, &envoy__extensions__upstreams__http__v3__HttpProtocolOptions_msg_init, extreg, options, arena) !=
|
||||
kUpb_DecodeStatus_Ok) {
|
||||
return NULL;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
UPB_INLINE char* envoy_extensions_upstreams_http_v3_HttpProtocolOptions_serialize(const envoy_extensions_upstreams_http_v3_HttpProtocolOptions* msg, upb_Arena* arena, size_t* len) {
|
||||
char* ptr;
|
||||
(void)upb_Encode(msg, &envoy__extensions__upstreams__http__v3__HttpProtocolOptions_msg_init, 0, arena, &ptr, len);
|
||||
return ptr;
|
||||
}
|
||||
UPB_INLINE char* envoy_extensions_upstreams_http_v3_HttpProtocolOptions_serialize_ex(const envoy_extensions_upstreams_http_v3_HttpProtocolOptions* msg, int options,
|
||||
upb_Arena* arena, size_t* len) {
|
||||
char* ptr;
|
||||
(void)upb_Encode(msg, &envoy__extensions__upstreams__http__v3__HttpProtocolOptions_msg_init, options, arena, &ptr, len);
|
||||
return ptr;
|
||||
}
|
||||
typedef enum {
|
||||
envoy_extensions_upstreams_http_v3_HttpProtocolOptions_upstream_protocol_options_explicit_http_config = 3,
|
||||
envoy_extensions_upstreams_http_v3_HttpProtocolOptions_upstream_protocol_options_use_downstream_protocol_config = 4,
|
||||
envoy_extensions_upstreams_http_v3_HttpProtocolOptions_upstream_protocol_options_auto_config = 5,
|
||||
envoy_extensions_upstreams_http_v3_HttpProtocolOptions_upstream_protocol_options_NOT_SET = 0
|
||||
} envoy_extensions_upstreams_http_v3_HttpProtocolOptions_upstream_protocol_options_oneofcases;
|
||||
UPB_INLINE envoy_extensions_upstreams_http_v3_HttpProtocolOptions_upstream_protocol_options_oneofcases envoy_extensions_upstreams_http_v3_HttpProtocolOptions_upstream_protocol_options_case(const envoy_extensions_upstreams_http_v3_HttpProtocolOptions* msg) {
|
||||
const upb_MiniTableField field = {3, UPB_SIZE(24, 40), UPB_SIZE(-13, -5), 2, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
|
||||
return (envoy_extensions_upstreams_http_v3_HttpProtocolOptions_upstream_protocol_options_oneofcases)upb_Message_WhichOneofFieldNumber(msg, &field);
|
||||
}
|
||||
UPB_INLINE void envoy_extensions_upstreams_http_v3_HttpProtocolOptions_clear_common_http_protocol_options(envoy_extensions_upstreams_http_v3_HttpProtocolOptions* msg) {
|
||||
const upb_MiniTableField field = {1, UPB_SIZE(4, 8), 1, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
|
||||
_upb_Message_ClearNonExtensionField(msg, &field);
|
||||
}
|
||||
UPB_INLINE const struct envoy_config_core_v3_HttpProtocolOptions* envoy_extensions_upstreams_http_v3_HttpProtocolOptions_common_http_protocol_options(const envoy_extensions_upstreams_http_v3_HttpProtocolOptions* msg) {
|
||||
const struct envoy_config_core_v3_HttpProtocolOptions* default_val = NULL;
|
||||
const struct envoy_config_core_v3_HttpProtocolOptions* ret;
|
||||
const upb_MiniTableField field = {1, UPB_SIZE(4, 8), 1, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
|
||||
_upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
|
||||
return ret;
|
||||
}
|
||||
UPB_INLINE bool envoy_extensions_upstreams_http_v3_HttpProtocolOptions_has_common_http_protocol_options(const envoy_extensions_upstreams_http_v3_HttpProtocolOptions* msg) {
|
||||
const upb_MiniTableField field = {1, UPB_SIZE(4, 8), 1, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
|
||||
return _upb_Message_HasNonExtensionField(msg, &field);
|
||||
}
|
||||
UPB_INLINE void envoy_extensions_upstreams_http_v3_HttpProtocolOptions_clear_upstream_http_protocol_options(envoy_extensions_upstreams_http_v3_HttpProtocolOptions* msg) {
|
||||
const upb_MiniTableField field = {2, UPB_SIZE(8, 16), 2, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
|
||||
_upb_Message_ClearNonExtensionField(msg, &field);
|
||||
}
|
||||
UPB_INLINE const struct envoy_config_core_v3_UpstreamHttpProtocolOptions* envoy_extensions_upstreams_http_v3_HttpProtocolOptions_upstream_http_protocol_options(const envoy_extensions_upstreams_http_v3_HttpProtocolOptions* msg) {
|
||||
const struct envoy_config_core_v3_UpstreamHttpProtocolOptions* default_val = NULL;
|
||||
const struct envoy_config_core_v3_UpstreamHttpProtocolOptions* ret;
|
||||
const upb_MiniTableField field = {2, UPB_SIZE(8, 16), 2, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
|
||||
_upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
|
||||
return ret;
|
||||
}
|
||||
UPB_INLINE bool envoy_extensions_upstreams_http_v3_HttpProtocolOptions_has_upstream_http_protocol_options(const envoy_extensions_upstreams_http_v3_HttpProtocolOptions* msg) {
|
||||
const upb_MiniTableField field = {2, UPB_SIZE(8, 16), 2, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
|
||||
return _upb_Message_HasNonExtensionField(msg, &field);
|
||||
}
|
||||
UPB_INLINE void envoy_extensions_upstreams_http_v3_HttpProtocolOptions_clear_explicit_http_config(envoy_extensions_upstreams_http_v3_HttpProtocolOptions* msg) {
|
||||
const upb_MiniTableField field = {3, UPB_SIZE(24, 40), UPB_SIZE(-13, -5), 2, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
|
||||
_upb_Message_ClearNonExtensionField(msg, &field);
|
||||
}
|
||||
UPB_INLINE const envoy_extensions_upstreams_http_v3_HttpProtocolOptions_ExplicitHttpConfig* envoy_extensions_upstreams_http_v3_HttpProtocolOptions_explicit_http_config(const envoy_extensions_upstreams_http_v3_HttpProtocolOptions* msg) {
|
||||
const envoy_extensions_upstreams_http_v3_HttpProtocolOptions_ExplicitHttpConfig* default_val = NULL;
|
||||
const envoy_extensions_upstreams_http_v3_HttpProtocolOptions_ExplicitHttpConfig* ret;
|
||||
const upb_MiniTableField field = {3, UPB_SIZE(24, 40), UPB_SIZE(-13, -5), 2, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
|
||||
_upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
|
||||
return ret;
|
||||
}
|
||||
UPB_INLINE bool envoy_extensions_upstreams_http_v3_HttpProtocolOptions_has_explicit_http_config(const envoy_extensions_upstreams_http_v3_HttpProtocolOptions* msg) {
|
||||
const upb_MiniTableField field = {3, UPB_SIZE(24, 40), UPB_SIZE(-13, -5), 2, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
|
||||
return _upb_Message_HasNonExtensionField(msg, &field);
|
||||
}
|
||||
UPB_INLINE void envoy_extensions_upstreams_http_v3_HttpProtocolOptions_clear_use_downstream_protocol_config(envoy_extensions_upstreams_http_v3_HttpProtocolOptions* msg) {
|
||||
const upb_MiniTableField field = {4, UPB_SIZE(24, 40), UPB_SIZE(-13, -5), 3, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
|
||||
_upb_Message_ClearNonExtensionField(msg, &field);
|
||||
}
|
||||
UPB_INLINE const envoy_extensions_upstreams_http_v3_HttpProtocolOptions_UseDownstreamHttpConfig* envoy_extensions_upstreams_http_v3_HttpProtocolOptions_use_downstream_protocol_config(const envoy_extensions_upstreams_http_v3_HttpProtocolOptions* msg) {
|
||||
const envoy_extensions_upstreams_http_v3_HttpProtocolOptions_UseDownstreamHttpConfig* default_val = NULL;
|
||||
const envoy_extensions_upstreams_http_v3_HttpProtocolOptions_UseDownstreamHttpConfig* ret;
|
||||
const upb_MiniTableField field = {4, UPB_SIZE(24, 40), UPB_SIZE(-13, -5), 3, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
|
||||
_upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
|
||||
return ret;
|
||||
}
|
||||
UPB_INLINE bool envoy_extensions_upstreams_http_v3_HttpProtocolOptions_has_use_downstream_protocol_config(const envoy_extensions_upstreams_http_v3_HttpProtocolOptions* msg) {
|
||||
const upb_MiniTableField field = {4, UPB_SIZE(24, 40), UPB_SIZE(-13, -5), 3, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
|
||||
return _upb_Message_HasNonExtensionField(msg, &field);
|
||||
}
|
||||
UPB_INLINE void envoy_extensions_upstreams_http_v3_HttpProtocolOptions_clear_auto_config(envoy_extensions_upstreams_http_v3_HttpProtocolOptions* msg) {
|
||||
const upb_MiniTableField field = {5, UPB_SIZE(24, 40), UPB_SIZE(-13, -5), 4, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
|
||||
_upb_Message_ClearNonExtensionField(msg, &field);
|
||||
}
|
||||
UPB_INLINE const envoy_extensions_upstreams_http_v3_HttpProtocolOptions_AutoHttpConfig* envoy_extensions_upstreams_http_v3_HttpProtocolOptions_auto_config(const envoy_extensions_upstreams_http_v3_HttpProtocolOptions* msg) {
|
||||
const envoy_extensions_upstreams_http_v3_HttpProtocolOptions_AutoHttpConfig* default_val = NULL;
|
||||
const envoy_extensions_upstreams_http_v3_HttpProtocolOptions_AutoHttpConfig* ret;
|
||||
const upb_MiniTableField field = {5, UPB_SIZE(24, 40), UPB_SIZE(-13, -5), 4, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
|
||||
_upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
|
||||
return ret;
|
||||
}
|
||||
UPB_INLINE bool envoy_extensions_upstreams_http_v3_HttpProtocolOptions_has_auto_config(const envoy_extensions_upstreams_http_v3_HttpProtocolOptions* msg) {
|
||||
const upb_MiniTableField field = {5, UPB_SIZE(24, 40), UPB_SIZE(-13, -5), 4, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
|
||||
return _upb_Message_HasNonExtensionField(msg, &field);
|
||||
}
|
||||
UPB_INLINE void envoy_extensions_upstreams_http_v3_HttpProtocolOptions_clear_http_filters(envoy_extensions_upstreams_http_v3_HttpProtocolOptions* msg) {
|
||||
const upb_MiniTableField field = {6, UPB_SIZE(16, 24), 0, 5, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
|
||||
_upb_Message_ClearNonExtensionField(msg, &field);
|
||||
}
|
||||
UPB_INLINE const struct envoy_extensions_filters_network_http_connection_manager_v3_HttpFilter* const* envoy_extensions_upstreams_http_v3_HttpProtocolOptions_http_filters(const envoy_extensions_upstreams_http_v3_HttpProtocolOptions* msg, size_t* size) {
|
||||
const upb_MiniTableField field = {6, UPB_SIZE(16, 24), 0, 5, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
|
||||
const upb_Array* arr = upb_Message_GetArray(msg, &field);
|
||||
if (arr) {
|
||||
if (size) *size = arr->size;
|
||||
return (const struct envoy_extensions_filters_network_http_connection_manager_v3_HttpFilter* const*)_upb_array_constptr(arr);
|
||||
} else {
|
||||
if (size) *size = 0;
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
UPB_INLINE const upb_Array* _envoy_extensions_upstreams_http_v3_HttpProtocolOptions_http_filters_upb_array(const envoy_extensions_upstreams_http_v3_HttpProtocolOptions* msg, size_t* size) {
|
||||
const upb_MiniTableField field = {6, UPB_SIZE(16, 24), 0, 5, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
|
||||
const upb_Array* arr = upb_Message_GetArray(msg, &field);
|
||||
if (size) {
|
||||
*size = arr ? arr->size : 0;
|
||||
}
|
||||
return arr;
|
||||
}
|
||||
UPB_INLINE upb_Array* _envoy_extensions_upstreams_http_v3_HttpProtocolOptions_http_filters_mutable_upb_array(const envoy_extensions_upstreams_http_v3_HttpProtocolOptions* msg, size_t* size, upb_Arena* arena) {
|
||||
const upb_MiniTableField field = {6, UPB_SIZE(16, 24), 0, 5, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
|
||||
upb_Array* arr = upb_Message_GetOrCreateMutableArray(
|
||||
(upb_Message*)msg, &field, arena);
|
||||
if (size) {
|
||||
*size = arr ? arr->size : 0;
|
||||
}
|
||||
return arr;
|
||||
}
|
||||
UPB_INLINE bool envoy_extensions_upstreams_http_v3_HttpProtocolOptions_has_http_filters(const envoy_extensions_upstreams_http_v3_HttpProtocolOptions* msg) {
|
||||
size_t size;
|
||||
envoy_extensions_upstreams_http_v3_HttpProtocolOptions_http_filters(msg, &size);
|
||||
return size != 0;
|
||||
}
|
||||
UPB_INLINE void envoy_extensions_upstreams_http_v3_HttpProtocolOptions_clear_header_validation_config(envoy_extensions_upstreams_http_v3_HttpProtocolOptions* msg) {
|
||||
const upb_MiniTableField field = {7, UPB_SIZE(20, 32), 3, 6, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
|
||||
_upb_Message_ClearNonExtensionField(msg, &field);
|
||||
}
|
||||
UPB_INLINE const struct envoy_config_core_v3_TypedExtensionConfig* envoy_extensions_upstreams_http_v3_HttpProtocolOptions_header_validation_config(const envoy_extensions_upstreams_http_v3_HttpProtocolOptions* msg) {
|
||||
const struct envoy_config_core_v3_TypedExtensionConfig* default_val = NULL;
|
||||
const struct envoy_config_core_v3_TypedExtensionConfig* ret;
|
||||
const upb_MiniTableField field = {7, UPB_SIZE(20, 32), 3, 6, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
|
||||
_upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
|
||||
return ret;
|
||||
}
|
||||
UPB_INLINE bool envoy_extensions_upstreams_http_v3_HttpProtocolOptions_has_header_validation_config(const envoy_extensions_upstreams_http_v3_HttpProtocolOptions* msg) {
|
||||
const upb_MiniTableField field = {7, UPB_SIZE(20, 32), 3, 6, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
|
||||
return _upb_Message_HasNonExtensionField(msg, &field);
|
||||
}
|
||||
|
||||
UPB_INLINE void envoy_extensions_upstreams_http_v3_HttpProtocolOptions_set_common_http_protocol_options(envoy_extensions_upstreams_http_v3_HttpProtocolOptions *msg, struct envoy_config_core_v3_HttpProtocolOptions* value) {
|
||||
const upb_MiniTableField field = {1, UPB_SIZE(4, 8), 1, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
|
||||
_upb_Message_SetNonExtensionField(msg, &field, &value);
|
||||
}
|
||||
UPB_INLINE struct envoy_config_core_v3_HttpProtocolOptions* envoy_extensions_upstreams_http_v3_HttpProtocolOptions_mutable_common_http_protocol_options(envoy_extensions_upstreams_http_v3_HttpProtocolOptions* msg, upb_Arena* arena) {
|
||||
struct envoy_config_core_v3_HttpProtocolOptions* sub = (struct envoy_config_core_v3_HttpProtocolOptions*)envoy_extensions_upstreams_http_v3_HttpProtocolOptions_common_http_protocol_options(msg);
|
||||
if (sub == NULL) {
|
||||
sub = (struct envoy_config_core_v3_HttpProtocolOptions*)_upb_Message_New(&envoy__config__core__v3__HttpProtocolOptions_msg_init, arena);
|
||||
if (sub) envoy_extensions_upstreams_http_v3_HttpProtocolOptions_set_common_http_protocol_options(msg, sub);
|
||||
}
|
||||
return sub;
|
||||
}
|
||||
UPB_INLINE void envoy_extensions_upstreams_http_v3_HttpProtocolOptions_set_upstream_http_protocol_options(envoy_extensions_upstreams_http_v3_HttpProtocolOptions *msg, struct envoy_config_core_v3_UpstreamHttpProtocolOptions* value) {
|
||||
const upb_MiniTableField field = {2, UPB_SIZE(8, 16), 2, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
|
||||
_upb_Message_SetNonExtensionField(msg, &field, &value);
|
||||
}
|
||||
UPB_INLINE struct envoy_config_core_v3_UpstreamHttpProtocolOptions* envoy_extensions_upstreams_http_v3_HttpProtocolOptions_mutable_upstream_http_protocol_options(envoy_extensions_upstreams_http_v3_HttpProtocolOptions* msg, upb_Arena* arena) {
|
||||
struct envoy_config_core_v3_UpstreamHttpProtocolOptions* sub = (struct envoy_config_core_v3_UpstreamHttpProtocolOptions*)envoy_extensions_upstreams_http_v3_HttpProtocolOptions_upstream_http_protocol_options(msg);
|
||||
if (sub == NULL) {
|
||||
sub = (struct envoy_config_core_v3_UpstreamHttpProtocolOptions*)_upb_Message_New(&envoy__config__core__v3__UpstreamHttpProtocolOptions_msg_init, arena);
|
||||
if (sub) envoy_extensions_upstreams_http_v3_HttpProtocolOptions_set_upstream_http_protocol_options(msg, sub);
|
||||
}
|
||||
return sub;
|
||||
}
|
||||
UPB_INLINE void envoy_extensions_upstreams_http_v3_HttpProtocolOptions_set_explicit_http_config(envoy_extensions_upstreams_http_v3_HttpProtocolOptions *msg, envoy_extensions_upstreams_http_v3_HttpProtocolOptions_ExplicitHttpConfig* value) {
|
||||
const upb_MiniTableField field = {3, UPB_SIZE(24, 40), UPB_SIZE(-13, -5), 2, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
|
||||
_upb_Message_SetNonExtensionField(msg, &field, &value);
|
||||
}
|
||||
UPB_INLINE struct envoy_extensions_upstreams_http_v3_HttpProtocolOptions_ExplicitHttpConfig* envoy_extensions_upstreams_http_v3_HttpProtocolOptions_mutable_explicit_http_config(envoy_extensions_upstreams_http_v3_HttpProtocolOptions* msg, upb_Arena* arena) {
|
||||
struct envoy_extensions_upstreams_http_v3_HttpProtocolOptions_ExplicitHttpConfig* sub = (struct envoy_extensions_upstreams_http_v3_HttpProtocolOptions_ExplicitHttpConfig*)envoy_extensions_upstreams_http_v3_HttpProtocolOptions_explicit_http_config(msg);
|
||||
if (sub == NULL) {
|
||||
sub = (struct envoy_extensions_upstreams_http_v3_HttpProtocolOptions_ExplicitHttpConfig*)_upb_Message_New(&envoy__extensions__upstreams__http__v3__HttpProtocolOptions__ExplicitHttpConfig_msg_init, arena);
|
||||
if (sub) envoy_extensions_upstreams_http_v3_HttpProtocolOptions_set_explicit_http_config(msg, sub);
|
||||
}
|
||||
return sub;
|
||||
}
|
||||
UPB_INLINE void envoy_extensions_upstreams_http_v3_HttpProtocolOptions_set_use_downstream_protocol_config(envoy_extensions_upstreams_http_v3_HttpProtocolOptions *msg, envoy_extensions_upstreams_http_v3_HttpProtocolOptions_UseDownstreamHttpConfig* value) {
|
||||
const upb_MiniTableField field = {4, UPB_SIZE(24, 40), UPB_SIZE(-13, -5), 3, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
|
||||
_upb_Message_SetNonExtensionField(msg, &field, &value);
|
||||
}
|
||||
UPB_INLINE struct envoy_extensions_upstreams_http_v3_HttpProtocolOptions_UseDownstreamHttpConfig* envoy_extensions_upstreams_http_v3_HttpProtocolOptions_mutable_use_downstream_protocol_config(envoy_extensions_upstreams_http_v3_HttpProtocolOptions* msg, upb_Arena* arena) {
|
||||
struct envoy_extensions_upstreams_http_v3_HttpProtocolOptions_UseDownstreamHttpConfig* sub = (struct envoy_extensions_upstreams_http_v3_HttpProtocolOptions_UseDownstreamHttpConfig*)envoy_extensions_upstreams_http_v3_HttpProtocolOptions_use_downstream_protocol_config(msg);
|
||||
if (sub == NULL) {
|
||||
sub = (struct envoy_extensions_upstreams_http_v3_HttpProtocolOptions_UseDownstreamHttpConfig*)_upb_Message_New(&envoy__extensions__upstreams__http__v3__HttpProtocolOptions__UseDownstreamHttpConfig_msg_init, arena);
|
||||
if (sub) envoy_extensions_upstreams_http_v3_HttpProtocolOptions_set_use_downstream_protocol_config(msg, sub);
|
||||
}
|
||||
return sub;
|
||||
}
|
||||
UPB_INLINE void envoy_extensions_upstreams_http_v3_HttpProtocolOptions_set_auto_config(envoy_extensions_upstreams_http_v3_HttpProtocolOptions *msg, envoy_extensions_upstreams_http_v3_HttpProtocolOptions_AutoHttpConfig* value) {
|
||||
const upb_MiniTableField field = {5, UPB_SIZE(24, 40), UPB_SIZE(-13, -5), 4, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
|
||||
_upb_Message_SetNonExtensionField(msg, &field, &value);
|
||||
}
|
||||
UPB_INLINE struct envoy_extensions_upstreams_http_v3_HttpProtocolOptions_AutoHttpConfig* envoy_extensions_upstreams_http_v3_HttpProtocolOptions_mutable_auto_config(envoy_extensions_upstreams_http_v3_HttpProtocolOptions* msg, upb_Arena* arena) {
|
||||
struct envoy_extensions_upstreams_http_v3_HttpProtocolOptions_AutoHttpConfig* sub = (struct envoy_extensions_upstreams_http_v3_HttpProtocolOptions_AutoHttpConfig*)envoy_extensions_upstreams_http_v3_HttpProtocolOptions_auto_config(msg);
|
||||
if (sub == NULL) {
|
||||
sub = (struct envoy_extensions_upstreams_http_v3_HttpProtocolOptions_AutoHttpConfig*)_upb_Message_New(&envoy__extensions__upstreams__http__v3__HttpProtocolOptions__AutoHttpConfig_msg_init, arena);
|
||||
if (sub) envoy_extensions_upstreams_http_v3_HttpProtocolOptions_set_auto_config(msg, sub);
|
||||
}
|
||||
return sub;
|
||||
}
|
||||
UPB_INLINE struct envoy_extensions_filters_network_http_connection_manager_v3_HttpFilter** envoy_extensions_upstreams_http_v3_HttpProtocolOptions_mutable_http_filters(envoy_extensions_upstreams_http_v3_HttpProtocolOptions* msg, size_t* size) {
|
||||
upb_MiniTableField field = {6, UPB_SIZE(16, 24), 0, 5, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
|
||||
upb_Array* arr = upb_Message_GetMutableArray(msg, &field);
|
||||
if (arr) {
|
||||
if (size) *size = arr->size;
|
||||
return (struct envoy_extensions_filters_network_http_connection_manager_v3_HttpFilter**)_upb_array_ptr(arr);
|
||||
} else {
|
||||
if (size) *size = 0;
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
UPB_INLINE struct envoy_extensions_filters_network_http_connection_manager_v3_HttpFilter** envoy_extensions_upstreams_http_v3_HttpProtocolOptions_resize_http_filters(envoy_extensions_upstreams_http_v3_HttpProtocolOptions* msg, size_t size, upb_Arena* arena) {
|
||||
upb_MiniTableField field = {6, UPB_SIZE(16, 24), 0, 5, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
|
||||
return (struct envoy_extensions_filters_network_http_connection_manager_v3_HttpFilter**)upb_Message_ResizeArrayUninitialized(msg, &field, size, arena);
|
||||
}
|
||||
UPB_INLINE struct envoy_extensions_filters_network_http_connection_manager_v3_HttpFilter* envoy_extensions_upstreams_http_v3_HttpProtocolOptions_add_http_filters(envoy_extensions_upstreams_http_v3_HttpProtocolOptions* msg, upb_Arena* arena) {
|
||||
upb_MiniTableField field = {6, UPB_SIZE(16, 24), 0, 5, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
|
||||
upb_Array* arr = upb_Message_GetOrCreateMutableArray(msg, &field, arena);
|
||||
if (!arr || !_upb_Array_ResizeUninitialized(arr, arr->size + 1, arena)) {
|
||||
return NULL;
|
||||
}
|
||||
struct envoy_extensions_filters_network_http_connection_manager_v3_HttpFilter* sub = (struct envoy_extensions_filters_network_http_connection_manager_v3_HttpFilter*)_upb_Message_New(&envoy__extensions__filters__network__http_0connection_0manager__v3__HttpFilter_msg_init, arena);
|
||||
if (!arr || !sub) return NULL;
|
||||
_upb_Array_Set(arr, arr->size - 1, &sub, sizeof(sub));
|
||||
return sub;
|
||||
}
|
||||
UPB_INLINE void envoy_extensions_upstreams_http_v3_HttpProtocolOptions_set_header_validation_config(envoy_extensions_upstreams_http_v3_HttpProtocolOptions *msg, struct envoy_config_core_v3_TypedExtensionConfig* value) {
|
||||
const upb_MiniTableField field = {7, UPB_SIZE(20, 32), 3, 6, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
|
||||
_upb_Message_SetNonExtensionField(msg, &field, &value);
|
||||
}
|
||||
UPB_INLINE struct envoy_config_core_v3_TypedExtensionConfig* envoy_extensions_upstreams_http_v3_HttpProtocolOptions_mutable_header_validation_config(envoy_extensions_upstreams_http_v3_HttpProtocolOptions* msg, upb_Arena* arena) {
|
||||
struct envoy_config_core_v3_TypedExtensionConfig* sub = (struct envoy_config_core_v3_TypedExtensionConfig*)envoy_extensions_upstreams_http_v3_HttpProtocolOptions_header_validation_config(msg);
|
||||
if (sub == NULL) {
|
||||
sub = (struct envoy_config_core_v3_TypedExtensionConfig*)_upb_Message_New(&envoy__config__core__v3__TypedExtensionConfig_msg_init, arena);
|
||||
if (sub) envoy_extensions_upstreams_http_v3_HttpProtocolOptions_set_header_validation_config(msg, sub);
|
||||
}
|
||||
return sub;
|
||||
}
|
||||
|
||||
/* envoy.extensions.upstreams.http.v3.HttpProtocolOptions.ExplicitHttpConfig */
|
||||
|
||||
UPB_INLINE envoy_extensions_upstreams_http_v3_HttpProtocolOptions_ExplicitHttpConfig* envoy_extensions_upstreams_http_v3_HttpProtocolOptions_ExplicitHttpConfig_new(upb_Arena* arena) {
|
||||
return (envoy_extensions_upstreams_http_v3_HttpProtocolOptions_ExplicitHttpConfig*)_upb_Message_New(&envoy__extensions__upstreams__http__v3__HttpProtocolOptions__ExplicitHttpConfig_msg_init, arena);
|
||||
}
|
||||
UPB_INLINE envoy_extensions_upstreams_http_v3_HttpProtocolOptions_ExplicitHttpConfig* envoy_extensions_upstreams_http_v3_HttpProtocolOptions_ExplicitHttpConfig_parse(const char* buf, size_t size, upb_Arena* arena) {
|
||||
envoy_extensions_upstreams_http_v3_HttpProtocolOptions_ExplicitHttpConfig* ret = envoy_extensions_upstreams_http_v3_HttpProtocolOptions_ExplicitHttpConfig_new(arena);
|
||||
if (!ret) return NULL;
|
||||
if (upb_Decode(buf, size, ret, &envoy__extensions__upstreams__http__v3__HttpProtocolOptions__ExplicitHttpConfig_msg_init, NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
|
||||
return NULL;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
UPB_INLINE envoy_extensions_upstreams_http_v3_HttpProtocolOptions_ExplicitHttpConfig* envoy_extensions_upstreams_http_v3_HttpProtocolOptions_ExplicitHttpConfig_parse_ex(const char* buf, size_t size,
|
||||
const upb_ExtensionRegistry* extreg,
|
||||
int options, upb_Arena* arena) {
|
||||
envoy_extensions_upstreams_http_v3_HttpProtocolOptions_ExplicitHttpConfig* ret = envoy_extensions_upstreams_http_v3_HttpProtocolOptions_ExplicitHttpConfig_new(arena);
|
||||
if (!ret) return NULL;
|
||||
if (upb_Decode(buf, size, ret, &envoy__extensions__upstreams__http__v3__HttpProtocolOptions__ExplicitHttpConfig_msg_init, extreg, options, arena) !=
|
||||
kUpb_DecodeStatus_Ok) {
|
||||
return NULL;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
UPB_INLINE char* envoy_extensions_upstreams_http_v3_HttpProtocolOptions_ExplicitHttpConfig_serialize(const envoy_extensions_upstreams_http_v3_HttpProtocolOptions_ExplicitHttpConfig* msg, upb_Arena* arena, size_t* len) {
|
||||
char* ptr;
|
||||
(void)upb_Encode(msg, &envoy__extensions__upstreams__http__v3__HttpProtocolOptions__ExplicitHttpConfig_msg_init, 0, arena, &ptr, len);
|
||||
return ptr;
|
||||
}
|
||||
UPB_INLINE char* envoy_extensions_upstreams_http_v3_HttpProtocolOptions_ExplicitHttpConfig_serialize_ex(const envoy_extensions_upstreams_http_v3_HttpProtocolOptions_ExplicitHttpConfig* msg, int options,
|
||||
upb_Arena* arena, size_t* len) {
|
||||
char* ptr;
|
||||
(void)upb_Encode(msg, &envoy__extensions__upstreams__http__v3__HttpProtocolOptions__ExplicitHttpConfig_msg_init, options, arena, &ptr, len);
|
||||
return ptr;
|
||||
}
|
||||
typedef enum {
|
||||
envoy_extensions_upstreams_http_v3_HttpProtocolOptions_ExplicitHttpConfig_protocol_config_http_protocol_options = 1,
|
||||
envoy_extensions_upstreams_http_v3_HttpProtocolOptions_ExplicitHttpConfig_protocol_config_http2_protocol_options = 2,
|
||||
envoy_extensions_upstreams_http_v3_HttpProtocolOptions_ExplicitHttpConfig_protocol_config_http3_protocol_options = 3,
|
||||
envoy_extensions_upstreams_http_v3_HttpProtocolOptions_ExplicitHttpConfig_protocol_config_NOT_SET = 0
|
||||
} envoy_extensions_upstreams_http_v3_HttpProtocolOptions_ExplicitHttpConfig_protocol_config_oneofcases;
|
||||
UPB_INLINE envoy_extensions_upstreams_http_v3_HttpProtocolOptions_ExplicitHttpConfig_protocol_config_oneofcases envoy_extensions_upstreams_http_v3_HttpProtocolOptions_ExplicitHttpConfig_protocol_config_case(const envoy_extensions_upstreams_http_v3_HttpProtocolOptions_ExplicitHttpConfig* msg) {
|
||||
const upb_MiniTableField field = {1, UPB_SIZE(4, 8), -1, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
|
||||
return (envoy_extensions_upstreams_http_v3_HttpProtocolOptions_ExplicitHttpConfig_protocol_config_oneofcases)upb_Message_WhichOneofFieldNumber(msg, &field);
|
||||
}
|
||||
UPB_INLINE void envoy_extensions_upstreams_http_v3_HttpProtocolOptions_ExplicitHttpConfig_clear_http_protocol_options(envoy_extensions_upstreams_http_v3_HttpProtocolOptions_ExplicitHttpConfig* msg) {
|
||||
const upb_MiniTableField field = {1, UPB_SIZE(4, 8), -1, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
|
||||
_upb_Message_ClearNonExtensionField(msg, &field);
|
||||
}
|
||||
UPB_INLINE const struct envoy_config_core_v3_Http1ProtocolOptions* envoy_extensions_upstreams_http_v3_HttpProtocolOptions_ExplicitHttpConfig_http_protocol_options(const envoy_extensions_upstreams_http_v3_HttpProtocolOptions_ExplicitHttpConfig* msg) {
|
||||
const struct envoy_config_core_v3_Http1ProtocolOptions* default_val = NULL;
|
||||
const struct envoy_config_core_v3_Http1ProtocolOptions* ret;
|
||||
const upb_MiniTableField field = {1, UPB_SIZE(4, 8), -1, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
|
||||
_upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
|
||||
return ret;
|
||||
}
|
||||
UPB_INLINE bool envoy_extensions_upstreams_http_v3_HttpProtocolOptions_ExplicitHttpConfig_has_http_protocol_options(const envoy_extensions_upstreams_http_v3_HttpProtocolOptions_ExplicitHttpConfig* msg) {
|
||||
const upb_MiniTableField field = {1, UPB_SIZE(4, 8), -1, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
|
||||
return _upb_Message_HasNonExtensionField(msg, &field);
|
||||
}
|
||||
UPB_INLINE void envoy_extensions_upstreams_http_v3_HttpProtocolOptions_ExplicitHttpConfig_clear_http2_protocol_options(envoy_extensions_upstreams_http_v3_HttpProtocolOptions_ExplicitHttpConfig* msg) {
|
||||
const upb_MiniTableField field = {2, UPB_SIZE(4, 8), -1, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
|
||||
_upb_Message_ClearNonExtensionField(msg, &field);
|
||||
}
|
||||
UPB_INLINE const struct envoy_config_core_v3_Http2ProtocolOptions* envoy_extensions_upstreams_http_v3_HttpProtocolOptions_ExplicitHttpConfig_http2_protocol_options(const envoy_extensions_upstreams_http_v3_HttpProtocolOptions_ExplicitHttpConfig* msg) {
|
||||
const struct envoy_config_core_v3_Http2ProtocolOptions* default_val = NULL;
|
||||
const struct envoy_config_core_v3_Http2ProtocolOptions* ret;
|
||||
const upb_MiniTableField field = {2, UPB_SIZE(4, 8), -1, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
|
||||
_upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
|
||||
return ret;
|
||||
}
|
||||
UPB_INLINE bool envoy_extensions_upstreams_http_v3_HttpProtocolOptions_ExplicitHttpConfig_has_http2_protocol_options(const envoy_extensions_upstreams_http_v3_HttpProtocolOptions_ExplicitHttpConfig* msg) {
|
||||
const upb_MiniTableField field = {2, UPB_SIZE(4, 8), -1, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
|
||||
return _upb_Message_HasNonExtensionField(msg, &field);
|
||||
}
|
||||
UPB_INLINE void envoy_extensions_upstreams_http_v3_HttpProtocolOptions_ExplicitHttpConfig_clear_http3_protocol_options(envoy_extensions_upstreams_http_v3_HttpProtocolOptions_ExplicitHttpConfig* msg) {
|
||||
const upb_MiniTableField field = {3, UPB_SIZE(4, 8), -1, 2, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
|
||||
_upb_Message_ClearNonExtensionField(msg, &field);
|
||||
}
|
||||
UPB_INLINE const struct envoy_config_core_v3_Http3ProtocolOptions* envoy_extensions_upstreams_http_v3_HttpProtocolOptions_ExplicitHttpConfig_http3_protocol_options(const envoy_extensions_upstreams_http_v3_HttpProtocolOptions_ExplicitHttpConfig* msg) {
|
||||
const struct envoy_config_core_v3_Http3ProtocolOptions* default_val = NULL;
|
||||
const struct envoy_config_core_v3_Http3ProtocolOptions* ret;
|
||||
const upb_MiniTableField field = {3, UPB_SIZE(4, 8), -1, 2, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
|
||||
_upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
|
||||
return ret;
|
||||
}
|
||||
UPB_INLINE bool envoy_extensions_upstreams_http_v3_HttpProtocolOptions_ExplicitHttpConfig_has_http3_protocol_options(const envoy_extensions_upstreams_http_v3_HttpProtocolOptions_ExplicitHttpConfig* msg) {
|
||||
const upb_MiniTableField field = {3, UPB_SIZE(4, 8), -1, 2, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
|
||||
return _upb_Message_HasNonExtensionField(msg, &field);
|
||||
}
|
||||
|
||||
UPB_INLINE void envoy_extensions_upstreams_http_v3_HttpProtocolOptions_ExplicitHttpConfig_set_http_protocol_options(envoy_extensions_upstreams_http_v3_HttpProtocolOptions_ExplicitHttpConfig *msg, struct envoy_config_core_v3_Http1ProtocolOptions* value) {
|
||||
const upb_MiniTableField field = {1, UPB_SIZE(4, 8), -1, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
|
||||
_upb_Message_SetNonExtensionField(msg, &field, &value);
|
||||
}
|
||||
UPB_INLINE struct envoy_config_core_v3_Http1ProtocolOptions* envoy_extensions_upstreams_http_v3_HttpProtocolOptions_ExplicitHttpConfig_mutable_http_protocol_options(envoy_extensions_upstreams_http_v3_HttpProtocolOptions_ExplicitHttpConfig* msg, upb_Arena* arena) {
|
||||
struct envoy_config_core_v3_Http1ProtocolOptions* sub = (struct envoy_config_core_v3_Http1ProtocolOptions*)envoy_extensions_upstreams_http_v3_HttpProtocolOptions_ExplicitHttpConfig_http_protocol_options(msg);
|
||||
if (sub == NULL) {
|
||||
sub = (struct envoy_config_core_v3_Http1ProtocolOptions*)_upb_Message_New(&envoy__config__core__v3__Http1ProtocolOptions_msg_init, arena);
|
||||
if (sub) envoy_extensions_upstreams_http_v3_HttpProtocolOptions_ExplicitHttpConfig_set_http_protocol_options(msg, sub);
|
||||
}
|
||||
return sub;
|
||||
}
|
||||
UPB_INLINE void envoy_extensions_upstreams_http_v3_HttpProtocolOptions_ExplicitHttpConfig_set_http2_protocol_options(envoy_extensions_upstreams_http_v3_HttpProtocolOptions_ExplicitHttpConfig *msg, struct envoy_config_core_v3_Http2ProtocolOptions* value) {
|
||||
const upb_MiniTableField field = {2, UPB_SIZE(4, 8), -1, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
|
||||
_upb_Message_SetNonExtensionField(msg, &field, &value);
|
||||
}
|
||||
UPB_INLINE struct envoy_config_core_v3_Http2ProtocolOptions* envoy_extensions_upstreams_http_v3_HttpProtocolOptions_ExplicitHttpConfig_mutable_http2_protocol_options(envoy_extensions_upstreams_http_v3_HttpProtocolOptions_ExplicitHttpConfig* msg, upb_Arena* arena) {
|
||||
struct envoy_config_core_v3_Http2ProtocolOptions* sub = (struct envoy_config_core_v3_Http2ProtocolOptions*)envoy_extensions_upstreams_http_v3_HttpProtocolOptions_ExplicitHttpConfig_http2_protocol_options(msg);
|
||||
if (sub == NULL) {
|
||||
sub = (struct envoy_config_core_v3_Http2ProtocolOptions*)_upb_Message_New(&envoy__config__core__v3__Http2ProtocolOptions_msg_init, arena);
|
||||
if (sub) envoy_extensions_upstreams_http_v3_HttpProtocolOptions_ExplicitHttpConfig_set_http2_protocol_options(msg, sub);
|
||||
}
|
||||
return sub;
|
||||
}
|
||||
UPB_INLINE void envoy_extensions_upstreams_http_v3_HttpProtocolOptions_ExplicitHttpConfig_set_http3_protocol_options(envoy_extensions_upstreams_http_v3_HttpProtocolOptions_ExplicitHttpConfig *msg, struct envoy_config_core_v3_Http3ProtocolOptions* value) {
|
||||
const upb_MiniTableField field = {3, UPB_SIZE(4, 8), -1, 2, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
|
||||
_upb_Message_SetNonExtensionField(msg, &field, &value);
|
||||
}
|
||||
UPB_INLINE struct envoy_config_core_v3_Http3ProtocolOptions* envoy_extensions_upstreams_http_v3_HttpProtocolOptions_ExplicitHttpConfig_mutable_http3_protocol_options(envoy_extensions_upstreams_http_v3_HttpProtocolOptions_ExplicitHttpConfig* msg, upb_Arena* arena) {
|
||||
struct envoy_config_core_v3_Http3ProtocolOptions* sub = (struct envoy_config_core_v3_Http3ProtocolOptions*)envoy_extensions_upstreams_http_v3_HttpProtocolOptions_ExplicitHttpConfig_http3_protocol_options(msg);
|
||||
if (sub == NULL) {
|
||||
sub = (struct envoy_config_core_v3_Http3ProtocolOptions*)_upb_Message_New(&envoy__config__core__v3__Http3ProtocolOptions_msg_init, arena);
|
||||
if (sub) envoy_extensions_upstreams_http_v3_HttpProtocolOptions_ExplicitHttpConfig_set_http3_protocol_options(msg, sub);
|
||||
}
|
||||
return sub;
|
||||
}
|
||||
|
||||
/* envoy.extensions.upstreams.http.v3.HttpProtocolOptions.UseDownstreamHttpConfig */
|
||||
|
||||
UPB_INLINE envoy_extensions_upstreams_http_v3_HttpProtocolOptions_UseDownstreamHttpConfig* envoy_extensions_upstreams_http_v3_HttpProtocolOptions_UseDownstreamHttpConfig_new(upb_Arena* arena) {
|
||||
return (envoy_extensions_upstreams_http_v3_HttpProtocolOptions_UseDownstreamHttpConfig*)_upb_Message_New(&envoy__extensions__upstreams__http__v3__HttpProtocolOptions__UseDownstreamHttpConfig_msg_init, arena);
|
||||
}
|
||||
UPB_INLINE envoy_extensions_upstreams_http_v3_HttpProtocolOptions_UseDownstreamHttpConfig* envoy_extensions_upstreams_http_v3_HttpProtocolOptions_UseDownstreamHttpConfig_parse(const char* buf, size_t size, upb_Arena* arena) {
|
||||
envoy_extensions_upstreams_http_v3_HttpProtocolOptions_UseDownstreamHttpConfig* ret = envoy_extensions_upstreams_http_v3_HttpProtocolOptions_UseDownstreamHttpConfig_new(arena);
|
||||
if (!ret) return NULL;
|
||||
if (upb_Decode(buf, size, ret, &envoy__extensions__upstreams__http__v3__HttpProtocolOptions__UseDownstreamHttpConfig_msg_init, NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
|
||||
return NULL;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
UPB_INLINE envoy_extensions_upstreams_http_v3_HttpProtocolOptions_UseDownstreamHttpConfig* envoy_extensions_upstreams_http_v3_HttpProtocolOptions_UseDownstreamHttpConfig_parse_ex(const char* buf, size_t size,
|
||||
const upb_ExtensionRegistry* extreg,
|
||||
int options, upb_Arena* arena) {
|
||||
envoy_extensions_upstreams_http_v3_HttpProtocolOptions_UseDownstreamHttpConfig* ret = envoy_extensions_upstreams_http_v3_HttpProtocolOptions_UseDownstreamHttpConfig_new(arena);
|
||||
if (!ret) return NULL;
|
||||
if (upb_Decode(buf, size, ret, &envoy__extensions__upstreams__http__v3__HttpProtocolOptions__UseDownstreamHttpConfig_msg_init, extreg, options, arena) !=
|
||||
kUpb_DecodeStatus_Ok) {
|
||||
return NULL;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
UPB_INLINE char* envoy_extensions_upstreams_http_v3_HttpProtocolOptions_UseDownstreamHttpConfig_serialize(const envoy_extensions_upstreams_http_v3_HttpProtocolOptions_UseDownstreamHttpConfig* msg, upb_Arena* arena, size_t* len) {
|
||||
char* ptr;
|
||||
(void)upb_Encode(msg, &envoy__extensions__upstreams__http__v3__HttpProtocolOptions__UseDownstreamHttpConfig_msg_init, 0, arena, &ptr, len);
|
||||
return ptr;
|
||||
}
|
||||
UPB_INLINE char* envoy_extensions_upstreams_http_v3_HttpProtocolOptions_UseDownstreamHttpConfig_serialize_ex(const envoy_extensions_upstreams_http_v3_HttpProtocolOptions_UseDownstreamHttpConfig* msg, int options,
|
||||
upb_Arena* arena, size_t* len) {
|
||||
char* ptr;
|
||||
(void)upb_Encode(msg, &envoy__extensions__upstreams__http__v3__HttpProtocolOptions__UseDownstreamHttpConfig_msg_init, options, arena, &ptr, len);
|
||||
return ptr;
|
||||
}
|
||||
UPB_INLINE void envoy_extensions_upstreams_http_v3_HttpProtocolOptions_UseDownstreamHttpConfig_clear_http_protocol_options(envoy_extensions_upstreams_http_v3_HttpProtocolOptions_UseDownstreamHttpConfig* msg) {
|
||||
const upb_MiniTableField field = {1, UPB_SIZE(4, 8), 1, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
|
||||
_upb_Message_ClearNonExtensionField(msg, &field);
|
||||
}
|
||||
UPB_INLINE const struct envoy_config_core_v3_Http1ProtocolOptions* envoy_extensions_upstreams_http_v3_HttpProtocolOptions_UseDownstreamHttpConfig_http_protocol_options(const envoy_extensions_upstreams_http_v3_HttpProtocolOptions_UseDownstreamHttpConfig* msg) {
|
||||
const struct envoy_config_core_v3_Http1ProtocolOptions* default_val = NULL;
|
||||
const struct envoy_config_core_v3_Http1ProtocolOptions* ret;
|
||||
const upb_MiniTableField field = {1, UPB_SIZE(4, 8), 1, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
|
||||
_upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
|
||||
return ret;
|
||||
}
|
||||
UPB_INLINE bool envoy_extensions_upstreams_http_v3_HttpProtocolOptions_UseDownstreamHttpConfig_has_http_protocol_options(const envoy_extensions_upstreams_http_v3_HttpProtocolOptions_UseDownstreamHttpConfig* msg) {
|
||||
const upb_MiniTableField field = {1, UPB_SIZE(4, 8), 1, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
|
||||
return _upb_Message_HasNonExtensionField(msg, &field);
|
||||
}
|
||||
UPB_INLINE void envoy_extensions_upstreams_http_v3_HttpProtocolOptions_UseDownstreamHttpConfig_clear_http2_protocol_options(envoy_extensions_upstreams_http_v3_HttpProtocolOptions_UseDownstreamHttpConfig* msg) {
|
||||
const upb_MiniTableField field = {2, UPB_SIZE(8, 16), 2, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
|
||||
_upb_Message_ClearNonExtensionField(msg, &field);
|
||||
}
|
||||
UPB_INLINE const struct envoy_config_core_v3_Http2ProtocolOptions* envoy_extensions_upstreams_http_v3_HttpProtocolOptions_UseDownstreamHttpConfig_http2_protocol_options(const envoy_extensions_upstreams_http_v3_HttpProtocolOptions_UseDownstreamHttpConfig* msg) {
|
||||
const struct envoy_config_core_v3_Http2ProtocolOptions* default_val = NULL;
|
||||
const struct envoy_config_core_v3_Http2ProtocolOptions* ret;
|
||||
const upb_MiniTableField field = {2, UPB_SIZE(8, 16), 2, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
|
||||
_upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
|
||||
return ret;
|
||||
}
|
||||
UPB_INLINE bool envoy_extensions_upstreams_http_v3_HttpProtocolOptions_UseDownstreamHttpConfig_has_http2_protocol_options(const envoy_extensions_upstreams_http_v3_HttpProtocolOptions_UseDownstreamHttpConfig* msg) {
|
||||
const upb_MiniTableField field = {2, UPB_SIZE(8, 16), 2, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
|
||||
return _upb_Message_HasNonExtensionField(msg, &field);
|
||||
}
|
||||
UPB_INLINE void envoy_extensions_upstreams_http_v3_HttpProtocolOptions_UseDownstreamHttpConfig_clear_http3_protocol_options(envoy_extensions_upstreams_http_v3_HttpProtocolOptions_UseDownstreamHttpConfig* msg) {
|
||||
const upb_MiniTableField field = {3, UPB_SIZE(12, 24), 3, 2, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
|
||||
_upb_Message_ClearNonExtensionField(msg, &field);
|
||||
}
|
||||
UPB_INLINE const struct envoy_config_core_v3_Http3ProtocolOptions* envoy_extensions_upstreams_http_v3_HttpProtocolOptions_UseDownstreamHttpConfig_http3_protocol_options(const envoy_extensions_upstreams_http_v3_HttpProtocolOptions_UseDownstreamHttpConfig* msg) {
|
||||
const struct envoy_config_core_v3_Http3ProtocolOptions* default_val = NULL;
|
||||
const struct envoy_config_core_v3_Http3ProtocolOptions* ret;
|
||||
const upb_MiniTableField field = {3, UPB_SIZE(12, 24), 3, 2, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
|
||||
_upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
|
||||
return ret;
|
||||
}
|
||||
UPB_INLINE bool envoy_extensions_upstreams_http_v3_HttpProtocolOptions_UseDownstreamHttpConfig_has_http3_protocol_options(const envoy_extensions_upstreams_http_v3_HttpProtocolOptions_UseDownstreamHttpConfig* msg) {
|
||||
const upb_MiniTableField field = {3, UPB_SIZE(12, 24), 3, 2, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
|
||||
return _upb_Message_HasNonExtensionField(msg, &field);
|
||||
}
|
||||
|
||||
UPB_INLINE void envoy_extensions_upstreams_http_v3_HttpProtocolOptions_UseDownstreamHttpConfig_set_http_protocol_options(envoy_extensions_upstreams_http_v3_HttpProtocolOptions_UseDownstreamHttpConfig *msg, struct envoy_config_core_v3_Http1ProtocolOptions* value) {
|
||||
const upb_MiniTableField field = {1, UPB_SIZE(4, 8), 1, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
|
||||
_upb_Message_SetNonExtensionField(msg, &field, &value);
|
||||
}
|
||||
UPB_INLINE struct envoy_config_core_v3_Http1ProtocolOptions* envoy_extensions_upstreams_http_v3_HttpProtocolOptions_UseDownstreamHttpConfig_mutable_http_protocol_options(envoy_extensions_upstreams_http_v3_HttpProtocolOptions_UseDownstreamHttpConfig* msg, upb_Arena* arena) {
|
||||
struct envoy_config_core_v3_Http1ProtocolOptions* sub = (struct envoy_config_core_v3_Http1ProtocolOptions*)envoy_extensions_upstreams_http_v3_HttpProtocolOptions_UseDownstreamHttpConfig_http_protocol_options(msg);
|
||||
if (sub == NULL) {
|
||||
sub = (struct envoy_config_core_v3_Http1ProtocolOptions*)_upb_Message_New(&envoy__config__core__v3__Http1ProtocolOptions_msg_init, arena);
|
||||
if (sub) envoy_extensions_upstreams_http_v3_HttpProtocolOptions_UseDownstreamHttpConfig_set_http_protocol_options(msg, sub);
|
||||
}
|
||||
return sub;
|
||||
}
|
||||
UPB_INLINE void envoy_extensions_upstreams_http_v3_HttpProtocolOptions_UseDownstreamHttpConfig_set_http2_protocol_options(envoy_extensions_upstreams_http_v3_HttpProtocolOptions_UseDownstreamHttpConfig *msg, struct envoy_config_core_v3_Http2ProtocolOptions* value) {
|
||||
const upb_MiniTableField field = {2, UPB_SIZE(8, 16), 2, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
|
||||
_upb_Message_SetNonExtensionField(msg, &field, &value);
|
||||
}
|
||||
UPB_INLINE struct envoy_config_core_v3_Http2ProtocolOptions* envoy_extensions_upstreams_http_v3_HttpProtocolOptions_UseDownstreamHttpConfig_mutable_http2_protocol_options(envoy_extensions_upstreams_http_v3_HttpProtocolOptions_UseDownstreamHttpConfig* msg, upb_Arena* arena) {
|
||||
struct envoy_config_core_v3_Http2ProtocolOptions* sub = (struct envoy_config_core_v3_Http2ProtocolOptions*)envoy_extensions_upstreams_http_v3_HttpProtocolOptions_UseDownstreamHttpConfig_http2_protocol_options(msg);
|
||||
if (sub == NULL) {
|
||||
sub = (struct envoy_config_core_v3_Http2ProtocolOptions*)_upb_Message_New(&envoy__config__core__v3__Http2ProtocolOptions_msg_init, arena);
|
||||
if (sub) envoy_extensions_upstreams_http_v3_HttpProtocolOptions_UseDownstreamHttpConfig_set_http2_protocol_options(msg, sub);
|
||||
}
|
||||
return sub;
|
||||
}
|
||||
UPB_INLINE void envoy_extensions_upstreams_http_v3_HttpProtocolOptions_UseDownstreamHttpConfig_set_http3_protocol_options(envoy_extensions_upstreams_http_v3_HttpProtocolOptions_UseDownstreamHttpConfig *msg, struct envoy_config_core_v3_Http3ProtocolOptions* value) {
|
||||
const upb_MiniTableField field = {3, UPB_SIZE(12, 24), 3, 2, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
|
||||
_upb_Message_SetNonExtensionField(msg, &field, &value);
|
||||
}
|
||||
UPB_INLINE struct envoy_config_core_v3_Http3ProtocolOptions* envoy_extensions_upstreams_http_v3_HttpProtocolOptions_UseDownstreamHttpConfig_mutable_http3_protocol_options(envoy_extensions_upstreams_http_v3_HttpProtocolOptions_UseDownstreamHttpConfig* msg, upb_Arena* arena) {
|
||||
struct envoy_config_core_v3_Http3ProtocolOptions* sub = (struct envoy_config_core_v3_Http3ProtocolOptions*)envoy_extensions_upstreams_http_v3_HttpProtocolOptions_UseDownstreamHttpConfig_http3_protocol_options(msg);
|
||||
if (sub == NULL) {
|
||||
sub = (struct envoy_config_core_v3_Http3ProtocolOptions*)_upb_Message_New(&envoy__config__core__v3__Http3ProtocolOptions_msg_init, arena);
|
||||
if (sub) envoy_extensions_upstreams_http_v3_HttpProtocolOptions_UseDownstreamHttpConfig_set_http3_protocol_options(msg, sub);
|
||||
}
|
||||
return sub;
|
||||
}
|
||||
|
||||
/* envoy.extensions.upstreams.http.v3.HttpProtocolOptions.AutoHttpConfig */
|
||||
|
||||
UPB_INLINE envoy_extensions_upstreams_http_v3_HttpProtocolOptions_AutoHttpConfig* envoy_extensions_upstreams_http_v3_HttpProtocolOptions_AutoHttpConfig_new(upb_Arena* arena) {
|
||||
return (envoy_extensions_upstreams_http_v3_HttpProtocolOptions_AutoHttpConfig*)_upb_Message_New(&envoy__extensions__upstreams__http__v3__HttpProtocolOptions__AutoHttpConfig_msg_init, arena);
|
||||
}
|
||||
UPB_INLINE envoy_extensions_upstreams_http_v3_HttpProtocolOptions_AutoHttpConfig* envoy_extensions_upstreams_http_v3_HttpProtocolOptions_AutoHttpConfig_parse(const char* buf, size_t size, upb_Arena* arena) {
|
||||
envoy_extensions_upstreams_http_v3_HttpProtocolOptions_AutoHttpConfig* ret = envoy_extensions_upstreams_http_v3_HttpProtocolOptions_AutoHttpConfig_new(arena);
|
||||
if (!ret) return NULL;
|
||||
if (upb_Decode(buf, size, ret, &envoy__extensions__upstreams__http__v3__HttpProtocolOptions__AutoHttpConfig_msg_init, NULL, 0, arena) != kUpb_DecodeStatus_Ok) {
|
||||
return NULL;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
UPB_INLINE envoy_extensions_upstreams_http_v3_HttpProtocolOptions_AutoHttpConfig* envoy_extensions_upstreams_http_v3_HttpProtocolOptions_AutoHttpConfig_parse_ex(const char* buf, size_t size,
|
||||
const upb_ExtensionRegistry* extreg,
|
||||
int options, upb_Arena* arena) {
|
||||
envoy_extensions_upstreams_http_v3_HttpProtocolOptions_AutoHttpConfig* ret = envoy_extensions_upstreams_http_v3_HttpProtocolOptions_AutoHttpConfig_new(arena);
|
||||
if (!ret) return NULL;
|
||||
if (upb_Decode(buf, size, ret, &envoy__extensions__upstreams__http__v3__HttpProtocolOptions__AutoHttpConfig_msg_init, extreg, options, arena) !=
|
||||
kUpb_DecodeStatus_Ok) {
|
||||
return NULL;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
UPB_INLINE char* envoy_extensions_upstreams_http_v3_HttpProtocolOptions_AutoHttpConfig_serialize(const envoy_extensions_upstreams_http_v3_HttpProtocolOptions_AutoHttpConfig* msg, upb_Arena* arena, size_t* len) {
|
||||
char* ptr;
|
||||
(void)upb_Encode(msg, &envoy__extensions__upstreams__http__v3__HttpProtocolOptions__AutoHttpConfig_msg_init, 0, arena, &ptr, len);
|
||||
return ptr;
|
||||
}
|
||||
UPB_INLINE char* envoy_extensions_upstreams_http_v3_HttpProtocolOptions_AutoHttpConfig_serialize_ex(const envoy_extensions_upstreams_http_v3_HttpProtocolOptions_AutoHttpConfig* msg, int options,
|
||||
upb_Arena* arena, size_t* len) {
|
||||
char* ptr;
|
||||
(void)upb_Encode(msg, &envoy__extensions__upstreams__http__v3__HttpProtocolOptions__AutoHttpConfig_msg_init, options, arena, &ptr, len);
|
||||
return ptr;
|
||||
}
|
||||
UPB_INLINE void envoy_extensions_upstreams_http_v3_HttpProtocolOptions_AutoHttpConfig_clear_http_protocol_options(envoy_extensions_upstreams_http_v3_HttpProtocolOptions_AutoHttpConfig* msg) {
|
||||
const upb_MiniTableField field = {1, UPB_SIZE(4, 8), 1, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
|
||||
_upb_Message_ClearNonExtensionField(msg, &field);
|
||||
}
|
||||
UPB_INLINE const struct envoy_config_core_v3_Http1ProtocolOptions* envoy_extensions_upstreams_http_v3_HttpProtocolOptions_AutoHttpConfig_http_protocol_options(const envoy_extensions_upstreams_http_v3_HttpProtocolOptions_AutoHttpConfig* msg) {
|
||||
const struct envoy_config_core_v3_Http1ProtocolOptions* default_val = NULL;
|
||||
const struct envoy_config_core_v3_Http1ProtocolOptions* ret;
|
||||
const upb_MiniTableField field = {1, UPB_SIZE(4, 8), 1, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
|
||||
_upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
|
||||
return ret;
|
||||
}
|
||||
UPB_INLINE bool envoy_extensions_upstreams_http_v3_HttpProtocolOptions_AutoHttpConfig_has_http_protocol_options(const envoy_extensions_upstreams_http_v3_HttpProtocolOptions_AutoHttpConfig* msg) {
|
||||
const upb_MiniTableField field = {1, UPB_SIZE(4, 8), 1, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
|
||||
return _upb_Message_HasNonExtensionField(msg, &field);
|
||||
}
|
||||
UPB_INLINE void envoy_extensions_upstreams_http_v3_HttpProtocolOptions_AutoHttpConfig_clear_http2_protocol_options(envoy_extensions_upstreams_http_v3_HttpProtocolOptions_AutoHttpConfig* msg) {
|
||||
const upb_MiniTableField field = {2, UPB_SIZE(8, 16), 2, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
|
||||
_upb_Message_ClearNonExtensionField(msg, &field);
|
||||
}
|
||||
UPB_INLINE const struct envoy_config_core_v3_Http2ProtocolOptions* envoy_extensions_upstreams_http_v3_HttpProtocolOptions_AutoHttpConfig_http2_protocol_options(const envoy_extensions_upstreams_http_v3_HttpProtocolOptions_AutoHttpConfig* msg) {
|
||||
const struct envoy_config_core_v3_Http2ProtocolOptions* default_val = NULL;
|
||||
const struct envoy_config_core_v3_Http2ProtocolOptions* ret;
|
||||
const upb_MiniTableField field = {2, UPB_SIZE(8, 16), 2, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
|
||||
_upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
|
||||
return ret;
|
||||
}
|
||||
UPB_INLINE bool envoy_extensions_upstreams_http_v3_HttpProtocolOptions_AutoHttpConfig_has_http2_protocol_options(const envoy_extensions_upstreams_http_v3_HttpProtocolOptions_AutoHttpConfig* msg) {
|
||||
const upb_MiniTableField field = {2, UPB_SIZE(8, 16), 2, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
|
||||
return _upb_Message_HasNonExtensionField(msg, &field);
|
||||
}
|
||||
UPB_INLINE void envoy_extensions_upstreams_http_v3_HttpProtocolOptions_AutoHttpConfig_clear_http3_protocol_options(envoy_extensions_upstreams_http_v3_HttpProtocolOptions_AutoHttpConfig* msg) {
|
||||
const upb_MiniTableField field = {3, UPB_SIZE(12, 24), 3, 2, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
|
||||
_upb_Message_ClearNonExtensionField(msg, &field);
|
||||
}
|
||||
UPB_INLINE const struct envoy_config_core_v3_Http3ProtocolOptions* envoy_extensions_upstreams_http_v3_HttpProtocolOptions_AutoHttpConfig_http3_protocol_options(const envoy_extensions_upstreams_http_v3_HttpProtocolOptions_AutoHttpConfig* msg) {
|
||||
const struct envoy_config_core_v3_Http3ProtocolOptions* default_val = NULL;
|
||||
const struct envoy_config_core_v3_Http3ProtocolOptions* ret;
|
||||
const upb_MiniTableField field = {3, UPB_SIZE(12, 24), 3, 2, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
|
||||
_upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
|
||||
return ret;
|
||||
}
|
||||
UPB_INLINE bool envoy_extensions_upstreams_http_v3_HttpProtocolOptions_AutoHttpConfig_has_http3_protocol_options(const envoy_extensions_upstreams_http_v3_HttpProtocolOptions_AutoHttpConfig* msg) {
|
||||
const upb_MiniTableField field = {3, UPB_SIZE(12, 24), 3, 2, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
|
||||
return _upb_Message_HasNonExtensionField(msg, &field);
|
||||
}
|
||||
UPB_INLINE void envoy_extensions_upstreams_http_v3_HttpProtocolOptions_AutoHttpConfig_clear_alternate_protocols_cache_options(envoy_extensions_upstreams_http_v3_HttpProtocolOptions_AutoHttpConfig* msg) {
|
||||
const upb_MiniTableField field = {4, UPB_SIZE(16, 32), 4, 3, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
|
||||
_upb_Message_ClearNonExtensionField(msg, &field);
|
||||
}
|
||||
UPB_INLINE const struct envoy_config_core_v3_AlternateProtocolsCacheOptions* envoy_extensions_upstreams_http_v3_HttpProtocolOptions_AutoHttpConfig_alternate_protocols_cache_options(const envoy_extensions_upstreams_http_v3_HttpProtocolOptions_AutoHttpConfig* msg) {
|
||||
const struct envoy_config_core_v3_AlternateProtocolsCacheOptions* default_val = NULL;
|
||||
const struct envoy_config_core_v3_AlternateProtocolsCacheOptions* ret;
|
||||
const upb_MiniTableField field = {4, UPB_SIZE(16, 32), 4, 3, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
|
||||
_upb_Message_GetNonExtensionField(msg, &field, &default_val, &ret);
|
||||
return ret;
|
||||
}
|
||||
UPB_INLINE bool envoy_extensions_upstreams_http_v3_HttpProtocolOptions_AutoHttpConfig_has_alternate_protocols_cache_options(const envoy_extensions_upstreams_http_v3_HttpProtocolOptions_AutoHttpConfig* msg) {
|
||||
const upb_MiniTableField field = {4, UPB_SIZE(16, 32), 4, 3, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
|
||||
return _upb_Message_HasNonExtensionField(msg, &field);
|
||||
}
|
||||
|
||||
UPB_INLINE void envoy_extensions_upstreams_http_v3_HttpProtocolOptions_AutoHttpConfig_set_http_protocol_options(envoy_extensions_upstreams_http_v3_HttpProtocolOptions_AutoHttpConfig *msg, struct envoy_config_core_v3_Http1ProtocolOptions* value) {
|
||||
const upb_MiniTableField field = {1, UPB_SIZE(4, 8), 1, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
|
||||
_upb_Message_SetNonExtensionField(msg, &field, &value);
|
||||
}
|
||||
UPB_INLINE struct envoy_config_core_v3_Http1ProtocolOptions* envoy_extensions_upstreams_http_v3_HttpProtocolOptions_AutoHttpConfig_mutable_http_protocol_options(envoy_extensions_upstreams_http_v3_HttpProtocolOptions_AutoHttpConfig* msg, upb_Arena* arena) {
|
||||
struct envoy_config_core_v3_Http1ProtocolOptions* sub = (struct envoy_config_core_v3_Http1ProtocolOptions*)envoy_extensions_upstreams_http_v3_HttpProtocolOptions_AutoHttpConfig_http_protocol_options(msg);
|
||||
if (sub == NULL) {
|
||||
sub = (struct envoy_config_core_v3_Http1ProtocolOptions*)_upb_Message_New(&envoy__config__core__v3__Http1ProtocolOptions_msg_init, arena);
|
||||
if (sub) envoy_extensions_upstreams_http_v3_HttpProtocolOptions_AutoHttpConfig_set_http_protocol_options(msg, sub);
|
||||
}
|
||||
return sub;
|
||||
}
|
||||
UPB_INLINE void envoy_extensions_upstreams_http_v3_HttpProtocolOptions_AutoHttpConfig_set_http2_protocol_options(envoy_extensions_upstreams_http_v3_HttpProtocolOptions_AutoHttpConfig *msg, struct envoy_config_core_v3_Http2ProtocolOptions* value) {
|
||||
const upb_MiniTableField field = {2, UPB_SIZE(8, 16), 2, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
|
||||
_upb_Message_SetNonExtensionField(msg, &field, &value);
|
||||
}
|
||||
UPB_INLINE struct envoy_config_core_v3_Http2ProtocolOptions* envoy_extensions_upstreams_http_v3_HttpProtocolOptions_AutoHttpConfig_mutable_http2_protocol_options(envoy_extensions_upstreams_http_v3_HttpProtocolOptions_AutoHttpConfig* msg, upb_Arena* arena) {
|
||||
struct envoy_config_core_v3_Http2ProtocolOptions* sub = (struct envoy_config_core_v3_Http2ProtocolOptions*)envoy_extensions_upstreams_http_v3_HttpProtocolOptions_AutoHttpConfig_http2_protocol_options(msg);
|
||||
if (sub == NULL) {
|
||||
sub = (struct envoy_config_core_v3_Http2ProtocolOptions*)_upb_Message_New(&envoy__config__core__v3__Http2ProtocolOptions_msg_init, arena);
|
||||
if (sub) envoy_extensions_upstreams_http_v3_HttpProtocolOptions_AutoHttpConfig_set_http2_protocol_options(msg, sub);
|
||||
}
|
||||
return sub;
|
||||
}
|
||||
UPB_INLINE void envoy_extensions_upstreams_http_v3_HttpProtocolOptions_AutoHttpConfig_set_http3_protocol_options(envoy_extensions_upstreams_http_v3_HttpProtocolOptions_AutoHttpConfig *msg, struct envoy_config_core_v3_Http3ProtocolOptions* value) {
|
||||
const upb_MiniTableField field = {3, UPB_SIZE(12, 24), 3, 2, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
|
||||
_upb_Message_SetNonExtensionField(msg, &field, &value);
|
||||
}
|
||||
UPB_INLINE struct envoy_config_core_v3_Http3ProtocolOptions* envoy_extensions_upstreams_http_v3_HttpProtocolOptions_AutoHttpConfig_mutable_http3_protocol_options(envoy_extensions_upstreams_http_v3_HttpProtocolOptions_AutoHttpConfig* msg, upb_Arena* arena) {
|
||||
struct envoy_config_core_v3_Http3ProtocolOptions* sub = (struct envoy_config_core_v3_Http3ProtocolOptions*)envoy_extensions_upstreams_http_v3_HttpProtocolOptions_AutoHttpConfig_http3_protocol_options(msg);
|
||||
if (sub == NULL) {
|
||||
sub = (struct envoy_config_core_v3_Http3ProtocolOptions*)_upb_Message_New(&envoy__config__core__v3__Http3ProtocolOptions_msg_init, arena);
|
||||
if (sub) envoy_extensions_upstreams_http_v3_HttpProtocolOptions_AutoHttpConfig_set_http3_protocol_options(msg, sub);
|
||||
}
|
||||
return sub;
|
||||
}
|
||||
UPB_INLINE void envoy_extensions_upstreams_http_v3_HttpProtocolOptions_AutoHttpConfig_set_alternate_protocols_cache_options(envoy_extensions_upstreams_http_v3_HttpProtocolOptions_AutoHttpConfig *msg, struct envoy_config_core_v3_AlternateProtocolsCacheOptions* value) {
|
||||
const upb_MiniTableField field = {4, UPB_SIZE(16, 32), 4, 3, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)};
|
||||
_upb_Message_SetNonExtensionField(msg, &field, &value);
|
||||
}
|
||||
UPB_INLINE struct envoy_config_core_v3_AlternateProtocolsCacheOptions* envoy_extensions_upstreams_http_v3_HttpProtocolOptions_AutoHttpConfig_mutable_alternate_protocols_cache_options(envoy_extensions_upstreams_http_v3_HttpProtocolOptions_AutoHttpConfig* msg, upb_Arena* arena) {
|
||||
struct envoy_config_core_v3_AlternateProtocolsCacheOptions* sub = (struct envoy_config_core_v3_AlternateProtocolsCacheOptions*)envoy_extensions_upstreams_http_v3_HttpProtocolOptions_AutoHttpConfig_alternate_protocols_cache_options(msg);
|
||||
if (sub == NULL) {
|
||||
sub = (struct envoy_config_core_v3_AlternateProtocolsCacheOptions*)_upb_Message_New(&envoy__config__core__v3__AlternateProtocolsCacheOptions_msg_init, arena);
|
||||
if (sub) envoy_extensions_upstreams_http_v3_HttpProtocolOptions_AutoHttpConfig_set_alternate_protocols_cache_options(msg, sub);
|
||||
}
|
||||
return sub;
|
||||
}
|
||||
|
||||
#ifdef __cplusplus
|
||||
} /* extern "C" */
|
||||
#endif
|
||||
|
||||
#include "upb/port/undef.inc"
|
||||
|
||||
#endif /* ENVOY_EXTENSIONS_UPSTREAMS_HTTP_V3_HTTP_PROTOCOL_OPTIONS_PROTO_UPB_H_ */
|
||||
151
src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb_minitable.c
generated
Normal file
151
src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb_minitable.c
generated
Normal file
|
|
@ -0,0 +1,151 @@
|
|||
/* This file was generated by upb_generator from the input file:
|
||||
*
|
||||
* envoy/extensions/upstreams/http/v3/http_protocol_options.proto
|
||||
*
|
||||
* Do not edit -- your changes will be discarded when the file is
|
||||
* regenerated. */
|
||||
|
||||
#include <stddef.h>
|
||||
#include "upb/generated_code_support.h"
|
||||
#include "envoy/extensions/upstreams/http/v3/http_protocol_options.upb_minitable.h"
|
||||
#include "envoy/config/core/v3/extension.upb_minitable.h"
|
||||
#include "envoy/config/core/v3/protocol.upb_minitable.h"
|
||||
#include "envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb_minitable.h"
|
||||
#include "udpa/annotations/status.upb_minitable.h"
|
||||
#include "validate/validate.upb_minitable.h"
|
||||
|
||||
// Must be last.
|
||||
#include "upb/port/def.inc"
|
||||
|
||||
static const upb_MiniTableSub envoy_extensions_upstreams_http_v3_HttpProtocolOptions_submsgs[7] = {
|
||||
{.submsg = &envoy__config__core__v3__HttpProtocolOptions_msg_init},
|
||||
{.submsg = &envoy__config__core__v3__UpstreamHttpProtocolOptions_msg_init},
|
||||
{.submsg = &envoy__extensions__upstreams__http__v3__HttpProtocolOptions__ExplicitHttpConfig_msg_init},
|
||||
{.submsg = &envoy__extensions__upstreams__http__v3__HttpProtocolOptions__UseDownstreamHttpConfig_msg_init},
|
||||
{.submsg = &envoy__extensions__upstreams__http__v3__HttpProtocolOptions__AutoHttpConfig_msg_init},
|
||||
{.submsg = &envoy__extensions__filters__network__http_0connection_0manager__v3__HttpFilter_msg_init},
|
||||
{.submsg = &envoy__config__core__v3__TypedExtensionConfig_msg_init},
|
||||
};
|
||||
|
||||
static const upb_MiniTableField envoy_extensions_upstreams_http_v3_HttpProtocolOptions__fields[7] = {
|
||||
{1, UPB_SIZE(4, 8), 1, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)},
|
||||
{2, UPB_SIZE(8, 16), 2, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)},
|
||||
{3, UPB_SIZE(24, 40), UPB_SIZE(-13, -5), 2, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)},
|
||||
{4, UPB_SIZE(24, 40), UPB_SIZE(-13, -5), 3, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)},
|
||||
{5, UPB_SIZE(24, 40), UPB_SIZE(-13, -5), 4, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)},
|
||||
{6, UPB_SIZE(16, 24), 0, 5, 11, (int)kUpb_FieldMode_Array | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)},
|
||||
{7, UPB_SIZE(20, 32), 3, 6, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)},
|
||||
};
|
||||
|
||||
const upb_MiniTable envoy__extensions__upstreams__http__v3__HttpProtocolOptions_msg_init = {
|
||||
&envoy_extensions_upstreams_http_v3_HttpProtocolOptions_submsgs[0],
|
||||
&envoy_extensions_upstreams_http_v3_HttpProtocolOptions__fields[0],
|
||||
UPB_SIZE(32, 48), 7, kUpb_ExtMode_NonExtendable, 7, UPB_FASTTABLE_MASK(56), 0,
|
||||
UPB_FASTTABLE_INIT({
|
||||
{0x0000000000000000, &_upb_FastDecoder_DecodeGeneric},
|
||||
{0x000800000100000a, &upb_psm_1bt_maxmaxb},
|
||||
{0x0010000002010012, &upb_psm_1bt_maxmaxb},
|
||||
{0x002800040302001a, &upb_pom_1bt_max64b},
|
||||
{0x0028000404030022, &upb_pom_1bt_max64b},
|
||||
{0x002800040504002a, &upb_pom_1bt_max64b},
|
||||
{0x001800003f050032, &upb_prm_1bt_maxmaxb},
|
||||
{0x002000000306003a, &upb_psm_1bt_maxmaxb},
|
||||
})
|
||||
};
|
||||
|
||||
static const upb_MiniTableSub envoy_extensions_upstreams_http_v3_HttpProtocolOptions_ExplicitHttpConfig_submsgs[3] = {
|
||||
{.submsg = &envoy__config__core__v3__Http1ProtocolOptions_msg_init},
|
||||
{.submsg = &envoy__config__core__v3__Http2ProtocolOptions_msg_init},
|
||||
{.submsg = &envoy__config__core__v3__Http3ProtocolOptions_msg_init},
|
||||
};
|
||||
|
||||
static const upb_MiniTableField envoy_extensions_upstreams_http_v3_HttpProtocolOptions_ExplicitHttpConfig__fields[3] = {
|
||||
{1, UPB_SIZE(4, 8), -1, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)},
|
||||
{2, UPB_SIZE(4, 8), -1, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)},
|
||||
{3, UPB_SIZE(4, 8), -1, 2, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)},
|
||||
};
|
||||
|
||||
const upb_MiniTable envoy__extensions__upstreams__http__v3__HttpProtocolOptions__ExplicitHttpConfig_msg_init = {
|
||||
&envoy_extensions_upstreams_http_v3_HttpProtocolOptions_ExplicitHttpConfig_submsgs[0],
|
||||
&envoy_extensions_upstreams_http_v3_HttpProtocolOptions_ExplicitHttpConfig__fields[0],
|
||||
UPB_SIZE(8, 16), 3, kUpb_ExtMode_NonExtendable, 3, UPB_FASTTABLE_MASK(24), 0,
|
||||
UPB_FASTTABLE_INIT({
|
||||
{0x0000000000000000, &_upb_FastDecoder_DecodeGeneric},
|
||||
{0x000800000100000a, &upb_pom_1bt_maxmaxb},
|
||||
{0x0008000002010012, &upb_pom_1bt_maxmaxb},
|
||||
{0x000800000302001a, &upb_pom_1bt_maxmaxb},
|
||||
})
|
||||
};
|
||||
|
||||
static const upb_MiniTableSub envoy_extensions_upstreams_http_v3_HttpProtocolOptions_UseDownstreamHttpConfig_submsgs[3] = {
|
||||
{.submsg = &envoy__config__core__v3__Http1ProtocolOptions_msg_init},
|
||||
{.submsg = &envoy__config__core__v3__Http2ProtocolOptions_msg_init},
|
||||
{.submsg = &envoy__config__core__v3__Http3ProtocolOptions_msg_init},
|
||||
};
|
||||
|
||||
static const upb_MiniTableField envoy_extensions_upstreams_http_v3_HttpProtocolOptions_UseDownstreamHttpConfig__fields[3] = {
|
||||
{1, UPB_SIZE(4, 8), 1, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)},
|
||||
{2, UPB_SIZE(8, 16), 2, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)},
|
||||
{3, UPB_SIZE(12, 24), 3, 2, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)},
|
||||
};
|
||||
|
||||
const upb_MiniTable envoy__extensions__upstreams__http__v3__HttpProtocolOptions__UseDownstreamHttpConfig_msg_init = {
|
||||
&envoy_extensions_upstreams_http_v3_HttpProtocolOptions_UseDownstreamHttpConfig_submsgs[0],
|
||||
&envoy_extensions_upstreams_http_v3_HttpProtocolOptions_UseDownstreamHttpConfig__fields[0],
|
||||
UPB_SIZE(16, 32), 3, kUpb_ExtMode_NonExtendable, 3, UPB_FASTTABLE_MASK(24), 0,
|
||||
UPB_FASTTABLE_INIT({
|
||||
{0x0000000000000000, &_upb_FastDecoder_DecodeGeneric},
|
||||
{0x000800000100000a, &upb_psm_1bt_maxmaxb},
|
||||
{0x0010000002010012, &upb_psm_1bt_maxmaxb},
|
||||
{0x001800000302001a, &upb_psm_1bt_maxmaxb},
|
||||
})
|
||||
};
|
||||
|
||||
static const upb_MiniTableSub envoy_extensions_upstreams_http_v3_HttpProtocolOptions_AutoHttpConfig_submsgs[4] = {
|
||||
{.submsg = &envoy__config__core__v3__Http1ProtocolOptions_msg_init},
|
||||
{.submsg = &envoy__config__core__v3__Http2ProtocolOptions_msg_init},
|
||||
{.submsg = &envoy__config__core__v3__Http3ProtocolOptions_msg_init},
|
||||
{.submsg = &envoy__config__core__v3__AlternateProtocolsCacheOptions_msg_init},
|
||||
};
|
||||
|
||||
static const upb_MiniTableField envoy_extensions_upstreams_http_v3_HttpProtocolOptions_AutoHttpConfig__fields[4] = {
|
||||
{1, UPB_SIZE(4, 8), 1, 0, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)},
|
||||
{2, UPB_SIZE(8, 16), 2, 1, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)},
|
||||
{3, UPB_SIZE(12, 24), 3, 2, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)},
|
||||
{4, UPB_SIZE(16, 32), 4, 3, 11, (int)kUpb_FieldMode_Scalar | ((int)UPB_SIZE(kUpb_FieldRep_4Byte, kUpb_FieldRep_8Byte) << kUpb_FieldRep_Shift)},
|
||||
};
|
||||
|
||||
const upb_MiniTable envoy__extensions__upstreams__http__v3__HttpProtocolOptions__AutoHttpConfig_msg_init = {
|
||||
&envoy_extensions_upstreams_http_v3_HttpProtocolOptions_AutoHttpConfig_submsgs[0],
|
||||
&envoy_extensions_upstreams_http_v3_HttpProtocolOptions_AutoHttpConfig__fields[0],
|
||||
UPB_SIZE(24, 40), 4, kUpb_ExtMode_NonExtendable, 4, UPB_FASTTABLE_MASK(56), 0,
|
||||
UPB_FASTTABLE_INIT({
|
||||
{0x0000000000000000, &_upb_FastDecoder_DecodeGeneric},
|
||||
{0x000800000100000a, &upb_psm_1bt_maxmaxb},
|
||||
{0x0010000002010012, &upb_psm_1bt_maxmaxb},
|
||||
{0x001800000302001a, &upb_psm_1bt_maxmaxb},
|
||||
{0x0020000004030022, &upb_psm_1bt_maxmaxb},
|
||||
{0x0000000000000000, &_upb_FastDecoder_DecodeGeneric},
|
||||
{0x0000000000000000, &_upb_FastDecoder_DecodeGeneric},
|
||||
{0x0000000000000000, &_upb_FastDecoder_DecodeGeneric},
|
||||
})
|
||||
};
|
||||
|
||||
static const upb_MiniTable *messages_layout[4] = {
|
||||
&envoy__extensions__upstreams__http__v3__HttpProtocolOptions_msg_init,
|
||||
&envoy__extensions__upstreams__http__v3__HttpProtocolOptions__ExplicitHttpConfig_msg_init,
|
||||
&envoy__extensions__upstreams__http__v3__HttpProtocolOptions__UseDownstreamHttpConfig_msg_init,
|
||||
&envoy__extensions__upstreams__http__v3__HttpProtocolOptions__AutoHttpConfig_msg_init,
|
||||
};
|
||||
|
||||
const upb_MiniTableFile envoy_extensions_upstreams_http_v3_http_protocol_options_proto_upb_file_layout = {
|
||||
messages_layout,
|
||||
NULL,
|
||||
NULL,
|
||||
4,
|
||||
0,
|
||||
0,
|
||||
};
|
||||
|
||||
#include "upb/port/undef.inc"
|
||||
|
||||
33
src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb_minitable.h
generated
Normal file
33
src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb_minitable.h
generated
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
/* This file was generated by upb_generator from the input file:
|
||||
*
|
||||
* envoy/extensions/upstreams/http/v3/http_protocol_options.proto
|
||||
*
|
||||
* Do not edit -- your changes will be discarded when the file is
|
||||
* regenerated. */
|
||||
|
||||
#ifndef ENVOY_EXTENSIONS_UPSTREAMS_HTTP_V3_HTTP_PROTOCOL_OPTIONS_PROTO_UPB_MINITABLE_H_
|
||||
#define ENVOY_EXTENSIONS_UPSTREAMS_HTTP_V3_HTTP_PROTOCOL_OPTIONS_PROTO_UPB_MINITABLE_H_
|
||||
|
||||
#include "upb/generated_code_support.h"
|
||||
|
||||
// Must be last.
|
||||
#include "upb/port/def.inc"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
extern const upb_MiniTable envoy__extensions__upstreams__http__v3__HttpProtocolOptions_msg_init;
|
||||
extern const upb_MiniTable envoy__extensions__upstreams__http__v3__HttpProtocolOptions__ExplicitHttpConfig_msg_init;
|
||||
extern const upb_MiniTable envoy__extensions__upstreams__http__v3__HttpProtocolOptions__UseDownstreamHttpConfig_msg_init;
|
||||
extern const upb_MiniTable envoy__extensions__upstreams__http__v3__HttpProtocolOptions__AutoHttpConfig_msg_init;
|
||||
|
||||
extern const upb_MiniTableFile envoy_extensions_upstreams_http_v3_http_protocol_options_proto_upb_file_layout;
|
||||
|
||||
#ifdef __cplusplus
|
||||
} /* extern "C" */
|
||||
#endif
|
||||
|
||||
#include "upb/port/undef.inc"
|
||||
|
||||
#endif /* ENVOY_EXTENSIONS_UPSTREAMS_HTTP_V3_HTTP_PROTOCOL_OPTIONS_PROTO_UPB_MINITABLE_H_ */
|
||||
133
src/core/ext/upbdefs-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upbdefs.c
generated
Normal file
133
src/core/ext/upbdefs-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upbdefs.c
generated
Normal file
|
|
@ -0,0 +1,133 @@
|
|||
/* This file was generated by upb_generator from the input file:
|
||||
*
|
||||
* envoy/extensions/upstreams/http/v3/http_protocol_options.proto
|
||||
*
|
||||
* Do not edit -- your changes will be discarded when the file is
|
||||
* regenerated. */
|
||||
|
||||
#include "upb/reflection/def.h"
|
||||
#include "envoy/extensions/upstreams/http/v3/http_protocol_options.upbdefs.h"
|
||||
#include "envoy/extensions/upstreams/http/v3/http_protocol_options.upb_minitable.h"
|
||||
|
||||
extern _upb_DefPool_Init envoy_config_core_v3_extension_proto_upbdefinit;
|
||||
extern _upb_DefPool_Init envoy_config_core_v3_protocol_proto_upbdefinit;
|
||||
extern _upb_DefPool_Init envoy_extensions_filters_network_http_connection_manager_v3_http_connection_manager_proto_upbdefinit;
|
||||
extern _upb_DefPool_Init udpa_annotations_status_proto_upbdefinit;
|
||||
extern _upb_DefPool_Init validate_validate_proto_upbdefinit;
|
||||
static const char descriptor[2490] = {'\n', '>', 'e', 'n', 'v', 'o', 'y', '/', 'e', 'x', 't', 'e', 'n', 's', 'i', 'o', 'n', 's', '/', 'u', 'p', 's', 't', 'r', 'e',
|
||||
'a', 'm', 's', '/', 'h', 't', 't', 'p', '/', 'v', '3', '/', 'h', 't', 't', 'p', '_', 'p', 'r', 'o', 't', 'o', 'c', 'o', 'l',
|
||||
'_', 'o', 'p', 't', 'i', 'o', 'n', 's', '.', 'p', 'r', 'o', 't', 'o', '\022', '\"', 'e', 'n', 'v', 'o', 'y', '.', 'e', 'x', 't',
|
||||
'e', 'n', 's', 'i', 'o', 'n', 's', '.', 'u', 'p', 's', 't', 'r', 'e', 'a', 'm', 's', '.', 'h', 't', 't', 'p', '.', 'v', '3',
|
||||
'\032', '$', 'e', 'n', 'v', 'o', 'y', '/', 'c', 'o', 'n', 'f', 'i', 'g', '/', 'c', 'o', 'r', 'e', '/', 'v', '3', '/', 'e', 'x',
|
||||
't', 'e', 'n', 's', 'i', 'o', 'n', '.', 'p', 'r', 'o', 't', 'o', '\032', '#', 'e', 'n', 'v', 'o', 'y', '/', 'c', 'o', 'n', 'f',
|
||||
'i', 'g', '/', 'c', 'o', 'r', 'e', '/', 'v', '3', '/', 'p', 'r', 'o', 't', 'o', 'c', 'o', 'l', '.', 'p', 'r', 'o', 't', 'o',
|
||||
'\032', 'Y', 'e', 'n', 'v', 'o', 'y', '/', 'e', 'x', 't', 'e', 'n', 's', 'i', 'o', 'n', 's', '/', 'f', 'i', 'l', 't', 'e', 'r',
|
||||
's', '/', 'n', 'e', 't', 'w', 'o', 'r', 'k', '/', 'h', 't', 't', 'p', '_', 'c', 'o', 'n', 'n', 'e', 'c', 't', 'i', 'o', 'n',
|
||||
'_', 'm', 'a', 'n', 'a', 'g', 'e', 'r', '/', 'v', '3', '/', 'h', 't', 't', 'p', '_', 'c', 'o', 'n', 'n', 'e', 'c', 't', 'i',
|
||||
'o', 'n', '_', 'm', 'a', 'n', 'a', 'g', 'e', 'r', '.', 'p', 'r', 'o', 't', 'o', '\032', '\035', 'u', 'd', 'p', 'a', '/', 'a', 'n',
|
||||
'n', 'o', 't', 'a', 't', 'i', 'o', 'n', 's', '/', 's', 't', 'a', 't', 'u', 's', '.', 'p', 'r', 'o', 't', 'o', '\032', '\027', 'v',
|
||||
'a', 'l', 'i', 'd', 'a', 't', 'e', '/', 'v', 'a', 'l', 'i', 'd', 'a', 't', 'e', '.', 'p', 'r', 'o', 't', 'o', '\"', '\302', '\017',
|
||||
'\n', '\023', 'H', 't', 't', 'p', 'P', 'r', 'o', 't', 'o', 'c', 'o', 'l', 'O', 'p', 't', 'i', 'o', 'n', 's', '\022', 'j', '\n', '\034',
|
||||
'c', 'o', 'm', 'm', 'o', 'n', '_', 'h', 't', 't', 'p', '_', 'p', 'r', 'o', 't', 'o', 'c', 'o', 'l', '_', 'o', 'p', 't', 'i',
|
||||
'o', 'n', 's', '\030', '\001', ' ', '\001', '(', '\013', '2', ')', '.', 'e', 'n', 'v', 'o', 'y', '.', 'c', 'o', 'n', 'f', 'i', 'g', '.',
|
||||
'c', 'o', 'r', 'e', '.', 'v', '3', '.', 'H', 't', 't', 'p', 'P', 'r', 'o', 't', 'o', 'c', 'o', 'l', 'O', 'p', 't', 'i', 'o',
|
||||
'n', 's', 'R', '\031', 'c', 'o', 'm', 'm', 'o', 'n', 'H', 't', 't', 'p', 'P', 'r', 'o', 't', 'o', 'c', 'o', 'l', 'O', 'p', 't',
|
||||
'i', 'o', 'n', 's', '\022', 'v', '\n', '\036', 'u', 'p', 's', 't', 'r', 'e', 'a', 'm', '_', 'h', 't', 't', 'p', '_', 'p', 'r', 'o',
|
||||
't', 'o', 'c', 'o', 'l', '_', 'o', 'p', 't', 'i', 'o', 'n', 's', '\030', '\002', ' ', '\001', '(', '\013', '2', '1', '.', 'e', 'n', 'v',
|
||||
'o', 'y', '.', 'c', 'o', 'n', 'f', 'i', 'g', '.', 'c', 'o', 'r', 'e', '.', 'v', '3', '.', 'U', 'p', 's', 't', 'r', 'e', 'a',
|
||||
'm', 'H', 't', 't', 'p', 'P', 'r', 'o', 't', 'o', 'c', 'o', 'l', 'O', 'p', 't', 'i', 'o', 'n', 's', 'R', '\033', 'u', 'p', 's',
|
||||
't', 'r', 'e', 'a', 'm', 'H', 't', 't', 'p', 'P', 'r', 'o', 't', 'o', 'c', 'o', 'l', 'O', 'p', 't', 'i', 'o', 'n', 's', '\022',
|
||||
'~', '\n', '\024', 'e', 'x', 'p', 'l', 'i', 'c', 'i', 't', '_', 'h', 't', 't', 'p', '_', 'c', 'o', 'n', 'f', 'i', 'g', '\030', '\003',
|
||||
' ', '\001', '(', '\013', '2', 'J', '.', 'e', 'n', 'v', 'o', 'y', '.', 'e', 'x', 't', 'e', 'n', 's', 'i', 'o', 'n', 's', '.', 'u',
|
||||
'p', 's', 't', 'r', 'e', 'a', 'm', 's', '.', 'h', 't', 't', 'p', '.', 'v', '3', '.', 'H', 't', 't', 'p', 'P', 'r', 'o', 't',
|
||||
'o', 'c', 'o', 'l', 'O', 'p', 't', 'i', 'o', 'n', 's', '.', 'E', 'x', 'p', 'l', 'i', 'c', 'i', 't', 'H', 't', 't', 'p', 'C',
|
||||
'o', 'n', 'f', 'i', 'g', 'H', '\000', 'R', '\022', 'e', 'x', 'p', 'l', 'i', 'c', 'i', 't', 'H', 't', 't', 'p', 'C', 'o', 'n', 'f',
|
||||
'i', 'g', '\022', '\226', '\001', '\n', '\036', 'u', 's', 'e', '_', 'd', 'o', 'w', 'n', 's', 't', 'r', 'e', 'a', 'm', '_', 'p', 'r', 'o',
|
||||
't', 'o', 'c', 'o', 'l', '_', 'c', 'o', 'n', 'f', 'i', 'g', '\030', '\004', ' ', '\001', '(', '\013', '2', 'O', '.', 'e', 'n', 'v', 'o',
|
||||
'y', '.', 'e', 'x', 't', 'e', 'n', 's', 'i', 'o', 'n', 's', '.', 'u', 'p', 's', 't', 'r', 'e', 'a', 'm', 's', '.', 'h', 't',
|
||||
't', 'p', '.', 'v', '3', '.', 'H', 't', 't', 'p', 'P', 'r', 'o', 't', 'o', 'c', 'o', 'l', 'O', 'p', 't', 'i', 'o', 'n', 's',
|
||||
'.', 'U', 's', 'e', 'D', 'o', 'w', 'n', 's', 't', 'r', 'e', 'a', 'm', 'H', 't', 't', 'p', 'C', 'o', 'n', 'f', 'i', 'g', 'H',
|
||||
'\000', 'R', '\033', 'u', 's', 'e', 'D', 'o', 'w', 'n', 's', 't', 'r', 'e', 'a', 'm', 'P', 'r', 'o', 't', 'o', 'c', 'o', 'l', 'C',
|
||||
'o', 'n', 'f', 'i', 'g', '\022', 'i', '\n', '\013', 'a', 'u', 't', 'o', '_', 'c', 'o', 'n', 'f', 'i', 'g', '\030', '\005', ' ', '\001', '(',
|
||||
'\013', '2', 'F', '.', 'e', 'n', 'v', 'o', 'y', '.', 'e', 'x', 't', 'e', 'n', 's', 'i', 'o', 'n', 's', '.', 'u', 'p', 's', 't',
|
||||
'r', 'e', 'a', 'm', 's', '.', 'h', 't', 't', 'p', '.', 'v', '3', '.', 'H', 't', 't', 'p', 'P', 'r', 'o', 't', 'o', 'c', 'o',
|
||||
'l', 'O', 'p', 't', 'i', 'o', 'n', 's', '.', 'A', 'u', 't', 'o', 'H', 't', 't', 'p', 'C', 'o', 'n', 'f', 'i', 'g', 'H', '\000',
|
||||
'R', '\n', 'a', 'u', 't', 'o', 'C', 'o', 'n', 'f', 'i', 'g', '\022', 'j', '\n', '\014', 'h', 't', 't', 'p', '_', 'f', 'i', 'l', 't',
|
||||
'e', 'r', 's', '\030', '\006', ' ', '\003', '(', '\013', '2', 'G', '.', 'e', 'n', 'v', 'o', 'y', '.', 'e', 'x', 't', 'e', 'n', 's', 'i',
|
||||
'o', 'n', 's', '.', 'f', 'i', 'l', 't', 'e', 'r', 's', '.', 'n', 'e', 't', 'w', 'o', 'r', 'k', '.', 'h', 't', 't', 'p', '_',
|
||||
'c', 'o', 'n', 'n', 'e', 'c', 't', 'i', 'o', 'n', '_', 'm', 'a', 'n', 'a', 'g', 'e', 'r', '.', 'v', '3', '.', 'H', 't', 't',
|
||||
'p', 'F', 'i', 'l', 't', 'e', 'r', 'R', '\013', 'h', 't', 't', 'p', 'F', 'i', 'l', 't', 'e', 'r', 's', '\022', 'd', '\n', '\030', 'h',
|
||||
'e', 'a', 'd', 'e', 'r', '_', 'v', 'a', 'l', 'i', 'd', 'a', 't', 'i', 'o', 'n', '_', 'c', 'o', 'n', 'f', 'i', 'g', '\030', '\007',
|
||||
' ', '\001', '(', '\013', '2', '*', '.', 'e', 'n', 'v', 'o', 'y', '.', 'c', 'o', 'n', 'f', 'i', 'g', '.', 'c', 'o', 'r', 'e', '.',
|
||||
'v', '3', '.', 'T', 'y', 'p', 'e', 'd', 'E', 'x', 't', 'e', 'n', 's', 'i', 'o', 'n', 'C', 'o', 'n', 'f', 'i', 'g', 'R', '\026',
|
||||
'h', 'e', 'a', 'd', 'e', 'r', 'V', 'a', 'l', 'i', 'd', 'a', 't', 'i', 'o', 'n', 'C', 'o', 'n', 'f', 'i', 'g', '\032', '\326', '\002',
|
||||
'\n', '\022', 'E', 'x', 'p', 'l', 'i', 'c', 'i', 't', 'H', 't', 't', 'p', 'C', 'o', 'n', 'f', 'i', 'g', '\022', '`', '\n', '\025', 'h',
|
||||
't', 't', 'p', '_', 'p', 'r', 'o', 't', 'o', 'c', 'o', 'l', '_', 'o', 'p', 't', 'i', 'o', 'n', 's', '\030', '\001', ' ', '\001', '(',
|
||||
'\013', '2', '*', '.', 'e', 'n', 'v', 'o', 'y', '.', 'c', 'o', 'n', 'f', 'i', 'g', '.', 'c', 'o', 'r', 'e', '.', 'v', '3', '.',
|
||||
'H', 't', 't', 'p', '1', 'P', 'r', 'o', 't', 'o', 'c', 'o', 'l', 'O', 'p', 't', 'i', 'o', 'n', 's', 'H', '\000', 'R', '\023', 'h',
|
||||
't', 't', 'p', 'P', 'r', 'o', 't', 'o', 'c', 'o', 'l', 'O', 'p', 't', 'i', 'o', 'n', 's', '\022', 'b', '\n', '\026', 'h', 't', 't',
|
||||
'p', '2', '_', 'p', 'r', 'o', 't', 'o', 'c', 'o', 'l', '_', 'o', 'p', 't', 'i', 'o', 'n', 's', '\030', '\002', ' ', '\001', '(', '\013',
|
||||
'2', '*', '.', 'e', 'n', 'v', 'o', 'y', '.', 'c', 'o', 'n', 'f', 'i', 'g', '.', 'c', 'o', 'r', 'e', '.', 'v', '3', '.', 'H',
|
||||
't', 't', 'p', '2', 'P', 'r', 'o', 't', 'o', 'c', 'o', 'l', 'O', 'p', 't', 'i', 'o', 'n', 's', 'H', '\000', 'R', '\024', 'h', 't',
|
||||
't', 'p', '2', 'P', 'r', 'o', 't', 'o', 'c', 'o', 'l', 'O', 'p', 't', 'i', 'o', 'n', 's', '\022', 'b', '\n', '\026', 'h', 't', 't',
|
||||
'p', '3', '_', 'p', 'r', 'o', 't', 'o', 'c', 'o', 'l', '_', 'o', 'p', 't', 'i', 'o', 'n', 's', '\030', '\003', ' ', '\001', '(', '\013',
|
||||
'2', '*', '.', 'e', 'n', 'v', 'o', 'y', '.', 'c', 'o', 'n', 'f', 'i', 'g', '.', 'c', 'o', 'r', 'e', '.', 'v', '3', '.', 'H',
|
||||
't', 't', 'p', '3', 'P', 'r', 'o', 't', 'o', 'c', 'o', 'l', 'O', 'p', 't', 'i', 'o', 'n', 's', 'H', '\000', 'R', '\024', 'h', 't',
|
||||
't', 'p', '3', 'P', 'r', 'o', 't', 'o', 'c', 'o', 'l', 'O', 'p', 't', 'i', 'o', 'n', 's', 'B', '\026', '\n', '\017', 'p', 'r', 'o',
|
||||
't', 'o', 'c', 'o', 'l', '_', 'c', 'o', 'n', 'f', 'i', 'g', '\022', '\003', '\370', 'B', '\001', '\032', '\275', '\002', '\n', '\027', 'U', 's', 'e',
|
||||
'D', 'o', 'w', 'n', 's', 't', 'r', 'e', 'a', 'm', 'H', 't', 't', 'p', 'C', 'o', 'n', 'f', 'i', 'g', '\022', '^', '\n', '\025', 'h',
|
||||
't', 't', 'p', '_', 'p', 'r', 'o', 't', 'o', 'c', 'o', 'l', '_', 'o', 'p', 't', 'i', 'o', 'n', 's', '\030', '\001', ' ', '\001', '(',
|
||||
'\013', '2', '*', '.', 'e', 'n', 'v', 'o', 'y', '.', 'c', 'o', 'n', 'f', 'i', 'g', '.', 'c', 'o', 'r', 'e', '.', 'v', '3', '.',
|
||||
'H', 't', 't', 'p', '1', 'P', 'r', 'o', 't', 'o', 'c', 'o', 'l', 'O', 'p', 't', 'i', 'o', 'n', 's', 'R', '\023', 'h', 't', 't',
|
||||
'p', 'P', 'r', 'o', 't', 'o', 'c', 'o', 'l', 'O', 'p', 't', 'i', 'o', 'n', 's', '\022', '`', '\n', '\026', 'h', 't', 't', 'p', '2',
|
||||
'_', 'p', 'r', 'o', 't', 'o', 'c', 'o', 'l', '_', 'o', 'p', 't', 'i', 'o', 'n', 's', '\030', '\002', ' ', '\001', '(', '\013', '2', '*',
|
||||
'.', 'e', 'n', 'v', 'o', 'y', '.', 'c', 'o', 'n', 'f', 'i', 'g', '.', 'c', 'o', 'r', 'e', '.', 'v', '3', '.', 'H', 't', 't',
|
||||
'p', '2', 'P', 'r', 'o', 't', 'o', 'c', 'o', 'l', 'O', 'p', 't', 'i', 'o', 'n', 's', 'R', '\024', 'h', 't', 't', 'p', '2', 'P',
|
||||
'r', 'o', 't', 'o', 'c', 'o', 'l', 'O', 'p', 't', 'i', 'o', 'n', 's', '\022', '`', '\n', '\026', 'h', 't', 't', 'p', '3', '_', 'p',
|
||||
'r', 'o', 't', 'o', 'c', 'o', 'l', '_', 'o', 'p', 't', 'i', 'o', 'n', 's', '\030', '\003', ' ', '\001', '(', '\013', '2', '*', '.', 'e',
|
||||
'n', 'v', 'o', 'y', '.', 'c', 'o', 'n', 'f', 'i', 'g', '.', 'c', 'o', 'r', 'e', '.', 'v', '3', '.', 'H', 't', 't', 'p', '3',
|
||||
'P', 'r', 'o', 't', 'o', 'c', 'o', 'l', 'O', 'p', 't', 'i', 'o', 'n', 's', 'R', '\024', 'h', 't', 't', 'p', '3', 'P', 'r', 'o',
|
||||
't', 'o', 'c', 'o', 'l', 'O', 'p', 't', 'i', 'o', 'n', 's', '\032', '\265', '\003', '\n', '\016', 'A', 'u', 't', 'o', 'H', 't', 't', 'p',
|
||||
'C', 'o', 'n', 'f', 'i', 'g', '\022', '^', '\n', '\025', 'h', 't', 't', 'p', '_', 'p', 'r', 'o', 't', 'o', 'c', 'o', 'l', '_', 'o',
|
||||
'p', 't', 'i', 'o', 'n', 's', '\030', '\001', ' ', '\001', '(', '\013', '2', '*', '.', 'e', 'n', 'v', 'o', 'y', '.', 'c', 'o', 'n', 'f',
|
||||
'i', 'g', '.', 'c', 'o', 'r', 'e', '.', 'v', '3', '.', 'H', 't', 't', 'p', '1', 'P', 'r', 'o', 't', 'o', 'c', 'o', 'l', 'O',
|
||||
'p', 't', 'i', 'o', 'n', 's', 'R', '\023', 'h', 't', 't', 'p', 'P', 'r', 'o', 't', 'o', 'c', 'o', 'l', 'O', 'p', 't', 'i', 'o',
|
||||
'n', 's', '\022', '`', '\n', '\026', 'h', 't', 't', 'p', '2', '_', 'p', 'r', 'o', 't', 'o', 'c', 'o', 'l', '_', 'o', 'p', 't', 'i',
|
||||
'o', 'n', 's', '\030', '\002', ' ', '\001', '(', '\013', '2', '*', '.', 'e', 'n', 'v', 'o', 'y', '.', 'c', 'o', 'n', 'f', 'i', 'g', '.',
|
||||
'c', 'o', 'r', 'e', '.', 'v', '3', '.', 'H', 't', 't', 'p', '2', 'P', 'r', 'o', 't', 'o', 'c', 'o', 'l', 'O', 'p', 't', 'i',
|
||||
'o', 'n', 's', 'R', '\024', 'h', 't', 't', 'p', '2', 'P', 'r', 'o', 't', 'o', 'c', 'o', 'l', 'O', 'p', 't', 'i', 'o', 'n', 's',
|
||||
'\022', '`', '\n', '\026', 'h', 't', 't', 'p', '3', '_', 'p', 'r', 'o', 't', 'o', 'c', 'o', 'l', '_', 'o', 'p', 't', 'i', 'o', 'n',
|
||||
's', '\030', '\003', ' ', '\001', '(', '\013', '2', '*', '.', 'e', 'n', 'v', 'o', 'y', '.', 'c', 'o', 'n', 'f', 'i', 'g', '.', 'c', 'o',
|
||||
'r', 'e', '.', 'v', '3', '.', 'H', 't', 't', 'p', '3', 'P', 'r', 'o', 't', 'o', 'c', 'o', 'l', 'O', 'p', 't', 'i', 'o', 'n',
|
||||
's', 'R', '\024', 'h', 't', 't', 'p', '3', 'P', 'r', 'o', 't', 'o', 'c', 'o', 'l', 'O', 'p', 't', 'i', 'o', 'n', 's', '\022', '\177',
|
||||
'\n', '!', 'a', 'l', 't', 'e', 'r', 'n', 'a', 't', 'e', '_', 'p', 'r', 'o', 't', 'o', 'c', 'o', 'l', 's', '_', 'c', 'a', 'c',
|
||||
'h', 'e', '_', 'o', 'p', 't', 'i', 'o', 'n', 's', '\030', '\004', ' ', '\001', '(', '\013', '2', '4', '.', 'e', 'n', 'v', 'o', 'y', '.',
|
||||
'c', 'o', 'n', 'f', 'i', 'g', '.', 'c', 'o', 'r', 'e', '.', 'v', '3', '.', 'A', 'l', 't', 'e', 'r', 'n', 'a', 't', 'e', 'P',
|
||||
'r', 'o', 't', 'o', 'c', 'o', 'l', 's', 'C', 'a', 'c', 'h', 'e', 'O', 'p', 't', 'i', 'o', 'n', 's', 'R', '\036', 'a', 'l', 't',
|
||||
'e', 'r', 'n', 'a', 't', 'e', 'P', 'r', 'o', 't', 'o', 'c', 'o', 'l', 's', 'C', 'a', 'c', 'h', 'e', 'O', 'p', 't', 'i', 'o',
|
||||
'n', 's', 'B', ' ', '\n', '\031', 'u', 'p', 's', 't', 'r', 'e', 'a', 'm', '_', 'p', 'r', 'o', 't', 'o', 'c', 'o', 'l', '_', 'o',
|
||||
'p', 't', 'i', 'o', 'n', 's', '\022', '\003', '\370', 'B', '\001', 'B', '\250', '\001', '\n', '0', 'i', 'o', '.', 'e', 'n', 'v', 'o', 'y', 'p',
|
||||
'r', 'o', 'x', 'y', '.', 'e', 'n', 'v', 'o', 'y', '.', 'e', 'x', 't', 'e', 'n', 's', 'i', 'o', 'n', 's', '.', 'u', 'p', 's',
|
||||
't', 'r', 'e', 'a', 'm', 's', '.', 'h', 't', 't', 'p', '.', 'v', '3', 'B', '\030', 'H', 't', 't', 'p', 'P', 'r', 'o', 't', 'o',
|
||||
'c', 'o', 'l', 'O', 'p', 't', 'i', 'o', 'n', 's', 'P', 'r', 'o', 't', 'o', 'P', '\001', 'Z', 'P', 'g', 'i', 't', 'h', 'u', 'b',
|
||||
'.', 'c', 'o', 'm', '/', 'e', 'n', 'v', 'o', 'y', 'p', 'r', 'o', 'x', 'y', '/', 'g', 'o', '-', 'c', 'o', 'n', 't', 'r', 'o',
|
||||
'l', '-', 'p', 'l', 'a', 'n', 'e', '/', 'e', 'n', 'v', 'o', 'y', '/', 'e', 'x', 't', 'e', 'n', 's', 'i', 'o', 'n', 's', '/',
|
||||
'u', 'p', 's', 't', 'r', 'e', 'a', 'm', 's', '/', 'h', 't', 't', 'p', '/', 'v', '3', ';', 'h', 't', 't', 'p', 'v', '3', '\272',
|
||||
'\200', '\310', '\321', '\006', '\002', '\020', '\002', 'b', '\006', 'p', 'r', 'o', 't', 'o', '3',
|
||||
};
|
||||
|
||||
static _upb_DefPool_Init *deps[6] = {
|
||||
&envoy_config_core_v3_extension_proto_upbdefinit,
|
||||
&envoy_config_core_v3_protocol_proto_upbdefinit,
|
||||
&envoy_extensions_filters_network_http_connection_manager_v3_http_connection_manager_proto_upbdefinit,
|
||||
&udpa_annotations_status_proto_upbdefinit,
|
||||
&validate_validate_proto_upbdefinit,
|
||||
NULL
|
||||
};
|
||||
|
||||
_upb_DefPool_Init envoy_extensions_upstreams_http_v3_http_protocol_options_proto_upbdefinit = {
|
||||
deps,
|
||||
&envoy_extensions_upstreams_http_v3_http_protocol_options_proto_upb_file_layout,
|
||||
"envoy/extensions/upstreams/http/v3/http_protocol_options.proto",
|
||||
UPB_STRINGVIEW_INIT(descriptor, 2490)
|
||||
};
|
||||
50
src/core/ext/upbdefs-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upbdefs.h
generated
Normal file
50
src/core/ext/upbdefs-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upbdefs.h
generated
Normal file
|
|
@ -0,0 +1,50 @@
|
|||
/* This file was generated by upb_generator from the input file:
|
||||
*
|
||||
* envoy/extensions/upstreams/http/v3/http_protocol_options.proto
|
||||
*
|
||||
* Do not edit -- your changes will be discarded when the file is
|
||||
* regenerated. */
|
||||
|
||||
#ifndef ENVOY_EXTENSIONS_UPSTREAMS_HTTP_V3_HTTP_PROTOCOL_OPTIONS_PROTO_UPBDEFS_H_
|
||||
#define ENVOY_EXTENSIONS_UPSTREAMS_HTTP_V3_HTTP_PROTOCOL_OPTIONS_PROTO_UPBDEFS_H_
|
||||
|
||||
#include "upb/reflection/def.h"
|
||||
#include "upb/reflection/internal/def_pool.h"
|
||||
#include "upb/port/def.inc"
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include "upb/reflection/def.h"
|
||||
|
||||
#include "upb/port/def.inc"
|
||||
|
||||
extern _upb_DefPool_Init envoy_extensions_upstreams_http_v3_http_protocol_options_proto_upbdefinit;
|
||||
|
||||
UPB_INLINE const upb_MessageDef *envoy_extensions_upstreams_http_v3_HttpProtocolOptions_getmsgdef(upb_DefPool *s) {
|
||||
_upb_DefPool_LoadDefInit(s, &envoy_extensions_upstreams_http_v3_http_protocol_options_proto_upbdefinit);
|
||||
return upb_DefPool_FindMessageByName(s, "envoy.extensions.upstreams.http.v3.HttpProtocolOptions");
|
||||
}
|
||||
|
||||
UPB_INLINE const upb_MessageDef *envoy_extensions_upstreams_http_v3_HttpProtocolOptions_ExplicitHttpConfig_getmsgdef(upb_DefPool *s) {
|
||||
_upb_DefPool_LoadDefInit(s, &envoy_extensions_upstreams_http_v3_http_protocol_options_proto_upbdefinit);
|
||||
return upb_DefPool_FindMessageByName(s, "envoy.extensions.upstreams.http.v3.HttpProtocolOptions.ExplicitHttpConfig");
|
||||
}
|
||||
|
||||
UPB_INLINE const upb_MessageDef *envoy_extensions_upstreams_http_v3_HttpProtocolOptions_UseDownstreamHttpConfig_getmsgdef(upb_DefPool *s) {
|
||||
_upb_DefPool_LoadDefInit(s, &envoy_extensions_upstreams_http_v3_http_protocol_options_proto_upbdefinit);
|
||||
return upb_DefPool_FindMessageByName(s, "envoy.extensions.upstreams.http.v3.HttpProtocolOptions.UseDownstreamHttpConfig");
|
||||
}
|
||||
|
||||
UPB_INLINE const upb_MessageDef *envoy_extensions_upstreams_http_v3_HttpProtocolOptions_AutoHttpConfig_getmsgdef(upb_DefPool *s) {
|
||||
_upb_DefPool_LoadDefInit(s, &envoy_extensions_upstreams_http_v3_http_protocol_options_proto_upbdefinit);
|
||||
return upb_DefPool_FindMessageByName(s, "envoy.extensions.upstreams.http.v3.HttpProtocolOptions.AutoHttpConfig");
|
||||
}
|
||||
|
||||
#ifdef __cplusplus
|
||||
} /* extern "C" */
|
||||
#endif
|
||||
|
||||
#include "upb/port/undef.inc"
|
||||
|
||||
#endif /* ENVOY_EXTENSIONS_UPSTREAMS_HTTP_V3_HTTP_PROTOCOL_OPTIONS_PROTO_UPBDEFS_H_ */
|
||||
|
|
@ -38,11 +38,14 @@
|
|||
#include "envoy/config/core/v3/address.upb.h"
|
||||
#include "envoy/config/core/v3/base.upb.h"
|
||||
#include "envoy/config/core/v3/config_source.upb.h"
|
||||
#include "envoy/config/core/v3/extension.upb.h"
|
||||
#include "envoy/config/core/v3/health_check.upb.h"
|
||||
#include "envoy/config/core/v3/protocol.upb.h"
|
||||
#include "envoy/config/endpoint/v3/endpoint.upb.h"
|
||||
#include "envoy/config/endpoint/v3/endpoint_components.upb.h"
|
||||
#include "envoy/extensions/clusters/aggregate/v3/cluster.upb.h"
|
||||
#include "envoy/extensions/transport_sockets/tls/v3/tls.upb.h"
|
||||
#include "envoy/extensions/upstreams/http/v3/http_protocol_options.upb.h"
|
||||
#include "google/protobuf/any.upb.h"
|
||||
#include "google/protobuf/duration.upb.h"
|
||||
#include "google/protobuf/wrappers.upb.h"
|
||||
|
|
@ -105,6 +108,10 @@ std::string XdsClusterResource::ToString() const {
|
|||
contents.push_back(
|
||||
absl::StrCat("common_tls_context=", common_tls_context.ToString()));
|
||||
}
|
||||
if (connection_idle_timeout != Duration::Zero()) {
|
||||
contents.push_back(absl::StrCat("connection_idle_timeout=",
|
||||
connection_idle_timeout.ToString()));
|
||||
}
|
||||
contents.push_back(
|
||||
absl::StrCat("max_concurrent_requests=", max_concurrent_requests));
|
||||
contents.push_back(absl::StrCat("override_host_statuses=",
|
||||
|
|
@ -400,6 +407,50 @@ void ParseLbPolicyConfig(const XdsResourceType::DecodeContext& context,
|
|||
}
|
||||
}
|
||||
|
||||
void ParseUpstreamConfig(
|
||||
const XdsResourceType::DecodeContext& context,
|
||||
const envoy_config_core_v3_TypedExtensionConfig* upstream_config,
|
||||
XdsClusterResource* cds_update, ValidationErrors* errors) {
|
||||
ValidationErrors::ScopedField field(errors, ".typed_config");
|
||||
const auto* typed_config =
|
||||
envoy_config_core_v3_TypedExtensionConfig_typed_config(upstream_config);
|
||||
auto extension = ExtractXdsExtension(context, typed_config, errors);
|
||||
if (!extension.has_value()) return;
|
||||
if (extension->type !=
|
||||
"envoy.extensions.upstreams.http.v3.HttpProtocolOptions") {
|
||||
ValidationErrors::ScopedField field(errors, ".type_url");
|
||||
errors->AddError("unsupported upstream config type");
|
||||
return;
|
||||
}
|
||||
absl::string_view* serialized_http_protocol_options =
|
||||
absl::get_if<absl::string_view>(&extension->value);
|
||||
if (serialized_http_protocol_options == nullptr) {
|
||||
errors->AddError("can't decode HttpProtocolOptions");
|
||||
return;
|
||||
}
|
||||
const auto* http_protocol_options =
|
||||
envoy_extensions_upstreams_http_v3_HttpProtocolOptions_parse(
|
||||
serialized_http_protocol_options->data(),
|
||||
serialized_http_protocol_options->size(), context.arena);
|
||||
if (http_protocol_options == nullptr) {
|
||||
errors->AddError("can't decode HttpProtocolOptions");
|
||||
return;
|
||||
}
|
||||
ValidationErrors::ScopedField field2(errors, ".common_http_protocol_options");
|
||||
const auto* common_http_protocol_options =
|
||||
envoy_extensions_upstreams_http_v3_HttpProtocolOptions_common_http_protocol_options(
|
||||
http_protocol_options);
|
||||
if (common_http_protocol_options != nullptr) {
|
||||
const auto* idle_timeout =
|
||||
envoy_config_core_v3_HttpProtocolOptions_idle_timeout(
|
||||
common_http_protocol_options);
|
||||
if (idle_timeout != nullptr) {
|
||||
ValidationErrors::ScopedField field(errors, ".idle_timeout");
|
||||
cds_update->connection_idle_timeout = ParseDuration(idle_timeout, errors);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
absl::StatusOr<std::shared_ptr<const XdsClusterResource>> CdsResourceParse(
|
||||
const XdsResourceType::DecodeContext& context,
|
||||
const envoy_config_cluster_v3_Cluster* cluster) {
|
||||
|
|
@ -467,6 +518,13 @@ absl::StatusOr<std::shared_ptr<const XdsClusterResource>> CdsResourceParse(
|
|||
cds_update->lrs_load_reporting_server.emplace(
|
||||
static_cast<const GrpcXdsBootstrap::GrpcXdsServer&>(context.server));
|
||||
}
|
||||
// Protocol options.
|
||||
auto* upstream_config =
|
||||
envoy_config_cluster_v3_Cluster_upstream_config(cluster);
|
||||
if (upstream_config != nullptr) {
|
||||
ValidationErrors::ScopedField field(&errors, ".upstream_config");
|
||||
ParseUpstreamConfig(context, upstream_config, cds_update.get(), &errors);
|
||||
}
|
||||
// The Cluster resource encodes the circuit breaking parameters in a list of
|
||||
// Thresholds messages, where each message specifies the parameters for a
|
||||
// particular RoutingPriority. we will look only at the first entry in the
|
||||
|
|
|
|||
|
|
@ -31,6 +31,7 @@
|
|||
#include "envoy/config/cluster/v3/cluster.upbdefs.h"
|
||||
#include "envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.h"
|
||||
#include "envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.h"
|
||||
#include "envoy/extensions/upstreams/http/v3/http_protocol_options.upbdefs.h"
|
||||
#include "upb/reflection/def.h"
|
||||
|
||||
#include <grpc/support/json.h>
|
||||
|
|
@ -89,6 +90,9 @@ struct XdsClusterResource : public XdsResourceType::ResourceData {
|
|||
// Tls Context used by clients
|
||||
CommonTlsContext common_tls_context;
|
||||
|
||||
// Connection idle timeout. Currently used only for SSA.
|
||||
Duration connection_idle_timeout = Duration::Hours(1);
|
||||
|
||||
// Maximum number of outstanding requests can be made to the upstream
|
||||
// cluster.
|
||||
uint32_t max_concurrent_requests = 1024;
|
||||
|
|
@ -101,6 +105,7 @@ struct XdsClusterResource : public XdsResourceType::ResourceData {
|
|||
return type == other.type && lb_policy_config == other.lb_policy_config &&
|
||||
lrs_load_reporting_server == other.lrs_load_reporting_server &&
|
||||
common_tls_context == other.common_tls_context &&
|
||||
connection_idle_timeout == other.connection_idle_timeout &&
|
||||
max_concurrent_requests == other.max_concurrent_requests &&
|
||||
outlier_detection == other.outlier_detection &&
|
||||
override_host_statuses == other.override_host_statuses;
|
||||
|
|
@ -126,6 +131,7 @@ class XdsClusterResourceType
|
|||
envoy_extensions_clusters_aggregate_v3_ClusterConfig_getmsgdef(symtab);
|
||||
envoy_extensions_transport_sockets_tls_v3_UpstreamTlsContext_getmsgdef(
|
||||
symtab);
|
||||
envoy_extensions_upstreams_http_v3_HttpProtocolOptions_getmsgdef(symtab);
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -44,9 +44,9 @@ namespace grpc_core {
|
|||
|
||||
// The interface hierarchy is as follows -
|
||||
// CallTracerAnnotationInterface
|
||||
// / \
|
||||
// | |
|
||||
// ClientCallTracer CallTracerInterface
|
||||
// / \
|
||||
// | |
|
||||
// CallAttemptTracer ServerCallTracer
|
||||
|
||||
// The base class for all tracer implementations.
|
||||
|
|
@ -175,7 +175,8 @@ class ServerCallTracerFactory {
|
|||
|
||||
virtual ~ServerCallTracerFactory() {}
|
||||
|
||||
virtual ServerCallTracer* CreateNewServerCallTracer(Arena* arena) = 0;
|
||||
virtual ServerCallTracer* CreateNewServerCallTracer(
|
||||
Arena* arena, const ChannelArgs& channel_args) = 0;
|
||||
|
||||
// Returns true if a server is to be traced, false otherwise.
|
||||
virtual bool IsServerTraced(const ChannelArgs& /*args*/) { return true; }
|
||||
|
|
|
|||
|
|
@ -331,6 +331,16 @@ auto MapResult(void (Derived::Call::*fn)(ServerMetadata&), Promise x,
|
|||
});
|
||||
}
|
||||
|
||||
template <typename Promise, typename Derived>
|
||||
auto MapResult(void (Derived::Call::*fn)(ServerMetadata&, Derived*), Promise x,
|
||||
FilterCallData<Derived>* call_data) {
|
||||
GPR_DEBUG_ASSERT(fn == &Derived::Call::OnServerTrailingMetadata);
|
||||
return Map(std::move(x), [call_data](ServerMetadataHandle md) {
|
||||
call_data->call.OnServerTrailingMetadata(*md, call_data->channel);
|
||||
return md;
|
||||
});
|
||||
}
|
||||
|
||||
template <typename Interceptor, typename Derived, typename SfinaeVoid = void>
|
||||
struct RunCallImpl;
|
||||
|
||||
|
|
@ -928,6 +938,19 @@ inline void InterceptServerTrailingMetadata(
|
|||
});
|
||||
}
|
||||
|
||||
template <typename Derived>
|
||||
inline void InterceptServerTrailingMetadata(
|
||||
void (Derived::Call::*fn)(ServerMetadata&, Derived*),
|
||||
typename Derived::Call* call, Derived* channel,
|
||||
CallSpineInterface* call_spine) {
|
||||
GPR_DEBUG_ASSERT(fn == &Derived::Call::OnServerTrailingMetadata);
|
||||
call_spine->server_trailing_metadata().sender.InterceptAndMap(
|
||||
[call, channel](ServerMetadataHandle md) {
|
||||
call->OnServerTrailingMetadata(*md, channel);
|
||||
return md;
|
||||
});
|
||||
}
|
||||
|
||||
template <typename Derived>
|
||||
inline void InterceptServerTrailingMetadata(
|
||||
absl::Status (Derived::Call::*fn)(ServerMetadata&),
|
||||
|
|
@ -941,11 +964,11 @@ inline void InterceptServerTrailingMetadata(
|
|||
});
|
||||
}
|
||||
|
||||
inline void InterceptFinalize(const NoInterceptor*, void*) {}
|
||||
inline void InterceptFinalize(const NoInterceptor*, void*, void*) {}
|
||||
|
||||
template <class Call>
|
||||
inline void InterceptFinalize(void (Call::*fn)(const grpc_call_final_info*),
|
||||
Call* call) {
|
||||
void*, Call* call) {
|
||||
GPR_DEBUG_ASSERT(fn == &Call::OnFinalize);
|
||||
GetContext<CallFinalization>()->Add(
|
||||
[call](const grpc_call_final_info* final_info) {
|
||||
|
|
@ -953,6 +976,17 @@ inline void InterceptFinalize(void (Call::*fn)(const grpc_call_final_info*),
|
|||
});
|
||||
}
|
||||
|
||||
template <class Derived>
|
||||
inline void InterceptFinalize(
|
||||
void (Derived::Call::*fn)(const grpc_call_final_info*, Derived*),
|
||||
Derived* channel, typename Derived::Call* call) {
|
||||
GPR_DEBUG_ASSERT(fn == &Derived::Call::OnFinalize);
|
||||
GetContext<CallFinalization>()->Add(
|
||||
[call, channel](const grpc_call_final_info* final_info) {
|
||||
call->OnFinalize(final_info, channel);
|
||||
});
|
||||
}
|
||||
|
||||
template <typename Derived>
|
||||
absl::enable_if_t<std::is_empty<FilterCallData<Derived>>::value,
|
||||
FilterCallData<Derived>*>
|
||||
|
|
@ -1050,7 +1084,8 @@ class ImplementChannelFilter : public ChannelFilter {
|
|||
promise_filter_detail::InterceptServerTrailingMetadata(
|
||||
&Derived::Call::OnServerTrailingMetadata, call,
|
||||
static_cast<Derived*>(this), call_spine);
|
||||
promise_filter_detail::InterceptFinalize(&Derived::Call::OnFinalize, call);
|
||||
promise_filter_detail::InterceptFinalize(&Derived::Call::OnFinalize,
|
||||
static_cast<Derived*>(this), call);
|
||||
}
|
||||
|
||||
// Polyfill for the original promise scheme.
|
||||
|
|
@ -1067,7 +1102,7 @@ class ImplementChannelFilter : public ChannelFilter {
|
|||
promise_filter_detail::InterceptServerToClientMessage(
|
||||
&Derived::Call::OnServerToClientMessage, call, call_args);
|
||||
promise_filter_detail::InterceptFinalize(
|
||||
&Derived::Call::OnFinalize,
|
||||
&Derived::Call::OnFinalize, static_cast<Derived*>(this),
|
||||
static_cast<typename Derived::Call*>(&call->call));
|
||||
return promise_filter_detail::MapResult(
|
||||
&Derived::Call::OnServerTrailingMetadata,
|
||||
|
|
|
|||
|
|
@ -104,8 +104,8 @@ absl::StatusOr<ServerCallTracerFilter> ServerCallTracerFilter::Create(
|
|||
} // namespace
|
||||
|
||||
void RegisterServerCallTracerFilter(CoreConfiguration::Builder* builder) {
|
||||
builder->channel_init()->RegisterFilter(GRPC_SERVER_CHANNEL,
|
||||
&ServerCallTracerFilter::kFilter);
|
||||
builder->channel_init()->RegisterFilter<ServerCallTracerFilter>(
|
||||
GRPC_SERVER_CHANNEL);
|
||||
}
|
||||
|
||||
} // namespace grpc_core
|
||||
|
|
|
|||
|
|
@ -33,7 +33,7 @@
|
|||
#include "absl/strings/str_cat.h"
|
||||
#include "absl/strings/str_format.h"
|
||||
|
||||
#include "src/core/lib/event_engine/posix_engine/native_dns_resolver.h"
|
||||
#include "src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.h"
|
||||
#include "src/core/lib/gpr/useful.h"
|
||||
#include "src/core/lib/gprpp/host_port.h"
|
||||
|
||||
|
|
@ -93,10 +93,11 @@ LookupHostnameBlocking(absl::string_view name, absl::string_view default_port) {
|
|||
|
||||
} // namespace
|
||||
|
||||
NativeDNSResolver::NativeDNSResolver(std::shared_ptr<EventEngine> event_engine)
|
||||
NativePosixDNSResolver::NativePosixDNSResolver(
|
||||
std::shared_ptr<EventEngine> event_engine)
|
||||
: event_engine_(std::move(event_engine)) {}
|
||||
|
||||
void NativeDNSResolver::LookupHostname(
|
||||
void NativePosixDNSResolver::LookupHostname(
|
||||
EventEngine::DNSResolver::LookupHostnameCallback on_resolved,
|
||||
absl::string_view name, absl::string_view default_port) {
|
||||
event_engine_->Run(
|
||||
|
|
@ -105,7 +106,7 @@ void NativeDNSResolver::LookupHostname(
|
|||
});
|
||||
}
|
||||
|
||||
void NativeDNSResolver::LookupSRV(
|
||||
void NativePosixDNSResolver::LookupSRV(
|
||||
EventEngine::DNSResolver::LookupSRVCallback on_resolved,
|
||||
absl::string_view /* name */) {
|
||||
// Not supported
|
||||
|
|
@ -115,7 +116,7 @@ void NativeDNSResolver::LookupSRV(
|
|||
});
|
||||
}
|
||||
|
||||
void NativeDNSResolver::LookupTXT(
|
||||
void NativePosixDNSResolver::LookupTXT(
|
||||
EventEngine::DNSResolver::LookupTXTCallback on_resolved,
|
||||
absl::string_view /* name */) {
|
||||
// Not supported
|
||||
|
|
@ -12,8 +12,8 @@
|
|||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
#ifndef GRPC_SRC_CORE_LIB_EVENT_ENGINE_POSIX_ENGINE_NATIVE_DNS_RESOLVER_H
|
||||
#define GRPC_SRC_CORE_LIB_EVENT_ENGINE_POSIX_ENGINE_NATIVE_DNS_RESOLVER_H
|
||||
#ifndef GRPC_SRC_CORE_LIB_EVENT_ENGINE_POSIX_ENGINE_NATIVE_POSIX_DNS_RESOLVER_H
|
||||
#define GRPC_SRC_CORE_LIB_EVENT_ENGINE_POSIX_ENGINE_NATIVE_POSIX_DNS_RESOLVER_H
|
||||
|
||||
#include <grpc/support/port_platform.h>
|
||||
|
||||
|
|
@ -34,9 +34,9 @@ namespace experimental {
|
|||
|
||||
// An asynchronous DNS resolver which uses the native platform's getaddrinfo
|
||||
// API. Only supports A/AAAA records.
|
||||
class NativeDNSResolver : public RefCountedDNSResolverInterface {
|
||||
class NativePosixDNSResolver : public RefCountedDNSResolverInterface {
|
||||
public:
|
||||
explicit NativeDNSResolver(std::shared_ptr<EventEngine> event_engine);
|
||||
explicit NativePosixDNSResolver(std::shared_ptr<EventEngine> event_engine);
|
||||
|
||||
void LookupHostname(
|
||||
EventEngine::DNSResolver::LookupHostnameCallback on_resolved,
|
||||
|
|
@ -58,4 +58,4 @@ class NativeDNSResolver : public RefCountedDNSResolverInterface {
|
|||
} // namespace grpc_event_engine
|
||||
|
||||
#endif // GRPC_POSIX_SOCKET_RESOLVE_ADDRESS
|
||||
#endif // GRPC_SRC_CORE_LIB_EVENT_ENGINE_POSIX_ENGINE_NATIVE_DNS_RESOLVER_H
|
||||
#endif // GRPC_SRC_CORE_LIB_EVENT_ENGINE_POSIX_ENGINE_NATIVE_POSIX_DNS_RESOLVER_H
|
||||
|
|
@ -45,7 +45,7 @@
|
|||
#include "src/core/lib/event_engine/poller.h"
|
||||
#include "src/core/lib/event_engine/posix.h"
|
||||
#include "src/core/lib/event_engine/posix_engine/grpc_polled_fd_posix.h"
|
||||
#include "src/core/lib/event_engine/posix_engine/native_dns_resolver.h"
|
||||
#include "src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.h"
|
||||
#include "src/core/lib/event_engine/posix_engine/tcp_socket_utils.h"
|
||||
#include "src/core/lib/event_engine/posix_engine/timer.h"
|
||||
#include "src/core/lib/event_engine/tcp_socket_utils.h"
|
||||
|
|
@ -571,10 +571,10 @@ PosixEventEngine::GetDNSResolver(
|
|||
std::move(*ares_resolver));
|
||||
#endif // GRPC_ARES == 1 && defined(GRPC_POSIX_SOCKET_ARES_EV_DRIVER)
|
||||
}
|
||||
GRPC_EVENT_ENGINE_DNS_TRACE("PosixEventEngine:%p creating NativeDNSResolver",
|
||||
this);
|
||||
GRPC_EVENT_ENGINE_DNS_TRACE(
|
||||
"PosixEventEngine:%p creating NativePosixDNSResolver", this);
|
||||
return std::make_unique<PosixEventEngine::PosixDNSResolver>(
|
||||
grpc_core::MakeOrphanable<NativeDNSResolver>(shared_from_this()));
|
||||
grpc_core::MakeOrphanable<NativePosixDNSResolver>(shared_from_this()));
|
||||
#endif // GRPC_POSIX_SOCKET_RESOLVE_ADDRESS
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,114 @@
|
|||
// Copyright 2024 The gRPC Authors
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
#include <grpc/support/port_platform.h>
|
||||
|
||||
#ifdef GPR_WINDOWS
|
||||
#include <inttypes.h>
|
||||
#include <string.h>
|
||||
#include <sys/types.h>
|
||||
|
||||
#include <string>
|
||||
|
||||
#include "absl/strings/str_format.h"
|
||||
|
||||
#include <grpc/event_engine/event_engine.h>
|
||||
|
||||
#include "src/core/lib/event_engine/windows/native_windows_dns_resolver.h"
|
||||
#include "src/core/lib/gprpp/host_port.h"
|
||||
#include "src/core/lib/gprpp/status_helper.h"
|
||||
#include "src/core/lib/iomgr/error.h"
|
||||
|
||||
namespace grpc_event_engine {
|
||||
namespace experimental {
|
||||
|
||||
namespace {
|
||||
absl::StatusOr<std::vector<EventEngine::ResolvedAddress>>
|
||||
LookupHostnameBlocking(absl::string_view name, absl::string_view default_port) {
|
||||
std::vector<EventEngine::ResolvedAddress> addresses;
|
||||
// parse name, splitting it into host and port parts
|
||||
std::string host;
|
||||
std::string port;
|
||||
grpc_core::SplitHostPort(name, &host, &port);
|
||||
if (host.empty()) {
|
||||
return absl::InvalidArgumentError(absl::StrCat("Unparseable name: ", name));
|
||||
}
|
||||
if (port.empty()) {
|
||||
if (default_port.empty()) {
|
||||
return absl::InvalidArgumentError(
|
||||
absl::StrFormat("No port in name %s or default_port argument", name));
|
||||
}
|
||||
port = std::string(default_port);
|
||||
}
|
||||
// Call getaddrinfo
|
||||
struct addrinfo hints;
|
||||
memset(&hints, 0, sizeof(hints));
|
||||
hints.ai_family = AF_UNSPEC; // ipv4 or ipv6
|
||||
hints.ai_socktype = SOCK_STREAM; // stream socket
|
||||
hints.ai_flags = AI_PASSIVE; // for wildcard IP address
|
||||
struct addrinfo* result = nullptr;
|
||||
int getaddrinfo_error =
|
||||
getaddrinfo(host.c_str(), port.c_str(), &hints, &result);
|
||||
if (getaddrinfo_error != 0) {
|
||||
return absl::UnknownError(
|
||||
absl::StrFormat("Address lookup failed for %s os_error: %s", name,
|
||||
grpc_core::StatusToString(
|
||||
GRPC_WSA_ERROR(WSAGetLastError(), "getaddrinfo"))
|
||||
.c_str()));
|
||||
}
|
||||
// Success path: collect and return all addresses
|
||||
for (auto* resp = result; resp != nullptr; resp = resp->ai_next) {
|
||||
addresses.emplace_back(resp->ai_addr, resp->ai_addrlen);
|
||||
}
|
||||
if (result) freeaddrinfo(result);
|
||||
return addresses;
|
||||
}
|
||||
|
||||
} // namespace
|
||||
NativeWindowsDNSResolver::NativeWindowsDNSResolver(
|
||||
std::shared_ptr<EventEngine> event_engine)
|
||||
: event_engine_(std::move(event_engine)) {}
|
||||
|
||||
void NativeWindowsDNSResolver::LookupHostname(
|
||||
EventEngine::DNSResolver::LookupHostnameCallback on_resolved,
|
||||
absl::string_view name, absl::string_view default_port) {
|
||||
event_engine_->Run(
|
||||
[name, default_port, on_resolved = std::move(on_resolved)]() mutable {
|
||||
on_resolved(LookupHostnameBlocking(name, default_port));
|
||||
});
|
||||
}
|
||||
|
||||
void NativeWindowsDNSResolver::LookupSRV(
|
||||
EventEngine::DNSResolver::LookupSRVCallback on_resolved,
|
||||
absl::string_view /* name */) {
|
||||
// Not supported
|
||||
event_engine_->Run([on_resolved = std::move(on_resolved)]() mutable {
|
||||
on_resolved(absl::UnimplementedError(
|
||||
"The Native resolver does not support looking up SRV records"));
|
||||
});
|
||||
}
|
||||
|
||||
void NativeWindowsDNSResolver::LookupTXT(
|
||||
EventEngine::DNSResolver::LookupTXTCallback on_resolved,
|
||||
absl::string_view /* name */) {
|
||||
// Not supported
|
||||
event_engine_->Run([on_resolved = std::move(on_resolved)]() mutable {
|
||||
on_resolved(absl::UnimplementedError(
|
||||
"The Native resolver does not support looking up TXT records"));
|
||||
});
|
||||
}
|
||||
|
||||
} // namespace experimental
|
||||
} // namespace grpc_event_engine
|
||||
|
||||
#endif // GPR_WINDOWS
|
||||
|
|
@ -0,0 +1,51 @@
|
|||
// Copyright 2024 The gRPC Authors
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
#ifndef GRPC_SRC_CORE_LIB_EVENT_ENGINE_WINDOWS_NATIVE_WINDOWS_DNS_RESOLVER_H
|
||||
#define GRPC_SRC_CORE_LIB_EVENT_ENGINE_WINDOWS_NATIVE_WINDOWS_DNS_RESOLVER_H
|
||||
|
||||
#include <grpc/support/port_platform.h>
|
||||
|
||||
#ifdef GPR_WINDOWS
|
||||
|
||||
#include <grpc/event_engine/event_engine.h>
|
||||
|
||||
namespace grpc_event_engine {
|
||||
namespace experimental {
|
||||
|
||||
// An asynchronous DNS resolver which uses the native platform's getaddrinfo
|
||||
// API. Only supports A/AAAA records.
|
||||
class NativeWindowsDNSResolver : public EventEngine::DNSResolver {
|
||||
public:
|
||||
explicit NativeWindowsDNSResolver(std::shared_ptr<EventEngine> event_engine);
|
||||
|
||||
void LookupHostname(
|
||||
EventEngine::DNSResolver::LookupHostnameCallback on_resolved,
|
||||
absl::string_view name, absl::string_view default_port) override;
|
||||
|
||||
void LookupSRV(EventEngine::DNSResolver::LookupSRVCallback on_resolved,
|
||||
absl::string_view name) override;
|
||||
|
||||
void LookupTXT(EventEngine::DNSResolver::LookupTXTCallback on_resolved,
|
||||
absl::string_view name) override;
|
||||
|
||||
private:
|
||||
std::shared_ptr<EventEngine> event_engine_;
|
||||
};
|
||||
|
||||
} // namespace experimental
|
||||
} // namespace grpc_event_engine
|
||||
|
||||
#endif
|
||||
|
||||
#endif // GRPC_SRC_CORE_LIB_EVENT_ENGINE_WINDOWS_NATIVE_WINDOWS_DNS_RESOLVER_H
|
||||
|
|
@ -37,6 +37,7 @@
|
|||
#include "src/core/lib/event_engine/utils.h"
|
||||
#include "src/core/lib/event_engine/windows/grpc_polled_fd_windows.h"
|
||||
#include "src/core/lib/event_engine/windows/iocp.h"
|
||||
#include "src/core/lib/event_engine/windows/native_windows_dns_resolver.h"
|
||||
#include "src/core/lib/event_engine/windows/windows_endpoint.h"
|
||||
#include "src/core/lib/event_engine/windows/windows_engine.h"
|
||||
#include "src/core/lib/event_engine/windows/windows_listener.h"
|
||||
|
|
@ -233,10 +234,9 @@ WindowsEventEngine::GetDNSResolver(
|
|||
return std::make_unique<WindowsEventEngine::WindowsDNSResolver>(
|
||||
std::move(*ares_resolver));
|
||||
#else // GRPC_ARES == 1 && defined(GRPC_WINDOWS_SOCKET_ARES_EV_DRIVER)
|
||||
// TODO(yijiem): Implement a basic A/AAAA-only native resolver in
|
||||
// WindowsEventEngine.
|
||||
(void)options;
|
||||
grpc_core::Crash("unimplemented");
|
||||
GRPC_EVENT_ENGINE_DNS_TRACE(
|
||||
"WindowsEventEngine:%p creating NativeWindowsDNSResolver", this);
|
||||
return std::make_unique<NativeWindowsDNSResolver>(shared_from_this());
|
||||
#endif // GRPC_ARES == 1 && defined(GRPC_WINDOWS_SOCKET_ARES_EV_DRIVER)
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -81,6 +81,15 @@ class DebugLocation {
|
|||
};
|
||||
#endif
|
||||
|
||||
template <typename T>
|
||||
struct ValueWithDebugLocation {
|
||||
// NOLINTNEXTLINE
|
||||
ValueWithDebugLocation(T&& value, DebugLocation debug_location = {})
|
||||
: value(std::forward<T>(value)), debug_location(debug_location) {}
|
||||
T value;
|
||||
GPR_NO_UNIQUE_ADDRESS DebugLocation debug_location;
|
||||
};
|
||||
|
||||
#define DEBUG_LOCATION ::grpc_core::DebugLocation(__FILE__, __LINE__)
|
||||
|
||||
} // namespace grpc_core
|
||||
|
|
|
|||
|
|
@ -45,6 +45,11 @@ inline absl::Status IntoStatus(absl::Status* status) {
|
|||
// can participate in TrySeq as result types that affect control flow.
|
||||
inline bool IsStatusOk(const absl::Status& status) { return status.ok(); }
|
||||
|
||||
template <typename T>
|
||||
inline bool IsStatusOk(const absl::StatusOr<T>& status) {
|
||||
return status.ok();
|
||||
}
|
||||
|
||||
template <typename To, typename From, typename SfinaeVoid = void>
|
||||
struct StatusCastImpl;
|
||||
|
||||
|
|
@ -59,20 +64,52 @@ struct StatusCastImpl<To, const To&> {
|
|||
};
|
||||
|
||||
template <typename T>
|
||||
struct StatusCastImpl<absl::StatusOr<T>, absl::Status> {
|
||||
static absl::StatusOr<T> Cast(absl::Status&& t) { return std::move(t); }
|
||||
struct StatusCastImpl<absl::Status, absl::StatusOr<T>> {
|
||||
static absl::Status Cast(absl::StatusOr<T>&& t) {
|
||||
return std::move(t.status());
|
||||
}
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
struct StatusCastImpl<absl::StatusOr<T>, const absl::Status&> {
|
||||
static absl::StatusOr<T> Cast(const absl::Status& t) { return t; }
|
||||
struct StatusCastImpl<absl::Status, absl::StatusOr<T>&> {
|
||||
static absl::Status Cast(const absl::StatusOr<T>& t) { return t.status(); }
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
struct StatusCastImpl<absl::Status, const absl::StatusOr<T>&> {
|
||||
static absl::Status Cast(const absl::StatusOr<T>& t) { return t.status(); }
|
||||
};
|
||||
|
||||
// StatusCast<> allows casting from one status-bearing type to another,
|
||||
// regardless of whether the status indicates success or failure.
|
||||
// This means that we can go from StatusOr to Status safely, but not in the
|
||||
// opposite direction.
|
||||
// For cases where the status is guaranteed to be a failure (and hence not
|
||||
// needing to preserve values) see FailureStatusCast<> below.
|
||||
template <typename To, typename From>
|
||||
To StatusCast(From&& from) {
|
||||
return StatusCastImpl<To, From>::Cast(std::forward<From>(from));
|
||||
}
|
||||
|
||||
template <typename To, typename From, typename SfinaeVoid = void>
|
||||
struct FailureStatusCastImpl : public StatusCastImpl<To, From> {};
|
||||
|
||||
template <typename T>
|
||||
struct FailureStatusCastImpl<absl::StatusOr<T>, absl::Status> {
|
||||
static absl::StatusOr<T> Cast(absl::Status&& t) { return std::move(t); }
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
struct FailureStatusCastImpl<absl::StatusOr<T>, const absl::Status&> {
|
||||
static absl::StatusOr<T> Cast(const absl::Status& t) { return t; }
|
||||
};
|
||||
|
||||
template <typename To, typename From>
|
||||
To FailureStatusCast(From&& from) {
|
||||
GPR_DEBUG_ASSERT(!IsStatusOk(from));
|
||||
return FailureStatusCastImpl<To, From>::Cast(std::forward<From>(from));
|
||||
}
|
||||
|
||||
} // namespace grpc_core
|
||||
|
||||
#endif // GRPC_SRC_CORE_LIB_PROMISE_DETAIL_STATUS_H
|
||||
|
|
|
|||
|
|
@ -33,7 +33,9 @@ class EventEngineWakeupScheduler {
|
|||
explicit EventEngineWakeupScheduler(
|
||||
std::shared_ptr<grpc_event_engine::experimental::EventEngine>
|
||||
event_engine)
|
||||
: event_engine_(std::move(event_engine)) {}
|
||||
: event_engine_(std::move(event_engine)) {
|
||||
GPR_ASSERT(event_engine_ != nullptr);
|
||||
}
|
||||
|
||||
template <typename ActivityType>
|
||||
class BoundScheduler
|
||||
|
|
|
|||
|
|
@ -192,6 +192,10 @@ class If<bool, T, F> {
|
|||
// If it returns failure, returns failure for the entire combinator.
|
||||
// If it returns true, evaluates the second promise.
|
||||
// If it returns false, evaluates the third promise.
|
||||
// If C is a constant, it's guaranteed that one of the promise factories
|
||||
// if_true or if_false will be evaluated before returning from this function.
|
||||
// This makes it safe to capture lambda arguments in the promise factory by
|
||||
// reference.
|
||||
template <typename C, typename T, typename F>
|
||||
promise_detail::If<C, T, F> If(C condition, T if_true, F if_false) {
|
||||
return promise_detail::If<C, T, F>(std::move(condition), std::move(if_true),
|
||||
|
|
|
|||
|
|
@ -113,9 +113,9 @@ class InterActivityPipe {
|
|||
if (center_ != nullptr) center_->MarkClosed();
|
||||
}
|
||||
|
||||
bool IsClose() { return center_->IsClosed(); }
|
||||
bool IsClosed() { return center_->IsClosed(); }
|
||||
|
||||
void MarkClose() {
|
||||
void MarkClosed() {
|
||||
if (center_ != nullptr) center_->MarkClosed();
|
||||
}
|
||||
|
||||
|
|
@ -146,6 +146,12 @@ class InterActivityPipe {
|
|||
return [center = center_]() { return center->Next(); };
|
||||
}
|
||||
|
||||
bool IsClose() { return center_->IsClosed(); }
|
||||
|
||||
void MarkClose() {
|
||||
if (center_ != nullptr) center_->MarkClosed();
|
||||
}
|
||||
|
||||
private:
|
||||
RefCountedPtr<Center> center_;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -103,14 +103,12 @@ class Center : public RefCounted<Center<T>> {
|
|||
|
||||
// Mark that the receiver is closed.
|
||||
void ReceiverClosed() {
|
||||
MutexLock lock(&mu_);
|
||||
ReleasableMutexLock lock(&mu_);
|
||||
if (receiver_closed_) return;
|
||||
receiver_closed_ = true;
|
||||
}
|
||||
|
||||
// Return whether the receiver is closed.
|
||||
bool IsClosed() {
|
||||
MutexLock lock(&mu_);
|
||||
return receiver_closed_;
|
||||
auto wakeups = send_wakers_.TakeWakeupSet();
|
||||
lock.Release();
|
||||
wakeups.Wakeup();
|
||||
}
|
||||
|
||||
private:
|
||||
|
|
@ -131,8 +129,8 @@ class MpscReceiver;
|
|||
template <typename T>
|
||||
class MpscSender {
|
||||
public:
|
||||
MpscSender(const MpscSender&) = delete;
|
||||
MpscSender& operator=(const MpscSender&) = delete;
|
||||
MpscSender(const MpscSender&) = default;
|
||||
MpscSender& operator=(const MpscSender&) = default;
|
||||
MpscSender(MpscSender&&) noexcept = default;
|
||||
MpscSender& operator=(MpscSender&&) noexcept = default;
|
||||
|
||||
|
|
@ -140,7 +138,10 @@ class MpscSender {
|
|||
// Resolves to true if sent, false if the receiver was closed (and the value
|
||||
// will never be successfully sent).
|
||||
auto Send(T t) {
|
||||
return [this, t = std::move(t)]() mutable { return center_->PollSend(t); };
|
||||
return [center = center_, t = std::move(t)]() mutable -> Poll<bool> {
|
||||
if (center == nullptr) return false;
|
||||
return center->PollSend(t);
|
||||
};
|
||||
}
|
||||
|
||||
bool UnbufferedImmediateSend(T t) {
|
||||
|
|
@ -170,7 +171,6 @@ class MpscReceiver {
|
|||
~MpscReceiver() {
|
||||
if (center_ != nullptr) center_->ReceiverClosed();
|
||||
}
|
||||
bool IsClosed() { return center_->IsClosed(); }
|
||||
void MarkClosed() {
|
||||
if (center_ != nullptr) center_->ReceiverClosed();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -227,40 +227,42 @@ void Party::RunLocked() {
|
|||
bool Party::RunParty() {
|
||||
ScopedActivity activity(this);
|
||||
promise_detail::Context<Arena> arena_ctx(arena_);
|
||||
return sync_.RunParty([this](int i) {
|
||||
// If the participant is null, skip.
|
||||
// This allows participants to complete whilst wakers still exist
|
||||
// somewhere.
|
||||
auto* participant = participants_[i].load(std::memory_order_acquire);
|
||||
if (participant == nullptr) {
|
||||
if (grpc_trace_promise_primitives.enabled()) {
|
||||
gpr_log(GPR_DEBUG, "%s[party] wakeup %d already complete",
|
||||
DebugTag().c_str(), i);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
absl::string_view name;
|
||||
return sync_.RunParty([this](int i) { return RunOneParticipant(i); });
|
||||
}
|
||||
|
||||
bool Party::RunOneParticipant(int i) {
|
||||
// If the participant is null, skip.
|
||||
// This allows participants to complete whilst wakers still exist
|
||||
// somewhere.
|
||||
auto* participant = participants_[i].load(std::memory_order_acquire);
|
||||
if (participant == nullptr) {
|
||||
if (grpc_trace_promise_primitives.enabled()) {
|
||||
name = participant->name();
|
||||
gpr_log(GPR_DEBUG, "%s[%s] begin job %d", DebugTag().c_str(),
|
||||
std::string(name).c_str(), i);
|
||||
gpr_log(GPR_DEBUG, "%s[party] wakeup %d already complete",
|
||||
DebugTag().c_str(), i);
|
||||
}
|
||||
// Poll the participant.
|
||||
currently_polling_ = i;
|
||||
bool done = participant->PollParticipantPromise();
|
||||
currently_polling_ = kNotPolling;
|
||||
if (done) {
|
||||
if (!name.empty()) {
|
||||
gpr_log(GPR_DEBUG, "%s[%s] end poll and finish job %d",
|
||||
DebugTag().c_str(), std::string(name).c_str(), i);
|
||||
}
|
||||
participants_[i].store(nullptr, std::memory_order_relaxed);
|
||||
} else if (!name.empty()) {
|
||||
gpr_log(GPR_DEBUG, "%s[%s] end poll", DebugTag().c_str(),
|
||||
std::string(name).c_str());
|
||||
return false;
|
||||
}
|
||||
absl::string_view name;
|
||||
if (grpc_trace_promise_primitives.enabled()) {
|
||||
name = participant->name();
|
||||
gpr_log(GPR_DEBUG, "%s[%s] begin job %d", DebugTag().c_str(),
|
||||
std::string(name).c_str(), i);
|
||||
}
|
||||
// Poll the participant.
|
||||
currently_polling_ = i;
|
||||
bool done = participant->PollParticipantPromise();
|
||||
currently_polling_ = kNotPolling;
|
||||
if (done) {
|
||||
if (!name.empty()) {
|
||||
gpr_log(GPR_DEBUG, "%s[%s] end poll and finish job %d",
|
||||
DebugTag().c_str(), std::string(name).c_str(), i);
|
||||
}
|
||||
return done;
|
||||
});
|
||||
participants_[i].store(nullptr, std::memory_order_relaxed);
|
||||
} else if (!name.empty()) {
|
||||
gpr_log(GPR_DEBUG, "%s[%s] end poll", DebugTag().c_str(),
|
||||
std::string(name).c_str());
|
||||
}
|
||||
return done;
|
||||
}
|
||||
|
||||
void Party::AddParticipants(Participant** participants, size_t count) {
|
||||
|
|
|
|||
|
|
@ -102,7 +102,8 @@ class PartySyncUsingAtomics {
|
|||
template <typename F>
|
||||
GRPC_MUST_USE_RESULT bool RunParty(F poll_one_participant) {
|
||||
uint64_t prev_state;
|
||||
do {
|
||||
iteration_.fetch_add(1, std::memory_order_relaxed);
|
||||
for (;;) {
|
||||
// Grab the current state, and clear the wakeup bits & add flag.
|
||||
prev_state = state_.fetch_and(kRefMask | kLocked | kAllocatedMask,
|
||||
std::memory_order_acquire);
|
||||
|
|
@ -133,9 +134,23 @@ class PartySyncUsingAtomics {
|
|||
// TODO(ctiller): consider mitigations for the accidental wakeup on owning
|
||||
// waker creation case -- I currently expect this will be more expensive
|
||||
// than this quick loop.
|
||||
} while (!state_.compare_exchange_weak(
|
||||
prev_state, (prev_state & (kRefMask | kAllocatedMask)),
|
||||
std::memory_order_acq_rel, std::memory_order_acquire));
|
||||
if (wake_after_poll_ == 0) {
|
||||
if (state_.compare_exchange_weak(
|
||||
prev_state, (prev_state & (kRefMask | kAllocatedMask)),
|
||||
std::memory_order_acq_rel, std::memory_order_acquire)) {
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
if (state_.compare_exchange_weak(
|
||||
prev_state,
|
||||
(prev_state & (kRefMask | kAllocatedMask | kLocked)) |
|
||||
wake_after_poll_,
|
||||
std::memory_order_acq_rel, std::memory_order_acquire)) {
|
||||
iteration_.fetch_add(1, std::memory_order_relaxed);
|
||||
wake_after_poll_ = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
@ -186,6 +201,11 @@ class PartySyncUsingAtomics {
|
|||
// Returns true if the caller should run the party.
|
||||
GRPC_MUST_USE_RESULT bool ScheduleWakeup(WakeupMask mask);
|
||||
|
||||
void WakeAfterPoll(WakeupMask mask) { wake_after_poll_ |= mask; }
|
||||
uint32_t iteration() const {
|
||||
return iteration_.load(std::memory_order_relaxed);
|
||||
}
|
||||
|
||||
private:
|
||||
bool UnreffedLast();
|
||||
|
||||
|
|
@ -225,6 +245,8 @@ class PartySyncUsingAtomics {
|
|||
static constexpr uint64_t kOneRef = 1ull << kRefShift;
|
||||
|
||||
std::atomic<uint64_t> state_;
|
||||
std::atomic<uint32_t> iteration_{0};
|
||||
WakeupMask wake_after_poll_ = 0;
|
||||
};
|
||||
|
||||
class PartySyncUsingMutex {
|
||||
|
|
@ -358,6 +380,20 @@ class Party : public Activity, private Wakeable {
|
|||
|
||||
Arena* arena() const { return arena_; }
|
||||
|
||||
// Return a promise that resolves to Empty{} when the current party poll is
|
||||
// complete.
|
||||
// This is useful for implementing batching and the like: we can hold some
|
||||
// action until the rest of the party resolves itself.
|
||||
auto AfterCurrentPoll() {
|
||||
GPR_DEBUG_ASSERT(Activity::current() == this);
|
||||
sync_.WakeAfterPoll(CurrentParticipant());
|
||||
return [this, iteration = sync_.iteration()]() -> Poll<Empty> {
|
||||
GPR_DEBUG_ASSERT(Activity::current() == this);
|
||||
if (iteration == sync_.iteration()) return Pending{};
|
||||
return Empty{};
|
||||
};
|
||||
}
|
||||
|
||||
class BulkSpawner {
|
||||
public:
|
||||
explicit BulkSpawner(Party* party) : party_(party) {}
|
||||
|
|
@ -548,6 +584,7 @@ class Party : public Activity, private Wakeable {
|
|||
|
||||
// Add a participant (backs Spawn, after type erasure to ParticipantFactory).
|
||||
void AddParticipants(Participant** participant, size_t count);
|
||||
bool RunOneParticipant(int i);
|
||||
|
||||
virtual grpc_event_engine::experimental::EventEngine* event_engine()
|
||||
const = 0;
|
||||
|
|
|
|||
|
|
@ -95,6 +95,30 @@ struct StatusCastImpl<absl::Status, const StatusFlag&> {
|
|||
}
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
struct FailureStatusCastImpl<absl::StatusOr<T>, StatusFlag> {
|
||||
static absl::StatusOr<T> Cast(StatusFlag flag) {
|
||||
GPR_DEBUG_ASSERT(!flag.ok());
|
||||
return absl::CancelledError();
|
||||
}
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
struct FailureStatusCastImpl<absl::StatusOr<T>, StatusFlag&> {
|
||||
static absl::StatusOr<T> Cast(StatusFlag flag) {
|
||||
GPR_DEBUG_ASSERT(!flag.ok());
|
||||
return absl::CancelledError();
|
||||
}
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
struct FailureStatusCastImpl<absl::StatusOr<T>, const StatusFlag&> {
|
||||
static absl::StatusOr<T> Cast(StatusFlag flag) {
|
||||
GPR_DEBUG_ASSERT(!flag.ok());
|
||||
return absl::CancelledError();
|
||||
}
|
||||
};
|
||||
|
||||
// A value if an operation was successful, or a failure flag if not.
|
||||
template <typename T>
|
||||
class ValueOrFailure {
|
||||
|
|
|
|||
|
|
@ -75,16 +75,16 @@ struct TryJoinTraits {
|
|||
}
|
||||
template <typename R>
|
||||
static R EarlyReturn(absl::Status x) {
|
||||
return StatusCast<R>(std::move(x));
|
||||
return FailureStatusCast<R>(std::move(x));
|
||||
}
|
||||
template <typename R>
|
||||
static R EarlyReturn(StatusFlag x) {
|
||||
return StatusCast<R>(x);
|
||||
return FailureStatusCast<R>(x);
|
||||
}
|
||||
template <typename R, typename T>
|
||||
static R EarlyReturn(const ValueOrFailure<T>& x) {
|
||||
GPR_ASSERT(!x.ok());
|
||||
return StatusCast<R>(Failure{});
|
||||
return FailureStatusCast<R>(Failure{});
|
||||
}
|
||||
template <typename... A>
|
||||
static auto FinalReturn(A&&... a) {
|
||||
|
|
|
|||
|
|
@ -76,7 +76,7 @@ struct TrySeqTraitsWithSfinae<absl::StatusOr<T>> {
|
|||
}
|
||||
template <typename R>
|
||||
static R ReturnValue(absl::StatusOr<T>&& status) {
|
||||
return StatusCast<R>(status.status());
|
||||
return FailureStatusCast<R>(status.status());
|
||||
}
|
||||
template <typename F, typename Elem>
|
||||
static auto CallSeqFactory(F& f, Elem&& elem, absl::StatusOr<T> value)
|
||||
|
|
@ -86,11 +86,26 @@ struct TrySeqTraitsWithSfinae<absl::StatusOr<T>> {
|
|||
template <typename Result, typename RunNext>
|
||||
static Poll<Result> CheckResultAndRunNext(absl::StatusOr<T> prior,
|
||||
RunNext run_next) {
|
||||
if (!prior.ok()) return StatusCast<Result>(prior.status());
|
||||
if (!prior.ok()) return FailureStatusCast<Result>(prior.status());
|
||||
return run_next(std::move(prior));
|
||||
}
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
struct AllowGenericTrySeqTraits {
|
||||
static constexpr bool value = true;
|
||||
};
|
||||
|
||||
template <>
|
||||
struct AllowGenericTrySeqTraits<absl::Status> {
|
||||
static constexpr bool value = false;
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
struct AllowGenericTrySeqTraits<absl::StatusOr<T>> {
|
||||
static constexpr bool value = false;
|
||||
};
|
||||
|
||||
template <typename T, typename AnyType = void>
|
||||
struct TakeValueExists {
|
||||
static constexpr bool value = false;
|
||||
|
|
@ -107,7 +122,7 @@ template <typename T>
|
|||
struct TrySeqTraitsWithSfinae<
|
||||
T, absl::enable_if_t<
|
||||
std::is_same<decltype(IsStatusOk(std::declval<T>())), bool>::value &&
|
||||
!TakeValueExists<T>::value,
|
||||
!TakeValueExists<T>::value && AllowGenericTrySeqTraits<T>::value,
|
||||
void>> {
|
||||
using UnwrappedType = void;
|
||||
using WrappedType = T;
|
||||
|
|
@ -121,7 +136,7 @@ struct TrySeqTraitsWithSfinae<
|
|||
}
|
||||
template <typename R>
|
||||
static R ReturnValue(T&& status) {
|
||||
return StatusCast<R>(std::move(status));
|
||||
return FailureStatusCast<R>(std::move(status));
|
||||
}
|
||||
template <typename Result, typename RunNext>
|
||||
static Poll<Result> CheckResultAndRunNext(T prior, RunNext run_next) {
|
||||
|
|
@ -133,7 +148,7 @@ template <typename T>
|
|||
struct TrySeqTraitsWithSfinae<
|
||||
T, absl::enable_if_t<
|
||||
std::is_same<decltype(IsStatusOk(std::declval<T>())), bool>::value &&
|
||||
TakeValueExists<T>::value,
|
||||
TakeValueExists<T>::value && AllowGenericTrySeqTraits<T>::value,
|
||||
void>> {
|
||||
using UnwrappedType = decltype(TakeValue(std::declval<T>()));
|
||||
using WrappedType = T;
|
||||
|
|
@ -148,7 +163,7 @@ struct TrySeqTraitsWithSfinae<
|
|||
template <typename R>
|
||||
static R ReturnValue(T&& status) {
|
||||
GPR_DEBUG_ASSERT(!IsStatusOk(status));
|
||||
return StatusCast<R>(status.status());
|
||||
return FailureStatusCast<R>(status.status());
|
||||
}
|
||||
template <typename Result, typename RunNext>
|
||||
static Poll<Result> CheckResultAndRunNext(T prior, RunNext run_next) {
|
||||
|
|
@ -170,7 +185,7 @@ struct TrySeqTraitsWithSfinae<absl::Status> {
|
|||
}
|
||||
template <typename R>
|
||||
static R ReturnValue(absl::Status&& status) {
|
||||
return StatusCast<R>(std::move(status));
|
||||
return FailureStatusCast<R>(std::move(status));
|
||||
}
|
||||
template <typename Result, typename RunNext>
|
||||
static Poll<Result> CheckResultAndRunNext(absl::Status prior,
|
||||
|
|
|
|||
|
|
@ -180,7 +180,7 @@ class Arena {
|
|||
template <typename T, typename... Args>
|
||||
T* New(Args&&... args) {
|
||||
T* t = static_cast<T*>(Alloc(sizeof(T)));
|
||||
Construct(t, std::forward<Args>(args)...);
|
||||
new (t) T(std::forward<Args>(args)...);
|
||||
return t;
|
||||
}
|
||||
|
||||
|
|
@ -333,7 +333,7 @@ class Arena {
|
|||
// value in Arena::PoolSizes, and so this may pessimize total
|
||||
// arena size.
|
||||
template <typename T, typename... Args>
|
||||
PoolPtr<T> MakePooled(Args&&... args) {
|
||||
static PoolPtr<T> MakePooled(Args&&... args) {
|
||||
return PoolPtr<T>(new T(std::forward<Args>(args)...), PooledDeleter());
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -39,6 +39,12 @@ namespace grpc_core {
|
|||
|
||||
TraceFlag grpc_authz_trace(false, "grpc_authz_api");
|
||||
|
||||
const NoInterceptor GrpcServerAuthzFilter::Call::OnServerInitialMetadata;
|
||||
const NoInterceptor GrpcServerAuthzFilter::Call::OnServerTrailingMetadata;
|
||||
const NoInterceptor GrpcServerAuthzFilter::Call::OnClientToServerMessage;
|
||||
const NoInterceptor GrpcServerAuthzFilter::Call::OnServerToClientMessage;
|
||||
const NoInterceptor GrpcServerAuthzFilter::Call::OnFinalize;
|
||||
|
||||
GrpcServerAuthzFilter::GrpcServerAuthzFilter(
|
||||
RefCountedPtr<grpc_auth_context> auth_context, grpc_endpoint* endpoint,
|
||||
RefCountedPtr<grpc_authorization_policy_provider> provider)
|
||||
|
|
@ -61,9 +67,8 @@ absl::StatusOr<GrpcServerAuthzFilter> GrpcServerAuthzFilter::Create(
|
|||
/*endpoint=*/nullptr, provider->Ref());
|
||||
}
|
||||
|
||||
bool GrpcServerAuthzFilter::IsAuthorized(
|
||||
const ClientMetadataHandle& initial_metadata) {
|
||||
EvaluateArgs args(initial_metadata.get(), &per_channel_evaluate_args_);
|
||||
bool GrpcServerAuthzFilter::IsAuthorized(ClientMetadata& initial_metadata) {
|
||||
EvaluateArgs args(&initial_metadata, &per_channel_evaluate_args_);
|
||||
if (GRPC_TRACE_FLAG_ENABLED(grpc_authz_trace)) {
|
||||
gpr_log(GPR_DEBUG,
|
||||
"checking request: url_path=%s, transport_security_type=%s, "
|
||||
|
|
@ -105,14 +110,12 @@ bool GrpcServerAuthzFilter::IsAuthorized(
|
|||
return false;
|
||||
}
|
||||
|
||||
ArenaPromise<ServerMetadataHandle> GrpcServerAuthzFilter::MakeCallPromise(
|
||||
CallArgs call_args, NextPromiseFactory next_promise_factory) {
|
||||
if (!IsAuthorized(call_args.client_initial_metadata)) {
|
||||
return ArenaPromise<ServerMetadataHandle>(
|
||||
Immediate(ServerMetadataFromStatus(absl::PermissionDeniedError(
|
||||
"Unauthorized RPC request rejected."))));
|
||||
absl::Status GrpcServerAuthzFilter::Call::OnClientInitialMetadata(
|
||||
ClientMetadata& md, GrpcServerAuthzFilter* filter) {
|
||||
if (!filter->IsAuthorized(md)) {
|
||||
return absl::PermissionDeniedError("Unauthorized RPC request rejected.");
|
||||
}
|
||||
return next_promise_factory(std::move(call_args));
|
||||
return absl::OkStatus();
|
||||
}
|
||||
|
||||
const grpc_channel_filter GrpcServerAuthzFilter::kFilterVtable =
|
||||
|
|
|
|||
|
|
@ -34,22 +34,31 @@
|
|||
|
||||
namespace grpc_core {
|
||||
|
||||
class GrpcServerAuthzFilter final : public ChannelFilter {
|
||||
class GrpcServerAuthzFilter final
|
||||
: public ImplementChannelFilter<GrpcServerAuthzFilter> {
|
||||
public:
|
||||
static const grpc_channel_filter kFilterVtable;
|
||||
|
||||
static absl::StatusOr<GrpcServerAuthzFilter> Create(const ChannelArgs& args,
|
||||
ChannelFilter::Args);
|
||||
|
||||
ArenaPromise<ServerMetadataHandle> MakeCallPromise(
|
||||
CallArgs call_args, NextPromiseFactory next_promise_factory) override;
|
||||
class Call {
|
||||
public:
|
||||
absl::Status OnClientInitialMetadata(ClientMetadata& md,
|
||||
GrpcServerAuthzFilter* filter);
|
||||
static const NoInterceptor OnServerInitialMetadata;
|
||||
static const NoInterceptor OnServerTrailingMetadata;
|
||||
static const NoInterceptor OnClientToServerMessage;
|
||||
static const NoInterceptor OnServerToClientMessage;
|
||||
static const NoInterceptor OnFinalize;
|
||||
};
|
||||
|
||||
private:
|
||||
GrpcServerAuthzFilter(
|
||||
RefCountedPtr<grpc_auth_context> auth_context, grpc_endpoint* endpoint,
|
||||
RefCountedPtr<grpc_authorization_policy_provider> provider);
|
||||
|
||||
bool IsAuthorized(const ClientMetadataHandle& initial_metadata);
|
||||
bool IsAuthorized(ClientMetadata& initial_metadata);
|
||||
|
||||
RefCountedPtr<grpc_auth_context> auth_context_;
|
||||
EvaluateArgs::PerChannelArgs per_channel_evaluate_args_;
|
||||
|
|
|
|||
|
|
@ -50,6 +50,9 @@ namespace grpc_core {
|
|||
class SliceBuffer {
|
||||
public:
|
||||
explicit SliceBuffer() { grpc_slice_buffer_init(&slice_buffer_); }
|
||||
explicit SliceBuffer(Slice slice) : SliceBuffer() {
|
||||
Append(std::move(slice));
|
||||
}
|
||||
SliceBuffer(const SliceBuffer& other) = delete;
|
||||
SliceBuffer(SliceBuffer&& other) noexcept {
|
||||
grpc_slice_buffer_init(&slice_buffer_);
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@ namespace grpc_core {
|
|||
void RegisterBuiltins(CoreConfiguration::Builder* builder) {
|
||||
RegisterServerCallTracerFilter(builder);
|
||||
builder->channel_init()
|
||||
->RegisterFilter(GRPC_CLIENT_LAME_CHANNEL, &LameClientFilter::kFilter)
|
||||
->RegisterFilter<LameClientFilter>(GRPC_CLIENT_LAME_CHANNEL)
|
||||
.Terminal();
|
||||
builder->channel_init()
|
||||
->RegisterFilter(GRPC_SERVER_CHANNEL, &Server::kServerTopFilter)
|
||||
|
|
|
|||
|
|
@ -859,7 +859,7 @@ grpc_error_handle FilterStackCall::Create(grpc_call_create_args* args,
|
|||
args->server->server_call_tracer_factory() != nullptr) {
|
||||
auto* server_call_tracer =
|
||||
args->server->server_call_tracer_factory()->CreateNewServerCallTracer(
|
||||
arena);
|
||||
arena, args->server->channel_args());
|
||||
if (server_call_tracer != nullptr) {
|
||||
// Note that we are setting both
|
||||
// GRPC_CONTEXT_CALL_TRACER_ANNOTATION_INTERFACE and
|
||||
|
|
@ -3426,7 +3426,7 @@ ServerPromiseBasedCall::ServerPromiseBasedCall(Arena* arena,
|
|||
if (args->server->server_call_tracer_factory() != nullptr) {
|
||||
auto* server_call_tracer =
|
||||
args->server->server_call_tracer_factory()->CreateNewServerCallTracer(
|
||||
arena);
|
||||
arena, args->server->channel_args());
|
||||
if (server_call_tracer != nullptr) {
|
||||
// Note that we are setting both
|
||||
// GRPC_CONTEXT_CALL_TRACER_ANNOTATION_INTERFACE and
|
||||
|
|
@ -4063,16 +4063,13 @@ void ServerCallSpine::CommitBatch(const grpc_op* ops, size_t nops,
|
|||
}
|
||||
|
||||
RefCountedPtr<CallSpineInterface> MakeServerCall(Server* server,
|
||||
Channel* channel) {
|
||||
const auto initial_size = channel->CallSizeEstimate();
|
||||
global_stats().IncrementCallInitialSize(initial_size);
|
||||
auto alloc = Arena::CreateWithAlloc(initial_size, sizeof(ServerCallSpine),
|
||||
channel->allocator());
|
||||
auto* call = new (alloc.second) ServerCallSpine(server, channel, alloc.first);
|
||||
return RefCountedPtr<ServerCallSpine>(call);
|
||||
Channel* channel,
|
||||
Arena* arena) {
|
||||
return RefCountedPtr<ServerCallSpine>(
|
||||
arena->New<ServerCallSpine>(server, channel, arena));
|
||||
}
|
||||
#else
|
||||
RefCountedPtr<CallSpineInterface> MakeServerCall(Server*, Channel*) {
|
||||
RefCountedPtr<CallSpineInterface> MakeServerCall(Server*, Channel*, Arena*) {
|
||||
Crash("not implemented");
|
||||
}
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -160,7 +160,8 @@ template <>
|
|||
struct ContextType<CallContext> {};
|
||||
|
||||
RefCountedPtr<CallSpineInterface> MakeServerCall(Server* server,
|
||||
Channel* channel);
|
||||
Channel* channel,
|
||||
Arena* arena);
|
||||
|
||||
} // namespace grpc_core
|
||||
|
||||
|
|
|
|||
|
|
@ -376,7 +376,6 @@ namespace grpc_core {
|
|||
|
||||
RegisteredCall* Channel::RegisterCall(const char* method, const char* host) {
|
||||
MutexLock lock(®istration_table_.mu);
|
||||
registration_table_.method_registration_attempts++;
|
||||
auto key = std::make_pair(std::string(host != nullptr ? host : ""),
|
||||
std::string(method != nullptr ? method : ""));
|
||||
auto rc_posn = registration_table_.map.find(key);
|
||||
|
|
|
|||
|
|
@ -103,7 +103,6 @@ struct CallRegistrationTable {
|
|||
// C++ or other wrapped language Channel that registered these calls).
|
||||
std::map<std::pair<std::string, std::string>, RegisteredCall> map
|
||||
ABSL_GUARDED_BY(mu);
|
||||
int method_registration_attempts ABSL_GUARDED_BY(mu) = 0;
|
||||
};
|
||||
|
||||
class Channel : public RefCounted<Channel>,
|
||||
|
|
@ -150,11 +149,6 @@ class Channel : public RefCounted<Channel>,
|
|||
return registration_table_.map.size();
|
||||
}
|
||||
|
||||
int TestOnlyRegistrationAttempts() {
|
||||
MutexLock lock(®istration_table_.mu);
|
||||
return registration_table_.method_registration_attempts;
|
||||
}
|
||||
|
||||
grpc_event_engine::experimental::EventEngine* event_engine() const {
|
||||
return channel_stack_->EventEngine();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -87,11 +87,30 @@ class ChannelInit {
|
|||
// Ensure that this filter is placed *after* the filters listed here.
|
||||
// By Build() time all filters listed here must also be registered against
|
||||
// the same channel stack type as this registration.
|
||||
template <typename Filter>
|
||||
FilterRegistration& After() {
|
||||
return After({&Filter::kFilter});
|
||||
}
|
||||
// Ensure that this filter is placed *before* the filters listed here.
|
||||
// By Build() time all filters listed here must also be registered against
|
||||
// the same channel stack type as this registration.
|
||||
template <typename Filter>
|
||||
FilterRegistration& Before() {
|
||||
return Before({&Filter::kFilter});
|
||||
}
|
||||
|
||||
// Ensure that this filter is placed *after* the filters listed here.
|
||||
// By Build() time all filters listed here must also be registered against
|
||||
// the same channel stack type as this registration.
|
||||
// TODO(ctiller): remove in favor of the version that does not mention
|
||||
// grpc_channel_filter
|
||||
FilterRegistration& After(
|
||||
std::initializer_list<const grpc_channel_filter*> filters);
|
||||
// Ensure that this filter is placed *before* the filters listed here.
|
||||
// By Build() time all filters listed here must also be registered against
|
||||
// the same channel stack type as this registration.
|
||||
// TODO(ctiller): remove in favor of the version that does not mention
|
||||
// grpc_channel_filter
|
||||
FilterRegistration& Before(
|
||||
std::initializer_list<const grpc_channel_filter*> filters);
|
||||
// Add a predicate for this filters inclusion.
|
||||
|
|
@ -145,9 +164,16 @@ class ChannelInit {
|
|||
// This occurs first during channel build time.
|
||||
// The FilterRegistration methods can be called to declaratively define
|
||||
// properties of the filter being registered.
|
||||
// TODO(ctiller): remove in favor of the version that does not mention
|
||||
// grpc_channel_filter
|
||||
FilterRegistration& RegisterFilter(grpc_channel_stack_type type,
|
||||
const grpc_channel_filter* filter,
|
||||
SourceLocation registration_source = {});
|
||||
template <typename Filter>
|
||||
FilterRegistration& RegisterFilter(
|
||||
grpc_channel_stack_type type, SourceLocation registration_source = {}) {
|
||||
return RegisterFilter(type, &Filter::kFilter, registration_source);
|
||||
}
|
||||
|
||||
// Register a post processor for the builder.
|
||||
// These run after the main graph has been placed into the builder.
|
||||
|
|
|
|||
|
|
@ -67,25 +67,26 @@ static bool g_shutting_down ABSL_GUARDED_BY(g_init_mu) = false;
|
|||
namespace grpc_core {
|
||||
void RegisterSecurityFilters(CoreConfiguration::Builder* builder) {
|
||||
builder->channel_init()
|
||||
->RegisterFilter(GRPC_CLIENT_SUBCHANNEL, &ClientAuthFilter::kFilter)
|
||||
->RegisterFilter<ClientAuthFilter>(GRPC_CLIENT_SUBCHANNEL)
|
||||
.IfHasChannelArg(GRPC_ARG_SECURITY_CONNECTOR);
|
||||
builder->channel_init()
|
||||
->RegisterFilter(GRPC_CLIENT_DIRECT_CHANNEL, &ClientAuthFilter::kFilter)
|
||||
->RegisterFilter<ClientAuthFilter>(GRPC_CLIENT_DIRECT_CHANNEL)
|
||||
.IfHasChannelArg(GRPC_ARG_SECURITY_CONNECTOR);
|
||||
if (IsV3ServerAuthFilterEnabled()) {
|
||||
builder->channel_init()
|
||||
->RegisterFilter(GRPC_SERVER_CHANNEL, &ServerAuthFilter::kFilter)
|
||||
->RegisterFilter<ServerAuthFilter>(GRPC_SERVER_CHANNEL)
|
||||
.IfHasChannelArg(GRPC_SERVER_CREDENTIALS_ARG);
|
||||
} else {
|
||||
builder->channel_init()
|
||||
->RegisterFilter(GRPC_SERVER_CHANNEL, &LegacyServerAuthFilter::kFilter)
|
||||
->RegisterFilter<LegacyServerAuthFilter>(GRPC_SERVER_CHANNEL)
|
||||
.IfHasChannelArg(GRPC_SERVER_CREDENTIALS_ARG);
|
||||
}
|
||||
builder->channel_init()
|
||||
->RegisterFilter(GRPC_SERVER_CHANNEL,
|
||||
&GrpcServerAuthzFilter::kFilterVtable)
|
||||
.IfHasChannelArg(GRPC_ARG_AUTHORIZATION_POLICY_PROVIDER)
|
||||
.After({&ServerAuthFilter::kFilter, &LegacyServerAuthFilter::kFilter});
|
||||
.After<ServerAuthFilter>()
|
||||
.After<LegacyServerAuthFilter>();
|
||||
}
|
||||
} // namespace grpc_core
|
||||
|
||||
|
|
|
|||
|
|
@ -51,6 +51,7 @@
|
|||
#include "src/core/lib/channel/channel_trace.h"
|
||||
#include "src/core/lib/channel/channelz.h"
|
||||
#include "src/core/lib/config/core_configuration.h"
|
||||
#include "src/core/lib/debug/stats.h"
|
||||
#include "src/core/lib/experiments/experiments.h"
|
||||
#include "src/core/lib/gpr/useful.h"
|
||||
#include "src/core/lib/gprpp/crash.h"
|
||||
|
|
@ -829,7 +830,11 @@ RefCountedPtr<channelz::ServerNode> CreateChannelzNode(
|
|||
Server::Server(const ChannelArgs& args)
|
||||
: channel_args_(args),
|
||||
channelz_node_(CreateChannelzNode(args)),
|
||||
server_call_tracer_factory_(ServerCallTracerFactory::Get(args)) {}
|
||||
server_call_tracer_factory_(ServerCallTracerFactory::Get(args)),
|
||||
max_time_in_pending_queue_(Duration::Seconds(
|
||||
channel_args_
|
||||
.GetInt(GRPC_ARG_SERVER_MAX_UNREQUESTED_TIME_IN_SERVER_SECONDS)
|
||||
.value_or(30))) {}
|
||||
|
||||
Server::~Server() {
|
||||
// Remove the cq pollsets from the config_fetcher.
|
||||
|
|
@ -1293,6 +1298,20 @@ Server::ChannelData::~ChannelData() {
|
|||
}
|
||||
}
|
||||
|
||||
Arena* Server::ChannelData::CreateArena() {
|
||||
const auto initial_size = channel_->CallSizeEstimate();
|
||||
global_stats().IncrementCallInitialSize(initial_size);
|
||||
return Arena::Create(initial_size, channel_->allocator());
|
||||
}
|
||||
|
||||
absl::StatusOr<CallInitiator> Server::ChannelData::CreateCall(
|
||||
ClientMetadata& client_initial_metadata, Arena* arena) {
|
||||
SetRegisteredMethodOnMetadata(client_initial_metadata);
|
||||
auto call = MakeServerCall(server_.get(), channel_.get(), arena);
|
||||
InitCall(call);
|
||||
return CallInitiator(std::move(call));
|
||||
}
|
||||
|
||||
void Server::ChannelData::InitTransport(RefCountedPtr<Server> server,
|
||||
RefCountedPtr<Channel> channel,
|
||||
size_t cq_idx, Transport* transport,
|
||||
|
|
@ -1325,13 +1344,7 @@ void Server::ChannelData::InitTransport(RefCountedPtr<Server> server,
|
|||
}
|
||||
if (transport->server_transport() != nullptr) {
|
||||
++accept_stream_types;
|
||||
transport->server_transport()->SetAcceptFunction(
|
||||
[this](ClientMetadata& metadata) {
|
||||
SetRegisteredMethodOnMetadata(metadata);
|
||||
auto call = MakeServerCall(server_.get(), channel_.get());
|
||||
InitCall(call);
|
||||
return CallInitiator(std::move(call));
|
||||
});
|
||||
transport->server_transport()->SetAcceptor(this);
|
||||
}
|
||||
GPR_ASSERT(accept_stream_types == 1);
|
||||
op->start_connectivity_watch = MakeOrphanable<ConnectivityWatcher>(this);
|
||||
|
|
|
|||
|
|
@ -218,7 +218,7 @@ class Server : public InternallyRefCounted<Server>,
|
|||
class AllocatingRequestMatcherBatch;
|
||||
class AllocatingRequestMatcherRegistered;
|
||||
|
||||
class ChannelData {
|
||||
class ChannelData final : public ServerTransport::Acceptor {
|
||||
public:
|
||||
ChannelData() = default;
|
||||
~ChannelData();
|
||||
|
|
@ -241,6 +241,10 @@ class Server : public InternallyRefCounted<Server>,
|
|||
grpc_channel_element* elem, CallArgs call_args, NextPromiseFactory);
|
||||
void InitCall(RefCountedPtr<CallSpineInterface> call);
|
||||
|
||||
Arena* CreateArena() override;
|
||||
absl::StatusOr<CallInitiator> CreateCall(
|
||||
ClientMetadata& client_initial_metadata, Arena* arena) override;
|
||||
|
||||
private:
|
||||
class ConnectivityWatcher;
|
||||
|
||||
|
|
@ -489,7 +493,7 @@ class Server : public InternallyRefCounted<Server>,
|
|||
0,
|
||||
channel_args_.GetInt(GRPC_ARG_SERVER_MAX_PENDING_REQUESTS_HARD_LIMIT)
|
||||
.value_or(3000)))};
|
||||
Duration max_time_in_pending_queue_{Duration::Seconds(30)};
|
||||
const Duration max_time_in_pending_queue_;
|
||||
absl::BitGen bitgen_ ABSL_GUARDED_BY(mu_call_);
|
||||
|
||||
std::list<ChannelData*> channels_;
|
||||
|
|
|
|||
|
|
@ -69,24 +69,26 @@ class PromiseEndpoint {
|
|||
auto Write(SliceBuffer data) {
|
||||
// Assert previous write finishes.
|
||||
GPR_ASSERT(!write_state_->complete.load(std::memory_order_relaxed));
|
||||
// TODO(ladynana): Replace this with `SliceBufferCast<>` when it is
|
||||
// available.
|
||||
grpc_slice_buffer_swap(write_state_->buffer.c_slice_buffer(),
|
||||
data.c_slice_buffer());
|
||||
// If `Write()` returns true immediately, the callback will not be called.
|
||||
// We still need to call our callback to pick up the result.
|
||||
write_state_->waker = Activity::current()->MakeNonOwningWaker();
|
||||
const bool completed = endpoint_->Write(
|
||||
[write_state = write_state_](absl::Status status) {
|
||||
write_state->Complete(std::move(status));
|
||||
},
|
||||
&write_state_->buffer, nullptr /* uses default arguments */);
|
||||
bool completed;
|
||||
if (data.Length() == 0) {
|
||||
completed = true;
|
||||
} else {
|
||||
// TODO(ladynana): Replace this with `SliceBufferCast<>` when it is
|
||||
// available.
|
||||
grpc_slice_buffer_swap(write_state_->buffer.c_slice_buffer(),
|
||||
data.c_slice_buffer());
|
||||
// If `Write()` returns true immediately, the callback will not be called.
|
||||
// We still need to call our callback to pick up the result.
|
||||
write_state_->waker = Activity::current()->MakeNonOwningWaker();
|
||||
completed = endpoint_->Write(
|
||||
[write_state = write_state_](absl::Status status) {
|
||||
write_state->Complete(std::move(status));
|
||||
},
|
||||
&write_state_->buffer, nullptr /* uses default arguments */);
|
||||
if (completed) write_state_->waker = Waker();
|
||||
}
|
||||
return If(
|
||||
completed,
|
||||
[this]() {
|
||||
write_state_->waker = Waker();
|
||||
return []() { return absl::OkStatus(); };
|
||||
},
|
||||
completed, []() { return []() { return absl::OkStatus(); }; },
|
||||
[this]() {
|
||||
return [write_state = write_state_]() -> Poll<absl::Status> {
|
||||
// If current write isn't finished return `Pending()`, else return
|
||||
|
|
|
|||
|
|
@ -291,9 +291,8 @@ void ForwardCall(CallHandler call_handler, CallInitiator call_initiator,
|
|||
return call_initiator.SpawnWaitable(
|
||||
"send_message",
|
||||
[msg = std::move(msg), call_initiator]() mutable {
|
||||
return call_initiator.CancelIfFails(Map(
|
||||
call_initiator.PushMessage(std::move(msg)),
|
||||
[](bool r) { return StatusFlag(r); }));
|
||||
return call_initiator.CancelIfFails(
|
||||
call_initiator.PushMessage(std::move(msg)));
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
@ -317,8 +316,7 @@ void ForwardCall(CallHandler call_handler, CallInitiator call_initiator,
|
|||
"recv_message",
|
||||
[msg = std::move(msg), call_handler]() mutable {
|
||||
return call_handler.CancelIfFails(
|
||||
Map(call_handler.PushMessage(std::move(msg)),
|
||||
[](bool r) { return StatusFlag(r); }));
|
||||
call_handler.PushMessage(std::move(msg)));
|
||||
});
|
||||
}),
|
||||
ImmediateOkStatus())),
|
||||
|
|
@ -334,4 +332,10 @@ void ForwardCall(CallHandler call_handler, CallInitiator call_initiator,
|
|||
});
|
||||
}
|
||||
|
||||
CallInitiatorAndHandler MakeCall(
|
||||
grpc_event_engine::experimental::EventEngine* event_engine, Arena* arena) {
|
||||
auto spine = CallSpine::Create(event_engine, arena);
|
||||
return {CallInitiator(spine), CallHandler(spine)};
|
||||
}
|
||||
|
||||
} // namespace grpc_core
|
||||
|
|
|
|||
|
|
@ -258,6 +258,20 @@ class CallSpineInterface {
|
|||
virtual Pipe<MessageHandle>& server_to_client_messages() = 0;
|
||||
virtual Pipe<ServerMetadataHandle>& server_trailing_metadata() = 0;
|
||||
virtual Latch<ServerMetadataHandle>& cancel_latch() = 0;
|
||||
// Add a callback to be called when server trailing metadata is received.
|
||||
void OnDone(absl::AnyInvocable<void()> fn) {
|
||||
if (on_done_ == nullptr) {
|
||||
on_done_ = std::move(fn);
|
||||
return;
|
||||
}
|
||||
on_done_ = [first = std::move(fn), next = std::move(on_done_)]() mutable {
|
||||
first();
|
||||
next();
|
||||
};
|
||||
}
|
||||
void CallOnDone() {
|
||||
if (on_done_ != nullptr) std::exchange(on_done_, nullptr)();
|
||||
}
|
||||
virtual Party& party() = 0;
|
||||
virtual void IncrementRefCount() = 0;
|
||||
virtual void Unref() = 0;
|
||||
|
|
@ -276,6 +290,11 @@ class CallSpineInterface {
|
|||
auto& c = cancel_latch();
|
||||
if (c.is_set()) return absl::nullopt;
|
||||
c.Set(std::move(metadata));
|
||||
CallOnDone();
|
||||
client_initial_metadata().sender.CloseWithError();
|
||||
server_initial_metadata().sender.CloseWithError();
|
||||
client_to_server_messages().sender.CloseWithError();
|
||||
server_to_client_messages().sender.CloseWithError();
|
||||
return absl::nullopt;
|
||||
}
|
||||
|
||||
|
|
@ -325,11 +344,18 @@ class CallSpineInterface {
|
|||
}
|
||||
});
|
||||
}
|
||||
|
||||
private:
|
||||
absl::AnyInvocable<void()> on_done_{nullptr};
|
||||
};
|
||||
|
||||
class CallSpine final : public CallSpineInterface {
|
||||
class CallSpine final : public CallSpineInterface, public Party {
|
||||
public:
|
||||
CallSpine() { Crash("unimplemented"); }
|
||||
static RefCountedPtr<CallSpine> Create(
|
||||
grpc_event_engine::experimental::EventEngine* event_engine,
|
||||
Arena* arena) {
|
||||
return RefCountedPtr<CallSpine>(arena->New<CallSpine>(event_engine, arena));
|
||||
}
|
||||
|
||||
Pipe<ClientMetadataHandle>& client_initial_metadata() override {
|
||||
return client_initial_metadata_;
|
||||
|
|
@ -347,23 +373,57 @@ class CallSpine final : public CallSpineInterface {
|
|||
return server_trailing_metadata_;
|
||||
}
|
||||
Latch<ServerMetadataHandle>& cancel_latch() override { return cancel_latch_; }
|
||||
Party& party() override { Crash("unimplemented"); }
|
||||
void IncrementRefCount() override { Crash("unimplemented"); }
|
||||
void Unref() override { Crash("unimplemented"); }
|
||||
Party& party() override { return *this; }
|
||||
void IncrementRefCount() override { Party::IncrementRefCount(); }
|
||||
void Unref() override { Party::Unref(); }
|
||||
|
||||
private:
|
||||
friend class Arena;
|
||||
CallSpine(grpc_event_engine::experimental::EventEngine* event_engine,
|
||||
Arena* arena)
|
||||
: Party(arena, 1), event_engine_(event_engine) {}
|
||||
|
||||
class ScopedContext : public ScopedActivity,
|
||||
public promise_detail::Context<Arena> {
|
||||
public:
|
||||
explicit ScopedContext(CallSpine* spine)
|
||||
: ScopedActivity(&spine->party()), Context<Arena>(spine->arena()) {}
|
||||
};
|
||||
|
||||
bool RunParty() override {
|
||||
ScopedContext context(this);
|
||||
return Party::RunParty();
|
||||
}
|
||||
|
||||
void PartyOver() override {
|
||||
Arena* a = arena();
|
||||
{
|
||||
ScopedContext context(this);
|
||||
CancelRemainingParticipants();
|
||||
a->DestroyManagedNewObjects();
|
||||
}
|
||||
this->~CallSpine();
|
||||
a->Destroy();
|
||||
}
|
||||
|
||||
grpc_event_engine::experimental::EventEngine* event_engine() const override {
|
||||
return event_engine_;
|
||||
}
|
||||
|
||||
// Initial metadata from client to server
|
||||
Pipe<ClientMetadataHandle> client_initial_metadata_;
|
||||
Pipe<ClientMetadataHandle> client_initial_metadata_{arena()};
|
||||
// Initial metadata from server to client
|
||||
Pipe<ServerMetadataHandle> server_initial_metadata_;
|
||||
Pipe<ServerMetadataHandle> server_initial_metadata_{arena()};
|
||||
// Messages travelling from the application to the transport.
|
||||
Pipe<MessageHandle> client_to_server_messages_;
|
||||
Pipe<MessageHandle> client_to_server_messages_{arena()};
|
||||
// Messages travelling from the transport to the application.
|
||||
Pipe<MessageHandle> server_to_client_messages_;
|
||||
Pipe<MessageHandle> server_to_client_messages_{arena()};
|
||||
// Trailing metadata from server to client
|
||||
Pipe<ServerMetadataHandle> server_trailing_metadata_;
|
||||
Pipe<ServerMetadataHandle> server_trailing_metadata_{arena()};
|
||||
// Latch that can be set to terminate the call
|
||||
Latch<ServerMetadataHandle> cancel_latch_;
|
||||
// Event engine associated with this call
|
||||
grpc_event_engine::experimental::EventEngine* const event_engine_;
|
||||
};
|
||||
|
||||
class CallInitiator {
|
||||
|
|
@ -405,7 +465,14 @@ class CallInitiator {
|
|||
|
||||
auto PushMessage(MessageHandle message) {
|
||||
GPR_DEBUG_ASSERT(Activity::current() == &spine_->party());
|
||||
return spine_->client_to_server_messages().sender.Push(std::move(message));
|
||||
return Map(
|
||||
spine_->client_to_server_messages().sender.Push(std::move(message)),
|
||||
[](bool r) { return StatusFlag(r); });
|
||||
}
|
||||
|
||||
void FinishSends() {
|
||||
GPR_DEBUG_ASSERT(Activity::current() == &spine_->party());
|
||||
spine_->client_to_server_messages().sender.Close();
|
||||
}
|
||||
|
||||
template <typename Promise>
|
||||
|
|
@ -413,6 +480,12 @@ class CallInitiator {
|
|||
return spine_->CancelIfFails(std::move(promise));
|
||||
}
|
||||
|
||||
void Cancel() {
|
||||
GPR_DEBUG_ASSERT(Activity::current() == &spine_->party());
|
||||
std::ignore =
|
||||
spine_->Cancel(ServerMetadataFromStatus(absl::CancelledError()));
|
||||
}
|
||||
|
||||
template <typename PromiseFactory>
|
||||
void SpawnGuarded(absl::string_view name, PromiseFactory promise_factory) {
|
||||
spine_->SpawnGuarded(name, std::move(promise_factory));
|
||||
|
|
@ -428,8 +501,10 @@ class CallInitiator {
|
|||
return spine_->party().SpawnWaitable(name, std::move(promise_factory));
|
||||
}
|
||||
|
||||
Arena* arena() { return spine_->party().arena(); }
|
||||
|
||||
private:
|
||||
const RefCountedPtr<CallSpineInterface> spine_;
|
||||
RefCountedPtr<CallSpineInterface> spine_;
|
||||
};
|
||||
|
||||
class CallHandler {
|
||||
|
|
@ -447,14 +522,16 @@ class CallHandler {
|
|||
});
|
||||
}
|
||||
|
||||
auto PushServerInitialMetadata(ClientMetadataHandle md) {
|
||||
auto PushServerInitialMetadata(ServerMetadataHandle md) {
|
||||
GPR_DEBUG_ASSERT(Activity::current() == &spine_->party());
|
||||
return Map(spine_->server_initial_metadata().sender.Push(std::move(md)),
|
||||
[](bool ok) { return StatusFlag(ok); });
|
||||
}
|
||||
|
||||
auto PushServerTrailingMetadata(ClientMetadataHandle md) {
|
||||
auto PushServerTrailingMetadata(ServerMetadataHandle md) {
|
||||
GPR_DEBUG_ASSERT(Activity::current() == &spine_->party());
|
||||
spine_->server_to_client_messages().sender.Close();
|
||||
spine_->CallOnDone();
|
||||
return Map(spine_->server_trailing_metadata().sender.Push(std::move(md)),
|
||||
[](bool ok) { return StatusFlag(ok); });
|
||||
}
|
||||
|
|
@ -466,9 +543,18 @@ class CallHandler {
|
|||
|
||||
auto PushMessage(MessageHandle message) {
|
||||
GPR_DEBUG_ASSERT(Activity::current() == &spine_->party());
|
||||
return spine_->server_to_client_messages().sender.Push(std::move(message));
|
||||
return Map(
|
||||
spine_->server_to_client_messages().sender.Push(std::move(message)),
|
||||
[](bool ok) { return StatusFlag(ok); });
|
||||
}
|
||||
|
||||
void Cancel(ServerMetadataHandle status) {
|
||||
GPR_DEBUG_ASSERT(Activity::current() == &spine_->party());
|
||||
std::ignore = spine_->Cancel(std::move(status));
|
||||
}
|
||||
|
||||
void OnDone(absl::AnyInvocable<void()> fn) { spine_->OnDone(std::move(fn)); }
|
||||
|
||||
template <typename Promise>
|
||||
auto CancelIfFails(Promise promise) {
|
||||
return spine_->CancelIfFails(std::move(promise));
|
||||
|
|
@ -489,8 +575,10 @@ class CallHandler {
|
|||
return spine_->party().SpawnWaitable(name, std::move(promise_factory));
|
||||
}
|
||||
|
||||
Arena* arena() { return spine_->party().arena(); }
|
||||
|
||||
private:
|
||||
const RefCountedPtr<CallSpineInterface> spine_;
|
||||
RefCountedPtr<CallSpineInterface> spine_;
|
||||
};
|
||||
|
||||
struct CallInitiatorAndHandler {
|
||||
|
|
@ -498,13 +586,16 @@ struct CallInitiatorAndHandler {
|
|||
CallHandler handler;
|
||||
};
|
||||
|
||||
CallInitiatorAndHandler MakeCall(
|
||||
grpc_event_engine::experimental::EventEngine* event_engine, Arena* arena);
|
||||
|
||||
template <typename CallHalf>
|
||||
auto OutgoingMessages(CallHalf& h) {
|
||||
auto OutgoingMessages(CallHalf h) {
|
||||
struct Wrapper {
|
||||
CallHalf& h;
|
||||
CallHalf h;
|
||||
auto Next() { return h.PullMessage(); }
|
||||
};
|
||||
return Wrapper{h};
|
||||
return Wrapper{std::move(h)};
|
||||
}
|
||||
|
||||
// Forward a call from `call_handler` to `call_initiator` (with initial metadata
|
||||
|
|
@ -925,14 +1016,24 @@ class ClientTransport {
|
|||
|
||||
class ServerTransport {
|
||||
public:
|
||||
// AcceptFunction takes initial metadata for a new call and returns a
|
||||
// CallInitiator object for it, for the transport to use to communicate with
|
||||
// the CallHandler object passed to the application.
|
||||
using AcceptFunction =
|
||||
absl::AnyInvocable<absl::StatusOr<CallInitiator>(ClientMetadata&) const>;
|
||||
// Acceptor helps transports create calls.
|
||||
class Acceptor {
|
||||
public:
|
||||
// Returns an arena that can be used to allocate memory for initial metadata
|
||||
// parsing, and later passed to CreateCall() as the underlying arena for
|
||||
// that call.
|
||||
virtual Arena* CreateArena() = 0;
|
||||
// Create a call at the server (or fail)
|
||||
// arena must have been previously allocated by CreateArena()
|
||||
virtual absl::StatusOr<CallInitiator> CreateCall(
|
||||
ClientMetadata& client_initial_metadata, Arena* arena) = 0;
|
||||
|
||||
protected:
|
||||
~Acceptor() = default;
|
||||
};
|
||||
|
||||
// Called once slightly after transport setup to register the accept function.
|
||||
virtual void SetAcceptFunction(AcceptFunction accept_function) = 0;
|
||||
virtual void SetAcceptor(Acceptor* acceptor) = 0;
|
||||
|
||||
protected:
|
||||
~ServerTransport() = default;
|
||||
|
|
|
|||
|
|
@ -29,10 +29,5 @@ int ChannelTestPeer::registered_calls() const {
|
|||
->TestOnlyRegisteredCalls();
|
||||
}
|
||||
|
||||
int ChannelTestPeer::registration_attempts() const {
|
||||
return grpc_core::Channel::FromC(channel_->c_channel_)
|
||||
->TestOnlyRegistrationAttempts();
|
||||
}
|
||||
|
||||
} // namespace testing
|
||||
} // namespace grpc
|
||||
|
|
|
|||
|
|
@ -42,6 +42,58 @@
|
|||
#include "src/cpp/ext/otel/otel_plugin.h"
|
||||
|
||||
namespace grpc {
|
||||
|
||||
namespace internal {
|
||||
|
||||
bool CsmServerSelector(const grpc_core::ChannelArgs& args) {
|
||||
return args.GetBool(GRPC_ARG_XDS_ENABLED_SERVER).value_or(false);
|
||||
}
|
||||
|
||||
bool CsmChannelTargetSelector(absl::string_view target) {
|
||||
auto uri = grpc_core::URI::Parse(target);
|
||||
if (!uri.ok()) {
|
||||
gpr_log(GPR_ERROR, "Failed to parse URI: %s", std::string(target).c_str());
|
||||
return false;
|
||||
}
|
||||
// CSM channels should have an "xds" scheme
|
||||
if (uri->scheme() != "xds") {
|
||||
return false;
|
||||
}
|
||||
// If set, the authority should be TD
|
||||
if (!uri->authority().empty() &&
|
||||
uri->authority() != "traffic-director-global.xds.googleapis.com") {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
class CsmOpenTelemetryPluginOption
|
||||
: public grpc::internal::InternalOpenTelemetryPluginOption {
|
||||
public:
|
||||
CsmOpenTelemetryPluginOption()
|
||||
: labels_injector_(std::make_unique<internal::ServiceMeshLabelsInjector>(
|
||||
google::cloud::otel::MakeResourceDetector()
|
||||
->Detect()
|
||||
.GetAttributes())) {}
|
||||
|
||||
bool IsActiveOnClientChannel(absl::string_view target) const override {
|
||||
return CsmChannelTargetSelector(target);
|
||||
}
|
||||
|
||||
bool IsActiveOnServer(const grpc_core::ChannelArgs& args) const override {
|
||||
return CsmServerSelector(args);
|
||||
}
|
||||
|
||||
const grpc::internal::LabelsInjector* labels_injector() const override {
|
||||
return labels_injector_.get();
|
||||
}
|
||||
|
||||
private:
|
||||
std::unique_ptr<internal::ServiceMeshLabelsInjector> labels_injector_;
|
||||
};
|
||||
|
||||
} // namespace internal
|
||||
|
||||
namespace experimental {
|
||||
|
||||
//
|
||||
|
|
@ -78,9 +130,7 @@ CsmObservabilityBuilder::SetGenericMethodAttributeFilter(
|
|||
}
|
||||
|
||||
absl::StatusOr<CsmObservability> CsmObservabilityBuilder::BuildAndRegister() {
|
||||
builder_->SetServerSelector([](const grpc_core::ChannelArgs& args) {
|
||||
return args.GetBool(GRPC_ARG_XDS_ENABLED_SERVER).value_or(false);
|
||||
});
|
||||
builder_->SetServerSelector(internal::CsmServerSelector);
|
||||
builder_->SetTargetSelector(internal::CsmChannelTargetSelector);
|
||||
builder_->SetLabelsInjector(
|
||||
std::make_unique<internal::ServiceMeshLabelsInjector>(
|
||||
|
|
@ -91,27 +141,10 @@ absl::StatusOr<CsmObservability> CsmObservabilityBuilder::BuildAndRegister() {
|
|||
return CsmObservability();
|
||||
}
|
||||
|
||||
} // namespace experimental
|
||||
|
||||
namespace internal {
|
||||
|
||||
bool CsmChannelTargetSelector(absl::string_view target) {
|
||||
auto uri = grpc_core::URI::Parse(target);
|
||||
if (!uri.ok()) {
|
||||
gpr_log(GPR_ERROR, "Failed to parse URI: %s", std::string(target).c_str());
|
||||
return false;
|
||||
}
|
||||
// CSM channels should have an "xds" scheme
|
||||
if (uri->scheme() != "xds") {
|
||||
return false;
|
||||
}
|
||||
// If set, the authority should be TD
|
||||
if (!uri->authority().empty() &&
|
||||
uri->authority() != "traffic-director-global.xds.googleapis.com") {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
std::unique_ptr<OpenTelemetryPluginOption> MakeCsmOpenTelemetryPluginOption() {
|
||||
return std::make_unique<grpc::internal::CsmOpenTelemetryPluginOption>();
|
||||
}
|
||||
|
||||
} // namespace internal
|
||||
} // namespace experimental
|
||||
|
||||
} // namespace grpc
|
||||
|
|
|
|||
|
|
@ -404,7 +404,7 @@ ServiceMeshLabelsInjector::ServiceMeshLabelsInjector(
|
|||
}
|
||||
|
||||
std::unique_ptr<LabelsIterable> ServiceMeshLabelsInjector::GetLabels(
|
||||
grpc_metadata_batch* incoming_initial_metadata) {
|
||||
grpc_metadata_batch* incoming_initial_metadata) const {
|
||||
auto peer_metadata =
|
||||
incoming_initial_metadata->Take(grpc_core::XEnvoyPeerMetadata());
|
||||
return std::make_unique<MeshLabelsIterable>(
|
||||
|
|
@ -414,7 +414,7 @@ std::unique_ptr<LabelsIterable> ServiceMeshLabelsInjector::GetLabels(
|
|||
|
||||
void ServiceMeshLabelsInjector::AddLabels(
|
||||
grpc_metadata_batch* outgoing_initial_metadata,
|
||||
LabelsIterable* labels_from_incoming_metadata) {
|
||||
LabelsIterable* labels_from_incoming_metadata) const {
|
||||
// On the server, if the labels from incoming metadata did not have a
|
||||
// non-empty base64 encoded "x-envoy-peer-metadata", do not perform metadata
|
||||
// exchange.
|
||||
|
|
|
|||
|
|
@ -43,12 +43,12 @@ class ServiceMeshLabelsInjector : public LabelsInjector {
|
|||
// Read the incoming initial metadata to get the set of labels to be added to
|
||||
// metrics.
|
||||
std::unique_ptr<LabelsIterable> GetLabels(
|
||||
grpc_metadata_batch* incoming_initial_metadata) override;
|
||||
grpc_metadata_batch* incoming_initial_metadata) const override;
|
||||
|
||||
// Modify the outgoing initial metadata with metadata information to be sent
|
||||
// to the peer.
|
||||
void AddLabels(grpc_metadata_batch* outgoing_initial_metadata,
|
||||
LabelsIterable* labels_from_incoming_metadata) override;
|
||||
LabelsIterable* labels_from_incoming_metadata) const override;
|
||||
|
||||
private:
|
||||
std::vector<std::pair<absl::string_view, std::string>> local_labels_;
|
||||
|
|
|
|||
|
|
@ -265,7 +265,7 @@ void OpenCensusServerCallTracer::RecordEnd(
|
|||
|
||||
grpc_core::ServerCallTracer*
|
||||
OpenCensusServerCallTracerFactory::CreateNewServerCallTracer(
|
||||
grpc_core::Arena* arena) {
|
||||
grpc_core::Arena* arena, const grpc_core::ChannelArgs& /*args*/) {
|
||||
return arena->ManagedNew<OpenCensusServerCallTracer>();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -31,7 +31,7 @@ class OpenCensusServerCallTracerFactory
|
|||
: public grpc_core::ServerCallTracerFactory {
|
||||
public:
|
||||
grpc_core::ServerCallTracer* CreateNewServerCallTracer(
|
||||
grpc_core::Arena* arena) override;
|
||||
grpc_core::Arena* arena, const grpc_core::ChannelArgs& /*args*/) override;
|
||||
};
|
||||
|
||||
} // namespace internal
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue